[svn:parrot] r47545 - in branches/gsoc_threads: . compilers/data_json compilers/imcc compilers/opsc compilers/opsc/gen compilers/opsc/gen/Ops compilers/opsc/gen/Ops/Compiler compilers/opsc/gen/Ops/Trans compilers/opsc/src compilers/opsc/src/Ops compilers/opsc/src/Ops/Compiler compilers/opsc/src/Ops/Trans compilers/pct compilers/pct/src/PAST compilers/pct/src/PCT compilers/pct/src/POST compilers/pge compilers/tge config/auto config/auto/cpu/i386 config/auto/cpu/ppc config/auto/cpu/sun4 config/auto/cpu/x86_64 config/auto/sizes config/auto/zlib config/gen config/gen/config_pm config/gen/makefiles config/gen/platform/ansi config/gen/platform/generic config/gen/platform/solaris config/gen/platform/win32 config/init config/init/hints config/inter docs docs/book/draft docs/book/pct docs/book/pir docs/dev docs/pdds docs/pdds/draft docs/user/pir editor examples/benchmarks examples/embed examples/io examples/json examples/languages/abc examples/languages/squaak examples/langua ges/squaak/doc examples/languages/squaak/src/builtins examples/languages/squaak/t examples/library examples/nci examples/pasm examples/pge examples/pir examples/pir/befunge examples/sdl/lcd examples/sdl/minesweeper examples/shootout examples/tge/branch examples/tools examples/tutorial ext/nqp-rx ext/nqp-rx/src/stage0 include/parrot include/parrot/oplib lib/Parrot lib/Parrot/Configure/Options lib/Parrot/Configure/Options/Conf lib/Parrot/Configure/Options/Test lib/Parrot/Configure/Step lib/Parrot/Docs/Section lib/Parrot/Harness lib/Parrot/OpTrans lib/Parrot/Ops2c lib/Parrot/Ops2pm lib/Parrot/Test ports/cygwin ports/debian ports/fedora/2.3.0 ports/suse/2.2.0 runtime/parrot/languages runtime/parrot/library runtime/parrot/library/Archive runtime/parrot/library/CGI runtime/parrot/library/Config runtime/parrot/library/Configure runtime/parrot/library/Digest runtime/parrot/library/HTTP runtime/parrot/library/LWP runtime/parrot/library/Math runtime/parrot/library/PGE runtime/parrot/l ibrary/Stream runtime/parrot/library/TAP runtime/parrot/library/Test/Builder src src/call src/dynoplibs src/gc src/interp src/io src/ops src/packfile src/pmc src/runcore src/string src/string/encoding t t/codingstd t/compilers/imcc/imcpasm t/compilers/imcc/syn t/compilers/opsc t/compilers/pct t/compilers/pge/p5regex t/compilers/pge/perl6regex t/compilers/tge t/dynoplibs t/dynpmc t/examples t/library t/native_pbc t/native_pbc/testdata t/oo t/op t/pmc t/pmc/testlib t/src t/steps/auto t/steps/gen t/steps/init t/steps/init/hints t/steps/inter t/tools t/tools/ops2cutils t/tools/ops2pm tools/build tools/dev tools/docs tools/install tools/util

Chandon at svn.parrot.org Chandon at svn.parrot.org
Thu Jun 10 21:09:26 UTC 2010


Author: Chandon
Date: Thu Jun 10 21:09:12 2010
New Revision: 47545
URL: https://trac.parrot.org/parrot/changeset/47545

Log:
[gsoc threads] Merge from trunk; add coop_threads example.

Added:
   branches/gsoc_threads/compilers/opsc/
      - copied from r47544, trunk/compilers/opsc/
   branches/gsoc_threads/examples/pir/coop_threads.pir
   branches/gsoc_threads/include/parrot/oplib/core_ops.h
      - copied unchanged from r47544, trunk/include/parrot/oplib/core_ops.h
   branches/gsoc_threads/include/parrot/oplib/ops.h
      - copied unchanged from r47544, trunk/include/parrot/oplib/ops.h
   branches/gsoc_threads/include/parrot/opsenum.h
      - copied unchanged from r47544, trunk/include/parrot/opsenum.h
   branches/gsoc_threads/runtime/parrot/library/LWP/   (props changed)
      - copied from r47544, trunk/runtime/parrot/library/LWP/
   branches/gsoc_threads/src/dynoplibs/bit.ops
      - copied unchanged from r47544, trunk/src/dynoplibs/bit.ops
   branches/gsoc_threads/src/dynoplibs/debug.ops
      - copied unchanged from r47544, trunk/src/dynoplibs/debug.ops
   branches/gsoc_threads/src/dynoplibs/io.ops
      - copied unchanged from r47544, trunk/src/dynoplibs/io.ops
   branches/gsoc_threads/src/dynoplibs/sys.ops
      - copied unchanged from r47544, trunk/src/dynoplibs/sys.ops
   branches/gsoc_threads/src/dynoplibs/trans.ops
      - copied unchanged from r47544, trunk/src/dynoplibs/trans.ops
   branches/gsoc_threads/src/ops/core_ops.c
      - copied unchanged from r47544, trunk/src/ops/core_ops.c
   branches/gsoc_threads/src/pmc/bytebuffer.pmc
      - copied unchanged from r47544, trunk/src/pmc/bytebuffer.pmc
   branches/gsoc_threads/src/string/encoding/ucs4.c
      - copied unchanged from r47544, trunk/src/string/encoding/ucs4.c
   branches/gsoc_threads/src/string/encoding/ucs4.h
      - copied unchanged from r47544, trunk/src/string/encoding/ucs4.h
   branches/gsoc_threads/t/compilers/opsc/
      - copied from r47544, trunk/t/compilers/opsc/
   branches/gsoc_threads/t/dynoplibs/bit.t
      - copied unchanged from r47544, trunk/t/dynoplibs/bit.t
   branches/gsoc_threads/t/dynoplibs/debug.t
      - copied unchanged from r47544, trunk/t/dynoplibs/debug.t
   branches/gsoc_threads/t/dynoplibs/io-old.t
      - copied unchanged from r47544, trunk/t/dynoplibs/io-old.t
   branches/gsoc_threads/t/dynoplibs/io.t
      - copied unchanged from r47544, trunk/t/dynoplibs/io.t
   branches/gsoc_threads/t/dynoplibs/pmc_pow.t
      - copied unchanged from r47544, trunk/t/dynoplibs/pmc_pow.t
   branches/gsoc_threads/t/dynoplibs/string_pmc_bitwise.t
      - copied unchanged from r47544, trunk/t/dynoplibs/string_pmc_bitwise.t
   branches/gsoc_threads/t/dynoplibs/sysinfo.t
      - copied unchanged from r47544, trunk/t/dynoplibs/sysinfo.t
   branches/gsoc_threads/t/dynoplibs/time.t
      - copied unchanged from r47544, trunk/t/dynoplibs/time.t
   branches/gsoc_threads/t/dynoplibs/time_old.t
      - copied unchanged from r47544, trunk/t/dynoplibs/time_old.t
   branches/gsoc_threads/t/dynoplibs/trans-infnan.t
      - copied unchanged from r47544, trunk/t/dynoplibs/trans-infnan.t
   branches/gsoc_threads/t/dynoplibs/trans-old.t
      - copied unchanged from r47544, trunk/t/dynoplibs/trans-old.t
   branches/gsoc_threads/t/dynoplibs/trans.t
      - copied unchanged from r47544, trunk/t/dynoplibs/trans.t
   branches/gsoc_threads/t/library/distutils.t
      - copied unchanged from r47544, trunk/t/library/distutils.t
   branches/gsoc_threads/t/native_pbc/integer.pbc
      - copied unchanged from r47544, trunk/t/native_pbc/integer.pbc
   branches/gsoc_threads/t/native_pbc/number.pbc
      - copied unchanged from r47544, trunk/t/native_pbc/number.pbc
   branches/gsoc_threads/t/native_pbc/string.pbc
      - copied unchanged from r47544, trunk/t/native_pbc/string.pbc
   branches/gsoc_threads/t/pmc/bytebuffer.t
      - copied unchanged from r47544, trunk/t/pmc/bytebuffer.t
   branches/gsoc_threads/tools/dev/mk_packfile_pbc
      - copied unchanged from r47544, trunk/tools/dev/mk_packfile_pbc
Replaced:
   branches/gsoc_threads/compilers/opsc/Defines.mak
      - copied unchanged from r47544, trunk/compilers/opsc/Defines.mak
   branches/gsoc_threads/compilers/opsc/Rules.mak
      - copied unchanged from r47544, trunk/compilers/opsc/Rules.mak
   branches/gsoc_threads/compilers/opsc/TODO
      - copied unchanged from r47544, trunk/compilers/opsc/TODO
   branches/gsoc_threads/compilers/opsc/gen/
      - copied from r47544, trunk/compilers/opsc/gen/
   branches/gsoc_threads/compilers/opsc/gen/Ops/   (props changed)
      - copied from r47544, trunk/compilers/opsc/gen/Ops/
   branches/gsoc_threads/compilers/opsc/gen/Ops/Compiler/   (props changed)
      - copied from r47544, trunk/compilers/opsc/gen/Ops/Compiler/
   branches/gsoc_threads/compilers/opsc/gen/Ops/Compiler/IGNOREME
      - copied unchanged from r47544, trunk/compilers/opsc/gen/Ops/Compiler/IGNOREME
   branches/gsoc_threads/compilers/opsc/gen/Ops/Trans/   (props changed)
      - copied from r47544, trunk/compilers/opsc/gen/Ops/Trans/
   branches/gsoc_threads/compilers/opsc/gen/Ops/Trans/IGNOREME
      - copied unchanged from r47544, trunk/compilers/opsc/gen/Ops/Trans/IGNOREME
   branches/gsoc_threads/compilers/opsc/ops2c.nqp
      - copied unchanged from r47544, trunk/compilers/opsc/ops2c.nqp
   branches/gsoc_threads/compilers/opsc/opsc.pir
      - copied unchanged from r47544, trunk/compilers/opsc/opsc.pir
   branches/gsoc_threads/compilers/opsc/src/
      - copied from r47544, trunk/compilers/opsc/src/
   branches/gsoc_threads/compilers/opsc/src/Ops/
      - copied from r47544, trunk/compilers/opsc/src/Ops/
   branches/gsoc_threads/compilers/opsc/src/Ops/Compiler/
      - copied from r47544, trunk/compilers/opsc/src/Ops/Compiler/
   branches/gsoc_threads/compilers/opsc/src/Ops/Compiler.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/Compiler.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/Compiler/Actions.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/Compiler/Actions.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/Compiler/Grammar.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/Compiler/Grammar.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/Emitter.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/Emitter.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/File.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/File.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/Op.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/Op.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/OpLib.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/OpLib.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/Renumberer.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/Renumberer.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/Trans/
      - copied from r47544, trunk/compilers/opsc/src/Ops/Trans/
   branches/gsoc_threads/compilers/opsc/src/Ops/Trans.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/Trans.pm
   branches/gsoc_threads/compilers/opsc/src/Ops/Trans/C.pm
      - copied unchanged from r47544, trunk/compilers/opsc/src/Ops/Trans/C.pm
   branches/gsoc_threads/compilers/opsc/src/builtins.pir
      - copied unchanged from r47544, trunk/compilers/opsc/src/builtins.pir
   branches/gsoc_threads/runtime/parrot/library/LWP/Protocol.pir
      - copied unchanged from r47544, trunk/runtime/parrot/library/LWP/Protocol.pir
   branches/gsoc_threads/runtime/parrot/library/LWP/UserAgent.pir
      - copied unchanged from r47544, trunk/runtime/parrot/library/LWP/UserAgent.pir
   branches/gsoc_threads/t/compilers/opsc/01-parse.t
      - copied unchanged from r47544, trunk/t/compilers/opsc/01-parse.t
   branches/gsoc_threads/t/compilers/opsc/02-parse-all-ops.t
      - copied unchanged from r47544, trunk/t/compilers/opsc/02-parse-all-ops.t
   branches/gsoc_threads/t/compilers/opsc/03-past.t
      - copied unchanged from r47544, trunk/t/compilers/opsc/03-past.t
   branches/gsoc_threads/t/compilers/opsc/04-op.t
      - copied unchanged from r47544, trunk/t/compilers/opsc/04-op.t
   branches/gsoc_threads/t/compilers/opsc/05-oplib.t
      - copied unchanged from r47544, trunk/t/compilers/opsc/05-oplib.t
   branches/gsoc_threads/t/compilers/opsc/06-opsfile.t
      - copied unchanged from r47544, trunk/t/compilers/opsc/06-opsfile.t
   branches/gsoc_threads/t/compilers/opsc/07-emitter.t
      - copied unchanged from r47544, trunk/t/compilers/opsc/07-emitter.t
   branches/gsoc_threads/t/compilers/opsc/common.pir
      - copied unchanged from r47544, trunk/t/compilers/opsc/common.pir
Deleted:
   branches/gsoc_threads/config/auto/extra_nci_thunks.pm
   branches/gsoc_threads/lib/Parrot/Op.pm
   branches/gsoc_threads/lib/Parrot/OpTrans/
   branches/gsoc_threads/lib/Parrot/OpTrans.pm
   branches/gsoc_threads/lib/Parrot/Ops2c/
   branches/gsoc_threads/lib/Parrot/Ops2pm/
   branches/gsoc_threads/lib/Parrot/Ops2pm.pm
   branches/gsoc_threads/lib/Parrot/OpsFile.pm
   branches/gsoc_threads/lib/Parrot/OpsRenumber.pm
   branches/gsoc_threads/runtime/parrot/library/LWP.pir
   branches/gsoc_threads/src/ops/debug.ops
   branches/gsoc_threads/src/ops/ops.num
   branches/gsoc_threads/t/op/01-parse_ops.t
   branches/gsoc_threads/t/op/debuginfo.t
   branches/gsoc_threads/t/op/io.t
   branches/gsoc_threads/t/op/sysinfo.t
   branches/gsoc_threads/t/op/time_old.t
   branches/gsoc_threads/t/op/trans.t
   branches/gsoc_threads/t/op/trans_old.t
   branches/gsoc_threads/t/steps/auto/extra_nci_thunks-01.t
   branches/gsoc_threads/t/tools/ops2cutils/
   branches/gsoc_threads/t/tools/ops2pm/
   branches/gsoc_threads/tools/build/ops2pm.pl
   branches/gsoc_threads/tools/dev/opsrenumber.pl
Modified:
   branches/gsoc_threads/   (props changed)
   branches/gsoc_threads/DEPRECATED.pod
   branches/gsoc_threads/MANIFEST
   branches/gsoc_threads/MANIFEST.SKIP
   branches/gsoc_threads/MANIFEST.generated
   branches/gsoc_threads/NEWS
   branches/gsoc_threads/PBC_COMPAT
   branches/gsoc_threads/compilers/data_json/Rules.mak   (props changed)
   branches/gsoc_threads/compilers/imcc/Rules.in   (props changed)
   branches/gsoc_threads/compilers/imcc/debug.c
   branches/gsoc_threads/compilers/imcc/debug.h
   branches/gsoc_threads/compilers/imcc/imc.c
   branches/gsoc_threads/compilers/imcc/imc.h
   branches/gsoc_threads/compilers/imcc/imcc.l
   branches/gsoc_threads/compilers/imcc/imcc.y
   branches/gsoc_threads/compilers/imcc/imclexer.c
   branches/gsoc_threads/compilers/imcc/imcparser.c
   branches/gsoc_threads/compilers/imcc/imcparser.h
   branches/gsoc_threads/compilers/imcc/instructions.c
   branches/gsoc_threads/compilers/imcc/instructions.h
   branches/gsoc_threads/compilers/imcc/main.c
   branches/gsoc_threads/compilers/imcc/optimizer.c
   branches/gsoc_threads/compilers/imcc/parser.h
   branches/gsoc_threads/compilers/imcc/parser_util.c
   branches/gsoc_threads/compilers/imcc/pbc.c
   branches/gsoc_threads/compilers/imcc/pcc.c
   branches/gsoc_threads/compilers/imcc/reg_alloc.c
   branches/gsoc_threads/compilers/imcc/symreg.c
   branches/gsoc_threads/compilers/pct/Rules.mak   (contents, props changed)
   branches/gsoc_threads/compilers/pct/src/PAST/Compiler.pir
   branches/gsoc_threads/compilers/pct/src/PCT/HLLCompiler.pir
   branches/gsoc_threads/compilers/pct/src/POST/Compiler.pir
   branches/gsoc_threads/compilers/pct/src/POST/Node.pir
   branches/gsoc_threads/compilers/pge/Rules.mak   (props changed)
   branches/gsoc_threads/compilers/tge/Rules.mak   (props changed)
   branches/gsoc_threads/compilers/tge/tgc.pir
   branches/gsoc_threads/config/auto/arch.pm
   branches/gsoc_threads/config/auto/attributes.pm
   branches/gsoc_threads/config/auto/cpu.pm
   branches/gsoc_threads/config/auto/cpu/i386/auto.pm
   branches/gsoc_threads/config/auto/cpu/ppc/auto.pm
   branches/gsoc_threads/config/auto/cpu/sun4/auto.pm
   branches/gsoc_threads/config/auto/cpu/x86_64/auto.pm
   branches/gsoc_threads/config/auto/ctags.pm
   branches/gsoc_threads/config/auto/env.pm
   branches/gsoc_threads/config/auto/gc.pm
   branches/gsoc_threads/config/auto/gcc.pm
   branches/gsoc_threads/config/auto/gettext.pm
   branches/gsoc_threads/config/auto/gmp.pm
   branches/gsoc_threads/config/auto/headers.pm
   branches/gsoc_threads/config/auto/icu.pm
   branches/gsoc_threads/config/auto/inline.pm
   branches/gsoc_threads/config/auto/isreg.pm
   branches/gsoc_threads/config/auto/memalign.pm
   branches/gsoc_threads/config/auto/msvc.pm
   branches/gsoc_threads/config/auto/neg_0.pm
   branches/gsoc_threads/config/auto/opengl.pm
   branches/gsoc_threads/config/auto/pcre.pm
   branches/gsoc_threads/config/auto/readline.pm
   branches/gsoc_threads/config/auto/signal.pm
   branches/gsoc_threads/config/auto/sizes/intval_maxmin_c.in   (props changed)
   branches/gsoc_threads/config/auto/snprintf.pm
   branches/gsoc_threads/config/auto/thread.pm
   branches/gsoc_threads/config/auto/warnings.pm
   branches/gsoc_threads/config/auto/zlib/   (props changed)
   branches/gsoc_threads/config/auto/zlib.pm
   branches/gsoc_threads/config/gen/config_pm/config_pir.in
   branches/gsoc_threads/config/gen/makefiles/root.in
   branches/gsoc_threads/config/gen/opengl.pm
   branches/gsoc_threads/config/gen/platform.pm
   branches/gsoc_threads/config/gen/platform/ansi/time.c
   branches/gsoc_threads/config/gen/platform/generic/time.c
   branches/gsoc_threads/config/gen/platform/solaris/time.c
   branches/gsoc_threads/config/gen/platform/win32/dl.c
   branches/gsoc_threads/config/gen/platform/win32/time.c
   branches/gsoc_threads/config/init/defaults.pm
   branches/gsoc_threads/config/init/hints.pm
   branches/gsoc_threads/config/init/hints/darwin.pm
   branches/gsoc_threads/config/init/hints/linux.pm
   branches/gsoc_threads/config/init/optimize.pm
   branches/gsoc_threads/config/inter/libparrot.pm
   branches/gsoc_threads/config/inter/progs.pm
   branches/gsoc_threads/docs/book/draft/README   (props changed)
   branches/gsoc_threads/docs/book/draft/appa_glossary.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/appb_patch_submission.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/appc_command_line_options.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/appd_build_options.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/appe_source_code.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/ch01_introduction.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/ch02_getting_started.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/ch07_dynpmcs.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/ch08_dynops.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/ch10_opcode_reference.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/ch11_directive_reference.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/ch12_operator_reference.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/chXX_hlls.pod   (contents, props changed)
   branches/gsoc_threads/docs/book/draft/chXX_library.pod   (props changed)
   branches/gsoc_threads/docs/book/draft/chXX_testing_and_debugging.pod   (props changed)
   branches/gsoc_threads/docs/book/pct/ch01_introduction.pod   (props changed)
   branches/gsoc_threads/docs/book/pct/ch02_getting_started.pod   (props changed)
   branches/gsoc_threads/docs/book/pct/ch03_compiler_tools.pod   (props changed)
   branches/gsoc_threads/docs/book/pct/ch04_pge.pod   (props changed)
   branches/gsoc_threads/docs/book/pct/ch05_nqp.pod   (props changed)
   branches/gsoc_threads/docs/book/pir/ch04_variables.pod
   branches/gsoc_threads/docs/book/pir/ch08_io.pod
   branches/gsoc_threads/docs/compiler_faq.pod
   branches/gsoc_threads/docs/dev/c_functions.pod   (props changed)
   branches/gsoc_threads/docs/parrotbyte.pod
   branches/gsoc_threads/docs/parrothist.pod
   branches/gsoc_threads/docs/pdds/draft/pdd31_hll.pod
   branches/gsoc_threads/docs/pdds/pdd13_bytecode.pod
   branches/gsoc_threads/docs/pdds/pdd20_lexical_vars.pod
   branches/gsoc_threads/docs/pdds/pdd21_namespaces.pod
   branches/gsoc_threads/docs/pdds/pdd22_io.pod
   branches/gsoc_threads/docs/pdds/pdd28_strings.pod
   branches/gsoc_threads/docs/pdds/pdd30_install.pod   (props changed)
   branches/gsoc_threads/docs/running.pod
   branches/gsoc_threads/docs/tests.pod
   branches/gsoc_threads/docs/user/pir/intro.pod
   branches/gsoc_threads/editor/pir-mode.el
   branches/gsoc_threads/examples/benchmarks/primes.pasm
   branches/gsoc_threads/examples/benchmarks/primes_i.pasm
   branches/gsoc_threads/examples/embed/cotorra.c   (contents, props changed)
   branches/gsoc_threads/examples/io/get.pir
   branches/gsoc_threads/examples/io/http.pir
   branches/gsoc_threads/examples/io/httpd.pir
   branches/gsoc_threads/examples/io/post.pir
   branches/gsoc_threads/examples/json/postalcodes.pir
   branches/gsoc_threads/examples/languages/abc/   (props changed)
   branches/gsoc_threads/examples/languages/abc/abc.pir
   branches/gsoc_threads/examples/languages/squaak/   (props changed)
   branches/gsoc_threads/examples/languages/squaak/doc/tutorial_episode_1.pod
   branches/gsoc_threads/examples/languages/squaak/squaak.pir
   branches/gsoc_threads/examples/languages/squaak/src/builtins/say.pir
   branches/gsoc_threads/examples/languages/squaak/t/00-sanity.t
   branches/gsoc_threads/examples/library/md5sum.pir
   branches/gsoc_threads/examples/library/ncurses_life.pir
   branches/gsoc_threads/examples/nci/xlibtest.pir
   branches/gsoc_threads/examples/pasm/cat.pasm
   branches/gsoc_threads/examples/pge/demo.pir   (contents, props changed)
   branches/gsoc_threads/examples/pir/befunge/befunge.pir
   branches/gsoc_threads/examples/pir/befunge/debug.pir
   branches/gsoc_threads/examples/pir/befunge/io.pir
   branches/gsoc_threads/examples/pir/io.pir
   branches/gsoc_threads/examples/pir/life.pir
   branches/gsoc_threads/examples/pir/make_hello_pbc.pir
   branches/gsoc_threads/examples/pir/pirric.pir
   branches/gsoc_threads/examples/pir/quine_ord.pir
   branches/gsoc_threads/examples/pir/readline.pir
   branches/gsoc_threads/examples/pir/sudoku.pir
   branches/gsoc_threads/examples/pir/uniq.pir
   branches/gsoc_threads/examples/sdl/lcd/clock.pir
   branches/gsoc_threads/examples/sdl/minesweeper/field.pir
   branches/gsoc_threads/examples/shootout/binarytrees.pir
   branches/gsoc_threads/examples/shootout/fasta.pir
   branches/gsoc_threads/examples/shootout/knucleotide.pir
   branches/gsoc_threads/examples/shootout/nbody.pir
   branches/gsoc_threads/examples/shootout/partialsums-2.pir
   branches/gsoc_threads/examples/shootout/partialsums.pir
   branches/gsoc_threads/examples/shootout/regexdna.pir
   branches/gsoc_threads/examples/shootout/revcomp.pir
   branches/gsoc_threads/examples/shootout/sumcol.pir
   branches/gsoc_threads/examples/tge/branch/transform.pir
   branches/gsoc_threads/examples/tools/pbc_checker.cpp
   branches/gsoc_threads/examples/tutorial/40_file_ops.pir
   branches/gsoc_threads/ext/nqp-rx/Rules.mak   (props changed)
   branches/gsoc_threads/ext/nqp-rx/src/stage0/   (props changed)
   branches/gsoc_threads/ext/nqp-rx/src/stage0/HLL-s0.pir
   branches/gsoc_threads/ext/nqp-rx/src/stage0/NQP-s0.pir
   branches/gsoc_threads/ext/nqp-rx/src/stage0/P6Regex-s0.pir
   branches/gsoc_threads/ext/nqp-rx/src/stage0/Regex-s0.pir
   branches/gsoc_threads/ext/nqp-rx/src/stage0/nqp-setting.nqp
   branches/gsoc_threads/include/parrot/call.h   (props changed)
   branches/gsoc_threads/include/parrot/charset.h
   branches/gsoc_threads/include/parrot/compiler.h
   branches/gsoc_threads/include/parrot/debugger.h
   branches/gsoc_threads/include/parrot/embed.h
   branches/gsoc_threads/include/parrot/encoding.h
   branches/gsoc_threads/include/parrot/exceptions.h
   branches/gsoc_threads/include/parrot/gc_api.h   (contents, props changed)
   branches/gsoc_threads/include/parrot/hash.h
   branches/gsoc_threads/include/parrot/imcc.h
   branches/gsoc_threads/include/parrot/interpreter.h
   branches/gsoc_threads/include/parrot/io.h
   branches/gsoc_threads/include/parrot/longopt.h
   branches/gsoc_threads/include/parrot/misc.h
   branches/gsoc_threads/include/parrot/oplib/   (props changed)
   branches/gsoc_threads/include/parrot/packfile.h
   branches/gsoc_threads/include/parrot/platform_interface.h
   branches/gsoc_threads/include/parrot/pmc.h
   branches/gsoc_threads/include/parrot/runcore_api.h   (props changed)
   branches/gsoc_threads/include/parrot/runcore_profiling.h   (props changed)
   branches/gsoc_threads/include/parrot/runcore_trace.h   (contents, props changed)
   branches/gsoc_threads/include/parrot/string_funcs.h
   branches/gsoc_threads/include/parrot/warnings.h
   branches/gsoc_threads/lib/Parrot/Configure.pm
   branches/gsoc_threads/lib/Parrot/Configure/Options/Conf.pm
   branches/gsoc_threads/lib/Parrot/Configure/Options/Conf/Shared.pm
   branches/gsoc_threads/lib/Parrot/Configure/Options/Reconf.pm
   branches/gsoc_threads/lib/Parrot/Configure/Options/Test/Prepare.pm
   branches/gsoc_threads/lib/Parrot/Configure/Step/List.pm
   branches/gsoc_threads/lib/Parrot/Configure/Step/Test.pm   (props changed)
   branches/gsoc_threads/lib/Parrot/Distribution.pm
   branches/gsoc_threads/lib/Parrot/Docs/Section/Ops.pm
   branches/gsoc_threads/lib/Parrot/Docs/Section/Tools.pm
   branches/gsoc_threads/lib/Parrot/H2inc.pm   (props changed)
   branches/gsoc_threads/lib/Parrot/Harness/DefaultTests.pm
   branches/gsoc_threads/lib/Parrot/Headerizer.pm
   branches/gsoc_threads/lib/Parrot/Test/Pod.pm
   branches/gsoc_threads/ports/cygwin/parrot-1.0.0-1.cygport   (props changed)
   branches/gsoc_threads/ports/debian/libparrot-dev.install.in   (props changed)
   branches/gsoc_threads/ports/debian/libparrot.install.in   (props changed)
   branches/gsoc_threads/ports/debian/parrot-doc.install.in   (props changed)
   branches/gsoc_threads/ports/debian/parrot.install.in   (props changed)
   branches/gsoc_threads/ports/fedora/2.3.0/   (props changed)
   branches/gsoc_threads/ports/suse/2.2.0/   (props changed)
   branches/gsoc_threads/runtime/parrot/languages/   (props changed)
   branches/gsoc_threads/runtime/parrot/library/Archive/Tar.pir
   branches/gsoc_threads/runtime/parrot/library/Archive/Zip.pir
   branches/gsoc_threads/runtime/parrot/library/CGI/QueryHash.pir
   branches/gsoc_threads/runtime/parrot/library/Config/JSON.pir
   branches/gsoc_threads/runtime/parrot/library/Configure/genfile.pir
   branches/gsoc_threads/runtime/parrot/library/Crow.pir
   branches/gsoc_threads/runtime/parrot/library/Digest/MD5.pir
   branches/gsoc_threads/runtime/parrot/library/HTTP/Message.pir
   branches/gsoc_threads/runtime/parrot/library/Math/Rand.pir   (props changed)
   branches/gsoc_threads/runtime/parrot/library/PGE/Util.pir
   branches/gsoc_threads/runtime/parrot/library/Rules.mak   (props changed)
   branches/gsoc_threads/runtime/parrot/library/Stream/ParrotIO.pir
   branches/gsoc_threads/runtime/parrot/library/TAP/Harness.pir
   branches/gsoc_threads/runtime/parrot/library/TAP/Parser.pir
   branches/gsoc_threads/runtime/parrot/library/Test/Builder/Output.pir
   branches/gsoc_threads/runtime/parrot/library/URI.pir
   branches/gsoc_threads/runtime/parrot/library/distutils.pir
   branches/gsoc_threads/runtime/parrot/library/osutils.pir
   branches/gsoc_threads/runtime/parrot/library/parrotlib.pir
   branches/gsoc_threads/runtime/parrot/library/pcre.pir
   branches/gsoc_threads/src/call/context.c
   branches/gsoc_threads/src/call/ops.c   (props changed)
   branches/gsoc_threads/src/call/pcc.c   (props changed)
   branches/gsoc_threads/src/debug.c
   branches/gsoc_threads/src/dynoplibs/Defines.in
   branches/gsoc_threads/src/dynoplibs/Rules.in
   branches/gsoc_threads/src/dynoplibs/deprecated.ops   (contents, props changed)
   branches/gsoc_threads/src/dynoplibs/math.ops
   branches/gsoc_threads/src/embed.c
   branches/gsoc_threads/src/exceptions.c
   branches/gsoc_threads/src/gc/alloc_memory.c   (props changed)
   branches/gsoc_threads/src/gc/alloc_resources.c   (props changed)
   branches/gsoc_threads/src/gc/api.c   (props changed)
   branches/gsoc_threads/src/gc/gc_private.h
   branches/gsoc_threads/src/gc/malloc.c   (props changed)
   branches/gsoc_threads/src/gc/malloc_trace.c   (props changed)
   branches/gsoc_threads/src/gc/mark_sweep.c   (contents, props changed)
   branches/gsoc_threads/src/gc/system.c   (props changed)
   branches/gsoc_threads/src/hash.c
   branches/gsoc_threads/src/interp/inter_cb.c   (props changed)
   branches/gsoc_threads/src/interp/inter_create.c   (props changed)
   branches/gsoc_threads/src/interp/inter_misc.c   (contents, props changed)
   branches/gsoc_threads/src/io/api.c
   branches/gsoc_threads/src/library.c
   branches/gsoc_threads/src/longopt.c
   branches/gsoc_threads/src/main.c
   branches/gsoc_threads/src/oo.c
   branches/gsoc_threads/src/ops/bit.ops
   branches/gsoc_threads/src/ops/cmp.ops
   branches/gsoc_threads/src/ops/core.ops
   branches/gsoc_threads/src/ops/experimental.ops
   branches/gsoc_threads/src/ops/io.ops
   branches/gsoc_threads/src/ops/math.ops
   branches/gsoc_threads/src/ops/object.ops
   branches/gsoc_threads/src/ops/pmc.ops
   branches/gsoc_threads/src/ops/set.ops
   branches/gsoc_threads/src/ops/string.ops
   branches/gsoc_threads/src/ops/sys.ops
   branches/gsoc_threads/src/ops/var.ops
   branches/gsoc_threads/src/packdump.c
   branches/gsoc_threads/src/packfile.c
   branches/gsoc_threads/src/packfile/pf_items.c
   branches/gsoc_threads/src/parrot_debugger.c
   branches/gsoc_threads/src/pbc_merge.c
   branches/gsoc_threads/src/pmc.c
   branches/gsoc_threads/src/pmc/boolean.pmc
   branches/gsoc_threads/src/pmc/callcontext.pmc
   branches/gsoc_threads/src/pmc/coroutine.pmc
   branches/gsoc_threads/src/pmc/exception.pmc
   branches/gsoc_threads/src/pmc/filehandle.pmc
   branches/gsoc_threads/src/pmc/fixedintegerarray.pmc
   branches/gsoc_threads/src/pmc/fixedstringarray.pmc
   branches/gsoc_threads/src/pmc/imageio.pmc
   branches/gsoc_threads/src/pmc/nci.pmc
   branches/gsoc_threads/src/pmc/orderedhash.pmc
   branches/gsoc_threads/src/pmc/parrotinterpreter.pmc
   branches/gsoc_threads/src/pmc/resizableintegerarray.pmc
   branches/gsoc_threads/src/pmc/resizablepmcarray.pmc
   branches/gsoc_threads/src/pmc/string.pmc
   branches/gsoc_threads/src/pmc/stringbuilder.pmc
   branches/gsoc_threads/src/pmc/sub.pmc
   branches/gsoc_threads/src/runcore/cores.c   (props changed)
   branches/gsoc_threads/src/runcore/main.c   (props changed)
   branches/gsoc_threads/src/runcore/profiling.c   (props changed)
   branches/gsoc_threads/src/runcore/trace.c   (contents, props changed)
   branches/gsoc_threads/src/string/api.c
   branches/gsoc_threads/src/string/charset.c
   branches/gsoc_threads/src/string/encoding.c
   branches/gsoc_threads/src/utils.c
   branches/gsoc_threads/src/warnings.c
   branches/gsoc_threads/t/codingstd/c_function_docs.t
   branches/gsoc_threads/t/codingstd/linelength.t
   branches/gsoc_threads/t/codingstd/perlcritic.t
   branches/gsoc_threads/t/compilers/imcc/imcpasm/opt1.t
   branches/gsoc_threads/t/compilers/imcc/syn/clash.t
   branches/gsoc_threads/t/compilers/imcc/syn/const.t
   branches/gsoc_threads/t/compilers/imcc/syn/errors.t
   branches/gsoc_threads/t/compilers/imcc/syn/op.t
   branches/gsoc_threads/t/compilers/imcc/syn/regressions.t
   branches/gsoc_threads/t/compilers/imcc/syn/tail.t
   branches/gsoc_threads/t/compilers/pct/past.t
   branches/gsoc_threads/t/compilers/pct/post.t
   branches/gsoc_threads/t/compilers/pge/p5regex/p5rx.t
   branches/gsoc_threads/t/compilers/pge/perl6regex/01-regex.t
   branches/gsoc_threads/t/compilers/tge/NoneGrammar.tg   (props changed)
   branches/gsoc_threads/t/dynoplibs/deprecated.t   (props changed)
   branches/gsoc_threads/t/dynoplibs/math.t
   branches/gsoc_threads/t/dynoplibs/obscure.t
   branches/gsoc_threads/t/dynpmc/gziphandle.t
   branches/gsoc_threads/t/dynpmc/os.t
   branches/gsoc_threads/t/examples/pir.t
   branches/gsoc_threads/t/harness.pir
   branches/gsoc_threads/t/library/coroutine.t
   branches/gsoc_threads/t/library/lwp.t
   branches/gsoc_threads/t/library/osutils.t
   branches/gsoc_threads/t/library/uri.t
   branches/gsoc_threads/t/native_pbc/annotations.pbc
   branches/gsoc_threads/t/native_pbc/integer_1.pbc
   branches/gsoc_threads/t/native_pbc/integer_2.pbc
   branches/gsoc_threads/t/native_pbc/number_1.pbc
   branches/gsoc_threads/t/native_pbc/number_2.pbc
   branches/gsoc_threads/t/native_pbc/string_1.pbc
   branches/gsoc_threads/t/native_pbc/string_2.pbc
   branches/gsoc_threads/t/native_pbc/testdata/string.pasm
   branches/gsoc_threads/t/oo/methods.t
   branches/gsoc_threads/t/oo/root_new.t   (props changed)
   branches/gsoc_threads/t/op/annotate-old.t
   branches/gsoc_threads/t/op/arithmetics.t
   branches/gsoc_threads/t/op/arithmetics_pmc.t
   branches/gsoc_threads/t/op/calling.t
   branches/gsoc_threads/t/op/exit.t
   branches/gsoc_threads/t/op/inf_nan.t
   branches/gsoc_threads/t/op/integer.t
   branches/gsoc_threads/t/op/interp.t
   branches/gsoc_threads/t/op/number.t
   branches/gsoc_threads/t/op/sprintf.t
   branches/gsoc_threads/t/op/string.t
   branches/gsoc_threads/t/op/stringu.t
   branches/gsoc_threads/t/op/time.t
   branches/gsoc_threads/t/pmc/addrregistry.t
   branches/gsoc_threads/t/pmc/complex.t
   branches/gsoc_threads/t/pmc/eval.t
   branches/gsoc_threads/t/pmc/exception-old.t
   branches/gsoc_threads/t/pmc/exporter.t
   branches/gsoc_threads/t/pmc/filehandle.t
   branches/gsoc_threads/t/pmc/fixedintegerarray.t
   branches/gsoc_threads/t/pmc/freeze.t
   branches/gsoc_threads/t/pmc/integer.t
   branches/gsoc_threads/t/pmc/io.t
   branches/gsoc_threads/t/pmc/lexpad.t
   branches/gsoc_threads/t/pmc/namespace-old.t   (props changed)
   branches/gsoc_threads/t/pmc/nci.t
   branches/gsoc_threads/t/pmc/objects.t
   branches/gsoc_threads/t/pmc/packfile.t
   branches/gsoc_threads/t/pmc/packfileannotations.t
   branches/gsoc_threads/t/pmc/resizablebooleanarray.t
   branches/gsoc_threads/t/pmc/resizableintegerarray.t
   branches/gsoc_threads/t/pmc/resizablepmcarray.t
   branches/gsoc_threads/t/pmc/resizablestringarray.t
   branches/gsoc_threads/t/pmc/string.t
   branches/gsoc_threads/t/pmc/stringbuilder.t
   branches/gsoc_threads/t/pmc/stringhandle.t
   branches/gsoc_threads/t/pmc/sub.t
   branches/gsoc_threads/t/pmc/sys.t
   branches/gsoc_threads/t/pmc/testlib/packfile_common.pir
   branches/gsoc_threads/t/pmc/threads.t
   branches/gsoc_threads/t/src/embed.t   (contents, props changed)
   branches/gsoc_threads/t/src/extend.t
   branches/gsoc_threads/t/steps/auto/ctags-01.t
   branches/gsoc_threads/t/steps/auto/gettext-01.t
   branches/gsoc_threads/t/steps/auto/gmp-01.t
   branches/gsoc_threads/t/steps/auto/icu-01.t
   branches/gsoc_threads/t/steps/auto/msvc-01.t
   branches/gsoc_threads/t/steps/auto/neg_0-01.t
   branches/gsoc_threads/t/steps/auto/opengl-01.t
   branches/gsoc_threads/t/steps/auto/pcre-01.t
   branches/gsoc_threads/t/steps/auto/readline-02.t
   branches/gsoc_threads/t/steps/auto/zlib-01.t
   branches/gsoc_threads/t/steps/gen/opengl-01.t
   branches/gsoc_threads/t/steps/gen/platform-01.t
   branches/gsoc_threads/t/steps/init/defaults-01.t
   branches/gsoc_threads/t/steps/init/hints/darwin-01.t
   branches/gsoc_threads/t/steps/init/hints/linux-01.t   (contents, props changed)
   branches/gsoc_threads/t/steps/inter/libparrot-01.t
   branches/gsoc_threads/t/tools/   (props changed)
   branches/gsoc_threads/tools/build/h2inc.pl   (props changed)
   branches/gsoc_threads/tools/build/headerizer.pl
   branches/gsoc_threads/tools/build/ops2c.pl
   branches/gsoc_threads/tools/dev/fetch_languages.pl   (contents, props changed)
   branches/gsoc_threads/tools/dev/mk_gitignore.pl   (props changed)
   branches/gsoc_threads/tools/dev/mk_language_shell.pl
   branches/gsoc_threads/tools/dev/nci_thunk_gen.pir
   branches/gsoc_threads/tools/dev/pbc_to_exe.pir
   branches/gsoc_threads/tools/docs/filename_and_chapter.pl
   branches/gsoc_threads/tools/install/smoke.pl
   branches/gsoc_threads/tools/util/inc_ver.pir
   branches/gsoc_threads/tools/util/parrot-config.pir
   branches/gsoc_threads/tools/util/perlcritic-cage.conf   (props changed)
   branches/gsoc_threads/tools/util/perlcritic.conf
   branches/gsoc_threads/tools/util/pgegrep

Modified: branches/gsoc_threads/DEPRECATED.pod
==============================================================================
--- branches/gsoc_threads/DEPRECATED.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/DEPRECATED.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -134,18 +134,18 @@
 
 L<https://trac.parrot.org/parrot/ticket/1628>
 
-=back
+=item logical_* vtables [eligiblie in 2.7]
 
-=head1 Opcodes
+These can be replaced by C<get_bool> and intval ops unless you're using them for
+things that aren't really logical ops (don't do that!).
 
-=over 4
+L<https://trac.parrot.org/parrot/ticket/1655>
 
-=item moved to dynop [eligible in 1.1]
+=back
 
-Parts or all of: bit.ops, debug.ops, io.ops, math.ops, set.ops
-(the obscure and rarely used parts), sys.ops.
+=head1 Opcodes
 
-L<https://trac.parrot.org/parrot/ticket/449>
+=over 4
 
 =item get_addr and set_addr [eligible in 1.5]
 
@@ -233,12 +233,18 @@
 
 L<https://trac.parrot.org/parrot/ticket/1643>
 
-=item unroll [experimental]
+=item finalize [experimental]
 
-Unroll inner runloops from exception handlers.
+Finalize exception handler, unrolling inner runloops if needed.
 
 L<https://trac.parrot.org/parrot/ticket/1635>
 
+=item logical PMC ops [eligible in 2.7]
+
+These fall out from the logical vtables deprecation.
+
+L<https://trac.parrot.org/parrot/ticket/1655>
+
 =back
 
 =head1 Bytecode

Modified: branches/gsoc_threads/MANIFEST
==============================================================================
--- branches/gsoc_threads/MANIFEST	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/MANIFEST	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Mon May 17 18:24:33 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Wed Jun  9 14:23:50 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -62,6 +62,24 @@
 compilers/imcc/symreg.c                                     [imcc]
 compilers/imcc/symreg.h                                     [imcc]
 compilers/imcc/unit.h                                       [imcc]
+compilers/opsc/Defines.mak                                  [opsc]
+compilers/opsc/Rules.mak                                    [opsc]
+compilers/opsc/TODO                                         [opsc]
+compilers/opsc/gen/Ops/Compiler/IGNOREME                    [opsc]
+compilers/opsc/gen/Ops/Trans/IGNOREME                       [opsc]
+compilers/opsc/ops2c.nqp                                    [opsc]
+compilers/opsc/opsc.pir                                     [opsc]
+compilers/opsc/src/Ops/Compiler.pm                          [opsc]
+compilers/opsc/src/Ops/Compiler/Actions.pm                  [opsc]
+compilers/opsc/src/Ops/Compiler/Grammar.pm                  [opsc]
+compilers/opsc/src/Ops/Emitter.pm                           [opsc]
+compilers/opsc/src/Ops/File.pm                              [opsc]
+compilers/opsc/src/Ops/Op.pm                                [opsc]
+compilers/opsc/src/Ops/OpLib.pm                             [opsc]
+compilers/opsc/src/Ops/Renumberer.pm                        [opsc]
+compilers/opsc/src/Ops/Trans.pm                             [opsc]
+compilers/opsc/src/Ops/Trans/C.pm                           [opsc]
+compilers/opsc/src/builtins.pir                             [opsc]
 compilers/pct/Defines.mak                                   [pct]
 compilers/pct/PCT.pir                                       [pct]
 compilers/pct/README.pod                                    []doc
@@ -171,7 +189,6 @@
 config/auto/env.pm                                          []
 config/auto/env/test_setenv_c.in                            []
 config/auto/env/test_unsetenv_c.in                          []
-config/auto/extra_nci_thunks.pm                             []
 config/auto/format.pm                                       []
 config/auto/frames.pm                                       []
 config/auto/frames/test_exec_cygwin_c.in                    []
@@ -963,6 +980,9 @@
 include/parrot/oo_private.h                                 [main]include
 include/parrot/op.h                                         [main]include
 include/parrot/oplib.h                                      [main]include
+include/parrot/oplib/core_ops.h                             [main]include
+include/parrot/oplib/ops.h                                  [main]include
+include/parrot/opsenum.h                                    [main]include
 include/parrot/packfile.h                                   [main]include
 include/parrot/parrot.h                                     [main]include
 include/parrot/platform_interface.h                         [main]include
@@ -1044,16 +1064,6 @@
 lib/Parrot/IO/Path.pm                                       [devel]lib
 lib/Parrot/Install.pm                                       [devel]lib
 lib/Parrot/Manifest.pm                                      [devel]lib
-lib/Parrot/Op.pm                                            [devel]lib
-lib/Parrot/OpTrans.pm                                       [devel]lib
-lib/Parrot/OpTrans/C.pm                                     [devel]lib
-lib/Parrot/Ops2c/Auxiliary.pm                               [devel]lib
-lib/Parrot/Ops2c/Utils.pm                                   [devel]lib
-lib/Parrot/Ops2pm.pm                                        [devel]lib
-lib/Parrot/Ops2pm/Auxiliary.pm                              [devel]lib
-lib/Parrot/Ops2pm/Base.pm                                   [devel]lib
-lib/Parrot/OpsFile.pm                                       [devel]lib
-lib/Parrot/OpsRenumber.pm                                   [devel]lib
 lib/Parrot/Pmc2c/Attribute.pm                               [devel]lib
 lib/Parrot/Pmc2c/ComposedMethod.pm                          [devel]lib
 lib/Parrot/Pmc2c/Dumper.pm                                  [devel]lib
@@ -1146,7 +1156,8 @@
 runtime/parrot/library/HTTP/Message.pir                     [library]
 runtime/parrot/library/Iter.pir                             [library]
 runtime/parrot/library/JSON.pir                             [library]
-runtime/parrot/library/LWP.pir                              [library]
+runtime/parrot/library/LWP/Protocol.pir                     [library]
+runtime/parrot/library/LWP/UserAgent.pir                    [library]
 runtime/parrot/library/MIME/Base64.pir                      [library]
 runtime/parrot/library/Math/Rand.pir                        [library]
 runtime/parrot/library/NCI/Utils.pir                        [library]
@@ -1241,8 +1252,14 @@
 src/dynoplibs/Defines.in                                    []
 src/dynoplibs/README                                        []doc
 src/dynoplibs/Rules.in                                      []
+src/dynoplibs/bit.ops                                       []
+src/dynoplibs/debug.ops                                     []
+src/dynoplibs/deprecated.ops                                []
+src/dynoplibs/io.ops                                        []
 src/dynoplibs/math.ops                                      []
 src/dynoplibs/obscure.ops                                   []
+src/dynoplibs/sys.ops                                       []
+src/dynoplibs/trans.ops                                     []
 src/dynpmc/Defines.in                                       []
 src/dynpmc/README.pod                                       []doc
 src/dynpmc/Rules.in                                         []
@@ -1310,12 +1327,11 @@
 src/ops/bit.ops                                             []
 src/ops/cmp.ops                                             []
 src/ops/core.ops                                            []
-src/ops/debug.ops                                           []
+src/ops/core_ops.c                                          []
 src/ops/experimental.ops                                    []
 src/ops/io.ops                                              []
 src/ops/math.ops                                            []
 src/ops/object.ops                                          []
-src/ops/ops.num                                             [devel]src
 src/ops/ops.skip                                            []
 src/ops/pmc.ops                                             []
 src/ops/set.ops                                             []
@@ -1336,6 +1352,7 @@
 src/pmc/bigint.pmc                                          []
 src/pmc/bignum.pmc                                          []
 src/pmc/boolean.pmc                                         []
+src/pmc/bytebuffer.pmc                                      []
 src/pmc/callcontext.pmc                                     []
 src/pmc/capture.pmc                                         []
 src/pmc/class.pmc                                           []
@@ -1441,6 +1458,8 @@
 src/string/encoding/fixed_8.h                               []
 src/string/encoding/ucs2.c                                  []
 src/string/encoding/ucs2.h                                  []
+src/string/encoding/ucs4.c                                  []
+src/string/encoding/ucs4.h                                  []
 src/string/encoding/utf16.c                                 []
 src/string/encoding/utf16.h                                 []
 src/string/encoding/utf8.c                                  []
@@ -1519,6 +1538,14 @@
 t/compilers/imcc/syn/symbols.t                              [test]
 t/compilers/imcc/syn/tail.t                                 [test]
 t/compilers/imcc/syn/veracity.t                             [test]
+t/compilers/opsc/01-parse.t                                 [test]
+t/compilers/opsc/02-parse-all-ops.t                         [test]
+t/compilers/opsc/03-past.t                                  [test]
+t/compilers/opsc/04-op.t                                    [test]
+t/compilers/opsc/05-oplib.t                                 [test]
+t/compilers/opsc/06-opsfile.t                               [test]
+t/compilers/opsc/07-emitter.t                               [test]
+t/compilers/opsc/common.pir                                 [test]
 t/compilers/pct/complete_workflow.t                         [test]
 t/compilers/pct/past.t                                      [test]
 t/compilers/pct/pct_hllcompiler.t                           [test]
@@ -1625,8 +1652,21 @@
 t/distro/file_metadata.t                                    [test]
 t/distro/manifest.t                                         [test]
 t/distro/manifest_generated.t                               [test]
+t/dynoplibs/bit.t                                           [test]
+t/dynoplibs/debug.t                                         [test]
+t/dynoplibs/deprecated.t                                    [test]
+t/dynoplibs/io-old.t                                        [test]
+t/dynoplibs/io.t                                            [test]
 t/dynoplibs/math.t                                          [test]
 t/dynoplibs/obscure.t                                       [test]
+t/dynoplibs/pmc_pow.t                                       [test]
+t/dynoplibs/string_pmc_bitwise.t                            [test]
+t/dynoplibs/sysinfo.t                                       [test]
+t/dynoplibs/time.t                                          [test]
+t/dynoplibs/time_old.t                                      [test]
+t/dynoplibs/trans-infnan.t                                  [test]
+t/dynoplibs/trans-old.t                                     [test]
+t/dynoplibs/trans.t                                         [test]
 t/dynpmc/dynlexpad.t                                        [test]
 t/dynpmc/file.t                                             [test]
 t/dynpmc/foo.t                                              [test]
@@ -1658,6 +1698,7 @@
 t/library/cgi_query_hash.t                                  [test]
 t/library/configure.t                                       [test]
 t/library/coroutine.t                                       [test]
+t/library/distutils.t                                       [test]
 t/library/dumper.t                                          [test]
 t/library/getopt_obj.t                                      [test]
 t/library/hllmacros.t                                       [test]
@@ -1694,6 +1735,7 @@
 t/manifest/README                                           []doc
 t/native_pbc/annotations.pbc                                [test]
 t/native_pbc/header.t                                       [test]
+t/native_pbc/integer.pbc                                    [test]
 t/native_pbc/integer.t                                      [test]
 t/native_pbc/integer_1.pbc                                  [test]
 t/native_pbc/integer_2.pbc                                  [test]
@@ -1702,6 +1744,7 @@
 t/native_pbc/integer_5.pbc                                  [test]
 t/native_pbc/integer_6.pbc                                  [test]
 t/native_pbc/integer_7.pbc                                  [test]
+t/native_pbc/number.pbc                                     [test]
 t/native_pbc/number.t                                       [test]
 t/native_pbc/number_1.pbc                                   [test]
 t/native_pbc/number_2.pbc                                   [test]
@@ -1710,6 +1753,7 @@
 t/native_pbc/number_5.pbc                                   [test]
 t/native_pbc/number_6.pbc                                   [test]
 t/native_pbc/number_7.pbc                                   [test]
+t/native_pbc/string.pbc                                     [test]
 t/native_pbc/string.t                                       [test]
 t/native_pbc/string_1.pbc                                   [test]
 t/native_pbc/string_2.pbc                                   [test]
@@ -1738,7 +1782,6 @@
 t/oo/vtableoverride.t                                       [test]
 t/op/00ff-dos.t                                             [test]
 t/op/00ff-unix.t                                            [test]
-t/op/01-parse_ops.t                                         [test]
 t/op/64bit.t                                                [test]
 t/op/annotate-old.t                                         [test]
 t/op/annotate.t                                             [test]
@@ -1753,7 +1796,6 @@
 t/op/cmp-nonbranch.t                                        [test]
 t/op/comp.t                                                 [test]
 t/op/copy.t                                                 [test]
-t/op/debuginfo.t                                            [test]
 t/op/errorson.t                                             [test]
 t/op/exceptions.t                                           [test]
 t/op/exit.t                                                 [test]
@@ -1765,7 +1807,6 @@
 t/op/inf_nan.t                                              [test]
 t/op/integer.t                                              [test]
 t/op/interp.t                                               [test]
-t/op/io.t                                                   [test]
 t/op/jit.t                                                  [test]
 t/op/jitn.t                                                 [test]
 t/op/lexicals.t                                             [test]
@@ -1784,11 +1825,7 @@
 t/op/string_cs.t                                            [test]
 t/op/string_mem.t                                           [test]
 t/op/stringu.t                                              [test]
-t/op/sysinfo.t                                              [test]
 t/op/time.t                                                 [test]
-t/op/time_old.t                                             [test]
-t/op/trans.t                                                [test]
-t/op/trans_old.t                                            [test]
 t/op/vivify.t                                               [test]
 t/perl/Parrot_Distribution.t                                [test]
 t/perl/Parrot_Docs.t                                        [test]
@@ -1809,6 +1846,7 @@
 t/pmc/bigint.t                                              [test]
 t/pmc/bignum.t                                              [test]
 t/pmc/boolean.t                                             [test]
+t/pmc/bytebuffer.t                                          [test]
 t/pmc/callcontext.t                                         [test]
 t/pmc/capture.t                                             [test]
 t/pmc/class.t                                               [test]
@@ -1932,7 +1970,6 @@
 t/steps/auto/cpu-01.t                                       [test]
 t/steps/auto/ctags-01.t                                     [test]
 t/steps/auto/env-01.t                                       [test]
-t/steps/auto/extra_nci_thunks-01.t                          [test]
 t/steps/auto/format-01.t                                    [test]
 t/steps/auto/frames-01.t                                    [test]
 t/steps/auto/gc-01.t                                        [test]
@@ -2031,34 +2068,6 @@
 t/tools/install/testlib/src/pmc/pmc_object.h                [test]
 t/tools/install/testlib/tools/build/ops2c.pl                [test]
 t/tools/install/testlib/vtable.dump                         [test]
-t/tools/ops2cutils/01-new.t                                 [test]
-t/tools/ops2cutils/02-usage.t                               [test]
-t/tools/ops2cutils/03-print_c_header_file.t                 [test]
-t/tools/ops2cutils/04-print_c_source_top.t                  [test]
-t/tools/ops2cutils/05-print_c_source_bottom.t               [test]
-t/tools/ops2cutils/06-dynamic.t                             [test]
-t/tools/ops2cutils/07-make_incdir.t                         [test]
-t/tools/ops2cutils/08-nolines.t                             [test]
-t/tools/ops2cutils/09-dynamic_nolines.t                     [test]
-t/tools/ops2cutils/10-print_c_source_file.t                 [test]
-t/tools/ops2cutils/testlib/GenerateCore.pm                  [test]
-t/tools/ops2pm/00-qualify.t                                 [test]
-t/tools/ops2pm/01-ops2pm.t                                  [test]
-t/tools/ops2pm/02-usage.t                                   [test]
-t/tools/ops2pm/03-new.t                                     [test]
-t/tools/ops2pm/04-prepare_ops.t                             [test]
-t/tools/ops2pm/05-renum_op_map_file.t                       [test]
-t/tools/ops2pm/06-load_op_map_files.t                       [test]
-t/tools/ops2pm/07-no_ops_skip.t                             [test]
-t/tools/ops2pm/08-sort_ops.t                                [test]
-t/tools/ops2pm/09-prepare_real_ops.t                        [test]
-t/tools/ops2pm/10-print_module.t                            [test]
-t/tools/ops2pm/11-print_h.t                                 [test]
-t/tools/ops2pm/samples/bit_ops.original                     [test]
-t/tools/ops2pm/samples/bit_ops.second                       [test]
-t/tools/ops2pm/samples/core_ops.original                    [test]
-t/tools/ops2pm/samples/ops_num.original                     [test]
-t/tools/ops2pm/samples/pic_ops.original                     [test]
 t/tools/parrot_debugger.t                                   [test]
 t/tools/pbc_disassemble.t                                   [test]
 t/tools/pbc_dump.t                                          [test]
@@ -2078,7 +2087,6 @@
 tools/build/h2inc.pl                                        []
 tools/build/headerizer.pl                                   []
 tools/build/ops2c.pl                                        [devel]
-tools/build/ops2pm.pl                                       []
 tools/build/parrot_config_c.pl                              []
 tools/build/pbcversion_h.pl                                 []
 tools/build/pmc2c.pl                                        [devel]
@@ -2110,13 +2118,13 @@
 tools/dev/mk_manifest_and_skip.pl                           []
 tools/dev/mk_native_pbc                                     []
 tools/dev/mk_nci_thunks.pl                                  []
+tools/dev/mk_packfile_pbc                                   []
 tools/dev/mk_rpm_manifests.pl                               []
 tools/dev/nci_test_gen.pl                                   []
 tools/dev/nci_thunk_gen.pir                                 []
 tools/dev/nm.pl                                             []
 tools/dev/nopaste.pl                                        []
 tools/dev/ops_not_tested.pl                                 []
-tools/dev/opsrenumber.pl                                    []
 tools/dev/parrot-fuzzer                                     []
 tools/dev/parrot.supp                                       []
 tools/dev/parrot_api.pl                                     []

Modified: branches/gsoc_threads/MANIFEST.SKIP
==============================================================================
--- branches/gsoc_threads/MANIFEST.SKIP	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/MANIFEST.SKIP	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Mon May 17 15:32:39 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu May 27 15:25:37 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -81,6 +81,14 @@
 ^miniparrot/
 ^myconfig$
 ^myconfig/
+^ops2c$
+^ops2c/
+^ops2c\.c$
+^ops2c\.c/
+^ops2c\.pbc$
+^ops2c\.pbc/
+^ops2c\.pir$
+^ops2c\.pir/
 ^parrot$
 ^parrot/
 ^parrot-nqp$
@@ -188,6 +196,15 @@
 ^compilers/imcc/imcparser\.h/
 ^compilers/imcc/imcparser\.output$
 ^compilers/imcc/imcparser\.output/
+# generated from svn:ignore of 'compilers/opsc/gen/Ops/'
+^compilers/opsc/gen/Ops/.*\.pir$
+^compilers/opsc/gen/Ops/.*\.pir/
+# generated from svn:ignore of 'compilers/opsc/gen/Ops/Compiler/'
+^compilers/opsc/gen/Ops/Compiler/.*\.pir$
+^compilers/opsc/gen/Ops/Compiler/.*\.pir/
+# generated from svn:ignore of 'compilers/opsc/gen/Ops/Trans/'
+^compilers/opsc/gen/Ops/Trans/.*\.pir$
+^compilers/opsc/gen/Ops/Trans/.*\.pir/
 # generated from svn:ignore of 'compilers/pct/src/PAST/'
 ^compilers/pct/src/PAST/.*\.pbc$
 ^compilers/pct/src/PAST/.*\.pbc/
@@ -428,6 +445,9 @@
 # generated from svn:ignore of 'ext/Parrot-Embed/t/'
 ^ext/Parrot-Embed/t/.*\.pbc$
 ^ext/Parrot-Embed/t/.*\.pbc/
+# generated from svn:ignore of 'ext/nqp-rx/src/stage0/'
+^ext/nqp-rx/src/stage0/nqp-setting\.pir$
+^ext/nqp-rx/src/stage0/nqp-setting\.pir/
 # generated from svn:ignore of 'include/parrot/'
 ^include/parrot/.*\.tmp$
 ^include/parrot/.*\.tmp/
@@ -453,15 +473,6 @@
 ^include/parrot/platform_limits\.h/
 ^include/parrot/vtable\.h$
 ^include/parrot/vtable\.h/
-# generated from svn:ignore of 'include/parrot/oplib/'
-^include/parrot/oplib/.*_ops\.h$
-^include/parrot/oplib/.*_ops\.h/
-^include/parrot/oplib/.*_ops_cg.*\.h$
-^include/parrot/oplib/.*_ops_cg.*\.h/
-^include/parrot/oplib/.*_ops_switch\.h$
-^include/parrot/oplib/.*_ops_switch\.h/
-^include/parrot/oplib/ops\.h$
-^include/parrot/oplib/ops\.h/
 # generated from svn:ignore of 'include/pmc/'
 ^include/pmc/.*\.h$
 ^include/pmc/.*\.h/
@@ -566,6 +577,9 @@
 # generated from svn:ignore of 'runtime/parrot/library/HTTP/'
 ^runtime/parrot/library/HTTP/.*\.pbc$
 ^runtime/parrot/library/HTTP/.*\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/LWP/'
+^runtime/parrot/library/LWP/.*\.pbc$
+^runtime/parrot/library/LWP/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/MIME/'
 ^runtime/parrot/library/MIME/.*\.pbc$
 ^runtime/parrot/library/MIME/.*\.pbc/
@@ -1046,6 +1060,8 @@
 ^t/tools/.*\.pbc/
 ^t/tools/.*\.pir$
 ^t/tools/.*\.pir/
+^t/tools/.*\.stdout$
+^t/tools/.*\.stdout/
 ^t/tools/pdb\.t\..*$
 ^t/tools/pdb\.t\..*/
 ^t/tools/pmc2c\..*\.c$

Modified: branches/gsoc_threads/MANIFEST.generated
==============================================================================
--- branches/gsoc_threads/MANIFEST.generated	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/MANIFEST.generated	Thu Jun 10 21:09:12 2010	(r47545)
@@ -33,8 +33,6 @@
 include/parrot/extend_vtable.h                   [main]include
 include/parrot/feature.h                         [main]include
 include/parrot/has_header.h                      [main]include
-include/parrot/oplib/core_ops.h                  [main]include
-include/parrot/oplib/ops.h                       [main]include
 include/parrot/pbcversion.h                      [devel]include
 include/parrot/platform.h                        [main]include
 include/parrot/platform_limits.h                 [devel]include
@@ -44,6 +42,7 @@
 include/pmc/pmc_bigint.h                         [devel]include
 include/pmc/pmc_bignum.h                         [devel]include
 include/pmc/pmc_boolean.h                        [devel]include
+include/pmc/pmc_bytebuffer.h                     [devel]include
 include/pmc/pmc_callcontext.h                    [devel]include
 include/pmc/pmc_capture.h                        [devel]include
 include/pmc/pmc_class.h                          [devel]include
@@ -125,6 +124,8 @@
 include/pmc/pmc_undef.h                          [devel]include
 include/pmc/pmc_unmanagedstruct.h                [devel]include
 install_config.fpmc                              [main]lib
+installable_ops2c                                [main]bin
+installable_ops2c.exe                            [main]bin
 installable_parrot                               [main]bin
 installable_parrot-nqp                           [main]bin
 installable_parrot-nqp.exe                       [main]bin
@@ -145,12 +146,23 @@
 installable_pbc_to_exe                           [main]bin
 installable_pbc_to_exe.exe                       [main]bin
 lib/Parrot/Config/Generated.pm                   [devel]lib
-lib/Parrot/OpLib/core.pm                         [devel]lib
 lib/Parrot/PMC.pm                                [devel]lib
 lib/Parrot/Pmc2c/PCCMETHOD_BITS.pm               [devel]lib
 libparrot.dll                                    [main]bin
 libparrot.lib                                    [main]bin
 parrot.pc                                        [main]pkgconfig
+runtime/parrot/dynext/bit_ops.bundle             [library]
+runtime/parrot/dynext/bit_ops.dll                [library]
+runtime/parrot/dynext/bit_ops.dylib              [library]
+runtime/parrot/dynext/bit_ops.so                 [library]
+runtime/parrot/dynext/debug_ops.bundle           [library]
+runtime/parrot/dynext/debug_ops.dll              [library]
+runtime/parrot/dynext/debug_ops.dylib            [library]
+runtime/parrot/dynext/debug_ops.so               [library]
+runtime/parrot/dynext/deprecated_ops.bundle      [library]
+runtime/parrot/dynext/deprecated_ops.dll         [library]
+runtime/parrot/dynext/deprecated_ops.dylib       [library]
+runtime/parrot/dynext/deprecated_ops.so          [library]
 runtime/parrot/dynext/dynlexpad.bundle           [library]
 runtime/parrot/dynext/dynlexpad.dll              [library]
 runtime/parrot/dynext/dynlexpad.dylib            [library]
@@ -163,6 +175,10 @@
 runtime/parrot/dynext/gziphandle.dll             [library]
 runtime/parrot/dynext/gziphandle.dylib           [library]
 runtime/parrot/dynext/gziphandle.so              [library]
+runtime/parrot/dynext/io_ops.bundle              [library]
+runtime/parrot/dynext/io_ops.dll                 [library]
+runtime/parrot/dynext/io_ops.dylib               [library]
+runtime/parrot/dynext/io_ops.so                  [library]
 runtime/parrot/dynext/libglutcb.bundle           [library]
 runtime/parrot/dynext/libglutcb.dll              [library]
 runtime/parrot/dynext/libglutcb.dylib            [library]
@@ -183,6 +199,14 @@
 runtime/parrot/dynext/rational.dll               [library]
 runtime/parrot/dynext/rational.dylib             [library]
 runtime/parrot/dynext/rational.so                [library]
+runtime/parrot/dynext/sys_ops.bundle             [library]
+runtime/parrot/dynext/sys_ops.dll                [library]
+runtime/parrot/dynext/sys_ops.dylib              [library]
+runtime/parrot/dynext/sys_ops.so                 [library]
+runtime/parrot/dynext/trans_ops.bundle           [library]
+runtime/parrot/dynext/trans_ops.dll              [library]
+runtime/parrot/dynext/trans_ops.dylib            [library]
+runtime/parrot/dynext/trans_ops.so               [library]
 runtime/parrot/include/call_bits.pasm            [main]
 runtime/parrot/include/cclass.pasm               [main]
 runtime/parrot/include/config.fpmc               []
@@ -232,7 +256,8 @@
 runtime/parrot/library/HTTP/Message.pbc          [main]
 runtime/parrot/library/Iter.pbc                  [main]
 runtime/parrot/library/JSON.pbc                  [main]
-runtime/parrot/library/LWP.pbc                   [main]
+runtime/parrot/library/LWP/Protocol.pbc          [main]
+runtime/parrot/library/LWP/UserAgent.pbc         [main]
 runtime/parrot/library/MIME/Base64.pbc           [main]
 runtime/parrot/library/Math/Rand.pbc             [main]
 runtime/parrot/library/NCI/call_toolkit_init.pbc [main]
@@ -271,7 +296,7 @@
 runtime/parrot/library/TAP/Formatter.pbc         [main]
 runtime/parrot/library/TAP/Harness.pbc           [main]
 runtime/parrot/library/TAP/Parser.pbc            [main]
-runtime/parrot/library/TGE.pbc                   [tge]
+runtime/parrot/library/TGE.pbc                   [main]
 runtime/parrot/library/Tcl/Glob.pbc              [main]
 runtime/parrot/library/TclLibrary.pbc            [main]
 runtime/parrot/library/Test/Builder.pbc          [main]
@@ -293,6 +318,7 @@
 runtime/parrot/library/ncurses.pbc               [main]
 runtime/parrot/library/nqp-rx.pbc                [nqp]
 runtime/parrot/library/nqp-setting.pbc           [nqp]
+runtime/parrot/library/opsc.pbc                  [main]
 runtime/parrot/library/osutils.pbc               [main]
 runtime/parrot/library/parrotlib.pbc             [main]
 runtime/parrot/library/pcore.pbc                 [main]
@@ -311,6 +337,7 @@
 src/pmc/bigint.dump                              [devel]src
 src/pmc/bignum.dump                              [devel]src
 src/pmc/boolean.dump                             [devel]src
+src/pmc/bytebuffer.dump                          [devel]src
 src/pmc/callcontext.dump                         [devel]src
 src/pmc/capture.dump                             [devel]src
 src/pmc/class.dump                               [devel]src

Modified: branches/gsoc_threads/NEWS
==============================================================================
--- branches/gsoc_threads/NEWS	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/NEWS	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,5 +1,43 @@
 # $Id$
 
+New in 2.5.0
+- Platforms
+  + EPEL (Extra Packages for Enterprise Linux) packages for RHEL6.beta are available
+  + Building and testing on amd64/i386, with gcc/g++
+  + Almost finished Parrot configure on RTEMS
+- Parrot starts to going Lorito
+  Lorito is the code name for a set of planned refactors to the core opcodes.
+  + The ops_pct branch has been merged into trunk. The "Stage 0" is done with it.
+       for more Information about Lorito see:
+           http://trac.parrot.org/parrot/wiki/Lorito
+           http://trac.parrot.org/parrot/wiki/LoritoRoadmap
+- Core
+  + Added ByteBuffer PMC
+  + Added a bunch of tests for Array PMCs
+  + Modify some PMC vtable functions to reduce complexity, simplifying its coverage.
+  + Deleted do-nothing custom mark in StringBuilder
+  + Fixed ticket #389; subs are not entered into a namespace unless you declare them
+  + Fixed up 'exit' opcode, added CONTROL_EXIT exception type.
+  + Modified PAST so that it can generate symbolic pasm constants in PIR output.
+  + Fixed some substr-out-of-range errors in Regex.match
+  + Various cleanups and some added functionality to NFG (Grapheme Normal Form).
+  + Various parts of the STRING API are now more graceful
+  + Improved implemented PAST::Pattern:
+      Can match on types, children, attributes, based on iseq to a constant,
+      based on true result from a closure and based on anything with an
+      ACCEPTS method.
+- Tests
+  + Fixed some tests that were failing because of dynops
+  + Some tests for the instrument dynpmc are added
+- NQP
+  + nqp-rx now supports multisubs and multimethods
+  + Fixed sigspace handling ** quantifier in regexes
+  + Added \e strings
+  + Added use of inversion lists for charclass lists in regexes
+- Languages
+  + resurrected partcl
+- Miscellaneous
+
 New in 2.4.0
 - Core
   + Various long-standing bugs in IMCC were fixed

Modified: branches/gsoc_threads/PBC_COMPAT
==============================================================================
--- branches/gsoc_threads/PBC_COMPAT	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/PBC_COMPAT	Thu Jun 10 21:09:12 2010	(r47545)
@@ -23,10 +23,16 @@
 
 # TODO TT #361: all .pbc files should make-depend on PBC_COMPAT
 
-# Also, if you're removing an opcode, be sure to run "make opsrenumber"
+# Also, don't forget to run tools/dev/mk_packfile_pbc to rebuild PBCs
+# used for testing Packfile* PMCs.
 
 # please insert tab separated entries at the top of the list
 
+6.21	2010.06.09	NotFound	add ByteBuffer PMC
+6.20	2010.05.29	plobsing	eliminate unused fixup type 'label'
+6.19	2010.05.27	plobsing	removed numerous core ops (TT #449)
+6.18	2010.05.25	cotto	removed ops.num
+6.17	2010.05.20	NotFound	store encoding of string constants
 6.16	2010.05.18	plobsing	move freeze/thaw adjacent to visit
 6.15	2010.05.06	bacek	add StringBuilder PMC
 6.14	2010.05.03	coke	remove popaction, pushmark, pushaction ops.

Modified: branches/gsoc_threads/compilers/imcc/debug.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/debug.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/debug.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -39,7 +39,6 @@
 
 */
 
-PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 void
 IMCC_fatal(PARROT_INTERP, SHIM(int code), ARGIN(const char *fmt), ...)
@@ -63,7 +62,6 @@
 
 */
 
-PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 void
 IMCC_fataly(PARROT_INTERP, SHIM(int code), ARGIN(const char *fmt), ...)
@@ -89,7 +87,6 @@
 
 */
 
-PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 void
 IMCC_fatal_standalone(PARROT_INTERP, int code, ARGIN(const char *fmt), ...)
@@ -114,7 +111,6 @@
 
 */
 
-PARROT_EXPORT
 void
 IMCC_warning(PARROT_INTERP, ARGIN(const char *fmt), ...)
 {
@@ -139,7 +135,6 @@
 
 */
 
-PARROT_EXPORT
 void
 IMCC_info(PARROT_INTERP, int level, ARGIN(const char *fmt), ...)
 {
@@ -164,7 +159,6 @@
 
 */
 
-PARROT_EXPORT
 void
 IMCC_debug(PARROT_INTERP, int level, ARGIN(const char *fmt), ...)
 {

Modified: branches/gsoc_threads/compilers/imcc/debug.h
==============================================================================
--- branches/gsoc_threads/compilers/imcc/debug.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/debug.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -27,12 +27,32 @@
 /* HEADERIZER BEGIN: compilers/imcc/debug.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_EXPORT
+void dump_cfg(ARGIN(const IMC_Unit *unit))
+        __attribute__nonnull__(1);
+
+void dump_dominance_frontiers(ARGIN(const IMC_Unit *unit))
+        __attribute__nonnull__(1);
+
+void dump_dominators(ARGIN(const IMC_Unit *unit))
+        __attribute__nonnull__(1);
+
+void dump_instructions(PARROT_INTERP, ARGIN(const IMC_Unit *unit))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void dump_labels(ARGIN(const IMC_Unit *unit))
+        __attribute__nonnull__(1);
+
+void dump_loops(ARGIN(const IMC_Unit *unit))
+        __attribute__nonnull__(1);
+
+void dump_symreg(ARGIN(const IMC_Unit *unit))
+        __attribute__nonnull__(1);
+
 void IMCC_debug(PARROT_INTERP, int level, ARGIN(const char *fmt), ...)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 void IMCC_fatal(PARROT_INTERP,
     NULLOK(int code),
@@ -41,7 +61,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 void IMCC_fatal_standalone(PARROT_INTERP,
     int code,
@@ -50,7 +69,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 void IMCC_fataly(PARROT_INTERP,
     NULLOK(int code),
@@ -59,38 +77,29 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-PARROT_EXPORT
 void IMCC_info(PARROT_INTERP, int level, ARGIN(const char *fmt), ...)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-PARROT_EXPORT
 void IMCC_warning(PARROT_INTERP, ARGIN(const char *fmt), ...)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void dump_cfg(ARGIN(const IMC_Unit *unit))
-        __attribute__nonnull__(1);
-
-void dump_dominance_frontiers(ARGIN(const IMC_Unit *unit))
-        __attribute__nonnull__(1);
-
-void dump_dominators(ARGIN(const IMC_Unit *unit))
-        __attribute__nonnull__(1);
-
-void dump_instructions(PARROT_INTERP, ARGIN(const IMC_Unit *unit))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-void dump_labels(ARGIN(const IMC_Unit *unit))
-        __attribute__nonnull__(1);
-
-void dump_loops(ARGIN(const IMC_Unit *unit))
-        __attribute__nonnull__(1);
-
-void dump_symreg(ARGIN(const IMC_Unit *unit))
-        __attribute__nonnull__(1);
-
+#define ASSERT_ARGS_dump_cfg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(unit))
+#define ASSERT_ARGS_dump_dominance_frontiers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(unit))
+#define ASSERT_ARGS_dump_dominators __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(unit))
+#define ASSERT_ARGS_dump_instructions __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit))
+#define ASSERT_ARGS_dump_labels __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(unit))
+#define ASSERT_ARGS_dump_loops __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(unit))
+#define ASSERT_ARGS_dump_symreg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_IMCC_debug __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(fmt))
@@ -109,21 +118,6 @@
 #define ASSERT_ARGS_IMCC_warning __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(fmt))
-#define ASSERT_ARGS_dump_cfg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_dump_dominance_frontiers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_dump_dominators __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_dump_instructions __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_dump_labels __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_dump_loops __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_dump_symreg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: compilers/imcc/debug.c */
 

Modified: branches/gsoc_threads/compilers/imcc/imc.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/imc.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/imc.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -63,7 +63,6 @@
 
 */
 
-PARROT_EXPORT
 void
 imc_compile_all_units(PARROT_INTERP)
 {
@@ -113,7 +112,6 @@
 
 */
 
-PARROT_EXPORT
 void
 imc_compile_unit(PARROT_INTERP, ARGIN(IMC_Unit *unit))
 {
@@ -136,7 +134,6 @@
 
 */
 
-PARROT_EXPORT
 void
 imc_cleanup(PARROT_INTERP, ARGIN_NULLOK(void *yyscanner))
 {

Modified: branches/gsoc_threads/compilers/imcc/imc.h
==============================================================================
--- branches/gsoc_threads/compilers/imcc/imc.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/imc.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -106,35 +106,32 @@
 /* HEADERIZER BEGIN: compilers/imcc/imc.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_EXPORT
 void imc_cleanup(PARROT_INTERP, ARGIN_NULLOK(void *yyscanner))
         __attribute__nonnull__(1);
 
-PARROT_EXPORT
+void imc_close_unit(PARROT_INTERP, ARGIN_NULLOK(IMC_Unit *unit))
+        __attribute__nonnull__(1);
+
 void imc_compile_all_units(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-PARROT_EXPORT
 void imc_compile_unit(PARROT_INTERP, ARGIN(IMC_Unit *unit))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void imc_close_unit(PARROT_INTERP, ARGIN_NULLOK(IMC_Unit *unit))
-        __attribute__nonnull__(1);
-
 PARROT_CANNOT_RETURN_NULL
 IMC_Unit * imc_open_unit(PARROT_INTERP, IMC_Unit_Type t)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_imc_cleanup __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_imc_close_unit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_imc_compile_all_units __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_imc_compile_unit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_imc_close_unit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_imc_open_unit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -190,18 +187,14 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-int do_yylex_init(PARROT_INTERP, ARGOUT(yyscan_t* yyscanner))
+PARROT_CANNOT_RETURN_NULL
+void * imcc_compile_file(PARROT_INTERP,
+    ARGIN(const char *fullname),
+    ARGOUT(STRING **error_message))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(* yyscanner);
-
-PARROT_EXPORT
-void imcc_destroy(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void imcc_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*error_message);
 
 PARROT_WARN_UNUSED_RESULT
 int check_op(PARROT_INTERP,
@@ -227,20 +220,6 @@
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*error_message);
 
-PARROT_CANNOT_RETURN_NULL
-void * IMCC_compile_file(PARROT_INTERP, ARGIN(const char *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-void * IMCC_compile_file_s(PARROT_INTERP,
-    ARGIN(const char *s),
-    ARGOUT(STRING **error_message))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*error_message);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC * imcc_compile_pasm(PARROT_INTERP, ARGIN(const char *s))
@@ -285,6 +264,12 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*error_message);
 
+void imcc_destroy(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+void imcc_init(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
 PARROT_IGNORABLE_RESULT
 int /*@alt void@*/
 imcc_vfprintf(PARROT_INTERP,
@@ -346,13 +331,10 @@
         FUNC_MODIFIES(*unit)
         FUNC_MODIFIES(*r);
 
-#define ASSERT_ARGS_do_yylex_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_imcc_compile_file __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(yyscanner))
-#define ASSERT_ARGS_imcc_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_imcc_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+    , PARROT_ASSERT_ARG(fullname) \
+    , PARROT_ASSERT_ARG(error_message))
 #define ASSERT_ARGS_check_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(fullname) \
@@ -362,13 +344,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s) \
     , PARROT_ASSERT_ARG(error_message))
-#define ASSERT_ARGS_IMCC_compile_file __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_IMCC_compile_file_s __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s) \
-    , PARROT_ASSERT_ARG(error_message))
 #define ASSERT_ARGS_imcc_compile_pasm __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
@@ -389,6 +364,10 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s) \
     , PARROT_ASSERT_ARG(error_message))
+#define ASSERT_ARGS_imcc_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_imcc_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_imcc_vfprintf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(io) \
@@ -512,8 +491,8 @@
     AsmInYield
 } AsmState;
 
-PARROT_EXPORT void IMCC_push_parser_state(PARROT_INTERP);
-PARROT_EXPORT void IMCC_pop_parser_state(PARROT_INTERP, void *yyscanner);
+void IMCC_push_parser_state(PARROT_INTERP);
+void IMCC_pop_parser_state(PARROT_INTERP, void *yyscanner);
 
 /* globals store the state between individual e_pbc_emit calls */
 typedef struct subs_t {
@@ -545,7 +524,6 @@
 } imcc_globals;
 
 typedef struct _imc_info_t {
-    void                  *yyscanner;
     struct _imc_info_t    *prev;
     IMC_Unit              *imc_units;
     IMC_Unit              *last_unit;
@@ -592,7 +570,6 @@
     int                   error_code;      /* The Error code. */
     int                   expect_pasm;
     int                   gc_off;
-    int                   has_compile;
     int                   imcc_warn;
     int                   in_pod;
     int                   ins_line;
@@ -656,9 +633,8 @@
 #define UNSET_STATE_RUN_FROM_FILE(i) (COMPILER_STATE(i) &= ~PBC_RUN_FILE)
 
 /* imclexer.c */
-PARROT_EXPORT FILE * imc_yyin_set(FILE *new_yyin, void *yyscanner);
-PARROT_EXPORT FILE * imc_yyin_get(void *yyscanner);
-
+FILE * imc_yyin_set(FILE *new_yyin, void *yyscanner);
+FILE * imc_yyin_get(void *yyscanner);
 
 #endif /* PARROT_IMCC_IMC_H_GUARD */
 

Modified: branches/gsoc_threads/compilers/imcc/imcc.l
==============================================================================
--- branches/gsoc_threads/compilers/imcc/imcc.l	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/imcc.l	Thu Jun 10 21:09:12 2010	(r47545)
@@ -41,7 +41,6 @@
 #include "imc.h"
 #include "parser.h"
 
-// typedef struct yyguts_t       yyguts_t;
 typedef struct parser_state_t parser_state_t;
 
 /* parser state structure
@@ -125,7 +124,6 @@
 BIN             0[bB][01]+
 DOT             [.]
 SIGN            [-+]
-BIGINT          {SIGN}?{DIGITS}"L"
 FLOATNUM        {SIGN}?(({DIGITS}{DOT}{DIGIT}*|{DOT}{DIGITS})([eE]{SIGN}?{DIGITS})?|{DIGITS}[eE]{SIGN}?{DIGITS})
 LETTERDIGIT     [a-zA-Z0-9_]
 LABELLETTERDIGIT([a-zA-Z0-9_@])
@@ -137,7 +135,6 @@
 UNICODE         {ENC}{ENC}?{DQ_STRING}
 STRINGCONSTANT  {SQ_STRING}|{DQ_STRING}
 SQ_STRING       \'[^'\n]*\'
-RANKSPEC        \[[,]*\]
 EOL             \r?\n
 WS              [\t\f\r\x1a ]
 SP              [ ]
@@ -217,8 +214,6 @@
             yy_pop_state(yyscanner);
             yy_scan_string(IMCC_INFO(interp)->frames->heredoc_rest, yyscanner);
 
-            /* not sure we need this decrement; more testing needed */
-            IMCC_INFO(interp)->line--;
             return STRINGC;
         }
         else {
@@ -542,16 +537,6 @@
 <*>{BIN}              DUP_AND_RET(valp, INTC);
 <*>{OCT}              DUP_AND_RET(valp, INTC);
 
-<*>{BIGINT} {
-        valp->s = mem_sys_strdup(yytext);
-
-        /* trailing 'L' */
-        valp->s[strlen(valp->s) - 1] = '\0';
-
-        /* no BIGINT native format yet */
-        return STRINGC;
-    }
-
 <*>{STRINGCONSTANT} {
         valp->s = mem_sys_strdup(yytext);
 

Modified: branches/gsoc_threads/compilers/imcc/imcc.y
==============================================================================
--- branches/gsoc_threads/compilers/imcc/imcc.y	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/imcc.y	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1055,9 +1055,12 @@
 do_loadlib(PARROT_INTERP, ARGIN(const char *lib))
 {
     ASSERT_ARGS(do_loadlib)
-    STRING * const s = Parrot_str_unescape(interp, lib + 1, '"', NULL);
-    PMC    *ignored  = Parrot_load_lib(interp, s, NULL);
-    UNUSED(ignored);
+    STRING * const s       = Parrot_str_unescape(interp, lib + 1, '"', NULL);
+    PMC    * const lib_pmc = Parrot_load_lib(interp, s, NULL);
+    if (PMC_IS_NULL(lib_pmc) || !VTABLE_get_bool(interp, lib_pmc)) {
+        IMCC_fataly(interp, EXCEPTION_LIBRARY_ERROR,
+            "loadlib directive could not find library `%S'", s);
+    }
     Parrot_register_HLL_lib(interp, s);
 }
 

Modified: branches/gsoc_threads/compilers/imcc/imclexer.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/imclexer.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/imclexer.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -380,8 +380,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 148
-#define YY_END_OF_BUFFER 149
+#define YY_NUM_RULES 147
+#define YY_END_OF_BUFFER 148
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -389,129 +389,127 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[1095] =
+static yyconst flex_int16_t yy_accept[1088] =
     {   0,
         0,    1,    0,    1,    0,    1,   17,    1,    0,    1,
         0,    1,    0,    1,    0,    1,    0,    1,    0,    1,
-        4,    1,  149,  136,  135,   11,  135,  136,  136,   12,
-      136,  136,  136,  136,  136,  136,  116,  136,   96,  136,
-      120,  120,  136,   88,  136,   90,  134,  134,  134,  134,
-      134,  134,  134,  134,  136,  136,    1,    1,  136,  135,
-      135,  136,  136,  136,  136,  134,    1,    1,  136,  147,
-      142,  138,  142,  147,  147,  147,  147,  147,  120,  120,
-      147,  145,  145,  145,    1,    1,  147,   17,   18,   17,
+        4,    1,  148,  135,  134,   11,  134,  135,  135,   12,
+      135,  135,  135,  135,  135,  135,  116,  135,   96,  135,
+      120,  120,  135,   88,  135,   90,  133,  133,  133,  133,
+      133,  133,  133,  133,  135,  135,    1,    1,  135,  134,
+      134,  135,  135,  135,  135,  133,    1,    1,  135,  146,
+      141,  137,  141,  146,  146,  146,  146,  146,  120,  120,
+      146,  144,  144,  144,    1,    1,  146,   17,   18,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,    1,
 
-        1,   17,  148,  136,    9,    9,  136,  136,    1,    5,
+        1,   17,  147,  135,    9,    9,  135,  135,    1,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    1,
-        6,  136,   10,  136,  136,  136,  136,  136,  120,  120,
-      136,  136,  136,    1,    1,  136,   13,  136,  136,  136,
-      136,  136,  120,  120,  136,  136,  136,    1,    1,  148,
-        2,  148,  148,  148,  148,  148,  120,  120,  148,  148,
-      148,    1,    1,    4,    3,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    1,    1,  135,    0,   11,
-       93,    0,  125,    0,  132,  132,  132,  132,  132,  101,
+        6,  135,   10,  135,  135,  135,  135,  135,  120,  120,
+      135,  135,  135,    1,    1,  135,   13,  135,  135,  135,
+      135,  135,  120,  120,  135,  135,  135,    1,    1,  147,
+        2,  147,  147,  147,  147,  147,  120,  120,  147,  147,
+      147,    1,    1,    4,    3,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    1,    1,  134,    0,   11,
+       93,    0,  124,    0,  131,  131,  131,  131,  131,  101,
        85,  104,    0,   94,   99,    0,  120,   97,   98,  119,
 
       110,  118,  118,  118,  118,  118,  118,  118,  118,  118,
       118,  118,  118,  118,  118,  118,  118,  118,  102,  100,
-      119,    0,    0,  124,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   82,   89,
-       92,   65,   91,   83,  115,    0,  134,  117,  133,  134,
-       75,  134,  134,  134,  134,  134,  134,  105,   86,  106,
-       87,    1,    0,   15,    0,   92,   65,    0,  135,  118,
-      118,  118,  118,  118,  118,    0,    0,    0,    0,    1,
-      142,  138,  142,    0,    0,    0,  146,  146,  146,  146,
-      145,    0,  143,  145,    1,    1,   17,   18,   17,   17,
+      119,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   82,   89,   92,
+       65,   91,   83,  115,    0,  133,  117,  132,  133,   75,
+      133,  133,  133,  133,  133,  133,  105,   86,  106,   87,
+        1,    0,   15,    0,   92,   65,    0,  134,  118,  118,
+      118,  118,  118,  118,    0,    0,    0,    0,    1,  141,
+      137,  141,    0,    0,    0,  145,  145,  145,  145,  144,
+        0,  142,  144,    1,    1,   17,   18,   17,   17,   17,
 
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-       17,   17,   17,   17,   17,   17,   17,    1,   17,    0,
-        0,    9,    0,    1,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    1,    0,   10,    0,    0,    0,  125,    0,
-        0,    0,    0,  120,  119,    0,    0,  119,    0,    0,
-      124,    0,    0,    0,    0,    0,    0,    1,    1,    0,
-       13,    0,    0,    0,  125,    0,    0,    0,    0,  120,
-      119,    0,    0,  119,    0,    0,  124,    0,    0,    0,
-        0,    0,    0,    1,    1,    0,    2,    0,    0,    0,
-
-      125,    0,    0,    0,    0,  120,  119,    0,    0,  119,
-        0,    0,  124,    0,    0,    0,    0,    0,    0,    1,
-        1,    4,    3,    4,    4,    4,    4,    4,    4,    4,
+       17,   17,   17,   17,   17,    1,   17,    0,    0,    9,
+        0,    1,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    1,
+        0,   10,    0,    0,    0,  124,    0,    0,    0,    0,
+      120,  119,    0,    0,  119,    0,    0,    0,    0,    0,
+        0,    0,    0,    1,    1,    0,   13,    0,    0,    0,
+      124,    0,    0,    0,    0,  120,  119,    0,    0,  119,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,    1,
+        0,    2,    0,    0,    0,  124,    0,    0,    0,    0,
+
+      120,  119,    0,    0,  119,    0,    0,    0,    0,    0,
+        0,    0,    0,    1,    1,    4,    3,    4,    4,    4,
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    1,   95,  128,  129,  131,  130,    0,  118,
+        4,    4,    4,    4,    4,    1,   95,  127,  128,  130,
+      129,    0,  118,  118,  118,  118,  118,  118,  118,  118,
       118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-      118,  118,  118,  118,  103,  119,  122,    0,  119,  123,
-      121,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,  108,  107,   84,  114,    0,    0,  133,  134,
-       78,  134,   79,   80,  134,  134,  134,    0,  118,  118,
-        0,    0,  139,  144,  141,  146,  146,  146,  146,  146,
-      145,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-       17,   17,   17,   17,   17,   17,    0,    0,    0,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    0,    0,    0,  119,  122,    0,  119,  123,  121,
-        0,    0,    0,    0,    0,    0,    0,    0,  119,  122,
+      118,  118,  118,  118,  118,  118,  118,  103,  119,  122,
         0,  119,  123,  121,    0,    0,    0,    0,    0,    0,
-        0,    0,  119,  122,    0,  119,  123,  121,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  108,  107,   84,  114,    0,
 
-        0,    0,    0,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    0,  119,   69,
-      118,  118,  118,  118,   25,  118,  118,  118,  118,  118,
-       22,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-      118,  118,   24,  118,  118,    0,    0,    0,    0,    0,
-        0,    0,   46,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  126,    0,    0,
-      109,    0,  127,    0,    0,    0,   74,   77,  134,  134,
-      134,  134,    0,  141,  146,  146,  146,  146,  145,  145,
-       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+        0,  132,  133,   78,  133,   79,   80,  133,  133,  133,
+        0,  118,  118,    0,    0,  138,  143,  140,  145,  145,
+      145,  145,  145,  144,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,    0,
+        0,    0,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    0,    0,    0,  119,  122,    0,
+      119,  123,  121,    0,    0,    0,    0,    0,    0,    0,
+        0,  119,  122,    0,  119,  123,  121,    0,    0,    0,
+        0,    0,    0,    0,    0,  119,  122,    0,  119,  123,
+      121,    0,    0,    0,    0,    0,    4,    4,    4,    4,
 
-       17,   17,   17,   17,   17,   17,    0,    0,    0,    0,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        0,  119,    0,    0,    0,    0,  126,    0,    0,    0,
-        0,    0,  127,    0,    0,    0,    0,    0,    0,  119,
-        0,    0,    0,    0,  126,    0,    0,    0,    0,    0,
-      127,    0,    0,    0,    0,    0,    0,  119,    0,    0,
-        0,    0,  126,    0,    0,    0,    0,    0,  127,    0,
-        0,    0,    0,    0,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    4,    4,  118,
-      118,   28,  118,  118,   20,  118,  118,  118,  118,   19,
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+        0,  119,   69,  118,  118,  118,  118,   25,  118,  118,
+      118,  118,  118,   22,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,   24,  118,  118,    0,    0,
+        0,    0,    0,    0,    0,   46,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      125,    0,    0,  109,    0,  126,    0,    0,    0,   74,
+       77,  133,  133,  133,  133,    0,  140,  145,  145,  145,
+      145,  144,  144,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,    0,
+
+        0,    0,    0,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    0,  119,    0,    0,    0,    0,  125,
+        0,    0,    0,    0,    0,  126,    0,    0,    0,    0,
+        0,    0,  119,    0,    0,    0,    0,  125,    0,    0,
+        0,    0,    0,  126,    0,    0,    0,    0,    0,    0,
+      119,    0,    0,    0,    0,  125,    0,    0,    0,    0,
+        0,  126,    0,    0,    0,    0,    0,    4,    4,    4,
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,  118,  118,   28,  118,  118,   20,  118,  118,
+      118,  118,   19,  118,  118,  118,  118,  118,  118,  118,
 
+      118,  118,  118,  118,  118,   44,    0,   60,    0,   41,
+        0,    0,   40,   39,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  133,  133,  133,  133,
+       14,    0,  136,   20,  145,   19,  144,  144,   17,   17,
+       17,   17,   16,   17,   20,   19,    0,    0,    5,    5,
+        5,    5,   20,   19,    0,    0,   20,   19,    0,    0,
+       20,   19,    0,    0,    4,    4,    4,    4,  118,  118,
+       71,  118,  118,  118,  118,  118,  118,  118,  118,   70,
+      112,  118,  118,  118,   73,  118,  118,  118,  118,  118,
+      118,   54,    0,    0,    0,    0,    0,   38,   64,    0,
+
+        0,    0,   45,    0,    0,   51,    0,    0,  133,  133,
+       81,   76,  145,  144,  144,   17,   17,    0,    0,    5,
+        5,    0,    0,    0,    0,    0,    0,    4,    4,  118,
       118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-      118,  118,   44,    0,   60,    0,   41,    0,    0,   40,
-       39,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  134,  134,  134,  134,   14,    0,  137,
-       20,  146,   19,  145,  145,   17,   17,   17,   17,   16,
-       17,   20,   19,    0,    0,    5,    5,    5,    5,   20,
-       19,    0,    0,   20,   19,    0,    0,   20,   19,    0,
-        0,    4,    4,    4,    4,  118,  118,   71,  118,  118,
-      118,  118,  118,  118,  118,  118,   70,  112,  118,  118,
-      118,   73,  118,  118,  118,  118,  118,  118,   54,    0,
-
-        0,    0,    0,    0,   38,   64,    0,    0,    0,   45,
-        0,    0,   51,    0,    0,  134,  134,   81,   76,  146,
-      145,  145,   17,   17,    0,    0,    5,    5,    0,    0,
-        0,    0,    0,    0,    4,    4,  118,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-      118,   56,  118,  118,  118,  118,    0,    0,    0,    0,
-       37,    0,    0,    0,    0,   61,    0,   47,  134,  134,
-      140,  145,  145,   17,   17,    0,    0,    5,    5,    0,
-        0,    0,    0,    0,    0,    4,    4,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  113,  118,   59,  118,
-
-      118,  118,  118,   32,   23,  118,  118,  118,    0,    0,
-        0,    0,   48,    0,    0,    0,    0,    0,    8,   17,
-        8,    5,    5,    0,    8,    0,    8,    0,    8,    4,
-        4,   21,  118,  118,  118,   27,  118,  118,  118,  118,
-       31,  118,  118,  118,   29,  118,  118,   58,   67,    0,
-        0,   66,   63,   62,   43,    0,    7,    7,    7,    7,
-        7,    4,  118,  118,  118,  118,   36,  118,  118,  118,
-       30,   68,  118,   55,   42,    0,    0,   26,  118,  118,
-       34,   52,  118,  118,   57,   50,   49,  118,   35,   53,
-       72,  111,   33,    0
-
+      118,  118,  118,  118,   56,  118,  118,  118,  118,    0,
+        0,    0,    0,   37,    0,    0,    0,    0,   61,    0,
+       47,  133,  133,  139,  144,  144,   17,   17,    0,    0,
+        5,    5,    0,    0,    0,    0,    0,    0,    4,    4,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  113,
+      118,   59,  118,  118,  118,  118,   32,   23,  118,  118,
+
+      118,    0,    0,    0,    0,   48,    0,    0,    0,    0,
+        0,    8,   17,    8,    5,    5,    0,    8,    0,    8,
+        0,    8,    4,    4,   21,  118,  118,  118,   27,  118,
+      118,  118,  118,   31,  118,  118,  118,   29,  118,  118,
+       58,   67,    0,    0,   66,   63,   62,   43,    0,    7,
+        7,    7,    7,    7,    4,  118,  118,  118,  118,   36,
+      118,  118,  118,   30,   68,  118,   55,   42,    0,    0,
+       26,  118,  118,   34,   52,  118,  118,   57,   50,   49,
+      118,   35,   53,   72,  111,   33,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -557,289 +555,289 @@
        10,   10,   10,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1251] =
+static yyconst flex_int16_t yy_base[1244] =
     {   0,
         0,   64,   88,   70,  153,   75,  218,   82,  283,  113,
       348,  117,  109,  412,  434,  121,  499,  130,  564,  135,
-      629,  140, 4665, 7097,  693, 7097,  697, 4639,   63, 7097,
-      385, 4638,   56, 4648,   58,  686, 7097,  696,  703,   60,
-      750,  780,  785,   72,   83,  124,  703,  797,  767,  825,
-      765,  759,  769,  833,   63,  766,  848,  856,  851,  422,
-      864,  862,  871,  838, 4623,  848,  803,  898,  819, 7097,
-      902, 7097,  906,   84,  898, 4570,  920,  929,    0,  935,
-     4553,  405,  951,  828,  941,  956,  909,    0, 7097, 4573,
-      689, 4563,  965,  969, 1004,  965, 4550, 1066, 1131,  991,
-
-      995, 4529, 7097,  990, 1009, 1077, 4549,   87, 1001,    0,
-        0,  791, 1032, 1066, 1180, 1003, 4547, 1242, 1307, 1013,
-      878,  426, 7097,  894, 1111, 1010, 1105, 1160, 1370, 1129,
-      959, 1432, 1497, 1057, 1098,  974, 7097, 1032, 1163, 1052,
-     1218, 1276, 1560, 1300, 1149, 1622, 1687, 1157, 1182, 1041,
-     7097, 1101, 1185, 1116, 1266, 1337, 1750, 1306, 1209, 1812,
-     1877, 1225, 1259,    0, 7097, 4567,  880, 4557, 1254, 1356,
-     1926, 1369, 4544, 1988, 2053, 1213, 1287, 1297, 1346, 7097,
-     7097, 1168, 7097,    0,    0, 1344, 1360, 1374, 1398, 7097,
-     7097, 7097, 4555, 7097, 7097, 1406, 1443, 7097, 7097, 1448,
-
-     7097,    0, 4532, 4512, 4518, 1136, 4510, 4512,  658, 4508,
-     1425,  105,  883,  922, 4514,  727, 4517, 4508, 4532, 7097,
-     1505, 1174, 1466, 7097, 1185,    0, 4503, 4513, 4502, 1179,
-      816, 1292,  685,  947, 4498,   22, 4498, 4491, 1109, 7097,
-     7097, 7097, 7097, 1252, 4526, 4525, 1406, 4540, 1525, 1533,
-     1443, 1543, 1467, 1544, 1549, 1560, 1562, 7097, 7097, 7097,
-     7097, 1593, 1290, 7097, 1300, 1366, 1382, 1513, 1449, 4492,
-     4492, 1482, 4502, 4501, 4498, 1349, 4483, 4476, 1162, 1582,
-     1616, 7097, 1639, 4512, 1630,    0,    0, 4481, 4483, 1199,
-     1321, 4523, 1638, 1515, 1661, 1665,    0, 7097, 1265,    0,
-
-        0, 4505, 1652, 1698, 1704, 4458, 4457, 1716, 1391, 1661,
-        0, 1472, 2100, 1543, 2147, 2212, 2277, 1607, 4446, 4455,
-     4454, 1744,  909, 1674,    0, 1736,    0, 1687, 1823, 1828,
-     4453, 4452, 1885, 1510, 1778,    0, 1710, 2324, 1563, 2371,
-     2436, 2501, 1753, 1536, 7097, 1597, 1799, 1856, 1601, 1612,
-     1737, 1756, 1851, 2564, 1905, 1778, 1784, 2004, 1894, 1918,
-     1652, 1954, 2608, 1964, 2655, 2720, 2785, 1805, 1862, 1681,
-     7097, 1718, 1926, 1946, 1772, 1828, 1907, 1975, 2016, 2848,
-     2026, 1960, 1981, 2070, 2013, 2082, 1858, 2091, 2892, 2037,
-     2939, 3004, 3069, 2078, 2103, 1978, 7097, 2018, 2128, 2134,
-
-     2039, 2084, 2111, 2121, 2163, 3132, 2293, 2136, 2301, 2387,
-     2172, 2174, 2123, 2305, 3176, 2194, 3223, 3288, 3353, 2200,
-     2205,    0, 7097, 1321,    0,    0, 4489, 2299, 2382, 2310,
-     4450, 4449, 2501, 2160, 2341,    0, 2314, 3400, 1735, 3447,
-     3512, 3577, 2345, 2416, 2403, 2410, 2513, 2517, 2529,    0,
-     4464, 4441, 4445, 4441, 4438, 4445, 4367, 4358, 4362,  786,
-     4353, 4361, 1051, 4369, 4353, 4359, 4360, 4352, 4364, 4348,
-     4347, 4362, 4354, 4357, 7097, 2533, 2180, 2537, 2550, 2394,
-        0, 4348, 4350, 4358, 4347, 2249, 4336, 4355, 4346, 4335,
-     4342, 4340, 4345, 4331, 4330, 4330, 4327, 4343, 4335, 4342,
-
-     1390, 4371, 7097, 7097, 4357, 7097, 1441, 4354, 2564, 2566,
-     2579, 2581, 2583, 2584, 2592, 2624, 2600, 2334, 4332, 4333,
-     4324, 4348, 7097, 2663,    0,    0, 4304, 4297, 4304, 4293,
-     2598, 2677, 4294, 4291, 2785, 2308, 2668, 2681, 2509, 3624,
-     1921, 4331, 1937, 3671, 3736, 4283, 4290, 4287, 1754, 2690,
-     4288, 4282, 2797, 2339, 2694, 2801, 2557, 3783, 2610, 3830,
-     3895, 2826, 2809, 2622, 2834, 2615, 2854, 2868, 2880, 3958,
-     2920, 2829, 2926, 4005, 4070, 2888, 2922, 2832, 2955, 2912,
-     2967, 2977, 3085, 4133, 3104, 2894, 3110, 4180, 4245, 3126,
-     3087, 2914, 3153, 3096, 3099, 3165, 3173, 4308, 3119, 2979,
-
-     3160, 4355, 4420, 3193, 4283, 4280, 3223, 2345, 2973, 3169,
-     2842, 4467, 2011, 4320, 2129, 4514, 4579, 3235, 3239,    0,
-     4277, 4276, 4274, 4266, 4282, 4276, 4280, 4277, 4268, 4264,
-        0, 4271, 4271, 4273, 4257, 4264, 4197, 4201, 4199, 4199,
-     4179, 4197,    0, 4186, 4185, 4182, 4183, 4174, 4186, 4172,
-     4171, 4175, 7097, 4183, 4174, 4177, 4166, 4178, 4170,  783,
-     4176, 4162, 4162, 4168, 4161, 4173, 2584, 7097,    0, 4203,
-     7097, 2637, 7097,    0, 4191, 4206, 2870, 3116, 3364, 3365,
-     3373, 3194, 2423,    0, 4160, 4165, 4164, 4163, 3108, 3374,
-     3245, 3251, 4162, 4161, 2794,    0,    0, 4190, 2819,    0,
-
-        0, 4644, 4193, 4709, 4149, 2558, 4128, 4126, 1733, 1818,
-     3255, 3259, 4124, 4123, 3158,    0, 4774, 4161, 4839, 4117,
-     3380, 3388, 3391, 3428, 3475, 3607, 2638, 2704, 3401, 3463,
-     3609, 3615, 2714, 2965, 4904, 3094, 4969, 4115, 3473, 3477,
-     3437, 3593, 3617, 3622, 3178, 3198, 3497, 3595, 3624, 3699,
-     3247, 3279, 5034, 3431, 5099, 4110, 3485, 3688, 3602, 3605,
-     3811, 3817, 3281, 3382, 3701, 3711, 3862, 3986, 3465, 3481,
-     5164, 3630, 5229, 4108, 3639, 3679, 4110, 4105, 2921,    0,
-        0, 4138, 3103,    0,    0, 5294, 4142, 5359, 4098, 4088,
-     4093,    0, 4086, 1855,    0, 4087, 4101, 4082, 4097,    0,
-
-     4089, 4088, 4084, 4027, 4009, 4022, 4013, 4005, 4005, 1006,
-     4017, 4015, 7097, 4018, 7097, 4013, 7097, 4015, 4012, 7097,
-     7097, 4001, 4000, 3996, 3965, 3950, 3942, 3925, 3931, 3915,
-     3923, 3906, 3842, 3976, 4148, 4016, 3800, 7097, 3487,    0,
-        0, 3834,    0, 2580, 3640,    0,    0, 5424, 1059, 7097,
-     3878, 7097, 7097, 1332, 1986,    0,    0, 5489, 1540, 3499,
-     3713, 3668, 1097, 3717, 3721, 3676, 1231, 3725, 3727, 3682,
-     1504,    0,    0, 3756, 3158, 3821, 3796,    0, 3780, 3773,
-     3767, 3764, 3757, 3689, 3680, 3662,    0, 3649, 3643, 3619,
-     3623,    0, 3580, 3582, 3566, 3569, 3530, 3468,    0, 3428,
-
-     3400, 3386, 3394, 3388, 7097, 7097, 3370, 3365, 3358, 7097,
-     3352, 3340, 7097, 3352, 3329, 3975, 4150, 3851, 3852, 3874,
-     3836, 3948, 1800, 1908, 1438, 1810, 2247, 2260, 1174, 1745,
-     1870, 2063, 2494, 2496, 2778, 2831, 3313, 3820, 3318, 3227,
-     3222, 3181, 3127, 3114, 3102, 3094, 3083, 3070, 3043, 2951,
-     2947,    0, 2936, 2919, 2926, 2868, 2816, 2797, 2770, 2652,
-     7097, 2629, 2634, 2629, 2553, 7097, 2533, 7097, 3958, 3960,
-     3882, 2382, 3857, 1295, 2643,  772, 1490, 3211, 3599,  942,
-     1965, 2950, 3091, 3458, 3588, 3841, 3990, 2518, 2475, 2462,
-     2384, 2368, 2350, 2349, 2332, 2324,    0, 2289,    0, 2268,
-
-     2265, 2236, 2164,    0,    0, 2129, 2130, 2112, 2102, 2075,
-     2051, 2025, 7097, 2027, 2018, 1972, 1947, 1709, 1986, 2898,
-     1978, 3418, 1947, 3885, 4030, 4039, 4033, 4044, 4049, 3625,
-     1931,    0, 1842, 1816, 1765,    0, 1728, 1728, 1694, 1650,
-        0, 1585, 1556, 1522,    0, 1476, 1429,    0, 7097, 1375,
-     1360, 7097, 7097, 7097, 7097, 1321, 7097,    0, 3846, 3868,
-     3969,    0, 1275, 1198, 1185, 1145,    0, 1117, 1071, 1024,
-        0,    0,  926,    0, 7097,  869,  827,    0,  752,  675,
-        0,  367,  356,   61,    0, 7097, 7097,   23,    0,    0,
-        0,    0,    0, 7097, 5554, 5560, 5570, 5578, 5589, 5593,
-
-     5601, 5608, 5619, 5630, 5641, 5652, 5659, 5670, 5681, 5692,
-     5703, 5714, 5725, 5736, 5747, 5758, 5769, 5780, 5791, 5802,
-     5813, 5824, 5835, 5846, 5857, 5868, 5874, 5884, 5890, 5896,
-     5901, 5909, 5918, 5929, 5935, 5939, 5945, 5952, 5963, 5974,
-     5985, 5996, 6007, 6018, 6029, 6040, 6051, 6062, 6073, 6084,
-     6095, 6106, 6117, 6128, 6139, 6150, 6161, 6172, 6183, 6194,
-     6205, 6211, 6216, 6222, 6231, 6242, 6253, 6260, 6268, 6279,
-     6285, 6291, 6297, 6304, 6315, 6326, 6337, 6348, 6359, 6366,
-     6377, 6388, 6399, 6410, 6421, 6432, 6443, 6454, 6465, 6476,
-     6487, 6498, 6509, 6520, 6531, 6542, 6553, 6564, 6575, 6586,
-
-     6597, 6608, 6619, 6625, 6636, 6647, 6658, 6665, 6673, 6684,
-     6690, 6696, 6703, 6714, 6725, 6736, 6747, 6758, 6765, 6776,
-     6787, 6798, 6809, 6820, 6831, 6842, 6853, 6864, 6875, 6886,
-     6897, 6908, 6919, 6930, 6941, 6952, 6963, 6974, 6985, 6996,
-     7007, 7018, 7024, 7032, 7043, 7049, 7056, 7067, 7074, 7085
+      629,  140, 4821, 6967,  693, 6967,  697, 4795,   63, 6967,
+      385, 4794,   56, 4806,   58,  686, 6967,  696,  703,   60,
+      750,  778,  783,   72,   83,  124,  703,  794,  765,  823,
+      768,  759,  831,  767,   63,  753,  846,  854,  849,  422,
+      862,  861,  869,  845, 4793,  846,  884,  899,  798, 6967,
+      905, 6967,  931,   84,  904, 4804,  926,  931,    0,  937,
+     4791,  405,  949,  845,  958,  971,  881,    0, 6967, 4810,
+      689, 4800,  967,  971, 1006,  967, 4787, 1068, 1133,  993,
+
+      997, 4766, 6967,  992, 1011, 1079, 4786,   87, 1003,    0,
+        0,  819, 1034, 1068, 1182, 1005, 4784, 1244, 1309, 1015,
+      766,  426, 6967,  869, 1109,  926, 1101, 1149, 1372, 1151,
+     1034, 1434, 1499, 1059, 1124,  976, 6967, 1012, 1174, 1099,
+     1212, 1188, 1562, 1235, 1151, 1624, 1689, 1158, 1162, 1043,
+     6967, 1062, 1179, 1181, 1273, 1337, 1752, 1244, 1219, 1814,
+     1879, 1297, 1326,    0, 6967, 4804,  904, 4794, 1325, 1317,
+     1928, 1324, 4781, 1990, 2055, 1222, 1367, 1378, 1236, 6967,
+     6967,  909, 6967,    0,    0, 1377, 1384, 1400, 1408, 6967,
+     6967, 6967, 4792, 6967, 6967, 1434, 1445, 6967, 6967, 1449,
+
+     6967,    0, 4769, 4749, 4755,  767, 4743, 4745,  658, 4741,
+     1060,  105,  743,  750, 4747, 1011, 4748, 4657, 4681, 6967,
+     1507, 1111, 1462, 1284,    0, 4652, 4662, 4652, 1136,  877,
+     1306,  685,  949, 4648,   22, 4648, 4641, 1400, 6967, 6967,
+     6967, 6967, 1240, 4676, 4675, 1263, 4690, 1527, 1471, 1400,
+     1535, 1545, 1546, 1551, 1562, 1564, 6967, 6967, 6967, 6967,
+     1516, 1278, 6967, 1347, 1358, 1410, 1428, 1488, 4642, 4642,
+     1331, 4652, 4651, 4648, 1420, 4633, 4630, 1230, 1530, 1609,
+     6967, 1618, 4666, 1632,    0,    0, 4635, 4637, 1246, 1101,
+     4678, 1640, 1536, 1641, 1663,    0, 6967, 1223,    0,    0,
+
+     4671, 1650, 1700, 1704, 4632, 4631, 1717, 1466, 1659, 1521,
+     2102, 1563, 2149, 2214, 2279, 1584, 4620, 4628, 4627, 1740,
+     1113, 1598,    0, 1737,    0, 1663, 1825, 1746, 4626, 4625,
+     1829, 1477, 1780, 1689, 2326, 1565, 2373, 2438, 2503, 1602,
+     1553, 6967, 1614, 1724, 1738, 1654, 1673, 1781, 1800, 1895,
+     1907, 2006, 1683, 1786, 2028, 1849, 1919, 1853, 2566, 1858,
+     2613, 2678, 2743, 1805, 1904, 1748, 6967, 1776, 1860, 1948,
+     1830, 1873, 1909, 1956, 1958, 2072, 2095, 1962, 1969, 2165,
+     1966, 2019, 2084, 2806, 2017, 2853, 2918, 2983, 2040, 2080,
+     1927, 6967, 1972, 2093, 2103, 1980, 2014, 2123, 2125, 2177,
+
+     2295, 2307, 2167, 2317, 2389, 2173, 2187, 2303, 3046, 2327,
+     3093, 3158, 3223, 2347, 2355,    0, 6967, 1347,    0,    0,
+     4662, 2342, 2384, 2503, 4623, 4621, 2515, 2089, 2401, 2092,
+     3270, 1704, 3317, 3382, 3447, 2134, 2200, 2405, 2412, 2519,
+     2531, 2544,    0, 4632, 4612, 4616, 4612, 4607, 4606, 4531,
+     4518, 4521,  920, 4512, 4520,  763, 4528, 4512, 4518, 4519,
+     4511, 4523, 4507, 4506, 4521, 4513, 4516, 6967, 2552, 2159,
+     2535, 2556, 2511,    0, 4507, 4509, 4517, 4506, 2531, 4495,
+     4514, 4505, 4494, 4501, 4499, 4504, 4490, 4488, 4488, 4485,
+     4501, 4493, 4500, 1393, 4524, 6967, 6967, 4510, 6967, 1410,
+
+     4510, 2574, 2761, 2584, 2624, 2625, 2626, 2765, 2755, 2771,
+     2543, 4486, 4475, 4397, 4423, 6967, 2635,    0,    0, 4400,
+     4393, 4400, 4389, 2285, 2645, 4390, 4387, 2776, 2163, 2584,
+     2624, 2631, 3494, 1569, 4427, 1790, 3541, 3606, 4379, 4386,
+     4383, 1895, 2823, 4384, 4381, 2853, 2346, 2649, 2770, 2653,
+     3653, 2306, 3700, 3765, 2881, 2769, 2576, 2999, 2810, 2885,
+     3011, 3007, 3828, 3031, 2820, 3033, 3875, 3940, 3040, 2782,
+     2837, 3109, 3060, 3121, 3131, 3066, 4003, 3074, 3001, 3253,
+     4050, 4115, 3248, 2796, 3079, 3255, 3117, 3275, 3333, 3341,
+     4178, 3299, 3013, 3477, 4225, 4290, 2894, 4382, 4379, 3328,
+
+     2375, 3125, 3223, 2861, 4337, 1894, 4419, 1947, 4384, 4449,
+     3288, 3344,    0, 4376, 4379, 4377, 4369, 4385, 4379, 4382,
+     4379, 4370, 4366,    0, 4372, 4372, 4372, 4356, 4363, 4360,
+     4363, 4361, 4346, 4316, 4332,    0, 4320, 4313, 4309, 4310,
+     4301, 4242, 4228, 4227, 4231, 6967, 4238, 4229, 4232, 4221,
+     4233, 4225,  864, 4231, 4217, 4218, 4224, 4217, 4229, 1949,
+     6967,    0, 4259, 6967, 2046, 6967,    0, 4247, 4262, 2795,
+     3030, 3459, 3460, 3476, 3470, 2425,    0, 4216, 4221, 4220,
+     4218, 3099, 3288, 3348, 3356, 4217, 4216, 2293,    0,    0,
+     4248, 2592,    0,    0, 4514, 4252, 4579, 4208, 2659, 4211,
+
+     4210, 1293, 1682, 3469, 3475, 4209, 4207, 2884,    0, 4644,
+     4238, 4709, 4194, 3499, 3557, 3522, 3527, 3681, 3687, 2759,
+     2772, 3268, 3368, 3732, 3856, 2908, 3048, 4774, 3497, 4839,
+     4168, 3566, 3571, 3673, 3676, 3862, 4031, 3054, 3123, 3559,
+     3591, 4037, 4206, 3250, 3262, 4904, 3593, 4969, 4167, 3725,
+     3729, 3848, 3851, 4212, 4365, 3280, 3463, 3749, 3751, 4371,
+     4412, 3474, 3504, 5034, 3595, 5099, 4164, 3513, 3737, 4166,
+     4159, 3015,    0,    0, 4191, 3116,    0,    0, 5164, 4195,
+     5229, 4151, 4137, 4142,    0, 4135, 3847,    0, 4136, 4150,
+     4131, 4146,    0, 4138, 4137, 4133, 4145, 4127, 4140, 4131,
+
+     4055, 4055, 3674, 4066, 4064, 6967, 4067, 6967, 4062, 6967,
+     4060, 4050, 6967, 6967, 4035, 4038, 4040, 4025, 4023, 4012,
+     3980, 3986, 3965, 3970, 3953, 3960, 4525, 4663, 4063, 4020,
+     6967, 3579,    0,    0, 3957,    0, 3817, 4188,    0,    0,
+     5294, 1044, 6967, 3932, 6967, 6967,  943,  826,    0,    0,
+     5359, 1123, 3683, 3689, 3691, 1167, 3831, 3833, 3788, 1984,
+     3838, 3840, 3795, 2729,    0,    0, 3811, 3306, 3891, 3887,
+        0, 3882, 3865, 3859, 3849, 3816, 3819, 3811, 3712,    0,
+     3719, 3699, 3683, 3678,    0, 3647, 3636, 3621, 3563, 3554,
+     3559,    0, 3531, 3507, 3491, 3463, 3453, 6967, 6967, 3417,
+
+     3412, 3397, 6967, 3331, 3310, 6967, 3300, 3274, 4238, 4354,
+     3896, 3897, 3912, 3993, 3996, 1697, 1960, 1061, 1492, 2000,
+     2289, 1737, 1886, 2366, 2498, 2848, 3534, 3684, 3857, 3227,
+     3864, 3230, 3214, 3215, 3197, 3206, 3193, 3095, 3095, 3040,
+     3030, 2999, 2973, 2969,    0, 2951, 2850, 2840, 2818, 2781,
+     2779, 2775, 2712, 6967, 2696, 2634, 2618, 2549, 6967, 2550,
+     6967, 3913, 4005, 3921, 2384, 4064, 2137, 2841, 1302, 1958,
+     3300, 3328, 1201, 1360, 1374, 1808, 2160, 2788, 3104, 3522,
+     2538, 2517, 2496, 2469, 2459, 2376, 2367, 2342, 2326,    0,
+     2283,    0, 2241, 2231, 2168, 2149,    0,    0, 2134, 2101,
+
+     2089, 2086, 2031, 2031, 2012, 6967, 1945, 1869, 1840, 1809,
+     1456, 1855, 1770, 1830, 1836, 1806, 3927, 4078, 4088, 4093,
+     4096, 4101, 2796, 1800,    0, 1707, 1659, 1628,    0, 1583,
+     1554, 1542, 1478,    0, 1466, 1438, 1431,    0, 1333, 1246,
+        0, 6967, 1239, 1221, 6967, 6967, 6967, 6967, 1214, 6967,
+        0, 3934, 4014, 4023,    0, 1144,  990,  989,  971,    0,
+      926,  897,  860,    0,    0,  807,    0, 6967,  798,  781,
+        0,  766,  675,    0,  367,  356,   61,    0, 6967, 6967,
+       23,    0,    0,    0,    0,    0, 6967, 5424, 5430, 5440,
+     5448, 5459, 5463, 5471, 5478, 5489, 5500, 5511, 5522, 5529,
+
+     5540, 5551, 5562, 5573, 5584, 5595, 5606, 5617, 5628, 5639,
+     5650, 5661, 5672, 5683, 5694, 5705, 5716, 5727, 5738, 5744,
+     5754, 5760, 5766, 5771, 5779, 5788, 5799, 5805, 5809, 5815,
+     5822, 5833, 5844, 5855, 5866, 5877, 5888, 5899, 5910, 5921,
+     5932, 5943, 5954, 5965, 5976, 5987, 5998, 6009, 6020, 6031,
+     6042, 6053, 6064, 6075, 6081, 6086, 6092, 6101, 6112, 6123,
+     6130, 6138, 6149, 6155, 6161, 6167, 6174, 6185, 6196, 6207,
+     6218, 6229, 6236, 6247, 6258, 6269, 6280, 6291, 6302, 6313,
+     6324, 6335, 6346, 6357, 6368, 6379, 6390, 6401, 6412, 6423,
+     6434, 6445, 6456, 6467, 6478, 6489, 6495, 6506, 6517, 6528,
+
+     6535, 6543, 6554, 6560, 6566, 6573, 6584, 6595, 6606, 6617,
+     6628, 6635, 6646, 6657, 6668, 6679, 6690, 6701, 6712, 6723,
+     6734, 6745, 6756, 6767, 6778, 6789, 6800, 6811, 6822, 6833,
+     6844, 6855, 6866, 6877, 6888, 6894, 6902, 6913, 6919, 6926,
+     6937, 6944, 6955
     } ;
 
-static yyconst flex_int16_t yy_def[1251] =
+static yyconst flex_int16_t yy_def[1244] =
     {   0,
-     1094,    1,    1,    3, 1094,    5, 1094,    7, 1094,    9,
-     1094,   11,    9,    9, 1094,   15, 1094,   17, 1094,   19,
-     1094,   21, 1094, 1094, 1094, 1094, 1094, 1094, 1095, 1094,
-     1096, 1094, 1094, 1097, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1098, 1098, 1098, 1098,
-     1098, 1098, 1098, 1098, 1094, 1094, 1094, 1094, 1099, 1094,
-     1094, 1094,   39, 1094, 1094, 1098, 1094, 1094, 1099, 1094,
-     1094, 1094, 1094, 1095, 1100, 1097, 1094, 1101,   41, 1094,
-     1094, 1102, 1102, 1102, 1094, 1094, 1099, 1103, 1094, 1103,
-     1104, 1105, 1103, 1103, 1103,   95, 1103, 1106, 1106, 1103,
-
-     1103, 1103, 1094, 1094,   41, 1094, 1107, 1107, 1094, 1108,
-     1108, 1109, 1108, 1108, 1108,  115, 1108, 1110, 1110, 1108,
-     1095, 1111, 1094, 1111, 1112, 1113, 1111, 1111, 1111,  129,
-     1111, 1114, 1114, 1111, 1111, 1115, 1094, 1115, 1116, 1117,
-     1115, 1115, 1115,  143, 1115, 1118, 1118, 1115, 1115, 1119,
-     1094, 1119, 1120, 1121, 1119, 1119, 1119,  157, 1119, 1122,
-     1122, 1119, 1119, 1123, 1094, 1123, 1124, 1125, 1123, 1123,
-     1123,  171, 1123, 1126, 1126, 1123, 1123, 1094, 1094, 1094,
-     1094, 1095, 1094, 1095, 1127, 1127, 1127, 1127, 1127, 1094,
-     1094, 1094, 1128, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-
-     1094, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
-     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1130, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1131, 1132, 1133, 1132, 1132,
-     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1094, 1094, 1094,
-     1094, 1094, 1134, 1094, 1134, 1134, 1134, 1134, 1094, 1129,
-     1129, 1129, 1129, 1129, 1129, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1135, 1135, 1136, 1137, 1137, 1137, 1137,
-     1138, 1133, 1138, 1138, 1094, 1094, 1139, 1094, 1140, 1139,
-
-     1140, 1141, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
-     1139, 1139, 1139, 1139, 1142, 1094, 1142, 1139, 1139, 1094,
-     1094, 1094, 1131, 1094, 1143, 1144, 1143, 1143, 1143, 1143,
-     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1145,
-     1094, 1145, 1143, 1146, 1094, 1146, 1147, 1147, 1146, 1147,
-     1148, 1148, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
-     1146, 1146, 1146, 1146, 1149, 1094, 1149, 1146, 1146, 1150,
-     1094, 1150, 1151, 1151, 1150, 1151, 1152, 1152, 1150, 1150,
-     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
-     1153, 1094, 1153, 1150, 1150, 1154, 1094, 1154, 1155, 1155,
-
-     1154, 1155, 1156, 1156, 1154, 1154, 1154, 1154, 1154, 1154,
-     1154, 1154, 1154, 1154, 1154, 1154, 1157, 1094, 1157, 1154,
-     1154, 1158, 1094, 1159, 1158, 1159, 1160, 1158, 1158, 1158,
-     1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1161,
-     1094, 1161, 1158, 1094, 1162, 1162, 1162, 1162, 1094, 1163,
-     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
-     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
-     1163, 1163, 1163, 1163, 1094, 1094, 1094, 1094, 1094, 1094,
-     1164, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-
-     1165, 1166, 1094, 1094, 1094, 1094, 1167, 1168, 1169, 1169,
-     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170, 1163, 1163,
-     1094, 1171, 1094, 1171, 1172, 1173, 1173, 1173, 1173, 1173,
-     1174, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
-     1176, 1177, 1178, 1179, 1094, 1175, 1094, 1094, 1180, 1181,
-     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1182, 1183,
-     1094, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
-     1185, 1186, 1187, 1188, 1094, 1189, 1189, 1189, 1189, 1189,
-     1189, 1189, 1189, 1189, 1190, 1191, 1192, 1193, 1094, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1195, 1196,
-
-     1197, 1198, 1094, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
-     1199, 1199, 1200, 1201, 1202, 1203, 1094, 1094, 1094, 1204,
-     1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
-     1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
-     1204, 1204, 1204, 1204, 1204, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1205, 1094, 1205, 1206,
-     1094, 1207, 1094, 1207, 1208, 1094, 1209, 1209, 1209, 1209,
-     1209, 1209, 1210, 1211, 1212, 1212, 1212, 1212, 1213, 1213,
-     1214, 1214, 1214, 1214, 1215, 1214, 1215, 1216, 1217, 1214,
-
-     1217, 1218, 1214, 1094,  704, 1214, 1094, 1094, 1219, 1219,
-     1220, 1220, 1220, 1220, 1221, 1220, 1222, 1220, 1094,  719,
-     1223, 1223, 1223, 1223, 1224, 1224, 1223, 1224, 1225, 1225,
-     1226, 1226, 1223, 1226, 1227, 1223, 1094,  737, 1228, 1228,
-     1228, 1228, 1229, 1229, 1228, 1229, 1230, 1230, 1231, 1231,
-     1228, 1231, 1232, 1228, 1094,  755, 1233, 1233, 1233, 1233,
-     1234, 1234, 1233, 1234, 1235, 1235, 1236, 1236, 1233, 1236,
-     1237, 1233, 1094,  773, 1238, 1238, 1238, 1238, 1239, 1238,
-     1239, 1240, 1241, 1238, 1241, 1242, 1238, 1094,  788, 1243,
-     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
-
-     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
-     1243, 1243, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1244, 1244, 1244, 1244, 1094, 1245, 1246,
-     1246, 1246, 1246, 1247, 1247, 1248, 1248, 1094,  848, 1094,
-     1248, 1094, 1094, 1249, 1249, 1250, 1250, 1094,  858, 1223,
-     1223,  737,  737, 1228, 1228,  755,  755, 1233, 1233,  773,
-      773, 1238, 1238,  788,  788, 1243, 1243, 1243, 1243, 1243,
-     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
-     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1094,
-
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1244, 1244, 1244, 1244, 1246,
-     1247, 1247,  848,  848, 1249, 1249,  858,  858,  737,  737,
-      755,  755,  773,  773,  788,  788, 1243, 1243, 1243, 1243,
-     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
-     1243, 1243, 1243, 1243, 1243, 1243, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1244, 1244,
-     1094, 1247, 1247,  848,  848, 1249, 1249,  858,  858,  737,
-      737,  755,  755,  773,  773,  788,  788, 1243, 1243, 1243,
-     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
-
-     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1248,
-     1248, 1250, 1250, 1223, 1223, 1228, 1228, 1233, 1233, 1238,
-     1238, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
-     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1248, 1223, 1228,
-     1233, 1238, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
-     1243, 1243, 1243, 1243, 1094, 1094, 1094, 1243, 1243, 1243,
-     1243, 1243, 1243, 1243, 1243, 1094, 1094, 1243, 1243, 1243,
-     1243, 1243, 1243,    0, 1094, 1094, 1094, 1094, 1094, 1094,
-
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094
+     1087,    1,    1,    3, 1087,    5, 1087,    7, 1087,    9,
+     1087,   11,    9,    9, 1087,   15, 1087,   17, 1087,   19,
+     1087,   21, 1087, 1087, 1087, 1087, 1087, 1087, 1088, 1087,
+     1089, 1087, 1087, 1090, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1091, 1091, 1091, 1091,
+     1091, 1091, 1091, 1091, 1087, 1087, 1087, 1087, 1092, 1087,
+     1087, 1087,   39, 1087, 1087, 1091, 1087, 1087, 1092, 1087,
+     1087, 1087, 1087, 1088, 1093, 1090, 1087, 1094,   41, 1087,
+     1087, 1095, 1095, 1095, 1087, 1087, 1092, 1096, 1087, 1096,
+     1097, 1098, 1096, 1096, 1096,   95, 1096, 1099, 1099, 1096,
+
+     1096, 1096, 1087, 1087,   41, 1087, 1100, 1100, 1087, 1101,
+     1101, 1102, 1101, 1101, 1101,  115, 1101, 1103, 1103, 1101,
+     1088, 1104, 1087, 1104, 1105, 1106, 1104, 1104, 1104,  129,
+     1104, 1107, 1107, 1104, 1104, 1108, 1087, 1108, 1109, 1110,
+     1108, 1108, 1108,  143, 1108, 1111, 1111, 1108, 1108, 1112,
+     1087, 1112, 1113, 1114, 1112, 1112, 1112,  157, 1112, 1115,
+     1115, 1112, 1112, 1116, 1087, 1116, 1117, 1118, 1116, 1116,
+     1116,  171, 1116, 1119, 1119, 1116, 1116, 1087, 1087, 1087,
+     1087, 1088, 1087, 1088, 1120, 1120, 1120, 1120, 1120, 1087,
+     1087, 1087, 1121, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+
+     1087, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1087, 1087,
+     1087, 1087, 1087, 1087, 1123, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1124, 1125, 1126, 1125, 1125, 1125,
+     1125, 1125, 1125, 1125, 1125, 1125, 1087, 1087, 1087, 1087,
+     1087, 1127, 1087, 1127, 1127, 1127, 1127, 1087, 1122, 1122,
+     1122, 1122, 1122, 1122, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1128, 1128, 1129, 1130, 1130, 1130, 1130, 1131,
+     1126, 1131, 1131, 1087, 1087, 1132, 1087, 1133, 1132, 1133,
+
+     1134, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1132, 1135, 1087, 1135, 1132, 1132, 1087, 1087, 1087,
+     1124, 1087, 1136, 1137, 1136, 1136, 1136, 1136, 1136, 1136,
+     1136, 1136, 1136, 1136, 1136, 1136, 1138, 1087, 1138, 1136,
+     1139, 1087, 1139, 1140, 1140, 1139, 1140, 1141, 1141, 1139,
+     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
+     1142, 1087, 1142, 1139, 1139, 1143, 1087, 1143, 1144, 1144,
+     1143, 1144, 1145, 1145, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1146, 1087, 1146, 1143, 1143,
+     1147, 1087, 1147, 1148, 1148, 1147, 1148, 1149, 1149, 1147,
+
+     1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1150, 1087, 1150, 1147, 1147, 1151, 1087, 1152, 1151, 1152,
+     1153, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
+     1151, 1151, 1154, 1087, 1154, 1151, 1087, 1155, 1155, 1155,
+     1155, 1087, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1087, 1087, 1087,
+     1087, 1087, 1087, 1157, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1158, 1159, 1087, 1087, 1087, 1087, 1160,
+
+     1161, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1163, 1156, 1156, 1087, 1164, 1087, 1164, 1165, 1166, 1166,
+     1166, 1166, 1166, 1167, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1169, 1170, 1171, 1172, 1087, 1168, 1087,
+     1087, 1173, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
+     1174, 1175, 1176, 1087, 1177, 1177, 1177, 1177, 1177, 1177,
+     1177, 1177, 1177, 1178, 1179, 1180, 1181, 1087, 1182, 1182,
+     1182, 1182, 1182, 1182, 1182, 1182, 1182, 1183, 1184, 1185,
+     1186, 1087, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1188, 1189, 1190, 1191, 1087, 1192, 1192, 1192, 1192,
+
+     1192, 1192, 1192, 1192, 1192, 1193, 1194, 1195, 1196, 1087,
+     1087, 1087, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
+     1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
+     1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1198,
+     1087, 1198, 1199, 1087, 1200, 1087, 1200, 1201, 1087, 1202,
+     1202, 1202, 1202, 1202, 1202, 1203, 1204, 1205, 1205, 1205,
+     1205, 1206, 1206, 1207, 1207, 1207, 1207, 1208, 1207, 1208,
+     1209, 1210, 1207, 1210, 1211, 1207, 1087,  697, 1207, 1087,
+
+     1087, 1212, 1212, 1213, 1213, 1213, 1213, 1214, 1213, 1215,
+     1213, 1087,  712, 1216, 1216, 1216, 1216, 1217, 1217, 1216,
+     1217, 1218, 1218, 1219, 1219, 1216, 1219, 1220, 1216, 1087,
+      730, 1221, 1221, 1221, 1221, 1222, 1222, 1221, 1222, 1223,
+     1223, 1224, 1224, 1221, 1224, 1225, 1221, 1087,  748, 1226,
+     1226, 1226, 1226, 1227, 1227, 1226, 1227, 1228, 1228, 1229,
+     1229, 1226, 1229, 1230, 1226, 1087,  766, 1231, 1231, 1231,
+     1231, 1232, 1231, 1232, 1233, 1234, 1231, 1234, 1235, 1231,
+     1087,  781, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+
+     1236, 1236, 1236, 1236, 1236, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1237, 1237, 1237, 1237,
+     1087, 1238, 1239, 1239, 1239, 1239, 1240, 1240, 1241, 1241,
+     1087,  841, 1087, 1241, 1087, 1087, 1242, 1242, 1243, 1243,
+     1087,  851, 1216, 1216,  730,  730, 1221, 1221,  748,  748,
+     1226, 1226,  766,  766, 1231, 1231,  781,  781, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1237, 1237,
+     1237, 1237, 1239, 1240, 1240,  841,  841, 1242, 1242,  851,
+      851,  730,  730,  748,  748,  766,  766,  781,  781, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1237, 1237, 1087, 1240, 1240,  841,  841, 1242, 1242,
+      851,  851,  730,  730,  748,  748,  766,  766,  781,  781,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+
+     1236, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1241, 1241, 1243, 1243, 1216, 1216, 1221, 1221,
+     1226, 1226, 1231, 1231, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1241, 1216, 1221, 1226, 1231, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1087, 1087, 1087,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1087, 1087,
+     1236, 1236, 1236, 1236, 1236, 1236,    0, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087
     } ;
 
-static yyconst flex_int16_t yy_nxt[7163] =
+static yyconst flex_int16_t yy_nxt[7033] =
     {   0,
        24,   25,   26,   27,   25,   28,   29,   30,   31,   32,
        33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
@@ -848,16 +846,16 @@
        47,   47,   47,   47,   47,   47,   47,   49,   47,   50,
        47,   47,   51,   47,   52,   47,   47,   53,   47,   54,
        47,   47,   47,   55,   56,   57,  191,   58,   57,  183,
-      194,   67,  497,   68,   67, 1093,   85,  219,   86,   85,
-      192,  498,  195,  100,  220,  101,  100,  258,   59,   60,
-      183,   61,   60,   24,   69,  239,  240,   24,   24,   87,
-
-       24,   62,  184,   62,   63,   24,  102,  241,  242,  292,
-       64,   65,   24,   24,  109,  121,  109,  109,  120, 1092,
-      120,  120,  134,  184,  135,  134,  259,   41,   42,   42,
-       42,  148,  323,  149,  148,   47,  162,   47,  163,  162,
-       47,  176,   47,  177,  176,   66,  464,   47,  243,  244,
-      465,   24,   24,   70,   71,   72,   73,   71,   70,   74,
+      194,   67,  490,   68,   67, 1086,   85,  219,   86,   85,
+      192,  491,  195,  100,  220,  101,  100,  257,   59,   60,
+      183,   61,   60,   24,   69,  238,  239,   24,   24,   87,
+
+       24,   62,  184,   62,   63,   24,  102,  240,  241,  291,
+       64,   65,   24,   24,  109,  121,  109,  109,  120, 1085,
+      120,  120,  134,  184,  135,  134,  258,   41,   42,   42,
+       42,  148,  321,  149,  148,   47,  162,   47,  163,  162,
+       47,  176,   47,  177,  176,   66,  457,   47,  242,  243,
+      458,   24,   24,   70,   71,   72,   73,   71,   70,   74,
        70,   75,   70,   70,   76,   70,   77,   70,   77,   78,
        70,   79,   80,   80,   80,   70,   81,   70,   70,   82,
        82,   82,   82,   82,   82,   83,   82,   83,   82,   83,
@@ -886,8 +884,8 @@
       118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
 
       118,  118,  118,  118,  118,  119,  118,  118,  118,  118,
-      118,  110,  110,  109, 1091,  109,  109,  186,  121,  187,
-      246,  188,  189,  269, 1090,  269,  269,  292,  345,  346,
+      118,  110,  110,  109, 1084,  109,  109,  186,  121,  187,
+      245,  188,  189,  268, 1083,  268,  268,  291,  342,  343,
        41,   42,   42,   42,  122,  122,  123,  124,  122,  122,
       125,  122,  122,  122,  122,  126,  122,  127,  122,  127,
       128,  122,  129,  130,  130,  130,  122,  131,  122,  122,
@@ -916,722 +914,708 @@
       174,  174,  174,  174,  174,  174,  174,  174,  164,  174,
       174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
       174,  174,  174,  174,  174,  174,  175,  174,  174,  174,
-      174,  174,  164,  164,  178,  300,  178,  178,  178,  180,
+      174,  174,  164,  164,  178,  299,  178,  178,  178,  180,
 
-      178,  178,  196,  458,  197,  197,  197,  197,  459,  179,
-      198,  245,  196,  179,  197,  197,  197,  197,  246, 1089,
-      199,  200,  200,  200,  200,  248,  492,  201,  301,  202,
+      178,  178,  196,  451,  197,  197,  197,  197,  452,  179,
+      198,  244,  196,  179,  197,  197,  197,  197,  245, 1082,
+      199,  200,  200,  200,  200,  247,  485,  201,  300,  202,
       202,  202,  202,  202,  203,  202,  202,  202,  202,  202,
-      202,  202,  493,  202,  204,  205,  206,  202,  207,  208,
+      202,  202,  486,  202,  204,  205,  206,  202,  207,  208,
       209,  202,  210,  211,  212,  213,  202,  214,  202,  215,
-      216,  217,  202,  202,  202,  218,  221,  245,  197,  197,
-      197,  197,  471,  245,  246,  245, 1018,  245,  222,  223,
-      246,  248,  246,  224,  246,  225,  472,  248,  226,  248,
-      260,  248,  222,  325,  292,  223,  221,  193,  197,  197,
-
-      197,  197,  327,  225,  280,  245,  280,  280, 1088,  223,
-      254,  226,  246,  224,  255,  249,  249,  249,  249,  248,
-      250,  264,  265,  826,  253,  223,  227,  256,  228,  629,
-      261,  229,  827,  245,  230,  231,  232,  233,  234,  235,
-      246,  245,  236,  246,  237,  238,  630,  248,  246,  262,
-      292,  262,  262,  264,  265,  248,  245,  262,  180,  262,
-      262,  487,  268,  246,  179,  269,  180,  269,  269,  488,
-      248,  251,  179,  294, 1087,  266,  267,  252,  196,  227,
-      197,  197,  197,  197,  183,  257,  425,  276,  231,  232,
-      277,  278,  235,  255,  268, 1094,  345,  346,  238,  280,
-
-      180,  280,  280,  281,  282,  283,  281,  281,  282,  283,
-      281,  264,  265,  202,  270, 1086,  202,  184,  202,  426,
-      271,  272,  273,  274,  466,  275,  467,  202,  202,  202,
-      285,  292,  285,  202,  285,  285,  196,  286,  197,  197,
-      197,  197,  295,  282,  296,  295, 1024,  200,  200,  200,
-      200,  221,  268,  197,  197,  197,  197,  295,  282,  296,
-      295,  345,  346,  468,  223,  469,  246,  549,  224,  293,
-      293,  293,  293,  292,  288,  289,  371,  372, 1085,  290,
-      223,  303,  364,  304,  304,  304,  304,  305,  305,  305,
-      305,  365,  318,  297,  318,  318,  318,  298,  318,  318,
-
-      297,  494,  324,  297,  324,  324,  495,  297,  200,  200,
-      200,  200,  345,  352,  343,  306,  343,  343,  297,  307,
-      308,  349,  304,  304,  304,  304,  297,  322,  322,  322,
-      322,  325,  309,  310,  371,  372,  320,  311,  325,  312,
-      321,  325,  313,  397,  398,  325,  309,  895,  328,  310,
-      329,  329,  329,  329,  371,  378,  325,  312,  368,  345,
-      369,  368,  896,  375,  325,  313,  297,  297,  897,  297,
-      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
-      297, 1084,  297,  297,  330,  330,  330,  330,  316,  297,
-      297,  297,  633,  221,  634,  322,  322,  322,  322,  368,
-
-      345,  369,  368,  397,  398,  297,  223,  345,  346,  315,
-      224,  924,  331,  345,  348,  501,  332,  349,  397,  404,
-      502,  353,  223,  354,  354,  354,  354,  401, 1083,  297,
-      297,  297,  297,  503,  297,  297,  297,  297,  297,  297,
-      297,  297,  297,  297,  297,  297,  365,  297,  297,  930,
-      350,  371,  372,  316,  297,  297,  297,  344,  394,  371,
-      395,  394,  345,  346,  344,  371,  374,  344,  501,  375,
-      297,  344,  390,  502,  183, 1082,  317,  454,  355,  355,
-      355,  355,  344,  394,  371,  395,  394,  397,  400,  455,
-      344,  401,  477,  477,  297,  297,  333, 1081,  329,  329,
-
-      329,  329,  376,  480,  480,  480,  356,  184,  334,  335,
-      357,  397,  398,  336,  443,  337,  443,  443,  338,  980,
-      371,  372,  334,  365,  402,  335,  420,  397,  421,  420,
-      485,  486,  416,  337,  379, 1080,  380,  380,  380,  380,
-      529,  338,  325,  325,  325,  325,  325,  325,  530,  325,
-      325,  325,  325,  325,  325,  325,  325, 1079,  325,  325,
-      420,  397,  421,  420,  341,  325,  325,  325,  397,  398,
-      428,  300,  429,  429,  429,  429,  504,  505,  371,  372,
-      391,  325,  405,  932,  406,  406,  406,  406,  443,  423,
-      443,  443,  264,  265,  381,  381,  381,  381,  178, 1020,
-
-      178,  178,  264,  265,  301,  325,  325,  325,  325,  325,
-      325,  325,  325,  179,  325,  325,  325,  325,  325,  325,
-      325,  325,  382,  325,  325, 1078,  383,  425,  370,  341,
-      325,  325,  325,  489,  396,  370,  246,  490,  370,  397,
-      398,  396,  370,  292,  396,  315,  325,  444,  396,  444,
-      444,  491,  342,  370,  292,  407,  407,  407,  407,  396,
-      426,  370,  445,  445,  445,  445, 1077,  396,  264,  265,
-      325,  325,  345,  346,  430,  430,  430,  430,  446,  446,
-      446,  446,  925,  408,  264,  265,  358,  409,  354,  354,
-      354,  354,  447,  447,  447,  447,  668,  422,  359,  360,
-
-      485,  521,  431,  361,  422,  362,  432,  422,  363,  536,
-      536,  422,  359, 1076,  245,  360,  448,  448,  448,  448,
-     1075,  246,  422,  362,  200,  200,  200,  200,  248,  669,
-      422,  363,  344,  344,  345,  346,  344,  344,  344,  344,
-      344,  344,  344,  344,  344,  344,  344,  673,  344,  344,
-      269,  245,  269,  269,  366,  344,  344,  344,  246,  221,
-      292,  197,  197,  197,  197,  248,  200,  200,  200,  200,
-      461,  344,  223, 1074,  462,  245,  224,  449,  463,  478,
-      674,  478,  246,  976,  479,  479,  479,  479,  223,  248,
-      539,  539,  539,  449, 1019,  344,  344,  344,  344,  345,
-
-      346,  344,  344,  344,  344,  344,  344,  344,  344,  344,
-      344,  344,  292,  344,  344,  264,  265,  512,  513,  366,
-      344,  344,  344,  476,  476,  476,  476,  461,  554,  554,
-      246,  462, 1073,  245,  449,  520,  344,  292,  345,  346,
-      246,  245,  367,  509,  509,  509,  509,  248,  246,  541,
-      449,  245,  245,  417,  542,  248,  934,  245,  246,  246,
-      344,  344,  371,  372,  246,  248,  248, 1072,  245,  501,
-      245,  248,  518,  531,  559,  246,  384,  246,  380,  380,
-      380,  380,  248,  280,  248,  280,  280,  514,  385,  386,
-      340,  510,  928,  387,  262,  388,  262,  262,  389,  345,
-
-      346,  511,  385,  345,  346,  386, 1071,  515,  318,  179,
-      318,  318,  517,  388,  345,  348,  516,  281,  282,  283,
-      281,  389,  370,  370,  371,  372,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370, 1070,  370,  370,
-      281,  282,  283,  281,  392,  370,  370,  370,  524,  524,
-      524,  524,  523,  246,  345,  346,  293,  293,  293,  293,
-      292,  370,  295,  282,  296,  295,  295,  282,  296,  295,
-      305,  305,  305,  305,  537,  324,  537,  324,  324,  538,
-      538,  538,  538,  371,  372,  370,  370,  370,  370,  371,
-      372,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-
-      370,  370, 1069,  370,  370,  330,  330,  330,  330,  392,
-      370,  370,  370, 1018,  308, 1057,  304,  304,  304,  304,
-      371,  372,  305,  305,  305,  305,  370,  310,  557,  557,
-      557,  311,  393,  532,  535,  535,  535,  535,  325,  345,
-      352,  613,  193,  310, 1068,  532,  614,  327,  349,  532,
-      370,  370,  397,  398,  343,  292,  343,  343,  345,  352,
-      221,  532,  322,  322,  322,  322,  410,  349,  406,  406,
-      406,  406, 1067,  223,  371,  372,  292,  224,  411,  412,
-      345,  346,  854,  413, 1066,  414,  345,  346,  415,  223,
-      981,  555,  411,  555,  365,  412,  556,  556,  556,  556,
-
-      709,  345,  348,  414,  710,  349,  368,  345,  369,  368,
-     1065,  415,  396,  396,  397,  398,  396,  396,  396,  396,
-      396,  396,  396,  396,  396,  396,  396,  563,  396,  396,
-      371,  374,  292,  564,  418,  396,  396,  396,  350,  333,
-      292,  329,  329,  329,  329,  974,  330,  330,  330,  330,
-      315,  396,  335,  345,  346,  977,  336,  550,  345,  348,
-      371,  372,  349,  368,  345,  369,  368,  855,  335,  355,
-      355,  355,  355,  550, 1064,  396,  396,  396,  396,  397,
-      398,  396,  396,  396,  396,  396,  396,  396,  396,  396,
-      396,  396, 1063,  396,  396,  350,  345,  346,  879,  418,
-
-      396,  396,  396,  553,  553,  553,  553,  345,  346,  371,
-      378,  880,  566,  566,  550,  982,  396,  881,  375,  391,
-      345,  346,  419,  355,  355,  355,  355,  696,  371,  374,
-      550,  567,  375,  567,  562, 1031,  568,  568,  568,  568,
-      396,  396,  433,  700,  429,  429,  429,  429,  371,  374,
-      562, 1023,  375,  975,  434,  435,  345,  346,  315,  436,
-      697,  437,  371,  372,  438,  376,  345,  346,  434, 1025,
-      571,  435,  569,  569,  569,  572,  701,  371,  378,  437,
-      397,  398, 1021,  371,  372,  376,  375,  438,  422,  422,
-     1019,  422,  422,  422,  422,  422,  422,  422,  422,  422,
-
-      422,  422,  422, 1056,  422,  422,  345,  346,  292,  577,
-      441,  422,  422,  422,  365,  371,  372,  780,  371,  372,
-      397,  398,  565,  565,  565,  565, 1055,  422,  371,  372,
-      578,  580,  580,  562,  381,  381,  381,  381,  926,  371,
-      372,  397,  398,  585,  381,  381,  381,  381,  586,  562,
-      781,  422,  422,  422,  422,  576,  422,  422,  422,  422,
-      422,  422,  422,  422,  422,  422,  422,  422, 1054,  422,
-      422,  576,  371,  372, 1053,  441,  422,  422,  422,  394,
-      371,  395,  394, 1052,  371,  372,  397,  400,  579,  579,
-      579,  579,  422,  371,  372,  581, 1051,  581,  442,  576,
-
-      582,  582,  582,  582,  394,  371,  395,  394,  983,  583,
-      583,  583,  391,  397,  404,  576,  422,  422,  540,  540,
-      540,  540,  401,  397,  404,  397,  398,  540,  540,  540,
-      397,  400,  401, 1050,  401,  784,  397,  400,  397,  398,
-      401,  540,  540,  540,  540,  540,  540,  297,  297, 1049,
-      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
-      297,  297, 1048,  297,  297,  397,  398,  402,  785,  316,
-      297,  297,  297,  402,  397,  398,  397,  398,  608,  608,
-     1047,  407,  407,  407,  407,  591,  297,  595, 1046,  595,
-      594,  594,  596,  596,  596,  596,  397,  398,  477,  477,
-
-      599,  420,  397,  421,  420,  600,  420,  397,  421,  420,
-      297,  297,  297,  297, 1045,  297,  297,  297,  543,  297,
-      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
-      297,  297,  297,  297,  297,  297,  297,  297,  544,  544,
-      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
-      544,  297,  544,  544,  544,  544,  544,  544,  544,  544,
-      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
-      544,  544,  544,  544,  544,  297,  297,  297,  297, 1044,
-      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
-      297,  297,  978,  297,  297,  397,  398,  340,  650,  316,
-
-      297,  297,  297,  397,  398,  979,  651,  397,  398,  652,
-      340,  407,  407,  407,  407, 1043,  297,  430,  430,  430,
-      430, 1042,  590,  597,  597,  597,  536,  536,  430,  430,
-      430,  430,  611,  611,  611,  545,  264,  265,  590,  604,
-      297,  297,  558,  558,  558,  558,  443, 1041,  443,  443,
-      592,  558,  558,  558,  609,  604,  609,  554,  554,  610,
-      610,  610,  610,  608,  608,  558,  558,  558,  558,  558,
-      558,  325,  325,  325,  325,  325,  325, 1040,  325,  325,
-      325,  325,  325,  325,  325,  325, 1018,  325,  325,  397,
-      398, 1039,  683,  341,  325,  325,  325,  246,  433, 1038,
-
-      429,  429,  429,  429,  292,  593,  593,  593,  593, 1037,
-      325,  435,  480,  480,  480,  436,  590,  444, 1036,  444,
-      444,  445,  445,  445,  445,  838,  839,  435,  446,  446,
-      446,  446,  590, 1035,  325,  325,  325,  325,  325,  325,
-      325,  325,  507,  325,  325,  325,  325,  325,  325,  325,
-      325,  325,  325,  325,  325,  325,  325,  325,  325,  325,
-      325,  325,  560,  560,  560,  560,  560,  560,  560,  560,
-      560,  560,  560,  560,  560,  325,  560,  560,  560,  560,
-      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
-      560,  560,  560,  560,  560,  560,  560,  560,  560,  325,
-
-      325,  325,  325,  325,  325,  325,  325, 1034,  325,  325,
-      325,  325,  325,  325,  325,  325, 1033,  325,  325,  607,
-      607,  607,  607,  341,  325,  325,  325,  539,  539,  539,
-      604,  447,  447,  447,  447,  448,  448,  448,  448,  984,
-      325,  985,  618,  417,  618,  417,  604,  619,  619,  619,
-      619,  476,  476,  476,  476,  479,  479,  479,  479,  561,
-      850,  851,  449, 1032,  325,  325,  345,  346,  479,  479,
-      479,  479,  245, 1017,  245,  557,  557,  557,  449,  246,
-      358,  246,  354,  354,  354,  354,  248,  245,  248,  245,
-      668,  245,  245,  360,  246,  246,  246,  361,  246,  246,
-
-      245,  248,  292,  248, 1016,  248,  248,  246,  245,  360,
-      345,  346,  325,  246,  248,  246,  670,  345,  346,  677,
-      292,  716,  248,  669,  345,  346,  570,  570,  570,  570,
-      921,  678,  245,  566,  566,  570,  570,  570,  679,  246,
-      345,  346,  680,  673,  689,  682,  248, 1021,  690,  570,
-      570,  570,  570,  570,  570,  344,  344,  345,  346,  344,
-      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
-     1015,  344,  344,  681,  724, 1014,  674,  366,  344,  344,
-      344,  524,  524,  524,  524,  523,  538,  538,  538,  538,
-      691, 1013,  691,  315,  344,  692,  692,  692,  692,  538,
-
-      538,  538,  538,  711, 1012,  711,  345,  726,  712,  712,
-      712,  712,  556,  556,  556,  556,  345,  346,  344,  344,
-      344,  344,  345,  346,  344,  344,  573,  344,  344,  344,
-      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
-      344,  344,  344,  344,  344,  344,  574,  574,  574,  574,
-      574,  574,  574,  574,  574,  574,  574,  574,  574,  344,
-      574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-      574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-      574,  574,  574,  344,  344,  344,  344,  345,  346,  344,
-      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
-
-      696,  344,  344,  535,  535,  535,  535,  366,  344,  344,
-      344,  345,  346, 1011,  532,  553,  553,  553,  553,  556,
-      556,  556,  556,  986,  344,  700,  550,  440,  345,  346,
-      532,  345,  730,  697,  371,  372,  345,  346, 1010,  721,
-      727,  721,  550,  575,  722,  722,  722,  722,  344,  344,
-      371,  372,  565,  565,  565,  565,  345,  346,  701,  723,
-      611,  611,  611,  562,  384, 1009,  380,  380,  380,  380,
-      345,  346,  568,  568,  568,  568,  987,  386,  245,  562,
-      440,  387,  345,  346,  742,  246,  568,  568,  568,  568,
-      371,  372,  248,  386,  371,  372,  371,  748,  569,  569,
-
-      569,  739, 1020,  739, 1058,  745,  740,  740,  740,  740,
-      584,  584,  584,  584,  371,  372,  397,  398, 1008,  584,
-      584,  584,  345,  726,  371,  372,  727,  780,  345,  732,
-      580,  580,  733,  584,  584,  584,  584,  584,  584,  370,
-      370,  371,  372,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370, 1026,  370,  370,  371,  372,  728,
-      781,  392,  370,  370,  370,  734,  760,  345,  732,  371,
-      372, 1007,  741,  579,  579,  579,  579, 1006,  370,  371,
-      372,  397,  766, 1005,  576,  582,  582,  582,  582, 1004,
-      763,  610,  610,  610,  610,  582,  582,  582,  582,  391,
-
-      576, 1003,  370,  370,  370,  370,  371,  372,  370,  370,
-      587,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
-      588,  588,  588,  370,  588,  588,  588,  588,  588,  588,
-      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
-      588,  588,  588,  588,  588,  588,  588,  370,  370,  370,
-      370,  371,  372,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370, 1002,  370,  370,  371,  372,  397,
-      398,  392,  370,  370,  370, 1027,  345,  346,  397,  398,
-
-      573,  397,  398,  583,  583,  583,  371,  744,  370,  784,
-      745, 1001,  371,  750,  594,  594,  751,  596,  596,  596,
-      596,  397,  762,  246,  245,  763, 1000,  589,  397,  398,
-      292,  246,  370,  370,  397,  398,  999,  759,  248,  757,
-      391,  757,  785,  746,  758,  758,  758,  758,  410,  752,
-      406,  406,  406,  406,  998,  397,  398,  844,  764,  997,
-      325,  412,  397,  768,  670,  413,  769,  397,  398,  716,
-      996,  593,  593,  593,  593,  397,  398,  412,  397,  398,
-      371,  372,  590,  596,  596,  596,  596,  610,  610,  610,
-      610,  597,  597,  597,  598,  598,  598,  598,  590,  770,
-
-      371,  744,  245,  598,  598,  598,  775,  440,  775,  246,
-      936,  776,  776,  776,  776, 1022,  248,  598,  598,  598,
-      598,  598,  598,  396,  396,  397,  398,  396,  396,  396,
-      396,  396,  396,  396,  396,  396,  396,  396,  995,  396,
-      396,  607,  607,  607,  607,  418,  396,  396,  396,  371,
-      372,  837,  604,  619,  619,  619,  619,  619,  619,  619,
-      619,  340,  396,  692,  692,  692,  692,  994,  604,  692,
-      692,  692,  692,  712,  712,  712,  712,  712,  712,  712,
-      712,  371,  750,  397,  398,  993,  396,  396,  396,  396,
-      397,  398,  396,  396,  601,  396,  396,  396,  396,  396,
-
-      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
-      396,  396,  396,  396,  602,  602,  602,  602,  602,  602,
-      602,  602,  602,  602,  602,  602,  602,  396,  602,  602,
-      602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
-      602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
-      602,  396,  396,  396,  396,  397,  398,  396,  396,  396,
-      396,  396,  396,  396,  396,  396,  396,  396,  992,  396,
-      396,  988,  245,  245,  968,  418,  396,  396,  396,  246,
-      246,  245,  345,  346,  397,  762,  248,  248,  246,  246,
-      345,  346,  396,  345,  346,  248,  292,  967,  722,  722,
-
-      722,  722,  966,  345,  730,  965,  722,  722,  722,  722,
-      964,  603,  727,  834,  835,  963,  396,  396,  612,  612,
-      612,  612, 1022,  845, 1057,  836,  962,  612,  612,  612,
-      345,  346,  961,  371,  372,  960,  860,  587,  959,  371,
-      372,  612,  612,  612,  612,  612,  612,  422,  422,  958,
-      422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
-      422,  422, 1028,  422,  422,  345,  730,  397,  398,  441,
-      422,  422,  422,  861,  727,  371,  372,  345,  726,  371,
-      372,  727,  864,  397,  768,  957,  422,  397,  398,  838,
-      265,  740,  740,  740,  740,  740,  740,  740,  740,  371,
-
-      748,  345,  346,  758,  758,  758,  758,  417,  745,  956,
-      422,  422,  422,  422,  728,  422,  422,  422,  615,  422,
-      422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
-      422,  422,  422,  422,  422,  422,  422,  422,  616,  616,
-      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
-      616,  422,  616,  616,  616,  616,  616,  616,  616,  616,
-      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
-      616,  616,  616,  616,  616,  422,  422,  422,  422,  955,
-      422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
-      422,  422, 1029,  422,  422,  371,  372,  371,  748,  441,
-
-      422,  422,  422, 1023,  397,  398,  745,  397,  398,  345,
-      726,  345,  732,  727,  954,  733,  422,  345,  732,  371,
-      744,  733,  953,  745,  371,  744,  371,  750,  745, 1030,
-      751, 1062,  397,  398,  952,  617,  601,  417,  865,  951,
-      422,  422,  540,  540,  540,  540,  728,  868,  734,  340,
-      869,  540,  540,  540,  734,  246,  746,  776,  776,  776,
-      776,  746,  292,  752,  950,  540,  540,  540,  540,  540,
-      540,  297,  297,  949,  297,  297,  297,  297,  297,  297,
-      297,  297,  297,  297,  297,  297,  948,  297,  297,  947,
-      397,  398,  922,  703,  297,  297,  297,  776,  776,  776,
-
-      776,  371,  750,  397,  766,  751,  758,  758,  758,  758,
-      297,  946,  763,  397,  766,  345,  346,  365,  929,  371,
-      372,  945,  763,  371,  372,  391,  931,  397,  398,  397,
-      398,  417,  933,  944,  297,  297,  297,  297,  752,  297,
-      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
-      297,  315,  297,  297,  315,  315,  315,  315,  316,  297,
-      297,  297,  315,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  297,  315,  315,  315,  315,
-      315,  315,  704,  315,  315,  315,  705,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  297,
-
-      297,  558,  558,  558,  558,  440,  935,  943,  245,  942,
-      558,  558,  558,  397,  762,  246,  941,  763,  940,  397,
-      762,  939,  248,  763,  558,  558,  558,  558,  558,  558,
-      325,  325,  325,  325,  325,  325,  938,  325,  325,  325,
-      325,  325,  325,  325,  325, 1030,  325,  325,  345,  346,
-      764,  246,  718,  325,  325,  325,  764,  919,  292,  245,
-      245, 1019,  937,  989,  397,  768,  246,  246,  769,  325,
-      371,  372,  246,  248,  248,  971,  990,  971,  971,  292,
-      850,  972,  991,  971,  920,  971,  971,  345,  346, 1024,
-      440, 1059,  915,  325,  325,  325,  325,  325,  325,  325,
-
-      325,  770,  325,  325,  325,  325,  325,  325,  325,  325,
-      340,  325,  325,  340,  340,  340,  340,  341,  325,  325,
-      325,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  325,  340,  340,  340,  340,  340,
-      340,  719,  340,  340,  340,  720,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  325,  325,
-      345,  346, 1018,  246, 1019,  914,  245,  913,  245,  912,
-      292,  397,  398,  246,  911,  246,  570,  570,  570,  570,
-      248,  910,  248,  245,  245,  570,  570,  570,  397,  768,
-      246,  246,  769,  973, 1031,  909,  908,  248,  248,  570,
-
-      570,  570,  570,  570,  570,  344,  344,  345,  346,  344,
-      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
-      969,  344,  344,  907,  245,  770,  916,  736,  344,  344,
-      344,  246,  345,  346, 1025,  371,  372, 1027,  248,  440,
-      906,  371,  372, 1026,  344, 1060,  397,  398, 1028,  905,
-     1061,  397,  398, 1029,  904,  903,  902,  901,  900,  899,
-      898,  894,  893,  918,  892,  891,  890,  889,  344,  344,
-      344,  344,  345,  346,  344,  344,  344,  344,  344,  344,
-      344,  344,  344,  344,  344,  365,  344,  344,  365,  365,
-      365,  365,  366,  344,  344,  344,  365,  365,  365,  365,
-
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  344,
-      365,  365,  365,  365,  365,  365,  737,  365,  365,  365,
-      738,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  344,  344,  371,  372,  888,  887,  886,
-      885,  884,  883,  882,  878,  877,  876,  875,  615,  780,
-      873,  584,  584,  584,  584,  872,  245,  871,  245,  867,
-      584,  584,  584,  246,  863,  246,  859,  507,  857,  856,
-      248,  853,  248,  852,  584,  584,  584,  584,  584,  584,
-      370,  370,  371,  372,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  970,  370,  370,  849,  543,
-
-      917,  696,  754,  370,  370,  370,  847,  846,  843,  842,
-      841,  840,  507,  676,  668,  833,  832,  831,  830,  370,
-      829,  828,  825,  824,  823,  822,  821,  820,  819,  818,
-      817,  816,  815,  814,  813,  812,  811,  810,  809,  808,
-      807,  806,  805,  370,  370,  370,  370,  371,  372,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      391,  370,  370,  391,  391,  391,  391,  392,  370,  370,
-      370,  391,  391,  391,  391,  391,  391,  391,  391,  391,
-      391,  391,  391,  391,  370,  391,  391,  391,  391,  391,
-      391,  755,  391,  391,  391,  756,  391,  391,  391,  391,
-
-      391,  391,  391,  391,  391,  391,  391,  391,  370,  370,
-      397,  398,  804,  803,  802,  801,  800,  799,  798,  797,
-      796,  795,  794,  793,  792,  791,  598,  598,  598,  598,
-      790,  780,  778,  777,  714,  598,  598,  598,  713,  708,
-      707,  706,  696,  694,  693,  688,  687,  686,  685,  598,
-      598,  598,  598,  598,  598,  396,  396,  397,  398,  396,
-      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
-      523,  396,  396,  650,  633,  629,  676,  772,  396,  396,
-      396,  671,  668,  666,  665,  664,  663,  662,  661,  660,
-      659,  658,  657,  656,  396,  655,  654,  653,  649,  648,
-
-      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
-      637,  636,  635,  632,  631,  628,  627,  626,  396,  396,
-      396,  396,  397,  398,  396,  396,  396,  396,  396,  396,
-      396,  396,  396,  396,  396,  417,  396,  396,  417,  417,
-      417,  417,  418,  396,  396,  396,  417,  417,  417,  417,
-      417,  417,  417,  417,  417,  417,  417,  417,  417,  396,
-      417,  417,  417,  417,  417,  417,  773,  417,  417,  417,
-      774,  417,  417,  417,  417,  417,  417,  417,  417,  417,
-      417,  417,  417,  396,  396,  612,  612,  612,  612,  625,
-      624,  623,  622,  621,  612,  612,  612,  620,  606,  605,
-
-      425,  552,  551,  548,  547,  546,  534,  533,  612,  612,
-      612,  612,  612,  612,  422,  422,  300,  422,  422,  422,
-      422,  422,  422,  422,  422,  422,  422,  422,  422,  507,
-      422,  422,  528,  527,  523,  495,  787,  422,  422,  422,
-      493,  469,  466,  464,  519,  455,  507,  292,  506,  500,
-      499,  496,  484,  422,  483,  482,  475,  474,  473,  470,
-      460,  457,  456,  453,  452,  451,  183,  439,  425,  423,
-      339,  292,  319,  314,  300,  298,  279,  422,  422,  422,
-      422,  183,  422,  422,  422,  422,  422,  422,  422,  422,
-      422,  422,  422,  422,  440,  422,  422,  440,  440,  440,
-
-      440,  441,  422,  422,  422,  440,  440,  440,  440,  440,
-      440,  440,  440,  440,  440,  440,  440,  440,  422,  440,
-      440,  440,  440,  440,  440,  788,  440,  440,  440,  789,
-      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
-      440,  440,  422,  422,  297,  297,  279,  297,  297,  297,
-      297,  297,  297,  297,  297,  297,  297,  297,  297,  183,
-      297,  297,  190,  181, 1094, 1094,  703,  297,  297,  297,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094,  297, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-
-     1094, 1094, 1094, 1094, 1094, 1094, 1094,  297,  297,  297,
-      297, 1094,  297,  297,  297,  297,  297,  297,  297,  297,
-      297,  297,  297,  297,  315,  297,  297,  315,  315,  315,
-      315,  316,  297,  297,  297,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  297,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  848,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  297,  297,  325,  325,  325,  325,  325,  325,
-     1094,  325,  325,  325,  325,  325,  325,  325,  325, 1094,
-      325,  325, 1094, 1094, 1094, 1094,  718,  325,  325,  325,
-
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094,  325, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094,  325,  325,  325,
-      325,  325,  325,  325,  325, 1094,  325,  325,  325,  325,
-      325,  325,  325,  325,  340,  325,  325,  340,  340,  340,
-      340,  341,  325,  325,  325,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  325,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  858,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-
-      340,  340,  325,  325,  344,  344,  345,  346,  344,  344,
-      344,  344,  344,  344,  344,  344,  344,  344,  344, 1094,
-      344,  344, 1094, 1094, 1094, 1094,  736,  344,  344,  344,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094,  344, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094,  344,  344,  344,
-      344,  345,  346,  344,  344,  344,  344,  344,  344,  344,
-      344,  344,  344,  344,  365,  344,  344,  365,  365,  365,
-      365,  366,  344,  344,  344,  365,  365,  365,  365,  365,
-
-      365,  365,  365,  365,  365,  365,  365,  365,  344,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  862,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  344,  344,  370,  370,  371,  372,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370, 1094,
-      370,  370, 1094, 1094, 1094, 1094,  754,  370,  370,  370,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094,  370, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094,  370,  370,  370,
-
-      370,  371,  372,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  391,  370,  370,  391,  391,  391,
-      391,  392,  370,  370,  370,  391,  391,  391,  391,  391,
-      391,  391,  391,  391,  391,  391,  391,  391,  370,  391,
-      391,  391,  391,  391,  391,  391,  391,  391,  866,  391,
+      216,  217,  202,  202,  202,  218,  221,  244,  197,  197,
+      197,  197,  183,  244,  245,  244,  244,  259,  222,  223,
+      245,  247,  245,  245,  459,  224,  460,  247,  225,  247,
+      247,  461,  222,  462,  221,  223,  197,  197,  197,  197,
+
+      263,  264,  244,  224,  626,  184,  627,  223,  447,  245,
+      253,  225,  248,  248,  248,  248,  247,  260,  249,  256,
+      448,  323, 1081,  223,  226,  193,  227,  252, 1080,  228,
+      325,  244,  229,  230,  231,  232,  233,  234,  245,  244,
+      235,  267,  236,  237, 1079,  247,  245,  261,  291,  261,
+      261,  263,  264,  247,  244,  261,  180,  261,  261, 1078,
+      245,  245,  179,  268,  180,  268,  268,  291,  247,  250,
+      179,  342,  343,  265,  266,  251,  254,  196,  919,  197,
+      197,  197,  197,  263,  264,  279,  226,  279,  279,  255,
+      293,  254,  267, 1087,  275,  230,  231,  276,  277,  234,
+
+      279,  180,  279,  279,  819,  237,  280,  281,  282,  280,
+      419,  202,  269,  820,  202,  183,  202, 1077,  270,  271,
+      272,  273,  480,  274,  267,  202,  202,  202,  342,  349,
+      481,  202,  280,  281,  282,  280,  284,  346,  284,  285,
+      284,  284,  196,  420,  197,  197,  197,  197,  184,  200,
+      200,  200,  200,  221, 1076,  197,  197,  197,  197,  294,
+      281,  295,  294,  622,  245,  291,  223,  292,  292,  292,
+      292,  291,  294,  281,  295,  294,  287,  288,  367,  368,
+      623,  289,  223,  302, 1075,  303,  303,  303,  303,  304,
+      304,  304,  304,  918,  316,  296,  316,  316,  316,  297,
+
+      316,  316,  296,  487,  322,  296,  322,  322,  488,  296,
+      200,  200,  200,  200,  367,  368,  340,  305,  340,  340,
+      296,  306,  307, 1074,  303,  303,  303,  303,  296,  320,
+      320,  320,  320,  323,  308,  309,  342,  343,  318, 1073,
+      323,  310,  319,  323,  311,  392,  393,  323,  308, 1072,
+      326,  309,  327,  327,  327,  327,  464,  360,  323,  310,
+      364,  342,  365,  364,  392,  393,  323,  311,  296,  296,
+      465,  296,  296,  296,  296,  296,  296,  296,  296,  296,
+      296,  296,  296,  291,  296,  296,  328,  328,  328,  328,
+      314,  296,  296,  296,  313,  221,  917,  320,  320,  320,
+
+      320,  367,  374,  342,  343,  454,  969,  296,  223,  455,
+      371,  342,  345,  456,  329,  346,  245,  350,  330,  351,
+      351,  351,  351,  291,  223,  364,  342,  365,  364,  470,
+      470,  296,  296,  296,  296,  291,  296,  296,  296,  296,
+      296,  296,  296,  296,  296,  296,  296,  296,  347,  296,
+      296,  342,  343,  367,  368,  314,  296,  296,  296,  389,
+      367,  390,  389,  389,  367,  390,  389,  352,  352,  352,
+      352,  542,  296,  337,  385,  921,  367,  370,  315,  341,
+      371,  392,  395,  392,  399,  396,  341,  478,  479,  341,
+      367,  368,  396,  341, 1071,  353,  296,  296,  331,  354,
+
+      327,  327,  327,  327,  341, 1017,  377,  377,  377,  377,
+      332,  333,  341,  372,  367,  368,  361,  334,  397,  923,
+      335,  392,  393,  436,  332,  436,  436,  333,  375,  299,
+      376,  376,  376,  376,  378,  334,  494,  437,  379,  437,
+      437,  495,  410,  335,  323,  323,  323,  323,  323,  323,
+      361,  323,  323,  323,  323,  323,  323,  323,  323, 1070,
+      323,  323,  300,  366,  497,  498,  338,  323,  323,  323,
+      366,  244,  391,  366, 1069,  392,  393,  366,  245,  391,
+      263,  264,  391,  323, 1068,  247,  391,  522,  366,  400,
+     1067,  401,  401,  401,  401,  523,  366,  391,  414,  392,
+
+      415,  414,  473,  473,  473,  391, 1011,  323,  323,  323,
+      323,  323,  323,  323,  323,  291,  323,  323,  323,  323,
+      323,  323,  323,  323,  291,  323,  323,  414,  392,  415,
+      414,  338,  323,  323,  323,  424,  424,  424,  424,  392,
+      393,  422,  847,  423,  423,  423,  423,  482,  323,  263,
+      264,  483,  416,  419,  339,  402,  402,  402,  402,  416,
+      263,  264,  416,  425, 1018,  484,  416,  426,  436,  417,
+      436,  436,  323,  323,  342,  343,  454,  416, 1019,  178,
+      455,  178,  178,  403,  513,  416,  420,  404,  355, 1066,
+      351,  351,  351,  351,  179,  438,  438,  438,  438,  661,
+
+      356,  357,  439,  439,  439,  439,  494,  358,  244,  361,
+      359,  495,  263,  264,  356,  245,  666,  357,  440,  440,
+      440,  440,  247,  386,  496,  358,  441,  441,  441,  441,
+      263,  264,  662,  359,  341,  341,  342,  343,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  667,
+      341,  341,  200,  200,  200,  200,  362,  341,  341,  341,
+     1011,  221, 1050,  197,  197,  197,  197,  200,  200,  200,
+      200,  478,  514,  341,  223,  471, 1065,  471,  442,  244,
+      472,  472,  472,  472,  529,  529,  245,  511, 1064,  268,
+      223,  268,  268,  247,  442,  547,  547,  341,  341,  341,
+
+      341,  342,  343,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  291,  341,  341,  261, 1063,  261,
+      261,  362,  341,  341,  341,  469,  469,  469,  469,  503,
+     1062,  279,  179,  279,  279,  244,  442,  970,  341,  532,
+      532,  532,  245,  244,  363,  502,  502,  502,  502,  247,
+      245,  245,  442,  244,  244,  342,  343,  247,  291,  244,
+      245,  245,  341,  341,  367,  368,  245,  247,  247,  534,
+      244,  494,  244,  247,  535,  689,  552,  245,  380,  245,
+      376,  376,  376,  376,  247,  316,  247,  316,  316,  507,
+      381,  382, 1061,  504,  524,  505,  506,  383, 1060,  322,
+
+      384,  322,  322,  340,  381,  340,  340,  382,  690,  508,
+      280,  281,  282,  280,  510,  383,  342,  343,  509,  280,
+      281,  282,  280,  384,  366,  366,  367,  368,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366, 1059,
+      366,  366,  294,  281,  295,  294,  387,  366,  366,  366,
+      517,  517,  517,  517,  516,  245,  342,  343,  292,  292,
+      292,  292,  291,  366,  294,  281,  295,  294,  304,  304,
+      304,  304,  530, 1058,  530,  342,  345,  531,  531,  531,
+      531,  328,  328,  328,  328,  342,  343,  366,  366,  366,
+      366,  367,  368,  366,  366,  366,  366,  366,  366,  366,
+
+      366,  366,  366,  366,  291,  366,  366,  550,  550,  550,
+      606,  387,  366,  366,  366,  607,  307, 1057,  303,  303,
+      303,  303,  304,  304,  304,  304,  342,  345,  366,  309,
+      346,  848,  556,  525,  388,  528,  528,  528,  528,  323,
+      342,  345,  967,  193,  346,  309,  525,  313,  325,  525,
+      367,  368,  366,  366,  392,  393,  221, 1056,  320,  320,
+      320,  320,  525,  347,  328,  328,  328,  328,  405,  223,
+      401,  401,  401,  401, 1013,  543, 1051,  347,  367,  368,
+      406,  407,  973,  342,  349,  223,  361,  408,  342,  343,
+      409,  543,  346,  548,  406,  548,  693,  407,  549,  549,
+
+      549,  549,  342,  349, 1024,  408,  364,  342,  365,  364,
+     1016,  346, 1020,  409,  391,  391,  392,  393,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  694,
+      391,  391,  367,  368, 1014,  557,  412,  391,  391,  391,
+     1015,  331, 1050,  327,  327,  327,  327,  546,  546,  546,
+      546,  342,  343,  391,  333,  342,  343,  386,  543, 1012,
+      342,  343,  367,  370,  564, 1049,  371,  559,  559,  565,
+      333,  562,  562,  562,  543,  367,  370,  391,  391,  391,
+      391,  392,  393,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391, 1048,  391,  391,  342,  343,  372,
+
+      773,  412,  391,  391,  391,  364,  342,  365,  364,  342,
+      343,  367,  374,  352,  352,  352,  352,  291,  391, 1047,
+      371,  342,  343,  355,  413,  351,  351,  351,  351,  392,
+      393,  974,  560,  774,  560,  361,  357,  561,  561,  561,
+      561,  702,  391,  391,  427,  703,  423,  423,  423,  423,
+      367,  370,  357,  777,  371,  661,  428,  429,  367,  374,
+      367,  368, 1012,  430,  367,  368,  431,  371,  367,  368,
+      428,  367,  368,  429,  392,  393,  377,  377,  377,  377,
+      291,  430,  392,  393,  573,  573,  778,  372,  662,  431,
+      416,  416, 1046,  416,  416,  416,  416,  416,  416,  416,
+
+      416,  416,  416,  416,  416,  968,  416,  416,  342,  343,
+      313,  570,  434,  416,  416,  416,  392,  395,  571,  367,
+      368,  367,  368,  578,  352,  352,  352,  352,  579,  416,
+      342,  343,  574,  386,  574,  555,  925,  575,  575,  575,
+      575,  389,  367,  390,  389,  971,  558,  558,  558,  558,
+      337,  555,  666,  416,  416,  416,  416,  555,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+     1045,  416,  416,  555,  367,  368, 1044,  434,  416,  416,
+      416,  389,  367,  390,  389,  667,  367,  368,  380, 1043,
+      376,  376,  376,  376,  416,  392,  395,  367,  368,  396,
+
+      435,  382,  576,  576,  576,  392,  395,  601,  601,  396,
+      604,  604,  604,  377,  377,  377,  377,  382,  416,  416,
+      533,  533,  533,  533,  569,  392,  399,  392,  399,  533,
+      533,  533,  397, 1042,  396,  436,  396,  436,  436, 1041,
+      569, 1013,  397,  533,  533,  533,  533,  533,  533,  296,
+      296, 1040,  296,  296,  296,  296,  296,  296,  296,  296,
+      296,  296,  296,  296, 1021,  296,  296,  367,  368,  392,
+      393,  314,  296,  296,  296,  392,  393,  470,  470,  392,
+      393,  529,  529,  572,  572,  572,  572,  313,  296,  392,
+      393,  587,  587, 1039,  569,  402,  402,  402,  402, 1038,
+
+      588,  437,  588,  437,  437,  589,  589,  589,  589,  411,
+      569, 1037,  296,  296,  296,  296,  584,  296,  296,  296,
+      536,  296,  296,  296,  296,  296,  296,  296,  296,  296,
+      296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  296,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  296,  296,  296,
+      296, 1036,  296,  296,  296,  296,  296,  296,  296,  296,
+      296,  296,  296,  296, 1035,  296,  296,  392,  393,  689,
+
+      245,  314,  296,  296,  296,  392,  393,  291,  323,  392,
+      393,  405,  663,  401,  401,  401,  401,  709,  296,  392,
+      393,  590,  590,  590,  407,  402,  402,  402,  402,  392,
+      393,  682,  690,  592,  972,  683,  583,  538,  593,  337,
+      407, 1034,  296,  296,  551,  551,  551,  551,  414,  392,
+      415,  414,  583,  551,  551,  551,  414,  392,  415,  414,
+      424,  424,  424,  424,  547,  547,  585,  551,  551,  551,
+      551,  551,  551,  323,  323,  323,  323,  323,  323, 1033,
+      323,  323,  323,  323,  323,  323,  323,  323, 1011,  323,
+      323,  392,  393,  601,  601,  338,  323,  323,  323,  245,
+
+      427, 1032,  423,  423,  423,  423,  291,  586,  586,  586,
+      586,  975,  323,  429,  602,  386,  602, 1031,  583,  603,
+      603,  603,  603,  438,  438,  438,  438,  831,  832,  429,
+      439,  439,  439,  439,  583, 1030,  323,  323,  323,  323,
+      323,  323,  323,  323,  500,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
+      323,  323,  323,  323,  553,  553,  553,  553,  553,  553,
+      553,  553,  553,  553,  553,  553,  553,  323,  553,  553,
+      553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
+      553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
+
+      553,  323,  323,  323,  323,  323,  323,  323,  323, 1029,
+      323,  323,  323,  323,  323,  323,  323,  323, 1028,  323,
+      323,  424,  424,  424,  424,  338,  323,  323,  323,  473,
+      473,  473,  597,  600,  600,  600,  600,  440,  440,  440,
+      440, 1027,  323,  976,  597,  263,  264,  386,  597,  441,
+      441,  441,  441,  472,  472,  472,  472,  611, 1026,  611,
+      597,  554,  612,  612,  612,  612,  323,  323,  342,  343,
+      469,  469,  469,  469,  472,  472,  472,  472,  342,  343,
+      643,  442,  244, 1025,  563,  563,  563,  563,  644,  245,
+     1010,  645,  244,  563,  563,  563,  247,  442,  693,  245,
+
+     1009,  676,  531,  531,  531,  531,  247,  563,  563,  563,
+      563,  563,  563,  341,  341,  342,  343,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  717,  341,
+      341,  694,  244,  244,  244,  362,  341,  341,  341,  245,
+      245,  245,  531,  531,  531,  531,  247,  247,  247,  532,
+      532,  532,  341,  517,  517,  517,  517,  516,  684, 1008,
+      684,  843,  844,  685,  685,  685,  685,  549,  549,  549,
+      549,  550,  550,  550,  671, 1007,  341,  341,  341,  341,
+      342,  343,  341,  341,  566,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+
+      341,  341,  341,  341,  567,  567,  567,  567,  567,  567,
+      567,  567,  567,  567,  567,  567,  567,  341,  567,  567,
+      567,  567,  567,  567,  567,  567,  567,  567,  567,  567,
+      567,  567,  567,  567,  567,  567,  567,  567,  567,  567,
+      567,  341,  341,  341,  341,  342,  343,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341, 1006,  341,
+      341,  342,  343,  244, 1005,  362,  341,  341,  341,  244,
+      245,  342,  343,  244,  342,  719,  245,  247,  411,  244,
+      245,  927,  341,  247,  367,  368,  245,  247,  549,  549,
+      549,  549, 1022,  247,  528,  528,  528,  528,  392,  393,
+
+     1023,  568, 1055,  244,  674,  525,  341,  341,  367,  368,
+      245,  672,  342,  343,  670,  673,  675,  247, 1004,  716,
+     1003,  525,  342,  723,  577,  577,  577,  577,  559,  559,
+     1002,  720,  734,  577,  577,  577,  704,  411,  704,  367,
+      368,  705,  705,  705,  705, 1014,  752,  577,  577,  577,
+      577,  577,  577,  366,  366,  367,  368,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366, 1001,  366,
+      366,  546,  546,  546,  546,  387,  366,  366,  366,  604,
+      604,  604,  543,  342,  343, 1000,  323,  342,  343,  735,
+      663,  313,  366,  977,  714,  709,  714,  411,  543,  715,
+
+      715,  715,  715,  561,  561,  561,  561,  768,  999,  768,
+      342,  343,  769,  769,  769,  769,  366,  366,  366,  366,
+      367,  368,  366,  366,  580,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  366,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  366,  366,  366,  366,  367,  368,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  998,  366,
+
+      366,  342,  343,  367,  741,  387,  366,  366,  366,  342,
+      343,  997,  738,  342,  343,  392,  759,  558,  558,  558,
+      558,  773,  366,  996,  756,  562,  562,  562,  555,  561,
+      561,  561,  561,  342,  719,  342,  725,  720,  244,  726,
+      995,  582,  367,  368,  555,  245,  366,  366,  392,  393,
+      342,  725,  247,  732,  774,  732,  367,  368,  733,  733,
+      733,  733,  367,  368,  591,  591,  591,  591,  367,  368,
+      721,  994,  727,  591,  591,  591,  367,  737,  573,  573,
+      738,  392,  393,  993,  576,  576,  576,  591,  591,  591,
+      591,  591,  591,  391,  391,  392,  393,  391,  391,  391,
+
+      391,  391,  391,  391,  391,  391,  391,  391, 1023,  391,
+      391,  367,  368,  739,  245,  412,  391,  391,  391,  392,
+      393,  291,  777,  367,  368,  367,  737,  572,  572,  572,
+      572,  753,  391,  367,  368,  587,  587,  992,  569,  575,
+      575,  575,  575,  603,  603,  603,  603,  991,  837,  575,
+      575,  575,  575,  433,  569,  778,  391,  391,  391,  391,
+      392,  393,  391,  391,  594,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  595,  595,  595,  595,  595,  595,
+      595,  595,  595,  595,  595,  595,  595,  391,  595,  595,
+
+      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
+      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
+      595,  391,  391,  391,  391,  392,  393,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  990,  391,
+      391,  603,  603,  603,  603,  412,  391,  391,  391,  989,
+      392,  393,  367,  368,  988,  367,  743,  392,  393,  744,
+      987,  750,  391,  750,  367,  743,  751,  751,  751,  751,
+      342,  723,  986,  586,  586,  586,  586,  392,  393,  720,
+      985,  596,  392,  393,  583,  981,  391,  391,  605,  605,
+      605,  605,  745,  589,  589,  589,  589,  605,  605,  605,
+
+      583,  392,  755,  245, 1015,  756,  612,  612,  612,  612,
+      291,  605,  605,  605,  605,  605,  605,  416,  416,  961,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416, 1016,  416,  416,  392,  393,  838,  757,  434,
+      416,  416,  416,  392,  393,  960,  600,  600,  600,  600,
+      337,  589,  589,  589,  589,  433,  416,  597,  929,  590,
+      590,  590,  612,  612,  612,  612,  685,  685,  685,  685,
+      342,  723,  959,  597,  685,  685,  685,  685,  337,  720,
+      416,  416,  416,  416,  958,  416,  416,  416,  608,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+
+      416,  416,  416,  416,  416,  416,  416,  416,  609,  609,
+      609,  609,  609,  609,  609,  609,  609,  609,  609,  609,
+      609,  416,  609,  609,  609,  609,  609,  609,  609,  609,
+      609,  609,  609,  609,  609,  609,  609,  609,  609,  609,
+      609,  609,  609,  609,  609,  416,  416,  416,  416,  957,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  956,  416,  416,  392,  755,  244,  244,  434,
+      416,  416,  416,  955,  245,  245,  392,  393,  244,  392,
+      761,  247,  247,  762,  244,  245,  416,  705,  705,  705,
+      705,  245,  247,  705,  705,  705,  705,  954,  247,  342,
+
+      343,  342,  343,  566,  953,  610,  392,  761,  827,  828,
+      416,  416,  533,  533,  533,  533,  763,  715,  715,  715,
+      715,  533,  533,  533,  342,  343, 1024,  830,  829,  342,
+      343,  769,  769,  769,  769,  533,  533,  533,  533,  533,
+      533,  296,  296,  952,  296,  296,  296,  296,  296,  296,
+      296,  296,  296,  296,  296,  296,  951,  296,  296,  342,
+      343,  367,  741,  696,  296,  296,  296,  853,  367,  368,
+      738,  433,  854,  367,  368,  715,  715,  715,  715,  978,
+      296,  831,  264,  411,  733,  733,  733,  733,  950,  733,
+      733,  733,  733,  367,  741,  367,  368,  392,  393,  580,
+
+      949,  594,  738,  948,  296,  296,  296,  296,  947,  296,
+      296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
+      296,  313,  296,  296,  313,  313,  313,  313,  314,  296,
+      296,  296,  313,  313,  313,  313,  313,  313,  313,  313,
+      313,  313,  313,  313,  313,  296,  313,  313,  313,  313,
+      313,  313,  697,  313,  313,  313,  698,  313,  313,  313,
+      313,  313,  313,  313,  313,  313,  313,  313,  313,  296,
+      296,  551,  551,  551,  551,  367,  368,  946,  367,  368,
+      551,  551,  551,  342,  719,  342,  343,  720,  945,  342,
+      719,  342,  343,  720,  551,  551,  551,  551,  551,  551,
+
+      323,  323,  323,  323,  323,  323,  944,  323,  323,  323,
+      323,  323,  323,  323,  323,  888,  323,  323,  857,  943,
+      721,  858,  711,  323,  323,  323,  721,  392,  393,  979,
+      889,  392,  393,  433,  342,  725,  890,  942,  726,  323,
+      361,  922,  941,  751,  751,  751,  751,  751,  751,  751,
+      751,  392,  759,  392,  759,  769,  769,  769,  769,  940,
+      756,  939,  756,  323,  323,  323,  323,  323,  323,  323,
+      323,  727,  323,  323,  323,  323,  323,  323,  323,  323,
+      337,  323,  323,  337,  337,  337,  337,  338,  323,  323,
+      323,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  323,  337,  337,  337,  337,  337,
+      337,  712,  337,  337,  337,  713,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  323,  323,
+      342,  343,  245,  367,  368,  367,  368,  386,  924,  291,
+      392,  393,  392,  393,  411,  926,  563,  563,  563,  563,
+      392,  393,  938,  392,  393,  563,  563,  563,  342,  725,
+      433,  928,  726,  937,  367,  737,  936,  914,  738,  563,
+      563,  563,  563,  563,  563,  341,  341,  342,  343,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      872,  341,  341,  861,  935,  727,  862,  729,  341,  341,
+
+      341,  739,  980,  873,  244,  244,  433,  982,  934,  874,
+      933,  245,  245,  964,  341,  964,  964, 1011,  247,  247,
+      983,  244,  964,  932,  964,  964,  984,  931,  245,  342,
+      343, 1017,  930, 1052,  843,  247,  342,  343,  341,  341,
+      341,  341,  342,  343,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  361,  341,  341,  361,  361,
+      361,  361,  362,  341,  341,  341,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  341,
+      361,  361,  361,  361,  361,  361,  730,  361,  361,  361,
+      731,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+
+      361,  361,  361,  341,  341,  367,  368,  913,  245, 1012,
+      908,  245,  907,  244,  906,  291,  367,  368,  291,  905,
+      245,  577,  577,  577,  577,  392,  393,  247,  244,  904,
+      577,  577,  577,  367,  737,  245,  903,  738,  965,  367,
+      743,  966,  247,  744,  577,  577,  577,  577,  577,  577,
+      366,  366,  367,  368,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  902,  366,  366, 1012,  901,
+      739,  244,  747,  366,  366,  366,  745,  912,  245,  245,
+      342,  343, 1018,  900,  899,  247,  291,  898,  897,  366,
+      367,  368, 1019,  896, 1053,  367,  368, 1020,  392,  393,
+
+     1021,  895, 1054,  392,  393, 1022,  894,  893,  892,  891,
+      911,  887,  886,  366,  366,  366,  366,  367,  368,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      386,  366,  366,  386,  386,  386,  386,  387,  366,  366,
+      366,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  386,  386,  366,  386,  386,  386,  386,  386,
+      386,  748,  386,  386,  386,  749,  386,  386,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  366,  366,
+      392,  393,  885,  884,  883,  882,  881,  880,  879,  878,
+      877,  876,  875,  871,  870,  869,  591,  591,  591,  591,
+
+      868,  608,  773,  245,  866,  591,  591,  591,  367,  743,
+      291,  865,  744,  864,  392,  755,  860,  856,  756,  591,
+      591,  591,  591,  591,  591,  391,  391,  392,  393,  391,
       391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
-      391,  391,  370,  370,  396,  396,  397,  398,  396,  396,
-      396,  396,  396,  396,  396,  396,  396,  396,  396, 1094,
-      396,  396, 1094, 1094, 1094, 1094,  772,  396,  396,  396,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-
-     1094, 1094, 1094,  396, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094,  396,  396,  396,
-      396,  397,  398,  396,  396,  396,  396,  396,  396,  396,
-      396,  396,  396,  396,  417,  396,  396,  417,  417,  417,
-      417,  418,  396,  396,  396,  417,  417,  417,  417,  417,
-      417,  417,  417,  417,  417,  417,  417,  417,  396,  417,
-      417,  417,  417,  417,  417,  417,  417,  417,  870,  417,
-      417,  417,  417,  417,  417,  417,  417,  417,  417,  417,
-      417,  417,  396,  396,  422,  422, 1094,  422,  422,  422,
-
-      422,  422,  422,  422,  422,  422,  422,  422,  422, 1094,
-      422,  422, 1094, 1094, 1094, 1094,  787,  422,  422,  422,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094,  422, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094,  422,  422,  422,
-      422, 1094,  422,  422,  422,  422,  422,  422,  422,  422,
-      422,  422,  422,  422,  440,  422,  422,  440,  440,  440,
-      440,  441,  422,  422,  422,  440,  440,  440,  440,  440,
-      440,  440,  440,  440,  440,  440,  440,  440,  422,  440,
-
-      440,  440,  440,  440,  440,  440,  440,  440,  874,  440,
-      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
-      440,  440,  422,  422,  297,  297, 1094,  297,  297,  297,
-      297,  297,  297,  297,  297,  297,  297,  297,  297,  315,
-      297,  297,  315,  315,  315,  315,  316,  297,  297,  297,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  297,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  923,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  315,  297,  297,  325,
-      325,  325,  325,  325,  325, 1094,  325,  325,  325,  325,
-
-      325,  325,  325,  325,  340,  325,  325,  340,  340,  340,
-      340,  341,  325,  325,  325,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  325,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  927,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  325,  325,  182, 1094,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  185, 1094, 1094,  185,  185,
-      193, 1094,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  247,  247,  247,  247,  247,  247,  247,  247,  263,
-      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
-
-      284,  284,  284,  284,  287, 1094,  287, 1094,  287,  287,
-      287,  287,  291,  291,  291,  291,  291,  291,  291,  297,
-     1094,  297,  297,  297,  297,  297,  297,  297,  297,  297,
-      299, 1094,  299,  299,  299,  299,  299,  299,  299,  299,
-      299,  302, 1094,  302,  302,  302,  302,  302,  302,  302,
-      302,  302,  315, 1094,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  246,  246,  246,  246,  246,  246,  246,
-      325,  325, 1094,  325,  325,  325,  325,  325,  325,  325,
-      325,  326,  326,  326,  326,  326,  326,  326,  326,  326,
-      326,  326,  340,  340, 1094,  340,  340,  340,  340,  340,
-
-      340,  340,  340,  344,  344,  344,  344,  344,  344,  344,
-      344,  344,  344,  344,  347,  347,  347,  347,  347,  347,
-      347,  347,  347,  347,  347,  351,  351,  351,  351,  351,
-      351,  351,  351,  351,  351,  351,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  373,  373,
-      373,  373,  373,  373,  373,  373,  373,  373,  373,  377,
-      377,  377,  377,  377,  377,  377,  377,  377,  377,  377,
+      915,  391,  391,  852,  500,  745,  244,  765,  391,  391,
+      391,  757,  850,  245,  849,  846,  845,  842,  536,  689,
+      247,  840,  839,  836,  391,  835,  834,  833,  500,  669,
+      661,  826,  825,  824,  823,  822,  821,  818,  817,  816,
+      815,  814,  813,  962,  812,  811,  810,  809,  391,  391,
+      391,  391,  392,  393,  391,  391,  391,  391,  391,  391,
+
+      391,  391,  391,  391,  391,  411,  391,  391,  411,  411,
+      411,  411,  412,  391,  391,  391,  411,  411,  411,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  411,  391,
+      411,  411,  411,  411,  411,  411,  766,  411,  411,  411,
+      767,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+      411,  411,  411,  391,  391,  605,  605,  605,  605,  808,
+      807,  806,  244,  805,  605,  605,  605,  392,  755,  245,
+      804,  756,  803,  392,  761,  802,  247,  762,  605,  605,
+      605,  605,  605,  605,  416,  416,  801,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  963,
+
+      416,  416,  800,  799,  757,  798,  780,  416,  416,  416,
+      763,  797,  796,  795,  392,  761,  794,  793,  762,  792,
+      791,  790,  789,  416,  788,  787,  786,  785,  784,  783,
+      773,  771,  770,  707,  706,  701,  700,  699,  689,  687,
+      686,  681,  680,  679,  678,  516,  643,  416,  416,  416,
+      416,  763,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  433,  416,  416,  433,  433,  433,
+      433,  434,  416,  416,  416,  433,  433,  433,  433,  433,
+      433,  433,  433,  433,  433,  433,  433,  433,  416,  433,
+      433,  433,  433,  433,  433,  781,  433,  433,  433,  782,
+
+      433,  433,  433,  433,  433,  433,  433,  433,  433,  433,
+      433,  433,  416,  416,  296,  296,  626,  296,  296,  296,
+      296,  296,  296,  296,  296,  296,  296,  296,  296,  622,
+      296,  296,  669,  244,  664,  661,  696,  296,  296,  296,
+      245,  659,  658,  657,  656,  655,  654,  247,  653,  652,
+      651,  650,  649,  296,  648,  647,  646,  642,  641,  640,
+      639,  638,  637,  636,  635,  634,  633,  632,  631,  630,
+      629,  628,  625,  624,  621,  909,  620,  296,  296,  296,
+      296,  619,  296,  296,  296,  296,  296,  296,  296,  296,
+      296,  296,  296,  296,  313,  296,  296,  313,  313,  313,
+
+      313,  314,  296,  296,  296,  313,  313,  313,  313,  313,
+      313,  313,  313,  313,  313,  313,  313,  313,  296,  313,
+      313,  313,  313,  313,  313,  313,  313,  313,  841,  313,
+      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
+      313,  313,  296,  296,  323,  323,  323,  323,  323,  323,
+      618,  323,  323,  323,  323,  323,  323,  323,  323,  617,
+      323,  323,  616,  615,  614,  613,  711,  323,  323,  323,
+      599,  244,  598,  419,  545,  544,  541,  540,  245,  539,
+      527,  526,  299,  323,  500,  247,  521,  520,  516,  488,
+      486,  462,  459,  457,  512,  448,  500,  291,  499,  493,
+
+      492,  489,  477,  476,  475,  468,  467,  323,  323,  323,
+      323,  323,  323,  323,  323,  910,  323,  323,  323,  323,
+      323,  323,  323,  323,  337,  323,  323,  337,  337,  337,
+      337,  338,  323,  323,  323,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  323,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  851,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  323,  323,  341,  341,  342,  343,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  466,
+      341,  341,  463,  453,  450,  449,  729,  341,  341,  341,
+
+      446,  445,  444,  183,  432,  419,  417,  336,  291,  317,
+      312,  299,  297,  341,  278,  183,  278,  183,  190,  181,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087,  341,  341,  341,
+      341,  342,  343,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  361,  341,  341,  361,  361,  361,
+      361,  362,  341,  341,  341,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  341,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  855,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+
+      361,  361,  341,  341,  366,  366,  367,  368,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366, 1087,
+      366,  366, 1087, 1087, 1087, 1087,  747,  366,  366,  366,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087,  366, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087,  366,  366,  366,
+      366,  367,  368,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  386,  366,  366,  386,  386,  386,
+      386,  387,  366,  366,  366,  386,  386,  386,  386,  386,
+
+      386,  386,  386,  386,  386,  386,  386,  386,  366,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  859,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  366,  366,  391,  391,  392,  393,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391, 1087,
+      391,  391, 1087, 1087, 1087, 1087,  765,  391,  391,  391,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087,  391, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087,  391,  391,  391,
+
+      391,  392,  393,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  411,  391,  391,  411,  411,  411,
+      411,  412,  391,  391,  391,  411,  411,  411,  411,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  391,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  863,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+      411,  411,  391,  391,  416,  416, 1087,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416, 1087,
+      416,  416, 1087, 1087, 1087, 1087,  780,  416,  416,  416,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+
+     1087, 1087, 1087,  416, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087,  416,  416,  416,
+      416, 1087,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  433,  416,  416,  433,  433,  433,
+      433,  434,  416,  416,  416,  433,  433,  433,  433,  433,
+      433,  433,  433,  433,  433,  433,  433,  433,  416,  433,
+      433,  433,  433,  433,  433,  433,  433,  433,  867,  433,
+      433,  433,  433,  433,  433,  433,  433,  433,  433,  433,
+      433,  433,  416,  416,  296,  296, 1087,  296,  296,  296,
+
+      296,  296,  296,  296,  296,  296,  296,  296,  296,  313,
+      296,  296,  313,  313,  313,  313,  314,  296,  296,  296,
+      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
+      313,  313,  313,  296,  313,  313,  313,  313,  313,  313,
+      313,  313,  313,  313,  916,  313,  313,  313,  313,  313,
+      313,  313,  313,  313,  313,  313,  313,  296,  296,  323,
+      323,  323,  323,  323,  323, 1087,  323,  323,  323,  323,
+      323,  323,  323,  323,  337,  323,  323,  337,  337,  337,
+      337,  338,  323,  323,  323,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  323,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  920,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  323,  323,  182, 1087,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  185, 1087, 1087,  185,  185,
+      193, 1087,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  246,  246,  246,  246,  246,  246,  246,  246,  262,
+      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
+      283,  283,  283,  283,  286, 1087,  286, 1087,  286,  286,
+      286,  286,  290,  290,  290,  290,  290,  290,  290,  296,
+     1087,  296,  296,  296,  296,  296,  296,  296,  296,  296,
+
+      298, 1087,  298,  298,  298,  298,  298,  298,  298,  298,
+      298,  301, 1087,  301,  301,  301,  301,  301,  301,  301,
+      301,  301,  313, 1087,  313,  313,  313,  313,  313,  313,
+      313,  313,  313,  245,  245,  245,  245,  245,  245,  245,
+      323,  323, 1087,  323,  323,  323,  323,  323,  323,  323,
+      323,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  337,  337, 1087,  337,  337,  337,  337,  337,
+      337,  337,  337,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  344,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  348,  348,  348,  348,  348,
+
+      348,  348,  348,  348,  348,  348,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  369,  369,
+      369,  369,  369,  369,  369,  369,  369,  369,  369,  373,
+      373,  373,  373,  373,  373,  373,  373,  373,  373,  373,
+      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  394,  394,  394,  394,  394,  394,  394,  394,
+      394,  394,  394,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  411,  411,  411,  411,  411,  411,
+
+      411,  411,  411,  411,  411,  416, 1087,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  418, 1087,  418,  418,
+      418,  418,  418,  418,  418,  418,  418,  421, 1087,  421,
+      421,  421,  421,  421,  421,  421,  421,  421,  433, 1087,
+      433,  433,  433,  433,  433,  433,  433,  433,  433,  185,
+     1087, 1087,  185,  185,  193, 1087,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  443, 1087, 1087,  443,  443,
+      443,  474, 1087, 1087,  474,  245,  245,  245,  245,  245,
+      245,  245,  246,  246,  246,  246,  246,  246,  246,  246,
+      501, 1087, 1087, 1087, 1087,  501,  501,  501,  501,  262,
+
+      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
+      515,  515,  515,  515,  515,  515,  518,  518,  518,  518,
+      519, 1087,  519,  519,  519,  519,  290,  290,  290,  290,
+      290,  290,  290,  296, 1087,  296,  296,  296,  296,  296,
+      296,  296,  296,  296,  298, 1087,  298,  298,  298,  298,
+      298,  298,  298,  298,  298,  301, 1087,  301,  301,  301,
+      301,  301,  301,  301,  301,  301,  313, 1087,  313,  313,
+      313,  313,  313,  313,  313,  313,  313,  323,  323, 1087,
+      323,  323,  323,  323,  323,  323,  323,  323,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  337,
+
+      337, 1087,  337,  337,  337,  337,  337,  337,  337,  337,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  348,  348,  348,  348,  348,  348,  348,  348,
+      348,  348,  348,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  369,  369,  369,  369,  369,
+      369,  369,  369,  369,  369,  369,  373,  373,  373,  373,
+      373,  373,  373,  373,  373,  373,  373,  386,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  391,  391,
+
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  394,
+      394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+      411,  411,  416, 1087,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  418, 1087,  418,  418,  418,  418,  418,
+      418,  418,  418,  418,  421, 1087,  421,  421,  421,  421,
+      421,  421,  421,  421,  421,  433, 1087,  433,  433,  433,
+      433,  433,  433,  433,  433,  433,  185, 1087, 1087,  185,
+      185,  443, 1087, 1087,  443,  443,  443,  474, 1087, 1087,
+
+      474,  660, 1087,  660,  660,  660,  660,  660,  660,  660,
+      660,  660,  663, 1087,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  665, 1087,  665,  665,  665,  665,  665,
+      665,  665,  665,  665,  668,  668,  668,  668,  668,  668,
+      668,  246,  246,  246,  246,  246,  246,  246,  246,  262,
+      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
+      515,  515,  515,  515,  515,  515,  677, 1087,  677,  677,
+      677,  677,  519, 1087,  519,  519,  519,  519,  290,  290,
+      290,  290,  290,  290,  290,  296, 1087,  296,  296,  296,
+      296,  296,  296,  296,  296,  296,  688, 1087,  688,  688,
+
+      688,  688,  688,  688,  688,  688,  688,  691, 1087,  691,
+      691,  691,  691,  691,  691,  691,  691,  691,  692, 1087,
+      692,  692,  692,  692,  692,  692,  692,  692,  692,  695,
+     1087,  695,  695,  695,  695,  695,  695,  695,  695,  695,
+      245,  245,  245,  245,  245,  245,  245,  323,  323, 1087,
+      323,  323,  323,  323,  323,  323,  323,  323,  708,  708,
+      708,  708,  708,  708,  708,  708,  708,  708,  708,  710,
+      710, 1087,  710,  710,  710,  710,  710,  710,  710,  710,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+
+      718,  718,  722,  722,  722,  722,  722,  722,  722,  722,
+      722,  722,  722,  724,  724,  724,  724,  724,  724,  724,
+      724,  724,  724,  724,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  736,  736,  736,  736,
+      736,  736,  736,  736,  736,  736,  736,  740,  740,  740,
+      740,  740,  740,  740,  740,  740,  740,  740,  742,  742,
+      742,  742,  742,  742,  742,  742,  742,  742,  742,  746,
+      746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
       391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
-      391,  396,  396,  396,  396,  396,  396,  396,  396,  396,
 
-      396,  396,  399,  399,  399,  399,  399,  399,  399,  399,
-      399,  399,  399,  403,  403,  403,  403,  403,  403,  403,
-      403,  403,  403,  403,  417,  417,  417,  417,  417,  417,
-      417,  417,  417,  417,  417,  422, 1094,  422,  422,  422,
-      422,  422,  422,  422,  422,  422,  424, 1094,  424,  424,
-      424,  424,  424,  424,  424,  424,  424,  427, 1094,  427,
-      427,  427,  427,  427,  427,  427,  427,  427,  440, 1094,
-      440,  440,  440,  440,  440,  440,  440,  440,  440,  185,
-     1094, 1094,  185,  185,  193, 1094,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  450, 1094, 1094,  450,  450,
-
-      450,  481, 1094, 1094,  481,  246,  246,  246,  246,  246,
-      246,  246,  247,  247,  247,  247,  247,  247,  247,  247,
-      508, 1094, 1094, 1094, 1094,  508,  508,  508,  508,  263,
-      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
-      522,  522,  522,  522,  522,  522,  525,  525,  525,  525,
-      526, 1094,  526,  526,  526,  526,  291,  291,  291,  291,
-      291,  291,  291,  297, 1094,  297,  297,  297,  297,  297,
-      297,  297,  297,  297,  299, 1094,  299,  299,  299,  299,
-      299,  299,  299,  299,  299,  302, 1094,  302,  302,  302,
-      302,  302,  302,  302,  302,  302,  315, 1094,  315,  315,
-
-      315,  315,  315,  315,  315,  315,  315,  325,  325, 1094,
-      325,  325,  325,  325,  325,  325,  325,  325,  326,  326,
-      326,  326,  326,  326,  326,  326,  326,  326,  326,  340,
-      340, 1094,  340,  340,  340,  340,  340,  340,  340,  340,
-      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
-      344,  347,  347,  347,  347,  347,  347,  347,  347,  347,
-      347,  347,  351,  351,  351,  351,  351,  351,  351,  351,
-      351,  351,  351,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  373,  373,  373,  373,  373,
-
-      373,  373,  373,  373,  373,  373,  377,  377,  377,  377,
-      377,  377,  377,  377,  377,  377,  377,  391,  391,  391,
-      391,  391,  391,  391,  391,  391,  391,  391,  396,  396,
-      396,  396,  396,  396,  396,  396,  396,  396,  396,  399,
-      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
-      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
-      403,  417,  417,  417,  417,  417,  417,  417,  417,  417,
-      417,  417,  422, 1094,  422,  422,  422,  422,  422,  422,
-      422,  422,  422,  424, 1094,  424,  424,  424,  424,  424,
-      424,  424,  424,  424,  427, 1094,  427,  427,  427,  427,
-
-      427,  427,  427,  427,  427,  440, 1094,  440,  440,  440,
-      440,  440,  440,  440,  440,  440,  185, 1094, 1094,  185,
-      185,  450, 1094, 1094,  450,  450,  450,  481, 1094, 1094,
-      481,  667, 1094,  667,  667,  667,  667,  667,  667,  667,
-      667,  667,  670, 1094,  670,  670,  670,  670,  670,  670,
-      670,  670,  670,  672, 1094,  672,  672,  672,  672,  672,
-      672,  672,  672,  672,  675,  675,  675,  675,  675,  675,
-      675,  247,  247,  247,  247,  247,  247,  247,  247,  263,
-      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
-      522,  522,  522,  522,  522,  522,  684, 1094,  684,  684,
-
-      684,  684,  526, 1094,  526,  526,  526,  526,  291,  291,
-      291,  291,  291,  291,  291,  297, 1094,  297,  297,  297,
-      297,  297,  297,  297,  297,  297,  695, 1094,  695,  695,
-      695,  695,  695,  695,  695,  695,  695,  698, 1094,  698,
-      698,  698,  698,  698,  698,  698,  698,  698,  699, 1094,
-      699,  699,  699,  699,  699,  699,  699,  699,  699,  702,
-     1094,  702,  702,  702,  702,  702,  702,  702,  702,  702,
-      246,  246,  246,  246,  246,  246,  246,  325,  325, 1094,
-      325,  325,  325,  325,  325,  325,  325,  325,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  717,
-
-      717, 1094,  717,  717,  717,  717,  717,  717,  717,  717,
-      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
-      344,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  729,  729,  729,  729,  729,  729,  729,  729,
-      729,  729,  729,  731,  731,  731,  731,  731,  731,  731,
-      731,  731,  731,  731,  735,  735,  735,  735,  735,  735,
-      735,  735,  735,  735,  735,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  743,  743,  743,  743,
-      743,  743,  743,  743,  743,  743,  743,  747,  747,  747,
-      747,  747,  747,  747,  747,  747,  747,  747,  749,  749,
-
-      749,  749,  749,  749,  749,  749,  749,  749,  749,  753,
-      753,  753,  753,  753,  753,  753,  753,  753,  753,  753,
-      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
-      396,  761,  761,  761,  761,  761,  761,  761,  761,  761,
-      761,  761,  765,  765,  765,  765,  765,  765,  765,  765,
-      765,  765,  765,  767,  767,  767,  767,  767,  767,  767,
-      767,  767,  767,  767,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  422, 1094,  422,  422,  422,
-      422,  422,  422,  422,  422,  422,  779, 1094,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  782, 1094,  782,
-
-      782,  782,  782,  782,  782,  782,  782,  782,  783, 1094,
-      783,  783,  783,  783,  783,  783,  783,  783,  783,  786,
-     1094,  786,  786,  786,  786,  786,  786,  786,  786,  786,
-      450, 1094, 1094,  450,  450,  450,  667, 1094,  667,  667,
-      667,  667,  667,  667,  667,  667,  667,  670, 1094,  670,
-      670,  670,  670,  670,  670,  670,  670,  670,  672, 1094,
-      672,  672,  672,  672,  672,  672,  672,  672,  672,  675,
-      675,  675,  675,  675,  675,  675,  247,  247,  247,  247,
-      247,  247,  247,  247,  263,  263,  263,  263,  263,  263,
-      263,  263,  263,  263,  263,  684, 1094,  684,  684,  684,
-
-      684,  526, 1094,  526,  526,  526,  526,  291,  291,  291,
-      291,  291,  291,  291,  297, 1094,  297,  297,  297,  297,
-      297,  297,  297,  297,  297,  695, 1094,  695,  695,  695,
-      695,  695,  695,  695,  695,  695,  698, 1094,  698,  698,
-      698,  698,  698,  698,  698,  698,  698,  699, 1094,  699,
-      699,  699,  699,  699,  699,  699,  699,  699,  702, 1094,
-      702,  702,  702,  702,  702,  702,  702,  702,  702,  246,
-      246,  246,  246,  246,  246,  246,  325,  325, 1094,  325,
-      325,  325,  325,  325,  325,  325,  325,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  717,  717,
-
-     1094,  717,  717,  717,  717,  717,  717,  717,  717,  344,
-      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  729,  729,  729,  729,  729,  729,  729,  729,  729,
-      729,  729,  731,  731,  731,  731,  731,  731,  731,  731,
-      731,  731,  731,  735,  735,  735,  735,  735,  735,  735,
-      735,  735,  735,  735,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  743,  743,  743,  743,  743,
-      743,  743,  743,  743,  743,  743,  747,  747,  747,  747,
-      747,  747,  747,  747,  747,  747,  747,  749,  749,  749,
-
-      749,  749,  749,  749,  749,  749,  749,  749,  753,  753,
-      753,  753,  753,  753,  753,  753,  753,  753,  753,  396,
-      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
-      761,  761,  761,  761,  761,  761,  761,  761,  761,  761,
-      761,  765,  765,  765,  765,  765,  765,  765,  765,  765,
-      765,  765,  767,  767,  767,  767,  767,  767,  767,  767,
-      767,  767,  767,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  422, 1094,  422,  422,  422,  422,
-      422,  422,  422,  422,  422,  779, 1094,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  782, 1094,  782,  782,
-
-      782,  782,  782,  782,  782,  782,  782,  783, 1094,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  786, 1094,
-      786,  786,  786,  786,  786,  786,  786,  786,  786,  450,
-     1094, 1094,  450,  450,  450,  247,  247,  247,  247,  247,
-      247,  247,  247,  263,  263,  263,  263,  263,  263,  263,
-      263,  263,  263,  263,  526, 1094,  526,  526,  526,  526,
-      291,  291,  291,  291,  291,  291,  291,  297, 1094,  297,
-      297,  297,  297,  297,  297,  297,  297,  297,  246,  246,
-      246,  246,  246,  246,  246,  325,  325, 1094,  325,  325,
-      325,  325,  325,  325,  325,  325,   23, 1094, 1094, 1094,
-
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094
+      391,  754,  754,  754,  754,  754,  754,  754,  754,  754,
+      754,  754,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  764,  764,  764,  764,  764,  764,
+      764,  764,  764,  764,  764,  416, 1087,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  772, 1087,  772,  772,
+      772,  772,  772,  772,  772,  772,  772,  775, 1087,  775,
+      775,  775,  775,  775,  775,  775,  775,  775,  776, 1087,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  779,
+     1087,  779,  779,  779,  779,  779,  779,  779,  779,  779,
+
+      443, 1087, 1087,  443,  443,  443,  660, 1087,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  663, 1087,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  665, 1087,
+      665,  665,  665,  665,  665,  665,  665,  665,  665,  668,
+      668,  668,  668,  668,  668,  668,  246,  246,  246,  246,
+      246,  246,  246,  246,  262,  262,  262,  262,  262,  262,
+      262,  262,  262,  262,  262,  677, 1087,  677,  677,  677,
+      677,  519, 1087,  519,  519,  519,  519,  290,  290,  290,
+      290,  290,  290,  290,  296, 1087,  296,  296,  296,  296,
+      296,  296,  296,  296,  296,  688, 1087,  688,  688,  688,
+
+      688,  688,  688,  688,  688,  688,  691, 1087,  691,  691,
+      691,  691,  691,  691,  691,  691,  691,  692, 1087,  692,
+      692,  692,  692,  692,  692,  692,  692,  692,  695, 1087,
+      695,  695,  695,  695,  695,  695,  695,  695,  695,  245,
+      245,  245,  245,  245,  245,  245,  323,  323, 1087,  323,
+      323,  323,  323,  323,  323,  323,  323,  708,  708,  708,
+      708,  708,  708,  708,  708,  708,  708,  708,  710,  710,
+     1087,  710,  710,  710,  710,  710,  710,  710,  710,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+
+      718,  722,  722,  722,  722,  722,  722,  722,  722,  722,
+      722,  722,  724,  724,  724,  724,  724,  724,  724,  724,
+      724,  724,  724,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  736,  736,  736,  736,  736,
+      736,  736,  736,  736,  736,  736,  740,  740,  740,  740,
+      740,  740,  740,  740,  740,  740,  740,  742,  742,  742,
+      742,  742,  742,  742,  742,  742,  742,  742,  746,  746,
+      746,  746,  746,  746,  746,  746,  746,  746,  746,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+
+      754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
+      754,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  764,  764,  764,  764,  764,  764,  764,
+      764,  764,  764,  764,  416, 1087,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  772, 1087,  772,  772,  772,
+      772,  772,  772,  772,  772,  772,  775, 1087,  775,  775,
+      775,  775,  775,  775,  775,  775,  775,  776, 1087,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  779, 1087,
+      779,  779,  779,  779,  779,  779,  779,  779,  779,  443,
+
+     1087, 1087,  443,  443,  443,  246,  246,  246,  246,  246,
+      246,  246,  246,  262,  262,  262,  262,  262,  262,  262,
+      262,  262,  262,  262,  519, 1087,  519,  519,  519,  519,
+      290,  290,  290,  290,  290,  290,  290,  296, 1087,  296,
+      296,  296,  296,  296,  296,  296,  296,  296,  245,  245,
+      245,  245,  245,  245,  245,  323,  323, 1087,  323,  323,
+      323,  323,  323,  323,  323,  323,   23, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087
     } ;
 
-static yyconst flex_int16_t yy_chk[7163] =
+static yyconst flex_int16_t yy_chk[7033] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1640,12 +1624,12 @@
         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,    2,   33,    2,    2,   29,
-       35,    4,  236,    4,    4, 1088,    6,   40,    6,    6,
-       33,  236,   35,    8,   40,    8,    8,   55,    2,    3,
+       35,    4,  235,    4,    4, 1081,    6,   40,    6,    6,
+       33,  235,   35,    8,   40,    8,    8,   55,    2,    3,
        74,    3,    3,    3,    4,   44,   44,    3,    3,    6,
 
         3,    3,   29,    3,    3,    3,    8,   45,   45,  108,
-        3,    3,    3,    3,   10,   13,   10,   10,   12, 1084,
+        3,    3,    3,    3,   10,   13,   10,   10,   12, 1077,
        12,   12,   16,   74,   16,   16,   55,   13,   13,   13,
        13,   18,  108,   18,   18,    3,   20,    3,   20,   20,
         3,   22,    3,   22,   22,    3,  212,    3,   46,   46,
@@ -1678,8 +1662,8 @@
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
 
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   14, 1083,   14,   14,   31,   14,   31,
-       82,   31,   31,   60, 1082,   60,   60,   82,  122,  122,
+       11,   11,   11,   14, 1076,   14,   14,   31,   14,   31,
+       82,   31,   31,   60, 1075,   60,   60,   82,  122,  122,
        14,   14,   14,   14,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
@@ -1711,720 +1695,706 @@
        21,   21,   21,   21,   25,   91,   25,   25,   27,   27,
 
        27,   27,   36,  209,   36,   36,   36,   36,  209,   25,
-       36,   47,   38,   27,   38,   38,   38,   38,   47, 1080,
-       38,   39,   39,   39,   39,   47,  233,   39,   91,   39,
+       36,   47,   38,   27,   38,   38,   38,   38,   47, 1073,
+       38,   39,   39,   39,   39,   47,  232,   39,   91,   39,
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
-       39,   39,  233,   39,   39,   39,   39,   39,   39,   39,
+       39,   39,  232,   39,   39,   39,   39,   39,   39,   39,
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
        39,   39,   39,   39,   39,   39,   41,   52,   41,   41,
-       41,   41,  216,   51,   52,   49,  976,   53,   41,   41,
-       51,   52,   49,   41,   53,   41,  216,   51,   41,   49,
-       56,   53,   41,  112,  976,   41,   42,  112,   42,   42,
-
-       42,   42,  112,   41,   67,   48,   67,   67, 1079,   42,
-       52,   41,   48,   42,   53,   48,   48,   48,   48,   48,
-       49,   69,   69,  660,   51,   42,   43,   53,   43,  460,
-       56,   43,  660,   50,   43,   43,   43,   43,   43,   43,
-       50,   54,   43,   84,   43,   43,  460,   50,   54,   57,
-       84,   57,   57,   59,   59,   54,   66,   58,   58,   58,
-       58,  231,   69,   66,   57,   61,   61,   61,   61,  231,
-       66,   50,   58,   84, 1077,   59,   59,   50,   62,   64,
-       62,   62,   62,   62,  121,   54,  167,   64,   64,   64,
-       64,   64,   64,   66,   59,   63,  124,  124,   64,   68,
-
-       68,   68,   68,   71,   71,   71,   71,   73,   73,   73,
-       73,   87,   87,   63,   63, 1076,   63,  121,   63,  167,
-       63,   63,   63,   63,  213,   63,  213,   63,   63,   63,
-       75,  323,   75,   63,   75,   75,   77,   78,   77,   77,
-       77,   77,   85,   85,   85,   85,  980,   78,   78,   78,
-       78,   80,   87,   80,   80,   80,   80,   86,   86,   86,
-       86,  131,  131,  214,   80,  214,   83,  323,   80,   83,
-       83,   83,   83,   83,   78,   78,  136,  136, 1073,   78,
-       80,   93,  131,   93,   93,   93,   93,   94,   94,   94,
-       94,  980,  100,   96,  100,  100,  101,  101,  101,  101,
-
-       96,  234,  109,   96,  109,  109,  234,   96,  104,  104,
-      104,  104,  126,  126,  120,   94,  120,  120,   96,   94,
-       95,  126,   95,   95,   95,   95,   96,  105,  105,  105,
-      105,  116,   95,   95,  138,  138,  104,   95,  116,   95,
-      104,  116,   95,  150,  150,  116,   95,  810,  113,   95,
-      113,  113,  113,  113,  140,  140,  116,   95,  134,  134,
-      134,  134,  810,  140,  116,   95,   98,   98,  810,   98,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98, 1070,   98,   98,  114,  114,  114,  114,   98,   98,
-       98,   98,  463,  106,  463,  106,  106,  106,  106,  135,
-
-      135,  135,  135,  152,  152,   98,  106,  127,  127,  849,
-      106,  849,  114,  125,  125,  239,  114,  125,  154,  154,
-      239,  127,  106,  127,  127,  127,  127,  154, 1069,   98,
-       98,   99,   99,  239,   99,   99,   99,   99,   99,   99,
-       99,   99,   99,   99,   99,   99,  863,   99,   99,  863,
-      125,  145,  145,   99,   99,   99,   99,  130,  148,  148,
-      148,  148,  128,  128,  130,  139,  139,  130,  279,  139,
-       99,  130,  145,  279,  182, 1068,   99,  206,  128,  128,
-      128,  128,  130,  149,  149,  149,  149,  153,  153,  206,
-      130,  153,  222,  222,   99,   99,  115, 1066,  115,  115,
-
-      115,  115,  139,  225,  225,  225,  128,  182,  115,  115,
-      128,  159,  159,  115,  176,  115,  176,  176,  115,  929,
-      141,  141,  115,  929,  153,  115,  162,  162,  162,  162,
-      230,  230,  159,  115,  141, 1065,  141,  141,  141,  141,
-      290,  115,  118,  118,  118,  118,  118,  118,  290,  118,
-      118,  118,  118,  118,  118,  118,  118, 1064,  118,  118,
-      163,  163,  163,  163,  118,  118,  118,  118,  155,  155,
-      169,  299,  169,  169,  169,  169,  244,  244,  142,  142,
-      867,  118,  155,  867,  155,  155,  155,  155,  177,  177,
-      177,  177,  263,  263,  142,  142,  142,  142,  178,  974,
-
-      178,  178,  265,  265,  299,  118,  118,  119,  119,  119,
-      119,  119,  119,  178,  119,  119,  119,  119,  119,  119,
-      119,  119,  142,  119,  119, 1063,  142,  424,  144,  119,
-      119,  119,  119,  232,  158,  144,  291,  232,  144,  156,
-      156,  158,  144,  291,  158,  974,  119,  179,  158,  179,
-      179,  232,  119,  144,  854,  156,  156,  156,  156,  158,
-      424,  144,  186,  186,  186,  186, 1056,  158,  266,  266,
-      119,  119,  129,  129,  170,  170,  170,  170,  187,  187,
-      187,  187,  854,  156,  267,  267,  129,  156,  129,  129,
-      129,  129,  188,  188,  188,  188,  501,  172,  129,  129,
-
-      276,  276,  170,  129,  172,  129,  170,  172,  129,  309,
-      309,  172,  129, 1051,  247,  129,  189,  189,  189,  189,
-     1050,  247,  172,  129,  196,  196,  196,  196,  247,  501,
-      172,  129,  132,  132,  132,  132,  132,  132,  132,  132,
-      132,  132,  132,  132,  132,  132,  132,  507,  132,  132,
-      269,  251,  269,  269,  132,  132,  132,  132,  251,  197,
-      925,  197,  197,  197,  197,  251,  200,  200,  200,  200,
-      211,  132,  197, 1047,  211,  253,  197,  200,  211,  223,
-      507,  223,  253,  925,  223,  223,  223,  223,  197,  253,
-      312,  312,  312,  200,  977,  132,  132,  133,  133,  133,
+       41,   41,  121,   49,   52,   54,   51,   56,   41,   41,
+       49,   52,   54,   51,  213,   41,  213,   49,   41,   54,
+       51,  214,   41,  214,   42,   41,   42,   42,   42,   42,
+
+       69,   69,   48,   41,  456,  121,  456,   42,  206,   48,
+       52,   41,   48,   48,   48,   48,   48,   56,   49,   54,
+      206,  112, 1072,   42,   43,  112,   43,   51, 1070,   43,
+      112,   50,   43,   43,   43,   43,   43,   43,   50,   53,
+       43,   69,   43,   43, 1069,   50,   53,   57,  848,   57,
+       57,   59,   59,   53,   66,   58,   58,   58,   58, 1066,
+       84,   66,   57,   61,   61,   61,   61,   84,   66,   50,
+       58,  124,  124,   59,   59,   50,   53,   62,  848,   62,
+       62,   62,   62,   87,   87,   67,   64,   67,   67,   53,
+       84,   66,   59,   63,   64,   64,   64,   64,   64,   64,
+
+       68,   68,   68,   68,  653,   64,   71,   71,   71,   71,
+      167,   63,   63,  653,   63,  182,   63, 1063,   63,   63,
+       63,   63,  230,   63,   87,   63,   63,   63,  126,  126,
+      230,   63,   73,   73,   73,   73,   75,  126,   75,   78,
+       75,   75,   77,  167,   77,   77,   77,   77,  182,   78,
+       78,   78,   78,   80, 1062,   80,   80,   80,   80,   85,
+       85,   85,   85,  453,   83,  847,   80,   83,   83,   83,
+       83,   83,   86,   86,   86,   86,   78,   78,  136,  136,
+      453,   78,   80,   93, 1061,   93,   93,   93,   93,   94,
+       94,   94,   94,  847,  100,   96,  100,  100,  101,  101,
+
+      101,  101,   96,  233,  109,   96,  109,  109,  233,   96,
+      104,  104,  104,  104,  138,  138,  120,   94,  120,  120,
+       96,   94,   95, 1059,   95,   95,   95,   95,   96,  105,
+      105,  105,  105,  116,   95,   95,  131,  131,  104, 1058,
+      116,   95,  104,  116,   95,  150,  150,  116,   95, 1057,
+      113,   95,  113,  113,  113,  113,  216,  131,  116,   95,
+      134,  134,  134,  134,  152,  152,  116,   95,   98,   98,
+      216,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+       98,   98,   98,  918,   98,   98,  114,  114,  114,  114,
+       98,   98,   98,   98,  842,  106,  842,  106,  106,  106,
+
+      106,  140,  140,  127,  127,  211,  918,   98,  106,  211,
+      140,  125,  125,  211,  114,  125,  290,  127,  114,  127,
+      127,  127,  127,  290,  106,  135,  135,  135,  135,  222,
+      222,   98,   98,   99,   99,  321,   99,   99,   99,   99,
+       99,   99,   99,   99,   99,   99,   99,   99,  125,   99,
+       99,  128,  128,  145,  145,   99,   99,   99,   99,  148,
+      148,  148,  148,  149,  149,  149,  149,  128,  128,  128,
+      128,  321,   99,  852,  145,  852,  139,  139,   99,  130,
+      139,  153,  153,  154,  154,  153,  130,  229,  229,  130,
+      142,  142,  154,  130, 1056,  128,   99,   99,  115,  128,
+
+      115,  115,  115,  115,  130,  973,  142,  142,  142,  142,
+      115,  115,  130,  139,  141,  141,  856,  115,  153,  856,
+      115,  159,  159,  176,  115,  176,  176,  115,  141,  298,
+      141,  141,  141,  141,  142,  115,  278,  179,  142,  179,
+      179,  278,  159,  115,  118,  118,  118,  118,  118,  118,
+      973,  118,  118,  118,  118,  118,  118,  118,  118, 1049,
+      118,  118,  298,  144,  243,  243,  118,  118,  118,  118,
+      144,  246,  158,  144, 1044,  155,  155,  144,  246,  158,
+      262,  262,  158,  118, 1043,  246,  158,  289,  144,  155,
+     1040,  155,  155,  155,  155,  289,  144,  158,  162,  162,
+
+      162,  162,  224,  224,  224,  158,  969,  118,  118,  119,
+      119,  119,  119,  119,  119,  702,  119,  119,  119,  119,
+      119,  119,  119,  119,  969,  119,  119,  163,  163,  163,
+      163,  119,  119,  119,  119,  170,  170,  170,  170,  156,
+      156,  169,  702,  169,  169,  169,  169,  231,  119,  264,
+      264,  231,  172,  418,  119,  156,  156,  156,  156,  172,
+      265,  265,  172,  170,  974,  231,  172,  170,  177,  177,
+      177,  177,  119,  119,  129,  129,  271,  172,  975,  178,
+      271,  178,  178,  156,  271,  172,  418,  156,  129, 1039,
+      129,  129,  129,  129,  178,  186,  186,  186,  186,  494,
+
+      129,  129,  187,  187,  187,  187,  238,  129,  250,  974,
+      129,  238,  266,  266,  129,  250,  500,  129,  188,  188,
+      188,  188,  250,  975,  238,  129,  189,  189,  189,  189,
+      267,  267,  494,  129,  132,  132,  132,  132,  132,  132,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  500,
+      132,  132,  196,  196,  196,  196,  132,  132,  132,  132,
+     1011,  197, 1011,  197,  197,  197,  197,  200,  200,  200,
+      200,  275,  275,  132,  197,  223, 1037,  223,  200,  249,
+      223,  223,  223,  223,  308,  308,  249,  267, 1036,  268,
+      197,  268,  268,  249,  200,  332,  332,  132,  132,  133,
 
       133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
-      133,  133,  977,  133,  133,  268,  268,  253,  253,  133,
-      133,  133,  133,  221,  221,  221,  221,  272,  334,  334,
-      294,  272, 1046,  249,  221,  272,  133,  294,  344,  344,
-      249,  250,  133,  249,  249,  249,  249,  249,  250,  314,
-      221,  252,  254,  871,  314,  250,  871,  255,  252,  254,
-      133,  133,  143,  143,  255,  252,  254, 1044,  256,  339,
-      257,  255,  268,  294,  339,  256,  143,  257,  143,  143,
-      143,  143,  256,  280,  257,  280,  280,  254,  143,  143,
-      859,  250,  859,  143,  262,  143,  262,  262,  143,  346,
-
-      346,  252,  143,  349,  349,  143, 1043,  255,  318,  262,
-      318,  318,  257,  143,  350,  350,  256,  281,  281,  281,
-      281,  143,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,  146,  146,  146,  146,  146,  146, 1042,  146,  146,
-      283,  283,  283,  283,  146,  146,  146,  146,  285,  285,
-      285,  285,  285,  293,  361,  361,  293,  293,  293,  293,
-      293,  146,  295,  295,  295,  295,  296,  296,  296,  296,
-      303,  303,  303,  303,  310,  324,  310,  324,  324,  310,
-      310,  310,  310,  370,  370,  146,  146,  147,  147,  147,
+      133,  133,  133,  133,  919,  133,  133,  261, 1035,  261,
+      261,  133,  133,  133,  133,  221,  221,  221,  221,  249,
+     1033,  279,  261,  279,  279,  248,  221,  919,  133,  310,
+      310,  310,  248,  251,  133,  248,  248,  248,  248,  248,
+      251,  293,  221,  252,  253,  341,  341,  251,  293,  254,
+      252,  253,  133,  133,  143,  143,  254,  252,  253,  312,
+      255,  336,  256,  254,  312,  534,  336,  255,  143,  256,
+      143,  143,  143,  143,  255,  316,  256,  316,  316,  253,
+      143,  143, 1032,  251,  293,  252,  252,  143, 1031,  322,
+
+      143,  322,  322,  340,  143,  340,  340,  143,  534,  254,
+      280,  280,  280,  280,  256,  143,  343,  343,  255,  282,
+      282,  282,  282,  143,  146,  146,  146,  146,  146,  146,
+      146,  146,  146,  146,  146,  146,  146,  146,  146, 1030,
+      146,  146,  294,  294,  294,  294,  146,  146,  146,  146,
+      284,  284,  284,  284,  284,  292,  346,  346,  292,  292,
+      292,  292,  292,  146,  295,  295,  295,  295,  302,  302,
+      302,  302,  309, 1028,  309,  347,  347,  309,  309,  309,
+      309,  326,  326,  326,  326,  353,  353,  146,  146,  147,
       147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
 
-      147,  147, 1040,  147,  147,  328,  328,  328,  328,  147,
-      147,  147,  147, 1018,  304, 1018,  304,  304,  304,  304,
-      372,  372,  305,  305,  305,  305,  147,  304,  337,  337,
-      337,  304,  147,  305,  308,  308,  308,  308,  326,  351,
-      351,  439,  326,  304, 1039,  308,  439,  326,  351,  305,
-      147,  147,  157,  157,  343,  709,  343,  343,  352,  352,
-      322,  308,  322,  322,  322,  322,  157,  352,  157,  157,
-      157,  157, 1038,  322,  375,  375,  549,  322,  157,  157,
-      356,  356,  709,  157, 1037,  157,  357,  357,  157,  322,
-      930,  335,  157,  335,  930,  157,  335,  335,  335,  335,
-
-      549,  347,  347,  157,  549,  347,  368,  368,  368,  368,
-     1035,  157,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  356,  160,  160,
-      376,  376,  926,  357,  160,  160,  160,  160,  347,  329,
-      710,  329,  329,  329,  329,  923,  330,  330,  330,  330,
-      923,  160,  329,  353,  353,  926,  329,  330,  348,  348,
-      387,  387,  348,  369,  369,  369,  369,  710,  329,  353,
-      353,  353,  353,  330, 1034,  160,  160,  161,  161,  161,
+      147,  147,  147,  147,  703,  147,  147,  334,  334,  334,
+      432,  147,  147,  147,  147,  432,  303, 1027,  303,  303,
+      303,  303,  304,  304,  304,  304,  344,  344,  147,  303,
+      344,  703,  353,  304,  147,  307,  307,  307,  307,  324,
+      345,  345,  916,  324,  345,  303,  307,  916,  324,  304,
+      366,  366,  147,  147,  157,  157,  320, 1026,  320,  320,
+      320,  320,  307,  344,  328,  328,  328,  328,  157,  320,
+      157,  157,  157,  157, 1013,  328, 1013,  345,  368,  368,
+      157,  157,  922,  348,  348,  320,  922,  157,  354,  354,
+      157,  328,  348,  333,  157,  333,  536,  157,  333,  333,
+
+      333,  333,  349,  349, 1024,  157,  364,  364,  364,  364,
+     1016,  349,  976,  157,  160,  160,  160,  160,  160,  160,
+      160,  160,  160,  160,  160,  160,  160,  160,  160,  536,
+      160,  160,  371,  371, 1014,  354,  160,  160,  160,  160,
+     1015,  327, 1015,  327,  327,  327,  327,  331,  331,  331,
+      331,  356,  356,  160,  327,  358,  358,  976,  331, 1012,
+      360,  360,  369,  369,  360, 1010,  369,  356,  356,  360,
+      327,  358,  358,  358,  331,  372,  372,  160,  160,  161,
       161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161, 1033,  161,  161,  348,  359,  359,  794,  161,
-
-      161,  161,  161,  333,  333,  333,  333,  355,  355,  377,
-      377,  794,  359,  359,  333,  931,  161,  794,  377,  931,
-      360,  360,  161,  355,  355,  355,  355,  541,  373,  373,
-      333,  360,  373,  360,  355, 1031,  360,  360,  360,  360,
-      161,  161,  171,  543,  171,  171,  171,  171,  374,  374,
-      355, 1023,  374,  924,  171,  171,  362,  362,  924,  171,
-      541,  171,  382,  382,  171,  373,  364,  364,  171,  981,
-      364,  171,  362,  362,  362,  364,  543,  378,  378,  171,
-      396,  396, 1021,  383,  383,  374,  378,  171,  174,  174,
-     1019,  174,  174,  174,  174,  174,  174,  174,  174,  174,
-
-      174,  174,  174, 1017,  174,  174,  358,  358,  855,  382,
-      174,  174,  174,  174,  981,  385,  385,  613,  379,  379,
-      398,  398,  358,  358,  358,  358, 1016,  174,  381,  381,
-      383,  385,  385,  358,  379,  379,  379,  379,  855,  390,
-      390,  401,  401,  390,  381,  381,  381,  381,  390,  358,
-      613,  174,  174,  175,  175,  381,  175,  175,  175,  175,
-      175,  175,  175,  175,  175,  175,  175,  175, 1015,  175,
-      175,  381,  384,  384, 1014,  175,  175,  175,  175,  394,
-      394,  394,  394, 1012,  386,  386,  402,  402,  384,  384,
-      384,  384,  175,  388,  388,  386, 1011,  386,  175,  384,
-
-      386,  386,  386,  386,  395,  395,  395,  395,  932,  388,
-      388,  388,  932,  403,  403,  384,  175,  175,  313,  313,
-      313,  313,  403,  404,  404,  413,  413,  313,  313,  313,
-      399,  399,  404, 1010,  399,  615,  400,  400,  408,  408,
-      400,  313,  313,  313,  313,  313,  313,  315,  315, 1009,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      315,  315, 1008,  315,  315,  405,  405,  399,  615,  315,
-      315,  315,  315,  400,  411,  411,  412,  412,  434,  434,
-     1007,  405,  405,  405,  405,  408,  315,  412, 1006,  412,
-      411,  411,  412,  412,  412,  412,  416,  416,  477,  477,
-
-      416,  420,  420,  420,  420,  416,  421,  421,  421,  421,
-      315,  315,  316,  316, 1003,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  317,  317, 1002,
-      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  927,  317,  317,  407,  407,  927,  486,  317,
-
-      317,  317,  317,  409,  409,  928,  486,  414,  414,  486,
-      928,  407,  407,  407,  407, 1001,  317,  428,  428,  428,
-      428, 1000,  407,  414,  414,  414,  536,  536,  430,  430,
-      430,  430,  437,  437,  437,  317,  518,  518,  407,  430,
-      317,  317,  338,  338,  338,  338,  443,  998,  443,  443,
-      409,  338,  338,  338,  435,  430,  435,  554,  554,  435,
-      435,  435,  435,  608,  608,  338,  338,  338,  338,  338,
-      338,  340,  340,  340,  340,  340,  340,  996,  340,  340,
-      340,  340,  340,  340,  340,  340,  972,  340,  340,  410,
-      410,  995,  518,  340,  340,  340,  340,  972,  429,  994,
-
-      429,  429,  429,  429,  972,  410,  410,  410,  410,  993,
-      340,  429,  480,  480,  480,  429,  410,  444,  992,  444,
-      444,  445,  445,  445,  445,  683,  683,  429,  446,  446,
-      446,  446,  410,  991,  340,  340,  341,  341,  341,  341,
-      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
-      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
-      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
-      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
-      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
-      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
-
-      341,  342,  342,  342,  342,  342,  342,  990,  342,  342,
-      342,  342,  342,  342,  342,  342,  989,  342,  342,  433,
-      433,  433,  433,  342,  342,  342,  342,  539,  539,  539,
-      433,  447,  447,  447,  447,  448,  448,  448,  448,  933,
-      342,  934,  449,  933,  449,  934,  433,  449,  449,  449,
-      449,  476,  476,  476,  476,  478,  478,  478,  478,  342,
-      706,  706,  476,  988,  342,  342,  354,  354,  479,  479,
-      479,  479,  509,  967,  510,  557,  557,  557,  476,  509,
-      354,  510,  354,  354,  354,  354,  509,  511,  510,  512,
-      667,  513,  514,  354,  511,  844,  512,  354,  513,  514,
-
-      515,  511,  844,  512,  965,  513,  514,  515,  517,  354,
-      363,  363,  559,  531,  515,  517,  559,  566,  566,  510,
-      531,  559,  517,  667,  564,  564,  363,  363,  363,  363,
-      844,  512,  516,  566,  566,  363,  363,  363,  515,  516,
-      727,  727,  515,  672,  531,  517,  516,  975,  531,  363,
-      363,  363,  363,  363,  363,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      964,  365,  365,  516,  564,  963,  672,  365,  365,  365,
-      365,  524,  524,  524,  524,  524,  537,  537,  537,  537,
-      532,  962,  532,  975,  365,  532,  532,  532,  532,  538,
-
-      538,  538,  538,  550,  960,  550,  728,  728,  550,  550,
-      550,  550,  555,  555,  555,  555,  733,  733,  365,  365,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-
-      695,  367,  367,  535,  535,  535,  535,  367,  367,  367,
-      367,  563,  563,  959,  535,  553,  553,  553,  553,  556,
-      556,  556,  556,  935,  367,  699,  553,  935,  562,  562,
-      535,  572,  572,  695,  578,  578,  565,  565,  958,  562,
-      572,  562,  553,  367,  562,  562,  562,  562,  367,  367,
-      380,  380,  565,  565,  565,  565,  567,  567,  699,  563,
-      611,  611,  611,  565,  380,  957,  380,  380,  380,  380,
-      568,  568,  567,  567,  567,  567,  936,  380,  677,  565,
-      936,  380,  569,  569,  578,  677,  568,  568,  568,  568,
-      576,  576,  677,  380,  389,  389,  586,  586,  569,  569,
-
-      569,  576, 1020,  576, 1020,  586,  576,  576,  576,  576,
-      389,  389,  389,  389,  580,  580,  592,  592,  956,  389,
-      389,  389,  571,  571,  577,  577,  571,  779,  573,  573,
-      580,  580,  573,  389,  389,  389,  389,  389,  389,  391,
-      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
-      391,  391,  391,  391,  982,  391,  391,  579,  579,  571,
-      779,  391,  391,  391,  391,  573,  592,  734,  734,  581,
-      581,  955,  577,  579,  579,  579,  579,  954,  391,  582,
-      582,  600,  600,  953,  579,  581,  581,  581,  581,  951,
-      600,  609,  609,  609,  609,  582,  582,  582,  582,  982,
-
-      579,  950,  391,  391,  392,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  392,  392,  392,  392,  392,  393,
-      393,  393,  393,  393,  393,  393,  393,  393,  393,  393,
-      393,  393,  393,  393,  949,  393,  393,  583,  583,  591,
-      591,  393,  393,  393,  393,  983,  736,  736,  594,  594,
-
-      736,  595,  595,  583,  583,  583,  585,  585,  393,  783,
-      585,  948,  587,  587,  594,  594,  587,  595,  595,  595,
-      595,  599,  599,  689,  678,  599,  947,  393,  590,  590,
-      689,  678,  393,  393,  406,  406,  946,  591,  678,  590,
-      983,  590,  783,  585,  590,  590,  590,  590,  406,  587,
-      406,  406,  406,  406,  945,  593,  593,  689,  599,  944,
-      715,  406,  601,  601,  715,  406,  601,  596,  596,  715,
-      943,  593,  593,  593,  593,  597,  597,  406,  415,  415,
-      745,  745,  593,  596,  596,  596,  596,  610,  610,  610,
-      610,  597,  597,  597,  415,  415,  415,  415,  593,  601,
-
-      746,  746,  682,  415,  415,  415,  604,  875,  604,  682,
-      875,  604,  604,  604,  604,  978,  682,  415,  415,  415,
-      415,  415,  415,  417,  417,  417,  417,  417,  417,  417,
-      417,  417,  417,  417,  417,  417,  417,  417,  942,  417,
-      417,  607,  607,  607,  607,  417,  417,  417,  417,  751,
-      751,  682,  607,  618,  618,  618,  618,  619,  619,  619,
-      619,  978,  417,  691,  691,  691,  691,  941,  607,  692,
-      692,  692,  692,  711,  711,  711,  711,  712,  712,  712,
-      712,  752,  752,  763,  763,  940,  417,  417,  418,  418,
-      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
-
-      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
-      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
-      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
-      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
-      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
-      418,  418,  418,  419,  419,  419,  419,  419,  419,  419,
-      419,  419,  419,  419,  419,  419,  419,  419,  939,  419,
-      419,  937,  679,  680,  915,  419,  419,  419,  419,  679,
-      680,  681,  721,  721,  764,  764,  679,  680,  681,  690,
-      722,  722,  419,  723,  723,  681,  690,  914,  721,  721,
-
-      721,  721,  912,  729,  729,  911,  722,  722,  722,  722,
-      909,  419,  729,  679,  680,  908,  419,  419,  438,  438,
-      438,  438, 1022,  690, 1022,  681,  907,  438,  438,  438,
-      724,  724,  904,  754,  754,  903,  723,  754,  902,  741,
-      741,  438,  438,  438,  438,  438,  438,  440,  440,  901,
-      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
-      440,  440,  984,  440,  440,  730,  730,  769,  769,  440,
-      440,  440,  440,  724,  730,  739,  739,  725,  725,  740,
-      740,  725,  741,  770,  770,  900,  440,  757,  757,  839,
-      839,  739,  739,  739,  739,  740,  740,  740,  740,  747,
-
-      747,  860,  860,  757,  757,  757,  757,  984,  747,  898,
-      440,  440,  441,  441,  725,  441,  441,  441,  441,  441,
-      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
-      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
-      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
-      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
-      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
-      441,  441,  441,  441,  441,  441,  441,  442,  442,  897,
-      442,  442,  442,  442,  442,  442,  442,  442,  442,  442,
-      442,  442,  985,  442,  442,  742,  742,  748,  748,  442,
-
-      442,  442,  442,  979,  759,  759,  748,  760,  760,  726,
-      726,  731,  731,  726,  896,  731,  442,  732,  732,  743,
-      743,  732,  895,  743,  744,  744,  749,  749,  744, 1030,
-      749, 1030,  772,  772,  894,  442,  772,  985,  742,  893,
-      442,  442,  540,  540,  540,  540,  726,  759,  731,  979,
-      760,  540,  540,  540,  732,  845,  743,  775,  775,  775,
-      775,  744,  845,  749,  891,  540,  540,  540,  540,  540,
-      540,  544,  544,  890,  544,  544,  544,  544,  544,  544,
-      544,  544,  544,  544,  544,  544,  889,  544,  544,  888,
-      758,  758,  845,  544,  544,  544,  544,  776,  776,  776,
-
-      776,  750,  750,  765,  765,  750,  758,  758,  758,  758,
-      544,  886,  765,  766,  766,  861,  861,  862,  862,  864,
-      864,  885,  766,  865,  865,  866,  866,  868,  868,  869,
-      869,  870,  870,  884,  544,  544,  545,  545,  750,  545,
-      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
-      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
-      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
-      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
-      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
-      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
-
-      545,  558,  558,  558,  558,  874,  874,  883,  837,  882,
-      558,  558,  558,  761,  761,  837,  881,  761,  880,  762,
-      762,  879,  837,  762,  558,  558,  558,  558,  558,  558,
-      560,  560,  560,  560,  560,  560,  877,  560,  560,  560,
-      560,  560,  560,  560,  560,  986,  560,  560, 1059, 1059,
-      761,  921,  560,  560,  560,  560,  762,  837,  921,  918,
-      919,  973,  876,  938,  767,  767,  918,  919,  767,  560,
-     1060, 1060,  973,  918,  919,  920,  938,  920,  920,  973,
-      851,  921,  938,  971,  842,  971,  971, 1024, 1024, 1024,
-      986, 1024,  833,  560,  560,  561,  561,  561,  561,  561,
-
-      561,  767,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      570,  570,  969,  922,  970,  832,  969,  831,  970,  830,
-      922, 1061, 1061,  969,  829,  970,  570,  570,  570,  570,
-      969,  828,  970,  916,  834,  570,  570,  570,  768,  768,
-      916,  834,  768,  922,  987,  827,  826,  916,  834,  570,
-
-      570,  570,  570,  570,  570,  574,  574,  574,  574,  574,
-      574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-      916,  574,  574,  825,  836,  768,  834,  574,  574,  574,
-      574,  836, 1025, 1025, 1025, 1027, 1027, 1027,  836,  987,
-      824, 1026, 1026, 1026,  574, 1026, 1028, 1028, 1028,  823,
-     1028, 1029, 1029, 1029,  822,  819,  818,  816,  814,  812,
-      811,  809,  808,  836,  807,  806,  805,  804,  574,  574,
-      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-
-      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-      575,  575,  575,  575,  575,  584,  584,  803,  802,  801,
-      799,  798,  797,  796,  793,  791,  790,  789,  787,  782,
-      778,  584,  584,  584,  584,  777,  835,  774,  917,  756,
-      584,  584,  584,  835,  738,  917,  720,  718,  714,  713,
-      835,  708,  917,  707,  584,  584,  584,  584,  584,  584,
-      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
-      588,  588,  588,  588,  588,  917,  588,  588,  705,  703,
-
-      835,  698,  588,  588,  588,  588,  694,  693,  688,  687,
-      686,  685,  676,  675,  670,  666,  665,  664,  663,  588,
-      662,  661,  659,  658,  657,  656,  655,  654,  652,  651,
-      650,  649,  648,  647,  646,  645,  644,  642,  641,  640,
-      639,  638,  637,  588,  588,  589,  589,  589,  589,  589,
-      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
-      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
-      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
-      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
-      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
-
-      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
-      598,  598,  636,  635,  634,  633,  632,  630,  629,  628,
-      627,  626,  625,  624,  623,  622,  598,  598,  598,  598,
-      621,  614,  606,  605,  552,  598,  598,  598,  551,  548,
-      547,  546,  542,  534,  533,  530,  529,  528,  527,  598,
-      598,  598,  598,  598,  598,  602,  602,  602,  602,  602,
-      602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
-      522,  602,  602,  521,  520,  519,  508,  602,  602,  602,
-      602,  505,  502,  500,  499,  498,  497,  496,  495,  494,
-      493,  492,  491,  490,  602,  489,  488,  487,  485,  484,
-
-      483,  482,  474,  473,  472,  471,  470,  469,  468,  467,
-      466,  465,  464,  462,  461,  459,  458,  457,  602,  602,
-      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
-      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
-      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
-      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
-      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
-      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
-      603,  603,  603,  603,  603,  612,  612,  612,  612,  456,
-      455,  454,  453,  452,  612,  612,  612,  451,  432,  431,
-
-      427,  332,  331,  321,  320,  319,  307,  306,  612,  612,
-      612,  612,  612,  612,  616,  616,  302,  616,  616,  616,
-      616,  616,  616,  616,  616,  616,  616,  616,  616,  292,
-      616,  616,  289,  288,  284,  278,  616,  616,  616,  616,
-      277,  275,  274,  273,  271,  270,  248,  246,  245,  238,
-      237,  235,  229,  616,  228,  227,  219,  218,  217,  215,
-      210,  208,  207,  205,  204,  203,  193,  173,  168,  166,
-      117,  107,  102,   97,   92,   90,   81,  616,  616,  617,
-      617,   76,  617,  617,  617,  617,  617,  617,  617,  617,
-      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
-
-      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
-      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
-      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
-      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
-      617,  617,  617,  617,  702,  702,   65,  702,  702,  702,
-      702,  702,  702,  702,  702,  702,  702,  702,  702,   34,
-      702,  702,   32,   28,   23,    0,  702,  702,  702,  702,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  702,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,  702,  702,  704,
-      704,    0,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  717,  717,  717,  717,  717,  717,
-        0,  717,  717,  717,  717,  717,  717,  717,  717,    0,
-      717,  717,    0,    0,    0,    0,  717,  717,  717,  717,
+      161,  161,  161,  161, 1009,  161,  161,  350,  350,  369,
 
+      606,  161,  161,  161,  161,  365,  365,  365,  365,  351,
+      351,  373,  373,  350,  350,  350,  350,  542,  161, 1008,
+      373,  357,  357,  351,  161,  351,  351,  351,  351,  391,
+      391,  923,  357,  606,  357,  923,  351,  357,  357,  357,
+      357,  542,  161,  161,  171,  542,  171,  171,  171,  171,
+      370,  370,  351,  608,  370,  660,  171,  171,  374,  374,
+      375,  375,  970,  171,  378,  378,  171,  374,  381,  381,
+      171,  379,  379,  171,  393,  393,  375,  375,  375,  375,
+      970,  171,  396,  396,  381,  381,  608,  370,  660,  171,
+      174,  174, 1007,  174,  174,  174,  174,  174,  174,  174,
+
+      174,  174,  174,  174,  174,  917,  174,  174,  352,  352,
+      917,  378,  174,  174,  174,  174,  397,  397,  379,  385,
+      385,  382,  382,  385,  352,  352,  352,  352,  385,  174,
+      355,  355,  382,  860,  382,  352,  860,  382,  382,  382,
+      382,  389,  389,  389,  389,  920,  355,  355,  355,  355,
+      920,  352,  665,  174,  174,  175,  175,  355,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+     1005,  175,  175,  355,  376,  376, 1004,  175,  175,  175,
+      175,  390,  390,  390,  390,  665,  383,  383,  376, 1003,
+      376,  376,  376,  376,  175,  394,  394,  377,  377,  394,
+
+      175,  376,  383,  383,  383,  395,  395,  428,  428,  395,
+      430,  430,  430,  377,  377,  377,  377,  376,  175,  175,
+      311,  311,  311,  311,  377,  398,  398,  399,  399,  311,
+      311,  311,  394, 1002,  398,  436,  399,  436,  436, 1001,
+      377,  967,  395,  311,  311,  311,  311,  311,  311,  313,
+      313, 1000,  313,  313,  313,  313,  313,  313,  313,  313,
+      313,  313,  313,  313,  977,  313,  313,  380,  380,  403,
+      403,  313,  313,  313,  313,  406,  406,  470,  470,  400,
+      400,  529,  529,  380,  380,  380,  380,  967,  313,  407,
+      407,  406,  406,  999,  380,  400,  400,  400,  400,  996,
+
+      407,  437,  407,  437,  437,  407,  407,  407,  407,  977,
+      380,  995,  313,  313,  314,  314,  403,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  315,
+      315,  994,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  993,  315,  315,  401,  401,  688,
+
+      524,  315,  315,  315,  315,  408,  408,  524,  552,  402,
+      402,  401,  552,  401,  401,  401,  401,  552,  315,  404,
+      404,  408,  408,  408,  401,  402,  402,  402,  402,  410,
+      410,  524,  688,  410,  921,  524,  402,  315,  410,  921,
+      401,  991,  315,  315,  335,  335,  335,  335,  414,  414,
+      414,  414,  402,  335,  335,  335,  415,  415,  415,  415,
+      422,  422,  422,  422,  547,  547,  404,  335,  335,  335,
+      335,  335,  335,  337,  337,  337,  337,  337,  337,  989,
+      337,  337,  337,  337,  337,  337,  337,  337,  965,  337,
+      337,  405,  405,  601,  601,  337,  337,  337,  337,  965,
+
+      423,  988,  423,  423,  423,  423,  965,  405,  405,  405,
+      405,  924,  337,  423,  429,  924,  429,  987,  405,  429,
+      429,  429,  429,  438,  438,  438,  438,  676,  676,  423,
+      439,  439,  439,  439,  405,  986,  337,  337,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+
+      338,  338,  338,  339,  339,  339,  339,  339,  339,  985,
+      339,  339,  339,  339,  339,  339,  339,  339,  984,  339,
+      339,  424,  424,  424,  424,  339,  339,  339,  339,  473,
+      473,  473,  424,  427,  427,  427,  427,  440,  440,  440,
+      440,  983,  339,  925,  427,  511,  511,  925,  424,  441,
+      441,  441,  441,  471,  471,  471,  471,  442,  982,  442,
+      427,  339,  442,  442,  442,  442,  339,  339,  359,  359,
+      469,  469,  469,  469,  472,  472,  472,  472,  557,  557,
+      479,  469,  502,  981,  359,  359,  359,  359,  479,  502,
+      960,  479,  504,  359,  359,  359,  502,  469,  692,  504,
+
+      958,  511,  530,  530,  530,  530,  504,  359,  359,  359,
+      359,  359,  359,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  557,  361,
+      361,  692,  505,  506,  507,  361,  361,  361,  361,  505,
+      506,  507,  531,  531,  531,  531,  505,  506,  507,  532,
+      532,  532,  361,  517,  517,  517,  517,  517,  525,  957,
+      525,  699,  699,  525,  525,  525,  525,  548,  548,  548,
+      548,  550,  550,  550,  505,  956,  361,  361,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  362,  362,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  955,  363,
+      363,  720,  720,  509,  953,  363,  363,  363,  363,  503,
+      509,  556,  556,  508,  721,  721,  503,  509,  864,  510,
+      508,  864,  363,  503,  570,  570,  510,  508,  549,  549,
+      549,  549,  978,  510,  528,  528,  528,  528,  584,  584,
+
+     1023,  363, 1023,  670,  509,  528,  363,  363,  384,  384,
+      670,  508,  559,  559,  503,  508,  510,  670,  952,  556,
+      951,  528,  565,  565,  384,  384,  384,  384,  559,  559,
+      950,  565,  570,  384,  384,  384,  543,  978,  543,  571,
+      571,  543,  543,  543,  543,  968,  584,  384,  384,  384,
+      384,  384,  384,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  949,  386,
+      386,  546,  546,  546,  546,  386,  386,  386,  386,  604,
+      604,  604,  546,  555,  555,  948,  708,  560,  560,  571,
+      708,  968,  386,  926,  555,  708,  555,  926,  546,  555,
+
+      555,  555,  555,  560,  560,  560,  560,  597,  947,  597,
+      726,  726,  597,  597,  597,  597,  386,  386,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  388,  388,  388,  388,  388,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  388,  946,  388,
+
+      388,  558,  558,  579,  579,  388,  388,  388,  388,  562,
+      562,  944,  579,  561,  561,  593,  593,  558,  558,  558,
+      558,  772,  388,  943,  593,  562,  562,  562,  558,  561,
+      561,  561,  561,  564,  564,  566,  566,  564,  671,  566,
+      942,  388,  569,  569,  558,  671,  388,  388,  409,  409,
+      727,  727,  671,  569,  772,  569,  738,  738,  569,  569,
+      569,  569,  573,  573,  409,  409,  409,  409,  576,  576,
+      564,  941,  566,  409,  409,  409,  578,  578,  573,  573,
+      578,  585,  585,  940,  576,  576,  576,  409,  409,  409,
+      409,  409,  409,  411,  411,  411,  411,  411,  411,  411,
+
+      411,  411,  411,  411,  411,  411,  411,  411,  979,  411,
+      411,  572,  572,  578,  682,  411,  411,  411,  411,  587,
+      587,  682,  776,  574,  574,  739,  739,  572,  572,  572,
+      572,  585,  411,  575,  575,  587,  587,  939,  572,  574,
+      574,  574,  574,  602,  602,  602,  602,  938,  682,  575,
+      575,  575,  575,  979,  572,  776,  411,  411,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  412,  412,  413,  413,  413,  413,  413,  413,  413,
+      413,  413,  413,  413,  413,  413,  413,  413,  937,  413,
+      413,  603,  603,  603,  603,  413,  413,  413,  413,  936,
+      583,  583,  744,  744,  935,  580,  580,  586,  586,  580,
+      934,  583,  413,  583,  745,  745,  583,  583,  583,  583,
+      722,  722,  933,  586,  586,  586,  586,  588,  588,  722,
+      932,  413,  756,  756,  586,  930,  413,  413,  431,  431,
+      431,  431,  580,  588,  588,  588,  588,  431,  431,  431,
+
+      586,  592,  592,  683,  971,  592,  611,  611,  611,  611,
+      683,  431,  431,  431,  431,  431,  431,  433,  433,  908,
+      433,  433,  433,  433,  433,  433,  433,  433,  433,  433,
+      433,  433,  972,  433,  433,  589,  589,  683,  592,  433,
+      433,  433,  433,  590,  590,  907,  600,  600,  600,  600,
+      971,  589,  589,  589,  589,  868,  433,  600,  868,  590,
+      590,  590,  612,  612,  612,  612,  684,  684,  684,  684,
+      723,  723,  905,  600,  685,  685,  685,  685,  972,  723,
+      433,  433,  434,  434,  904,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  435,  435,  902,
+      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
+      435,  435,  901,  435,  435,  757,  757,  672,  673,  435,
+      435,  435,  435,  900,  672,  673,  762,  762,  675,  594,
+      594,  672,  673,  594,  674,  675,  435,  704,  704,  704,
+      704,  674,  675,  705,  705,  705,  705,  897,  674,  729,
+
+      729,  714,  714,  729,  896,  435,  763,  763,  672,  673,
+      435,  435,  533,  533,  533,  533,  594,  714,  714,  714,
+      714,  533,  533,  533,  716,  716,  980,  675,  674,  717,
+      717,  768,  768,  768,  768,  533,  533,  533,  533,  533,
+      533,  537,  537,  895,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  894,  537,  537,  715,
+      715,  740,  740,  537,  537,  537,  537,  716,  732,  732,
+      740,  980,  717,  733,  733,  715,  715,  715,  715,  927,
+      537,  832,  832,  927,  732,  732,  732,  732,  893,  733,
+      733,  733,  733,  741,  741,  747,  747,  765,  765,  747,
+
+      891,  765,  741,  890,  537,  537,  538,  538,  889,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  551,  551,  551,  551,  734,  734,  888,  735,  735,
+      551,  551,  551,  718,  718,  853,  853,  718,  887,  719,
+      719,  854,  854,  719,  551,  551,  551,  551,  551,  551,
+
+      553,  553,  553,  553,  553,  553,  886,  553,  553,  553,
+      553,  553,  553,  553,  553,  803,  553,  553,  734,  884,
+      718,  735,  553,  553,  553,  553,  719,  750,  750,  928,
+      803,  751,  751,  928,  724,  724,  803,  883,  724,  553,
+      855,  855,  882,  750,  750,  750,  750,  751,  751,  751,
+      751,  758,  758,  759,  759,  769,  769,  769,  769,  881,
+      758,  879,  759,  553,  553,  554,  554,  554,  554,  554,
+      554,  724,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      563,  563,  837,  857,  857,  858,  858,  859,  859,  837,
+      861,  861,  862,  862,  863,  863,  563,  563,  563,  563,
+      752,  752,  878,  753,  753,  563,  563,  563,  725,  725,
+      867,  867,  725,  877,  736,  736,  876,  837,  736,  563,
+      563,  563,  563,  563,  563,  567,  567,  567,  567,  567,
+      567,  567,  567,  567,  567,  567,  567,  567,  567,  567,
+      787,  567,  567,  752,  875,  725,  753,  567,  567,  567,
+
+      567,  736,  929,  787,  911,  912,  929,  931,  874,  787,
+      873,  911,  912,  913,  567,  913,  913,  962,  911,  912,
+      931,  962,  964,  872,  964,  964,  931,  870,  962, 1017,
+     1017, 1017,  869, 1017,  844,  962, 1052, 1052,  567,  567,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+
+      568,  568,  568,  568,  568,  577,  577,  835,  914,  963,
+      826,  915,  825,  963,  824,  914, 1053, 1053,  915,  823,
+      963,  577,  577,  577,  577, 1054, 1054,  963,  830,  822,
+      577,  577,  577,  737,  737,  830,  821,  737,  914,  742,
+      742,  915,  830,  742,  577,  577,  577,  577,  577,  577,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  820,  581,  581,  966,  819,
+      737,  829,  581,  581,  581,  581,  742,  830,  829,  966,
+     1018, 1018, 1018,  818,  817,  829,  966,  816,  815,  581,
+     1019, 1019, 1019,  812, 1019, 1020, 1020, 1020, 1021, 1021,
+
+     1021,  811, 1021, 1022, 1022, 1022,  809,  807,  805,  804,
+      829,  802,  801,  581,  581,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      591,  591,  800,  799,  798,  797,  796,  795,  794,  792,
+      791,  790,  789,  786,  784,  783,  591,  591,  591,  591,
+
+      782,  780,  775,  838,  771,  591,  591,  591,  743,  743,
+      838,  770,  743,  767,  754,  754,  749,  731,  754,  591,
+      591,  591,  591,  591,  591,  595,  595,  595,  595,  595,
+      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
+      838,  595,  595,  713,  711,  743,  909,  595,  595,  595,
+      595,  754,  707,  909,  706,  701,  700,  698,  696,  691,
+      909,  687,  686,  681,  595,  680,  679,  678,  669,  668,
+      663,  659,  658,  657,  656,  655,  654,  652,  651,  650,
+      649,  648,  647,  909,  645,  644,  643,  642,  595,  595,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  605,  605,  605,  605,  641,
+      640,  639,  910,  638,  605,  605,  605,  755,  755,  910,
+      637,  755,  635,  760,  760,  634,  910,  760,  605,  605,
+      605,  605,  605,  605,  609,  609,  633,  609,  609,  609,
+      609,  609,  609,  609,  609,  609,  609,  609,  609,  910,
+
+      609,  609,  632,  631,  755,  630,  609,  609,  609,  609,
+      760,  629,  628,  627,  761,  761,  626,  625,  761,  623,
+      622,  621,  620,  609,  619,  618,  617,  616,  615,  614,
+      607,  599,  598,  545,  544,  541,  540,  539,  535,  527,
+      526,  523,  522,  521,  520,  515,  514,  609,  609,  610,
+      610,  761,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  695,  695,  513,  695,  695,  695,
+      695,  695,  695,  695,  695,  695,  695,  695,  695,  512,
+      695,  695,  501,  827,  498,  495,  695,  695,  695,  695,
+      827,  493,  492,  491,  490,  489,  488,  827,  487,  486,
+      485,  484,  483,  695,  482,  481,  480,  478,  477,  476,
+      475,  467,  466,  465,  464,  463,  462,  461,  460,  459,
+      458,  457,  455,  454,  452,  827,  451,  695,  695,  697,
+      697,  450,  697,  697,  697,  697,  697,  697,  697,  697,
+      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
+
+      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
+      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
+      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
+      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
+      697,  697,  697,  697,  710,  710,  710,  710,  710,  710,
+      449,  710,  710,  710,  710,  710,  710,  710,  710,  448,
+      710,  710,  447,  446,  445,  444,  710,  710,  710,  710,
+      426,  828,  425,  421,  330,  329,  319,  318,  828,  317,
+      306,  305,  301,  710,  291,  828,  288,  287,  283,  277,
+      276,  274,  273,  272,  270,  269,  247,  245,  244,  237,
+
+      236,  234,  228,  227,  226,  219,  218,  710,  710,  712,
+      712,  712,  712,  712,  712,  828,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  217,
+      728,  728,  215,  210,  208,  207,  728,  728,  728,  728,
+
+      205,  204,  203,  193,  173,  168,  166,  117,  107,  102,
+       97,   92,   90,  728,   81,   76,   65,   34,   32,   28,
+       23,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  728,  728,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+
+      730,  730,  730,  730,  746,  746,  746,  746,  746,  746,
+      746,  746,  746,  746,  746,  746,  746,  746,  746,    0,
+      746,  746,    0,    0,    0,    0,  746,  746,  746,  746,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  717,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  717,  717,  719,
-      719,  719,  719,  719,  719,    0,  719,  719,  719,  719,
-      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
-      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
-      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
-      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
-      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
-
-      719,  719,  719,  719,  735,  735,  735,  735,  735,  735,
-      735,  735,  735,  735,  735,  735,  735,  735,  735,    0,
-      735,  735,    0,    0,    0,    0,  735,  735,  735,  735,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  735,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  746,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  735,  735,  737,
-      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
-      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
-      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
-
-      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
-      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
-      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
-      737,  737,  737,  737,  753,  753,  753,  753,  753,  753,
-      753,  753,  753,  753,  753,  753,  753,  753,  753,    0,
-      753,  753,    0,    0,    0,    0,  753,  753,  753,  753,
+        0,    0,    0,    0,    0,    0,    0,  746,  746,  748,
+      748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
+
+      748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  764,  764,  764,  764,  764,  764,
+      764,  764,  764,  764,  764,  764,  764,  764,  764,    0,
+      764,  764,    0,    0,    0,    0,  764,  764,  764,  764,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  753,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  764,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  753,  753,  755,
+        0,    0,    0,    0,    0,    0,    0,  764,  764,  766,
 
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  771,    0,
-      771,  771,    0,    0,    0,    0,  771,  771,  771,  771,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
+      766,  766,  766,  766,  779,  779,    0,  779,  779,  779,
+      779,  779,  779,  779,  779,  779,  779,  779,  779,    0,
+      779,  779,    0,    0,    0,    0,  779,  779,  779,  779,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,  771,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  779,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  771,  771,  773,
-      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
-      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
-      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
-      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
-      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
-      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
-      773,  773,  773,  773,  786,  786,    0,  786,  786,  786,
+        0,    0,    0,    0,    0,    0,    0,  779,  779,  781,
+      781,    0,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  841,  841,    0,  841,  841,  841,
+
+      841,  841,  841,  841,  841,  841,  841,  841,  841,  841,
+      841,  841,  841,  841,  841,  841,  841,  841,  841,  841,
+      841,  841,  841,  841,  841,  841,  841,  841,  841,  841,
+      841,  841,  841,  841,  841,  841,  841,  841,  841,  841,
+      841,  841,  841,  841,  841,  841,  841,  841,  841,  841,
+      841,  841,  841,  841,  841,  841,  841,  841,  841,  851,
+      851,  851,  851,  851,  851,    0,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
+      851,  851,  851,  851, 1088,    0, 1088, 1088, 1088, 1088,
+     1088, 1088, 1088, 1088, 1088, 1089,    0,    0, 1089, 1089,
+     1090,    0, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+     1090, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1092,
+     1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
+     1093, 1093, 1093, 1093, 1094,    0, 1094,    0, 1094, 1094,
+     1094, 1094, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1096,
+        0, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
 
-      786,  786,  786,  786,  786,  786,  786,  786,  786,    0,
-      786,  786,    0,    0,    0,    0,  786,  786,  786,  786,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  786,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  786,  786,  788,
-      788,    0,  788,  788,  788,  788,  788,  788,  788,  788,
-      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
-      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
-      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
-
-      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
-      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
-      788,  788,  788,  788,  848,  848,    0,  848,  848,  848,
-      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
-      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
-      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
-      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
-      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
-      848,  848,  848,  848,  848,  848,  848,  848,  848,  858,
-      858,  858,  858,  858,  858,    0,  858,  858,  858,  858,
-
-      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
-      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
-      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
-      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
-      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
-      858,  858,  858,  858, 1095,    0, 1095, 1095, 1095, 1095,
-     1095, 1095, 1095, 1095, 1095, 1096,    0,    0, 1096, 1096,
      1097,    0, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097,
-     1097, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099,
-     1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
-
-     1100, 1100, 1100, 1100, 1101,    0, 1101,    0, 1101, 1101,
-     1101, 1101, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1103,
-        0, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1104,    0, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
-     1104, 1105,    0, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
-     1105, 1105, 1106,    0, 1106, 1106, 1106, 1106, 1106, 1106,
-     1106, 1106, 1106, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
-     1108, 1108,    0, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
-     1108, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1110, 1110,    0, 1110, 1110, 1110, 1110, 1110,
-
-     1110, 1110, 1110, 1111, 1111, 1111, 1111, 1111, 1111, 1111,
-     1111, 1111, 1111, 1111, 1112, 1112, 1112, 1112, 1112, 1112,
-     1112, 1112, 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113,
-     1113, 1113, 1113, 1113, 1113, 1113, 1114, 1114, 1114, 1114,
-     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1115, 1115, 1115,
-     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1116, 1116,
-     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1117,
-     1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
-     1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
-     1118, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
-
-     1119, 1119, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
-     1120, 1120, 1120, 1121, 1121, 1121, 1121, 1121, 1121, 1121,
-     1121, 1121, 1121, 1121, 1122, 1122, 1122, 1122, 1122, 1122,
-     1122, 1122, 1122, 1122, 1122, 1123,    0, 1123, 1123, 1123,
-     1123, 1123, 1123, 1123, 1123, 1123, 1124,    0, 1124, 1124,
-     1124, 1124, 1124, 1124, 1124, 1124, 1124, 1125,    0, 1125,
-     1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1126,    0,
-     1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1127,
-        0,    0, 1127, 1127, 1128,    0, 1128, 1128, 1128, 1128,
-     1128, 1128, 1128, 1128, 1128, 1129,    0,    0, 1129, 1129,
-
-     1129, 1130,    0,    0, 1130, 1131, 1131, 1131, 1131, 1131,
-     1131, 1131, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
-     1133,    0,    0,    0,    0, 1133, 1133, 1133, 1133, 1134,
-     1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
-     1135, 1135, 1135, 1135, 1135, 1135, 1136, 1136, 1136, 1136,
-     1137,    0, 1137, 1137, 1137, 1137, 1138, 1138, 1138, 1138,
-     1138, 1138, 1138, 1139,    0, 1139, 1139, 1139, 1139, 1139,
-     1139, 1139, 1139, 1139, 1140,    0, 1140, 1140, 1140, 1140,
-     1140, 1140, 1140, 1140, 1140, 1141,    0, 1141, 1141, 1141,
-     1141, 1141, 1141, 1141, 1141, 1141, 1142,    0, 1142, 1142,
-
-     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1143, 1143,    0,
-     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1144, 1144,
-     1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1145,
-     1145,    0, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
-     1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
-     1146, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
-     1147, 1147, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
-     1148, 1148, 1148, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
-     1149, 1149, 1149, 1149, 1150, 1150, 1150, 1150, 1150, 1150,
-     1150, 1150, 1150, 1150, 1150, 1151, 1151, 1151, 1151, 1151,
-
-     1151, 1151, 1151, 1151, 1151, 1151, 1152, 1152, 1152, 1152,
-     1152, 1152, 1152, 1152, 1152, 1152, 1152, 1153, 1153, 1153,
-     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1154, 1154,
-     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1155,
-     1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
-     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
-     1156, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
-     1157, 1157, 1158,    0, 1158, 1158, 1158, 1158, 1158, 1158,
-     1158, 1158, 1158, 1159,    0, 1159, 1159, 1159, 1159, 1159,
-     1159, 1159, 1159, 1159, 1160,    0, 1160, 1160, 1160, 1160,
-
-     1160, 1160, 1160, 1160, 1160, 1161,    0, 1161, 1161, 1161,
-     1161, 1161, 1161, 1161, 1161, 1161, 1162,    0,    0, 1162,
-     1162, 1163,    0,    0, 1163, 1163, 1163, 1164,    0,    0,
-     1164, 1165,    0, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
-     1165, 1165, 1166,    0, 1166, 1166, 1166, 1166, 1166, 1166,
-     1166, 1166, 1166, 1167,    0, 1167, 1167, 1167, 1167, 1167,
-     1167, 1167, 1167, 1167, 1168, 1168, 1168, 1168, 1168, 1168,
-     1168, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,
-     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
-     1171, 1171, 1171, 1171, 1171, 1171, 1172,    0, 1172, 1172,
-
-     1172, 1172, 1173,    0, 1173, 1173, 1173, 1173, 1174, 1174,
-     1174, 1174, 1174, 1174, 1174, 1175,    0, 1175, 1175, 1175,
-     1175, 1175, 1175, 1175, 1175, 1175, 1176,    0, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177,    0, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1178,    0,
-     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1179,
-        0, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
-     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1181, 1181,    0,
-     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1182, 1182,
-     1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1183,
-
-     1183,    0, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
-     1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
-     1184, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
-     1185, 1185, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
-     1186, 1186, 1186, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
-     1187, 1187, 1187, 1187, 1188, 1188, 1188, 1188, 1188, 1188,
-     1188, 1188, 1188, 1188, 1188, 1189, 1189, 1189, 1189, 1189,
-     1189, 1189, 1189, 1189, 1189, 1189, 1190, 1190, 1190, 1190,
-     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1191, 1191,
-     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1192, 1192,
-
-     1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1193,
-     1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
-     1195, 1195, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
-     1196, 1196, 1196, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
-     1197, 1197, 1197, 1197, 1198, 1198, 1198, 1198, 1198, 1198,
-     1198, 1198, 1198, 1198, 1198, 1199,    0, 1199, 1199, 1199,
-     1199, 1199, 1199, 1199, 1199, 1199, 1200,    0, 1200, 1200,
-     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1201,    0, 1201,
-
-     1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1202,    0,
-     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1203,
-        0, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
-     1204,    0,    0, 1204, 1204, 1204, 1205,    0, 1205, 1205,
-     1205, 1205, 1205, 1205, 1205, 1205, 1205, 1206,    0, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1207,    0,
-     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1208,
-     1208, 1208, 1208, 1208, 1208, 1208, 1209, 1209, 1209, 1209,
-     1209, 1209, 1209, 1209, 1210, 1210, 1210, 1210, 1210, 1210,
-     1210, 1210, 1210, 1210, 1210, 1211,    0, 1211, 1211, 1211,
-
-     1211, 1212,    0, 1212, 1212, 1212, 1212, 1213, 1213, 1213,
-     1213, 1213, 1213, 1213, 1214,    0, 1214, 1214, 1214, 1214,
-     1214, 1214, 1214, 1214, 1214, 1215,    0, 1215, 1215, 1215,
-     1215, 1215, 1215, 1215, 1215, 1215, 1216,    0, 1216, 1216,
-     1216, 1216, 1216, 1216, 1216, 1216, 1216, 1217,    0, 1217,
-     1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1218,    0,
-     1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1219,
-     1219, 1219, 1219, 1219, 1219, 1219, 1220, 1220,    0, 1220,
-     1220, 1220, 1220, 1220, 1220, 1220, 1220, 1221, 1221, 1221,
-     1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1222, 1222,
-
-        0, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1223,
-     1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
-     1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224,
-     1224, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225,
-     1225, 1225, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
-     1226, 1226, 1226, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
-     1227, 1227, 1227, 1227, 1228, 1228, 1228, 1228, 1228, 1228,
-     1228, 1228, 1228, 1228, 1228, 1229, 1229, 1229, 1229, 1229,
-     1229, 1229, 1229, 1229, 1229, 1229, 1230, 1230, 1230, 1230,
-     1230, 1230, 1230, 1230, 1230, 1230, 1230, 1231, 1231, 1231,
-
-     1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1232, 1232,
-     1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1233,
-     1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
-     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
-     1234, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
-     1235, 1235, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
-     1236, 1236, 1236, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
-     1237, 1237, 1237, 1237, 1238,    0, 1238, 1238, 1238, 1238,
-     1238, 1238, 1238, 1238, 1238, 1239,    0, 1239, 1239, 1239,
-     1239, 1239, 1239, 1239, 1239, 1239, 1240,    0, 1240, 1240,
-
+     1097, 1098,    0, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+     1098, 1098, 1099,    0, 1099, 1099, 1099, 1099, 1099, 1099,
+     1099, 1099, 1099, 1100, 1100, 1100, 1100, 1100, 1100, 1100,
+     1101, 1101,    0, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
+     1101, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
+     1102, 1102, 1103, 1103,    0, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
+     1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105, 1105,
+     1105, 1105, 1105, 1105, 1105, 1106, 1106, 1106, 1106, 1106,
+
+     1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107, 1107,
+     1107, 1107, 1107, 1107, 1107, 1107, 1107, 1108, 1108, 1108,
+     1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111,
+     1111, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
+     1112, 1112, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+     1113, 1113, 1113, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+     1114, 1114, 1114, 1114, 1115, 1115, 1115, 1115, 1115, 1115,
+
+     1115, 1115, 1115, 1115, 1115, 1116,    0, 1116, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1117,    0, 1117, 1117,
+     1117, 1117, 1117, 1117, 1117, 1117, 1117, 1118,    0, 1118,
+     1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1119,    0,
+     1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1120,
+        0,    0, 1120, 1120, 1121,    0, 1121, 1121, 1121, 1121,
+     1121, 1121, 1121, 1121, 1121, 1122,    0,    0, 1122, 1122,
+     1122, 1123,    0,    0, 1123, 1124, 1124, 1124, 1124, 1124,
+     1124, 1124, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
+     1126,    0,    0,    0,    0, 1126, 1126, 1126, 1126, 1127,
+
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1128, 1128, 1128, 1128, 1128, 1128, 1129, 1129, 1129, 1129,
+     1130,    0, 1130, 1130, 1130, 1130, 1131, 1131, 1131, 1131,
+     1131, 1131, 1131, 1132,    0, 1132, 1132, 1132, 1132, 1132,
+     1132, 1132, 1132, 1132, 1133,    0, 1133, 1133, 1133, 1133,
+     1133, 1133, 1133, 1133, 1133, 1134,    0, 1134, 1134, 1134,
+     1134, 1134, 1134, 1134, 1134, 1134, 1135,    0, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1136, 1136,    0,
+     1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1137, 1137,
+     1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1138,
+
+     1138,    0, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
+     1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
+     1140, 1140, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
+     1141, 1141, 1141, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1144, 1144, 1144, 1144, 1144,
+     1144, 1144, 1144, 1144, 1144, 1144, 1145, 1145, 1145, 1145,
+     1145, 1145, 1145, 1145, 1145, 1145, 1145, 1146, 1146, 1146,
+     1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1147, 1147,
+
+     1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
+     1150, 1150, 1151,    0, 1151, 1151, 1151, 1151, 1151, 1151,
+     1151, 1151, 1151, 1152,    0, 1152, 1152, 1152, 1152, 1152,
+     1152, 1152, 1152, 1152, 1153,    0, 1153, 1153, 1153, 1153,
+     1153, 1153, 1153, 1153, 1153, 1154,    0, 1154, 1154, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1155,    0,    0, 1155,
+     1155, 1156,    0,    0, 1156, 1156, 1156, 1157,    0,    0,
+
+     1157, 1158,    0, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+     1158, 1158, 1159,    0, 1159, 1159, 1159, 1159, 1159, 1159,
+     1159, 1159, 1159, 1160,    0, 1160, 1160, 1160, 1160, 1160,
+     1160, 1160, 1160, 1160, 1161, 1161, 1161, 1161, 1161, 1161,
+     1161, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1163,
+     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
+     1164, 1164, 1164, 1164, 1164, 1164, 1165,    0, 1165, 1165,
+     1165, 1165, 1166,    0, 1166, 1166, 1166, 1166, 1167, 1167,
+     1167, 1167, 1167, 1167, 1167, 1168,    0, 1168, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1169,    0, 1169, 1169,
+
+     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,    0, 1170,
+     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1171,    0,
+     1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1172,
+        0, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
+     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1174, 1174,    0,
+     1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1175, 1175,
+     1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1176,
+     1176,    0, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+     1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+
+     1178, 1178, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+     1179, 1179, 1179, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+     1180, 1180, 1180, 1180, 1181, 1181, 1181, 1181, 1181, 1181,
+     1181, 1181, 1181, 1181, 1181, 1182, 1182, 1182, 1182, 1182,
+     1182, 1182, 1182, 1182, 1182, 1182, 1183, 1183, 1183, 1183,
+     1183, 1183, 1183, 1183, 1183, 1183, 1183, 1184, 1184, 1184,
+     1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1185, 1185,
+     1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1186,
+     1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
+     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+
+     1187, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+     1188, 1188, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189,
+     1189, 1189, 1189, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1192,    0, 1192, 1192, 1192,
+     1192, 1192, 1192, 1192, 1192, 1192, 1193,    0, 1193, 1193,
+     1193, 1193, 1193, 1193, 1193, 1193, 1193, 1194,    0, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1195,    0,
+     1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1196,
+        0, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+
+     1197,    0,    0, 1197, 1197, 1197, 1198,    0, 1198, 1198,
+     1198, 1198, 1198, 1198, 1198, 1198, 1198, 1199,    0, 1199,
+     1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1200,    0,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1201,
+     1201, 1201, 1201, 1201, 1201, 1201, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1203, 1203, 1203, 1203, 1203, 1203,
+     1203, 1203, 1203, 1203, 1203, 1204,    0, 1204, 1204, 1204,
+     1204, 1205,    0, 1205, 1205, 1205, 1205, 1206, 1206, 1206,
+     1206, 1206, 1206, 1206, 1207,    0, 1207, 1207, 1207, 1207,
+     1207, 1207, 1207, 1207, 1207, 1208,    0, 1208, 1208, 1208,
+
+     1208, 1208, 1208, 1208, 1208, 1208, 1209,    0, 1209, 1209,
+     1209, 1209, 1209, 1209, 1209, 1209, 1209, 1210,    0, 1210,
+     1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1211,    0,
+     1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1212,
+     1212, 1212, 1212, 1212, 1212, 1212, 1213, 1213,    0, 1213,
+     1213, 1213, 1213, 1213, 1213, 1213, 1213, 1214, 1214, 1214,
+     1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1215, 1215,
+        0, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1216,
+     1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
+     1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+
+     1217, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
+     1218, 1218, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
+     1219, 1219, 1219, 1220, 1220, 1220, 1220, 1220, 1220, 1220,
+     1220, 1220, 1220, 1220, 1221, 1221, 1221, 1221, 1221, 1221,
+     1221, 1221, 1221, 1221, 1221, 1222, 1222, 1222, 1222, 1222,
+     1222, 1222, 1222, 1222, 1222, 1222, 1223, 1223, 1223, 1223,
+     1223, 1223, 1223, 1223, 1223, 1223, 1223, 1224, 1224, 1224,
+     1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1225, 1225,
+     1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1226,
+     1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
+
+     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
+     1227, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
+     1228, 1228, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
+     1229, 1229, 1229, 1230, 1230, 1230, 1230, 1230, 1230, 1230,
+     1230, 1230, 1230, 1230, 1231,    0, 1231, 1231, 1231, 1231,
+     1231, 1231, 1231, 1231, 1231, 1232,    0, 1232, 1232, 1232,
+     1232, 1232, 1232, 1232, 1232, 1232, 1233,    0, 1233, 1233,
+     1233, 1233, 1233, 1233, 1233, 1233, 1233, 1234,    0, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1235,    0,
+     1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1236,
+
+        0,    0, 1236, 1236, 1236, 1237, 1237, 1237, 1237, 1237,
+     1237, 1237, 1237, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
+     1238, 1238, 1238, 1238, 1239,    0, 1239, 1239, 1239, 1239,
      1240, 1240, 1240, 1240, 1240, 1240, 1240, 1241,    0, 1241,
-     1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1242,    0,
-     1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1243,
-        0,    0, 1243, 1243, 1243, 1244, 1244, 1244, 1244, 1244,
-     1244, 1244, 1244, 1245, 1245, 1245, 1245, 1245, 1245, 1245,
-     1245, 1245, 1245, 1245, 1246,    0, 1246, 1246, 1246, 1246,
-     1247, 1247, 1247, 1247, 1247, 1247, 1247, 1248,    0, 1248,
-     1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1249, 1249,
-     1249, 1249, 1249, 1249, 1249, 1250, 1250,    0, 1250, 1250,
-     1250, 1250, 1250, 1250, 1250, 1250, 1094, 1094, 1094, 1094,
-
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094
+     1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1242, 1242,
+     1242, 1242, 1242, 1242, 1242, 1243, 1243,    0, 1243, 1243,
+     1243, 1243, 1243, 1243, 1243, 1243, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[149] =
+static yyconst flex_int32_t yy_rule_can_match_eol[148] =
     {   0,
 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -2432,8 +2402,8 @@
     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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -2466,7 +2436,6 @@
 #include "imc.h"
 #include "parser.h"
 
-// typedef struct yyguts_t       yyguts_t;
 typedef struct parser_state_t parser_state_t;
 
 /* parser state structure
@@ -2545,7 +2514,7 @@
 
 
 
-#line 2549 "compilers/imcc/imclexer.c"
+#line 2518 "compilers/imcc/imclexer.c"
 
 #define INITIAL 0
 #define emit 1
@@ -2785,7 +2754,7 @@
 	register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 157 "compilers/imcc/imcc.l"
+#line 154 "compilers/imcc/imcc.l"
 
         /* for emacs "*/
         if (IMCC_INFO(interp)->expect_pasm == 1 && !IMCC_INFO(interp)->in_pod) {
@@ -2804,7 +2773,7 @@
             return 0;
         }
 
-#line 2808 "compilers/imcc/imclexer.c"
+#line 2777 "compilers/imcc/imclexer.c"
 
 	if ( !yyg->yy_init )
 		{
@@ -2858,13 +2827,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 1095 )
+				if ( yy_current_state >= 1088 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 1094 );
+		while ( yy_current_state != 1087 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -2898,13 +2867,13 @@
 
 case 1:
 YY_RULE_SETUP
-#line 175 "compilers/imcc/imcc.l"
+#line 172 "compilers/imcc/imcc.l"
 { SET_LINE_NUMBER; }
 	YY_BREAK
 case 2:
 /* rule 2 can match eol */
 YY_RULE_SETUP
-#line 177 "compilers/imcc/imcc.l"
+#line 174 "compilers/imcc/imcc.l"
 {
             SET_LINE_NUMBER;
             IMCC_INFO(interp)->frames->heredoc_rest = mem_sys_strdup(yytext);
@@ -2914,7 +2883,7 @@
 case 3:
 /* rule 3 can match eol */
 YY_RULE_SETUP
-#line 183 "compilers/imcc/imcc.l"
+#line 180 "compilers/imcc/imcc.l"
 {
         /* heredocs have highest priority
          * arrange them before all wildcard state matches */
@@ -2930,7 +2899,7 @@
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 196 "compilers/imcc/imcc.l"
+#line 193 "compilers/imcc/imcc.l"
 {
         SET_LINE_NUMBER;
         /* Are we at the end of the heredoc? */
@@ -2955,8 +2924,6 @@
             yy_pop_state(yyscanner);
             yy_scan_string(IMCC_INFO(interp)->frames->heredoc_rest,yyscanner);
 
-            /* not sure we need this decrement; more testing needed */
-            IMCC_INFO(interp)->line--;
             return STRINGC;
         }
         else {
@@ -2973,7 +2940,7 @@
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
-#line 235 "compilers/imcc/imcc.l"
+#line 230 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
         yy_push_state(cmt3, yyscanner);
@@ -2986,7 +2953,7 @@
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 245 "compilers/imcc/imcc.l"
+#line 240 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
         yy_push_state(cmt4, yyscanner);
@@ -2994,17 +2961,17 @@
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 250 "compilers/imcc/imcc.l"
+#line 245 "compilers/imcc/imcc.l"
 { yy_push_state(cmt2, yyscanner); }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 252 "compilers/imcc/imcc.l"
+#line 247 "compilers/imcc/imcc.l"
 { yy_push_state(cmt1, yyscanner);  }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 254 "compilers/imcc/imcc.l"
+#line 249 "compilers/imcc/imcc.l"
 {
         yylineno = IMCC_INFO(interp)->line = atoi(yytext);
         yy_pop_state(yyscanner);
@@ -3015,7 +2982,7 @@
 case 10:
 /* rule 10 can match eol */
 YY_RULE_SETUP
-#line 261 "compilers/imcc/imcc.l"
+#line 256 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
     }
@@ -3023,7 +2990,7 @@
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 265 "compilers/imcc/imcc.l"
+#line 260 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->expect_pasm == 2)
             BEGIN(INITIAL);
@@ -3035,7 +3002,7 @@
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 274 "compilers/imcc/imcc.l"
+#line 269 "compilers/imcc/imcc.l"
 {
         yy_push_state(cmt5, yyscanner);
     }
@@ -3043,7 +3010,7 @@
 case 13:
 /* rule 13 can match eol */
 YY_RULE_SETUP
-#line 278 "compilers/imcc/imcc.l"
+#line 273 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->expect_pasm == 2)
             BEGIN(INITIAL);
@@ -3058,7 +3025,7 @@
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
-#line 290 "compilers/imcc/imcc.l"
+#line 285 "compilers/imcc/imcc.l"
 {
     /* this is a stand-alone =cut, but we're not in POD mode, so ignore.  */
     SET_LINE_NUMBER;
@@ -3067,7 +3034,7 @@
 case 15:
 /* rule 15 can match eol */
 YY_RULE_SETUP
-#line 295 "compilers/imcc/imcc.l"
+#line 290 "compilers/imcc/imcc.l"
 {
         SET_LINE_NUMBER;
         IMCC_INFO(interp)->in_pod = 1;
@@ -3077,7 +3044,7 @@
 case 16:
 /* rule 16 can match eol */
 YY_RULE_SETUP
-#line 301 "compilers/imcc/imcc.l"
+#line 296 "compilers/imcc/imcc.l"
 {
         SET_LINE_NUMBER;
         IMCC_INFO(interp)->in_pod = 0;
@@ -3086,478 +3053,478 @@
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 307 "compilers/imcc/imcc.l"
+#line 302 "compilers/imcc/imcc.l"
 { SET_LINE_NUMBER; }
 	YY_BREAK
 case 18:
 /* rule 18 can match eol */
 YY_RULE_SETUP
-#line 309 "compilers/imcc/imcc.l"
+#line 304 "compilers/imcc/imcc.l"
 { /* ignore */ }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 311 "compilers/imcc/imcc.l"
+#line 306 "compilers/imcc/imcc.l"
 return TK_LINE;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 312 "compilers/imcc/imcc.l"
+#line 307 "compilers/imcc/imcc.l"
 return TK_FILE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 313 "compilers/imcc/imcc.l"
+#line 308 "compilers/imcc/imcc.l"
 return ANNOTATE;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 314 "compilers/imcc/imcc.l"
+#line 309 "compilers/imcc/imcc.l"
 return LEXICAL;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 315 "compilers/imcc/imcc.l"
+#line 310 "compilers/imcc/imcc.l"
 return ARG;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 316 "compilers/imcc/imcc.l"
+#line 311 "compilers/imcc/imcc.l"
 return SUB;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 317 "compilers/imcc/imcc.l"
+#line 312 "compilers/imcc/imcc.l"
 return ESUB;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 318 "compilers/imcc/imcc.l"
+#line 313 "compilers/imcc/imcc.l"
 return PCC_BEGIN;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 319 "compilers/imcc/imcc.l"
+#line 314 "compilers/imcc/imcc.l"
 return PCC_END;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 320 "compilers/imcc/imcc.l"
+#line 315 "compilers/imcc/imcc.l"
 return PCC_CALL;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 321 "compilers/imcc/imcc.l"
+#line 316 "compilers/imcc/imcc.l"
 return NCI_CALL;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 322 "compilers/imcc/imcc.l"
+#line 317 "compilers/imcc/imcc.l"
 return METH_CALL;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 323 "compilers/imcc/imcc.l"
+#line 318 "compilers/imcc/imcc.l"
 return INVOCANT;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 324 "compilers/imcc/imcc.l"
+#line 319 "compilers/imcc/imcc.l"
 return PCC_SUB;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 325 "compilers/imcc/imcc.l"
+#line 320 "compilers/imcc/imcc.l"
 return PCC_BEGIN_RETURN;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 326 "compilers/imcc/imcc.l"
+#line 321 "compilers/imcc/imcc.l"
 return PCC_END_RETURN;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 327 "compilers/imcc/imcc.l"
+#line 322 "compilers/imcc/imcc.l"
 return PCC_BEGIN_YIELD;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 328 "compilers/imcc/imcc.l"
+#line 323 "compilers/imcc/imcc.l"
 return PCC_END_YIELD;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 330 "compilers/imcc/imcc.l"
+#line 325 "compilers/imcc/imcc.l"
 return METHOD;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 331 "compilers/imcc/imcc.l"
+#line 326 "compilers/imcc/imcc.l"
 return MULTI;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 332 "compilers/imcc/imcc.l"
+#line 327 "compilers/imcc/imcc.l"
 return MAIN;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 333 "compilers/imcc/imcc.l"
+#line 328 "compilers/imcc/imcc.l"
 return LOAD;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 334 "compilers/imcc/imcc.l"
+#line 329 "compilers/imcc/imcc.l"
 return INIT;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 335 "compilers/imcc/imcc.l"
+#line 330 "compilers/imcc/imcc.l"
 return IMMEDIATE;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 336 "compilers/imcc/imcc.l"
+#line 331 "compilers/imcc/imcc.l"
 return POSTCOMP;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 337 "compilers/imcc/imcc.l"
+#line 332 "compilers/imcc/imcc.l"
 return ANON;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 338 "compilers/imcc/imcc.l"
+#line 333 "compilers/imcc/imcc.l"
 return OUTER;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 339 "compilers/imcc/imcc.l"
+#line 334 "compilers/imcc/imcc.l"
 return NEED_LEX;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 340 "compilers/imcc/imcc.l"
+#line 335 "compilers/imcc/imcc.l"
 return VTABLE_METHOD;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 341 "compilers/imcc/imcc.l"
+#line 336 "compilers/imcc/imcc.l"
 return NS_ENTRY;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 342 "compilers/imcc/imcc.l"
+#line 337 "compilers/imcc/imcc.l"
 return UNIQUE_REG;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 343 "compilers/imcc/imcc.l"
+#line 338 "compilers/imcc/imcc.l"
 return SUB_INSTANCE_OF;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 344 "compilers/imcc/imcc.l"
+#line 339 "compilers/imcc/imcc.l"
 return SUBID;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 346 "compilers/imcc/imcc.l"
+#line 341 "compilers/imcc/imcc.l"
 return RESULT;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 347 "compilers/imcc/imcc.l"
+#line 342 "compilers/imcc/imcc.l"
 return GET_RESULTS;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 348 "compilers/imcc/imcc.l"
+#line 343 "compilers/imcc/imcc.l"
 return YIELDT;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 349 "compilers/imcc/imcc.l"
+#line 344 "compilers/imcc/imcc.l"
 return SET_YIELD;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 350 "compilers/imcc/imcc.l"
+#line 345 "compilers/imcc/imcc.l"
 return RETURN;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 351 "compilers/imcc/imcc.l"
+#line 346 "compilers/imcc/imcc.l"
 return SET_RETURN;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 352 "compilers/imcc/imcc.l"
+#line 347 "compilers/imcc/imcc.l"
 return TAILCALL;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 353 "compilers/imcc/imcc.l"
+#line 348 "compilers/imcc/imcc.l"
 return LOADLIB;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 355 "compilers/imcc/imcc.l"
+#line 350 "compilers/imcc/imcc.l"
 return ADV_FLAT;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 356 "compilers/imcc/imcc.l"
+#line 351 "compilers/imcc/imcc.l"
 return ADV_SLURPY;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 357 "compilers/imcc/imcc.l"
+#line 352 "compilers/imcc/imcc.l"
 return ADV_OPTIONAL;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 358 "compilers/imcc/imcc.l"
+#line 353 "compilers/imcc/imcc.l"
 return ADV_OPT_FLAG;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 359 "compilers/imcc/imcc.l"
+#line 354 "compilers/imcc/imcc.l"
 return ADV_NAMED;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 360 "compilers/imcc/imcc.l"
+#line 355 "compilers/imcc/imcc.l"
 return ADV_ARROW;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 361 "compilers/imcc/imcc.l"
+#line 356 "compilers/imcc/imcc.l"
 return ADV_INVOCANT;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 362 "compilers/imcc/imcc.l"
+#line 357 "compilers/imcc/imcc.l"
 return ADV_CALL_SIG;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 364 "compilers/imcc/imcc.l"
+#line 359 "compilers/imcc/imcc.l"
 return NAMESPACE;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 365 "compilers/imcc/imcc.l"
+#line 360 "compilers/imcc/imcc.l"
 return HLL;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 367 "compilers/imcc/imcc.l"
+#line 362 "compilers/imcc/imcc.l"
 return LOCAL;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 368 "compilers/imcc/imcc.l"
+#line 363 "compilers/imcc/imcc.l"
 return CONST;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 369 "compilers/imcc/imcc.l"
+#line 364 "compilers/imcc/imcc.l"
 return GLOBAL_CONST;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 370 "compilers/imcc/imcc.l"
+#line 365 "compilers/imcc/imcc.l"
 return PARAM;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 371 "compilers/imcc/imcc.l"
+#line 366 "compilers/imcc/imcc.l"
 return GOTO;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 372 "compilers/imcc/imcc.l"
+#line 367 "compilers/imcc/imcc.l"
 return IF;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 373 "compilers/imcc/imcc.l"
+#line 368 "compilers/imcc/imcc.l"
 return UNLESS;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 374 "compilers/imcc/imcc.l"
+#line 369 "compilers/imcc/imcc.l"
 return PNULL;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 375 "compilers/imcc/imcc.l"
+#line 370 "compilers/imcc/imcc.l"
 return INTV;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 376 "compilers/imcc/imcc.l"
+#line 371 "compilers/imcc/imcc.l"
 return FLOATV;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 378 "compilers/imcc/imcc.l"
+#line 373 "compilers/imcc/imcc.l"
 return PMCV;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 379 "compilers/imcc/imcc.l"
+#line 374 "compilers/imcc/imcc.l"
 return STRINGV;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 380 "compilers/imcc/imcc.l"
+#line 375 "compilers/imcc/imcc.l"
 return SHIFT_LEFT;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 381 "compilers/imcc/imcc.l"
+#line 376 "compilers/imcc/imcc.l"
 return SHIFT_RIGHT;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 382 "compilers/imcc/imcc.l"
+#line 377 "compilers/imcc/imcc.l"
 return SHIFT_RIGHT_U;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 383 "compilers/imcc/imcc.l"
+#line 378 "compilers/imcc/imcc.l"
 return LOG_AND;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 384 "compilers/imcc/imcc.l"
+#line 379 "compilers/imcc/imcc.l"
 return LOG_OR;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 385 "compilers/imcc/imcc.l"
+#line 380 "compilers/imcc/imcc.l"
 return LOG_XOR;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 386 "compilers/imcc/imcc.l"
+#line 381 "compilers/imcc/imcc.l"
 return RELOP_LT;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 387 "compilers/imcc/imcc.l"
+#line 382 "compilers/imcc/imcc.l"
 return RELOP_LTE;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 388 "compilers/imcc/imcc.l"
+#line 383 "compilers/imcc/imcc.l"
 return RELOP_GT;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 389 "compilers/imcc/imcc.l"
+#line 384 "compilers/imcc/imcc.l"
 return RELOP_GTE;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 390 "compilers/imcc/imcc.l"
+#line 385 "compilers/imcc/imcc.l"
 return RELOP_EQ;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 391 "compilers/imcc/imcc.l"
+#line 386 "compilers/imcc/imcc.l"
 return RELOP_NE;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 392 "compilers/imcc/imcc.l"
+#line 387 "compilers/imcc/imcc.l"
 return POW;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 394 "compilers/imcc/imcc.l"
+#line 389 "compilers/imcc/imcc.l"
 return CONCAT;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 395 "compilers/imcc/imcc.l"
+#line 390 "compilers/imcc/imcc.l"
 return DOT;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 397 "compilers/imcc/imcc.l"
+#line 392 "compilers/imcc/imcc.l"
 return PLUS_ASSIGN;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 398 "compilers/imcc/imcc.l"
+#line 393 "compilers/imcc/imcc.l"
 return MINUS_ASSIGN;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 399 "compilers/imcc/imcc.l"
+#line 394 "compilers/imcc/imcc.l"
 return MUL_ASSIGN;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 400 "compilers/imcc/imcc.l"
+#line 395 "compilers/imcc/imcc.l"
 return DIV_ASSIGN;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 401 "compilers/imcc/imcc.l"
+#line 396 "compilers/imcc/imcc.l"
 return MOD_ASSIGN;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 402 "compilers/imcc/imcc.l"
+#line 397 "compilers/imcc/imcc.l"
 return FDIV;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 403 "compilers/imcc/imcc.l"
+#line 398 "compilers/imcc/imcc.l"
 return FDIV_ASSIGN;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 404 "compilers/imcc/imcc.l"
+#line 399 "compilers/imcc/imcc.l"
 return BAND_ASSIGN;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 405 "compilers/imcc/imcc.l"
+#line 400 "compilers/imcc/imcc.l"
 return BOR_ASSIGN;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 406 "compilers/imcc/imcc.l"
+#line 401 "compilers/imcc/imcc.l"
 return BXOR_ASSIGN;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 407 "compilers/imcc/imcc.l"
+#line 402 "compilers/imcc/imcc.l"
 return SHR_ASSIGN;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 408 "compilers/imcc/imcc.l"
+#line 403 "compilers/imcc/imcc.l"
 return SHL_ASSIGN;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 409 "compilers/imcc/imcc.l"
+#line 404 "compilers/imcc/imcc.l"
 return SHR_U_ASSIGN;
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 410 "compilers/imcc/imcc.l"
+#line 405 "compilers/imcc/imcc.l"
 return CONCAT_ASSIGN;
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 412 "compilers/imcc/imcc.l"
+#line 407 "compilers/imcc/imcc.l"
 {
         char *macro_name   = NULL;
         int   start_cond   = YY_START;
@@ -3603,7 +3570,7 @@
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 455 "compilers/imcc/imcc.l"
+#line 450 "compilers/imcc/imcc.l"
 {
         /* the initial whitespace catcher misses this one */
         SET_LINE_NUMBER;
@@ -3612,7 +3579,7 @@
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 461 "compilers/imcc/imcc.l"
+#line 456 "compilers/imcc/imcc.l"
 {
         const int c = yylex(valp,yyscanner,interp);
 
@@ -3627,7 +3594,7 @@
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 473 "compilers/imcc/imcc.l"
+#line 468 "compilers/imcc/imcc.l"
 {
         if (valp) {
             char *label;
@@ -3652,7 +3619,7 @@
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 495 "compilers/imcc/imcc.l"
+#line 490 "compilers/imcc/imcc.l"
 {
         if (valp) {
             char *label;
@@ -3675,12 +3642,12 @@
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 515 "compilers/imcc/imcc.l"
+#line 510 "compilers/imcc/imcc.l"
 return COMMA;
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 517 "compilers/imcc/imcc.l"
+#line 512 "compilers/imcc/imcc.l"
 {
         /* trim last ':' */
         YYCHOP();
@@ -3693,7 +3660,7 @@
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 527 "compilers/imcc/imcc.l"
+#line 522 "compilers/imcc/imcc.l"
 {
         char   * const macro_name = mem_sys_strdup(yytext + 1);
         int failed = expand_macro(interp, macro_name, yyscanner);
@@ -3706,54 +3673,41 @@
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 539 "compilers/imcc/imcc.l"
+#line 534 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, FLOATC);
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 540 "compilers/imcc/imcc.l"
+#line 535 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 541 "compilers/imcc/imcc.l"
+#line 536 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 542 "compilers/imcc/imcc.l"
+#line 537 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 543 "compilers/imcc/imcc.l"
+#line 538 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 545 "compilers/imcc/imcc.l"
+#line 540 "compilers/imcc/imcc.l"
 {
         valp->s = mem_sys_strdup(yytext);
 
-        /* trailing 'L' */
-        valp->s[strlen(valp->s) - 1] = '\0';
-
-        /* no BIGINT native format yet */
         return STRINGC;
     }
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 555 "compilers/imcc/imcc.l"
-{
-        valp->s = mem_sys_strdup(yytext);
-
-        return STRINGC;
-    }
-	YY_BREAK
-case 126:
-YY_RULE_SETUP
-#line 561 "compilers/imcc/imcc.l"
+#line 546 "compilers/imcc/imcc.l"
 {
         macro_frame_t *frame;
 
@@ -3782,9 +3736,9 @@
         yy_push_state(heredoc1, yyscanner);
     }
 	YY_BREAK
-case 127:
+case 126:
 YY_RULE_SETUP
-#line 589 "compilers/imcc/imcc.l"
+#line 574 "compilers/imcc/imcc.l"
 {
         /* charset:"..." */
         valp->s = mem_sys_strdup(yytext);
@@ -3793,9 +3747,9 @@
         return USTRINGC;
     }
 	YY_BREAK
-case 128:
+case 127:
 YY_RULE_SETUP
-#line 597 "compilers/imcc/imcc.l"
+#line 582 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3804,9 +3758,9 @@
         return IREG;
     }
 	YY_BREAK
-case 129:
+case 128:
 YY_RULE_SETUP
-#line 605 "compilers/imcc/imcc.l"
+#line 590 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3815,9 +3769,9 @@
         return NREG;
     }
 	YY_BREAK
-case 130:
+case 129:
 YY_RULE_SETUP
-#line 613 "compilers/imcc/imcc.l"
+#line 598 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3826,9 +3780,9 @@
         return SREG;
     }
 	YY_BREAK
-case 131:
+case 130:
 YY_RULE_SETUP
-#line 621 "compilers/imcc/imcc.l"
+#line 606 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3837,17 +3791,17 @@
         return PREG;
     }
 	YY_BREAK
-case 132:
+case 131:
 YY_RULE_SETUP
-#line 629 "compilers/imcc/imcc.l"
+#line 614 "compilers/imcc/imcc.l"
 {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
             "'%s' is not a valid register name", yytext);
     }
 	YY_BREAK
-case 133:
+case 132:
 YY_RULE_SETUP
-#line 634 "compilers/imcc/imcc.l"
+#line 619 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->state->pasm_file == 0)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3859,26 +3813,26 @@
         return REG;
     }
 	YY_BREAK
-case 134:
+case 133:
 YY_RULE_SETUP
-#line 646 "compilers/imcc/imcc.l"
+#line 631 "compilers/imcc/imcc.l"
 { return handle_identifier(interp, valp, yytext); }
 	YY_BREAK
-case 135:
+case 134:
 YY_RULE_SETUP
-#line 648 "compilers/imcc/imcc.l"
+#line 633 "compilers/imcc/imcc.l"
 /* skip */;
 	YY_BREAK
-case 136:
+case 135:
 YY_RULE_SETUP
-#line 650 "compilers/imcc/imcc.l"
+#line 635 "compilers/imcc/imcc.l"
 {
         /* catch all except for state macro */
         return yytext[0];
     }
 	YY_BREAK
 case YY_STATE_EOF(emit):
-#line 655 "compilers/imcc/imcc.l"
+#line 640 "compilers/imcc/imcc.l"
 {
         BEGIN(INITIAL);
 
@@ -3891,34 +3845,34 @@
     }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 666 "compilers/imcc/imcc.l"
+#line 651 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
-case 137:
+case 136:
 YY_RULE_SETUP
-#line 668 "compilers/imcc/imcc.l"
+#line 653 "compilers/imcc/imcc.l"
 {
         /* the initial whitespace catcher misses this one */
         SET_LINE_NUMBER;
         DUP_AND_RET(valp, ENDM);
 }
 	YY_BREAK
-case 138:
-/* rule 138 can match eol */
+case 137:
+/* rule 137 can match eol */
 YY_RULE_SETUP
-#line 674 "compilers/imcc/imcc.l"
+#line 659 "compilers/imcc/imcc.l"
 {
         DUP_AND_RET(valp, '\n');
     }
 	YY_BREAK
-case 139:
+case 138:
 YY_RULE_SETUP
-#line 678 "compilers/imcc/imcc.l"
+#line 663 "compilers/imcc/imcc.l"
 return LABEL;
 	YY_BREAK
-case 140:
+case 139:
 YY_RULE_SETUP
-#line 680 "compilers/imcc/imcc.l"
+#line 665 "compilers/imcc/imcc.l"
 {
 
         if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3943,9 +3897,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 141:
+case 140:
 YY_RULE_SETUP
-#line 704 "compilers/imcc/imcc.l"
+#line 689 "compilers/imcc/imcc.l"
 {
     if (valp) {
         if (!IMCC_INFO(interp)->cur_macro_name) {
@@ -3974,46 +3928,46 @@
     return IDENTIFIER;
 }
 	YY_BREAK
-case 142:
+case 141:
 YY_RULE_SETUP
-#line 732 "compilers/imcc/imcc.l"
+#line 717 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ' ');
 	YY_BREAK
-case 143:
+case 142:
 YY_RULE_SETUP
-#line 733 "compilers/imcc/imcc.l"
+#line 718 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
-case 144:
+case 143:
 YY_RULE_SETUP
-#line 734 "compilers/imcc/imcc.l"
+#line 719 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
-case 145:
+case 144:
 YY_RULE_SETUP
-#line 735 "compilers/imcc/imcc.l"
+#line 720 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, IDENTIFIER);
 	YY_BREAK
-case 146:
+case 145:
 YY_RULE_SETUP
-#line 736 "compilers/imcc/imcc.l"
+#line 721 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, MACRO);
 	YY_BREAK
-case 147:
+case 146:
 YY_RULE_SETUP
-#line 737 "compilers/imcc/imcc.l"
+#line 722 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, yytext[0]);
 	YY_BREAK
 case YY_STATE_EOF(macro):
-#line 738 "compilers/imcc/imcc.l"
+#line 723 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
-case 148:
+case 147:
 YY_RULE_SETUP
-#line 740 "compilers/imcc/imcc.l"
+#line 725 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 4017 "compilers/imcc/imclexer.c"
+#line 3971 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -4316,7 +4270,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 1095 )
+			if ( yy_current_state >= 1088 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4345,11 +4299,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 1095 )
+		if ( yy_current_state >= 1088 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 1094);
+	yy_is_jam = (yy_current_state == 1087);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5225,7 +5179,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 740 "compilers/imcc/imcc.l"
+#line 725 "compilers/imcc/imcc.l"
 
 
 
@@ -5849,7 +5803,7 @@
 imcc_run_compilation(PARROT_INTERP, void *yyscanner) {
     IMCC_TRY(IMCC_INFO(interp)->jump_buf, IMCC_INFO(interp)->error_code) {
         if (yyparse(yyscanner, interp)) {
-            IMCC_INFO(interp)->error_code = IMCC_PARSEFAIL_EXCEPTION;
+            IMCC_INFO(interp)->error_code    = IMCC_PARSEFAIL_EXCEPTION;
             IMCC_INFO(interp)->error_message = string_from_literal(interp, "syntax error ... somewhere");
             return;
         }

Modified: branches/gsoc_threads/compilers/imcc/imcparser.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/imcparser.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/imcparser.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1136,9 +1136,12 @@
 do_loadlib(PARROT_INTERP, ARGIN(const char *lib))
 {
     ASSERT_ARGS(do_loadlib)
-    STRING * const s = Parrot_str_unescape(interp, lib + 1, '"', NULL);
-    PMC    *ignored  = Parrot_load_lib(interp, s, NULL);
-    UNUSED(ignored);
+    STRING * const s       = Parrot_str_unescape(interp, lib + 1, '"', NULL);
+    PMC    * const lib_pmc = Parrot_load_lib(interp, s, NULL);
+    if (PMC_IS_NULL(lib_pmc) || !VTABLE_get_bool(interp, lib_pmc)) {
+        IMCC_fataly(interp, EXCEPTION_LIBRARY_ERROR,
+            "loadlib directive could not find library `%S'", s);
+    }
     Parrot_register_HLL_lib(interp, s);
 }
 
@@ -1147,7 +1150,7 @@
 
 
 /* Line 189 of yacc.c  */
-#line 1140 "compilers/imcc/imcparser.c"
+#line 1143 "compilers/imcc/imcparser.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -1420,7 +1423,7 @@
 {
 
 /* Line 214 of yacc.c  */
-#line 1068 "compilers/imcc/imcc.y"
+#line 1071 "compilers/imcc/imcc.y"
 
     IdList * idlist;
     int t;
@@ -1431,7 +1434,7 @@
 
 
 /* Line 214 of yacc.c  */
-#line 1424 "compilers/imcc/imcparser.c"
+#line 1427 "compilers/imcc/imcparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -1443,7 +1446,7 @@
 
 
 /* Line 264 of yacc.c  */
-#line 1436 "compilers/imcc/imcparser.c"
+#line 1439 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1866,41 +1869,41 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1163,  1163,  1167,  1168,  1172,  1173,  1174,  1180,  1186,
-    1187,  1188,  1189,  1193,  1194,  1203,  1209,  1217,  1229,  1242,
-    1242,  1251,  1251,  1258,  1258,  1267,  1268,  1272,  1273,  1277,
-    1278,  1279,  1280,  1281,  1282,  1283,  1286,  1286,  1295,  1294,
-    1307,  1311,  1324,  1328,  1332,  1332,  1344,  1346,  1350,  1365,
-    1366,  1370,  1370,  1382,  1383,  1392,  1396,  1400,  1391,  1412,
-    1413,  1414,  1427,  1427,  1431,  1456,  1460,  1466,  1475,  1481,
-    1490,  1496,  1505,  1511,  1520,  1528,  1533,  1544,  1547,  1552,
-    1560,  1561,  1562,  1563,  1564,  1575,  1586,  1589,  1591,  1596,
-    1595,  1626,  1627,  1631,  1632,  1636,  1637,  1641,  1642,  1646,
-    1647,  1648,  1649,  1650,  1651,  1652,  1653,  1654,  1655,  1656,
-    1657,  1658,  1659,  1663,  1668,  1672,  1676,  1680,  1684,  1689,
-    1698,  1699,  1711,  1716,  1717,  1725,  1726,  1726,  1738,  1739,
-    1743,  1744,  1745,  1746,  1747,  1748,  1749,  1750,  1755,  1755,
-    1758,  1766,  1766,  1772,  1773,  1778,  1786,  1787,  1792,  1800,
-    1804,  1809,  1808,  1821,  1822,  1826,  1827,  1837,  1842,  1852,
-    1861,  1862,  1874,  1878,  1880,  1881,  1882,  1883,  1884,  1888,
-    1889,  1893,  1894,  1898,  1909,  1910,  1921,  1928,  1937,  1945,
-    1947,  1952,  1953,  1954,  1954,  1967,  1984,  1997,  1997,  2004,
-    2005,  2005,  2011,  2017,  2021,  2033,  2034,  2035,  2036,  2037,
-    2038,  2042,  2043,  2044,  2045,  2049,  2051,  2053,  2055,  2057,
-    2060,  2067,  2066,  2075,  2076,  2077,  2078,  2086,  2087,  2088,
-    2092,  2093,  2094,  2095,  2096,  2097,  2098,  2099,  2100,  2101,
-    2102,  2103,  2104,  2105,  2106,  2107,  2108,  2109,  2110,  2111,
-    2112,  2113,  2114,  2120,  2119,  2131,  2136,  2137,  2138,  2139,
-    2140,  2141,  2142,  2143,  2144,  2145,  2146,  2147,  2148,  2153,
-    2164,  2165,  2166,  2167,  2173,  2187,  2193,  2199,  2205,  2204,
-    2213,  2214,  2224,  2234,  2241,  2246,  2256,  2260,  2261,  2265,
-    2266,  2267,  2270,  2271,  2275,  2279,  2289,  2295,  2305,  2310,
-    2314,  2315,  2319,  2323,  2327,  2334,  2338,  2342,  2349,  2350,
-    2354,  2355,  2356,  2357,  2358,  2359,  2363,  2364,  2368,  2369,
-    2373,  2374,  2378,  2379,  2386,  2393,  2394,  2395,  2399,  2400,
-    2404,  2405,  2409,  2410,  2414,  2415,  2419,  2419,  2431,  2431,
-    2443,  2444,  2452,  2459,  2460,  2461,  2462,  2463,  2467,  2468,
-    2472,  2473,  2474
+       0,  1166,  1166,  1170,  1171,  1175,  1176,  1177,  1183,  1189,
+    1190,  1191,  1192,  1196,  1197,  1206,  1212,  1220,  1232,  1245,
+    1245,  1254,  1254,  1261,  1261,  1270,  1271,  1275,  1276,  1280,
+    1281,  1282,  1283,  1284,  1285,  1286,  1289,  1289,  1298,  1297,
+    1310,  1314,  1327,  1331,  1335,  1335,  1347,  1349,  1353,  1368,
+    1369,  1373,  1373,  1385,  1386,  1395,  1399,  1403,  1394,  1415,
+    1416,  1417,  1430,  1430,  1434,  1459,  1463,  1469,  1478,  1484,
+    1493,  1499,  1508,  1514,  1523,  1531,  1536,  1547,  1550,  1555,
+    1563,  1564,  1565,  1566,  1567,  1578,  1589,  1592,  1594,  1599,
+    1598,  1629,  1630,  1634,  1635,  1639,  1640,  1644,  1645,  1649,
+    1650,  1651,  1652,  1653,  1654,  1655,  1656,  1657,  1658,  1659,
+    1660,  1661,  1662,  1666,  1671,  1675,  1679,  1683,  1687,  1692,
+    1701,  1702,  1714,  1719,  1720,  1728,  1729,  1729,  1741,  1742,
+    1746,  1747,  1748,  1749,  1750,  1751,  1752,  1753,  1758,  1758,
+    1761,  1769,  1769,  1775,  1776,  1781,  1789,  1790,  1795,  1803,
+    1807,  1812,  1811,  1824,  1825,  1829,  1830,  1840,  1845,  1855,
+    1864,  1865,  1877,  1881,  1883,  1884,  1885,  1886,  1887,  1891,
+    1892,  1896,  1897,  1901,  1912,  1913,  1924,  1931,  1940,  1948,
+    1950,  1955,  1956,  1957,  1957,  1970,  1987,  2000,  2000,  2007,
+    2008,  2008,  2014,  2020,  2024,  2036,  2037,  2038,  2039,  2040,
+    2041,  2045,  2046,  2047,  2048,  2052,  2054,  2056,  2058,  2060,
+    2063,  2070,  2069,  2078,  2079,  2080,  2081,  2089,  2090,  2091,
+    2095,  2096,  2097,  2098,  2099,  2100,  2101,  2102,  2103,  2104,
+    2105,  2106,  2107,  2108,  2109,  2110,  2111,  2112,  2113,  2114,
+    2115,  2116,  2117,  2123,  2122,  2134,  2139,  2140,  2141,  2142,
+    2143,  2144,  2145,  2146,  2147,  2148,  2149,  2150,  2151,  2156,
+    2167,  2168,  2169,  2170,  2176,  2190,  2196,  2202,  2208,  2207,
+    2216,  2217,  2227,  2237,  2244,  2249,  2259,  2263,  2264,  2268,
+    2269,  2270,  2273,  2274,  2278,  2282,  2292,  2298,  2308,  2313,
+    2317,  2318,  2322,  2326,  2330,  2337,  2341,  2345,  2352,  2353,
+    2357,  2358,  2359,  2360,  2361,  2362,  2366,  2367,  2371,  2372,
+    2376,  2377,  2381,  2382,  2389,  2396,  2397,  2398,  2402,  2403,
+    2407,  2408,  2412,  2413,  2417,  2418,  2422,  2422,  2434,  2434,
+    2446,  2447,  2455,  2462,  2463,  2464,  2465,  2466,  2470,  2471,
+    2475,  2476,  2477
 };
 #endif
 
@@ -3260,28 +3263,28 @@
         case 2:
 
 /* Line 1464 of yacc.c  */
-#line 1163 "compilers/imcc/imcc.y"
+#line 1166 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
 
 /* Line 1464 of yacc.c  */
-#line 1172 "compilers/imcc/imcc.y"
+#line 1175 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
 
 /* Line 1464 of yacc.c  */
-#line 1173 "compilers/imcc/imcc.y"
+#line 1176 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
 
 /* Line 1464 of yacc.c  */
-#line 1175 "compilers/imcc/imcc.y"
+#line 1178 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3292,7 +3295,7 @@
   case 8:
 
 /* Line 1464 of yacc.c  */
-#line 1181 "compilers/imcc/imcc.y"
+#line 1184 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3303,42 +3306,42 @@
   case 9:
 
 /* Line 1464 of yacc.c  */
-#line 1186 "compilers/imcc/imcc.y"
+#line 1189 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
 
 /* Line 1464 of yacc.c  */
-#line 1187 "compilers/imcc/imcc.y"
+#line 1190 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
 
 /* Line 1464 of yacc.c  */
-#line 1188 "compilers/imcc/imcc.y"
+#line 1191 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
 
 /* Line 1464 of yacc.c  */
-#line 1189 "compilers/imcc/imcc.y"
+#line 1192 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
 
 /* Line 1464 of yacc.c  */
-#line 1193 "compilers/imcc/imcc.y"
+#line 1196 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
 
 /* Line 1464 of yacc.c  */
-#line 1195 "compilers/imcc/imcc.y"
+#line 1198 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3349,7 +3352,7 @@
   case 15:
 
 /* Line 1464 of yacc.c  */
-#line 1204 "compilers/imcc/imcc.y"
+#line 1207 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            /* set_filename() frees the STRINGC */
@@ -3360,7 +3363,7 @@
   case 16:
 
 /* Line 1464 of yacc.c  */
-#line 1210 "compilers/imcc/imcc.y"
+#line 1213 "compilers/imcc/imcc.y"
     {
            /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(2) - (3)].s));
@@ -3370,7 +3373,7 @@
   case 17:
 
 /* Line 1464 of yacc.c  */
-#line 1218 "compilers/imcc/imcc.y"
+#line 1221 "compilers/imcc/imcc.y"
     {
           /* We'll want to store an entry while emitting instructions, so just
            * store annotation like it's an instruction. */
@@ -3383,7 +3386,7 @@
   case 18:
 
 /* Line 1464 of yacc.c  */
-#line 1230 "compilers/imcc/imcc.y"
+#line 1233 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
             Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp),
@@ -3398,14 +3401,14 @@
   case 19:
 
 /* Line 1464 of yacc.c  */
-#line 1242 "compilers/imcc/imcc.y"
+#line 1245 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 20:
 
 /* Line 1464 of yacc.c  */
-#line 1243 "compilers/imcc/imcc.y"
+#line 1246 "compilers/imcc/imcc.y"
     {
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
              mem_sys_free((yyvsp[(4) - (6)].s));
@@ -3416,14 +3419,14 @@
   case 21:
 
 /* Line 1464 of yacc.c  */
-#line 1251 "compilers/imcc/imcc.y"
+#line 1254 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 22:
 
 /* Line 1464 of yacc.c  */
-#line 1252 "compilers/imcc/imcc.y"
+#line 1255 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(6) - (6)].s));
@@ -3434,14 +3437,14 @@
   case 23:
 
 /* Line 1464 of yacc.c  */
-#line 1258 "compilers/imcc/imcc.y"
+#line 1261 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 24:
 
 /* Line 1464 of yacc.c  */
-#line 1259 "compilers/imcc/imcc.y"
+#line 1262 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(3) - (6)].s));
@@ -3453,49 +3456,49 @@
   case 29:
 
 /* Line 1464 of yacc.c  */
-#line 1277 "compilers/imcc/imcc.y"
+#line 1280 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 30:
 
 /* Line 1464 of yacc.c  */
-#line 1278 "compilers/imcc/imcc.y"
+#line 1281 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 31:
 
 /* Line 1464 of yacc.c  */
-#line 1279 "compilers/imcc/imcc.y"
+#line 1282 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 32:
 
 /* Line 1464 of yacc.c  */
-#line 1280 "compilers/imcc/imcc.y"
+#line 1283 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 33:
 
 /* Line 1464 of yacc.c  */
-#line 1281 "compilers/imcc/imcc.y"
+#line 1284 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 36:
 
 /* Line 1464 of yacc.c  */
-#line 1286 "compilers/imcc/imcc.y"
+#line 1289 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 37:
 
 /* Line 1464 of yacc.c  */
-#line 1288 "compilers/imcc/imcc.y"
+#line 1291 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3507,7 +3510,7 @@
   case 38:
 
 /* Line 1464 of yacc.c  */
-#line 1295 "compilers/imcc/imcc.y"
+#line 1298 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
@@ -3517,7 +3520,7 @@
   case 39:
 
 /* Line 1464 of yacc.c  */
-#line 1300 "compilers/imcc/imcc.y"
+#line 1303 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3530,7 +3533,7 @@
   case 40:
 
 /* Line 1464 of yacc.c  */
-#line 1308 "compilers/imcc/imcc.y"
+#line 1311 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
          }
@@ -3539,7 +3542,7 @@
   case 41:
 
 /* Line 1464 of yacc.c  */
-#line 1312 "compilers/imcc/imcc.y"
+#line 1315 "compilers/imcc/imcc.y"
     {
            char   *name = mem_sys_strdup((yyvsp[(2) - (4)].s) + 1);
            SymReg *r    = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
@@ -3557,21 +3560,21 @@
   case 42:
 
 /* Line 1464 of yacc.c  */
-#line 1324 "compilers/imcc/imcc.y"
+#line 1327 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 44:
 
 /* Line 1464 of yacc.c  */
-#line 1332 "compilers/imcc/imcc.y"
+#line 1335 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 45:
 
 /* Line 1464 of yacc.c  */
-#line 1335 "compilers/imcc/imcc.y"
+#line 1338 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
                          imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3584,7 +3587,7 @@
   case 48:
 
 /* Line 1464 of yacc.c  */
-#line 1351 "compilers/imcc/imcc.y"
+#line 1354 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
            (yyval.i) = 0;
@@ -3601,21 +3604,21 @@
   case 49:
 
 /* Line 1464 of yacc.c  */
-#line 1365 "compilers/imcc/imcc.y"
+#line 1368 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 50:
 
 /* Line 1464 of yacc.c  */
-#line 1366 "compilers/imcc/imcc.y"
+#line 1369 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 51:
 
 /* Line 1464 of yacc.c  */
-#line 1370 "compilers/imcc/imcc.y"
+#line 1373 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
          }
@@ -3624,7 +3627,7 @@
   case 52:
 
 /* Line 1464 of yacc.c  */
-#line 1374 "compilers/imcc/imcc.y"
+#line 1377 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -3635,14 +3638,14 @@
   case 53:
 
 /* Line 1464 of yacc.c  */
-#line 1382 "compilers/imcc/imcc.y"
+#line 1385 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 54:
 
 /* Line 1464 of yacc.c  */
-#line 1384 "compilers/imcc/imcc.y"
+#line 1387 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
@@ -3652,7 +3655,7 @@
   case 55:
 
 /* Line 1464 of yacc.c  */
-#line 1392 "compilers/imcc/imcc.y"
+#line 1395 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
          }
@@ -3661,7 +3664,7 @@
   case 56:
 
 /* Line 1464 of yacc.c  */
-#line 1396 "compilers/imcc/imcc.y"
+#line 1399 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
          }
@@ -3670,7 +3673,7 @@
   case 57:
 
 /* Line 1464 of yacc.c  */
-#line 1400 "compilers/imcc/imcc.y"
+#line 1403 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t);
           if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) {
@@ -3683,28 +3686,28 @@
   case 58:
 
 /* Line 1464 of yacc.c  */
-#line 1408 "compilers/imcc/imcc.y"
+#line 1411 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 59:
 
 /* Line 1464 of yacc.c  */
-#line 1412 "compilers/imcc/imcc.y"
+#line 1415 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 60:
 
 /* Line 1464 of yacc.c  */
-#line 1413 "compilers/imcc/imcc.y"
+#line 1416 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 61:
 
 /* Line 1464 of yacc.c  */
-#line 1415 "compilers/imcc/imcc.y"
+#line 1418 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                  add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3719,21 +3722,21 @@
   case 62:
 
 /* Line 1464 of yacc.c  */
-#line 1427 "compilers/imcc/imcc.y"
+#line 1430 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 63:
 
 /* Line 1464 of yacc.c  */
-#line 1427 "compilers/imcc/imcc.y"
+#line 1430 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); IMCC_INFO(interp)->is_def = 0; }
     break;
 
   case 64:
 
 /* Line 1464 of yacc.c  */
-#line 1432 "compilers/imcc/imcc.y"
+#line 1435 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(3) - (3)].t) & VT_OPT_FLAG && (yyvsp[(1) - (3)].t) != 'I') {
                const char *type;
@@ -3758,14 +3761,14 @@
   case 65:
 
 /* Line 1464 of yacc.c  */
-#line 1456 "compilers/imcc/imcc.y"
+#line 1459 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 66:
 
 /* Line 1464 of yacc.c  */
-#line 1461 "compilers/imcc/imcc.y"
+#line 1464 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3776,7 +3779,7 @@
   case 67:
 
 /* Line 1464 of yacc.c  */
-#line 1467 "compilers/imcc/imcc.y"
+#line 1470 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3787,7 +3790,7 @@
   case 68:
 
 /* Line 1464 of yacc.c  */
-#line 1476 "compilers/imcc/imcc.y"
+#line 1479 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
@@ -3798,7 +3801,7 @@
   case 69:
 
 /* Line 1464 of yacc.c  */
-#line 1482 "compilers/imcc/imcc.y"
+#line 1485 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = (yyvsp[(3) - (4)].s);
@@ -3809,7 +3812,7 @@
   case 70:
 
 /* Line 1464 of yacc.c  */
-#line 1491 "compilers/imcc/imcc.y"
+#line 1494 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
@@ -3820,7 +3823,7 @@
   case 71:
 
 /* Line 1464 of yacc.c  */
-#line 1497 "compilers/imcc/imcc.y"
+#line 1500 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
@@ -3831,7 +3834,7 @@
   case 72:
 
 /* Line 1464 of yacc.c  */
-#line 1506 "compilers/imcc/imcc.y"
+#line 1509 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
@@ -3842,7 +3845,7 @@
   case 73:
 
 /* Line 1464 of yacc.c  */
-#line 1512 "compilers/imcc/imcc.y"
+#line 1515 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3853,7 +3856,7 @@
   case 74:
 
 /* Line 1464 of yacc.c  */
-#line 1521 "compilers/imcc/imcc.y"
+#line 1524 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
@@ -3863,7 +3866,7 @@
   case 75:
 
 /* Line 1464 of yacc.c  */
-#line 1529 "compilers/imcc/imcc.y"
+#line 1532 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
@@ -3873,7 +3876,7 @@
   case 76:
 
 /* Line 1464 of yacc.c  */
-#line 1534 "compilers/imcc/imcc.y"
+#line 1537 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3885,7 +3888,7 @@
   case 77:
 
 /* Line 1464 of yacc.c  */
-#line 1544 "compilers/imcc/imcc.y"
+#line 1547 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL);
          }
@@ -3894,7 +3897,7 @@
   case 78:
 
 /* Line 1464 of yacc.c  */
-#line 1548 "compilers/imcc/imcc.y"
+#line 1551 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
@@ -3904,7 +3907,7 @@
   case 79:
 
 /* Line 1464 of yacc.c  */
-#line 1553 "compilers/imcc/imcc.y"
+#line 1556 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
@@ -3914,35 +3917,35 @@
   case 80:
 
 /* Line 1464 of yacc.c  */
-#line 1560 "compilers/imcc/imcc.y"
+#line 1563 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 81:
 
 /* Line 1464 of yacc.c  */
-#line 1561 "compilers/imcc/imcc.y"
+#line 1564 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 82:
 
 /* Line 1464 of yacc.c  */
-#line 1562 "compilers/imcc/imcc.y"
+#line 1565 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 83:
 
 /* Line 1464 of yacc.c  */
-#line 1563 "compilers/imcc/imcc.y"
+#line 1566 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 84:
 
 /* Line 1464 of yacc.c  */
-#line 1565 "compilers/imcc/imcc.y"
+#line 1568 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3958,7 +3961,7 @@
   case 85:
 
 /* Line 1464 of yacc.c  */
-#line 1576 "compilers/imcc/imcc.y"
+#line 1579 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3974,14 +3977,14 @@
   case 86:
 
 /* Line 1464 of yacc.c  */
-#line 1586 "compilers/imcc/imcc.y"
+#line 1589 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 89:
 
 /* Line 1464 of yacc.c  */
-#line 1596 "compilers/imcc/imcc.y"
+#line 1599 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -4008,112 +4011,112 @@
   case 90:
 
 /* Line 1464 of yacc.c  */
-#line 1622 "compilers/imcc/imcc.y"
+#line 1625 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 91:
 
 /* Line 1464 of yacc.c  */
-#line 1626 "compilers/imcc/imcc.y"
+#line 1629 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 92:
 
 /* Line 1464 of yacc.c  */
-#line 1627 "compilers/imcc/imcc.y"
+#line 1630 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 93:
 
 /* Line 1464 of yacc.c  */
-#line 1631 "compilers/imcc/imcc.y"
+#line 1634 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 94:
 
 /* Line 1464 of yacc.c  */
-#line 1632 "compilers/imcc/imcc.y"
+#line 1635 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 95:
 
 /* Line 1464 of yacc.c  */
-#line 1636 "compilers/imcc/imcc.y"
+#line 1639 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 97:
 
 /* Line 1464 of yacc.c  */
-#line 1641 "compilers/imcc/imcc.y"
+#line 1644 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 98:
 
 /* Line 1464 of yacc.c  */
-#line 1642 "compilers/imcc/imcc.y"
+#line 1645 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 99:
 
 /* Line 1464 of yacc.c  */
-#line 1646 "compilers/imcc/imcc.y"
+#line 1649 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
   case 100:
 
 /* Line 1464 of yacc.c  */
-#line 1647 "compilers/imcc/imcc.y"
+#line 1650 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
   case 101:
 
 /* Line 1464 of yacc.c  */
-#line 1648 "compilers/imcc/imcc.y"
+#line 1651 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
   case 102:
 
 /* Line 1464 of yacc.c  */
-#line 1649 "compilers/imcc/imcc.y"
+#line 1652 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 103:
 
 /* Line 1464 of yacc.c  */
-#line 1650 "compilers/imcc/imcc.y"
+#line 1653 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 104:
 
 /* Line 1464 of yacc.c  */
-#line 1651 "compilers/imcc/imcc.y"
+#line 1654 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
   case 105:
 
 /* Line 1464 of yacc.c  */
-#line 1652 "compilers/imcc/imcc.y"
+#line 1655 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 113:
 
 /* Line 1464 of yacc.c  */
-#line 1664 "compilers/imcc/imcc.y"
+#line 1667 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -4123,7 +4126,7 @@
   case 114:
 
 /* Line 1464 of yacc.c  */
-#line 1669 "compilers/imcc/imcc.y"
+#line 1672 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
@@ -4132,7 +4135,7 @@
   case 115:
 
 /* Line 1464 of yacc.c  */
-#line 1673 "compilers/imcc/imcc.y"
+#line 1676 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
@@ -4141,7 +4144,7 @@
   case 116:
 
 /* Line 1464 of yacc.c  */
-#line 1677 "compilers/imcc/imcc.y"
+#line 1680 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
@@ -4150,7 +4153,7 @@
   case 117:
 
 /* Line 1464 of yacc.c  */
-#line 1681 "compilers/imcc/imcc.y"
+#line 1684 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
@@ -4159,7 +4162,7 @@
   case 118:
 
 /* Line 1464 of yacc.c  */
-#line 1685 "compilers/imcc/imcc.y"
+#line 1688 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -4169,7 +4172,7 @@
   case 119:
 
 /* Line 1464 of yacc.c  */
-#line 1690 "compilers/imcc/imcc.y"
+#line 1693 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -4179,14 +4182,14 @@
   case 120:
 
 /* Line 1464 of yacc.c  */
-#line 1698 "compilers/imcc/imcc.y"
+#line 1701 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 121:
 
 /* Line 1464 of yacc.c  */
-#line 1699 "compilers/imcc/imcc.y"
+#line 1702 "compilers/imcc/imcc.y"
     {
                                  if (IMCC_INFO(interp)->adv_named_id) {
                                      add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -4201,21 +4204,21 @@
   case 122:
 
 /* Line 1464 of yacc.c  */
-#line 1711 "compilers/imcc/imcc.y"
+#line 1714 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 123:
 
 /* Line 1464 of yacc.c  */
-#line 1716 "compilers/imcc/imcc.y"
+#line 1719 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 124:
 
 /* Line 1464 of yacc.c  */
-#line 1718 "compilers/imcc/imcc.y"
+#line 1721 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -4225,21 +4228,21 @@
   case 125:
 
 /* Line 1464 of yacc.c  */
-#line 1725 "compilers/imcc/imcc.y"
+#line 1728 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 126:
 
 /* Line 1464 of yacc.c  */
-#line 1726 "compilers/imcc/imcc.y"
+#line 1729 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 127:
 
 /* Line 1464 of yacc.c  */
-#line 1727 "compilers/imcc/imcc.y"
+#line 1730 "compilers/imcc/imcc.y"
     {
            IdList * const l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -4253,91 +4256,91 @@
   case 128:
 
 /* Line 1464 of yacc.c  */
-#line 1738 "compilers/imcc/imcc.y"
+#line 1741 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 129:
 
 /* Line 1464 of yacc.c  */
-#line 1739 "compilers/imcc/imcc.y"
+#line 1742 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 130:
 
 /* Line 1464 of yacc.c  */
-#line 1743 "compilers/imcc/imcc.y"
+#line 1746 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
   case 131:
 
 /* Line 1464 of yacc.c  */
-#line 1744 "compilers/imcc/imcc.y"
+#line 1747 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 132:
 
 /* Line 1464 of yacc.c  */
-#line 1745 "compilers/imcc/imcc.y"
+#line 1748 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 133:
 
 /* Line 1464 of yacc.c  */
-#line 1746 "compilers/imcc/imcc.y"
+#line 1749 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
   case 134:
 
 /* Line 1464 of yacc.c  */
-#line 1747 "compilers/imcc/imcc.y"
+#line 1750 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
   case 135:
 
 /* Line 1464 of yacc.c  */
-#line 1748 "compilers/imcc/imcc.y"
+#line 1751 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
   case 136:
 
 /* Line 1464 of yacc.c  */
-#line 1749 "compilers/imcc/imcc.y"
+#line 1752 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 137:
 
 /* Line 1464 of yacc.c  */
-#line 1750 "compilers/imcc/imcc.y"
+#line 1753 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 138:
 
 /* Line 1464 of yacc.c  */
-#line 1755 "compilers/imcc/imcc.y"
+#line 1758 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
   case 139:
 
 /* Line 1464 of yacc.c  */
-#line 1757 "compilers/imcc/imcc.y"
+#line 1760 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 140:
 
 /* Line 1464 of yacc.c  */
-#line 1759 "compilers/imcc/imcc.y"
+#line 1762 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
@@ -4347,28 +4350,28 @@
   case 141:
 
 /* Line 1464 of yacc.c  */
-#line 1766 "compilers/imcc/imcc.y"
+#line 1769 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
   case 142:
 
 /* Line 1464 of yacc.c  */
-#line 1768 "compilers/imcc/imcc.y"
+#line 1771 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 143:
 
 /* Line 1464 of yacc.c  */
-#line 1772 "compilers/imcc/imcc.y"
+#line 1775 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 144:
 
 /* Line 1464 of yacc.c  */
-#line 1774 "compilers/imcc/imcc.y"
+#line 1777 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4378,7 +4381,7 @@
   case 145:
 
 /* Line 1464 of yacc.c  */
-#line 1779 "compilers/imcc/imcc.y"
+#line 1782 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4388,14 +4391,14 @@
   case 146:
 
 /* Line 1464 of yacc.c  */
-#line 1786 "compilers/imcc/imcc.y"
+#line 1789 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 147:
 
 /* Line 1464 of yacc.c  */
-#line 1788 "compilers/imcc/imcc.y"
+#line 1791 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4405,7 +4408,7 @@
   case 148:
 
 /* Line 1464 of yacc.c  */
-#line 1793 "compilers/imcc/imcc.y"
+#line 1796 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4415,21 +4418,21 @@
   case 149:
 
 /* Line 1464 of yacc.c  */
-#line 1800 "compilers/imcc/imcc.y"
+#line 1803 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 150:
 
 /* Line 1464 of yacc.c  */
-#line 1804 "compilers/imcc/imcc.y"
+#line 1807 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 151:
 
 /* Line 1464 of yacc.c  */
-#line 1809 "compilers/imcc/imcc.y"
+#line 1812 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
@@ -4439,7 +4442,7 @@
   case 152:
 
 /* Line 1464 of yacc.c  */
-#line 1814 "compilers/imcc/imcc.y"
+#line 1817 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
@@ -4449,28 +4452,28 @@
   case 153:
 
 /* Line 1464 of yacc.c  */
-#line 1821 "compilers/imcc/imcc.y"
+#line 1824 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 154:
 
 /* Line 1464 of yacc.c  */
-#line 1822 "compilers/imcc/imcc.y"
+#line 1825 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 155:
 
 /* Line 1464 of yacc.c  */
-#line 1826 "compilers/imcc/imcc.y"
+#line 1829 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 156:
 
 /* Line 1464 of yacc.c  */
-#line 1828 "compilers/imcc/imcc.y"
+#line 1831 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4485,7 +4488,7 @@
   case 157:
 
 /* Line 1464 of yacc.c  */
-#line 1838 "compilers/imcc/imcc.y"
+#line 1841 "compilers/imcc/imcc.y"
     {
             SymReg * const name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
             add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
@@ -4495,7 +4498,7 @@
   case 158:
 
 /* Line 1464 of yacc.c  */
-#line 1843 "compilers/imcc/imcc.y"
+#line 1846 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4510,7 +4513,7 @@
   case 159:
 
 /* Line 1464 of yacc.c  */
-#line 1853 "compilers/imcc/imcc.y"
+#line 1856 "compilers/imcc/imcc.y"
     {
            SymReg * const name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
@@ -4520,63 +4523,63 @@
   case 162:
 
 /* Line 1464 of yacc.c  */
-#line 1874 "compilers/imcc/imcc.y"
+#line 1877 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 163:
 
 /* Line 1464 of yacc.c  */
-#line 1879 "compilers/imcc/imcc.y"
+#line 1882 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 164:
 
 /* Line 1464 of yacc.c  */
-#line 1880 "compilers/imcc/imcc.y"
+#line 1883 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 165:
 
 /* Line 1464 of yacc.c  */
-#line 1881 "compilers/imcc/imcc.y"
+#line 1884 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 166:
 
 /* Line 1464 of yacc.c  */
-#line 1882 "compilers/imcc/imcc.y"
+#line 1885 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 167:
 
 /* Line 1464 of yacc.c  */
-#line 1883 "compilers/imcc/imcc.y"
+#line 1886 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 168:
 
 /* Line 1464 of yacc.c  */
-#line 1884 "compilers/imcc/imcc.y"
+#line 1887 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 169:
 
 /* Line 1464 of yacc.c  */
-#line 1888 "compilers/imcc/imcc.y"
+#line 1891 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 173:
 
 /* Line 1464 of yacc.c  */
-#line 1899 "compilers/imcc/imcc.y"
+#line 1902 "compilers/imcc/imcc.y"
     {
              Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
              mem_sys_free((yyvsp[(1) - (1)].s));
@@ -4587,14 +4590,14 @@
   case 174:
 
 /* Line 1464 of yacc.c  */
-#line 1909 "compilers/imcc/imcc.y"
+#line 1912 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 175:
 
 /* Line 1464 of yacc.c  */
-#line 1911 "compilers/imcc/imcc.y"
+#line 1914 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -4607,7 +4610,7 @@
   case 176:
 
 /* Line 1464 of yacc.c  */
-#line 1922 "compilers/imcc/imcc.y"
+#line 1925 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -4618,7 +4621,7 @@
   case 177:
 
 /* Line 1464 of yacc.c  */
-#line 1929 "compilers/imcc/imcc.y"
+#line 1932 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -4629,7 +4632,7 @@
   case 178:
 
 /* Line 1464 of yacc.c  */
-#line 1938 "compilers/imcc/imcc.y"
+#line 1941 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_gc_allocate_n_zeroed_typed(interp, 1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
@@ -4640,14 +4643,14 @@
   case 183:
 
 /* Line 1464 of yacc.c  */
-#line 1954 "compilers/imcc/imcc.y"
+#line 1957 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 184:
 
 /* Line 1464 of yacc.c  */
-#line 1955 "compilers/imcc/imcc.y"
+#line 1958 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -4665,7 +4668,7 @@
   case 185:
 
 /* Line 1464 of yacc.c  */
-#line 1968 "compilers/imcc/imcc.y"
+#line 1971 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
                 mem_sys_free((yyvsp[(2) - (4)].s));
@@ -4687,7 +4690,7 @@
   case 186:
 
 /* Line 1464 of yacc.c  */
-#line 1985 "compilers/imcc/imcc.y"
+#line 1988 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
                 mem_sys_free((yyvsp[(2) - (4)].s));
@@ -4705,14 +4708,14 @@
   case 187:
 
 /* Line 1464 of yacc.c  */
-#line 1997 "compilers/imcc/imcc.y"
+#line 2000 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 188:
 
 /* Line 1464 of yacc.c  */
-#line 1998 "compilers/imcc/imcc.y"
+#line 2001 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            IMCC_INFO(interp)->is_def = 0;
@@ -4723,14 +4726,14 @@
   case 190:
 
 /* Line 1464 of yacc.c  */
-#line 2005 "compilers/imcc/imcc.y"
+#line 2008 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 191:
 
 /* Line 1464 of yacc.c  */
-#line 2006 "compilers/imcc/imcc.y"
+#line 2009 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            IMCC_INFO(interp)->is_def = 0;
@@ -4741,7 +4744,7 @@
   case 192:
 
 /* Line 1464 of yacc.c  */
-#line 2012 "compilers/imcc/imcc.y"
+#line 2015 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->tailcall = 1;
@@ -4752,7 +4755,7 @@
   case 193:
 
 /* Line 1464 of yacc.c  */
-#line 2018 "compilers/imcc/imcc.y"
+#line 2021 "compilers/imcc/imcc.y"
     {
             (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
          }
@@ -4761,7 +4764,7 @@
   case 194:
 
 /* Line 1464 of yacc.c  */
-#line 2022 "compilers/imcc/imcc.y"
+#line 2025 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4778,98 +4781,98 @@
   case 195:
 
 /* Line 1464 of yacc.c  */
-#line 2033 "compilers/imcc/imcc.y"
+#line 2036 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 196:
 
 /* Line 1464 of yacc.c  */
-#line 2034 "compilers/imcc/imcc.y"
+#line 2037 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 197:
 
 /* Line 1464 of yacc.c  */
-#line 2035 "compilers/imcc/imcc.y"
+#line 2038 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 200:
 
 /* Line 1464 of yacc.c  */
-#line 2038 "compilers/imcc/imcc.y"
+#line 2041 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 201:
 
 /* Line 1464 of yacc.c  */
-#line 2042 "compilers/imcc/imcc.y"
+#line 2045 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
   case 202:
 
 /* Line 1464 of yacc.c  */
-#line 2043 "compilers/imcc/imcc.y"
+#line 2046 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
   case 203:
 
 /* Line 1464 of yacc.c  */
-#line 2044 "compilers/imcc/imcc.y"
+#line 2047 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
   case 204:
 
 /* Line 1464 of yacc.c  */
-#line 2045 "compilers/imcc/imcc.y"
+#line 2048 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
   case 205:
 
 /* Line 1464 of yacc.c  */
-#line 2050 "compilers/imcc/imcc.y"
+#line 2053 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
   case 206:
 
 /* Line 1464 of yacc.c  */
-#line 2052 "compilers/imcc/imcc.y"
+#line 2055 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  }
     break;
 
   case 207:
 
 /* Line 1464 of yacc.c  */
-#line 2054 "compilers/imcc/imcc.y"
+#line 2057 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); }
     break;
 
   case 208:
 
 /* Line 1464 of yacc.c  */
-#line 2056 "compilers/imcc/imcc.y"
+#line 2059 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
   case 209:
 
 /* Line 1464 of yacc.c  */
-#line 2058 "compilers/imcc/imcc.y"
+#line 2061 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 210:
 
 /* Line 1464 of yacc.c  */
-#line 2061 "compilers/imcc/imcc.y"
+#line 2064 "compilers/imcc/imcc.y"
     {
            add_pcc_result(interp, (yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4880,7 +4883,7 @@
   case 211:
 
 /* Line 1464 of yacc.c  */
-#line 2067 "compilers/imcc/imcc.y"
+#line 2070 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
@@ -4889,7 +4892,7 @@
   case 212:
 
 /* Line 1464 of yacc.c  */
-#line 2071 "compilers/imcc/imcc.y"
+#line 2074 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4899,7 +4902,7 @@
   case 216:
 
 /* Line 1464 of yacc.c  */
-#line 2079 "compilers/imcc/imcc.y"
+#line 2082 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
@@ -4908,189 +4911,189 @@
   case 217:
 
 /* Line 1464 of yacc.c  */
-#line 2086 "compilers/imcc/imcc.y"
+#line 2089 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
   case 218:
 
 /* Line 1464 of yacc.c  */
-#line 2087 "compilers/imcc/imcc.y"
+#line 2090 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 219:
 
 /* Line 1464 of yacc.c  */
-#line 2088 "compilers/imcc/imcc.y"
+#line 2091 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
   case 220:
 
 /* Line 1464 of yacc.c  */
-#line 2092 "compilers/imcc/imcc.y"
+#line 2095 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 221:
 
 /* Line 1464 of yacc.c  */
-#line 2093 "compilers/imcc/imcc.y"
+#line 2096 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 222:
 
 /* Line 1464 of yacc.c  */
-#line 2094 "compilers/imcc/imcc.y"
+#line 2097 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 223:
 
 /* Line 1464 of yacc.c  */
-#line 2095 "compilers/imcc/imcc.y"
+#line 2098 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 224:
 
 /* Line 1464 of yacc.c  */
-#line 2096 "compilers/imcc/imcc.y"
+#line 2099 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 225:
 
 /* Line 1464 of yacc.c  */
-#line 2097 "compilers/imcc/imcc.y"
+#line 2100 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 226:
 
 /* Line 1464 of yacc.c  */
-#line 2098 "compilers/imcc/imcc.y"
+#line 2101 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
   case 227:
 
 /* Line 1464 of yacc.c  */
-#line 2099 "compilers/imcc/imcc.y"
+#line 2102 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 228:
 
 /* Line 1464 of yacc.c  */
-#line 2100 "compilers/imcc/imcc.y"
+#line 2103 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 229:
 
 /* Line 1464 of yacc.c  */
-#line 2101 "compilers/imcc/imcc.y"
+#line 2104 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
   case 230:
 
 /* Line 1464 of yacc.c  */
-#line 2102 "compilers/imcc/imcc.y"
+#line 2105 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 231:
 
 /* Line 1464 of yacc.c  */
-#line 2103 "compilers/imcc/imcc.y"
+#line 2106 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
   case 232:
 
 /* Line 1464 of yacc.c  */
-#line 2104 "compilers/imcc/imcc.y"
+#line 2107 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
   case 233:
 
 /* Line 1464 of yacc.c  */
-#line 2105 "compilers/imcc/imcc.y"
+#line 2108 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
   case 234:
 
 /* Line 1464 of yacc.c  */
-#line 2106 "compilers/imcc/imcc.y"
+#line 2109 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 235:
 
 /* Line 1464 of yacc.c  */
-#line 2107 "compilers/imcc/imcc.y"
+#line 2110 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 236:
 
 /* Line 1464 of yacc.c  */
-#line 2108 "compilers/imcc/imcc.y"
+#line 2111 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 237:
 
 /* Line 1464 of yacc.c  */
-#line 2109 "compilers/imcc/imcc.y"
+#line 2112 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
   case 238:
 
 /* Line 1464 of yacc.c  */
-#line 2110 "compilers/imcc/imcc.y"
+#line 2113 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
   case 239:
 
 /* Line 1464 of yacc.c  */
-#line 2111 "compilers/imcc/imcc.y"
+#line 2114 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
   case 240:
 
 /* Line 1464 of yacc.c  */
-#line 2112 "compilers/imcc/imcc.y"
+#line 2115 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 241:
 
 /* Line 1464 of yacc.c  */
-#line 2113 "compilers/imcc/imcc.y"
+#line 2116 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 242:
 
 /* Line 1464 of yacc.c  */
-#line 2114 "compilers/imcc/imcc.y"
+#line 2117 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 243:
 
 /* Line 1464 of yacc.c  */
-#line 2120 "compilers/imcc/imcc.y"
+#line 2123 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -5101,112 +5104,112 @@
   case 244:
 
 /* Line 1464 of yacc.c  */
-#line 2125 "compilers/imcc/imcc.y"
+#line 2128 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
   case 245:
 
 /* Line 1464 of yacc.c  */
-#line 2132 "compilers/imcc/imcc.y"
+#line 2135 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); }
     break;
 
   case 246:
 
 /* Line 1464 of yacc.c  */
-#line 2136 "compilers/imcc/imcc.y"
+#line 2139 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 247:
 
 /* Line 1464 of yacc.c  */
-#line 2137 "compilers/imcc/imcc.y"
+#line 2140 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 248:
 
 /* Line 1464 of yacc.c  */
-#line 2138 "compilers/imcc/imcc.y"
+#line 2141 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 249:
 
 /* Line 1464 of yacc.c  */
-#line 2139 "compilers/imcc/imcc.y"
+#line 2142 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 250:
 
 /* Line 1464 of yacc.c  */
-#line 2140 "compilers/imcc/imcc.y"
+#line 2143 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 251:
 
 /* Line 1464 of yacc.c  */
-#line 2141 "compilers/imcc/imcc.y"
+#line 2144 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 252:
 
 /* Line 1464 of yacc.c  */
-#line 2142 "compilers/imcc/imcc.y"
+#line 2145 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 253:
 
 /* Line 1464 of yacc.c  */
-#line 2143 "compilers/imcc/imcc.y"
+#line 2146 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 254:
 
 /* Line 1464 of yacc.c  */
-#line 2144 "compilers/imcc/imcc.y"
+#line 2147 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 255:
 
 /* Line 1464 of yacc.c  */
-#line 2145 "compilers/imcc/imcc.y"
+#line 2148 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 256:
 
 /* Line 1464 of yacc.c  */
-#line 2146 "compilers/imcc/imcc.y"
+#line 2149 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 257:
 
 /* Line 1464 of yacc.c  */
-#line 2147 "compilers/imcc/imcc.y"
+#line 2150 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 258:
 
 /* Line 1464 of yacc.c  */
-#line 2148 "compilers/imcc/imcc.y"
+#line 2151 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 259:
 
 /* Line 1464 of yacc.c  */
-#line 2154 "compilers/imcc/imcc.y"
+#line 2157 "compilers/imcc/imcc.y"
     {
         (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
                       IMCC_INFO(interp) -> regs,
@@ -5219,28 +5222,28 @@
   case 260:
 
 /* Line 1464 of yacc.c  */
-#line 2164 "compilers/imcc/imcc.y"
+#line 2167 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));       mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 261:
 
 /* Line 1464 of yacc.c  */
-#line 2165 "compilers/imcc/imcc.y"
+#line 2168 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 262:
 
 /* Line 1464 of yacc.c  */
-#line 2166 "compilers/imcc/imcc.y"
+#line 2169 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));     mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 263:
 
 /* Line 1464 of yacc.c  */
-#line 2168 "compilers/imcc/imcc.y"
+#line 2171 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -5251,7 +5254,7 @@
   case 264:
 
 /* Line 1464 of yacc.c  */
-#line 2174 "compilers/imcc/imcc.y"
+#line 2177 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             const char * const name = (yyvsp[(3) - (3)].sr)->name;
@@ -5270,7 +5273,7 @@
   case 265:
 
 /* Line 1464 of yacc.c  */
-#line 2188 "compilers/imcc/imcc.y"
+#line 2191 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
@@ -5281,7 +5284,7 @@
   case 266:
 
 /* Line 1464 of yacc.c  */
-#line 2194 "compilers/imcc/imcc.y"
+#line 2197 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
@@ -5292,14 +5295,14 @@
   case 267:
 
 /* Line 1464 of yacc.c  */
-#line 2199 "compilers/imcc/imcc.y"
+#line 2202 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
   case 268:
 
 /* Line 1464 of yacc.c  */
-#line 2205 "compilers/imcc/imcc.y"
+#line 2208 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
@@ -5309,21 +5312,21 @@
   case 269:
 
 /* Line 1464 of yacc.c  */
-#line 2209 "compilers/imcc/imcc.y"
+#line 2212 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
   case 270:
 
 /* Line 1464 of yacc.c  */
-#line 2213 "compilers/imcc/imcc.y"
+#line 2216 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 271:
 
 /* Line 1464 of yacc.c  */
-#line 2215 "compilers/imcc/imcc.y"
+#line 2218 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5338,7 +5341,7 @@
   case 272:
 
 /* Line 1464 of yacc.c  */
-#line 2225 "compilers/imcc/imcc.y"
+#line 2228 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5353,7 +5356,7 @@
   case 273:
 
 /* Line 1464 of yacc.c  */
-#line 2235 "compilers/imcc/imcc.y"
+#line 2238 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -5365,7 +5368,7 @@
   case 274:
 
 /* Line 1464 of yacc.c  */
-#line 2242 "compilers/imcc/imcc.y"
+#line 2245 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
@@ -5375,7 +5378,7 @@
   case 275:
 
 /* Line 1464 of yacc.c  */
-#line 2247 "compilers/imcc/imcc.y"
+#line 2250 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -5387,70 +5390,70 @@
   case 276:
 
 /* Line 1464 of yacc.c  */
-#line 2256 "compilers/imcc/imcc.y"
+#line 2259 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 277:
 
 /* Line 1464 of yacc.c  */
-#line 2260 "compilers/imcc/imcc.y"
+#line 2263 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 278:
 
 /* Line 1464 of yacc.c  */
-#line 2261 "compilers/imcc/imcc.y"
+#line 2264 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 279:
 
 /* Line 1464 of yacc.c  */
-#line 2265 "compilers/imcc/imcc.y"
+#line 2268 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;     }
     break;
 
   case 280:
 
 /* Line 1464 of yacc.c  */
-#line 2266 "compilers/imcc/imcc.y"
+#line 2269 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED;    }
     break;
 
   case 281:
 
 /* Line 1464 of yacc.c  */
-#line 2267 "compilers/imcc/imcc.y"
+#line 2270 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 282:
 
 /* Line 1464 of yacc.c  */
-#line 2270 "compilers/imcc/imcc.y"
+#line 2273 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 283:
 
 /* Line 1464 of yacc.c  */
-#line 2271 "compilers/imcc/imcc.y"
+#line 2274 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
   case 284:
 
 /* Line 1464 of yacc.c  */
-#line 2275 "compilers/imcc/imcc.y"
+#line 2278 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 285:
 
 /* Line 1464 of yacc.c  */
-#line 2280 "compilers/imcc/imcc.y"
+#line 2283 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5465,7 +5468,7 @@
   case 286:
 
 /* Line 1464 of yacc.c  */
-#line 2290 "compilers/imcc/imcc.y"
+#line 2293 "compilers/imcc/imcc.y"
     {
             add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
                     mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
@@ -5476,7 +5479,7 @@
   case 287:
 
 /* Line 1464 of yacc.c  */
-#line 2296 "compilers/imcc/imcc.y"
+#line 2299 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5491,7 +5494,7 @@
   case 288:
 
 /* Line 1464 of yacc.c  */
-#line 2306 "compilers/imcc/imcc.y"
+#line 2309 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
@@ -5501,28 +5504,28 @@
   case 289:
 
 /* Line 1464 of yacc.c  */
-#line 2310 "compilers/imcc/imcc.y"
+#line 2313 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 290:
 
 /* Line 1464 of yacc.c  */
-#line 2314 "compilers/imcc/imcc.y"
+#line 2317 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 291:
 
 /* Line 1464 of yacc.c  */
-#line 2315 "compilers/imcc/imcc.y"
+#line 2318 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 292:
 
 /* Line 1464 of yacc.c  */
-#line 2320 "compilers/imcc/imcc.y"
+#line 2323 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
@@ -5531,7 +5534,7 @@
   case 293:
 
 /* Line 1464 of yacc.c  */
-#line 2324 "compilers/imcc/imcc.y"
+#line 2327 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
@@ -5540,7 +5543,7 @@
   case 294:
 
 /* Line 1464 of yacc.c  */
-#line 2328 "compilers/imcc/imcc.y"
+#line 2331 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
@@ -5549,7 +5552,7 @@
   case 295:
 
 /* Line 1464 of yacc.c  */
-#line 2335 "compilers/imcc/imcc.y"
+#line 2338 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
@@ -5558,7 +5561,7 @@
   case 296:
 
 /* Line 1464 of yacc.c  */
-#line 2339 "compilers/imcc/imcc.y"
+#line 2342 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
@@ -5567,7 +5570,7 @@
   case 297:
 
 /* Line 1464 of yacc.c  */
-#line 2343 "compilers/imcc/imcc.y"
+#line 2346 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
@@ -5576,91 +5579,91 @@
   case 298:
 
 /* Line 1464 of yacc.c  */
-#line 2349 "compilers/imcc/imcc.y"
+#line 2352 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 299:
 
 /* Line 1464 of yacc.c  */
-#line 2350 "compilers/imcc/imcc.y"
+#line 2353 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 300:
 
 /* Line 1464 of yacc.c  */
-#line 2354 "compilers/imcc/imcc.y"
+#line 2357 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
   case 301:
 
 /* Line 1464 of yacc.c  */
-#line 2355 "compilers/imcc/imcc.y"
+#line 2358 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
   case 302:
 
 /* Line 1464 of yacc.c  */
-#line 2356 "compilers/imcc/imcc.y"
+#line 2359 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
   case 303:
 
 /* Line 1464 of yacc.c  */
-#line 2357 "compilers/imcc/imcc.y"
+#line 2360 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
   case 304:
 
 /* Line 1464 of yacc.c  */
-#line 2358 "compilers/imcc/imcc.y"
+#line 2361 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
   case 305:
 
 /* Line 1464 of yacc.c  */
-#line 2359 "compilers/imcc/imcc.y"
+#line 2362 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
   case 308:
 
 /* Line 1464 of yacc.c  */
-#line 2368 "compilers/imcc/imcc.y"
+#line 2371 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 309:
 
 /* Line 1464 of yacc.c  */
-#line 2369 "compilers/imcc/imcc.y"
+#line 2372 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 310:
 
 /* Line 1464 of yacc.c  */
-#line 2373 "compilers/imcc/imcc.y"
+#line 2376 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
   case 312:
 
 /* Line 1464 of yacc.c  */
-#line 2378 "compilers/imcc/imcc.y"
+#line 2381 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 313:
 
 /* Line 1464 of yacc.c  */
-#line 2380 "compilers/imcc/imcc.y"
+#line 2383 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -5672,7 +5675,7 @@
   case 314:
 
 /* Line 1464 of yacc.c  */
-#line 2387 "compilers/imcc/imcc.y"
+#line 2390 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
@@ -5682,49 +5685,49 @@
   case 316:
 
 /* Line 1464 of yacc.c  */
-#line 2394 "compilers/imcc/imcc.y"
+#line 2397 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 317:
 
 /* Line 1464 of yacc.c  */
-#line 2395 "compilers/imcc/imcc.y"
+#line 2398 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 318:
 
 /* Line 1464 of yacc.c  */
-#line 2399 "compilers/imcc/imcc.y"
+#line 2402 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 319:
 
 /* Line 1464 of yacc.c  */
-#line 2400 "compilers/imcc/imcc.y"
+#line 2403 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 320:
 
 /* Line 1464 of yacc.c  */
-#line 2404 "compilers/imcc/imcc.y"
+#line 2407 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 321:
 
 /* Line 1464 of yacc.c  */
-#line 2405 "compilers/imcc/imcc.y"
+#line 2408 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 326:
 
 /* Line 1464 of yacc.c  */
-#line 2419 "compilers/imcc/imcc.y"
+#line 2422 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
          }
@@ -5733,7 +5736,7 @@
   case 327:
 
 /* Line 1464 of yacc.c  */
-#line 2423 "compilers/imcc/imcc.y"
+#line 2426 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5744,7 +5747,7 @@
   case 328:
 
 /* Line 1464 of yacc.c  */
-#line 2431 "compilers/imcc/imcc.y"
+#line 2434 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
          }
@@ -5753,7 +5756,7 @@
   case 329:
 
 /* Line 1464 of yacc.c  */
-#line 2435 "compilers/imcc/imcc.y"
+#line 2438 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5764,14 +5767,14 @@
   case 330:
 
 /* Line 1464 of yacc.c  */
-#line 2443 "compilers/imcc/imcc.y"
+#line 2446 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 331:
 
 /* Line 1464 of yacc.c  */
-#line 2445 "compilers/imcc/imcc.y"
+#line 2448 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
@@ -5781,7 +5784,7 @@
   case 332:
 
 /* Line 1464 of yacc.c  */
-#line 2453 "compilers/imcc/imcc.y"
+#line 2456 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
          }
@@ -5790,77 +5793,77 @@
   case 333:
 
 /* Line 1464 of yacc.c  */
-#line 2459 "compilers/imcc/imcc.y"
+#line 2462 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
   case 334:
 
 /* Line 1464 of yacc.c  */
-#line 2460 "compilers/imcc/imcc.y"
+#line 2463 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
   case 335:
 
 /* Line 1464 of yacc.c  */
-#line 2461 "compilers/imcc/imcc.y"
+#line 2464 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
   case 336:
 
 /* Line 1464 of yacc.c  */
-#line 2462 "compilers/imcc/imcc.y"
+#line 2465 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
   case 337:
 
 /* Line 1464 of yacc.c  */
-#line 2463 "compilers/imcc/imcc.y"
+#line 2466 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 338:
 
 /* Line 1464 of yacc.c  */
-#line 2467 "compilers/imcc/imcc.y"
+#line 2470 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 339:
 
 /* Line 1464 of yacc.c  */
-#line 2468 "compilers/imcc/imcc.y"
+#line 2471 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 340:
 
 /* Line 1464 of yacc.c  */
-#line 2472 "compilers/imcc/imcc.y"
+#line 2475 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 341:
 
 /* Line 1464 of yacc.c  */
-#line 2473 "compilers/imcc/imcc.y"
+#line 2476 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 342:
 
 /* Line 1464 of yacc.c  */
-#line 2474 "compilers/imcc/imcc.y"
+#line 2477 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
 
 
 /* Line 1464 of yacc.c  */
-#line 5853 "compilers/imcc/imcparser.c"
+#line 5856 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -6072,7 +6075,7 @@
 
 
 /* Line 1684 of yacc.c  */
-#line 2480 "compilers/imcc/imcc.y"
+#line 2483 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: branches/gsoc_threads/compilers/imcc/imcparser.h
==============================================================================
--- branches/gsoc_threads/compilers/imcc/imcparser.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/imcparser.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -295,7 +295,7 @@
 {
 
 /* Line 1685 of yacc.c  */
-#line 1068 "compilers/imcc/imcc.y"
+#line 1071 "compilers/imcc/imcc.y"
 
     IdList * idlist;
     int t;

Modified: branches/gsoc_threads/compilers/imcc/instructions.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/instructions.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/instructions.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -794,13 +794,11 @@
 
 */
 
-PARROT_EXPORT
 int
 emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
 {
     ASSERT_ARGS(emit_open)
     IMCC_INFO(interp)->emitter       = type;
-    IMCC_INFO(interp)->has_compile   = 0;
     IMCC_INFO(interp)->dont_optimize = 0;
 
     return (emitters[IMCC_INFO(interp)->emitter]).open(interp, param);
@@ -817,7 +815,6 @@
 
 */
 
-PARROT_EXPORT
 int
 emit_flush(PARROT_INTERP, ARGIN_NULLOK(void *param), ARGIN(IMC_Unit *unit))
 {
@@ -849,7 +846,6 @@
 
 */
 
-PARROT_EXPORT
 int
 emit_close(PARROT_INTERP, ARGIN_NULLOK(void *param))
 {

Modified: branches/gsoc_threads/compilers/imcc/instructions.h
==============================================================================
--- branches/gsoc_threads/compilers/imcc/instructions.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/instructions.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -91,21 +91,6 @@
 /* HEADERIZER BEGIN: compilers/imcc/instructions.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_EXPORT
-int emit_close(PARROT_INTERP, ARGIN_NULLOK(void *param))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-int emit_flush(PARROT_INTERP,
-    ARGIN_NULLOK(void *param),
-    ARGIN(IMC_Unit *unit))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 Instruction * _delete_ins(ARGMOD(IMC_Unit *unit), ARGIN(Instruction *ins))
@@ -133,6 +118,18 @@
         FUNC_MODIFIES(*unit)
         FUNC_MODIFIES(*ins);
 
+int emit_close(PARROT_INTERP, ARGIN_NULLOK(void *param))
+        __attribute__nonnull__(1);
+
+int emit_flush(PARROT_INTERP,
+    ARGIN_NULLOK(void *param),
+    ARGIN(IMC_Unit *unit))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
+        __attribute__nonnull__(1);
+
 PARROT_CAN_RETURN_NULL
 Instruction * emitb(PARROT_INTERP,
     ARGMOD_NULLOK(IMC_Unit *unit),
@@ -215,13 +212,6 @@
         FUNC_MODIFIES(*ins)
         FUNC_MODIFIES(*tmp);
 
-#define ASSERT_ARGS_emit_close __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_emit_flush __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_emit_open __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS__delete_ins __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(ins))
@@ -232,6 +222,13 @@
 #define ASSERT_ARGS_delete_ins __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(ins))
+#define ASSERT_ARGS_emit_close __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_emit_flush __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit))
+#define ASSERT_ARGS_emit_open __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_emitb __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_free_ins __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/gsoc_threads/compilers/imcc/main.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/main.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/main.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -47,24 +47,25 @@
 
 static void compile_to_bytecode(PARROT_INTERP,
     ARGIN(const char * const sourcefile),
-    ARGIN_NULLOK(const char * const output_file))
+    ARGIN_NULLOK(const char * const output_file),
+    ARGIN(yyscan_t yyscanner))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4);
 
 static void determine_input_file_type(PARROT_INTERP,
-    ARGIN(const char * const sourcefile))
+    ARGIN(const char * const sourcefile),
+    ARGIN(yyscan_t yyscanner))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 static void determine_output_file_type(PARROT_INTERP,
-    ARGMOD(int *obj_file),
     ARGIN(const char *output_file))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*obj_file);
+        __attribute__nonnull__(2);
 
-static void do_pre_process(PARROT_INTERP)
+static void do_pre_process(PARROT_INTERP, yyscan_t yyscanner)
         __attribute__nonnull__(1);
 
 static void imcc_get_optimization_description(
@@ -74,13 +75,11 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*opt_desc);
 
-static void imcc_run_pbc(PARROT_INTERP,
-    int obj_file,
-    ARGIN_NULLOK(const char *output_file),
+static void imcc_parseflags(PARROT_INTERP,
     int argc,
     ARGIN(const char **argv))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(5);
+        __attribute__nonnull__(3);
 
 static void imcc_write_pbc(PARROT_INTERP, ARGIN(const char *output_file))
         __attribute__nonnull__(1)
@@ -93,20 +92,21 @@
 
 #define ASSERT_ARGS_compile_to_bytecode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(sourcefile))
+    , PARROT_ASSERT_ARG(sourcefile) \
+    , PARROT_ASSERT_ARG(yyscanner))
 #define ASSERT_ARGS_determine_input_file_type __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(sourcefile))
+    , PARROT_ASSERT_ARG(sourcefile) \
+    , PARROT_ASSERT_ARG(yyscanner))
 #define ASSERT_ARGS_determine_output_file_type __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(obj_file) \
     , PARROT_ASSERT_ARG(output_file))
 #define ASSERT_ARGS_do_pre_process __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_imcc_get_optimization_description \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(opt_desc))
-#define ASSERT_ARGS_imcc_run_pbc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_imcc_parseflags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(argv))
 #define ASSERT_ARGS_imcc_write_pbc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -149,119 +149,102 @@
 
 /*
 
-=item C<void imcc_start_handling_flags(PARROT_INTERP)>
+=item C<static void imcc_parseflags(PARROT_INTERP, int argc, const char **argv)>
 
-Initialize handling of IMCC related command line flags.
+Parse flags ans set approptiate state(s)
 
 =cut
 
 */
-void
-imcc_start_handling_flags(PARROT_INTERP)
-{
-    SET_STATE_RUN_PBC(interp);
-}
-
-/*
-
-=item C<int imcc_handle_flag(PARROT_INTERP, struct longopt_opt_info *opt,
-Parrot_Run_core_t *core)>
 
-Handle Parrot's command line for IMCC related option and set appropriate flags.
+static void
+imcc_parseflags(PARROT_INTERP, int argc, ARGIN(const char **argv))
+{
+    ASSERT_ARGS(imcc_parseflags)
+    struct longopt_opt_info opt = LONGOPT_OPT_INFO_INIT;
 
-Return 1 if flag handled, 0 if not.
+    /* default state: run pbc */
+    SET_STATE_RUN_PBC(interp);
 
-=cut
+    while (longopt_get(interp, argc, argv, Parrot_cmd_options(), &opt) > 0) {
+        switch (opt.opt_id) {
+          case 'd':
+            if (opt.opt_arg && is_all_hex_digits(opt.opt_arg)) {
+                IMCC_INFO(interp)->debug = strtoul(opt.opt_arg, NULL, 16);
+            }
+            else {
+                IMCC_INFO(interp)->debug++;
+            }
+            break;
+          case 'w':
+            /* FIXME It's not best way to set warnings... */
+            Parrot_setwarnings(interp, PARROT_WARNINGS_ALL_FLAG);
+            IMCC_INFO(interp)->imcc_warn = 1;
+            break;
+          case 'G':
+            IMCC_INFO(interp)->gc_off = 1;
+            break;
+          case 'a':
+            SET_STATE_PASM_FILE(interp);
+            break;
+          case 'r':
+            if (STATE_RUN_PBC(interp))
+                SET_STATE_RUN_FROM_FILE(interp);
+            SET_STATE_RUN_PBC(interp);
+            break;
+          case 'c':
+            SET_STATE_LOAD_PBC(interp);
+            break;
+          case 'v':
+            IMCC_INFO(interp)->verbose++;
+            break;
+          case 'y':
+            yydebug = 1;
+            break;
+          case 'E':
+            SET_STATE_PRE_PROCESS(interp);
+            break;
+          case 'o':
+            UNSET_STATE_RUN_PBC(interp);
+            interp->output_file = opt.opt_arg;
+            break;
 
-*/
+          case OPT_PBC_OUTPUT:
+            UNSET_STATE_RUN_PBC(interp);
+            SET_STATE_WRITE_PBC(interp);
+            if (!interp->output_file)
+                interp->output_file = "-";
+            break;
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-int
-imcc_handle_flag(PARROT_INTERP, struct longopt_opt_info *opt,
-    Parrot_Run_core_t *core)
-{
-    PARROT_ASSERT(opt);
-    PARROT_ASSERT(core);
+          case 'O':
+            if (!opt.opt_arg) {
+                IMCC_INFO(interp)->optimizer_level |= OPT_PRE;
+                break;
+            }
+            if (strchr(opt.opt_arg, 'p'))
+                IMCC_INFO(interp)->optimizer_level |= OPT_PASM;
+            if (strchr(opt.opt_arg, 'c'))
+                IMCC_INFO(interp)->optimizer_level |= OPT_SUB;
+
+            /* currently not ok due to different register allocation */
+            if (strchr(opt.opt_arg, '1')) {
+                IMCC_INFO(interp)->optimizer_level |= OPT_PRE;
+            }
+            if (strchr(opt.opt_arg, '2')) {
+                IMCC_INFO(interp)->optimizer_level |= (OPT_PRE | OPT_CFG);
+            }
+            break;
 
-    switch (opt->opt_id) {
-      case 'd':
-        if (opt->opt_arg && is_all_hex_digits(opt->opt_arg)) {
-            IMCC_INFO(interp)->debug = strtoul(opt->opt_arg, NULL, 16);
-        }
-        else {
-            IMCC_INFO(interp)->debug++;
-        }
-        break;
-      case 'w':
-        /* FIXME It's not best way to set warnings... */
-        Parrot_setwarnings(interp, PARROT_WARNINGS_ALL_FLAG);
-        IMCC_INFO(interp)->imcc_warn = 1;
-        break;
-      case 'G':
-        IMCC_INFO(interp)->gc_off = 1;
-        break;
-      case 'a':
-        SET_STATE_PASM_FILE(interp);
-        break;
-      case 'r':
-        if (STATE_RUN_PBC(interp))
-            SET_STATE_RUN_FROM_FILE(interp);
-        SET_STATE_RUN_PBC(interp);
-        break;
-      case 'c':
-        SET_STATE_LOAD_PBC(interp);
-        break;
-      case 'v':
-        IMCC_INFO(interp)->verbose++;
-        break;
-      case 'y':
-        yydebug = 1;
-        break;
-      case 'E':
-        SET_STATE_PRE_PROCESS(interp);
-        break;
-      case 'o':
-        UNSET_STATE_RUN_PBC(interp);
-        interp->output_file = opt->opt_arg;
-        break;
-
-      case OPT_PBC_OUTPUT:
-        UNSET_STATE_RUN_PBC(interp);
-        SET_STATE_WRITE_PBC(interp);
-        if (!interp->output_file)
-            interp->output_file = "-";
-        break;
-
-      case 'O':
-        if (!opt->opt_arg) {
-            IMCC_INFO(interp)->optimizer_level |= OPT_PRE;
+          default:
+            /* skip already processed arguments */
             break;
         }
-        if (strchr(opt->opt_arg, 'p'))
-            IMCC_INFO(interp)->optimizer_level |= OPT_PASM;
-        if (strchr(opt->opt_arg, 'c'))
-            IMCC_INFO(interp)->optimizer_level |= OPT_SUB;
-
-        /* currently not ok due to different register allocation */
-        if (strchr(opt->opt_arg, '1')) {
-            IMCC_INFO(interp)->optimizer_level |= OPT_PRE;
-        }
-        if (strchr(opt->opt_arg, '2')) {
-            IMCC_INFO(interp)->optimizer_level |= (OPT_PRE | OPT_CFG);
-        }
-        break;
-
-      default:
-        return 0;
     }
-
-    return 1;
 }
 
 /*
 
-=item C<static void do_pre_process(PARROT_INTERP)>
+=item C<static void do_pre_process(PARROT_INTERP, yyscan_t yyscanner)>
 
 Pre-processor step.  Turn parser's output codes into Parrot instructions.
 
@@ -270,14 +253,12 @@
 */
 
 static void
-do_pre_process(PARROT_INTERP)
+do_pre_process(PARROT_INTERP, yyscan_t yyscanner)
 {
     ASSERT_ARGS(do_pre_process)
     int       c;
     YYSTYPE   val;
 
-    const yyscan_t yyscanner = IMCC_INFO(interp)->yyscanner;
-
     IMCC_push_parser_state(interp);
     c = yylex(&val, yyscanner, interp); /* is reset at end of while loop */
     while (c) {
@@ -409,42 +390,8 @@
 
 /*
 
-=item C<void imcc_initialize(PARROT_INTERP)>
-
-Initialise interpreter and set optimisation level.
-
-=cut
-
-*/
-
-void
-imcc_initialize(PARROT_INTERP)
-{
-    yyscan_t yyscanner = IMCC_INFO(interp)->yyscanner;
-
-    do_yylex_init(interp, &yyscanner);
-
-    Parrot_block_GC_mark(interp);
-    Parrot_block_GC_sweep(interp);
-
-    IMCC_INFO(interp)->yyscanner = yyscanner;
-
-    /* Default optimization level is zero; see optimizer.c, imc.h */
-    if (!IMCC_INFO(interp)->optimizer_level) {
-#if 1
-        IMCC_INFO(interp)->optimizer_level = 0;
-#else
-        /* won't even make with this: something with Data::Dumper and
-         * set_i_p_i*/
-        IMCC_INFO(interp)->optimizer_level = OPT_PRE;
-#endif
-    }
-}
-
-/*
-
-=item C<static void imcc_run_pbc(PARROT_INTERP, int obj_file, const char
-*output_file, int argc, const char **argv)>
+=item C<void imcc_run_pbc(PARROT_INTERP, const char *output_file, int argc,
+const char **argv)>
 
 Write out or run Parrot bytecode.
 
@@ -452,25 +399,13 @@
 
 */
 
-static void
-imcc_run_pbc(PARROT_INTERP, int obj_file, ARGIN_NULLOK(const char *output_file),
+void
+imcc_run_pbc(PARROT_INTERP, ARGIN_NULLOK(const char *output_file),
         int argc, ARGIN(const char **argv))
 {
-    ASSERT_ARGS(imcc_run_pbc)
-    if (IMCC_INFO(interp)->imcc_warn)
-        PARROT_WARNINGS_on(interp, PARROT_WARNINGS_ALL_FLAG);
-    else
-        PARROT_WARNINGS_off(interp, PARROT_WARNINGS_ALL_FLAG);
+    /* ASSERT_ARGS(imcc_run_pbc) */
 
-    if (!IMCC_INFO(interp)->gc_off) {
-        Parrot_unblock_GC_mark(interp);
-        Parrot_unblock_GC_sweep(interp);
-    }
-
-    if (obj_file)
-        IMCC_info(interp, 1, "Writing %s\n", output_file);
-    else
-        IMCC_info(interp, 1, "Running...\n");
+    IMCC_info(interp, 1, "Running...\n");
 
     /* runs :init functions */
     PackFile_fixup_subs(interp, PBC_IMMEDIATE, NULL);
@@ -522,7 +457,7 @@
 /*
 
 =item C<static void determine_input_file_type(PARROT_INTERP, const char * const
-sourcefile)>
+sourcefile, yyscan_t yyscanner)>
 
 Read in the source and determine whether it's Parrot bytecode or PASM
 
@@ -531,10 +466,10 @@
 */
 
 static void
-determine_input_file_type(PARROT_INTERP, ARGIN(const char * const sourcefile))
+determine_input_file_type(PARROT_INTERP, ARGIN(const char * const sourcefile),
+                            ARGIN(yyscan_t yyscanner))
 {
     ASSERT_ARGS(determine_input_file_type)
-    yyscan_t yyscanner = IMCC_INFO(interp)->yyscanner;
 
     /* Read in the source and check the file extension for the input type;
        a file extension .pbc means it's parrot bytecode;
@@ -566,8 +501,8 @@
 
 /*
 
-=item C<static void determine_output_file_type(PARROT_INTERP, int *obj_file,
-const char *output_file)>
+=item C<static void determine_output_file_type(PARROT_INTERP, const char
+*output_file)>
 
 Decide what kind of file we are to output.
 
@@ -576,8 +511,7 @@
 */
 
 static void
-determine_output_file_type(PARROT_INTERP,
-    ARGMOD(int *obj_file), ARGIN(const char *output_file))
+determine_output_file_type(PARROT_INTERP, ARGIN(const char *output_file))
 {
     ASSERT_ARGS(determine_output_file_type)
     const char * const ext = strrchr(output_file, '.');
@@ -585,17 +519,13 @@
     if (ext) {
         if (STREQ(ext, ".pbc"))
             SET_STATE_WRITE_PBC(interp);
-        else if (STREQ(ext, PARROT_OBJ_EXT)) {
-            UNUSED(obj_file);
-            IMCC_fatal_standalone(interp, 1, "main: can't produce object file");
-        }
     }
 }
 
 /*
 
 =item C<static void compile_to_bytecode(PARROT_INTERP, const char * const
-sourcefile, const char * const output_file)>
+sourcefile, const char * const output_file, yyscan_t yyscanner)>
 
 Compile source code into bytecode (or die trying).
 
@@ -606,11 +536,11 @@
 static void
 compile_to_bytecode(PARROT_INTERP,
                     ARGIN(const char * const sourcefile),
-                    ARGIN_NULLOK(const char * const output_file))
+                    ARGIN_NULLOK(const char * const output_file),
+                    ARGIN(yyscan_t yyscanner))
 {
     ASSERT_ARGS(compile_to_bytecode)
     PackFile *pf;
-    yyscan_t  yyscanner = IMCC_INFO(interp)->yyscanner;
     const int per_pbc   = STATE_WRITE_PBC(interp) || STATE_RUN_PBC(interp);
     const int opt_level = IMCC_INFO(interp)->optimizer_level;
 
@@ -672,29 +602,34 @@
 imcc_run(PARROT_INTERP, ARGIN(const char *sourcefile), int argc,
         ARGIN(const char **argv))
 {
-    int                obj_file;
-    yyscan_t           yyscanner   = IMCC_INFO(interp)->yyscanner;
+    yyscan_t           yyscanner;
     const char * const output_file = interp->output_file;
 
+    imcc_parseflags(interp, argc, argv);
+
+    /* PMCs in IMCC_INFO won't get marked */
+    Parrot_block_GC_mark(interp);
+    Parrot_block_GC_sweep(interp);
+
+    yylex_init_extra(interp, &yyscanner);
+
     /* Figure out what kind of source file we have -- if we have one */
     if (!sourcefile || !*sourcefile)
         IMCC_fatal_standalone(interp, 1, "main: No source file specified.\n");
     else
-        determine_input_file_type(interp, sourcefile);
+        determine_input_file_type(interp, sourcefile, yyscanner);
 
     if (STATE_PRE_PROCESS(interp)) {
-        do_pre_process(interp);
+        do_pre_process(interp, yyscanner);
         Parrot_destroy(interp);
         yylex_destroy(yyscanner);
-        IMCC_INFO(interp)->yyscanner = NULL;
 
         return 0;
     }
 
     /* Do we need to produce an output file? If so, what type? */
-    obj_file = 0;
     if (output_file) {
-        determine_output_file_type(interp, &obj_file, output_file);
+        determine_output_file_type(interp, output_file);
 
         if (STREQ(sourcefile, output_file) && !STREQ(sourcefile, "-"))
             IMCC_fatal_standalone(interp, 1, "main: outputfile is sourcefile\n");
@@ -718,7 +653,7 @@
         Parrot_pbc_load(interp, pf);
     }
     else
-        compile_to_bytecode(interp, sourcefile, output_file);
+        compile_to_bytecode(interp, sourcefile, output_file, yyscanner);
 
     /* Produce a PBC output file, if one was requested */
     if (STATE_WRITE_PBC(interp)) {
@@ -741,13 +676,24 @@
         }
     }
 
-    /* Run the bytecode */
-    if (STATE_RUN_PBC(interp))
-        imcc_run_pbc(interp, obj_file, output_file, argc, argv);
+    /* tear down the compilation context */
+    if (IMCC_INFO(interp)->imcc_warn)
+        PARROT_WARNINGS_on(interp, PARROT_WARNINGS_ALL_FLAG);
+    else
+        PARROT_WARNINGS_off(interp, PARROT_WARNINGS_ALL_FLAG);
+
+    if (!IMCC_INFO(interp)->gc_off) {
+        Parrot_unblock_GC_mark(interp);
+        Parrot_unblock_GC_sweep(interp);
+    }
 
     yylex_destroy(yyscanner);
-    IMCC_INFO(interp)->yyscanner = NULL;
-    return 0;
+
+    /* should the bytecode be run */
+    if (STATE_RUN_PBC(interp))
+        return 1;
+    else
+        return 0;
 }
 
 /*

Modified: branches/gsoc_threads/compilers/imcc/optimizer.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/optimizer.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/optimizer.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -824,18 +824,19 @@
           case PARROT_ARG_S:
             eval[i + 1] = i;        /* regs used are I0, I1, I2 */
             if (ops <= 2 || i) { /* fill source regs */
+                SymReg *r_ = r[i]->type & VT_CONSTP ? r[i]->reg : r[i];
                 switch (r[i]->set) {
                   case 'I':
-                    REG_INT(interp, i) = IMCC_int_from_reg(interp, r[i]);
+                    REG_INT(interp, i) = IMCC_int_from_reg(interp, r_);
                     break;
                   case 'N':
                     {
-                        STRING * const s = Parrot_str_new(interp, r[i]->name, 0);
+                        STRING * const s = Parrot_str_new(interp, r_->name, 0);
                         REG_NUM(interp, i) = Parrot_str_to_num(interp, s);
                     }
                     break;
                   case 'S':
-                    REG_STR(interp, i) = IMCC_string_from_reg(interp, r[i]);
+                    REG_STR(interp, i) = IMCC_string_from_reg(interp, r_);
                     break;
                   default:
                     break;
@@ -1416,7 +1417,7 @@
         Instruction *ins = unit->bb_list[i]->start;
         if ((ins->type & ITLABEL) && *ins->symregs[0]->name != '_') {
             const SymReg * const lab = ins->symregs[0];
-            used = IMCC_INFO(interp)->has_compile ? 1 : 0;
+            used = 0;
 
             if (!lab->first_ins)
                 continue;

Modified: branches/gsoc_threads/compilers/imcc/parser.h
==============================================================================
--- branches/gsoc_threads/compilers/imcc/parser.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/parser.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -27,11 +27,12 @@
 
 SymReg * macro(PARROT_INTERP, char *name);
 
-PARROT_EXPORT int yyparse(yyscan_t, PARROT_INTERP);
-PARROT_EXPORT int yylex(YYSTYPE *, yyscan_t, PARROT_INTERP);
-PARROT_EXPORT int yylex_destroy(yyscan_t);
+int yyparse(yyscan_t, PARROT_INTERP);
+int yylex(YYSTYPE *, yyscan_t, PARROT_INTERP);
+int yylex_destroy(yyscan_t);
 
 int yylex_init(yyscan_t*);
+int yylex_init_extra(PARROT_INTERP, yyscan_t*);
 int yyget_column(yyscan_t);
 void yyset_column(int column_no , yyscan_t);
 int yyerror(yyscan_t, Interp*, const char *);

Modified: branches/gsoc_threads/compilers/imcc/parser_util.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/parser_util.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/parser_util.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -47,7 +47,7 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_WARN_UNUSED_RESULT
-static int change_op(PARROT_INTERP,
+static int change_op_arg_to_num(PARROT_INTERP,
     ARGMOD(IMC_Unit *unit),
     ARGMOD(SymReg **r),
     int num,
@@ -58,15 +58,6 @@
         FUNC_MODIFIES(*unit)
         FUNC_MODIFIES(*r);
 
-PARROT_CANNOT_RETURN_NULL
-static void * imcc_compile_file(PARROT_INTERP,
-    ARGIN(const char *fullname),
-    ARGOUT(STRING **error_message))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*error_message);
-
 static void imcc_destroy_macro_values(ARGMOD(void *value))
         __attribute__nonnull__(1)
         FUNC_MODIFIES(*value);
@@ -94,14 +85,10 @@
         FUNC_MODIFIES(*unit)
         FUNC_MODIFIES(*r);
 
-#define ASSERT_ARGS_change_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_change_op_arg_to_num __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(r))
-#define ASSERT_ARGS_imcc_compile_file __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(fullname) \
-    , PARROT_ASSERT_ARG(error_message))
 #define ASSERT_ARGS_imcc_destroy_macro_values __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_try_rev_cmp __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -232,6 +219,9 @@
 =item C<static Instruction * var_arg_ins(PARROT_INTERP, IMC_Unit *unit, const
 char *name, SymReg **r, int n, int emit)>
 
+Create an C<Instruction> object for an instruction that takes a variable
+number of arguments.
+
 =cut
 
 */
@@ -479,8 +469,6 @@
             if (r[0]->set == r[1]->set && REG_NEEDS_ALLOC(r[1]))
                 ins->type |= ITALIAS;
         }
-        else if (STREQ(name, "compile"))
-            ++IMCC_INFO(interp)->has_compile;
 
       found_ins:
         if (emit)
@@ -494,28 +482,6 @@
 
 /*
 
-=item C<int do_yylex_init(PARROT_INTERP, yyscan_t* yyscanner)>
-
-=cut
-
-*/
-
-PARROT_EXPORT
-int
-do_yylex_init(PARROT_INTERP, ARGOUT(yyscan_t* yyscanner))
-{
-    ASSERT_ARGS(do_yylex_init)
-    const int retval = yylex_init(yyscanner);
-
-    /* This way we can get the interpreter via yyscanner */
-    if (!retval)
-        yyset_extra(interp, *yyscanner);
-
-    return retval;
-}
-
-/*
-
 =item C<PMC * imcc_compile(PARROT_INTERP, const char *s, int pasm_file, STRING
 **error_message)>
 
@@ -547,7 +513,7 @@
     UINTVAL regs_used[4] = {3, 3, 3, 3};
     INTVAL eval_number;
 
-    do_yylex_init(interp, &yyscanner);
+    yylex_init_extra(interp, &yyscanner);
 
     /* we create not yet anchored PMCs - e.g. Subs: turn off GC */
     Parrot_block_GC_mark(interp);
@@ -710,6 +676,8 @@
 =item C<PMC * IMCC_compile_pir_s(PARROT_INTERP, const char *s, STRING
 **error_message)>
 
+Compile PIR code from a C string. Returns errors in the <STRING> provided.
+
 =cut
 
 */
@@ -729,6 +697,8 @@
 =item C<PMC * IMCC_compile_pasm_s(PARROT_INTERP, const char *s, STRING
 **error_message)>
 
+Compile PASM code from a C string. Returns errors in the <STRING> provided.
+
 =cut
 
 */
@@ -747,6 +717,8 @@
 
 =item C<PMC * imcc_compile_pasm_ex(PARROT_INTERP, const char *s)>
 
+Compile PASM code from a C string. Throws an exception upon errors.
+
 =cut
 
 */
@@ -772,6 +744,8 @@
 
 =item C<PMC * imcc_compile_pir_ex(PARROT_INTERP, const char *s)>
 
+Compile PIR code from a C string. Throws an exception upon errors.
+
 =cut
 
 */
@@ -795,8 +769,8 @@
 
 /*
 
-=item C<static void * imcc_compile_file(PARROT_INTERP, const char *fullname,
-STRING **error_message)>
+=item C<void * imcc_compile_file(PARROT_INTERP, const char *fullname, STRING
+**error_message)>
 
 Compile a file by filename (can be either PASM or IMCC code)
 
@@ -804,8 +778,9 @@
 
 */
 
+PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
-static void *
+void *
 imcc_compile_file(PARROT_INTERP, ARGIN(const char *fullname),
         ARGOUT(STRING **error_message))
 {
@@ -865,7 +840,7 @@
 
     if (ext && STREQ(ext, ".pasm")) {
         void *yyscanner;
-        do_yylex_init(interp, &yyscanner);
+        yylex_init_extra(interp, &yyscanner);
 
         IMCC_INFO(interp)->state->pasm_file = 1;
         /* see imcc.l */
@@ -875,7 +850,7 @@
     }
     else {
         void *yyscanner;
-        do_yylex_init(interp, &yyscanner);
+        yylex_init_extra(interp, &yyscanner);
 
         IMCC_INFO(interp)->state->pasm_file = 0;
         compile_file(interp, fp, yyscanner);
@@ -910,44 +885,6 @@
 
 /*
 
-=item C<void * IMCC_compile_file(PARROT_INTERP, const char *s)>
-
-Note: This function is provided for backward compatibility. This
-function can go away in future.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-void *
-IMCC_compile_file(PARROT_INTERP, ARGIN(const char *s))
-{
-    ASSERT_ARGS(IMCC_compile_file)
-    STRING *error_message;
-    return imcc_compile_file(interp, s, &error_message);
-}
-
-/*
-
-=item C<void * IMCC_compile_file_s(PARROT_INTERP, const char *s, STRING
-**error_message)>
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-void *
-IMCC_compile_file_s(PARROT_INTERP, ARGIN(const char *s),
-        ARGOUT(STRING **error_message))
-{
-    ASSERT_ARGS(IMCC_compile_file_s)
-    return imcc_compile_file(interp, s, error_message);
-}
-
-/*
-
 =item C<void register_compilers(PARROT_INTERP)>
 
 Register additional compilers with the interpreter
@@ -972,8 +909,11 @@
 
 /*
 
-=item C<static int change_op(PARROT_INTERP, IMC_Unit *unit, SymReg **r, int num,
-int emit)>
+=item C<static int change_op_arg_to_num(PARROT_INTERP, IMC_Unit *unit, SymReg
+**r, int num, int emit)>
+
+Change one argument of an op to be numeric in stead of integral. Used when
+integer argument op variants don't exist.
 
 =cut
 
@@ -981,9 +921,9 @@
 
 PARROT_WARN_UNUSED_RESULT
 static int
-change_op(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGMOD(SymReg **r), int num, int emit)
+change_op_arg_to_num(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGMOD(SymReg **r), int num, int emit)
 {
-    ASSERT_ARGS(change_op)
+    ASSERT_ARGS(change_op_arg_to_num)
     int changed = 0;
 
     if (r[num]->type & (VTCONST|VT_CONSTP)) {
@@ -1045,44 +985,11 @@
     ASSERT_ARGS(try_find_op)
     char fullname[64];
     int changed = 0;
-    /*
-     * eq_str, eq_num => eq
-     * ...
-     */
-    if (n == 3 && r[2]->type == VTADDRESS) {
-        if (STREQ(name, "eq_str") || STREQ(name, "eq_num")) {
-            name    = "eq";
-            changed = 1;
-        }
-        else if (STREQ(name, "ne_str") || STREQ(name, "ne_num")) {
-            name    = "ne";
-            changed = 1;
-        }
-        else if (STREQ(name, "le_str") || STREQ(name, "le_num")) {
-            name    = "le";
-            changed = 1;
-        }
-        else if (STREQ(name, "lt_str") || STREQ(name, "lt_num")) {
-            name    = "lt";
-            changed = 1;
-        }
-        else if (STREQ(name, "ge_str") || STREQ(name, "ge_num")) {
-            name    = "ge";
-            changed = 1;
-        }
-        else if (STREQ(name, "gt_str") || STREQ(name, "gt_num")) {
-            name    = "gt";
-            changed = 1;
-        }
-    }
-    else if (n == 3 && (STREQ(name, "cmp_str") || STREQ(name, "cmp_num"))) {
-        name     = "cmp";
-        changed = 1;
-    }
+
     if (n == 3 && r[0]->set == 'N') {
         if (r[1]->set == 'I') {
             const SymReg * const r1 = r[1];
-            changed |= change_op(interp, unit, r, 1, emit);
+            changed |= change_op_arg_to_num(interp, unit, r, 1, emit);
 
             /* op Nx, Iy, Iy: reuse generated temp Nz */
             if (r[2]->set == 'I' && r[2]->type != VTADDRESS && r[2] == r1)
@@ -1090,20 +997,20 @@
         }
 
         if (r[2]->set == 'I' && r[2]->type != VTADDRESS)
-            changed |= change_op(interp, unit, r, 2, emit);
+            changed |= change_op_arg_to_num(interp, unit, r, 2, emit);
     }
 
     /* handle eq_i_n_ic */
     else if (n == 3 && r[1]->set == 'N' && r[0]->set == 'I' &&
             r[2]->type == VTADDRESS) {
-        changed |= change_op(interp, unit, r, 0, emit);
+        changed |= change_op_arg_to_num(interp, unit, r, 0, emit);
     }
     else if (n == 2 && r[0]->set == 'N' && r[1]->set == 'I') {
         /*
          * transcendentals  e.g. acos N, I
          */
         if (!STREQ(name, "fact"))
-            changed = change_op(interp, unit, r, 1, emit);
+            changed = change_op_arg_to_num(interp, unit, r, 1, emit);
     }
 
     if (changed) {
@@ -1118,6 +1025,8 @@
 
 =item C<static const char * try_rev_cmp(const char *name, SymReg **r)>
 
+Try to find a valid op doing the same thing by reversing comparisons.
+
 =cut
 
 */
@@ -1187,11 +1096,12 @@
 
 =item C<void imcc_init(PARROT_INTERP)>
 
+Initialize IMCC with Parrot by registering it as a PIR and PASM compiler.
+
 =cut
 
 */
 
-PARROT_EXPORT
 void
 imcc_init(PARROT_INTERP)
 {
@@ -1236,11 +1146,12 @@
 
 =item C<void imcc_destroy(PARROT_INTERP)>
 
+Deallocate memory associated with IMCC.
+
 =cut
 
 */
 
-PARROT_EXPORT
 void
 imcc_destroy(PARROT_INTERP)
 {

Modified: branches/gsoc_threads/compilers/imcc/pbc.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/pbc.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/pbc.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -736,6 +736,8 @@
 =item C<static subs_t * find_sub_by_subid(PARROT_INTERP, const char *lookup,
 const subs_t *sym, int *pc)>
 
+Find the first sub in the current code segment with a given subid.
+
 =cut
 
 */
@@ -888,7 +890,7 @@
 IMCC_string_from_reg(PARROT_INTERP, ARGIN(const SymReg *r))
 {
     ASSERT_ARGS(IMCC_string_from_reg)
-    const char *buf = r->name;
+    char *buf = r->name;
 
     if (r->type & VT_ENCODED) {
         /*
@@ -896,19 +898,75 @@
          * get first part as charset, rest as string
          */
         STRING     *s;
+        const CHARSET *s_charset;
+        const ENCODING *s_encoding = NULL;
+        const ENCODING *src_encoding;
         const char *charset;
-        char * const p = strchr(r->name, '"');
+        #define MAX_NAME 31
+        char charset_name[MAX_NAME + 1];
+        char encoding_name[MAX_NAME + 1];
+        char * p = strchr(r->name, '"');
+        char * p2 = strchr(r->name, ':');
         PARROT_ASSERT(p && p[-1] == ':');
-
-        p[-1]   = 0;
-        charset = r->name;
+        if (p2 < p -1) {
+            strncpy(encoding_name, buf, p2 - buf);
+            encoding_name[p2-buf] = '\0';
+            strncpy(charset_name, p2 +1, p - p2 - 2);
+            charset_name[p- p2 - 2] = '\0';
+            /*fprintf(stderr, "%s:%s\n", charset_name, encoding_name);*/
+            s_charset = Parrot_find_charset(interp, charset_name);
+            if (s_charset == NULL)
+                Parrot_ex_throw_from_c_args(interp, NULL,
+                        EXCEPTION_INVALID_STRING_REPRESENTATION,
+                        "Unknown charset '%s'", charset_name);
+            s_encoding = Parrot_find_encoding(interp, encoding_name);
+            if (s_encoding == NULL)
+                Parrot_ex_throw_from_c_args(interp, NULL,
+                        EXCEPTION_INVALID_STRING_REPRESENTATION,
+                        "Unknown encoding '%s'", encoding_name);
+        }
+        else {
+            strncpy(charset_name, buf, p - buf - 1);
+            charset_name[p - buf - 1] = '\0';
+            /*fprintf(stderr, "%s\n", charset_name);*/
+            s_charset = Parrot_find_charset(interp, charset_name);
+            if (s_charset == NULL)
+                Parrot_ex_throw_from_c_args(interp, NULL,
+                        EXCEPTION_INVALID_STRING_REPRESENTATION,
+                        "Unknown charset '%s'", charset_name);
+        }
+        if (strcmp(charset_name, "unicode") == 0)
+            src_encoding = Parrot_utf8_encoding_ptr;
+        else
+            src_encoding = Parrot_fixed_8_encoding_ptr;
+        if (s_encoding == NULL)
+            s_encoding = src_encoding;
 
         /* past delim */
         buf     = p + 1;
-        s       = Parrot_str_unescape(interp, buf, '"', charset);
-
-        /* restore colon, as we may reuse this string */
-        p[-1] = ':';
+        if (strcmp(charset_name, "unicode") == 0 && strcmp(encoding_name, "utf8") == 0) {
+            /* Special case needed for backward compatibility with utf8 literals
+             * using \xHH\xHH byte sequences */
+            s = Parrot_str_unescape(interp, buf, '"', "utf8:unicode");
+        }
+        else {
+            p       = buf;
+            p2      = strchr(buf, '"');
+            while (p2 != NULL) {
+               p  = p2;
+               p2 = strchr(p + 1, '"');
+            }
+            {
+                STRING * aux = Parrot_str_new_init(interp, buf, p - buf,
+                        src_encoding, s_charset, 0);
+                s = Parrot_str_unescape_string(interp, aux,
+                        s_charset, s_encoding, PObj_constant_FLAG);
+                if (!CHARSET_VALIDATE(interp, s))
+                       Parrot_ex_throw_from_c_args(interp, NULL,
+                               EXCEPTION_INVALID_STRING_REPRESENTATION,
+                               "Malformed string");
+            }
+        }
         return s;
     }
     else if (*buf == '"') {
@@ -929,6 +987,9 @@
 
 =item C<STRING * IMCC_string_from__STRINGC(PARROT_INTERP, char *buf)>
 
+Creates a Parrot C<STRING> from a string constant found in PIR or PASM. This
+includes cases where charset and/or encoding are specified.
+
 =cut
 
 */
@@ -1267,7 +1328,7 @@
     ASSERT_ARGS(add_const_pmc_sub)
     PMC                   *ns_pmc;
     PMC                   *sub_pmc;
-    Parrot_Sub_attributes *sub, *outer_sub;
+    Parrot_Sub_attributes *sub;
 
     PackFile_ConstTable * const ct    = interp->code->const_table;
     IMC_Unit            * const unit  =
@@ -1280,23 +1341,25 @@
         SymReg     * const ns = unit->_namespace->reg;
 
         /* strip namespace off from front */
+        static const char ns_sep[]  = "@@@";
+        char             *real_name = strstr(r->name, ns_sep);
 
-        static const char ns_sep[] = "@@@";
-        char *real_name = strstr(r->name, ns_sep);
         if (real_name) {
             /* Unfortunately, there is no strrstr, then iterate until last */
             char *aux = strstr(real_name + 3, ns_sep);
+
             while (aux) {
-                 real_name = aux;
-                aux = strstr(real_name + 3, ns_sep);
+                real_name = aux;
+                aux       = strstr(real_name + 3, ns_sep);
             }
+
             real_name += 3;
         }
 
         IMCC_debug(interp, DEBUG_PBC_CONST,
                 "name space const = %d ns name '%s'\n", ns->color, ns->name);
 
-        ns_const  = ns->color;
+        ns_const = ns->color;
 
         if (real_name) {
             char * const p = mem_sys_strdup(real_name);
@@ -1327,15 +1390,17 @@
     else {
         /* use a possible type mapping for the Sub PMCs, and create it */
         const INTVAL type = Parrot_get_ctx_HLL_type(interp,
-                                r->pcc_sub->yield ? enum_class_Coroutine : enum_class_Sub);
+                                r->pcc_sub->yield
+                                    ? enum_class_Coroutine
+                                    : enum_class_Sub);
 
         /* TODO create constant - see also src/packfile.c */
         sub_pmc = Parrot_pmc_new(interp, type);
     }
 
     /* Set flags and get the sub info. */
-    PObj_get_FLAGS(sub_pmc) |= (r->pcc_sub->pragma & SUB_FLAG_PF_MASK);
     PMC_get_sub(interp, sub_pmc, sub);
+    PObj_get_FLAGS(sub_pmc) |= (r->pcc_sub->pragma & SUB_FLAG_PF_MASK);
     Sub_comp_get_FLAGS(sub) |= (r->pcc_sub->pragma & SUB_COMP_FLAG_MASK);
 
     r->color  = add_const_str(interp, IMCC_string_from_reg(interp, r));
@@ -1352,7 +1417,8 @@
         mem_sys_free(oldname);
 
         /* create string constant for it. */
-        unit->subid->color = add_const_str(interp, IMCC_string_from_reg(interp, unit->subid));
+        unit->subid->color = add_const_str(interp,
+            IMCC_string_from_reg(interp, unit->subid));
     }
 
     sub->subid = ct->constants[unit->subid->color]->u.string;
@@ -1365,7 +1431,8 @@
             break;
           case PFC_STRING:
             ns_pmc = Parrot_pmc_new_constant(interp, enum_class_String);
-            VTABLE_set_string_native(interp, ns_pmc, ct->constants[ns_const]->u.string);
+            VTABLE_set_string_native(interp, ns_pmc,
+                ct->constants[ns_const]->u.string);
             break;
           default:
             break;
@@ -1381,7 +1448,7 @@
         sub->n_regs_used[i] = unit->n_regs_used[i];
 
     sub->lex_info     = create_lexinfo(interp, unit, sub_pmc,
-            r->pcc_sub->pragma & P_NEED_LEX);
+                                        r->pcc_sub->pragma & P_NEED_LEX);
     sub->outer_sub    = find_outer(interp, unit);
     sub->vtable_index = -1;
 
@@ -1428,7 +1495,6 @@
     else
         sub->method_name = Parrot_str_new(interp, "", 0);
 
-
     if (unit->has_ns_entry_name == 1) {
         /* Work out the name of the ns entry. */
         if (unit->ns_entry_name) {
@@ -1443,25 +1509,24 @@
 
     Parrot_store_sub_in_namespace(interp, sub_pmc);
 
-    if (sub->outer_sub)
-        PMC_get_sub(interp, sub->outer_sub, outer_sub);
-
     /*
      * store the sub's strings
      * XXX these need to occur before the sub to support thawing properly
      */
     {
         PMC *strings = Parrot_freeze_strings(interp, sub_pmc);
-        int n = VTABLE_elements(interp, strings);
+        int        n = VTABLE_elements(interp, strings);
+
         for (i = 0; i < n; i++) {
-            int unused = add_const_str(interp, VTABLE_get_string_keyed_int(interp, strings, i));
+            int unused = add_const_str(interp,
+                VTABLE_get_string_keyed_int(interp, strings, i));
         }
     }
 
     /* store the sub */
     {
-        const int            k            = add_const_table(interp);
-        PackFile_Constant   * const pfc   = ct->constants[k];
+        const int            k          = add_const_table(interp);
+        PackFile_Constant   * const pfc = ct->constants[k];
 
         pfc->type     = PFC_PMC;
         pfc->u.key    = sub_pmc;
@@ -1469,14 +1534,20 @@
 
         IMCC_INFO(interp)->globals->cs->subs->pmc_const = k;
 
-        IMCC_debug(interp, DEBUG_PBC_CONST,
-                "add_const_pmc_sub '%s' flags %x color %d (%Ss) "
-                "lex_info %s :outer(%Ss)\n",
-                r->name, r->pcc_sub->pragma, k,
-                sub_pmc->vtable->whoami,
-                sub->lex_info ? "yes" : "no",
-                sub->outer_sub? outer_sub->name :
-                Parrot_str_new(interp, "*none*", 0));
+        if (DEBUG_PBC_CONST & IMCC_INFO(interp)->debug) {
+            Parrot_Sub_attributes *outer_sub;
+            if (sub->outer_sub)
+                PMC_get_sub(interp, sub->outer_sub, outer_sub);
+
+            IMCC_debug(interp, DEBUG_PBC_CONST,
+                    "add_const_pmc_sub '%s' flags %x color %d (%Ss) "
+                    "lex_info %s :outer(%Ss)\n",
+                    r->name, r->pcc_sub->pragma, k,
+                    sub_pmc->vtable->whoami,
+                    sub->lex_info  ? "yes" : "no",
+                    sub->outer_sub ? outer_sub->name
+                                   : Parrot_str_new(interp, "*none*", 0));
+        }
 
         /*
          * create entry in our fixup (=symbol) table

Modified: branches/gsoc_threads/compilers/imcc/pcc.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/pcc.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/pcc.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -526,6 +526,9 @@
 =item C<static int pcc_reg_mov(PARROT_INTERP, unsigned char d, unsigned char s,
 void *vinfo)>
 
+Callback for C<Parrot_register_move>. Inserts move instructions in stead of
+actually moving the registers.
+
 =cut
 
 */
@@ -598,6 +601,8 @@
 =item C<static Instruction * move_regs(PARROT_INTERP, IMC_Unit *unit,
 Instruction *ins, size_t n, SymReg **dest, SymReg **src)>
 
+Insert instructions for moving C<n> registers from C<src> to C<dest>.
+
 =cut
 
 */
@@ -720,6 +725,9 @@
 =item C<static void insert_tail_call(PARROT_INTERP, IMC_Unit *unit, Instruction
 *ins, SymReg *sub, SymReg *meth)>
 
+Creates and inserts an appropriate tailcall instruction for either a sub call
+or a method call.
+
 =cut
 
 */

Modified: branches/gsoc_threads/compilers/imcc/reg_alloc.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/reg_alloc.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/reg_alloc.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -229,6 +229,8 @@
 
 =item C<void free_reglist(IMC_Unit *unit)>
 
+Frees the register list associated with a compilation unit.
+
 =cut
 
 */
@@ -405,6 +407,8 @@
 
 =item C<static void sort_reglist(IMC_Unit *unit)>
 
+Sort a compilation unit's register list (by line number of first appearance).
+
 =cut
 
 */
@@ -529,6 +533,8 @@
 
 =item C<static void compute_one_du_chain(SymReg *r, IMC_Unit *unit)>
 
+Compute the DU-chain for one register within the compilation unit.
+
 =cut
 
 */
@@ -691,6 +697,9 @@
 
 =item C<static void vanilla_reg_alloc(PARROT_INTERP, IMC_Unit *unit)>
 
+Vanilla register allocator - assign every virtual register to an actual
+register.
+
 =cut
 
 */
@@ -745,6 +754,9 @@
 
 =item C<static void allocate_lexicals(PARROT_INTERP, IMC_Unit *unit)>
 
+Allocate registers for lexical variables. These must have unique registers
+because they are accessible through the LexPad.
+
 =cut
 
 */

Modified: branches/gsoc_threads/compilers/imcc/symreg.c
==============================================================================
--- branches/gsoc_threads/compilers/imcc/symreg.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/imcc/symreg.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -824,6 +824,9 @@
 
 =item C<static int int_overflows(const SymReg *r)>
 
+Determine whether an integer constant would overflow an C<INTVAL>
+register.
+
 =cut
 
 */

Copied: branches/gsoc_threads/compilers/opsc/Defines.mak (from r47544, trunk/compilers/opsc/Defines.mak)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/Defines.mak	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/Defines.mak)
@@ -0,0 +1,24 @@
+OPSC_DIR = compilers/opsc
+
+OPSC_SOURCES_GENERATED = \
+	$(OPSC_DIR)/gen/Ops/Compiler.pir \
+	$(OPSC_DIR)/gen/Ops/Compiler/Actions.pir \
+	$(OPSC_DIR)/gen/Ops/Compiler/Grammar.pir \
+	$(OPSC_DIR)/gen/Ops/Emitter.pir \
+	$(OPSC_DIR)/gen/Ops/Trans.pir \
+	$(OPSC_DIR)/gen/Ops/Trans/C.pir \
+	$(OPSC_DIR)/gen/Ops/Op.pir \
+	$(OPSC_DIR)/gen/Ops/OpLib.pir \
+	$(OPSC_DIR)/gen/Ops/File.pir \
+	$(OPSC_DIR)/gen/Ops/Renumberer.pir
+
+OPSC_SOURCES = \
+	$(OPSC_DIR)/opsc.pir \
+	$(OPSC_DIR)/src/builtins.pir \
+	$(OPSC_SOURCES_GENERATED)
+
+OPSC_CLEANUPS = \
+	$(OPSC_DIR)/opsc.pbc \
+	$(LIBRARY_DIR)/opsc.pbc \
+	$(OPSC_SOURCES_GENERATED)
+

Copied: branches/gsoc_threads/compilers/opsc/Rules.mak (from r47544, trunk/compilers/opsc/Rules.mak)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/Rules.mak	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/Rules.mak)
@@ -0,0 +1,50 @@
+$(LIBRARY_DIR)/opsc.pbc: $(NQP_RX) $(OPSC_SOURCES) $(NQPRX_LIB_SETTING)
+	$(PARROT) -o $(LIBRARY_DIR)/opsc.pbc $(OPSC_DIR)/opsc.pir
+
+$(OPSC_DIR)/gen/Ops/Compiler.pir: $(OPSC_DIR)/src/Ops/Compiler.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@  $(OPSC_DIR)/src/Ops/Compiler.pm
+
+$(OPSC_DIR)/gen/Ops/Compiler/Actions.pir: $(OPSC_DIR)/src/Ops/Compiler/Actions.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@ $(OPSC_DIR)/src/Ops/Compiler/Actions.pm
+
+$(OPSC_DIR)/gen/Ops/Compiler/Grammar.pir: $(OPSC_DIR)/src/Ops/Compiler/Grammar.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@ $(OPSC_DIR)/src/Ops/Compiler/Grammar.pm
+
+$(OPSC_DIR)/gen/Ops/Emitter.pir: $(OPSC_DIR)/src/Ops/Emitter.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@ $(OPSC_DIR)/src/Ops/Emitter.pm
+
+$(OPSC_DIR)/gen/Ops/File.pir: $(OPSC_DIR)/src/Ops/File.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@ $(OPSC_DIR)/src/Ops/File.pm
+
+$(OPSC_DIR)/gen/Ops/Op.pir: $(OPSC_DIR)/src/Ops/Op.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@ $(OPSC_DIR)/src/Ops/Op.pm
+
+$(OPSC_DIR)/gen/Ops/OpLib.pir: $(OPSC_DIR)/src/Ops/OpLib.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@  $(OPSC_DIR)/src/Ops/OpLib.pm
+
+$(OPSC_DIR)/gen/Ops/Trans.pir: $(OPSC_DIR)/src/Ops/Trans.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@ $(OPSC_DIR)/src/Ops/Trans.pm
+
+$(OPSC_DIR)/gen/Ops/Trans/C.pir: $(OPSC_DIR)/src/Ops/Trans/C.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@ $(OPSC_DIR)/src/Ops/Trans/C.pm
+
+$(OPSC_DIR)/gen/Ops/Renumberer.pir: $(OPSC_DIR)/src/Ops/Renumberer.pm $(NQP_RX)
+	$(NQP_RX) --target=pir --output=$@ $(OPSC_DIR)/src/Ops/Renumberer.pm
+
+# Target to force rebuild opsc from main Makefile
+$(OPSC_DIR)/ops2c.nqp: $(LIBRARY_DIR)/opsc.pbc
+
+$(OPS2C): $(OPSC_DIR)/ops2c.nqp $(LIBRARY_DIR)/opsc.pbc $(NQP_RX) $(PBC_TO_EXE)
+	$(NQP_RX) --target=pir $(OPSC_DIR)/ops2c.nqp >ops2c.pir
+	$(PARROT) -o ops2c.pbc ops2c.pir
+	$(PBC_TO_EXE) ops2c.pbc
+
+$(INSTALLABLEOPS2C): $(OPS2C) src/install_config$(O)
+	$(PBC_TO_EXE) ops2c.pbc --install
+
+opsc: $(LIBRARY_DIR)/opsc.pbc
+
+# Local variables:
+#   mode: makefile
+# End:
+# vim: ft=make:

Copied: branches/gsoc_threads/compilers/opsc/TODO (from r47544, trunk/compilers/opsc/TODO)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/TODO	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/TODO)
@@ -0,0 +1,14 @@
+Simple todo.
+
+Required for initial self-hosting:
+ 
+  * NONE! We are selfhosted now!
+
+Required for full implementation:
+  * Handling #line directives.
+  * A LOT OF DOCUMENTATION.
+  * Add tests for Trans::C independent from 06-emitter.t
+  * Add tests for dynamic mode of Emitter.
+
+Nice to have:
+  * Profiling and performance tuning of ops parsing (we need pmichaud).

Copied: branches/gsoc_threads/compilers/opsc/gen/Ops/Compiler/IGNOREME (from r47544, trunk/compilers/opsc/gen/Ops/Compiler/IGNOREME)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/gen/Ops/Compiler/IGNOREME	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/gen/Ops/Compiler/IGNOREME)
@@ -0,0 +1 @@
+I just dummy file. Please ignore me. Please...

Copied: branches/gsoc_threads/compilers/opsc/gen/Ops/Trans/IGNOREME (from r47544, trunk/compilers/opsc/gen/Ops/Trans/IGNOREME)
==============================================================================

Copied: branches/gsoc_threads/compilers/opsc/ops2c.nqp (from r47544, trunk/compilers/opsc/ops2c.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/ops2c.nqp	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/ops2c.nqp)
@@ -0,0 +1,125 @@
+#! ./parrot-nqp
+# $Id$
+
+pir::load_bytecode("opsc.pbc");
+pir::load_bytecode("Getopt/Obj.pbc");
+
+my $core := 0;
+my @files;
+my $emit_lines := 1;
+
+my $getopts := Q:PIR{ %r = new ['Getopt';'Obj'] };
+
+$getopts.notOptStop();
+
+# build core ops
+my $arg := $getopts.add();
+$arg.long('core');
+$arg.short('c');
+
+# build the dynops in one .ops file
+$arg := $getopts.add();
+$arg.long('dynamic');
+$arg.short('d');
+$arg.type('String');
+
+# don't write to any files
+$arg := $getopts.add();
+$arg.long('debug');
+$arg.short('g');
+
+# don't add line numbers to generated files (not implemented)
+$arg := $getopts.add();
+$arg.long('no-lines');
+$arg.short('n');
+
+# print anemic usage information and exit
+$arg := $getopts.add();
+$arg.long('help');
+$arg.short('h');
+
+# suppress timing and debug output on stdout
+$arg := $getopts.add();
+$arg.long('quiet');
+$arg.short('q');
+
+my $opts := $getopts.get_options(pir::getinterp__p()[2]);
+
+if $opts<core> {
+    @files := <
+        src/ops/core.ops
+        src/ops/bit.ops
+        src/ops/cmp.ops
+        src/ops/io.ops
+        src/ops/math.ops
+        src/ops/object.ops
+        src/ops/pmc.ops
+        src/ops/set.ops
+        src/ops/string.ops
+        src/ops/sys.ops
+        src/ops/var.ops
+        src/ops/experimental.ops
+    >;
+    $core := 1;
+}
+elsif $opts<dynamic> {
+    $core := 0;
+    @files.push( $opts<dynamic>);
+}
+elsif (+$opts == 0 || $opts<help>) {
+    say("This is ops2c, part of the Parrot VM's build infrastructure.
+normal options:
+ -c --core                generate the C code for core ops (must be run from within Parrot's build directory)
+ -d --dynamic <file.ops>  generate the C code for the dynamic ops in a single .ops file
+ -q --quiet               don't report any non-error messages
+ -h --help                print this usage information
+ -n --no-lines            do not print #line directives in generated C code (line numbers are not currently supported)
+
+#debugging options:
+ -g --debug               perform all processing but do not write to any files
+");
+    pir::exit(0);
+}
+
+if ($opts<no-lines>) {
+    #TODO: figure out how to generate line numbers
+    # $emit_lines is currently ignored
+    $emit_lines := 0;
+}
+
+my $trans := Ops::Trans::C.new();
+my $start_time := pir::time__N();
+my $debug := ?$opts<debug>;
+my $quiet := ?$opts<quiet>;
+my $f;
+my $renum;
+
+if $core {
+    my $lib := Ops::OpLib.new(
+        :skip_file('src/ops/ops.skip'),
+        :quiet($quiet)
+    );
+    $f := Ops::File.new(|@files, :oplib($lib), :core(1), :quiet($quiet));
+}
+else {
+    $f := Ops::File.new(|@files, :core(0), :quiet($quiet));
+}
+
+pir::sprintf(my $time, "%.3f", [pir::time__N() - $start_time] );
+$quiet || say("# Ops parsed in $time seconds.");
+
+my $emitter := Ops::Emitter.new(
+    :ops_file($f), :trans($trans),
+    :script('ops2c.nqp'), :file(@files[0]),
+    :flags( hash( core => $core, quiet => $quiet ) ),
+);
+
+unless $debug {
+    if $core {
+        $emitter.print_ops_num_files();
+    }
+    $emitter.print_c_header_files();
+    $emitter.print_c_source_file();
+}
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/compilers/opsc/opsc.pir (from r47544, trunk/compilers/opsc/opsc.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/opsc.pir	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/opsc.pir)
@@ -0,0 +1,37 @@
+#! parrot
+# Copyright (C) 2009-2010, Parrot Foundation.
+# $Id$
+
+.namespace [ 'Ops';'Compiler' ]
+
+.include 'compilers/opsc/src/builtins.pir'
+.include 'compilers/opsc/gen/Ops/Compiler/Grammar.pir'
+.include 'compilers/opsc/gen/Ops/Compiler/Actions.pir'
+.include 'compilers/opsc/gen/Ops/Compiler.pir'
+
+.include 'compilers/opsc/gen/Ops/Emitter.pir'
+.include 'compilers/opsc/gen/Ops/Trans.pir'
+.include 'compilers/opsc/gen/Ops/Trans/C.pir'
+
+.include 'compilers/opsc/gen/Ops/Op.pir'
+.include 'compilers/opsc/gen/Ops/OpLib.pir'
+.include 'compilers/opsc/gen/Ops/File.pir'
+.include 'compilers/opsc/gen/Ops/Renumberer.pir'
+
+
+.namespace []
+.sub 'main' :main
+    .param pmc args
+
+    $P0 = compreg 'Ops'
+    $P0.'command_line'(args)
+    exit 0
+.end
+
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/Compiler.pm (from r47544, trunk/compilers/opsc/src/Ops/Compiler.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/Compiler.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/Compiler.pm)
@@ -0,0 +1,17 @@
+#! nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+class Ops::Compiler is HLL::Compiler;
+
+INIT {
+    Ops::Compiler.language('Ops');
+    Ops::Compiler.parsegrammar(Ops::Compiler::Grammar);
+    Ops::Compiler.parseactions(Ops::Compiler::Actions);
+}
+
+method set_oplib($oplib) {
+    $Ops::Compiler::Actions::OPLIB := $oplib;
+}
+
+# vim: ft=perl6 expandtab shiftwidth=4:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/Compiler/Actions.pm (from r47544, trunk/compilers/opsc/src/Ops/Compiler/Actions.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/Compiler/Actions.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/Compiler/Actions.pm)
@@ -0,0 +1,410 @@
+#! nqp
+# Copyright (C) 2009-2010, Parrot Foundation.
+# $Id$
+
+class Ops::Compiler::Actions is HLL::Actions;
+
+our $OPLIB;
+
+INIT {
+    pir::load_bytecode("nqp-setting.pbc");
+    $OPLIB := 0;
+}
+
+method TOP($/) {
+    make $<body>.ast;
+}
+
+method body($/) {
+    my $past := PAST::Stmts.new(
+        :node($/)
+    );
+
+    $past<preamble> := PAST::Stmts.new(
+        :node($/)
+    );
+    $past<ops> := PAST::Stmts.new(
+        :node($/)
+    );
+
+    for $<preamble> {
+        $past<preamble>.push($_<preamble_guts>);
+    }
+
+    for $<op> {
+        my $ops := $_.ast;
+        my $op_skip_table;
+        if $OPLIB {
+            $op_skip_table := $OPLIB.op_skip_table;
+        }
+        for @($ops) -> $op {
+            if $OPLIB && !$op_skip_table.exists($op.full_name) || !$OPLIB {
+                $past<ops>.push($op);
+            }
+        }
+    }
+
+    make $past;
+}
+
+method preamble($/) {
+    make PAST::Op.new(
+        :node($/),
+        :pasttype('preamble'),
+        ~$<preamble_guts>
+    );
+}
+
+method op($/) {
+
+    # Handling flags.
+    my %flags := hash();
+    for $<op_flag> {
+        %flags{~$_<identifier>} := 1;
+    }
+
+    my @args := @($<signature>.ast);
+
+    my @norm_args := normalize_args(@args);
+    # We have to clone @norm_args. Otherwise it will be destroyed...
+    my @variants  := expand_args(pir::clone__PP(@norm_args));
+
+    my $op := Ops::Op.new(
+        :name(~$<op_name>),
+    );
+
+    # Flatten PAST::Stmts into Op.
+    for @($<op_body>.ast) {
+        $op.push($_);
+    }
+
+    for $<op_body>.ast<jump> {
+        $op.add_jump($_);
+    }
+    if ~$<op_name> eq 'runinterp' {
+        $op.add_jump('PARROT_JUMP_RELATIVE');
+    }
+    $op<flags> := %flags;
+    $op<args>  := @args;
+    $op<type>  := ~$<op_type>;
+    $op<normalized_args> := @norm_args;
+
+    if !%flags<flow> {
+        my $goto_next := PAST::Op.new(
+            :pasttype('call'),
+            :name('goto_offset'),
+            PAST::Op.new(
+                :pasttype<call>,
+                :name<OPSIZE>,
+            )
+        );
+
+        my $nl := "\n";
+        $op.push(PAST::Op.new(
+                :pasttype<inline>,
+                :inline($nl)
+            ));
+        $op.push($goto_next);
+        $op.push(PAST::Op.new(
+                :pasttype<inline>,
+                :inline<;>
+            ));
+    }
+
+    my $past := PAST::Stmts.new(
+        :node($/)
+    );
+
+    if @variants {
+        for @variants {
+            my $new_op := pir::clone__PP($op);
+            $new_op<arg_types> := $_;
+            $past.push($new_op);
+        }
+    }
+    else {
+        $past.push($op);
+    }
+
+    make $past;
+}
+
+# Normalize args
+# For each arg produce LoL of all available variants
+# E.g. "in" will produce "i" and "ic" variants
+#
+# type one of <i p s n>
+# direction one of <i o io>
+# is_label one of <0 1>
+
+sub normalize_args(@args) {
+    my @result;
+    for @args -> $arg {
+        my $res := PAST::Var.new(
+            :isdecl(1)
+        );
+
+        if $arg<type> eq 'LABEL' {
+            $res<type>     := 'i';
+            $res<is_label> := 1;
+        }
+        else {
+            $res<is_label> := 0;
+        }
+
+        if $arg<type> eq 'INTKEY' {
+            $res<type> := 'ki';
+        }
+        elsif $arg<type> ne 'LABEL' {
+            $res<type> := lc(substr($arg<type>, 0, 1));
+        }
+
+        my $use := $arg<direction>;
+
+        if $use eq 'in' {
+            $res<variant>   := $res<type> ~ "c";
+            $res<direction> := 'i';
+        }
+        elsif $use eq 'invar' {
+            $res<direction> := 'i';
+        }
+        elsif $use eq 'inconst' {
+            $res<type>      := $res<type> ~ "c";
+            $res<direction> := 'i';
+        }
+        elsif $use eq 'inout' {
+            $res<direction> := 'io';
+        }
+        else {
+            $res<direction> := 'o';
+        }
+
+        @result.push($res);
+    }
+    @result;
+}
+
+=begin
+
+=item C<expand_args(@args)>
+
+Given an argument list, returns a list of all the possible argument
+combinations.
+
+=end
+sub expand_args(@args) {
+
+    return list() unless @args;
+
+    my $arg := @args.shift;
+
+    my @var := list($arg<type>);
+    if $arg<variant> {
+        @var.push($arg<variant>);
+    }
+
+    my @list := expand_args(@args);
+    unless + at list {
+        return @var;
+    }
+
+    my @results;
+    for @list -> $l {
+        for @var -> $v {
+            # NQP can't handle it automagically. So wrap $l into list.
+            my @l := pir::does__IPS($l, 'array') ?? $l !! list($l);
+            @results.push(list($v, |@l));
+        }
+    }
+
+    @results;
+}
+
+
+method signature($/) {
+    my $past := PAST::Stmts.new(
+        :node($/)
+    );
+
+    for $<op_param> {
+        $past.push($_.ast);
+    }
+
+    make $past;
+}
+
+method op_param($/) {
+    my $past := PAST::Var.new(
+        :node($/),
+        :isdecl(1)
+    );
+
+    # We have to store 2 "types". Just set 2 properties on Var for now
+    $past<direction> := ~$<op_param_direction>;
+    $past<type>      := ~$<op_param_type>;
+
+    make $past;
+}
+
+method op_body($/) {
+    my $past := PAST::Stmts.new(
+        :node($/),
+    );
+    $past<jump> := list();
+    my $prev_words := '';
+    for $<body_word> {
+        if $prev_words && $_<word> {
+            $prev_words := $prev_words ~ ~$_<word>;
+        }
+        elsif $_<word> {
+            $prev_words := ~$_<word>;
+        }
+        else {
+            $past.push(PAST::Op.new(
+                :pasttype('inline'),
+                :inline($prev_words),
+            ));
+            $prev_words := '';
+
+            if $_<macro_param> {
+                $past.push($_<macro_param>.ast);
+            }
+            elsif $_<op_macro> {
+                $past.push($_<op_macro>.ast);
+                for $_<op_macro>.ast<jump> {
+                    $past<jump>.push($_);
+                }
+            }
+        }
+    }
+    if $prev_words {
+        $past.push(PAST::Op.new(
+            :pasttype('inline'),
+            :inline($prev_words)
+        ));
+    }
+    make $past;
+}
+
+method macro_param($/) {
+    make PAST::Var.new(
+        :name(~$<num>),
+        :node($/),
+    );
+}
+
+method body_word($/) {
+    #say('# body_word: '~ ~$<word>);
+    my $past;
+    if $<word> {
+        $past := PAST::Op.new(
+            :pasttype('inline'),
+            :inline(~$<word>)
+        );
+    }
+    elsif $<macro_param> {
+        $past := $<macro_param>.ast;
+    }
+    elsif $<op_macro> {
+        $past := $<op_macro>.ast;
+    }
+    else {
+        die('horribly');
+    }
+    #_dumper($past);
+    make $past;
+}
+
+method op_macro($/) {
+    #say('# op_macro');
+    # Generate set of calls to Trans:
+    # goto NEXT()         -> goto_offset(opsize())
+    # goto OFFSET($addr)  -> goto_offset($addr)
+    # goto ADDRESS($addr) -> goto_address($addr)
+    # expr NEXT()         -> expr_offset(opsize())
+    # expr OFFSET($addr)  -> expr_offset($addr)
+    # expr ADDRERR($addr) -> expr_address($addr)
+    # restart NEXT()      -> restart_offset(opsize()); goto_address(0)
+    # restart OFFSET()    -> restart_offset($addr); goto_offset($addr)
+    # XXX In trunk "restart ADDRESS" equivalent of "goto ADDRESS".
+    # restart ADDRESS()   -> restart_address($addr); goto_address($addr)
+
+    my $macro_type := ~$<macro_type>;
+    my $macro_dest := ~$<macro_destination>;
+    my $is_next    := $macro_dest eq 'NEXT';
+    my $macro_name := $macro_type ~ '_' ~ lc($is_next ?? 'offset' !! $macro_dest);
+
+    my $past  := PAST::Stmts.new;
+
+    my $macro := PAST::Op.new(
+        :pasttype('call'),
+        :name($macro_name),
+    );
+    $past.push($macro);
+
+    $past<jump> := list();
+
+    if $macro_type ne 'expr' && $macro_dest eq 'OFFSET' {
+        $past<jump>.push('PARROT_JUMP_RELATIVE');
+    }
+
+    if $macro_type eq 'expr' || $macro_type eq 'goto' {
+        if $is_next {
+            $macro.push(PAST::Op.new(
+                :pasttype<call>,
+                :name<OPSIZE>,
+            ));
+        }
+        else {
+            process_op_macro_body_word($/, $macro);
+        }
+    }
+    elsif $macro_type eq 'restart' {
+        if $is_next {
+            $macro.push(PAST::Op.new(
+                :pasttype<call>,
+                :name<OPSIZE>,
+            ));
+        }
+        else {
+            process_op_macro_body_word($/, $macro);
+        }
+
+        $macro := PAST::Op.new(
+            :pasttype<call>,
+            :name<goto_address>,
+        );
+        if $is_next {
+            $macro.push(PAST::Op.new(
+                :pasttype<inline>,
+                :inline<0>,
+            ));
+        }
+        else {
+            process_op_macro_body_word($/, $macro);
+        }
+        $past.push($macro);
+    }
+    else {
+        pir::die("Horribly");
+    }
+
+    make $past;
+}
+
+sub process_op_macro_body_word($/, $macro) {
+    #_dumper($<body_word>);
+    if $<body_word> {
+        for $<body_word> {
+            #say(' word ' ~ $_);
+            my $bit := $_.ast;
+            $macro.push($_.ast) if defined($bit);
+        }
+    }
+}
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab ft=perl6 shiftwidth=4:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/Compiler/Grammar.pm (from r47544, trunk/compilers/opsc/src/Ops/Compiler/Grammar.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/Compiler/Grammar.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/Compiler/Grammar.pm)
@@ -0,0 +1,151 @@
+#! nqp
+# Copyright (C) 2009-2010, Parrot Foundation.
+# $Id$
+
+INIT { pir::load_bytecode('HLL.pbc'); }
+
+grammar Ops::Compiler::Grammar is HLL::Grammar;
+
+rule TOP {
+    <body>
+    [ $ || <.panic: 'Syntax error'> ]
+}
+
+rule body {
+    [ <preamble> | <op> ]*
+}
+
+token preamble {
+    <begin_preamble>
+    <preamble_guts>
+    <end_preamble>
+}
+
+regex preamble_guts {
+    .*? <?end_preamble>
+}
+
+token begin_preamble {
+    ^^'BEGIN_OPS_PREAMBLE'
+}
+
+token end_preamble {
+    ^^'END_OPS_PREAMBLE'
+}
+
+rule op {
+    <op_type>? 'op' <op_name=identifier>
+    [ '(' <signature> ')' || <.panic: "Fail to parse signature"> ]
+    <op_flag>*
+    [ <op_body> || <.panic: "Fail to parse op body"> ]
+    {*}
+}
+
+token op_type {
+    [ 'inline' | 'function' ]
+}
+
+rule signature { [ [<.ws><op_param><.ws>] ** ',' ]? }
+
+rule op_param {
+    <op_param_direction> <op_param_type>
+}
+
+token op_param_direction {
+    # Order is crucial. NQP doesn't support LTM yet.
+    [
+    | 'inout'
+    | 'inconst'
+    | 'invar'
+    | 'in'
+    | 'out'
+    ]
+}
+
+token op_param_type {
+    # Order is crucial. NQP doesn't support LTM yet.
+    [
+    | 'INTKEY'
+    | 'INT'
+    | 'NUM'
+    | 'STR'
+    | 'PMC'
+    | 'KEY'
+    | 'LABEL'
+    ]
+}
+
+rule op_flag {
+    ':' <identifier>
+}
+
+# OpBody starts with '{' and ends with single '}' on line.
+regex op_body {
+    '{'
+    <body_word>*?
+    ^^ '}'
+}
+
+#Process op body by breaking it into "words" consisting entirely of whitespace,
+#alnums or a single punctuation, then checking for interesting macros (e.g $1
+#or goto NEXT() ) in the midst of the words.
+token body_word {
+    [
+    || <macro_param>
+    || <op_macro>
+    || <word>
+    ]
+}
+
+token word {
+    || <quote>
+    || <ident>
+    || <alnum>
+    || <punct>
+    || <ws>
+}
+
+proto token quote { <...> }
+token quote:sym<apos> { <?[']> <quote_EXPR: ':q'>  }
+token quote:sym<dblq> { <?["]> <quote_EXPR: ':q'> }
+
+token macro_param {
+    '$' $<num>=<integer> # Up to nine params.
+}
+
+rule op_macro {
+    <macro_type> <macro_destination> '(' <body_word>*? ')'
+}
+
+token macro_type {
+    [
+    | 'goto'
+    | 'expr'
+    | 'restart'
+    ]
+}
+
+token macro_destination {
+    [
+    | 'OFFSET'
+    | 'ADDRESS'
+    | 'NEXT'
+    ]
+}
+
+token identifier {
+    <.ident>
+}
+
+# ws handles whitespace, pod and perl and C comments
+token ws {
+  [
+  | \s+
+  | '#' \N*
+  | ^^ '=' .*? \n '=cut'
+  | '/*' .*? '*/'
+  ]*
+}
+
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/Emitter.pm (from r47544, trunk/compilers/opsc/src/Ops/Emitter.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/Emitter.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/Emitter.pm)
@@ -0,0 +1,384 @@
+#! nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+class Ops::Emitter is Hash;
+
+=begin
+
+Emitter.
+
+=end
+
+method new(:$ops_file!, :$trans!, :$script!, :$file, :%flags!) {
+    self<ops_file>  := $ops_file;
+    self<trans>     := $trans;
+    self<script>    := $script;
+    self<file>      := $file;
+    self<flags>     := %flags;
+    self<quiet>     := %flags<quiet> // 0;
+
+    # Preparing various bits.
+    my $suffix := $trans.suffix();
+    my $base   := 'core';
+
+    if !%flags<core> {
+        $base := subst( $file, /.ops$$/, '');
+        $base := subst( $base, /.*\//, '');
+    }
+
+    my $base_ops_stub := $base ~ '_ops' ~ $suffix;
+    my $base_ops_h    := $base_ops_stub ~ '.h';
+
+    self<base>    := $base;
+    self<suffix>  := $suffix;
+    self<bs>      := $base ~ $suffix ~ '_';
+
+    if %flags<core> {
+        self<include> := "parrot/oplib/$base_ops_h";
+        self<func_header> := (~%flags<dir>) ~ "include/" ~ self<include>;
+        self<enum_header> := (~%flags<dir>) ~ "include/parrot/oplib/ops.h";
+        self<source>  := (~%flags<dir>) ~ "src/ops/$base_ops_stub.c";
+    }
+    else {
+        my $dynops_dir := subst( $file, /\w+\.ops$$/, '');
+        self<include> := $base ~ "_ops.h";
+        self<func_header>  := $dynops_dir ~ self<include>;
+        self<source>  := $dynops_dir ~ $base ~ "_ops.c";
+    }
+
+    self<sym_export> := %flags<core>
+                        ?? ''
+                        !! 'PARROT_DYNEXT_EXPORT';
+
+    self<init_func>  := join('_',
+        'Parrot', 'DynOp', $base ~ $suffix, |$ops_file.version );
+
+    # Prepare ops
+    $trans.prepare_ops(self, $ops_file);
+
+    self;
+};
+
+method ops_file()   { self<ops_file> };
+method trans()      { self<trans> };
+method script()     { self<script> };
+method file()       { self<file> };
+method flags()      { self<flags> };
+method sym_export() { self<sym_export> };
+method init_func()  { self<init_func> };
+
+method base()       { self<base> };
+method suffix()     { self<suffix> };
+method bs()         { self<bs> };
+
+method print_c_header_files() {
+
+    my $fh := pir::new__Ps('FileHandle');
+    $fh.open(self<func_header>, 'w')
+        || die("Can't open "~ self<func_header>);
+    self.emit_c_op_func_header($fh);
+    $fh.close();
+
+    if self.ops_file<core> {
+        $fh := pir::new__Ps('FileHandle');
+        $fh.open(self<enum_header>, 'w')
+            || die("Can't open "~ self<enum_header>);
+        self.emit_c_op_enum_header($fh);
+        $fh.close();
+    }
+}
+
+method emit_c_op_func_header($fh) {
+
+    self._emit_guard_prefix($fh, self<func_header>);
+
+    self._emit_preamble($fh);
+
+    self._emit_includes($fh);
+
+    # Emit runcore specific part.
+    self.trans.emit_c_op_funcs_header_part($fh);
+
+    self._emit_guard_suffix($fh, self<func_header>);
+
+    self._emit_coda($fh);
+}
+
+method emit_c_op_enum_header($fh) {
+
+    self._emit_guard_prefix($fh, self<enum_header>);
+
+    self._emit_preamble($fh);
+
+    self._emit_c_op_enum_header_part($fh);
+
+    self._emit_guard_suffix($fh, self<enum_header>);
+
+    self._emit_coda($fh);
+}
+
+method print_ops_num_files() {
+
+    my $file := ~self<dir> ~ "include/parrot/opsenum.h";
+    my $fh := pir::new__Ps('FileHandle');
+    $fh.open($file, 'w')
+        || die("Can't open $file for writing: " ~ ~pir::err__s());
+    self.emit_c_opsenum_header($fh, $file);
+    $fh.close();
+}
+
+method emit_c_opsenum_header($fh, $file) {
+
+    self._emit_guard_prefix($fh, $file);
+
+    self._emit_preamble($fh);
+
+    self.emit_opsenum_h_body($fh);
+
+    self._emit_guard_suffix($fh, $file);
+
+    self._emit_coda($fh);
+}
+
+method emit_opsenum_h_body($fh) {
+
+    $fh.print("enum OPS_ENUM \{\n");
+
+    my $max_op_num := 0;
+    for self.ops_file.ops -> $op {
+        if !self.ops_file<core> || !self.ops_file.oplib.op_skip_table.exists( $op.full_name ) {
+            my $space := pir::repeat__SsI(' ', 30 - pir::length__Is($op.full_name));
+            $fh.print("    enum_ops_" ~ $op.full_name ~ $space ~ "=");
+            $space := pir::repeat__SsI(' ', 5 - pir::length__Is(~$max_op_num));
+            $fh.print($space ~ $max_op_num ~ ",\n");
+            $max_op_num++;
+        }
+    }
+
+    $fh.print("};\n");
+}
+
+method print_c_source_file() {
+    # Build file in memeory
+    my $fh := pir::new__Ps('StringHandle');
+    $fh.open('dummy.c', 'w');
+    self.emit_c_source_file($fh);
+    $fh.close();
+
+    # ... and write it to disk
+    my $final := pir::new__Ps('FileHandle');
+    $final.open(self<source>, 'w') || die("Can't open filehandle");
+    $final.print($fh.readall());
+    $final.close();
+    return self<source>;
+}
+
+method emit_c_source_file($fh) {
+    self._emit_source_preamble($fh);
+
+    self.trans.emit_source_part(self, $fh);
+
+    self._emit_op_lib_descriptor($fh);
+
+    self.trans.emit_op_lookup(self, $fh);
+
+    self._emit_init_func($fh);
+    self._emit_dymanic_lib_load($fh);
+    self._emit_coda($fh);
+}
+
+method _emit_c_op_enum_header_part($fh) {
+    my $sb := pir::new__Ps('StringBuilder');
+    my $last_op_code := +self.ops_file.ops - 1;
+    for self.ops_file.ops -> $op {
+        $sb.append_format("    PARROT_OP_%0%1 %2 /* %3 */\n",
+            $op.full_name,
+            ($op.code == $last_op_code ?? ' ' !! ','),
+            pir::repeat__SsI(' ', 30 - pir::length__Is($op.full_name)),
+            $op.code);
+    }
+    $fh.print(q|
+typedef enum {
+|);
+    $fh.print(~$sb);
+    $fh.print(q|
+} parrot_opcode_enums;
+|);
+}
+
+method _emit_source_preamble($fh) {
+
+    self._emit_preamble($fh);
+    $fh.print(qq|
+#include "{self<include>}"
+#include "pmc/pmc_parrotlibrary.h"
+#include "pmc/pmc_callcontext.h"
+
+{self.trans.defines(self)}
+
+|);
+
+    $fh.print(self.ops_file.preamble);
+}
+
+method _emit_op_lib_descriptor($fh) {
+
+    my $core_type := self.trans.core_type;
+    $fh.print(q|
+/*
+** op lib descriptor:
+*/
+
+static op_lib_t | ~ self.bs ~ q|op_lib = {| ~ qq|
+  "{self.base}",               /* name */
+  "{self.suffix}",             /* suffix */
+  $core_type,                       /* core_type = PARROT_XX_CORE */
+  0,                                /* flags */
+  {self.ops_file.version_major},    /* major_version */
+  {self.ops_file.version_minor},    /* minor_version */
+  {self.ops_file.version_patch},    /* patch_version */
+  {+self.ops_file.ops},             /* op_count */
+  {self.trans.op_info(self)},       /* op_info_table */
+  {self.trans.op_func(self)},       /* op_func_table */
+  {self.trans.getop(self)}          /* op_code() */ | ~ q|
+};
+|);
+}
+
+method _emit_init_func($fh) {
+
+    my $init1    := self.trans.init_func_init1;
+    my $dispatch := self.trans.init_func_disaptch;
+
+    # TODO There is a bug in NQP about \{
+    $fh.print(q|
+op_lib_t *
+| ~ self.init_func ~ q|(PARROT_INTERP, long init) {
+    /* initialize and return op_lib ptr */
+    if (init == 1) {
+| ~ $init1 ~ q|
+        return &| ~ self.bs ~q|op_lib;
+    }
+    /* set op_lib to the passed ptr (in init) */
+    else if (init) {
+| ~ $dispatch ~ q|
+    }
+    /* deinit - free resources */
+    else {
+        hop_deinit(interp);
+    }
+    return NULL;
+}
+
+|);
+}
+
+method _emit_dymanic_lib_load($fh) {
+
+    if self.flags<core> {
+        return;
+    }
+
+    my $load_func := join('_',
+            q{Parrot}, q{lib}, self.base, q{ops} ~ self.suffix, q{load}, );
+    $fh.print(qq|
+/*
+ * dynamic lib load function - called once
+ */
+{self.sym_export} PMC*
+$load_func(PARROT_INTERP);
+
+{self.sym_export} PMC*
+$load_func(PARROT_INTERP)
+| ~ q|
+{
+    PMC *const lib = Parrot_pmc_new(interp, enum_class_ParrotLibrary);
+    ((Parrot_ParrotLibrary_attributes*)PMC_data(lib))->oplib_init = (void *) | ~ self.init_func ~q|;
+    dynop_register(interp, lib);
+    return lib;
+}
+|);
+}
+
+# given a headerfile name like "include/parrot/oplib/core_ops.h", this
+# returns a string like "PARROT_OPLIB_CORE_OPS_H_GUARD"
+method _generate_guard_macro_name($filename) {
+    $filename := subst($filename, /.h$/, '');
+    #my @path = File::Spec->splitdir($filename);
+    my @path := split('/', $filename);
+    @path.shift if @path[0]~'/' eq self<flags><dir>;
+    @path.shift if @path[0] eq 'include';
+    @path.shift if @path[0] eq 'parrot';
+    uc( join( '_', 'parrot', |@path, 'h', 'guard' ) );
+}
+
+
+method _emit_guard_prefix($fh, $filename) {
+    my $guardname := self._generate_guard_macro_name($filename);
+    $fh.print('
+/* $Id' ~ '$ */
+');
+    $fh.print(qq/
+#ifndef $guardname
+#define $guardname
+
+/);
+}
+
+method _emit_guard_suffix($fh, $filename) {
+    my $guardname := self._generate_guard_macro_name($filename);
+    $fh.print(qq|
+
+#endif /* $guardname */
+|);
+}
+
+
+method _emit_coda($fh) {
+    $fh.print(q|
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ *   buffer-read-only: t
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+|);
+}
+
+method _emit_includes($fh) {
+
+    $fh.print(qq|
+#include "parrot/parrot.h"
+#include "parrot/oplib.h"
+#include "parrot/runcore_api.h"
+
+{self.sym_export} op_lib_t *{self.init_func}(PARROT_INTERP, long init);
+
+|);
+}
+
+method _emit_preamble($fh) {
+
+    $fh.print(qq|
+/* ex: set ro:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from '{self<file>}' (and possibly other
+ * .ops files). by {self<script>}.
+ *
+ * Any changes made here will be lost!  To regenerate this file after making
+ * changes to any ops, use the bootstap-ops makefile target.
+ *
+ */
+|);
+
+    if !self.flags<core> {
+        $fh.print("#define PARROT_IN_EXTENSION\n");
+    }
+
+}
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/File.pm (from r47544, trunk/compilers/opsc/src/Ops/File.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/File.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/File.pm)
@@ -0,0 +1,313 @@
+#! nqp
+# Copyright (C) 2001-2009, Parrot Foundation.
+# $Id$
+
+# XXX Better to put this into docs/ somewhere.
+
+=begin
+
+=head1 NAME
+
+Ops::File - Ops To C Code Generation
+
+=head1 SYNOPSIS
+
+  use Ops::File;
+
+=head1 DESCRIPTION
+
+C<Ops::File> takes one or more files of op functions and
+creates real C code for them.
+
+This class is used by F<tools/build/ops2c.pl>.
+
+=head2 Op Functions
+
+For ops that have trivial bodies (such as just a call to some other
+function and a C<return> statement), opcode functions are in the format:
+
+    inline op opname (args) :flags {
+        ... body of function ...
+    }
+
+Note that currently the C<inline> op type is ignored.
+
+Alternately, for opcode functions that have more internal complexity the
+format is:
+
+    op opname (args) :flags {
+        ... body of function ...
+    }
+
+There may be more than one C<return>.
+
+In both cases the closing brace B<must> be on its own line.
+
+When specifying multiple flags, each flag gets its own prefixing colon.
+
+=head2 Op Arguments
+
+Op arguments are a comma-separated list of direction and type pairs.
+
+Argument direction is one of:
+
+    in            the argument passes a value into the op
+    out           the argument passes a value out of the op
+    inout         the argument passes a value into and out of the op
+    inconst       the argument passes a constant value into the op
+    invar         the argument passes a variable value into the op
+
+Argument direction is used to determine the life times of symbols and
+their related register allocations. When an argument is passed into an
+op a register is read from, when it's passed out of an op a register is
+written to.
+
+Argument type is one of:
+
+    INT       the argument is an integer
+    NUM       the argument is an numeric
+    STR       the argument is an string
+    PMC       the argument is an PMC
+    KEY       the argument is an aggregate PMC key
+    INTKEY    the argument is an aggregate PMC integer key
+    LABEL     the argument is an integer branch offset or address
+
+The size of the return offset is determined from the op function's
+signature.
+
+=head2 Op Flags
+
+The flags are of two types:
+
+=over 4
+
+=item 1 class
+
+The classification of ops is intended to facilitate the selection of
+suitable ops for a Parrot safe mode.
+
+=item 2 behavior
+
+The presence (or absence) of certain flags will change how the op behaves. For
+example, the lack of the C<flow> flag will cause the op to be implicitly
+terminated with C<goto NEXT()>. (See next section).
+
+The :deprecated flag will generate a diagnostic to standard error at
+runtime when a deprecated opcode is invoked and
+C<PARROT_WARNINGS_DEPRECATED_FLAG> has been set.
+
+=back
+
+=head2 Op Body (Macro Substitutions)
+
+In the following macro descriptions, C<PC> and C<PC'> are the current
+and next position within the Parrot code.
+
+=over 4
+
+=item C<goto OFFSET(X)>
+
+Transforms to C<PC' = PC + X>. This is used for branches.
+
+=item C<goto NEXT()>
+
+Transforms to C<PC' = PC + S>, where C<S> is the size of an op.
+
+=item C<goto ADDRESS(X)>
+
+Transforms to C<PC' = X>. This is used for absolute jumps.
+
+=item C<expr OFFSET(X)>
+
+Transforms to C<PC + X>. This is used to give a relative address.
+
+=item C<expr NEXT()>
+
+Transforms to C<PC + S>, the position of the next op.
+
+=item C<expr ADDRESS(X)>
+
+Transforms to C<X>, an absolute address.
+
+=item C<OP_SIZE>
+
+Transforms to C<S>, the size of an op.
+
+=item C<HALT()>
+
+Transforms to C<PC' = 0>. Halts run loop, and resets the current
+position to the start of the Parrot code, without resuming.
+
+=item C<restart OFFSET(X)>
+
+Transforms to C<PC' = 0> and restarts at C<PC + X>.
+
+=item C<restart NEXT()>
+
+Transforms to C<PC' = 0> and restarts at C<PC + S>.
+
+=item C<$n>
+
+Transforms to the op function's nth argument. C<$0> is the opcode itself.
+
+=back
+
+Note that, for ease of parsing, if the argument to one of the above
+notations in a ops file contains parentheses, then double the enclosing
+parentheses and add a space around the argument, like so:
+
+    goto OFFSET(( (void*)interp->happy_place ))
+
+=head2 Class Methods
+
+=over 4
+
+=end
+
+class Ops::File is Hash;
+
+pir::load_bytecode('config.pbc');
+
+=begin
+
+=item C<new(@files)>
+
+Returns a new instance initialized by calling C<read_ops()> on each of
+the specified op files.
+
+=item C<new_str($str)>
+
+Returns a new instance initialized by compiling C<$str> as the contents of an
+ops file.
+
+=end
+
+method new(*@files, :$oplib, :$core!, :$nolines, :$quiet? = 0) {
+    self<files>   := @files;
+    self<core>    := $core;
+    self<ops>     := list(); # Ops
+    self<preamble>:= '';
+    self<compiler>:= pir::compreg__Ps('Ops');
+    self<op_order>:= 0;
+    self<quiet>   := $quiet;
+
+    if $core {
+        self<oplib> := $oplib;
+        self<compiler>.set_oplib($oplib);
+    }
+    else {
+        self<file> := @files[0];
+    }
+
+    self._set_version();
+
+    for @files { self.read_ops( $_, $nolines ) }
+
+    self._calculate_op_codes();
+
+    self;
+}
+
+method new_str($str, :$oplib) {
+    self<ops>      := list(); # Ops
+    self<preamble> := '';
+
+    self<compiler> := pir::compreg__Ps('Ops');
+    self<oplib>    := $oplib;
+    self<compiler>.set_oplib($oplib);
+
+    self._set_version();
+
+    self._set_version();
+
+    self.compile_ops($str);
+
+    self;
+}
+
+
+=begin
+
+=back
+
+=head2 Instance Methods
+
+=over 4
+
+=item C<read_ops($file,$nolines)>
+
+Reads in the specified .ops file, gathering information about the ops.
+
+=end
+
+method read_ops($file, $nolines) {
+    $Ops::Compiler::Actions::OPLIB := self<oplib>;
+
+    self<quiet> || say("# Parsing $file...");
+    my $start_time := pir::time__N();
+    my $buffer     := slurp($file);
+    my $start_ops  := +self<ops>;
+    self.compile_ops($buffer, :experimental( $file ~~ /experimental\.ops/));
+    my $end_ops  := +self<ops>;
+    pir::sprintf(my $time, "%.3f", [pir::time__N() - $start_time] );
+    self<quiet> || say("# Parsed $file in $time seconds; found "~
+                       ($end_ops - $start_ops) ~" ops.");
+}
+
+method compile_ops($str, :$experimental? = 0) {
+    my $compiler := self<compiler>;
+    my $past     := $compiler.compile($str, :target('past'));
+
+    for @($past<ops>) {
+        $_<experimental> := $experimental;
+        self<ops>.push($_);
+        #say($_.full_name ~ " is number " ~ self<op_order>);
+        self<op_order>++;
+    }
+
+    for @( $past<preamble> ) {
+        self<preamble> := self<preamble> ~ $_;
+    }
+    $past;
+}
+
+method get_parse_tree($str) {
+    my $compiler := pir::compreg__Ps('Ops');
+    $compiler.compile($str, :target('parse'));
+}
+
+method preamble() { self<preamble> };
+method ops()      { self<ops> };
+method oplib()    { self<oplib> };
+method version()  { self<version>; }
+
+method version_major() { self<version_major> }
+method version_minor() { self<version_minor> }
+method version_patch() { self<version_patch> }
+
+method _calculate_op_codes() {
+
+    my $code := 0;
+
+    for self<ops> -> $op {
+        $op<code> := $code++;
+    }
+}
+
+method _set_version() {
+    my $config := _config();
+    my $version := $config<VERSION>;
+    #say("# $version");
+    my @bits := split('.', $version);
+    self<version_major> := @bits[0];
+    self<version_minor> := @bits[1];
+    self<version_patch> := @bits[2];
+    self<version>       := @bits;
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: ft=perl6 expandtab shiftwidth=4:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/Op.pm (from r47544, trunk/compilers/opsc/src/Ops/Op.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/Op.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/Op.pm)
@@ -0,0 +1,381 @@
+#! nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=begin
+
+=head1 NAME
+
+Ops::Op - Parrot Operation
+
+=head1 SYNOPSIS
+
+  use Ops::Op;
+
+=head1 DESCRIPTION
+
+C<Ops::Op> represents a Parrot operation (op, for short), as read
+from an ops file via C<Ops::OpsFile>, or perhaps even generated by
+some other means. It is the Perl equivalent of the C<op_info_t> C
+C<struct> defined in F<include/parrot/op.h>.
+
+=head2 Op Type
+
+Ops are either I<auto> or I<manual>. Manual ops are responsible for
+having explicit next-op C<RETURN()> statements, while auto ops can count
+on an automatically generated next-op to be appended to the op body.
+
+Note that F<tools/build/ops2c.pl> supplies either 'inline' or 'function'
+as the op's type, depending on whether the C<inline> keyword is present
+in the op definition. This has the effect of causing all ops to be
+considered manual.
+
+=head2 Op Arguments
+
+Note that argument 0 is considered to be the op itself, with arguments
+1..9 being the arguments passed to the op.
+
+Op argument direction and type are represented by short one or two letter
+descriptors.
+
+Op Direction:
+
+    i   The argument is incoming
+    o   The argument is outgoing
+    io  The argument is both incoming and outgoing
+
+Op Type:
+
+    i   The argument is an integer register index.
+    n   The argument is a number register index.
+    p   The argument is a PMC register index.
+    s   The argument is a string register index.
+    ic  The argument is an integer constant (in-line).
+    nc  The argument is a number constant index.
+    pc  The argument is a PMC constant index.
+    sc  The argument is a string constant index.
+    kc  The argument is a key constant index.
+    ki  The argument is a key integer register index.
+    kic  The argument is a key integer constant (in-line).
+
+=head2 Class Methods
+
+=over 4
+
+=end
+
+class Ops::Op is PAST::Block;
+
+INIT {
+    pir::load_bytecode("dumper.pbc");
+}
+
+=begin
+
+=item C<new(:$code, :$type, :$name, :@args, :%flags)>
+
+Allocates a new bodyless op. A body must be provided eventually for the
+op to be usable.
+
+C<$code> is the integer identifier for the op.
+
+C<$type> is the type of op (see the note on op types above).
+
+C<$name> is the name of the op.
+
+C<@args> is a reference to an array of argument type descriptors.
+
+C<$flags> is a hash reference containing zero or more I<hints> or
+I<directives>.
+
+
+=back
+
+=head2 Instance Methods
+
+=over 4
+
+=item C<code()>
+
+Returns the op code.
+
+=item C<type()>
+
+The type of the op, either 'inline' or 'function'.
+
+=item C<name()>
+
+The (short or root) name of the op.
+
+=item C<full_name()>
+
+For argumentless ops, it's the same as C<name()>. For ops with
+arguments, an underscore followed by underscore-separated argument types
+are appended to the name.
+
+=item C<func_name()>
+
+The same as C<full_name()>, but with 'C<Parrot_>' prefixed.
+
+=end
+
+method code($code?) { self.attr('code', $code, defined($code)) }
+
+method type($type?) { self.attr('type', $type, defined($type)) }
+
+method name($name?) { self.attr('name', $name, defined($name)) }
+
+method args($args?) { self.attr('args', $args, defined($args)) }
+
+method arg_types($args?)  {
+    my $res := self.attr('arg_types', $args, defined($args));
+
+    return list() if !defined($res);
+    pir::does__IPS($res, 'array') ?? $res !! list($res);
+}
+
+method arg_dirs($args?)   { self.attr('arg_dirs', $args, defined($args)) }
+
+method arg_type($arg_num) {
+    my @arg_types := self.arg_types;
+    @arg_types[$arg_num];
+}
+
+method full_name() {
+    my $name      := self.name;
+    my @arg_types := self.arg_types;
+
+    #say("# $name arg_types " ~ @arg_types);
+    join('_', $name, |@arg_types);
+}
+
+method func_name($trans) {
+    return $trans.prefix ~ self.full_name;
+}
+
+
+=begin
+
+=item C<flags()>
+
+Sets the op's flags.  This returns a hash reference, whose keys are any
+flags (passed as ":flag") specified for the op.
+
+=end
+
+method flags(%flags?) { self.attr('flags', %flags, defined(%flags)) }
+
+=begin
+
+=item C<body($body)>
+
+=item C<body()>
+
+Sets/gets the op's code body.
+
+=end
+
+method body() {
+    my $res := '';
+    for @(self) -> $part {
+        $res := $res ~ $part<inline>;
+    }
+    $res;
+}
+
+=begin
+
+=item C<jump($jump)>
+
+=item C<jump()>
+
+Sets/gets a string containing one or more C<op_jump_t> values joined with
+C<|> (see F<include/parrot/op.h>). This indicates if and how an op
+may jump.
+
+=end
+
+method jump($jump?)   { self.attr('jump', $jump, defined($jump)) }
+
+=begin
+
+=item C<add_jump($jump)>
+
+=item C<add_jump($jump)>
+
+Add a jump flag to this op if it's not there already.
+
+=end
+
+method add_jump($jump) {
+    my $found_jump := 0;
+
+    unless self.jump { self.jump(list()) }
+
+    for self.jump {
+        if $_ eq $jump { $found_jump := 1 }
+    }
+
+    unless $found_jump {
+        self.jump.push($jump);
+    }
+}
+
+=begin
+
+=item C<get_jump()>
+
+=item C<get_jump()>
+
+Get the jump flags that apply to this op.
+
+=end
+
+method get_jump() {
+
+    if self.jump {
+        return join( '|', |self.jump );
+    }
+    else {
+        return '0';
+    }
+}
+
+=begin
+
+=item C<source($trans, $op)>
+
+Returns the L<C<body()>> of the op with substitutions made by
+C<$trans> (a subclass of C<Ops::Trans>).
+
+=end
+
+method source( $trans ) {
+
+    my $prelude := $trans.body_prelude;
+    return $prelude ~ self.get_body( $trans );
+}
+
+=begin
+
+=item C<get_body($trans)>
+
+Performs the various macro substitutions using the specified transform,
+correctly handling nested substitions, and repeating over the whole string
+until no more substitutions can be made.
+
+C<VTABLE_> macros are enforced by converting C<<< I<< x >>->vtable->I<<
+method >> >>> to C<VTABLE_I<method>>.
+
+=end
+
+method get_body( $trans ) {
+
+    my @body := list();
+
+    #work through the op_body tree
+    for @(self) {
+        my $chunk := self.process_body_chunk($trans, $_);
+        #pir::say('# chunk ' ~ $chunk);
+        @body.push($chunk);
+    }
+
+    join('', |@body);
+}
+
+# Recursively process body chunks returning string.
+
+our multi method process_body_chunk($trans, PAST::Var $chunk) {
+    my $n := +$chunk.name;
+    $trans.access_arg( self.arg_type($n - 1), $n);
+}
+
+our multi method process_body_chunk($trans, PAST::Op $chunk) {
+    my $type := $chunk.pasttype;
+    #say('OP ' ~ $type);
+    if $type eq 'inline' {
+        #_dumper($chunk);
+        #pir::say('RET ' ~ $chunk<inline>);
+        return $chunk.inline;
+    }
+    elsif $type eq 'call' {
+        my $name     := $chunk.name;
+        #say('NAME '~$name ~ ' ' ~ $is_next);
+        if $name eq 'OPSIZE' {
+            #say('is_next');
+            return ~self.size;
+        }
+
+        my @children := list();
+        for @($chunk) {
+            @children.push(self.process_body_chunk($trans, $_));
+        }
+        my $children := join('', |@children);
+
+        #pir::say('children ' ~ $children);
+        my $ret := Q:PIR<
+            $P0 = find_lex '$trans'
+            $P1 = find_lex '$name'
+            $S0 = $P1
+            $P1 = find_lex '$children'
+            %r  = $P0.$S0($P1)
+        >;
+        #pir::say('RET ' ~ $ret);
+        return $ret;
+    }
+}
+
+our multi method process_body_chunk($trans, PAST::Stmts $chunk) {
+    my @children := list();
+    for @($chunk) {
+        @children.push(self.process_body_chunk($trans, $_));
+    }
+    join('', |@children);
+}
+
+=begin
+
+=item C<size()>
+
+Returns the op's number of arguments. Note that this also includes
+the op itself as one argument.
+
+=end
+
+method size() {
+    return pir::does__IPs(self.arg_types, 'array') ?? +self.arg_types + 1 !! 2;
+}
+
+=begin
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item C<Ops::OpsFile>
+
+=item C<Ops::OpTrans>
+
+=item F<tools/build/ops2c.pl>
+
+=back
+
+=head1 HISTORY
+
+Author: Gregor N. Purdy E<lt>gregor at focusresearch.comE<gt>
+
+Migrate to NQP: Vasily Chekalkin E<lt>bacek at bacek.comE<gt>
+
+=end
+
+1;
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: ft=perl6 expandtab shiftwidth=4:
+

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/OpLib.pm (from r47544, trunk/compilers/opsc/src/Ops/OpLib.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/OpLib.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/OpLib.pm)
@@ -0,0 +1,133 @@
+#! nqp
+# Copyright (C) 2009-2010, Parrot Foundation.
+# $Id$
+
+INIT {
+    pir::load_bytecode("dumper.pbc");
+};
+
+class Ops::OpLib is Hash;
+
+=begin NAME
+
+C<Ops::OpLib> - library of Parrot Operations.
+
+=end NAME
+
+=begin DESCRIPTION
+
+Responsible for loading F<src/ops/ops.skip> files, parse F<.ops> files, sort
+them, etc.
+
+Heavily inspired by Perl5 Parrot::Ops2pm.
+
+=end DESCRIPTION
+
+=begin SYNOPSIS
+
+    my $oplib := Ops::OpLib.new(
+        :skip_file('../../src/ops/ops.skip'),
+    ));
+
+=end SYNOPSIS
+
+=begin ATTRIBUTES
+
+=over 4
+
+=item * C<%.op_skip_table>
+
+Reference to a 'seen-hash' of skipped opcodes.
+
+  'op_skip_table' => {
+    'bor_i_ic_ic' => 1,
+    'xor_i_ic_ic' => 1,
+    'tanh_n_nc' => 1,
+    # ...
+  },
+
+As F<src/ops/ops.skip> states, these are "... opcodes that could be listed in
+F<[src/ops/]ops.num> but aren't ever to be generated or implemented because
+they are useless and/or silly."
+
+=back
+
+=end ATTRIBUTES
+
+=begin METHODS
+
+=over 4
+
+=item C<new>
+
+Build OpLib.
+
+(It's NQP. In Perl 6 it should be submethod and invoked automatically)
+
+=end METHODS
+
+method new(:$skip_file, :$quiet? = 0) {
+    self<skip_file>  := $skip_file // './src/ops/ops.skip';
+    self<quiet>      := $quiet;
+
+    # Initialize self.
+    self<op_skip_table> := hash();
+    self<ops_past>      := list();
+    self<regen_ops_num> := 0;
+
+    self.load_op_map_files();
+
+    self;
+}
+
+=begin METHODS
+
+=item C<load_op_map_files>
+
+Load ops.num and ops.skip files.
+
+=end METHODS
+
+method load_op_map_files() {
+    self._load_skip_file;
+}
+
+method _load_skip_file() {
+    my $buf     := slurp(self<skip_file>);
+    grammar SKIP {
+        rule TOP { <op>+ }
+
+        rule op { $<name>=(\w+) }
+        token ws {
+            [
+            | \s+
+            | '#' \N*
+            ]*
+        }
+    }
+
+    my $lines := SKIP.parse($buf);
+
+    for $lines<op> {
+        self<op_skip_table>{$_<name>} := 1;
+    }
+}
+
+
+=begin ACCESSORS
+
+Various methods for accessing internals.
+
+=over 4
+
+=item * C<op_skip_table>
+
+=end ACCESSORS
+
+method op_skip_table()  { self<op_skip_table>; }
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/Renumberer.pm (from r47544, trunk/compilers/opsc/src/Ops/Renumberer.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/Renumberer.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/Renumberer.pm)
@@ -0,0 +1,108 @@
+#! nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+INIT {
+    pir::load_bytecode("dumper.pbc");
+};
+
+class Ops::Renumberer is Hash;
+
+=begin NAME
+
+C<Ops::Renumberer> - renumber ops.num.
+
+=end NAME
+
+=begin DESCRIPTION
+
+This class is responsible for regenerating src/ops/ops.num when the number or
+order of ops there needs to be changed.
+
+=end DESCRIPTION
+
+=begin SYNOPSIS
+
+    my $renum := Ops::Renumberer.new( :ops_file($f) );
+
+=end SYNOPSIS
+
+=begin ATTRIBUTES
+
+=over 4
+
+=item * C<$.max_op_num>
+
+Scalar holding number of highest non-experimental op.  Example:
+
+    'max_op_num' => 1246,
+
+=back
+
+=end ATTRIBUTES
+
+=begin METHODS
+
+=over 4
+
+=item C<new>
+
+Build an Ope::Renumberer.
+
+(It's NQP. In Perl 6 it should be submethod and invoked automatically)
+
+=end METHODS
+
+method new(:$ops_file!) {
+    self<ops_file> := $ops_file;
+
+    self;
+}
+
+=begin METHODS
+
+=item C<need_regeneration>
+
+Check if ops.num needs to be regenerated.
+
+=end METHODS
+
+method need_regeneration() {
+
+    #only need regeneration for core ops
+    unless self<ops_file>.oplib {
+        return 0;
+    }
+
+    #shortcut in case the oplib found an invalid ops.num
+    if self<ops_file>.oplib<regen_ops_num>{
+        return 1;
+    }
+
+    my $op_num_table := self<ops_file>.oplib.op_num_table;
+    my $opsfile_ops  := self<ops_file>.ops;
+    my $opsfile_num  := 0;
+    my $need_regeneration := 0;
+
+    #find out if the order in ops.num reflects the order in Ops::File
+    for $opsfile_ops -> $opsfile_op {
+
+        my $op_name          := $opsfile_op.full_name;
+        my $op_num_table_num := +$op_num_table{ $op_name };
+        #say("ops.num says $op_name is $op_num_table_num, opsfile says $opsfile_num");
+
+        if (!$opsfile_op<experimental> && $opsfile_num != $op_num_table_num) {
+            say("# Opsfile and ops.num disagree about $op_name: $opsfile_num vs $op_num_table_num");
+            $need_regeneration := 1;
+        }
+        $opsfile_num++;
+    }
+
+    $need_regeneration;
+}
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/Trans.pm (from r47544, trunk/compilers/opsc/src/Ops/Trans.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/Trans.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/Trans.pm)
@@ -0,0 +1,58 @@
+#! nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+class Ops::Trans is Hash;
+
+=begin
+
+Base class for Runcode transformations.
+
+=end
+
+method prefix() { 'Parrot_' };
+
+# We can't use yada-yada-yada
+method suffix() { die("...") }
+
+method core_type() { die("...") }
+
+# Prepare internal structures from Ops::File.ops.
+method prepare_ops($emitter, $ops_file) { die('...') }
+
+#
+method emit_c_op_funcs_header_part($fh) { die('...') }
+
+# Called from Ops::Op.
+method body_prelude() { '' }
+
+method defines($emitter) { die('...') }
+
+method emit_source_part($emitter, $fh) { die('...') }
+
+# Default op lookup do nothing. But op_deinit referenced anyway.
+method emit_op_lookup($fh) {
+    $fh.print(q|static void hop_deinit(SHIM_INTERP) {}|);
+}
+
+method init_func_init1() { '' }
+method init_func_disaptch() { '' }
+
+method op_info($emitter) { 'NULL' }
+method op_func($emitter) { 'NULL' }
+method getop($emitter)   { '( int (*)(PARROT_INTERP, const char *, int) )NULL' };
+
+our %arg_maps := {};
+
+method access_arg($type, $num) { die('...'); }
+
+method restart_address($addr) { die('...'); }
+method restart_offset($offset) { die('...'); }
+
+method goto_address($addr) { die('...'); }
+method goto_offset($offset) { die('...'); }
+
+method expr_address($addr) { die('...'); }
+method expr_offset($offset) { die('...'); }
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/compilers/opsc/src/Ops/Trans/C.pm (from r47544, trunk/compilers/opsc/src/Ops/Trans/C.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/Ops/Trans/C.pm	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/Ops/Trans/C.pm)
@@ -0,0 +1,367 @@
+#! nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+class Ops::Trans::C is Ops::Trans;
+
+method new() {
+    # Storage for generated ops functions.
+    self<op_funcs>  := list();
+    # Storage for generated ops functions prototypes.
+    self<op_protos> := list();
+
+    self<names>     := hash();
+
+    self<num_entries> := 0;
+
+    self<arg_maps> := hash(
+        :op("cur_opcode[NUM]"),
+
+        :i("IREG(NUM)"),
+        :n("NREG(NUM)"),
+        :p("PREG(NUM)"),
+        :s("SREG(NUM)"),
+        :k("PREG(NUM)"),
+        :ki("IREG(NUM)"),
+
+        :ic("cur_opcode[NUM]"),
+        :nc("CONST(NUM)->u.number"),
+        :pc("CONST(NUM)->u.key"),
+        :sc("CONST(NUM)->u.string"),
+        :kc("CONST(NUM)->u.key"),
+        :kic("cur_opcode[NUM]")
+    );
+
+    self;
+}
+
+method suffix() { '' };
+
+method core_type() { 'PARROT_FUNCTION_CORE' }
+
+method prepare_ops($emitter, $ops_file) {
+
+    my $index := 0;
+    my @op_protos;
+    my @op_funcs;
+    my @op_func_table;
+
+    for $ops_file.ops -> $op {
+        #say("# preparing " ~ $op);
+        my $func_name := $op.func_name( self );
+        my $definition := "opcode_t *\n$func_name(opcode_t *cur_opcode, PARROT_INTERP)";
+        my $prototype := $emitter.sym_export
+                ~ " opcode_t * $func_name(opcode_t *, PARROT_INTERP);\n";
+
+        my $src := $op.source( self );
+
+        @op_func_table.push(sprintf( "  %-50s /* %6ld */\n", "$func_name,", $index ));
+
+        my $body := join('', $definition, '  {', "\n", $src, '}', "\n\n");
+        @op_funcs.push($body);
+        @op_protos.push($prototype);
+        $index++;
+    }
+
+    self<op_funcs>      := @op_funcs;
+    self<op_protos>     := @op_protos;
+    self<op_func_table> := @op_func_table;
+    self<num_entries>   := + at op_funcs + 1;
+}
+
+method emit_c_op_funcs_header_part($fh) {
+    for self<op_protos> -> $proto {
+        $fh.print($proto);
+    }
+}
+
+method access_arg($type, $num) {
+    my $access := self<arg_maps>{$type};
+    die("unrecognized arg type '$type'") unless $access;
+    subst($access, /NUM/, $num);
+}
+
+method restart_address($addr) {
+    "interp->resume_offset = $addr; interp->resume_flag = 1;";
+}
+
+method restart_offset($offset) {
+    "interp->resume_offset = REL_PC + $offset; interp->resume_flag = 1;";
+}
+
+method goto_address($addr) { "return (opcode_t *)$addr"; }
+
+method goto_offset($offset) { "return (opcode_t *)cur_opcode + $offset"; }
+
+method expr_address($addr) { $addr; }
+
+method expr_offset($offset) { "cur_opcode + $offset"; }
+
+=begin
+
+=item C<defines()>
+
+Returns the C C<#define> macros for register access etc.
+
+=end
+
+method defines($emitter) {
+    return qq|
+/* defines - Ops::Trans::C */
+#undef CONST
+#define REL_PC     ((size_t)(cur_opcode - (opcode_t *)interp->code->base.data))
+#define CUR_OPCODE cur_opcode
+#define IREG(i) (CUR_CTX->bp.regs_i[cur_opcode[i]])
+#define NREG(i) (CUR_CTX->bp.regs_n[-1L - cur_opcode[i]])
+#define PREG(i) (CUR_CTX->bp_ps.regs_p[-1L - cur_opcode[i]])
+#define SREG(i) (CUR_CTX->bp_ps.regs_s[cur_opcode[i]])
+#define CONST(i) Parrot_pcc_get_constants(interp, interp->ctx)[cur_opcode[i]]
+
+static int get_op(PARROT_INTERP, const char * name, int full);
+|;
+}
+
+method op_info($emitter) { $emitter.bs ~ 'op_info_table' }
+method op_func($emitter) { $emitter.bs ~ 'op_func_table' }
+method getop($emitter)   { 'get_op' };
+
+method body_prelude() { '    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);' }
+
+method emit_source_part($emitter, $fh) {
+    self._emit_op_func_table($emitter, $fh);
+    self._emit_op_info_table($emitter, $fh);
+    self._emit_op_function_definitions($emitter, $fh);
+}
+
+method _emit_op_func_table($emitter, $fh) {
+
+        $fh.print(qq|
+
+INTVAL {$emitter.bs}numops{self.suffix} = {self<num_entries>};
+
+/*
+** Op Function Table:
+*/
+
+static op_func{self.suffix}_t {self.op_func($emitter)}[{self<num_entries>}] = | ~ '{' ~ "\n"
+);
+
+        for self<op_func_table> {
+            $fh.print($_)
+        }
+
+        $fh.print(q|
+  NULL /* NULL function pointer */
+};
+
+|);
+}
+
+
+method _emit_op_info_table($emitter, $fh) {
+
+    my %names           := self<names>;
+    my %arg_dir_mapping := hash(
+        :i('PARROT_ARGDIR_IN'),
+        :o('PARROT_ARGDIR_OUT'),
+        :io('PARROT_ARGDIR_INOUT')
+    );
+
+    #
+    # Op Info Table:
+    #
+    $fh.print(qq|
+
+/*
+** Op Info Table:
+*/
+
+static op_info_t {self.op_info($emitter)}[{self<num_entries>}] = | ~ q|{
+|);
+
+    my $index := 0;
+
+    for $emitter.ops_file.ops -> $op {
+        my $type := sprintf( "PARROT_%s_OP", uc($op.type ?? 'INLINE' !! 'FUNCTION') );
+        my $name := $op.name;
+        %names{$name} := 1;
+        my $full_name := $op.full_name;
+        my $func_name := $op.func_name( self );
+        my $body      := $op.body;
+        my $jump      := $op.get_jump;
+        my $arg_count := $op.size;
+
+        ## 0 inserted if arrays are empty to prevent msvc compiler errors
+        my $arg_types := +$op.arg_types
+            ?? '{ ' ~ join( ", ",
+                |map( -> $t { sprintf( "PARROT_ARG_%s", uc($t) ) }, |$op.arg_types)
+            ) ~ ' }'
+            !! '{ (arg_type_t) 0 }';
+        my $arg_dirs := $op<normalized_args>
+            ?? '{ ' ~ join(", ",
+                |map( -> $d { %arg_dir_mapping{$d<direction>} }, |$op<normalized_args>)
+            ) ~ ' }'
+            !! '{ (arg_dir_t) 0 }';
+        my $labels := $op<normalized_args>
+            ?? '{ ' ~ join(", ",
+                |map( -> $d { $d<is_label> ?? 1 !! 0 }, |$op<normalized_args>)
+            ) ~ ' }'
+            !! '{ 0 }';
+
+        $fh.print('  { ' ~ qq|/* $index */
+    /* type $type, */
+    "$name",
+    "$full_name",
+    "$func_name",
+    /* "",  body */
+    $jump,
+    $arg_count,
+    $arg_types,
+    $arg_dirs,
+    $labels
+  | ~ '},
+',
+            );
+
+            $index++;
+        }
+        $fh.print(q|
+};
+
+|);
+}
+
+method _emit_op_function_definitions($emitter, $fh) {
+    $fh.print(q|
+/*
+** Op Function Definitions:
+*/
+
+|);
+
+    for self<op_funcs> -> $op {
+        $fh.print($op);
+    }
+}
+
+method emit_op_lookup($emitter, $fh) {
+
+    if !$emitter.flags<core> {
+        return;
+    }
+
+    my $hash_size := 3041;
+#    my $tot       := $self->{index} + scalar keys( %{ $self->{names} } );
+#    if ( $hash_size < $tot * 1.2 ) {
+#        print STDERR "please increase hash_size ($hash_size) in lib/Parrot/Ops2c/Utils.pm "
+#            . "to a prime number > ", $tot * 1.2, "\n";
+#    }
+    # Due bug in NQP do it in two passes.
+    my $res := q|
+/*
+** Op lookup function:
+*/
+
+#define OP_HASH_SIZE 3041
+
+/* we could calculate a prime somewhat bigger than
+ * n of fullnames + n of names
+ * for now this should be ok
+ *
+ * look up an op_code: at first call to op_code() a hash
+ * of short and full opcode names is created
+ * hash functions are from imcc, thanks to Melvin.
+ */
+
+
+typedef struct hop {
+    op_info_t * info;
+    struct hop *next;
+} HOP;
+static HOP **hop;
+
+static void hop_init(PARROT_INTERP);
+static size_t hash_str(const char *str);
+static void store_op(PARROT_INTERP, op_info_t *info, int full);
+
+/* XXX on changing interpreters, this should be called,
+   through a hook */
+
+static void hop_deinit(PARROT_INTERP);
+
+/*
+ * find a short or full opcode
+ * usage:
+ *
+ * interp->op_lib->op_code("set", 0)
+ * interp->op_lib->op_code("set_i_i", 1)
+ *
+ * returns >= 0 (found idx into info_table), -1 if not
+ */
+
+static size_t hash_str(const char *str) {
+    size_t      key = 0;
+    const char *s   = str;
+
+    while (*s) {
+        key *= 65599;
+        key += *s++;
+    }
+
+    return key;
+}
+
+static void store_op(PARROT_INTERP, op_info_t *info, int full) {
+    HOP * const p     = mem_gc_allocate_zeroed_typed(interp, HOP);
+    const size_t hidx =
+        hash_str(full ? info->full_name : info->name) % OP_HASH_SIZE;
+
+    p->info   = info;
+    p->next   = hop[hidx];
+    hop[hidx] = p;
+}
+static int get_op(PARROT_INTERP, const char * name, int full) {
+    const HOP * p;
+    const size_t hidx = hash_str(name) % OP_HASH_SIZE;
+    if (!hop) {
+        hop = mem_gc_allocate_n_zeroed_typed(interp, OP_HASH_SIZE,HOP *);
+        hop_init(interp);
+    }
+    for (p = hop[hidx]; p; p = p->next) {
+        if(STREQ(name, full ? p->info->full_name : p->info->name))
+            return p->info - [[BS]]op_lib.op_info_table;
+    }
+    return -1;
+}
+static void hop_init(PARROT_INTERP) {
+    size_t i;
+    op_info_t * const info = [[BS]]op_lib.op_info_table;
+    /* store full names */
+    for (i = 0; i < [[BS]]op_lib.op_count; i++)
+        store_op(interp, info + i, 1);
+    /* plus one short name */
+    for (i = 0; i < [[BS]]op_lib.op_count; i++)
+        if (get_op(interp, info[i].name, 0) == -1)
+            store_op(interp, info + i, 0);
+}
+static void hop_deinit(PARROT_INTERP)
+{
+    if (hop) {
+        size_t i;
+        for (i = 0; i < OP_HASH_SIZE; i++) {
+            HOP *p = hop[i];
+            while (p) {
+                HOP * const next = p->next;
+                mem_gc_free(interp, p);
+                p = next;
+            }
+        }
+        mem_sys_free(hop);
+        hop = NULL;
+    }
+}|;
+
+    $fh.print(subst($res, /'[[' BS ']]'/, $emitter.bs, :global));
+}
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/compilers/opsc/src/builtins.pir (from r47544, trunk/compilers/opsc/src/builtins.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/compilers/opsc/src/builtins.pir	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/compilers/opsc/src/builtins.pir)
@@ -0,0 +1,197 @@
+#! parrot
+# Copyright (C) 2009-2010, Parrot Foundation.
+# $Id$
+
+=head1 Builtins
+
+Variour helper builtins.
+
+=cut
+.namespace []
+
+.sub 'lc'
+    .param string arg
+    $S0 = downcase arg
+    .return ($S0)
+.end
+
+.sub 'uc'
+    .param string arg
+    $S0 = upcase arg
+    .return ($S0)
+.end
+
+.sub 'defined'
+    .param pmc thing
+    $I0 = defined thing
+    .return ($I0)
+.end
+
+.sub 'clone'
+    .param pmc what
+    $P0 = clone what
+    .return ($P0)
+.end
+
+.sub 'elements'
+    .param pmc p
+    $I0 = elements p
+    .return ($I0)
+.end
+
+
+.sub 'substr'
+    .param string orig
+    .param int    from
+    .param int    len
+    $S0 = substr orig, from, len
+    .return ($S0)
+.end
+
+.sub 'match'
+    .param string pattern
+    .param string subject
+
+    .local pmc recomp, resub, match, recache
+
+    load_bytecode 'PGE.pbc'
+
+    #hash cache mapping patterns to subs, avoiding unneeded recompilation
+    recache = get_hll_global ['Ops';'Op'], '%recache'
+    $I0 = isnull recache
+    if $I0 goto no_cache
+    $I0 = exists recache[pattern]
+    if $I0 goto found_re
+    goto no_re
+
+  no_cache:
+    recache = new ['Hash']
+
+  no_re:
+    recomp = compreg 'PGE::Perl6Regex'
+    resub = recomp(pattern)
+    recache[pattern] = resub
+
+  found_re:
+    resub = recache[pattern]
+    set_hll_global ['Ops';'Op'], '%recache', recache
+
+    match = resub(subject)
+    if match goto found_match
+    .return (0)
+  found_match:
+    .return (1)
+.end
+
+.sub 'die'
+    .param string why       :optional
+    .param int    has_why   :opt_flag
+
+    die why
+.end
+
+.sub 'slurp'
+    .param string file
+    .local pmc pio
+    pio = new ['FileHandle']
+    pio.'open'(file)
+    $S0  = pio.'readall'()
+    pio.'close'()
+    .return ($S0)
+.end
+
+.sub 'split' :multi(_,_)
+    .param string splitter
+    .param string buf
+
+    $P0 = split splitter, buf
+    .return ($P0)
+.end
+
+.sub 'split' :multi('Sub', _)
+    .param pmc regex
+    .param pmc str
+    .param int count        :optional
+    .param int has_count    :opt_flag
+    .local pmc match
+    .local pmc retv
+    .local int start_pos
+    .local int end_pos
+    .local int zwm_start
+
+    $S0 = str
+    retv = new 'ResizableStringArray'
+    start_pos = 0
+
+    # per Perl 5's negative LIMIT behavior
+    unless has_count goto positive_count
+    if count < 1 goto done
+
+  positive_count:
+    match = regex($S0)
+    if match goto loop
+    retv.'push'($S0)
+    goto done
+
+  loop:
+    unless has_count goto skip_count
+    dec count
+    unless count < 1 goto skip_count
+    $S1 = substr $S0, start_pos
+    retv.'push'($S1)
+    goto done
+  next_zwm:
+    zwm_start = start_pos
+  inc_zwm:
+    inc start_pos
+    match = regex($S0, 'continue' => start_pos)
+    end_pos = match.'from'()
+    unless start_pos == end_pos goto inc_zwm
+    start_pos = zwm_start
+    end_pos -= start_pos
+    goto add_str
+  skip_count:
+    match = regex($S0, 'continue' => start_pos)
+    end_pos = match.'from'()
+    $I99 = match.'to'()
+    if $I99 == end_pos goto next_zwm
+    end_pos -= start_pos
+  add_str:
+    $S1 = substr $S0, start_pos, end_pos
+    retv.'push'($S1)
+    unless match goto done
+    $I0 = match.'to'()
+    if $I0 == start_pos goto zero_width
+    start_pos = $I0
+    goto loop
+  zero_width:
+    inc start_pos
+    goto loop
+
+  done:
+    .return(retv)
+.end
+
+.sub 'list'
+    .param pmc l :slurpy
+    .return (l)
+.end
+
+.sub 'sprintf'
+    .param string format
+    .param pmc    args :slurpy
+
+    $S0 = sprintf format, args
+    .return($S0)
+.end
+
+.sub 'say'
+    .param string arg
+    say arg
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gsoc_threads/compilers/pct/Rules.mak
==============================================================================
--- branches/gsoc_threads/compilers/pct/Rules.mak	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/pct/Rules.mak	Thu Jun 10 21:09:12 2010	(r47545)
@@ -4,7 +4,7 @@
     $(LIBRARY_DIR)/PCT/Grammar.pbc $(LIBRARY_DIR)/PCT/PAST.pbc
 	$(PARROT) -o $@ compilers/pct/PCT.pir
 
-$(LIBRARY_DIR)/PCT/PAST.pbc : compilers/pct/src/PAST.pir $(PARROT) \
+$(LIBRARY_DIR)/PCT/PAST.pbc : compilers/pct/src/PAST.pir $(PARROT) $(PBC_MERGE) \
     $(LIBRARY_DIR)/PCT/HLLCompiler.pbc \
     compilers/pct/src/PCT/Node.pbc \
     compilers/pct/src/PAST/Node.pbc \

Modified: branches/gsoc_threads/compilers/pct/src/PAST/Compiler.pir
==============================================================================
--- branches/gsoc_threads/compilers/pct/src/PAST/Compiler.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/pct/src/PAST/Compiler.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -126,54 +126,29 @@
     valflags['String']   = 's~*:e'
     valflags['Integer']  = 'i+*:'
     valflags['Float']    = 'n+*:'
+    valflags['!cconst']          = 'i+*:c'
+    valflags['!except_severity'] = 'i+*:c'
+    valflags['!except_types']    = 'i+*:c'
+    valflags['!iterator']        = 'i+*:c'
+    valflags['!socket']          = 'i+*:c'
     set_global '%valflags', valflags
 
     ##  %!controltypes holds the list of exception types for each
     ##  type of exception handler we support
     .local pmc controltypes
     controltypes = new 'Hash'
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_RETURN)
-    $P0.'push'(.CONTROL_OK)
-    $P0.'push'(.CONTROL_BREAK)
-    $P0.'push'(.CONTROL_CONTINUE)
-    #$P0.'push'(.CONTROL_ERROR)
-    $P0.'push'(.CONTROL_TAKE)
-    $P0.'push'(.CONTROL_LEAVE)
-    $P0.'push'(.CONTROL_LOOP_NEXT)
-    $P0.'push'(.CONTROL_LOOP_LAST)
-    $P0.'push'(.CONTROL_LOOP_REDO)
-    controltypes['CONTROL']   = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_RETURN)
-    controltypes['RETURN']   = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_OK)
-    controltypes['OK'] = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_BREAK)
-    controltypes['BREAK'] = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_CONTINUE)
-    controltypes['CONTINUE'] = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_ERROR)
-    controltypes['ERROR'] = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_TAKE)
-    controltypes['GATHER']   = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_LEAVE)
-    controltypes['LEAVE'] = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_LOOP_NEXT)
-    controltypes['NEXT'] = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_LOOP_LAST)
-    controltypes['LAST'] = $P0
-    $P0 = new 'ResizablePMCArray'
-    $P0.'push'(.CONTROL_LOOP_REDO)
-    controltypes['REDO'] = $P0
+    controltypes['CONTROL']  = '.CONTROL_RETURN, .CONTROL_OK, .CONTROL_BREAK, .CONTROL_CONTINUE, .CONTROL_TAKE, .CONTROL_LEAVE, .CONTROL_EXIT, .CONTROL_LOOP_NEXT, .CONTROL_LOOP_LAST, .CONTROL_LOOP_REDO'
+    controltypes['RETURN']   = '.CONTROL_RETURN'
+    controltypes['OK']       = '.CONTROL_OK'
+    controltypes['BREAK']    = '.CONTROL_BREAK'
+    controltypes['CONTINUE'] = '.CONTROL_CONTINUE'
+    controltypes['ERROR']    = '.CONTROL_ERROR'
+    controltypes['GATHER']   = '.CONTROL_TAKE'
+    controltypes['LEAVE']    = '.CONTROL_LEAVE'
+    controltypes['EXIT']     = '.CONTROL_EXIT'
+    controltypes['NEXT']     = '.CONTROL_NEXT'
+    controltypes['LAST']     = '.CONTROL_LAST'
+    controltypes['REDO']     = '.CONTROL_REDO'
     set_global '%!controltypes', controltypes
 
     $P0 = box 11
@@ -206,9 +181,11 @@
     blockpast = new 'ResizablePMCArray'
     set_global '@?BLOCK', blockpast
   have_blockpast:
-    null $P0
-    set_global '$?SUB', $P0
-    .tailcall self.'as_post'(past, 'rtype'=>'v')
+    .lex '@*BLOCKPAST', blockpast
+    null $P99
+    .lex '$*SUB', $P99
+    $P1 = self.'as_post'(past, 'rtype'=>'v')
+    .return ($P1)
 .end
 
 =item escape(str)
@@ -649,7 +626,7 @@
     .local pmc eh
     eh = node.'handlers'()
     unless eh, no_eh
-    ops = self.'wrap_handlers'(ops,eh,'rtype'=>rtype)
+    ops = self.'wrap_handlers'(ops, eh, 'rtype'=>rtype)
   no_eh:
     .return (ops)
 .end
@@ -723,28 +700,34 @@
     unless it, handler_loop_done
     node = shift it
 
-    .local pmc ehpir, types, label
+    .local pmc ehpir, label, controltypes, subpost
     .local string ehreg, type
     $P0 = get_hll_global ['POST'], 'Label'
     $S0 = self.'unique'('control_')
     label = $P0.'new'('result'=>$S0)
 
+    subpost = find_dynamic_lex '$*SUB'
+
     ehreg = self.'uniquereg'('P')
     ops.'push_pirop'('new', ehreg, "'ExceptionHandler'")
     ops.'push_pirop'('set_addr', ehreg, label)
-    $P0 = get_global '%!controltypes'
+    controltypes = get_global '%!controltypes'
     type = node.'handle_types'()
-    unless type, no_handle_types
-    types = $P0[type]
-    unless type, no_handle_types
-    ops.'push_pirop'('callmethod', '"handle_types"', ehreg, types :flat)
-  no_handle_types:
+    unless type, handle_types_done
+    type = controltypes[type]
+    unless type, handle_types_done
+    $P0 = split ',', type
+    ops.'push_pirop'('callmethod', '"handle_types"', ehreg, $P0 :flat)
+    subpost.'add_directive'('.include "except_types.pasm"')
+  handle_types_done:
     type = node.'handle_types_except'()
-    unless type, no_handle_types_except
-    types = $P0[type]
-    unless type, no_handle_types_except
-    ops.'push_pirop'('callmethod', '"handle_types_except"', ehreg, types :flat)
-  no_handle_types_except:
+    unless type, handle_types_except_done
+    type = controltypes[type]
+    unless type, handle_types_except_done
+    $P0 = split ',', type
+    ops.'push_pirop'('callmethod', '"handle_types_except"', ehreg, $P0 :flat)
+    subpost.'add_directive'('.include "except_types.pasm"')
+  handle_types_except_done:
     ops.'push_pirop'('push_eh', ehreg)
 
     # Add one pop_eh for every handler we push_eh
@@ -785,9 +768,9 @@
     .param pmc node
     .param pmc options         :slurpy :named
 
-    ##  add current block node to @?BLOCK
+    ##  add current block node to @*BLOCKPAST
     .local pmc blockpast
-    blockpast = get_global '@?BLOCK'
+    blockpast = find_dynamic_lex '@*BLOCKPAST'
     unshift blockpast, node
 
     .local string name, pirflags, blocktype
@@ -853,8 +836,8 @@
 
     ##  determine the outer POST::Sub for the new one
     .local pmc outerpost
-    outerpost = get_global '$?SUB'
-    set_global '$?SUB', bpost
+    outerpost = find_dynamic_lex '$*SUB'
+    .lex '$*SUB', bpost
 
     .local int islexical
     islexical = node.'lexical'()
@@ -912,8 +895,9 @@
     $S0 = self.'uniquereg'('P')
     bpost.'push_pirop'('new', $S0, "'ExceptionHandler'")
     bpost.'push_pirop'('set_addr', $S0, ctrllabel)
-    bpost.'push_pirop'('callmethod', '"handle_types"', $S0, .CONTROL_RETURN)
+    bpost.'push_pirop'('callmethod', '"handle_types"', $S0, '.CONTROL_RETURN')
     bpost.'push_pirop'('push_eh', $S0)
+    bpost.'add_directive'('.include "except_types.pasm"')
 
   children_past:
     ##  all children but last are void context, last returns anything
@@ -930,7 +914,7 @@
     unless eh, no_eh
     $S0 = options['rtype']
     retval = ops[-1]
-    ops = self.'wrap_handlers'(ops,eh,'rtype'=>$S0)
+    ops = self.'wrap_handlers'(ops, eh, 'rtype'=>$S0)
     goto had_eh
   no_eh:
     ##  result of last child is return from block
@@ -985,7 +969,6 @@
   loadinit_done:
 
     ##  restore previous outer scope and symtable
-    set_global '$?SUB', outerpost
     setattribute self, '%!symtable', outersym
 
     ##  return block or block result
@@ -1026,7 +1009,7 @@
     bpost.'push_pirop'('call', blockreg, arglist :flat, 'result'=>result)
 
   block_done:
-    ##  remove current block from @?BLOCK
+    ##  remove current block from @*BLOCKPAST
     $P99 = shift blockpast
     .return (bpost)
 .end
@@ -1372,11 +1355,14 @@
     $P0 = get_hll_global ['POST'], 'Ops'
     ops = $P0.'new'()
 
+    $P0 = find_dynamic_lex '$*SUB'
+    $P0.'add_directive'('.include "except_types.pasm"')
+
     .local string handreg
     handreg = self.'uniquereg'('P')
     ops.'push_pirop'('new', handreg, "'ExceptionHandler'")
     ops.'push_pirop'('set_addr', handreg, handlabel)
-    ops.'push_pirop'('callmethod', '"handle_types"', handreg, .CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    ops.'push_pirop'('callmethod', '"handle_types"', handreg, '.CONTROL_LOOP_NEXT', '.CONTROL_LOOP_REDO', '.CONTROL_LOOP_LAST')
     ops.'push_pirop'('push_eh', handreg)
 
     unless bodyfirst goto bodyfirst_done
@@ -1404,8 +1390,8 @@
     ops.'push_pirop'('.get_results (exception)')
     $S0 = self.'uniquereg'('P')
     ops.'push_pirop'('getattribute', $S0, 'exception', "'type'")
-    ops.'push_pirop'('eq', $S0, .CONTROL_LOOP_NEXT, nextlabel)
-    ops.'push_pirop'('eq', $S0, .CONTROL_LOOP_REDO, redolabel)
+    ops.'push_pirop'('eq', $S0, '.CONTROL_LOOP_NEXT', nextlabel)
+    ops.'push_pirop'('eq', $S0, '.CONTROL_LOOP_REDO', redolabel)
     ops.'push'(donelabel)
     ops.'push_pirop'('pop_eh')
     .return (ops)
@@ -1643,7 +1629,9 @@
     exreg = self.'uniquereg'('P')
     extype = concat exreg, "['type']"
     ops.'push_pirop'('new', exreg, '"Exception"')
-    ops.'push_pirop'('set', extype, .CONTROL_RETURN)
+    ops.'push_pirop'('set', extype, '.CONTROL_RETURN')
+    $P0 = find_dynamic_lex '$*SUB'
+    $P0.'add_directive'('.include "except_types.pasm"')
 
     .local pmc cpast, cpost
     cpast = node[0]
@@ -2038,7 +2026,7 @@
     .local string blockname
     blockname = ''
     .local pmc it
-    $P0 = get_global '@?BLOCK'
+    $P0 = find_dynamic_lex '@*BLOCKPAST'
     it = iter $P0
   scope_error_block_loop:
     unless it goto scope_error_2
@@ -2108,7 +2096,7 @@
 
     ##  get the current sub
     .local pmc subpost
-    subpost = get_global '$?SUB'
+    subpost = find_dynamic_lex '$*SUB'
 
     ##  determine lexical, register, and parameter names
     .local string named, pname, has_pname
@@ -2248,7 +2236,7 @@
     # treat it as that type.
     .local string name
     name = node.'name'()
-    $P0 = get_global '@?BLOCK'
+    $P0 = find_dynamic_lex '@*BLOCKPAST'
     $P0 = $P0[0]
     $P0 = $P0.'symtable'()
     unless $P0 goto contextual
@@ -2473,6 +2461,22 @@
     value = self.'escape'(value)
   escape_done:
 
+    # See if this is a pasm constant type
+    $I0 = index valflags, 'c'
+    if $I0 < 0 goto const_done
+    # Add the directive for the appropriate .include statement.
+    $S0 = returns
+    $S0 = replace $S0, 0, 1, '.include "'
+    $S0 = concat $S0, '.pasm"'
+    $P0 = find_dynamic_lex '$*SUB'
+    $P0.'add_directive'($S0)
+    # Add a leading dot to the value if one isn't already there.
+    $S0 = substr value, 0, 1
+    if $S0 == '.' goto const_done
+    $P0 = box '.'
+    value = concat $P0, value
+  const_done:
+
     .local string rtype
     rtype = options['rtype']
     $I0 = index valflags, rtype

Modified: branches/gsoc_threads/compilers/pct/src/PCT/HLLCompiler.pir
==============================================================================
--- branches/gsoc_threads/compilers/pct/src/PCT/HLLCompiler.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/pct/src/PCT/HLLCompiler.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -25,6 +25,7 @@
 .namespace [ 'PCT';'HLLCompiler' ]
 
 .include 'cclass.pasm'
+.include 'stdio.pasm'
 
 .sub 'init' :vtable :method
     load_bytecode 'config.pir'
@@ -329,11 +330,13 @@
     result = self.stagename(result, adverbs :flat :named)
     $N1 = time
     $N2 = $N1 - $N0
-    printerr "Stage '"
-    printerr stagename
-    printerr "': "
-    printerr $N2
-    printerr " sec\n"
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("Stage '")
+    $P1.'print'(stagename)
+    $P1.'print'("': ")
+    $P1.'print'($N2)
+    $P1.'print'(" sec\n")
     if target == stagename goto have_result
     goto stagestats_loop
 
@@ -611,11 +614,14 @@
 
     # on startup show the welcome message
     $P0 = self.'commandline_banner'()
-    printerr $P0
+    $P1 = getinterp
+    $P2 = $P1.'stdhandle'(.PIO_STDERR_FILENO)
+    $P2.'print'($P0)
 
     .local pmc stdin
     .local int has_readline
-    stdin = getstdin
+    $P0 = getinterp
+    stdin = $P0.'stdhandle'(.PIO_STDIN_FILENO)
     encoding = adverbs['encoding']
     if encoding == 'fixed_8' goto interactive_loop
     unless encoding goto interactive_loop
@@ -746,7 +752,7 @@
   iter_loop_1:
     $S0 = ifh.'readall'(iname)
     code .= $S0
-    close ifh
+    ifh.'close'()
     goto iter_loop
   iter_end:
     $S0 = join ' ', files
@@ -799,6 +805,7 @@
 
 =cut
 
+.include 'except_severity.pasm'
 .sub 'command_line' :method
     .param pmc args
     .param pmc adverbs         :slurpy :named
@@ -844,11 +851,15 @@
     $I0 = adverbs['version']
     if $I0 goto version
 
+    .local int can_backtrace
+    can_backtrace = can self, 'backtrace'
+    unless can_backtrace goto no_push_eh
+    push_eh uncaught_exception
+  no_push_eh:
 
     $S0 = adverbs['e']
     $I0 = exists adverbs['e']
     if $I0 goto eval_line
-
     .local pmc result
     result = box ''
     unless args goto interactive
@@ -867,6 +878,9 @@
     result = self.'eval'($S0, '-e', args :flat, adverbs :flat :named)
 
   save_output:
+    unless can_backtrace goto no_pop_eh
+    pop_eh
+  no_pop_eh:
     if null result goto end
     $I0 = defined result
     unless $I0 goto end
@@ -876,15 +890,17 @@
     if target != 'pir' goto end
     .local string output
     .local pmc ofh
-    ofh = getstdout
+    $P0 = getinterp
+    ofh = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
     output = adverbs['output']
     if output == '' goto save_output_1
     if output == '-' goto save_output_1
-    ofh = open output, 'w'
+    ofh = new ['FileHandle']
+    ofh.'open'(output, 'w')
     unless ofh goto err_output
   save_output_1:
     print ofh, result
-    close ofh
+    ofh.'close'()
   end:
     .return ()
 
@@ -896,6 +912,29 @@
   version:
     self.'version'()
     goto end
+
+    # If we get an uncaught exception in the program and the HLL provides
+    # a backtrace method, we end up here. We pass it the exception object
+    # so it can render a backtrace, unless the severity is exit or warning
+    # in which case it needs special handling.
+  uncaught_exception:
+    .get_results ($P0)
+    pop_eh
+    $P1 = getinterp
+    $P1 = $P1.'stdhandle'(.PIO_STDERR_FILENO)
+    $I0 = $P0['severity']
+    if $I0 == .EXCEPT_EXIT goto do_exit
+    $S0 = self.'backtrace'($P0)
+    print $P1, $S0
+    if $I0 <= .EXCEPT_WARNING goto do_warning
+    exit 1
+  do_exit:
+    $I0 = $P0['exit_code']
+    exit $I0
+  do_warning:
+    $P0 = $P0["resume"]
+    push_eh uncaught_exception # Otherwise we get errors about no handler to delete
+    $P0()
 .end
 
 

Modified: branches/gsoc_threads/compilers/pct/src/POST/Compiler.pir
==============================================================================
--- branches/gsoc_threads/compilers/pct/src/POST/Compiler.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/pct/src/POST/Compiler.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -368,6 +368,11 @@
     subpir.'append_format'("\n.HLL %0\n", $P0)
   subpir_ns:
     subpir.'append_format'("\n.namespace %0\n", nskey)
+  subpir_directives:
+    $S0 = node['directives']
+    unless $S0 goto subpir_decl
+    subpir.'append_format'("%0", $S0)
+  subpir_decl:
     $S0 = self.'escape'(name)
     subpir.'append_format'(".sub %0 %1\n", $S0, pirflags)
     .local pmc paramlist

Modified: branches/gsoc_threads/compilers/pct/src/POST/Node.pir
==============================================================================
--- branches/gsoc_threads/compilers/pct/src/POST/Node.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/pct/src/POST/Node.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -291,6 +291,21 @@
     .return ()
 .end
 
+
+.sub 'add_directive' :method
+    .param string line
+    .local string dlist
+    dlist = self['directives']
+    $I0 = index dlist, line
+    unless $I0 < 0 goto done
+    dlist = concat dlist, line
+    dlist = concat dlist, "\n"
+    self['directives'] = dlist
+  done:
+    .return ()
+.end
+
+
 =back
 
 =head1 AUTHOR

Modified: branches/gsoc_threads/compilers/tge/tgc.pir
==============================================================================
--- branches/gsoc_threads/compilers/tge/tgc.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/compilers/tge/tgc.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -25,6 +25,8 @@
 
 =cut
 
+.include 'stdio.pasm'
+
 .sub "main" :main
     .param pmc args
     .local string prog
@@ -64,24 +66,27 @@
     if ck_output goto OUTPUT_FILE
 
   OUTPUT_STDOUT:
-    outfh = getstdout
+    $P0 = getinterp
+    outfh = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
     goto OUTPUT_DONE
 
   OUTPUT_FILE:
     outfile = opts['output']
-    outfh = open outfile, 'w'
+    outfh = new ['FileHandle']
+    outfh.'open'(outfile, 'w')
     unless outfh goto ERR_NO_OUTFILE
 
   OUTPUT_DONE:
 
     # Read grammar file and compile here
     .local pmc infh
-    infh = open infile, 'r'
+    infh = new ['FileHandle']
+    infh.'open'(infile, 'r')
     unless infh goto ERR_NO_INFILE
 
     .local string source
-    source = read infh, 65535
-    close infh
+    source = infh.'read'(65535)
+    infh.'close'()
 
     .local pmc grammar
     grammar = new ['TGE';'Compiler']
@@ -99,10 +104,12 @@
   goto END
 
   USAGE:
-    printerr "Usage: "
-    printerr prog
-    printerr " [OPTIONS] FILE\n"
-    printerr <<"OPTIONS"
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("Usage: ")
+    $P1.'print'(prog)
+    $P1.'print'(" [OPTIONS] FILE\n")
+    $P1.'print'(<<"OPTIONS")
  Options:
   --output=OUTFILE  -- redirect output to OUTFILE
   --help            -- print this message
@@ -110,19 +117,25 @@
     exit 1
 
   ERR_TOO_FEW_ARGS:
-    printerr "Error: too few arguments\n\n"
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("Error: too few arguments\n\n")
     goto USAGE
 
   ERR_NO_INFILE:
-    printerr "Error: file not found: "
-    printerr infile
-    printerr "\n\n"
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("Error: file not found: ")
+    $P1.'print'(infile)
+    $P1.'print'("\n\n")
     goto USAGE
 
   ERR_NO_OUTFILE:
-    printerr "Error: file not found: "
-    printerr outfile
-    printerr "\n\n"
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("Error: file not found: ")
+    $P1.'print'(outfile)
+    $P1.'print'("\n\n")
     goto USAGE
 
   END:

Modified: branches/gsoc_threads/config/auto/arch.pm
==============================================================================
--- branches/gsoc_threads/config/auto/arch.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/arch.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -42,8 +42,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-    $verbose and print "\n";
+    $conf->debug("\n");
 
     my $archname = $conf->data->get('archname');
     # This was added to convert IA64.ARCHREV_0 on HP-UX, TT #645, TT #653
@@ -51,10 +50,10 @@
     my ( $cpuarch, $osname ) = split( /-/, $archname );
 
 
-    if ($verbose) {
-        print "determining operating system and cpu architecture\n";
-        print "archname: $archname\n";
-    }
+    $conf->debug(
+        "determining operating system and cpu architecture\n",
+        "archname: $archname\n")
+    ;
 
     if ( !defined $osname ) {
         ( $osname, $cpuarch ) = ( $cpuarch, q{} );
@@ -127,12 +126,11 @@
 
 sub _report_verbose {
     my ($conf) = @_;
-    my $verbose = $conf->options->get( 'verbose' );
-    if ( $verbose ) {
-        print "osname:   ", $conf->data->get('osname'), "\n";
-        print "cpuarch:  ", $conf->data->get('cpuarch'), "\n";
-        print "platform: ", $conf->data->get('platform'), "\n";
-    }
+    $conf->debug(
+        "osname:   ", $conf->data->get('osname'), "\n",
+        "cpuarch:  ", $conf->data->get('cpuarch'), "\n",
+        "platform: ", $conf->data->get('platform'), "\n",
+    );
     return 1;
 }
 

Modified: branches/gsoc_threads/config/auto/attributes.pm
==============================================================================
--- branches/gsoc_threads/config/auto/attributes.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/attributes.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -49,21 +49,20 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-    print "\n" if $verbose;
+    $conf->debug("\n");
 
     for my $maybe_attr (@potential_attributes) {
-        $self->try_attr( $conf, $maybe_attr, $verbose );
+        $self->try_attr( $conf, $maybe_attr);
     }
     return 1;
 }
 
 sub try_attr {
-    my ( $self, $conf, $attr, $verbose ) = @_;
+    my ( $self, $conf, $attr ) = @_;
 
     my $output_file = 'test.cco';
 
-    $verbose and print "trying attribute '$attr'\n";
+    $conf->debug("trying attribute '$attr'\n");
 
     my $cc = $conf->option_or_data('cc');
     $conf->cc_gen('config/auto/attributes/test_c.in');
@@ -79,29 +78,29 @@
     my $tryflags = "$ccflags -D$attr $disable_warnings";
 
     my $command_line = Parrot::Configure::Utils::_build_compile_command( $cc, $tryflags );
-    $verbose and print "  ", $command_line, "\n";
+    $conf->debug("  ", $command_line, "\n");
 
     # Don't use cc_build, because failure is expected.
     my $exit_code =
         Parrot::Configure::Utils::_run_command( $command_line, $output_file, $output_file );
-    $verbose and print "  exit code: $exit_code\n";
+    $conf->debug("  exit code: $exit_code\n");
 
     $conf->cc_clean();
     $conf->data->set( $attr => !$exit_code | 0 );
 
     if ($exit_code) {
         unlink $output_file or die "Unable to unlink $output_file: $!";
-        $verbose and print "Rejecting bogus attribute:  $attr\n";
+        $conf->debug("Rejecting bogus attribute:  $attr\n");
         return;
     }
 
     my $output = Parrot::BuildUtil::slurp_file($output_file);
-    $verbose and print "  output: $output\n";
+    $conf->debug("  output: $output\n");
 
     if ( $output !~ /error|warning/i ) {
         $conf->data->set( ccflags => $tryflags );
         my $ccflags = $conf->data->get("ccflags");
-        $verbose and print "  ccflags: $ccflags\n";
+        $conf->debug("  ccflags: $ccflags\n");
     }
     unlink $output_file or die "Unable to unlink $output_file: $!";
 

Modified: branches/gsoc_threads/config/auto/cpu.pm
==============================================================================
--- branches/gsoc_threads/config/auto/cpu.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/cpu.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -32,20 +32,18 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-
     $conf->data->add( ' ', TEMP_atomic_o => '' );    # assure a default
 
     my $hints = "auto::cpu::" . $conf->data->get('cpuarch') . "::auto";
 
-    print "\t(cpu hints = '$hints') " if $verbose;
+    $conf->debug("\t(cpu hints = '$hints') ");
 
     eval "use $hints";
     unless ($@) {
         $hints->runstep( $conf, @_ );
     }
     else {
-        print "(no cpu specific hints)" if $verbose;
+        $conf->debug("(no cpu specific hints)");
     }
 
     return 1;

Modified: branches/gsoc_threads/config/auto/cpu/i386/auto.pm
==============================================================================
--- branches/gsoc_threads/config/auto/cpu/i386/auto.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/cpu/i386/auto.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -22,21 +22,19 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-
     my @files = qw( test_gcc_cmpxchg_c.in );
     for my $f (@files) {
-        print " $f " if $verbose;
+        $conf->debug(" $f ");
         my ($suffix) = $f =~ /test_(\w+)/;
         my $path_f = "config/auto/cpu/i386/$f";
         $conf->cc_gen($path_f);
         eval { $conf->cc_build("-DPARROT_CONFIG_TEST") };
         if ($@) {
-            print " $@ " if $verbose;
+            $conf->debug(" $@ ");
         }
         else {
             if ( $conf->cc_run() =~ /ok/ ) {
-                _handle_cc_run_ok($conf, $suffix, $path_f, $verbose);
+                _handle_cc_run_ok($conf, $suffix, $path_f);
             }
         }
         $conf->cc_clean();
@@ -45,12 +43,12 @@
 }
 
 sub _handle_cc_run_ok {
-    my ($conf, $suffix, $path_f, $verbose) = @_;
+    my ($conf, $suffix, $path_f) = @_;
     $conf->data->set(
         "i386_has_$suffix" => '1',
         "HAS_i386_$suffix" => '1',
     );
-    print " (\U$suffix) " if ($verbose);
+    $conf->debug(" (\U$suffix) ");
     $conf->data->add( ' ', TEMP_generated => $path_f );
 }
 

Modified: branches/gsoc_threads/config/auto/cpu/ppc/auto.pm
==============================================================================
--- branches/gsoc_threads/config/auto/cpu/ppc/auto.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/cpu/ppc/auto.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,17 +19,15 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-
     my @files = qw( test_gcc_cmpset_c.in );
     for my $f (@files) {
-        print " $f " if $verbose;
+        $conf->debug(" $f ");
         my ($suffix) = $f =~ /test_(\w+)/;
         $f = "config/auto/cpu/ppc/$f";
         $conf->cc_gen($f);
         eval { $conf->cc_build("-DPARROT_CONFIG_TEST") };
         if ($@) {
-            print " $@ " if $verbose;
+            $conf->debug(" $@ ");
         }
         else {
             if ( $conf->cc_run() =~ /ok/ ) {
@@ -37,7 +35,7 @@
                     "ppc_has_$suffix" => '1',
                     "HAS_PPC_$suffix" => '1',
                 );
-                print " (\U$suffix) " if ($verbose);
+                $conf->debug(" (\U$suffix) ");
                 $conf->data->add( ' ', TEMP_generated => $f );
             }
         }

Modified: branches/gsoc_threads/config/auto/cpu/sun4/auto.pm
==============================================================================
--- branches/gsoc_threads/config/auto/cpu/sun4/auto.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/cpu/sun4/auto.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -40,19 +40,17 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-
     build_asm( $self, $conf );
 
     my @files = qw( test_atomic_c.in );
     for my $f (@files) {
-        print " $f " if $verbose;
+        $conf->debug(" $f ");
         my ($suffix) = $f =~ /test_(\w+)/;
         $f = "config/auto/cpu/sun4/$f";
         $conf->cc_gen($f);
         eval { $conf->cc_build("-DPARROT_CONFIG_TEST", "sparcasm" . $conf->data->get('o') ) };
         if ($@) {
-            print " $@ " if $verbose;
+            $conf->debug(" $@ ");
         }
         else {
             if ( $conf->cc_run() =~ /ok/ ) {
@@ -60,7 +58,7 @@
                     "sparc_has_$suffix" => '1',
                     "HAS_SPARC_$suffix" => '1',
                 );
-                print " (\U$suffix) " if ($verbose);
+                $conf->debug(" (\U$suffix) ");
                 $conf->data->add( ' ', TEMP_atomic_o => 'src/atomic/sparc_v9.o' );
             }
         }

Modified: branches/gsoc_threads/config/auto/cpu/x86_64/auto.pm
==============================================================================
--- branches/gsoc_threads/config/auto/cpu/x86_64/auto.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/cpu/x86_64/auto.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -20,8 +20,6 @@
     my ( $self, $conf ) = @_;
 
     # x86_64 is recently new and has cmpxchg
-
-    my $verbose = $conf->options->get('verbose');
     my $gcc     = $conf->data->get('gccversion');
 
     # when running on gcc, we just define the config item

Modified: branches/gsoc_threads/config/auto/ctags.pm
==============================================================================
--- branches/gsoc_threads/config/auto/ctags.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/ctags.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -40,11 +40,10 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get( 'verbose' );
-    print "\n" if $verbose;
+    $conf->debug("\n");
 
     my ($ctags, $has_ctags) =
-        _probe_for_ctags($conf, [ @ctags_variations ], $verbose);
+        _probe_for_ctags($conf, [ @ctags_variations ]);
     $self->_evaluate_ctags($conf, $ctags, $has_ctags);
     return 1;
 }
@@ -52,12 +51,11 @@
 sub _probe_for_ctags {
     my $conf = shift;
     my $variations_ref = shift;
-    my $verbose = shift;
     my ($ctags, $has_ctags);
     while (defined (my $t = shift(@$variations_ref))) {
         my $output = capture_output( $t, '--version' ) || '';
-        print $output, "\n" if $verbose;
-        $has_ctags = _probe_for_ctags_output($output, $verbose);
+        $conf->debug("$output\n");
+        $has_ctags = _probe_for_ctags_output($conf, $output);
         $ctags = $t if $has_ctags;
         last if $has_ctags;
     }
@@ -65,9 +63,9 @@
 }
 
 sub _probe_for_ctags_output {
-    my ($output, $verbose) = @_;
+    my ($conf, $output) = @_;
     my $has_ctags = ( $output =~ m/Exuberant Ctags/ ) ? 1 : 0;
-    print $has_ctags, "\n" if $verbose;
+    $conf->debug("$has_ctags\n");
     return $has_ctags;
 }
 

Modified: branches/gsoc_threads/config/auto/env.pm
==============================================================================
--- branches/gsoc_threads/config/auto/env.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/env.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -57,26 +57,25 @@
 
 sub _evaluate_env {
     my ($self, $conf, $setenv, $unsetenv) = @_;
-    my $verbose = $conf->options->get('verbose');
     $conf->data->set(
         setenv   => $setenv,
         unsetenv => $unsetenv
     );
 
     if ( $setenv && $unsetenv ) {
-        print " (both) " if $verbose;
+        $conf->debug(" (both) ");
         $self->set_result('both');
     }
     elsif ($setenv) {
-        print " (setenv) " if $verbose;
+        $conf->debug(" (setenv) ");
         $self->set_result('setenv');
     }
     elsif ($unsetenv) {
-        print " (unsetenv) " if $verbose;
+        $conf->debug(" (unsetenv) ");
         $self->set_result('unsetenv');
     }
     else {
-        print " (no) " if $verbose;
+        $conf->debug(" (no) ");
         $self->set_result('no');
     }
 }

Deleted: branches/gsoc_threads/config/auto/extra_nci_thunks.pm
==============================================================================
--- branches/gsoc_threads/config/auto/extra_nci_thunks.pm	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,55 +0,0 @@
-#! perl
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-config/auto/extra_nci_thunks - Static NCI Frame Building
-
-=head1 DESCRIPTION
-
-If C<--without-extra-nci-thunks> is specified, builds parrot without NCI thunks
-not required by core.
-
-=cut
-
-package auto::extra_nci_thunks;
-
-use strict;
-use warnings;
-
-use base 'Parrot::Configure::Step';
-
-sub _init {
-    my $self = shift;
-    return {
-        description => 'Determine whether to build extra NCI thunks',
-    };
-}
-
-sub runstep {
-    my ($self, $conf) = @_;
-    my $without = $conf->options->get( 'without-extra-nci-thunks' );
-
-    if ($without) {
-        $conf->data->set( has_extra_nci_thunks => 0 );
-        $conf->data->set( HAS_EXTRA_NCI_THUNKS => 0 );
-        $self->set_result( 'no' );
-    }
-    else {
-        $conf->data->set( has_extra_nci_thunks => 1 );
-        $conf->data->set( HAS_EXTRA_NCI_THUNKS => 1 );
-        $self->set_result( 'yes' );
-    }
-
-    return 1;
-}
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/config/auto/gc.pm
==============================================================================
--- branches/gsoc_threads/config/auto/gc.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/gc.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -50,7 +50,7 @@
         TEMP_gc_o => "src/gc/alloc_resources\$(O)",
         gc_flag   => '',
     );
-    print(" ($gc) ") if $conf->options->get('verbose');
+    $conf->debug(" ($gc) ");
 
     return 1;
 }

Modified: branches/gsoc_threads/config/auto/gcc.pm
==============================================================================
--- branches/gsoc_threads/config/auto/gcc.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/gcc.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -62,9 +62,8 @@
     my $minor = $gnucref->{__GNUC_MINOR__};
     my $intel = $gnucref->{__INTEL_COMPILER};
 
-    my $verbose = $conf->options->get('verbose');
     if ( defined $intel || !defined $major ) {
-        print " (no) " if $verbose;
+        $conf->debug(" (no) ");
         $self->set_result('no');
         $conf->data->set( gccversion => undef );
         return 1;
@@ -76,7 +75,7 @@
         undef $minor;    # Don't use it
     }
     if ( ! defined $major ) {
-        print " (no) " if $verbose;
+        $conf->debug(" (no) ");
         $self->set_result('no');
         $conf->data->set( gccversion => undef );
         return 1;

Modified: branches/gsoc_threads/config/auto/gettext.pm
==============================================================================
--- branches/gsoc_threads/config/auto/gettext.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/gettext.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -37,12 +37,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my ( $verbose, $without ) = $conf->options->get(
-        qw|
-            verbose
-            without-gettext
-        |
-    );
+    my $without = $conf->options->get( qw| without-gettext | );
 
     if ($without) {
         $conf->data->set( has_gettext => 0 );
@@ -66,10 +61,10 @@
     my $has_gettext = 0;
     if ( !$@ ) {
         my $test = $conf->cc_run();
-        $has_gettext = $self->_evaluate_cc_run($test, $verbose);
+        $has_gettext = $self->_evaluate_cc_run($conf, $test);
     }
     if ($has_gettext) {
-        _handle_gettext($conf, $verbose, $extra_libs);
+        _handle_gettext($conf, $extra_libs);
     }
     $conf->data->set( HAS_GETTEXT => $has_gettext );
 
@@ -77,22 +72,21 @@
 }
 
 sub _evaluate_cc_run {
-    my $self = shift;
-    my ($test, $verbose) = @_;
+    my ($self, $conf, $test) = @_;
     my $has_gettext = 0;
     if ( $test eq "Hello, world!\n" ) {
         $has_gettext = 1;
-        print " (yes) " if $verbose;
+        $conf->debug(" (yes) ");
         $self->set_result('yes');
     }
     return $has_gettext;
 }
 
 sub _handle_gettext {
-    my ($conf, $verbose, $libs) = @_;
+    my ($conf, $libs) = @_;
     $conf->data->add( ' ', ccflags => "-DHAS_GETTEXT" );
     $conf->data->add( ' ', libs => $libs );
-    $verbose and print "\n  ccflags: ", $conf->data->get("ccflags"), "\n";
+    $conf->debug("\n  ccflags: ", $conf->data->get("ccflags"), "\n");
     return 1;
 }
 

Modified: branches/gsoc_threads/config/auto/gmp.pm
==============================================================================
--- branches/gsoc_threads/config/auto/gmp.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/gmp.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -43,12 +43,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my ( $verbose, $without ) = $conf->options->get(
-        qw|
-            verbose
-            without-gmp
-        |
-    );
+    my $without = $conf->options->get( qw| without-gmp | );
 
     if ($without) {
         $conf->data->set( has_gmp => 0 );
@@ -71,7 +66,7 @@
     my $has_gmp = 0;
     if ( !$@ ) {
         my $test = $conf->cc_run();
-        $has_gmp = $self->_evaluate_cc_run( $conf, $test, $has_gmp, $verbose );
+        $has_gmp = $self->_evaluate_cc_run( $conf, $test, $has_gmp );
     }
     if ($has_gmp) {
         $conf->data->add( ' ', libs => $extra_libs );
@@ -82,10 +77,10 @@
 }
 
 sub _evaluate_cc_run {
-    my ($self, $conf, $test, $has_gmp, $verbose) = @_;
+    my ($self, $conf, $test, $has_gmp) = @_;
     if ( $test eq $self->{cc_run_expected} ) {
         $has_gmp = 1;
-        print " (yes) " if $verbose;
+        $conf->debug(" (yes) ");
         $self->set_result('yes');
 
         $conf->data->set(

Modified: branches/gsoc_threads/config/auto/headers.pm
==============================================================================
--- branches/gsoc_threads/config/auto/headers.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/headers.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -64,7 +64,7 @@
         my $flag = "i_$header";
         $flag =~ s/\.h$//g;
         $flag =~ s/\///g;
-        print "$flag: $pass\n" if defined $conf->options->get('verbose');
+        $conf->debug("$flag: $pass\n");
         $conf->data->set( $flag => $pass ? 'define' : undef );
     }
 

Modified: branches/gsoc_threads/config/auto/icu.pm
==============================================================================
--- branches/gsoc_threads/config/auto/icu.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/icu.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -46,9 +46,8 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my ( $verbose, $icushared_opt, $icuheaders_opt,
+    my ( $icushared_opt, $icuheaders_opt,
         $icuconfig_opt, $without_opt ) = $conf->options->get( qw|
-            verbose
             icushared
             icuheaders
             icu-config
@@ -101,21 +100,21 @@
                         ( ! defined($icuheaders) );
 
     my $without = 0;
-    ($icuconfig, $autodetect, $without) =
-        $self->_handle_autodetect( {
+    ($icuconfig, $autodetect, $without) = $self->_handle_autodetect(
+        $conf,
+        {
             icuconfig   => $icuconfig,
             autodetect  => $autodetect,
             without     => $without,
-            verbose     => $verbose,
-    } );
+        }
+    );
     # Inside _handle_autodetect(), $without can be set to 1 by
     # _handle_search_for_icu_config().  In that case, we're abandoning our
     # attempt to configure with ICU and so may return here.
     # 2nd possible return point
     if ( $without ) {
         $self->_set_no_configure_with_icu($conf, q{no icu-config});
-        print "Could not locate an icu-config program\n"
-            if $verbose;
+        $conf->debug("Could not locate an icu-config program\n");
         return 1;
     }
 
@@ -126,7 +125,6 @@
                 without         => $without,
                 autodetect      => $autodetect,
                 icuconfig       => $icuconfig,
-                verbose         => $verbose,
                 icushared       => $icushared,
                 icuheaders      => $icuheaders,
             },
@@ -137,7 +135,7 @@
         return 1;
     }
 
-    _verbose_report($verbose, $icuconfig, $icushared, $icuheaders);
+    _verbose_report($conf, $icuconfig, $icushared, $icuheaders);
 
     $icuheaders = $self->_handle_icuconfig_errors( {
         icushared   => $icushared,
@@ -169,7 +167,6 @@
         $conf,
         {
             ccflags_status  => $ccflags_status,
-            verbose         => $verbose,
             icuheaders      => $icuheaders,
         },
     );
@@ -222,8 +219,7 @@
 }
 
 sub _handle_search_for_icu_config {
-    my $self = shift;
-    my $arg = shift;
+    my ($self, $conf, $arg) = @_;
     if ( $arg->{ret} ) {
         undef $arg->{icuconfig};
         $arg->{autodetect} = 0;
@@ -231,40 +227,38 @@
     }
     else {
         $arg->{icuconfig} = $self->{icuconfig_default};
-        if ($arg->{verbose}) {
-            print "icu-config found... good!\n";
-        }
+        $conf->debug("icu-config found... good!\n");
     }
     return ( $arg->{icuconfig}, $arg->{autodetect}, $arg->{without} );
 }
 
 sub _handle_autodetect {
-    my $self = shift;
-    my $arg = shift;
+    my ($self, $conf, $arg) = @_;
     if ( $arg->{autodetect} ) {
         if ( ! $arg->{icuconfig} ) {
 
             my ( undef, undef, $ret ) =
                 capture_output( $self->{icuconfig_default}, "--exists" );
 
-            print "Discovered $self->{icuconfig_default} --exists returns $ret\n"
-                if $arg->{verbose};
+            $conf->debug("Discovered $self->{icuconfig_default} --exists returns $ret\n");
 
             ($arg->{icuconfig}, $arg->{autodetect}, $arg->{without}) =
-                $self->_handle_search_for_icu_config( {
-                    icuconfig   => $arg->{icuconfig},
-                    autodetect  => $arg->{autodetect},
-                    without     => $arg->{without},
-                    verbose     => $arg->{verbose},
-                    ret         => $ret,
-            } );
+                $self->_handle_search_for_icu_config(
+                    $conf,
+                    {
+                        icuconfig   => $arg->{icuconfig},
+                        autodetect  => $arg->{autodetect},
+                        without     => $arg->{without},
+                        ret         => $ret,
+                    }
+                );
         }
     } # end $autodetect true
     else {
-        if ($arg->{verbose}) {
-            print "Specified an ICU config parameter,\n";
-            print "ICU autodetection disabled.\n";
-        }
+        $conf->debug(
+            "Specified an ICU config parameter,\n",
+            "ICU autodetection disabled.\n",
+        );
     } # end $autodetect false
     return ( $arg->{icuconfig}, $arg->{autodetect}, $arg->{without} );
 }
@@ -285,28 +279,22 @@
         $arg->{icuconfig}
     ) {
         # ldflags
-        print "Trying $arg->{icuconfig} with '--ldflags'\n"
-            if $arg->{verbose};
+        $conf->debug("Trying $arg->{icuconfig} with '--ldflags'\n");
         $icushared = capture_output("$arg->{icuconfig} --ldflags");
         chomp $icushared;
-        print "icushared:  captured $icushared\n"
-            if $arg->{verbose};
+        $conf->debug("icushared:  captured $icushared\n");
         ($icushared, $arg->{without}) =
             $self->_handle_icushared($icushared, $arg->{without});
-        print "For icushared, found $icushared and $arg->{without}\n"
-            if $arg->{verbose};
+        $conf->debug("For icushared, found $icushared and $arg->{without}\n");
 
         # location of header files
-        print "Trying $arg->{icuconfig} with '--prefix'\n"
-            if $arg->{verbose};
+        $conf->debug("Trying $arg->{icuconfig} with '--prefix'\n");
         $icuheaders = capture_output("$arg->{icuconfig} --prefix");
         chomp($icuheaders);
-        print "icuheaders:  captured $icuheaders\n"
-            if $arg->{verbose};
+        $conf->debug("icuheaders:  captured $icuheaders\n");
         ($icuheaders, $arg->{without}) =
             $self->_handle_icuheaders($conf, $icuheaders, $arg->{without});
-        print "For icuheaders, found $icuheaders and $arg->{without}\n"
-            if $arg->{verbose};
+        $conf->debug("For icuheaders, found $icuheaders and $arg->{without}\n");
     }
 
     return ($arg->{without}, $icushared, $icuheaders);
@@ -348,8 +336,8 @@
 }
 
 sub _verbose_report {
-    my ($verbose, $icuconfig, $icushared, $icuheaders) = @_;
-    if ($verbose) {
+    my ($conf, $icuconfig, $icushared, $icuheaders) = @_;
+    if ($conf->options->get('verbose')) {
         print "icuconfig: $icuconfig\n"  if defined $icuconfig;
         print "icushared='$icushared'\n" if defined $icushared;
         print "headers='$icuheaders'\n"  if defined $icuheaders;
@@ -395,9 +383,7 @@
     my $arg = shift;
     if ($arg->{ccflags_status}) {
         # Ok, we don't need anything more.
-        if ($arg->{verbose}) {
-            print "Your compiler found the icu headers... good!\n";
-        }
+        $conf->debug("Your compiler found the icu headers... good!\n");
     }
     else {
         my $icuheaders = $arg->{icuheaders};
@@ -410,9 +396,7 @@
             $icuflags = "-I $arg->{icuheaders}";
         }
 
-        if ($arg->{verbose}) {
-            print "Adding $icuflags to ccflags for icu headers.\n";
-        }
+        $conf->debug( "Adding $icuflags to ccflags for icu headers.\n");
         $conf->data->add( ' ', ccflags => $icuflags );
     }
 }

Modified: branches/gsoc_threads/config/auto/inline.pm
==============================================================================
--- branches/gsoc_threads/config/auto/inline.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/inline.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -79,13 +79,12 @@
 
 sub _evaluate_inline {
     my ($self, $conf, $test) = @_;
-    my $verbose = $conf->options->get(qw(verbose));
     if ($test) {
-        print " ($test) " if $verbose;
+        $conf->debug(" ($test) ");
         $self->set_result('yes');
     }
     else {
-        print " no " if $verbose;
+        $conf->debug(" no ");
         $self->set_result('no');
         $test = '';
     }

Modified: branches/gsoc_threads/config/auto/isreg.pm
==============================================================================
--- branches/gsoc_threads/config/auto/isreg.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/isreg.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -63,7 +63,8 @@
     my $test;
     $test = (! defined $anyerror) ? 1 : 0;
     $conf->data->set( isreg => $test );
-    print( $test ? " (Yep) " : " (no) " ) if $conf->options->get('verbose');
+    my $test_str = $test ? " (Yep) " : " (no) ";
+    $conf->debug($test_str);
     $self->set_result( $test ? 'yes' : 'no' );
     return 1;
 }

Modified: branches/gsoc_threads/config/auto/memalign.pm
==============================================================================
--- branches/gsoc_threads/config/auto/memalign.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/memalign.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -95,7 +95,8 @@
         : $test  ? 'memalign'
         :          '';
     $conf->data->set( memalign => $f );
-    print( $test ? " (Yep:$f) " : " (no) " ) if $conf->options->get('verbose');
+    my $test_str = $test ? " (Yep:$f) " : " (no) ";
+    $conf->debug($test_str);
     $self->set_result( $test ? 'yes' : 'no' );
 }
 

Modified: branches/gsoc_threads/config/auto/msvc.pm
==============================================================================
--- branches/gsoc_threads/config/auto/msvc.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/msvc.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -33,8 +33,7 @@
     my ( $self, $conf ) = ( shift, shift );
 
     if ($conf->data->get('gccversion')) {
-        my $verbose = $conf->options->get('verbose');
-        print " (skipped) " if $verbose;
+        $conf->debug(" (skipped) ");
         $self->set_result('skipped');
         $conf->data->set( msvcversion => undef );
         return 1;
@@ -57,7 +56,6 @@
 
 sub _evaluate_msvc {
     my ($self, $conf, $msvcref) = @_;
-    my $verbose = $conf->options->get('verbose');
     # Set msvcversion to undef.  This will also trigger any hints-file
     # callbacks that depend on knowing whether or not we're using Visual C++.
 
@@ -73,10 +71,10 @@
 
     my $major = int( $msvcref->{_MSC_VER} / 100 );
     my $minor = $msvcref->{_MSC_VER} % 100;
-    my $status = $self->_handle_not_msvc($conf, $major, $minor, $verbose);
+    my $status = $self->_handle_not_msvc($conf, $major, $minor);
     return 1 if $status;
 
-    my $msvcversion = $self->_compose_msvcversion($major, $minor, $verbose);
+    my $msvcversion = $self->_compose_msvcversion($major, $minor);
 
     $conf->data->set( msvcversion => $msvcversion );
 
@@ -96,10 +94,10 @@
 
 sub _handle_not_msvc {
     my $self = shift;
-    my ($conf, $major, $minor, $verbose) = @_;
+    my ($conf, $major, $minor) = @_;
     my $status;
     unless ( defined $major && defined $minor ) {
-        print " (no) " if $verbose;
+        $conf->debug(" (no) ");
         $self->set_result('no');
         $conf->data->set( msvcversion => undef );
         $status++;
@@ -109,7 +107,7 @@
 
 sub _compose_msvcversion {
     my $self = shift;
-    my ($major, $minor, $verbose) = @_;
+    my ($major, $minor) = @_;
     my $msvcversion = "$major.$minor";
     $self->set_result("yes, $msvcversion");
     return $msvcversion;

Modified: branches/gsoc_threads/config/auto/neg_0.pm
==============================================================================
--- branches/gsoc_threads/config/auto/neg_0.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/neg_0.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -33,7 +33,6 @@
 
 sub runstep {
     my ( $self, $conf ) = @_;
-    my ( $verbose ) = $conf->options->get('verbose');
     $conf->cc_gen('config/auto/neg_0/test_c.in');
     eval { $conf->cc_build( q{} ); };
     my $has_neg_0 = 0;
@@ -43,7 +42,6 @@
             $conf,
             $test,
             $has_neg_0,
-            $verbose,
         );
     }
     $conf->cc_clean();
@@ -54,10 +52,11 @@
 
 sub _evaluate_cc_run {
     my $self = shift;
-    my ($conf, $test, $has_neg_0, $verbose) = @_;
+    my ($conf, $test, $has_neg_0) = @_;
     $has_neg_0 = ($test =~ m/^-0/ ? 1 : 0);
     $self->set_result( $has_neg_0 ? 'yes' : 'no' );
-    print $has_neg_0 ? ' (yes) ' : ' (no) ' if $verbose;
+    my $output = $has_neg_0 ? ' (yes) ' : ' (no) ';
+    $conf->debug($output);
     return $has_neg_0;
 }
 

Modified: branches/gsoc_threads/config/auto/opengl.pm
==============================================================================
--- branches/gsoc_threads/config/auto/opengl.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/opengl.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -158,12 +158,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my ( $verbose, $without ) = $conf->options->get(
-        qw|
-            verbose
-            without-opengl
-        |
-    );
+    my $without = $conf->options->get( qw| without-opengl | );
 
     return $self->_handle_no_opengl($conf) if $without;
 
@@ -192,15 +187,15 @@
     }
     else {
         my $test = $conf->cc_run();
-        return _handle_glut($conf, $extra_libs, $self->_evaluate_cc_run($test, $verbose));
+        return _handle_glut($conf, $extra_libs, $self->_evaluate_cc_run($conf, $test));
     }
 }
 
 sub _evaluate_cc_run {
-    my ($self, $test, $verbose) = @_;
+    my ($self, $conf, $test) = @_;
     my ($glut_api_version, $glut_brand) = split ' ', $test;
 
-    print " (yes, $glut_brand API version $glut_api_version) " if $verbose;
+    $conf->debug(" (yes, $glut_brand API version $glut_api_version) ");
     $self->set_result("yes, $glut_brand $glut_api_version");
 
     return ($glut_api_version, $glut_brand);

Modified: branches/gsoc_threads/config/auto/pcre.pm
==============================================================================
--- branches/gsoc_threads/config/auto/pcre.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/pcre.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -33,12 +33,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my ( $verbose, $without ) = $conf->options->get(
-        qw|
-            verbose
-            without-pcre
-        |
-    );
+    my $without = $conf->options->get( qw| without-pcre | );
 
     if ($without) {
         $conf->data->set( HAS_PCRE => 0 );
@@ -61,7 +56,7 @@
     my $has_pcre = 0;
     if ( !$@ ) {
         my $test = $conf->cc_run();
-        $has_pcre = $self->_evaluate_cc_run($test, $verbose);
+        $has_pcre = $self->_evaluate_cc_run($conf, $test);
     }
     $conf->data->set( HAS_PCRE => $has_pcre);
 
@@ -70,12 +65,12 @@
 
 sub _evaluate_cc_run {
     my $self = shift;
-    my ($test, $verbose) = @_;
+    my ($conf, $test) = @_;
     my $has_pcre = 0;
     if ( $test =~ /pcre (\d+\.\d+)/ ) {
         my $pcre_version = $1;
         $has_pcre = 1;
-        print " (yes, $pcre_version) " if $verbose;
+        $conf->debug(" (yes, $pcre_version) ");
         $self->set_result("yes, $pcre_version");
     }
     return $has_pcre;

Modified: branches/gsoc_threads/config/auto/readline.pm
==============================================================================
--- branches/gsoc_threads/config/auto/readline.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/readline.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -36,8 +36,6 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-
     my $cc     = $conf->data->get('cc');
     my $osname = $conf->data->get('osname');
 
@@ -54,7 +52,7 @@
     eval { $conf->cc_build( q{}, $extra_libs ) };
     if ( !$@ ) {
         if ( $conf->cc_run() ) {
-            $has_readline = $self->_evaluate_cc_run($verbose);
+            $has_readline = $self->_evaluate_cc_run($conf);
         }
         _handle_readline($conf, $extra_libs);
     }
@@ -71,7 +69,7 @@
         eval { $conf->cc_build( q{}, $extra_libs) };
         if ( !$@ ) {
             if ( $conf->cc_run() ) {
-                $has_readline = $self->_evaluate_cc_run($verbose);
+                $has_readline = $self->_evaluate_cc_run($conf);
             }
             _handle_readline($conf, $extra_libs);
         }
@@ -83,9 +81,9 @@
 }
 
 sub _evaluate_cc_run {
-    my ($self, $verbose) = @_;
+    my ($self, $conf) = @_;
     my $has_readline = 1;
-    print " (yes) " if $verbose;
+    $conf->debug(" (yes) ");
     $self->set_result('yes');
     return $has_readline;
 }

Modified: branches/gsoc_threads/config/auto/signal.pm
==============================================================================
--- branches/gsoc_threads/config/auto/signal.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/signal.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -39,26 +39,24 @@
         has_setitimer      => undef
     );
 
-    my $verbose = $conf->options->get('verbose');
-
     $conf->cc_gen('config/auto/signal/test1_c.in');
     eval { $conf->cc_build(); };
     unless ( $@ || $conf->cc_run() !~ /ok/ ) {
-        _handle__sighandler_t($conf, $verbose);
+        _handle__sighandler_t($conf);
     }
     $conf->cc_clean();
 
     $conf->cc_gen('config/auto/signal/test2_c.in');
     eval { $conf->cc_build(); };
     unless ( $@ || $conf->cc_run() !~ /ok/ ) {
-        _handle_sigaction($conf, $verbose);
+        _handle_sigaction($conf);
     }
     $conf->cc_clean();
 
     $conf->cc_gen('config/auto/signal/test_itimer_c.in');
     eval { $conf->cc_build(); };
     unless ( $@ || $conf->cc_run() !~ /ok/ ) {
-        _handle_setitimer($conf, $verbose);
+        _handle_setitimer($conf);
     }
     $conf->cc_clean();
 
@@ -70,26 +68,26 @@
 }
 
 sub _handle__sighandler_t {
-    my ($conf, $verbose) = @_;
+    my ($conf) = @_;
     $conf->data->set( has___sighandler_t => 'define' );
-    print " (__sighandler_t)" if $verbose;
+    $conf->debug(" (__sighandler_t)");
     return 1;
 }
 
 sub _handle_sigaction {
-    my ($conf, $verbose) = @_;
+    my ($conf) = @_;
     $conf->data->set( has_sigaction => 'define' );
-    print " (sigaction)" if $verbose;
+    $conf->debug(" (sigaction)");
     return 1;
 }
 
 sub _handle_setitimer {
-    my ($conf, $verbose) = @_;
+    my ($conf) = @_;
     $conf->data->set(
         has_setitimer    => 'define',
         has_sig_atomic_t => 'define',
     );
-    print " (setitimer) " if $verbose;
+    $conf->debug(" (setitimer) ");
     return 1;
 }
 

Modified: branches/gsoc_threads/config/auto/snprintf.pm
==============================================================================
--- branches/gsoc_threads/config/auto/snprintf.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/snprintf.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -56,7 +56,7 @@
     elsif ( $res =~ /^old snprintf/ ) {
         $conf->data->set( HAS_OLD_SNPRINTF => 1 );
     }
-    print " ($res) " if $conf->options->get('verbose');
+    $conf->debug(" ($res) ");
     return 1;
 }
 

Modified: branches/gsoc_threads/config/auto/thread.pm
==============================================================================
--- branches/gsoc_threads/config/auto/thread.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/thread.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -31,12 +31,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my ( $verbose, $without ) = $conf->options->get(
-        qw|
-            verbose
-            without-threads
-        |
-    );
+    my $without = $conf->options->get( qw| without-threads |);
 
     if ($without) {
         $conf->data->set( HAS_THREADS => 0 );

Modified: branches/gsoc_threads/config/auto/warnings.pm
==============================================================================
--- branches/gsoc_threads/config/auto/warnings.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/warnings.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -182,6 +182,8 @@
         -Wdeprecated-declarations
         -Wno-format-extra-args
         -Wno-import
+        -Wsuggest-attribute=pure
+        -Wsuggest-attribute=const
         -Wunreachable-code
         -Wunused
         -Wunused-function
@@ -272,8 +274,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-    print "\n" if $verbose;
+    $conf->debug("\n");
 
     my $compiler = '';
     if ( defined $conf->data->get('gccversion') ) {
@@ -287,8 +288,7 @@
     }
 
     if ($compiler eq '') {
-        print "We do not (yet) probe for warnings for your compiler\n"
-            if $verbose;
+        $conf->debug("We do not (yet) probe for warnings for your compiler\n");
         $self->set_result('skipped');
         return 1;
     }
@@ -355,12 +355,10 @@
 sub valid_warning {
     my ( $self, $conf, $warning ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-
     # This should be using a temp file name.
     my $output_file = 'test.cco';
 
-    $verbose and print "trying attribute '$warning'\n";
+    $conf->debug("trying attribute '$warning'\n");
 
     my $cc = $conf->option_or_data('cc');
     $conf->cc_gen('config/auto/warnings/test_c.in');
@@ -370,7 +368,7 @@
     my $tryflags = "$ccflags $warnings $warning";
 
     my $command_line = Parrot::Configure::Utils::_build_compile_command( $cc, $tryflags );
-    $verbose and print '  ', $command_line, "\n";
+    $conf->debug("  ", $command_line, "\n");
 
     # Don't use cc_build, because failure is expected.
     my $exit_code = Parrot::Configure::Utils::_run_command(
@@ -388,15 +386,15 @@
     my $output = Parrot::BuildUtil::slurp_file($output_file);
     unlink $output_file or die "Unable to unlink $output_file: $!";
 
-    $verbose and print "  output: $output\n";
+    $conf->debug("  output: $output\n");
 
     if ( $output !~ /\berror|warning|not supported|ignoring (unknown )?option\b/i ) {
         push @{$self->{'validated'}}, $warning;
-        $verbose and print "    valid warning: '$warning'\n";
+        $conf->debug("    valid warning: '$warning'\n");
         return 1;
     }
     else {
-        $verbose and print "  invalid warning: '$warning'\n";
+        $conf->debug("  invalid warning: '$warning'\n");
         return 0;
     }
 }

Modified: branches/gsoc_threads/config/auto/zlib.pm
==============================================================================
--- branches/gsoc_threads/config/auto/zlib.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/auto/zlib.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -32,12 +32,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my ( $verbose, $without ) = $conf->options->get(
-        qw|
-            verbose
-            without-zlib
-        |
-    );
+    my $without = $conf->options->get( qw| without-zlib | );
 
     if ($without) {
         $conf->data->set( has_zlib => 0 );
@@ -60,7 +55,7 @@
     my $has_zlib = 0;
     if ( !$@ ) {
         my $test = $conf->cc_run();
-        $has_zlib = $self->_evaluate_cc_run($conf, $test, $has_zlib, $verbose);
+        $has_zlib = $self->_evaluate_cc_run($conf, $test, $has_zlib);
     }
     $conf->data->set( has_zlib => $has_zlib );
     $self->set_result($has_zlib ? 'yes' : 'no');
@@ -70,11 +65,11 @@
 
 sub _evaluate_cc_run {
     my $self = shift;
-    my ($conf, $test, $has_zlib, $verbose) = @_;
+    my ($conf, $test, $has_zlib) = @_;
     if ( $test =~ m/^(\d\.\d\.\d)/ ) {
         my $version = $1;
         $has_zlib = 1;
-        print " (yes) " if $verbose;
+        $conf->debug(" (yes) ");
         $self->set_result("yes, $version");
     }
     return $has_zlib;

Modified: branches/gsoc_threads/config/gen/config_pm/config_pir.in
==============================================================================
--- branches/gsoc_threads/config/gen/config_pm/config_pir.in	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/config_pm/config_pir.in	Thu Jun 10 21:09:12 2010	(r47545)
@@ -40,20 +40,32 @@
 =cut
 
 .include "interpinfo.pasm"
-.include "stat.pasm"
 
 .sub _config
     .local string prefix, conf_file
     prefix = interpinfo .INTERPINFO_RUNTIME_PREFIX
 
     $S0 = concat prefix, "/runtime"
-    $I0 = stat $S0, .STAT_EXISTS
-    if $I0 goto L1
+
+    push_eh L1
+        # 'os' is dynop and can be absent at this point.
+        # Treat it as developers mode.
+        $P0 = loadlib 'os'
+        $P0 = new ['OS']
+        pop_eh
+
+    push_eh file_not_found
+        # OS.stat throws on file not found
+        $P0.'stat'($S0)
+        goto L1
+  file_not_found:
+    # Treat it as installed parrot.
     conf_file = "@libdir@@versiondir@/include/config.fpmc"
     goto L2
   L1:
     conf_file = prefix . "/runtime/parrot/include/config.fpmc"
   L2:
+    pop_eh
 
     .local pmc CONF
     CONF = new 'FileHandle'

Modified: branches/gsoc_threads/config/gen/makefiles/root.in
==============================================================================
--- branches/gsoc_threads/config/gen/makefiles/root.in	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/makefiles/root.in	Thu Jun 10 21:09:12 2010	(r47545)
@@ -125,6 +125,7 @@
 include compilers/tge/Defines.mak
 include compilers/pge/Defines.mak
 include compilers/pct/Defines.mak
+include compilers/opsc/Defines.mak
 include ext/nqp-rx/Defines.mak
 include compilers/data_json/Defines.mak
 
@@ -172,8 +173,7 @@
     config_lib.pir \
     parrot.pc \
     compilers/imcc/imcc.y.flag \
-    compilers/imcc/imcc.l.flag \
-    src/ops/core_ops.c
+    compilers/imcc/imcc.l.flag
 
 GEN_PASM_INCLUDES = \
 	runtime/parrot/include/cclass.pasm \
@@ -233,17 +233,12 @@
 #
 ###############################################################################
 
-GEN_OPSFILES =
-
 GEN_HEADERS = \
     $(INC_DIR)/vtable.h \
-    $(INC_DIR)/oplib/core_ops.h \
-    $(INC_DIR)/oplib/ops.h \
     $(INC_DIR)/extend_vtable.h \
     $(INC_DIR)/pbcversion.h
 
 GEN_SOURCES = \
-    src/core_ops.c \
     src/nci.c \
     src/glut_nci_thunks.c \
     src/parrot_config.c \
@@ -253,7 +248,6 @@
     src/extra_nci_thunks.c
 
 GEN_MODULES = \
-    lib/Parrot/OpLib/core.pm
 
 GEN_LIBRARY = \
     $(LIBRARY_DIR)/Archive/Tar.pbc \
@@ -274,7 +268,8 @@
     $(LIBRARY_DIR)/HTTP/Message.pbc \
     $(LIBRARY_DIR)/Iter.pbc \
     $(LIBRARY_DIR)/JSON.pbc \
-    $(LIBRARY_DIR)/LWP.pbc \
+    $(LIBRARY_DIR)/LWP/Protocol.pbc \
+    $(LIBRARY_DIR)/LWP/UserAgent.pbc \
     $(LIBRARY_DIR)/Math/Rand.pbc \
     $(LIBRARY_DIR)/MIME/Base64.pbc \
     $(LIBRARY_DIR)/NCI/Utils.pbc \
@@ -334,7 +329,6 @@
     $(LIBRARY_DIR)/postgres.pbc
 
 FLUID_FILES_1 = \
-    $(GEN_OPSFILES) \
     $(GEN_HEADERS) \
     $(GEN_SOURCES) \
     $(GEN_MODULES) \
@@ -356,61 +350,61 @@
 
 # parrot.h and all the includes it causes to be included
 PARROT_H_HEADERS = \
-        $(INC_DIR)/parrot.h \
-        $(INC_DIR)/config.h \
-        $(INC_DIR)/settings.h \
-        $(INC_DIR)/enums.h \
-        $(INC_DIR)/platform.h \
-        $(INC_DIR)/platform_interface.h \
-        $(INC_DIR)/global_setup.h \
-        $(INC_DIR)/caches.h \
-        $(INC_DIR)/interpreter.h \
-        $(INC_DIR)/datatypes.h \
-        $(INC_DIR)/encoding.h \
-        $(INC_DIR)/charset.h \
-        $(INC_DIR)/string.h \
-        $(INC_DIR)/string_primitives.h \
-        $(INC_DIR)/hash.h \
-        $(INC_DIR)/pmc_freeze.h \
-        $(INC_DIR)/vtable.h \
-        $(INC_DIR)/context.h \
-        $(INC_DIR)/exceptions.h \
-        $(INC_DIR)/warnings.h \
-        $(INC_DIR)/memory.h \
-        $(INC_DIR)/packfile.h \
-        $(INC_DIR)/io.h \
-        $(INC_DIR)/op.h \
-        $(INC_DIR)/pmc.h \
-        $(INC_DIR)/gc_api.h \
-        $(INC_DIR)/string_funcs.h \
-        $(INC_DIR)/misc.h \
-        $(INC_DIR)/sub.h \
-        $(INC_DIR)/call.h \
-        $(INC_DIR)/key.h \
-        $(INC_DIR)/exit.h \
-        $(INC_DIR)/nci.h \
-        $(INC_DIR)/thread.h \
-        $(INC_DIR)/scheduler.h \
-        $(INC_DIR)/longopt.h \
-        $(INC_DIR)/oo.h \
-        $(INC_DIR)/vtables.h \
-        $(INC_DIR)/multidispatch.h \
-        $(INC_DIR)/library.h \
-        $(INC_DIR)/global.h \
-        $(INC_DIR)/stat.h \
-        $(INC_DIR)/hll.h \
-        $(INC_DIR)/pbcversion.h \
-        $(INC_DIR)/pobj.h \
-        $(INC_DIR)/platform_limits.h \
-        $(INC_DIR)/has_header.h \
-        $(INC_DIR)/oplib.h \
-        $(INC_DIR)/feature.h \
-        $(INC_DIR)/debugger.h \
-        $(INC_DIR)/core_types.h \
-        $(INC_DIR)/core_pmcs.h \
-        $(INC_DIR)/compiler.h \
-        $(INC_DIR)/cclass.h \
-        include/pmc/pmc_callcontext.h
+	$(INC_DIR)/parrot.h \
+	$(INC_DIR)/config.h \
+	$(INC_DIR)/settings.h \
+	$(INC_DIR)/enums.h \
+	$(INC_DIR)/platform.h \
+	$(INC_DIR)/platform_interface.h \
+	$(INC_DIR)/global_setup.h \
+	$(INC_DIR)/caches.h \
+	$(INC_DIR)/interpreter.h \
+	$(INC_DIR)/datatypes.h \
+	$(INC_DIR)/encoding.h \
+	$(INC_DIR)/charset.h \
+	$(INC_DIR)/string.h \
+	$(INC_DIR)/string_primitives.h \
+	$(INC_DIR)/hash.h \
+	$(INC_DIR)/pmc_freeze.h \
+	$(INC_DIR)/vtable.h \
+	$(INC_DIR)/context.h \
+	$(INC_DIR)/exceptions.h \
+	$(INC_DIR)/warnings.h \
+	$(INC_DIR)/memory.h \
+	$(INC_DIR)/packfile.h \
+	$(INC_DIR)/io.h \
+	$(INC_DIR)/op.h \
+	$(INC_DIR)/pmc.h \
+	$(INC_DIR)/gc_api.h \
+	$(INC_DIR)/string_funcs.h \
+	$(INC_DIR)/misc.h \
+	$(INC_DIR)/sub.h \
+	$(INC_DIR)/call.h \
+	$(INC_DIR)/key.h \
+	$(INC_DIR)/exit.h \
+	$(INC_DIR)/nci.h \
+	$(INC_DIR)/thread.h \
+	$(INC_DIR)/scheduler.h \
+	$(INC_DIR)/longopt.h \
+	$(INC_DIR)/oo.h \
+	$(INC_DIR)/vtables.h \
+	$(INC_DIR)/multidispatch.h \
+	$(INC_DIR)/library.h \
+	$(INC_DIR)/global.h \
+	$(INC_DIR)/stat.h \
+	$(INC_DIR)/hll.h \
+	$(INC_DIR)/pbcversion.h \
+	$(INC_DIR)/pobj.h \
+	$(INC_DIR)/platform_limits.h \
+	$(INC_DIR)/has_header.h \
+	$(INC_DIR)/oplib.h \
+	$(INC_DIR)/feature.h \
+	$(INC_DIR)/debugger.h \
+	$(INC_DIR)/core_types.h \
+	$(INC_DIR)/core_pmcs.h \
+	$(INC_DIR)/compiler.h \
+	$(INC_DIR)/cclass.h \
+	include/pmc/pmc_callcontext.h
 
 # generated list of header files
 GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) \
@@ -503,7 +497,7 @@
 #IF(platform_asm):    src/platform_asm$(O) \
 
 
-OPS_FILES = @ops@ $(GEN_OPSFILES)
+OPS_FILES = @ops@
 
 ###############################################################################
 #
@@ -524,6 +518,7 @@
 NQP_RX              = . at slash@parrot-nqp$(EXE)
 NCI_THUNK_GEN       = . at slash@parrot_nci_thunk_gen$(EXE)
 PROVE               = . at slash@parrot-prove$(EXE)
+OPS2C               = . at slash@ops2c$(EXE)
 
 # Installable executables
 INSTALLABLEPARROT    = . at slash@installable_parrot$(EXE)
@@ -536,6 +531,7 @@
 INSTALLABLENQP       = . at slash@installable_parrot-nqp$(EXE)
 INSTALLABLENCITHUNKGEN = . at slash@installable_parrot_nci_thunk_gen$(EXE)
 INSTALLABLEPROVE     = . at slash@installable_parrot-prove$(EXE)
+INSTALLABLEOPS2C    = . at slash@installable_ops2c$(EXE)
 
 # Libraries
 LIBPARROT_STATIC    = @blib_dir@/@libparrot_static@
@@ -618,20 +614,45 @@
     $(DATA_JSON_LIB_PBCS) \
     $(NQP_LIB_PBCS) \
     $(GEN_LIBRARY) \
+    $(DYNOPLIBS_TARGETS) \
     $(LIBNCI_TEST_SO)
 
+# We build DYNPMC_TARGET in corevm. It's kinda hack to test t/pmc/threads.t CLONE_LIBRARIES
 corevm : \
     $(GEN_PM_INCLUDES) \
     PARROT_LIBS \
     $(PARROT) \
     runtime/parrot/include/parrotlib.pbc \
     runtime/parrot/include/config.fpmc \
-    $(LIBRARY_DIR)/Test/More.pbc \
     $(DYNPMC_TARGETS) \
-    $(DYNOPLIBS_TARGETS)
+    $(LIBRARY_DIR)/Test/More.pbc
 
 $(GEN_LIBRARY) : $(PARROT) $(GEN_PASM_INCLUDES)
 
+$(LIBRARY_DIR)/Digest/MD5.pbc: $(DYNEXT_DIR)/bit_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/Archive/Zip.pbc: $(DYNEXT_DIR)/sys_ops$(LOAD_EXT) $(DYNEXT_DIR)/io_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/Configure/genfile.pbc: $(DYNEXT_DIR)/sys_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/HTTP/Message.pbc: $(DYNEXT_DIR)/sys_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/distutils.pbc: $(DYNEXT_DIR)/sys_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/pcre.pbc: $(DYNEXT_DIR)/sys_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/LWP/Protocol.pbc: $(DYNEXT_DIR)/io_ops$(LOAD_EXT) $(DYNEXT_DIR)/sys_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/Test/More.pbc:
+
+$(LIBRARY_DIR)/Archive/Tar.pbc: $(DYNEXT_DIR)/io_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/osutils.pbc: $(DYNEXT_DIR)/io_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/Config/JSON.pbc: $(DYNEXT_DIR)/io_ops$(LOAD_EXT) $(DYNEXT_DIR)/sys_ops$(LOAD_EXT)
+
+$(LIBRARY_DIR)/LWP/UserAgent.pbc: $(DYNEXT_DIR)/io_ops$(LOAD_EXT)
+
 # constant string support
 .c.str : # suffix rule (limited support)
 	$(PERL) $(BUILD_TOOLS_DIR)/c2str.pl $< > $@
@@ -786,6 +807,7 @@
 	@echo "  tags-vi:           Create tags for the vi editor."
 	@echo "  tags-emacs:        Create tags for the Emacs editor."
 	@echo "  perlcritic:        Check Perl code with Perl::Critic."
+	@echo "  bootstrap-ops:     Generate C code from .ops files."
 	@echo ""
 	@echo "Release:"
 	@echo "  release:           Create a tarball."
@@ -797,10 +819,13 @@
 
 world : all parrot_utils
 
-parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O) $(PROVE)
+parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O) $(PROVE) $(OPS2C)
 
-installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN) $(INSTALLABLEPROVE)
+installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN) $(INSTALLABLEPROVE) $(INSTALLABLEOPS2C)
 
+bootstrap-ops : $(OPS2C)
+	$(OPS2C) --core --quiet
+	$(MAKE) .
 
 runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
 	$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
@@ -810,14 +835,14 @@
 	$(MINIPARROT) -Iruntime/parrot/include config_lib.pir > $@
 
 $(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
-    lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
+    src/parrot_config$(O) \
     $(MINIPARROT)
 	$(LINK) @ld_out@$@ \
 	src/main$(O) src/parrot_config$(O) \
 	@rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS) $(LINK_DYNAMIC)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
-$(PBC_TO_EXE) : tools/dev/pbc_to_exe.pir runtime/parrot/library/config.pir $(PARROT) $(DYNEXT_DIR)/os$(LOAD_EXT)
+$(PBC_TO_EXE) : tools/dev/pbc_to_exe.pir runtime/parrot/library/config.pir $(PARROT) $(DYNEXT_DIR)/os$(LOAD_EXT) $(DYNEXT_DIR)/file$(LOAD_EXT)
 	$(PARROT) -o pbc_to_exe.pbc tools/dev/pbc_to_exe.pir
 	$(PARROT) pbc_to_exe.pbc pbc_to_exe.pbc
 
@@ -838,13 +863,13 @@
 	$(PARROT) pbc_to_exe.pbc parrot_config.pbc
 
 $(MINIPARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
-    lib/Parrot/OpLib/core.pm src/null_config$(O)
+    src/null_config$(O)
 	$(LINK) @ld_out@$@ src/main$(O) src/null_config$(O) \
 	@rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
 $(INSTALLABLEPARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
-    lib/Parrot/OpLib/core.pm src/install_config$(O) \
+    src/install_config$(O) \
     $(PARROT)
 	$(LINK) @ld_out@$@ \
     src/main$(O) src/install_config$(O) \
@@ -884,10 +909,10 @@
     include/pmc/pmc_object.h src/oo.str $(INC_DIR)/oo_private.h
 
 src/scheduler$(O) : $(PARROT_H_HEADERS) src/scheduler.str src/scheduler.c \
-        include/pmc/pmc_scheduler.h include/pmc/pmc_task.h \
-        include/pmc/pmc_timer.h \
-        $(INC_DIR)/scheduler_private.h \
-        $(INC_DIR)/runcore_api.h
+	include/pmc/pmc_scheduler.h include/pmc/pmc_task.h \
+	include/pmc/pmc_timer.h \
+	$(INC_DIR)/scheduler_private.h \
+	$(INC_DIR)/runcore_api.h
 
 src/io/core$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/core.c
 
@@ -898,9 +923,9 @@
     src/io/io_private.h src/io/socket_unix.c
 
 src/io/socket_win32$(O) : $(PARROT_H_HEADERS) \
-        src/io/io_private.h \
-        include/pmc/pmc_socket.h \
-        src/io/socket_win32.c
+	src/io/io_private.h \
+	include/pmc/pmc_socket.h \
+	src/io/socket_win32.c
 
 O_FILES = \
     $(INTERP_O_FILES) \
@@ -961,17 +986,17 @@
 #
 
 src/parrot_debugger$(O) : $(INC_DIR)/embed.h \
-        src/parrot_debugger.c \
-        $(INC_DIR)/runcore_api.h \
-        compilers/imcc/imc.h $(PARROT_H_HEADERS) compilers/imcc/parser.h \
-        compilers/imcc/cfg.h \
-        compilers/imcc/debug.h \
-        compilers/imcc/imcparser.h \
-        compilers/imcc/instructions.h \
-        compilers/imcc/sets.h \
-        compilers/imcc/symreg.h \
-        compilers/imcc/unit.h \
-        $(INC_DIR)/oplib/ops.h
+	src/parrot_debugger.c \
+	$(INC_DIR)/runcore_api.h \
+	compilers/imcc/imc.h $(PARROT_H_HEADERS) compilers/imcc/parser.h \
+	compilers/imcc/cfg.h \
+	compilers/imcc/debug.h \
+	compilers/imcc/imcparser.h \
+	compilers/imcc/instructions.h \
+	compilers/imcc/sets.h \
+	compilers/imcc/symreg.h \
+	compilers/imcc/unit.h \
+	$(INC_DIR)/oplib/ops.h
 
 $(PDB) : src/parrot_debugger$(O) src/parrot_config$(O) $(LIBPARROT)
 	$(LINK) @ld_out@$@ \
@@ -1020,7 +1045,7 @@
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
 src/pbc_dump$(O) : $(INC_DIR)/embed.h  $(INC_DIR)/oplib/ops.h \
-        $(PARROT_H_HEADERS) src/pbc_dump.c
+	$(PARROT_H_HEADERS) src/pbc_dump.c
 
 $(INSTALLABLEPDUMP) : src/pbc_dump$(O) src/packdump$(O) \
 	src/install_config$(O) $(LIBPARROT)
@@ -1179,15 +1204,6 @@
 	$(PERL) $(H2INC) src/utils.c $@
 
 
-# ops.h is built by ops2pm.pl after it builds core.pm
-$(INC_DIR)/oplib/ops.h:  lib/Parrot/OpLib/core.pm
-
-$(BUILD_TOOLS_DIR)/ops2c.pl: lib/Parrot/OpLib/core.pm
-
-lib/Parrot/OpLib/core.pm : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2pm.pl \
-    lib/Parrot/OpsFile.pm lib/Parrot/Op.pm src/ops/ops.num src/ops/ops.skip
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2pm.pl @no_lines_flag@ $(OPS_FILES)
-
 ###############################################################################
 #
 # Examples (Assembly):
@@ -1233,7 +1249,7 @@
 src/datatypes$(O) : $(PARROT_H_HEADERS) src/datatypes.c
 
 src/extend_vtable$(O) : $(PARROT_H_HEADERS) \
-        $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h src/extend_vtable.c
+	$(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h src/extend_vtable.c
 
 src/global_setup$(O) : $(PARROT_H_HEADERS) src/global_setup.str src/global_setup.c
 
@@ -1248,13 +1264,13 @@
 src/hash$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h src/hash.c
 
 src/library$(O) : $(PARROT_H_HEADERS) src/library.str src/library.c\
-        $(INC_DIR)/dynext.h
+	$(INC_DIR)/dynext.h
 
 $(INC_DIR)/extend_vtable.h src/extend_vtable.c src/vtable.h : src/vtable.tbl $(BUILD_TOOLS_DIR)/vtable_extend.pl lib/Parrot/Vtable.pm
 	$(PERL) $(BUILD_TOOLS_DIR)/vtable_extend.pl
 
 src/key$(O) : $(PARROT_H_HEADERS) src/key.str src/key.c \
-        include/pmc/pmc_key.h
+	include/pmc/pmc_key.h
 
 src/gc/mark_sweep$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/mark_sweep.c
 
@@ -1265,7 +1281,7 @@
 src/gc/api$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/api.c
 
 src/gc/alloc_resources$(O) : $(PARROT_H_HEADERS) \
-        src/gc/gc_private.h src/gc/alloc_resources.c
+	src/gc/gc_private.h src/gc/alloc_resources.c
 
 src/hll$(O) : $(PARROT_H_HEADERS) src/hll.str $(INC_DIR)/dynext.h src/hll.c
 
@@ -1276,37 +1292,37 @@
 src/core_pmcs$(O) : $(PARROT_H_HEADERS) src/core_pmcs.c
 
 src/runcore/trace$(O) : include/pmc/pmc_sub.h src/runcore/trace.c \
-        $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_trace.h \
-        $(PARROT_H_HEADERS)
+	$(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_trace.h \
+	$(PARROT_H_HEADERS)
 
 src/debug$(O) : $(INC_DIR)/embed.h $(INC_DIR)/extend.h \
-        $(PARROT_H_HEADERS) src/debug.c \
-        $(INC_DIR)/oplib/ops.h \
-        $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
-        src/debug.str include/pmc/pmc_key.h \
-        include/pmc/pmc_continuation.h \
-        $(INC_DIR)/extend_vtable.h
+	$(PARROT_H_HEADERS) src/debug.c \
+	$(INC_DIR)/oplib/ops.h \
+	$(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
+	src/debug.str include/pmc/pmc_key.h \
+	include/pmc/pmc_continuation.h \
+	$(INC_DIR)/extend_vtable.h
 
 src/sub$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/oplib/ops.h \
-        src/sub.str src/sub.c \
+	src/sub.str src/sub.c \
 	include/pmc/pmc_sub.h include/pmc/pmc_continuation.h
 
 src/string/api$(O) : $(PARROT_H_HEADERS) src/string/api.str \
-        src/string/private_cstring.h src/string/api.c
+	src/string/private_cstring.h src/string/api.c
 
 src/string/primitives$(O) : $(PARROT_H_HEADERS) src/string/primitives.c
 
 src/longopt$(O) : $(PARROT_H_HEADERS) src/longopt.c
 
 src/dynext$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/dynext.h \
-        src/dynext.str include/pmc/pmc_parrotlibrary.h src/dynext.c
+	src/dynext.str include/pmc/pmc_parrotlibrary.h src/dynext.c
 
 src/exceptions$(O) : $(PARROT_H_HEADERS) \
-        src/exceptions.str src/exceptions.c \
+	src/exceptions.str src/exceptions.c \
 	include/pmc/pmc_continuation.h
 
 src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h src/thread.c \
-        include/pmc/pmc_sub.h \
+	include/pmc/pmc_sub.h \
 	include/pmc/pmc_parrotinterpreter.h \
 	$(INC_DIR)/runcore_api.h
 
@@ -1319,31 +1335,31 @@
 	src/runcore/main.c \
 	src/runcore/main.str \
 	include/pmc/pmc_parrotlibrary.h \
-        $(INC_DIR)/dynext.h $(INC_DIR)/oplib/core_ops.h \
-        $(INC_DIR)/oplib/ops.h \
-        $(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h \
-        $(INC_DIR)/runcore_profiling.h
+	$(INC_DIR)/dynext.h $(INC_DIR)/oplib/core_ops.h \
+	$(INC_DIR)/oplib/ops.h \
+	$(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h \
+	$(INC_DIR)/runcore_profiling.h
 
 src/runcore/profiling$(O) : src/runcore/profiling.str src/runcore/profiling.c \
 	include/pmc/pmc_sub.h \
 	include/pmc/pmc_namespace.h \
-        $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h \
-        $(INC_DIR)/runcore_profiling.h $(INC_DIR)/embed.h \
-        $(PARROT_H_HEADERS)
+	$(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h \
+	$(INC_DIR)/runcore_profiling.h $(INC_DIR)/embed.h \
+	$(PARROT_H_HEADERS)
 
 src/call/args$(O) : \
-        $(PARROT_H_HEADERS) $(INC_DIR)/oplib/ops.h \
+	$(PARROT_H_HEADERS) $(INC_DIR)/oplib/ops.h \
 	src/call/args.c \
 	src/call/args.str \
 	include/pmc/pmc_key.h \
 	include/pmc/pmc_fixedintegerarray.h
 
 src/call/context_accessors$(O): $(PARROT_H_HEADERS) \
-        src/call/context_accessors.c
+	src/call/context_accessors.c
 
 src/call/pcc$(O) : $(INC_DIR)/oplib/ops.h \
-        $(PARROT_H_HEADERS) \
-        $(INC_DIR)/runcore_api.h \
+	$(PARROT_H_HEADERS) \
+	$(INC_DIR)/runcore_api.h \
 	src/call/pcc.c \
 	src/call/pcc.str \
 	include/pmc/pmc_key.h include/pmc/pmc_continuation.h
@@ -1352,12 +1368,12 @@
 	include/pmc/pmc_sub.h src/call/context.c
 
 src/interp/inter_cb$(O) : $(PARROT_H_HEADERS) \
-        include/pmc/pmc_parrotinterpreter.h \
+	include/pmc/pmc_parrotinterpreter.h \
 	src/interp/inter_cb.str src/interp/inter_cb.c
 
 src/interp/inter_misc$(O) : $(PARROT_H_HEADERS) \
-        src/interp/inter_misc.c \
-        src/interp/inter_misc.str \
+	src/interp/inter_misc.c \
+	src/interp/inter_misc.str \
 	compilers/imcc/imc.h \
 	compilers/imcc/cfg.h \
 	compilers/imcc/debug.h \
@@ -1365,14 +1381,14 @@
 	compilers/imcc/sets.h \
 	compilers/imcc/symreg.h \
 	compilers/imcc/unit.h \
-        $(INC_DIR)/oplib/ops.h \
-        $(INC_DIR)/runcore_api.h
+	$(INC_DIR)/oplib/ops.h \
+	$(INC_DIR)/runcore_api.h
 
 src/interp/inter_create$(O) : $(PARROT_H_HEADERS) \
 	$(INC_DIR)/oplib/core_ops.h \
 	src/gc/gc_private.h \
-        src/interp/inter_create.c \
-        src/interp/inter_create.str \
+	src/interp/inter_create.c \
+	src/interp/inter_create.str \
 	compilers/imcc/imc.h \
 	compilers/imcc/cfg.h \
 	compilers/imcc/debug.h \
@@ -1380,19 +1396,19 @@
 	compilers/imcc/sets.h \
 	compilers/imcc/symreg.h \
 	compilers/imcc/unit.h \
-        $(INC_DIR)/oplib/ops.h \
-        $(INC_DIR)/runcore_api.h
+	$(INC_DIR)/oplib/ops.h \
+	$(INC_DIR)/runcore_api.h
 
 src/call/ops$(O) : $(INC_DIR)/oplib/ops.h \
 	$(PARROT_H_HEADERS) include/pmc/pmc_continuation.h \
-        $(INC_DIR)/runcore_api.h src/call/ops.c
+	$(INC_DIR)/runcore_api.h src/call/ops.c
 
 src/io/api$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
-        src/io/api.c \
-        src/io/api.str include/pmc/pmc_filehandle.h \
-        include/pmc/pmc_stringhandle.h \
-        $(INC_DIR)/extend.h \
-        $(INC_DIR)/extend_vtable.h
+	src/io/api.c \
+	src/io/api.str include/pmc/pmc_filehandle.h \
+	include/pmc/pmc_stringhandle.h \
+	$(INC_DIR)/extend.h \
+	$(INC_DIR)/extend_vtable.h
 
 src/io/buffer$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/buffer.c
 
@@ -1410,28 +1426,28 @@
 src/gc/alloc_memory$(O) : $(PARROT_H_HEADERS) src/gc/alloc_memory.c
 
 src/main$(O) : $(INC_DIR)/imcc.h $(PARROT_H_HEADERS) \
-        $(INC_DIR)/embed.h $(INC_DIR)/runcore_api.h src/gc/gc_private.h \
-        src/main.c
+	$(INC_DIR)/embed.h $(INC_DIR)/runcore_api.h src/gc/gc_private.h \
+	src/main.c
 
 src/multidispatch$(O) : \
-        src/multidispatch.c \
-        src/multidispatch.str \
-        $(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS) \
+	src/multidispatch.c \
+	src/multidispatch.str \
+	$(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS) \
 	include/pmc/pmc_nci.h include/pmc/pmc_sub.h
 
 src/packfile$(O) : src/packfile.str \
-        src/packfile.c \
+	src/packfile.c \
 	include/pmc/pmc_sub.h include/pmc/pmc_key.h \
-        compilers/imcc/imc.h \
+	compilers/imcc/imc.h \
 	compilers/imcc/cfg.h \
 	compilers/imcc/debug.h \
 	compilers/imcc/instructions.h \
 	compilers/imcc/sets.h \
 	compilers/imcc/symreg.h \
 	compilers/imcc/unit.h \
-        $(INC_DIR)/oplib/ops.h \
-        $(INC_DIR)/embed.h $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h \
-        $(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h
+	$(INC_DIR)/oplib/ops.h \
+	$(INC_DIR)/embed.h $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h \
+	$(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h
 
 src/packfile/pf_items$(O) : $(PARROT_H_HEADERS) src/packfile/pf_items.c
 
@@ -1440,12 +1456,12 @@
 src/parrot$(O) : $(GENERAL_H_FILES)
 
 src/runcore/cores$(O) : src/runcore/cores.str \
-        src/runcore/cores.c \
+	src/runcore/cores.c \
 	include/pmc/pmc_sub.h \
-        $(INC_DIR)/dynext.h $(INC_DIR)/embed.h $(INC_DIR)/oplib/core_ops.h \
-        $(INC_DIR)/oplib/ops.h \
-        $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
-        $(PARROT_H_HEADERS)
+	$(INC_DIR)/dynext.h $(INC_DIR)/embed.h $(INC_DIR)/oplib/core_ops.h \
+	$(INC_DIR)/oplib/ops.h \
+	$(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
+	$(PARROT_H_HEADERS)
 
 src/embed$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/embed.h \
         src/embed.c src/embed.str \
@@ -1457,19 +1473,19 @@
         compilers/imcc/sets.h \
         compilers/imcc/symreg.h \
         compilers/imcc/unit.h \
-	include/pmc/pmc_sub.h
+		include/pmc/pmc_sub.h
 
 src/dataypes$(O) : $(GENERAL_H_FILES) src/dataypes.c
 
 src/exit$(O) : $(PARROT_H_HEADERS) src/exit.c
 
 src/nci/api$(O) : src/nci/api.str \
-        src/nci/api.c \
-        $(PARROT_H_HEADERS)
+	src/nci/api.c \
+	$(PARROT_H_HEADERS)
 
 src/nci/core_thunks$(O) : src/nci/core_thunks.c \
-        $(PARROT_H_HEADERS) \
-        include/pmc/pmc_nci.h
+	$(PARROT_H_HEADERS) \
+	include/pmc/pmc_nci.h
 
 ## SUFFIX OVERRIDE
 src/nci/extra_thunks$(O) : \
@@ -1479,11 +1495,11 @@
 	$(CC) $(CFLAGS) @optimize::src/nci/extra_thunks.c@ @ccwarn::src/nci/extra_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci/extra_thunks.c
 
 src/frame_builder$(O) : $(PARROT_H_HEADERS) src/frame_builder.h \
-        src/frame_builder.c \
-        include/pmc/pmc_fixedintegerarray.h \
-        include/pmc/pmc_unmanagedstruct.h \
-        include/pmc/pmc_managedstruct.h \
-        $(INC_DIR)/oplib/ops.h
+	src/frame_builder.c \
+	include/pmc/pmc_fixedintegerarray.h \
+	include/pmc/pmc_unmanagedstruct.h \
+	include/pmc/pmc_managedstruct.h \
+	$(INC_DIR)/oplib/ops.h
 
 src/vtables$(O) : $(PARROT_H_HEADERS) src/vtables.c
 
@@ -1510,14 +1526,15 @@
 src/string/encoding$(O) : $(PARROT_H_HEADERS) src/string/encoding.c
 
 src/string/charset$(O) : $(PARROT_H_HEADERS) src/string/charset.c \
-        src/string/encoding/fixed_8.h \
-        src/string/encoding/utf8.h \
-        src/string/encoding/utf16.h \
-        src/string/encoding/ucs2.h \
-        src/string/charset/ascii.h \
-        src/string/charset/binary.h \
-        src/string/charset/iso-8859-1.h \
-        src/string/charset/unicode.h
+	src/string/encoding/fixed_8.h \
+	src/string/encoding/utf8.h \
+	src/string/encoding/utf16.h \
+	src/string/encoding/ucs2.h \
+	src/string/encoding/ucs4.h \
+	src/string/charset/ascii.h \
+	src/string/charset/binary.h \
+	src/string/charset/iso-8859-1.h \
+	src/string/charset/unicode.h
 
 src/pbc_merge$(O) : $(INC_DIR)/embed.h src/pbc_merge.c \
 	include/pmc/pmc_sub.h $(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS)
@@ -1544,15 +1561,6 @@
     include/pmc/pmc_parrotlibrary.h \
     src/io/io_private.h
 
-# .h files are built along with .c
-$(INC_DIR)/oplib/core_ops.h: src/ops/core_ops.c
-
-src/ops/core_ops.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl \
-	lib/Parrot/OpsFile.pm lib/Parrot/Op.pm $(INC_DIR)/config.h \
-	lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/C.pm \
-	include/pmc/pmc_continuation.h
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --core @no_lines_flag@
-
 @TEMP_gc_c@
 
 @TEMP_pmc_build@
@@ -1660,13 +1668,9 @@
     t/tools/*.t
 LIBRARY_TEST_FILES = @library_tests@
 PMC2CUTILS_DIR = t/tools/pmc2cutils
-OPS2PMUTILS_DIR = t/tools/ops2pm
-OPS2CUTILS_DIR = t/tools/ops2cutils
 HARNESS_DIR = t/pharness
 BUILDTOOLS_TEST_FILES = \
     $(PMC2CUTILS_DIR)/*.t \
-    $(OPS2PMUTILS_DIR)/*.t \
-    $(OPS2CUTILS_DIR)/*.t \
     $(HARNESS_DIR)/*.t
 MANIFEST_DIR = t/manifest
 INSTALL_TOOLS_DIR = t/tools/install
@@ -1833,7 +1837,6 @@
     ext-clean \
 #UNLESS(win32):    cover-clean \
     editor-clean
-	$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c
 	$(RM_F) chartypes "*.s" "*~"
 	$(RM_F) $(FLUID_FILES_1)
 	$(RM_F) $(FLUID_FILES_2)
@@ -1843,7 +1846,7 @@
 	$(RM_F) $(PIRC_CLEANUPS) $(PCT_CLEANUPS) $(DATA_JSON_CLEANUPS)
 	$(RM_F) $(DYNOPLIBS_CLEANUPS) $(DYNPMC_CLEANUPS)
 	$(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES)
-	$(RM_F) $(NQPRX_CLEANUPS)
+	$(RM_F) $(NQPRX_CLEANUPS)  $(OPSC_CLEANUPS)
 
 prog-clean :
 	$(RM_F) \
@@ -1851,6 +1854,7 @@
     $(PARROT) \
     $(MINIPARROT) \
     $(LIBPARROT) \
+    $(INSTALLABLEOPS2C) \
     $(INSTALLABLEPARROT) \
     $(INSTALLABLEDIS) \
     $(INSTALLABLEPDUMP) \
@@ -1863,6 +1867,7 @@
     $(INSTALLABLEPROVE) \
     pbc_to_exe.pbc pbc_to_exe.c pbc_to_exe$(O) pbc_to_exe$(EXE) \
     $(NCI_THUNK_GEN) parrot_nci_thunk_gen.c parrot_nci_thunk_gen$(O) parrot_nci_thunk_gen.pbc \
+    ops2c.pbc ops2c.c ops2c$(O) ops2c$(EXE) ops2c.pir \
     parrot-prove.pbc parrot-prove.c parrot-prove$(O) parrot-prove$(EXE) \
     parrot_config$(EXE) parrot_config.c parrot_config$(O) parrot_config.pbc \
     compilers/imcc/main$(O) \
@@ -1945,20 +1950,14 @@
 # XXX Is there a danger of too long command lines in the $(RM_F) commands,
 # or is there an automatic xargs?
 test-clean :
-	$(RM_F) \
-    "t/compilers/*/*.out" \
-    "t/compilers/*/*.pasm" \
-    "t/compilers/*/*.pbc" \
-    "t/compilers/*/*_pbcexe*" \
-    "t/compilers/*/*.pir" \
-    "t/compilers/*/*.stabs.s"
-	$(RM_F) \
-    "t/compilers/*/*/*.out" \
-    "t/compilers/*/*/*.pasm" \
-    "t/compilers/*/*/*.pbc" \
-    "t/compilers/*/*/*_pbcexe*" \
-    "t/compilers/*/*/*.pir" \
-    "t/compilers/*/*/*.stabs.s"
+	$(RM_F) t/compilers/data_json/*.pir
+	$(RM_F) t/compilers/imcc/imcpasm/*.pir
+	$(RM_F) t/compilers/imcc/syn/*.pir t/compilers/imcc/syn/*.pasm
+	$(RM_F) t/compilers/imcc/reg/*.pir t/compilers/imcc/reg/*.pasm
+	$(RM_F) t/compilers/pct/*.pir
+	$(RM_F) t/compilers/pge/perl6regex/*.pir
+	$(RM_F) t/compilers/pge/*.pir
+	$(RM_F) t/compilers/tge/*.pir
 	$(RM_F) \
     "t/*/*$(O)" \
     "t/*/*.out" \
@@ -2300,10 +2299,10 @@
 	build_dir=$$PWD; \
     for dir in $(COVER_DIRS); \
     do \
-        cd $$dir; \
-        gcov *.c; \
-        cd $$build_dir; \
-        gcov2perl $$dir/*.gcov; \
+	cd $$dir; \
+	gcov *.c; \
+	cd $$build_dir; \
+	gcov2perl $$dir/*.gcov; \
     done
 	cover -ignore_re '^\/usr\/local\/bin'
 
@@ -2417,7 +2416,7 @@
 	$(PERL) -lane 'print"parrot-$(VERSION)/$$F[0]"unless!length||/#/' MANIFEST | \
     tar -zcv -T - -f parrot-$(VERSION).tar.gz
 	$(PERL) -lane 'print"parrot-$(VERSION)/$$F[0]"unless!length||/#/' \
-             MANIFEST | tar -jcv -T - -f parrot-$(VERSION).tar.bz2
+	     MANIFEST | tar -jcv -T - -f parrot-$(VERSION).tar.bz2
 	mv MANIFEST.real MANIFEST
 	rm parrot-$(VERSION)
 
@@ -2451,10 +2450,10 @@
 
 src/glut_nci_thunks.c: $(NCI_THUNK_GEN)
 	$(NCI_THUNK_GEN) \
-	    --loader-name=Parrot_glut_nci_loader \
-	    --loader-storage-class=PARROT_DYNEXT_EXPORT \
-	    --output=src/glut_nci_thunks.c \
-	    <src/glut_nci_thunks.nci
+		--loader-name=Parrot_glut_nci_loader \
+		--loader-storage-class=PARROT_DYNEXT_EXPORT \
+		--output=src/glut_nci_thunks.c \
+		<src/glut_nci_thunks.nci
 
 src/glut_nci_thunks$(O) : $(PARROT_H_HEADERS) \
     src/glut_nci_thunks.c \
@@ -2467,7 +2466,7 @@
 
 src/extra_nci_thunks.c : src/nci/extra_thunks.nci $(NCI_THUNK_GEN)
 	$(NCI_THUNK_GEN) --dynext --no-warn-dups \
-	    --output=src/extra_nci_thunks.c <src/nci/extra_thunks.nci
+		--output=src/extra_nci_thunks.c <src/nci/extra_thunks.nci
 
 ## SUFFIX OVERRIDE
 src/extra_nci_thunks$(O) : $(PARROT_H_HEADERS) src/extra_nci_thunks.c \
@@ -2485,17 +2484,17 @@
 tags-emacs: tags.emacs.dummy
 	$(RM_F) TAGS
 	@ctags@ -e \
-        --links=no --totals \
-        -R --exclude=blib --exclude=.svn  \
-        --languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
-        -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK,ARGFREE,ARGFREE_NOTNULL \
-        .
+	--links=no --totals \
+	-R --exclude=blib --exclude=.svn  \
+	--languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
+	-I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK,ARGFREE,ARGFREE_NOTNULL \
+	.
 
 # this works with an old etags (XEmacs 21.5*)
 tags-xemacs: tags.emacs.dummy
 	$(RM_F) TAGS
 	find . \
-        -name \*.c -o -name \*.h -o -name \*.pmc -o -name \*.ops | etags -l c - -o TAGS
+	-name \*.c -o -name \*.h -o -name \*.pmc -o -name \*.ops | etags -l c - -o TAGS
 
 tags.emacs.dummy:
 
@@ -2555,6 +2554,7 @@
 include compilers/pirc/Rules.mak
 include compilers/pge/Rules.mak
 include compilers/pct/Rules.mak
+include compilers/opsc/Rules.mak
 include compilers/tge/Rules.mak
 include compilers/data_json/Rules.mak
 include ext/nqp-rx/Rules.mak

Modified: branches/gsoc_threads/config/gen/opengl.pm
==============================================================================
--- branches/gsoc_threads/config/gen/opengl.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/opengl.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -457,8 +457,6 @@
         return 1;
     }
 
-    my $verbose = $conf->options->get('verbose') || 0;
-
     my @include_paths_win32 = grep /\S/ => split /;/ => ($ENV{INCLUDE} || '');
 
     my $osname = $conf->data->get('osname');
@@ -522,22 +520,28 @@
     # X freeglut only if DISPLAY is set, otherwise use native w32api GLUT
     shift @header_globs if $^O eq 'cygwin' and !$ENV{DISPLAY};
 
-    print "\nChecking for OpenGL headers using the following globs:\n\t",
-        join("\n\t", @header_globs), "\n"
-        if $verbose;
+    my $globs_str = join("\n\t", @header_globs) . "\n";
+    $conf->debug(
+        "\n",
+        "Checking for OpenGL headers using the following globs:\n",
+        "\t$globs_str"
+    );
 
     my @header_files = sort map {File::Glob::bsd_glob($_)} @header_globs;
 
     my %skip = map {($_ => 1)} @SKIP;
-    @header_files = grep {my ($file) = m{([^/]+)$}; !$skip{$file}} @header_files;
-
-    print "\nFound the following OpenGL headers:\n\t",
-        join("\n\t", @header_files), "\n"
-        if $verbose;
-
+    @header_files =
+        grep {my ($file) = m{([^/]+)$}; !$skip{$file}} @header_files;
     die "OpenGL enabled and detected, but no OpenGL headers found!"
         unless @header_files;
 
+    my $files_str = join("\n\t", @header_files) . "\n";
+    $conf->debug(
+        "\n",
+        "Found the following OpenGL headers:\n",
+        "\t$files_str\n",
+    );
+
     my $autogen_header = <<'HEADER';
 # DO NOT EDIT THIS FILE.
 #
@@ -550,15 +554,15 @@
 
     $autogen_header .= "# $_\n" foreach @header_files;
 
-    $self->gen_opengl_defines ($conf, \@header_files, $autogen_header, $verbose);
-    $self->gen_opengl_wrappers($conf, \@header_files, $autogen_header, $verbose);
+    $self->gen_opengl_defines ($conf, \@header_files, $autogen_header);
+    $self->gen_opengl_wrappers($conf, \@header_files, $autogen_header);
     $self->gen_glut_callbacks ($conf);
 
     return 1;
 }
 
 sub gen_opengl_defines {
-    my ($self, $conf, $header_files, $autogen_header, $verbose) = @_;
+    my ($self, $conf, $header_files, $autogen_header) = @_;
 
     my (%defs, @macros, %non_numeric);
     my $max_len = 0;
@@ -590,7 +594,7 @@
             }
             else {
                 $non_numeric{$F[1]}++;
-                print "\nNon-numeric value for '$F[1]': '$F[2]'\n" if $verbose;
+                $conf->debug("Non-numeric value for '$F[1]': '$F[2]'\n");
             }
         }
     }
@@ -630,7 +634,8 @@
 }
 
 sub gen_opengl_wrappers {
-    my ($self, $conf, $header_files, $autogen_header, $verbose) = @_;
+    my ($self, $conf, $header_files, $autogen_header) = @_;
+    my $verbose = $conf->options->get('verbose') || 0;
 
     my %IGNORE = map {($_ => 1)} @IGNORE;
 
@@ -772,7 +777,8 @@
             $sigs{$nci_sig}++;
             push @{$funcs{$group}}, [$name, $nci_sig];
 
-            print "$group\t$nci_sig\t$return $name($params);\n" if $verbose >= 3;
+            print "$group\t$nci_sig\t$return $name($params);\n"
+                if $verbose >= 3;
         }
     }
 

Modified: branches/gsoc_threads/config/gen/platform.pm
==============================================================================
--- branches/gsoc_threads/config/gen/platform.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/platform.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -39,35 +39,32 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose     = $conf->options->get('verbose');
-    my $generated   = $self->_get_generated($conf, $verbose);
-
+    my $generated   = $self->_get_generated($conf);
 
     # headers are merged into platform.h
-    $self->_set_headers($conf, $verbose, $generated);
+    $self->_set_headers($conf, $generated);
 
     # implementation files are merged into platform.c
-    $self->_set_implementations($conf, $verbose, $generated);
+    $self->_set_implementations($conf, $generated);
 
     $self->_handle_asm($conf);
 
-    $self->_set_limits($conf, $verbose);
+    $self->_set_limits($conf);
 
     return 1;
 }
 
 sub _get_generated {
-    my $self = shift;
-    my ($conf, $verbose) = @_;
+    my ($self, $conf) = @_;
     my $generated = $conf->data->get('TEMP_generated');
     $generated = '' unless defined $generated;
-    print " ($generated) " if $verbose;
+    $conf->debug(" ($generated) \n");
     return $generated;
 }
 
 sub _set_headers {
     my $self = shift;
-    my ($conf, $verbose, $generated) = @_;
+    my ($conf, $generated) = @_;
     my $platform = $conf->data->get('platform');
     my @headers = qw/
         io.h
@@ -112,7 +109,7 @@
 
         if ( -e $header_file ) {
             local $/ = undef;
-            print("\t$header_file\n") if $verbose;
+            $conf->debug("\t$header_file\n");
             open my $IN_H, "<", "$header_file"
                 or die "Can't open $header_file: $!";
 
@@ -144,7 +141,7 @@
     for my $h (@headers) {
         if ( -e $h ) {
             local $/ = undef;
-            print("\t$h\n") if $verbose;
+            $conf->debug("\t$h\n");
             open my $IN_H, "<", $h or die "Can't open $h: $!";
             print {$PLATFORM_H} <<"END_HERE";
 /*
@@ -186,7 +183,7 @@
 
 sub _set_implementations {
     my $self = shift;
-    my ($conf, $verbose, $generated) = @_;
+    my ($conf, $generated) = @_;
     my $platform = $conf->data->get('platform');
     my @impls = qw/
         time.c
@@ -238,7 +235,7 @@
 
         if ( -e $impl_file ) {
             local $/ = undef;
-            print("\t$impl_file\n") if $verbose;
+            $conf->debug("\t$impl_file\n");
             open my $IN_C, "<", $impl_file or die "Can't open $impl_file: $!";
 
             # slurp in the C file
@@ -263,7 +260,7 @@
     for my $im (@impls) {
         if ( -e $im ) {
             local $/ = undef;
-            print("\t$im\n") if $verbose;
+            $conf->debug("\t$im\n");
             open my $IN_C, "<", $im or die "Can't open $im: $!";
             print {$PLATFORM_C} <<"END_HERE";
 /*

Modified: branches/gsoc_threads/config/gen/platform/ansi/time.c
==============================================================================
--- branches/gsoc_threads/config/gen/platform/ansi/time.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/platform/ansi/time.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -60,6 +60,8 @@
 
 =item C<void Parrot_sleep(unsigned int seconds)>
 
+Sleep for at least the specified number of seconds.
+
 =cut
 
 */

Modified: branches/gsoc_threads/config/gen/platform/generic/time.c
==============================================================================
--- branches/gsoc_threads/config/gen/platform/generic/time.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/platform/generic/time.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -94,6 +94,7 @@
 
 */
 
+PARROT_EXPORT
 struct tm *
 Parrot_gmtime_r(const time_t *t, struct tm *tm)
 {
@@ -108,6 +109,7 @@
 
 */
 
+PARROT_EXPORT
 struct tm *
 Parrot_localtime_r(const time_t *t, struct tm *tm)
 {
@@ -122,6 +124,7 @@
 
 */
 
+PARROT_EXPORT
 char*
 Parrot_asctime_r(const struct tm *tm, char *buffer)
 {

Modified: branches/gsoc_threads/config/gen/platform/solaris/time.c
==============================================================================
--- branches/gsoc_threads/config/gen/platform/solaris/time.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/platform/solaris/time.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -94,6 +94,7 @@
 
 */
 
+PARROT_EXPORT
 struct tm *
 Parrot_gmtime_r(const time_t *t, struct tm *tm)
 {
@@ -108,6 +109,7 @@
 
 */
 
+PARROT_EXPORT
 struct tm *
 Parrot_localtime_r(const time_t *t, struct tm *tm)
 {
@@ -122,6 +124,7 @@
 
 */
 
+PARROT_EXPORT
 char*
 Parrot_asctime_r(const struct tm *tm, char *buffer)
 {

Modified: branches/gsoc_threads/config/gen/platform/win32/dl.c
==============================================================================
--- branches/gsoc_threads/config/gen/platform/win32/dl.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/platform/win32/dl.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -42,7 +42,7 @@
 
 =item C<const char * Parrot_dlerror(void)>
 
-System-dependant error code that indicates failure in opening a DL.
+System-dependent error code that indicates failure in opening a DL.
 
 =cut
 

Modified: branches/gsoc_threads/config/gen/platform/win32/time.c
==============================================================================
--- branches/gsoc_threads/config/gen/platform/win32/time.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/gen/platform/win32/time.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -122,6 +122,7 @@
 
 */
 
+PARROT_EXPORT
 struct tm *
 Parrot_gmtime_r(const time_t *t, struct tm *tm)
 {
@@ -139,6 +140,7 @@
 
 */
 
+PARROT_EXPORT
 struct tm *
 Parrot_localtime_r(const time_t *t, struct tm *tm)
 {
@@ -157,6 +159,7 @@
 
 */
 
+PARROT_EXPORT
 char*
 Parrot_asctime_r(const struct tm *tm, char *buffer)
 {

Modified: branches/gsoc_threads/config/init/defaults.pm
==============================================================================
--- branches/gsoc_threads/config/init/defaults.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/init/defaults.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -258,6 +258,13 @@
 
     $conf->data->set( 'archname', $Config{archname});
 
+    $conf->data->set( has_extra_nci_thunks => 1 );
+    $conf->data->set( HAS_EXTRA_NCI_THUNKS => 1 );
+    if ( $conf->options->get( 'without-extra-nci-thunks' ) ) {
+        $conf->data->set( has_extra_nci_thunks => 0 );
+        $conf->data->set( HAS_EXTRA_NCI_THUNKS => 0 );
+    }
+
     # adjust archname, cc and libs for e.g. --m=32
     # remember corrected archname - jit.pm was using $Config('archname')
     _64_bit_adjustments($conf);

Modified: branches/gsoc_threads/config/init/hints.pm
==============================================================================
--- branches/gsoc_threads/config/init/hints.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/init/hints.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -31,8 +31,7 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $verbose = $conf->options->get('verbose');
-    print "\n[ " if $verbose;
+    $conf->debug("\n[ ");
 
     my $hints_used = 0;
     my $hints_file;
@@ -46,7 +45,7 @@
     if ( -f $hints_file ) {
         my $hints_pkg = "init::hints::" . $hints_file_name;
 
-        print "$hints_pkg " if $verbose;
+        $conf->debug("$hints_pkg ");
 
         eval "use $hints_pkg";
         die $@ if $@;
@@ -57,7 +56,7 @@
         $hints_used++;
 
         $hints_pkg = "init::hints::local";
-        print "$hints_pkg " if $verbose;
+        $conf->debug("$hints_pkg ");
         eval "use $hints_pkg";
 
         unless ($@) {
@@ -66,14 +65,14 @@
         }
     }
     else {
-        print "No $hints_file found.  " if $verbose;
+        $conf->debug("No $hints_file found.  ");
     }
 
-    if ( $hints_used == 0 and $verbose ) {
-        print "(no hints) ";
+    if ( $hints_used == 0 ) {
+        $conf->debug("(no hints) ");
     }
 
-    print "]" if $verbose;
+    $conf->debug("]");
 
     return 1;
 }

Modified: branches/gsoc_threads/config/init/hints/darwin.pm
==============================================================================
--- branches/gsoc_threads/config/init/hints/darwin.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/init/hints/darwin.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -25,7 +25,6 @@
 
     my $share_ext = $conf->option_or_data('share_ext');
     my $version   = $conf->option_or_data('VERSION');
-    my $verbose = $conf->options->get('verbose');
 
     # The hash referenced by $flagsref is the list of options that have -arch
     # flags added to them implicitly through config/init/defaults.pm when
@@ -35,7 +34,7 @@
     # friends.  So, it's time to remove all -arch flags set in $conf->data and
     # force a single, native architecture to being the default build.
 
-    my $flagsref = _strip_arch_flags($conf, $verbose);
+    my $flagsref = _strip_arch_flags($conf);
 
     # And now, after possibly losing a few undesired compiler and linker
     # flags, on to the main Darwin config.
@@ -98,11 +97,11 @@
 #################### INTERNAL SUBROUTINES ####################
 
 sub _precheck {
-    my ($flag, $stored, $verbose) = @_;
-    if ($verbose) {
-        print "Checking $flag...\n";
-        print "Pre-check: " . ($stored || '(nil)') . "\n";
-    }
+    my ($conf, $flag, $stored) = @_;
+    $conf->debug(
+        "Checking $flag...\n",
+        "Pre-check: " . ($stored || '(nil)') . "\n",
+    );
 }
 
 sub _strip_arch_flags_engine {
@@ -116,27 +115,26 @@
 }
 
 sub _postcheck {
-    my ($flagsref, $flag, $verbose) = @_;
-    if ($verbose) {
-        print "Post-check: ", ( $flagsref->{$flag} or '(nil)' ), "\n";
-    }
+    my ($conf, $flagsref, $flag) = @_;
+    my $f = $flagsref->{$flag} || '(nil)';
+    $conf->debug("Post-check: $f\n");
 }
 
 sub _strip_arch_flags {
-    my ($conf, $verbose) = @_;
+    my ($conf) = @_;
     my $flagsref  = { map { $_ => '' } @{ $defaults{problem_flags} } };
 
-    print "\nStripping -arch flags due to Apple multi-architecture build problems:\n" if $verbose;
+    $conf->debug("\nStripping -arch flags due to Apple multi-architecture build problems:\n");
     for my $flag ( keys %{ $flagsref } ) {
         my $stored = $conf->data->get($flag) || '';
 
-        _precheck($flag, $stored, $verbose);
+        _precheck($conf, $flag, $stored);
 
         $flagsref = _strip_arch_flags_engine(
             $defaults{architectures}, $stored, $flagsref, $flag
         );
 
-        _postcheck($flagsref, $flag, $verbose);
+        _postcheck($conf, $flagsref, $flag);
     }
     return $flagsref;
 }
@@ -167,12 +165,11 @@
 
 sub _probe_for_fink {
     my $conf = shift;
-    my $verbose = $conf->options->get( 'verbose' );
     # Per fink(8), this is location for Fink configuration file, presumably
     # regardless of where Fink itself is installed.
     my $fink_conf    = $defaults{fink_conf};
     unless (-f $fink_conf) {
-        print "Fink configuration file not located\n" if $verbose;
+        $conf->debug("Fink configuration file not located\n");
         return;
     }
     my $fink_conf_str = Parrot::BuildUtil::slurp_file($fink_conf);
@@ -185,8 +182,7 @@
         last;
     }
     unless (defined $fink_base_dir) {
-        print "Fink configuration file defective:  no 'Basepath'\n"
-            if $verbose;
+        $conf->debug("Fink configuration file defective:  no 'Basepath'\n");
         return;
     }
     my $fink_lib_dir = qq{$fink_base_dir/lib};
@@ -196,8 +192,7 @@
         push @unlocateables, $dir unless (-d $dir);
     }
     if (@unlocateables) {
-        print "Could not locate Fink directories:  @unlocateables\n"
-            if $verbose;
+        $conf->debug("Could not locate Fink directories:  @unlocateables\n");
         return;
     }
     else {
@@ -212,7 +207,6 @@
 
 sub _probe_for_macports {
     my $conf = shift;
-    my $verbose = $conf->options->get( 'verbose' );
     my $ports_base_dir = $defaults{ports_base_dir};
     my $ports_lib_dir = qq{$ports_base_dir/lib};
     my $ports_include_dir = qq{$ports_base_dir/include};
@@ -221,8 +215,7 @@
         push @unlocateables, $dir unless (-d $dir);
     }
     if (@unlocateables) {
-        print "Could not locate Macports directories:  @unlocateables\n"
-            if $verbose;
+        $conf->debug("Could not locate Macports directories:  @unlocateables\n");
         return;
     }
     else {
@@ -239,7 +232,6 @@
     my ($conf, $flagsref, $library) = @_;
     my $no_library_option = "darwin_no_$library";
     my $title = ucfirst(lc($library));
-    my $verbose = $conf->options->get( 'verbose' );
     unless ($conf->options->get( $no_library_option ) ) {
         my $addl_flags_ref;
         if ($library eq 'fink') {
@@ -248,14 +240,14 @@
         if ($library eq 'macports') {
             $addl_flags_ref = _probe_for_macports($conf);
         }
-        my $rv = _add_to_flags( $addl_flags_ref, $flagsref, $title, $verbose );
+        my $rv = _add_to_flags( $conf, $addl_flags_ref, $flagsref, $title );
         return $rv;
     }
     return;
 }
 
 sub _add_to_flags {
-    my ( $addl_flags_ref, $flagsref, $title, $verbose ) = @_;
+    my ( $conf, $addl_flags_ref, $flagsref, $title ) = @_;
     if ( defined $addl_flags_ref ) {
         foreach my $addl ( keys %{ $addl_flags_ref } ) {
             my %seen;
@@ -266,10 +258,10 @@
             $flagsref->{$addl} .= " $addl_flags_ref->{$addl}"
                 unless $seen{ $addl_flags_ref->{$addl} };
         }
-        print "Probe for $title successful\n" if $verbose;
+        $conf->debug("Probe for $title successful\n");
     }
     else {
-        print "Probe for $title unsuccessful\n" if $verbose;
+        $conf->debug("Probe for $title unsuccessful\n");
     }
     return 1;
 }

Modified: branches/gsoc_threads/config/init/hints/linux.pm
==============================================================================
--- branches/gsoc_threads/config/init/hints/linux.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/init/hints/linux.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -15,10 +15,8 @@
     my $linkflags = $conf->option_or_data('linkflags');
     my $share_ext = $conf->option_or_data('share_ext');
     my $version   = $conf->option_or_data('VERSION');
-    my $verbose;
 
-    $verbose = $conf->options->get('verbose');
-    print "\n" if $verbose;
+    $conf->debug("\n");
 
     # should find g++ in most cases
     my $link = $conf->data->get('link') || 'c++';
@@ -39,7 +37,7 @@
         $ld_share_flags = ' -shared -g -pipe -fexceptions -fPIC';
         $cc_shared .= ' -fPIC';
 
-        $ccflags = _handle_icc_ccflags($ccflags, $verbose);
+        $ccflags = _handle_icc_ccflags($conf, $ccflags);
 
     }
     elsif ( $cc =~ /suncc/ ) {
@@ -96,7 +94,7 @@
 }
 
 sub _handle_icc_ccflags {
-    my ($ccflags, $verbose) = @_;
+    my ($conf, $ccflags) = @_;
 
     # enable correct floating point behavior
     # which is *not* the default behavior. ahem.
@@ -106,7 +104,7 @@
     # for negative zero without this.
     $ccflags .= ' -fp-model source';
 
-    $verbose and print " ccflags: $ccflags\n";
+    $conf->debug(" ccflags: $ccflags\n");
     return $ccflags;
 }
 

Modified: branches/gsoc_threads/config/init/optimize.pm
==============================================================================
--- branches/gsoc_threads/config/init/optimize.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/init/optimize.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -27,16 +27,12 @@
     };
 }
 
-our $verbose;
-
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    $verbose = $conf->options->get( 'verbose' );
-    print "\n" if $verbose;
+    $conf->debug("\n");
 
-    print "(optimization options: init::optimize)\n"
-        if $verbose;
+    $conf->debug("(optimization options: init::optimize)\n");
 
     # A plain --optimize means use perl5's $Config{optimize}.  If an argument
     # is given, however, use that instead.
@@ -44,7 +40,7 @@
 
     if (! defined $optimize) {
         $self->set_result('no');
-        print "(none requested) " if $conf->options->get('verbose');
+        $conf->debug("(none requested) ");
         return 1;
     }
 
@@ -68,7 +64,7 @@
 
     # save the options, however we got them.
     $conf->data->set( optimize => $options );
-    print "optimize options: ", $options, "\n" if $verbose;
+    $conf->debug("optimize options: ", $options, "\n");
 
     # disable debug flags.
     $conf->data->set( cc_debug => '' );

Modified: branches/gsoc_threads/config/inter/libparrot.pm
==============================================================================
--- branches/gsoc_threads/config/inter/libparrot.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/inter/libparrot.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -46,27 +46,8 @@
     # Parrot can't necessarily handle a pre-existing installed shared
     # libparrot.so. At this point, we don't know the actual name
     # of the shared parrot library. So we try some candidates.
-    my @libs = ('libparrot.so');
-    my @libpaths = ('/usr/local/lib', '/usr/lib', $conf->data->get('libdir'));
-    if ($^O eq 'MSWin32') {
-        push @libpaths, (split /;/, $ENV{PATH});
-        @libs = ('libparrot.dll', 'libparrot.lib', 'libparrot.dll.a');
-    }
-    if ($^O eq 'cygwin') {
-        @libs = ('libparrot.dll.a');
-    }
-    if ($^O eq 'darwin'){
-        @libs = qw/libparrot.dylib libparrot.a/;
-    }
-    if (defined $ENV{LD_LIBRARY_PATH}) {
-        push @libpaths, (split /:/, $ENV{LD_LIBRARY_PATH});
-    }
-    if (defined $ENV{LD_RUN_PATH}) {
-        push @libpaths, (split /:/, $ENV{LD_RUN_PATH});
-    }
-    if (defined $ENV{DYLD_LIBRARY_PATH}) {
-        push @libpaths, (split /:/, $ENV{DYLD_LIBRARY_PATH});
-    }
+    my @libs = get_libs();
+    my @libpaths = get_libpaths($conf);
     foreach my $f (@libs) {
         foreach my $d (@libpaths) {
             my $oldversion = File::Spec->catfile($d, $f);
@@ -164,6 +145,38 @@
     return 1;
 }
 
+sub get_libs {
+    my @libs = ('libparrot.so');
+    if ($^O eq 'MSWin32') {
+        @libs = ('libparrot.dll', 'libparrot.lib', 'libparrot.dll.a');
+    }
+    if ($^O eq 'cygwin') {
+        @libs = ('libparrot.dll.a');
+    }
+    if ($^O eq 'darwin'){
+        @libs = qw/libparrot.dylib libparrot.a/;
+    }
+    return @libs;
+}
+
+sub get_libpaths {
+    my $conf = shift;
+    my @libpaths = ('/usr/local/lib', '/usr/lib', $conf->data->get('libdir'));
+    if ($^O eq 'MSWin32') {
+        push @libpaths, (split /;/, $ENV{PATH});
+    }
+    if (defined $ENV{LD_LIBRARY_PATH}) {
+        push @libpaths, (split /:/, $ENV{LD_LIBRARY_PATH});
+    }
+    if (defined $ENV{LD_RUN_PATH}) {
+        push @libpaths, (split /:/, $ENV{LD_RUN_PATH});
+    }
+    if (defined $ENV{DYLD_LIBRARY_PATH}) {
+        push @libpaths, (split /:/, $ENV{DYLD_LIBRARY_PATH});
+    }
+    return @libpaths
+}
+
 1;
 
 # Local Variables:

Modified: branches/gsoc_threads/config/inter/progs.pm
==============================================================================
--- branches/gsoc_threads/config/inter/progs.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/config/inter/progs.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -100,7 +100,7 @@
         if $ask;
     $conf->data->set( ccflags => $ccflags );
 
-    $conf->options->get('verbose') and print "\nccflags: $ccflags\n";
+    $conf->debug("\nccflags: $ccflags\n");
 
     $linkflags = $conf->data->get('linkflags');
     $linkflags =~ s/-libpath:\S+//g;    # TT #854: No idea why.

Modified: branches/gsoc_threads/docs/book/draft/chXX_hlls.pod
==============================================================================
--- branches/gsoc_threads/docs/book/draft/chXX_hlls.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/book/draft/chXX_hlls.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -126,12 +126,15 @@
 
 =begin PIR
 
+  .include 'stdio.pasm'
+
   .sub main
-    $P0 = getstdin
+    $P0 = getinterp
+    $P0 = $P0.'stdhandle'(.PIO_STDIN_FILENO)
     $P1 = compreg 'PIR'
     
     loop_top:
-      $S0 = readline $P0
+      $S0 = $P0.'readline'()
       $S0 = ".sub '' :anon\n" . $S0
       $S0 = $S0 . "\n.end\n"
       $P2 = $P1($S0)

Modified: branches/gsoc_threads/docs/book/pir/ch04_variables.pod
==============================================================================
--- branches/gsoc_threads/docs/book/pir/ch04_variables.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/book/pir/ch04_variables.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -133,12 +133,16 @@
 C<vers>X<vers opcode> (versine).  All angle arguments for the X<trigonometric
 opcodes> trigonometric opcodes are in radians:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'trans_ops'
+
+  # ...
 
   $N0 = sin $N1
   $N0 = exp 2
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 The majority of the floating-point operations have a single argument and a
 single result. The arguments can generally be either an integer or number, but
@@ -167,14 +171,18 @@
 The C<or>X<or opcode> opcode returns the first argument if
 it's true and the second argument otherwise:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'bit_ops'
+
+  # ...
 
   $I0 = or 1, 0  # returns 1
   $I0 = or 0, 2  # returns 2
 
   $P0 = or $P1, $P2
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID[
 
 Both C<and> and C<or> are short-circuiting ops. If they can determine what
 value to return from the first argument, they'll never evaluate the second.
@@ -210,30 +218,42 @@
 value that is the logical AND, OR, or XOR of each bit in the source arguments.
 They each take two arguments.
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'bit_ops'
+
+  # ...
 
   $I0 = bor $I1, $I2
   $P0 = bxor $P1, $I2
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 C<band>, C<bor>, and C<bxor> also have variants that modify the result
 in place.
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'bit_ops'
+
+  # ...
 
   $I0 = band $I1
   $P0 = bor $P1
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 C<bnot>X<bnot opcode> is the logical NOT of each bit in the source argument.
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'bit_ops'
+
+  # ...
 
   $I0 = bnot $I1
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 X<shl opcode>
 X<shr opcode>
@@ -241,13 +261,17 @@
 The logical and arithmetic shift operations shift their values by a specified
 number of bits:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'bit_ops'
+
+  # ...
 
   $I0 = shl $I1, $I2        # shift $I1 left by count $I2
   $I0 = shr $I1, $I2        # arithmetic shift right
   $P0 = lsr $P1, $P2        # logical shift right
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 =head2 Working with Strings
 
@@ -889,14 +913,18 @@
 operation on each byte of the strings to produce the result string.
 Remember that in-place string operations are no longer available.
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'bit_ops'
+
+  # ...
 
   $P0 = bors $P1
   $P0 = bands $P1
   $S0 = bors $S1, $S2
   $P0 = bxors $P1, $S2
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 The bitwise string opcodes produce meaningful results only when used with
 simple ASCII strings, because Parrot performs bitwise operations per byte.

Modified: branches/gsoc_threads/docs/book/pir/ch08_io.pod
==============================================================================
--- branches/gsoc_threads/docs/book/pir/ch08_io.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/book/pir/ch08_io.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -12,24 +12,32 @@
 The C<open>X<open opcode> opcode opens a new filehandle. It takes a
 string argument, which is the path to the file:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'io_ops'
+
+  # ...
 
   $P0 = open 'my/file/name.txt'
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 By default, it opens the filehandle as read-only, but an optional second string
 argument can specify the mode for the file. The modes are C<r> for read, C<w>
 for write, C<a> for append, and C<p> for pipe:N<These are the same as the C
 language read-modes, so may be familiar.>
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'io_ops'
+
+  # ...
 
   $P0 = open 'my/file/name.txt', 'a'
 
   $P0 = open 'myfile.txt', 'r'
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 You can combine modes; a handle that can read and write uses the mode string
 C<rw>. A handle that can read and write but will not overwrite the existing
@@ -42,11 +50,15 @@
 input, standard output, or standard error filehandles, though you can
 recreate them.>
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'io_ops'
+
+  # ...
 
   close $P0
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 The C<print>X<print opcode> opcode prints a string argument or the
 string form of an integer, number, or PMC to a filehandle:
@@ -71,13 +83,19 @@
 mentioning is the C<printerr>X<printerr opcode> opcode, which prints an
 argument to the standard error instead of standard output:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
 
   say 'Turnip'
 
+  # ...
+
+  .loadlib 'io_ops'
+
+  # ...
+
   printerr 'Blancmange'
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 The C<read>X<read opcode> and C<readline>X<readline opcode> opcodes read
 values from a filehandle.  C<read> takes an integer value and returns a
@@ -85,44 +103,58 @@
 of input from a filehandle and returns the string without the trailing
 newline:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'io_ops'
 
   $S0 = read $P0, 10
 
   $S0 = readline $P0
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 The C<read> opcode has a one-argument variant that reads from standard input:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
 
-      $S0 = read 10
+  .loadlib 'io_ops'
 
-=end PIR_FRAGMENT
+  # ...
+
+  $S0 = read 10
+
+=end PIR_FRAGMENT_INVALID
 
 The C<getstdin>X<getstdin opcode>, C<getstdout>X<getstdout opcode>, and
 C<getstderr>X<getstderr opcode> opcodes fetch the filehandle objects for
 the standard streams: standard input, standard output, and standard
 error:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'io_ops'
+
+  # ...
 
   $P0 = getstdin    # Standard input handle
   $P1 = getstdout   # Standard output handle
   $P2 = getstderr   # Standard error handle
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 Once you have the filehandle for one of the standard streams, you can use it
 just like any other filehandle object:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+  .loadlib 'io_ops'
+
+  # ...
 
   $P0 = getstdout
   print $P0, 'hello'
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 This following example reads data from the file F<myfile.txt> one line at a
 time using the C<readline> opcode. As it loops over the lines of the file, it
@@ -131,6 +163,8 @@
 
 =begin PIR
 
+  .loadlib 'io_ops'
+
   .sub 'main'
     $P0 = getstdout
     $P1 = open 'myfile.txt', 'r'

Modified: branches/gsoc_threads/docs/compiler_faq.pod
==============================================================================
--- branches/gsoc_threads/docs/compiler_faq.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/compiler_faq.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -526,7 +526,9 @@
 
 or with the class object:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
+
+    .loadlib 'io_ops'
 
     $P1 = get_class 'Dog'   # find the 'Dog' class
     unless null $P1 goto have_dog_class
@@ -535,7 +537,7 @@
   have_dog_class:
     new $P0, $P1    # creates a Dog object and stores it in register $P0
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 The chief difference is that using a string constant will produce the
 specific error "Class 'Dog' not found" if that happens to be the case;

Modified: branches/gsoc_threads/docs/parrotbyte.pod
==============================================================================
--- branches/gsoc_threads/docs/parrotbyte.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/parrotbyte.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -166,10 +166,7 @@
   | label offset                              |
   +----------+----------+----------+----------+
 
-Fixup type B<0>, known as enum_fixup_label, has a label symbol and an offset
-into the bytecode.
-
-Fixup type B<1>, known as enum_fixup_sub, has a label symbol that is the name
+Fixup type B<enum_fixup_sub>, has a label symbol that is the name
 of the "sub" and an offset into the constant table, referencing a Sub, Closure
 or Coroutine PMC.
 

Modified: branches/gsoc_threads/docs/parrothist.pod
==============================================================================
--- branches/gsoc_threads/docs/parrothist.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/parrothist.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -104,7 +104,7 @@
 
  chromatic   2.0.0 *        2010-Jan-19     "Inevitable"
  darbelo     2.1.0          2010-Feb-16     "As Scheduled"
- coke        2.1.1          2010-Feb-19
+ coke        2.1.1          2010-Feb-19     (bugfix release)
  cotto       2.2.0          2010-Mar-16     "Like Clockwork"
 
  Gerd        2.3.0 *        2010-Apr-20     "Samoan Lory"

Modified: branches/gsoc_threads/docs/pdds/draft/pdd31_hll.pod
==============================================================================
--- branches/gsoc_threads/docs/pdds/draft/pdd31_hll.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/pdds/draft/pdd31_hll.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -77,11 +77,11 @@
 
 =item C<eval>
 
-    $P0 = compiler.'eval'(source [, options :named :slurpy])
+    $P0 = compiler.'eval'(source [, args :slurpy] [, options :named :slurpy])
 
 Compile and evaluate (execute) the code given by C<source>
-according to C<options>.  The available options are generally
-the same as for the C<compile> method above; in particular,
+with C<args> and according to C<options>.  The available options 
+are generally the same as for the C<compile> method above; in particular,
 the C<outer_ctx> option can be used to specify the outer lexical
 context for the evaluated source.
 

Modified: branches/gsoc_threads/docs/pdds/pdd13_bytecode.pod
==============================================================================
--- branches/gsoc_threads/docs/pdds/pdd13_bytecode.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/pdds/pdd13_bytecode.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -389,7 +389,9 @@
   | 5      | n      | String data with trailing zero padding as required.    |
   +--------+--------+--------------------------------------------------------+
 
-Note: The encoding field is not implemented yet and is set to 0.
+Note: The encoding and charset are currently packed together with the Flags,
+using an unique field of Length 1.
+
 
 =item * PMC Constants
 

Modified: branches/gsoc_threads/docs/pdds/pdd20_lexical_vars.pod
==============================================================================
--- branches/gsoc_threads/docs/pdds/pdd20_lexical_vars.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/pdds/pdd20_lexical_vars.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -14,7 +14,7 @@
 
 =head2 Synopsis
 
-=begin PIR
+=begin PIR_INVALID
 
     .sub 'foo'
         .lex "$a", $P0
@@ -52,7 +52,7 @@
         $P0 = find_lex "x"   # SUCCEEDS
     .end
 
-=end PIR
+=end PIR_INVALID
 
 =head2 Description
 

Modified: branches/gsoc_threads/docs/pdds/pdd21_namespaces.pod
==============================================================================
--- branches/gsoc_threads/docs/pdds/pdd21_namespaces.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/pdds/pdd21_namespaces.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -585,7 +585,7 @@
 
 should map roughly to this PIR:
 
-=begin PIR
+=begin PIR_INVALID
 
   .HLL "Perl5"
   .loadlib "perl5_group"
@@ -596,7 +596,7 @@
     set_global "$x", $P0
   .end
 
-=end PIR
+=end PIR_INVALID
 
 In this case, the C<main> sub would be tied to Perl 5 by the C<.HLL>
 directive, so a Perl 5 namespace would be created.
@@ -613,7 +613,7 @@
 these cases, Parrot should create the namespace based on the HLL of the PIR
 subroutine that calls the store function.
 
-=begin PIR
+=begin PIR_INVALID
 
   .HLL "Perl5"
   .loadlib "perl5_group"
@@ -635,7 +635,7 @@
     set_global $P2, $S0, $P3
   .end
 
-=end PIR
+=end PIR_INVALID
 
 In this case, C<set_global> should see that it was called from "main",
 which is in a Perl 5 namespace, so it will create the "Foo" namespace as

Modified: branches/gsoc_threads/docs/pdds/pdd22_io.pod
==============================================================================
--- branches/gsoc_threads/docs/pdds/pdd22_io.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/pdds/pdd22_io.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -464,6 +464,8 @@
 
 =begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   $P0 = open $S1
   $P0 = open $S1, $S2
   $P0 = open $P1
@@ -488,6 +490,8 @@
 
 =begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   close $P0
   close $P0, $P1
 
@@ -554,14 +558,16 @@
 
 =item C<printerr>
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   printerr $I0
   printerr $N0
   printerr $S0
   printerr $P0
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 Writes an integer, float, string, or PMC value to standard error.
 
@@ -578,6 +584,8 @@
 
 =begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   $S0 = read $I1
   $S0 = read $P1, $I2
   $P0 = read $P1, $I2, $P3
@@ -598,6 +606,8 @@
 
 =begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   $S0 = readline $P1
   $P0 = readline $P1, $P2
 
@@ -613,12 +623,14 @@
 
 =item C<peek>
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   $S0 = peek
   $S0 = peek $P1
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 [C<peek>, C<seek>, C<tell>, and C<poll> are all candidates for moving from
 opcodes to FileHandle object methods.]
@@ -641,6 +653,8 @@
 
 =begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   seek $P0, $I1, $I2
   seek $P0, $I1, $I2, $I3
   seek $P0, $I1, $I2, $P3
@@ -664,6 +678,8 @@
 
 =begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   $I0 = tell $P1
   ($I0, $I1) = tell $P2
 

Modified: branches/gsoc_threads/docs/pdds/pdd28_strings.pod
==============================================================================
--- branches/gsoc_threads/docs/pdds/pdd28_strings.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/pdds/pdd28_strings.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -161,7 +161,7 @@
 code must always assume a variable-byte encoding, and use expensive
 lookaheads. The cost is incurred on every operation, though the particular
 string operated on might not contain combining characters. It's particularly
-noticeable in parsing and regular expression matches, where backtracking
+noticeable in parsing and regular expres699sion matches, where backtracking
 operations may re-traverse the characters of a simple string hundreds of
 times.
 
@@ -296,7 +296,7 @@
 may be variably sized.}}
 
 =item hashval
-
+699
 A cache of the hash value of the string, for rapid lookups when the string is
 used as a hash key.
 

Modified: branches/gsoc_threads/docs/running.pod
==============================================================================
--- branches/gsoc_threads/docs/running.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/running.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -169,6 +169,11 @@
 Turn on interpreter debug flag. See C<parrot --help-debug> for available flag
 bits.
 
+=item --hash-seed <hexnum>
+
+Sets the hash seed to the provided value. Only useful for debugging
+intermittent failures, and harmful in production.
+
 =item --gc-debug
 
 Turn on GC (Garbage Collection) debugging. This imposes some stress on the GC

Modified: branches/gsoc_threads/docs/tests.pod
==============================================================================
--- branches/gsoc_threads/docs/tests.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/tests.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -111,7 +111,7 @@
 
         Parrot_run_native(interp, the_test);
         printf("done\n");
-    fflush(stdout);
+        fflush(stdout);
         return 0;
     }
 
@@ -190,10 +190,9 @@
 
 The files in F<t/postconfigure> are tests for build system. The build tools
 tests are intended to be run after someone has made changes in modules such as
-F<lib/Parrot/Pmc2cUtils/>, F<Ops2cUtils/> and F<Ops2pmutils/>.  They're set up
-to be run after F<Configure.pl> has completed but before make has been invoked.
-(In fact, they will generate errors if make has completed.)  You can run them
-with any of the following:
+F<lib/Parrot/Pmc2cUtils/>.  They're set up to be run after F<Configure.pl> has
+completed but before make has been invoked.  (In fact, they will generate
+errors if make has completed.)  You can run them with any of the following:
  
      perl Configure.pl --test
      perl Configure.pl --test=build

Modified: branches/gsoc_threads/docs/user/pir/intro.pod
==============================================================================
--- branches/gsoc_threads/docs/user/pir/intro.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/docs/user/pir/intro.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -410,22 +410,26 @@
 pass it a string register or variable where you wish the characters
 read to be placed and the number of characters you wish to read:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
+  ...
   read $S1, 100
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 This line will read 100 characters (or until the end of the line) and
 put the read string into C<$S1>. In case you need a number, just
 assign the string to the correct register type:
 
-=begin PIR_FRAGMENT
+=begin PIR_FRAGMENT_INVALID
 
+  .loadlib 'io_ops'
   read $S1, 100
+  ...
   $I1 = $S1
 
-=end PIR_FRAGMENT
+=end PIR_FRAGMENT_INVALID
 
 With the PIR syntax shown in this article you should be able to start
 writing simple programs. Next article we will look into available

Modified: branches/gsoc_threads/editor/pir-mode.el
==============================================================================
--- branches/gsoc_threads/editor/pir-mode.el	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/editor/pir-mode.el	Thu Jun 10 21:09:12 2010	(r47545)
@@ -66,7 +66,7 @@
   :type 'boolean
   :group 'pir)
 
-(defcustom pir-basic-indent 8
+(defcustom pir-basic-indent 4
   "*Extra indentation applied to statements in PIR block structures."
   :type 'integer
   :group 'pir)

Modified: branches/gsoc_threads/examples/benchmarks/primes.pasm
==============================================================================
--- branches/gsoc_threads/examples/benchmarks/primes.pasm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/benchmarks/primes.pasm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -42,6 +42,7 @@
     div     P4, P1, 2
     # Check if P3 is a factor of P1
 LOOP:
+.loadlib 'math_ops' # cmod is a dynop
     cmod    P5, P1, P3
     if      P5, OK
 

Modified: branches/gsoc_threads/examples/benchmarks/primes_i.pasm
==============================================================================
--- branches/gsoc_threads/examples/benchmarks/primes_i.pasm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/benchmarks/primes_i.pasm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -30,6 +30,7 @@
 	set     I3, 2
 	div     I4, I1, 2
 LOOP:   # Check if I3 is a factor of I1
+.loadlib 'math_ops' # cmod is a dynop
 	cmod    I5, I1, I3
 	if      I5, OK
 	# We've found a factor, so it can't be a prime and

Modified: branches/gsoc_threads/examples/embed/cotorra.c
==============================================================================
--- branches/gsoc_threads/examples/embed/cotorra.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/embed/cotorra.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -227,18 +227,18 @@
     if (stname) {
         Parrot_PMC rootns = Parrot_get_root_namespace(interp);
         Parrot_String parrotname = create_string(interp, "parrot");
-        Parrot_PMC parrotns = Parrot_PMC_get_pmc_strkey(interp, rootns, parrotname);
+        Parrot_PMC parrotns = Parrot_PMC_get_pmc_keyed_str(interp, rootns, parrotname);
         Parrot_String name = create_string(interp, stname);
-        Parrot_PMC start = Parrot_PMC_get_pmc_strkey(interp, parrotns, name);
+        Parrot_PMC start = Parrot_PMC_get_pmc_keyed_str(interp, parrotns, name);
         if (Parrot_pmc_is_null(interp, start))
             fail("start sub not found");
         if (i < argc) {
             int pos;
             Parrot_PMC arg = Parrot_PMC_new(interp,
                     Parrot_PMC_typenum(interp, "FixedStringArray"));
-            Parrot_PMC_set_intval(interp, arg, argc - i);
+            Parrot_PMC_set_integer_native(interp, arg, argc - i);
             for (pos = 0; i < argc; ++i, ++pos) {
-                Parrot_PMC_set_string_intkey(interp, arg, pos, create_string(interp, argv[i]));
+                Parrot_PMC_set_string_keyed_int(interp, arg, pos, create_string(interp, argv[i]));
             }
             Parrot_ext_call(interp, start, "P->", arg);
         }

Modified: branches/gsoc_threads/examples/io/get.pir
==============================================================================
--- branches/gsoc_threads/examples/io/get.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/io/get.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -21,12 +21,13 @@
 
 .sub 'main' :main
     .param pmc args
-    load_bytecode 'LWP.pir'
+    load_bytecode 'LWP/UserAgent.pir'
     $S0 = shift args
     .local string url
     url = shift args
     .local pmc ua, response
     ua = new ['LWP';'UserAgent']
+    ua.'env_proxy'()
     ua.'show_progress'(1)
     response = ua.'get'(url, 'close' :named('Connection'))
     $S0 = response.'content'()

Modified: branches/gsoc_threads/examples/io/http.pir
==============================================================================
--- branches/gsoc_threads/examples/io/http.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/io/http.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -53,7 +53,7 @@
     print "Socket error\n"
     end
 END:
-    close sock
+    sock.'close'()
     end
 .end
 

Modified: branches/gsoc_threads/examples/io/httpd.pir
==============================================================================
--- branches/gsoc_threads/examples/io/httpd.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/io/httpd.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -95,6 +95,9 @@
 .include 'except_types.pasm'
 .include 'socket.pasm'
 
+.loadlib 'io_ops'
+.loadlib 'sys_ops'
+
 .sub main :main
     .local pmc listener, work, fp
     .local pmc fp               # read requested files from disk

Modified: branches/gsoc_threads/examples/io/post.pir
==============================================================================
--- branches/gsoc_threads/examples/io/post.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/io/post.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -30,10 +30,11 @@
     set $P0, 1
     $P0[0] = 'parrot_test_run.tar.gz'
     push contents, $P0
-    load_bytecode 'LWP.pir'
+    load_bytecode 'LWP/UserAgent.pir'
     .const string url = 'http://smolder.plusthree.com/app/projects/process_add_report/8'
     .local pmc ua, response
     ua = new ['LWP';'UserAgent']
+    ua.'env_proxy'()
     ua.'show_progress'(1)
     response = ua.'post'(url, contents :flat, 'form-data' :named('Content-Type'), 'close' :named('Connection'))
     $I0 = response.'code'()

Modified: branches/gsoc_threads/examples/json/postalcodes.pir
==============================================================================
--- branches/gsoc_threads/examples/json/postalcodes.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/json/postalcodes.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -18,6 +18,7 @@
 =cut
 
 .include 'socket.pasm'
+.loadlib 'io_ops'
 
 .sub _main :main
     .param pmc argv

Modified: branches/gsoc_threads/examples/languages/abc/abc.pir
==============================================================================
--- branches/gsoc_threads/examples/languages/abc/abc.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/languages/abc/abc.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -56,8 +56,6 @@
 
 .namespace [ 'abc'; 'Compiler' ]
 
-.loadlib 'abc_group'
-
 .sub '' :anon :load :init
     .local pmc abc
     $P0 = get_root_global ['parrot'], 'P6metaclass'

Modified: branches/gsoc_threads/examples/languages/squaak/doc/tutorial_episode_1.pod
==============================================================================
--- branches/gsoc_threads/examples/languages/squaak/doc/tutorial_episode_1.pod	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/languages/squaak/doc/tutorial_episode_1.pod	Thu Jun 10 21:09:12 2010	(r47545)
@@ -9,7 +9,7 @@
 Parrot Compiler Tools. If you're interested in virtual machines, you've
 probably heard of the Parrot virtual machine. Parrot is a generic virtual
 machine designed for dynamic languages. This is in contrast with the Java
-virtual machine (JVM) and Microsoft's Common Language Runtime (CLR), both of
+virtual machine (JVM) and Microsoft's B<C>ommon B<L>anguage B<R>untime (CLR), both of
 which were designed to run static languages. Both the JVM and Microsoft
 (through the Dynamic Language Runtime -- DLR) are adding support for dynamic
 languages, but their primary focus is still static languages.
@@ -17,7 +17,7 @@
 =head2 High Level Languages
 
 The main purpose of a virtual machine is to run programs. These programs are
-typically written in some High Level Language (HLL). Some well-known dynamic
+typically written in some B<H>igh B<L>evel B<L>anguage (HLL). Some well-known dynamic
 languages (sometimes referred to as scripting languages) are Lua, Perl, PHP,
 Python, Ruby, and Tcl. Parrot is designed to be able to run all these languages.
 Each language that Parrot hosts, needs a compiler to parse the syntax of the
@@ -34,7 +34,7 @@
 
 =head2 The Parrot Compiler Toolkit
 
-Enter the Parrot Compiler Toolkit (PCT). In order to make Parrot an interesting
+Enter the B<P>arrot B<C>ompiler B<T>oolkit (PCT). In order to make Parrot an interesting
 target for language developers, the process of constructing a compiler should be
 supported by the right tools. Just as any construction task becomes much easier
 if you have the right tools (you wouldn't build a house using only your bare
@@ -99,13 +99,13 @@
 
 =over 4
 
-=item Parrot Grammar Engine (PGE).
+=item B<P>arrot B<G>rammar B<E>ngine (PGE).
 
 The PGE is an advanced engine for regular expressions. Besides regexes as found
 in Perl 5, it can also be used to define language grammars, using Perl 6 syntax.
 (Check the references for the specification.)
 
-=item Parrot Abstract Syntax Tree (PAST).
+=item B<P>arrot B<A>bstract B<S>yntax B<T>ree (PAST).
 
 The PAST nodes are a set of classes defining generic abstract syntax tree nodes
 that represent common language constructs.
@@ -114,7 +114,7 @@
 
 This class is the compiler driver for any PCT-based compiler.
 
-=item Not Quite Perl (6) (NQP).
+=item B<N>ot B<Q>uite B<P>erl (6) (NQP).
 
 NQP is a lightweight language inspired by Perl 6 and can be used to write the
 methods that must be executed during the parsing phase, just as you can write
@@ -140,18 +140,18 @@
  $ perl tools/dev/mk_language_shell.pl Squaak languages/squaak
 
 (Note: if you're on Windows, you should use backslashes.) This will generate the
-files in a directory languages/squaak, and use the name Squaak as the language's
-name. The last config step is to create the Makefile for your new language:
+files in a directory F<languages/squaak>, and use the name Squaak as the language's
+name.
 
- $  perl Configure.pl --languages=squaak
+After this, go to the directory F<languages/squaak> and type:
 
-After this, go to the directory languages/squaak and type:
-
- $ make test
+ $ parrot setup.pir test
 
 This will compile the generated files and run the test suite. If you want more
 information on what files are being generated, please check out the references
-at the end of this episode.
+at the end of this episode or read the documentation included in the file
+F<mk_language_shell.pl>. For that you can use an installed parrot executable
+from your distribution or one you have just compiled.
 
 Note that we didn't write a single line of code, and already we have the basic
 infrastructure in place to get us started. Of course, the generated compiler
@@ -163,7 +163,7 @@
 
  say "Squaak!";
 
-Save the file (for instance as test.sq) and type:
+Save it the as file F<test.sq> and type:
 
  $ ../../parrot squaak.pbc test.sq
 

Modified: branches/gsoc_threads/examples/languages/squaak/squaak.pir
==============================================================================
--- branches/gsoc_threads/examples/languages/squaak/squaak.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/languages/squaak/squaak.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -26,8 +26,6 @@
 
 .namespace [ 'Squaak';'Compiler' ]
 
-.loadlib 'squaak_group'
-
 .sub 'onload' :anon :load :init
     load_bytecode 'PCT.pbc'
 

Modified: branches/gsoc_threads/examples/languages/squaak/src/builtins/say.pir
==============================================================================
--- branches/gsoc_threads/examples/languages/squaak/src/builtins/say.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/languages/squaak/src/builtins/say.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -24,9 +24,13 @@
     .return ()
 .end
 
+.include 'stdio.pasm'
+
 .sub 'read'
-    $P0 = getstdin
-    $S0 = readline $P0
+    .local pmc stdin
+    $P0 = getinterp
+    stdin = $P0.'stdhandle'(.PIO_STDIN_FILENO)
+    $S0 = stdin.'readline'()
     .return ($S0)
 .end
 

Modified: branches/gsoc_threads/examples/languages/squaak/t/00-sanity.t
==============================================================================
--- branches/gsoc_threads/examples/languages/squaak/t/00-sanity.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/languages/squaak/t/00-sanity.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -88,7 +88,6 @@
 
 # for-statement
 
-var i = 1
 
 for var i = 18, 20 do
     print("ok ", i)
@@ -104,11 +103,11 @@
 #end
 
 
-i = 0
-while i < 5 do
+var j = 0
+while j < 5 do
 
-    print("ok ", i + g)
-    i = i + 1
+    print("ok ", j + g)
+    j = j + 1
 end
 
 

Modified: branches/gsoc_threads/examples/library/md5sum.pir
==============================================================================
--- branches/gsoc_threads/examples/library/md5sum.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/library/md5sum.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -24,6 +24,8 @@
 
 =cut
 
+.loadlib 'os'       # OS object
+
 .sub _main :main
     .param pmc args
 
@@ -34,9 +36,9 @@
     $I0 = $I0 - 1
     if $I0 > 0 goto has_args
     $S0 = args[0]
-    printerr "(parrot) "
-    printerr $S0
-    printerr " filename [filename ...]\n"
+    print "(parrot) "
+    print $S0
+    print " filename [filename ...]\n"
     exit 1
 
 has_args:
@@ -50,7 +52,10 @@
     file = args[$I1]
     .include "stat.pasm"
     # Get size of file
-    size = stat file, .STAT_FILESIZE
+    .local pmc os, stat_buf
+    os = new ['OS']
+    stat_buf = os.'stat'(file)
+    size = stat_buf[7]
     .local pmc pio, cl
     cl = new 'FileHandle'
     # slurp the file into memory
@@ -60,8 +65,12 @@
     $I2 = length contents
     if $I2 == size goto size_ok
 
-    printerr file
-    printerr ": size mismatch\n"
+    print file
+    print ": size mismatch ("
+    print size
+    print " vs "
+    print $I2
+    print ")\n"
     goto iter_cont
 
 size_ok:

Modified: branches/gsoc_threads/examples/library/ncurses_life.pir
==============================================================================
--- branches/gsoc_threads/examples/library/ncurses_life.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/library/ncurses_life.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -56,6 +56,8 @@
 
 =cut
 
+.loadlib 'io_ops'
+
 .sub _MAIN :main
     .param pmc argv
     # the command line

Modified: branches/gsoc_threads/examples/nci/xlibtest.pir
==============================================================================
--- branches/gsoc_threads/examples/nci/xlibtest.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/nci/xlibtest.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -277,13 +277,14 @@
 
     push_eh newfile
     .local pmc handle
-    handle = open filename, 'r'
+    handle = new 'FileHandle'
+    handle.'open'(filename, 'r')
     pop_eh
 
     push_eh failed
     .local string jsonfile
     jsonfile = handle.'readall'()
-    close handle
+    handle.'close'()
 
     load_language 'data_json'
     .local pmc json, jsonobject, jsondata
@@ -322,10 +323,11 @@
     .local string jsonfile
     jsonfile = _json(jsondata)
     .local pmc handle
-    handle = open filename, 'w'
+    handle = new 'FileHandle'
+    handle.'open'(filename, 'w')
     print handle, jsonfile
     print handle, "\n"
-    close handle
+    handle.'close'()
     .return()
 failed:
     .local pmc exception

Modified: branches/gsoc_threads/examples/pasm/cat.pasm
==============================================================================
--- branches/gsoc_threads/examples/pasm/cat.pasm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pasm/cat.pasm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,6 +19,8 @@
 
 =cut
 
+.loadlib 'io_ops'
+
 	getstdin P0
 	getstdout P1
 REDO:

Modified: branches/gsoc_threads/examples/pge/demo.pir
==============================================================================
--- branches/gsoc_threads/examples/pge/demo.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pge/demo.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -2,6 +2,7 @@
 # $Id$
 
 .include "errors.pasm"
+.include 'stdio.pasm'
 .sub _main
     .local string x
     .local string pattern
@@ -34,8 +35,9 @@
   read_loop:
     print "\ninput \"regex <pattern>\", \"glob <pattern>\", \"save <name>\",\n"
     print "target string, \"pir\", \"exp\", \"trace\", \"next\"\n"
-    getstdin stdin
-    readline x, stdin
+    $P0 = getinterp
+    stdin = $P0.'stdhandle'(.PIO_STDIN_FILENO)
+    x = stdin.'readline'()
     length $I0, x
     if $I0 < 1 goto end_demo
     $I0 = index x, " "

Modified: branches/gsoc_threads/examples/pir/befunge/befunge.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/befunge/befunge.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/befunge/befunge.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,6 +1,9 @@
 # Copyright (C) 2002-2009, Parrot Foundation.
 # $Id$
 
+.loadlib 'io_ops'
+
+.include "stdio.pasm"
 .include "debug.pir"
 .include "flow.pir"
 .include "io.pir"
@@ -15,7 +18,8 @@
 
     # disable buffering on stdout
     .local pmc stdout
-    getstdout stdout
+    $P0 = getinterp
+    stdout = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
     stdout.'buffer_type'("unbuffered")
 
     # parsing argv

Modified: branches/gsoc_threads/examples/pir/befunge/debug.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/befunge/debug.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/befunge/debug.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -179,8 +179,9 @@
     _debug__print_status()
 
     print "bef> "
-    $P0 = getstdin
-    $S0 = readline $P0
+    $P0 = getinterp
+    $P0 = $P0.'stdhandle'(.PIO_STDIN_FILENO)
+    $S0 = $P0.'readline'()
     $S0 = chopn $S0, 1
     $I0 = length $S0
 

Modified: branches/gsoc_threads/examples/pir/befunge/io.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/befunge/io.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/befunge/io.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -39,8 +39,9 @@
     $I0 = length $S0
     if $I0 > 0 goto _IO__INPUT_CHAR__SUBSTR
 
-    $P1 = getstdin
-    $S0 = readline $P1
+    $P1 = getinterp
+    $P1 = $P1.'stdhandle'(.PIO_STDIN_FILENO)
+    $S0 = $P1.'readline'()
     $S0 = chopn $S0, 1
 
   _IO__INPUT_CHAR__SUBSTR:
@@ -71,8 +72,9 @@
     len = length $S0
     if len > 0 goto _IO__INPUT_INT__PARSE_INPUT
 
-    $P1 = getstdin
-    $S0 = readline $P1
+    $P1 = getinterp
+    $P1 = $P1.'stdhandle'(.PIO_STDIN_FILENO)
+    $S0 = $P1.'readline'()
     $S0 = chopn $S0, 1
     len = length $S0
 

Added: branches/gsoc_threads/examples/pir/coop_threads.pir
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/examples/pir/coop_threads.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -0,0 +1,169 @@
+
+
+=head1 Cooperative threads in pure PIR
+
+This file demonstrates cooperative concurrency using continuations
+on Parrot.
+
+See also
+http://www.parrot.org/content/threads-are-continuations
+
+=cut
+
+=head1 th_init
+
+First, we create an array to store unscheduled threads in. For simplicity,
+this is stored in a global.
+
+=cut
+
+.include 'interpinfo.pasm'
+
+.sub th_init
+    $P0 = new 'ResizablePMCArray'
+    set_global 'threads', $P0
+.end
+
+=head1 th_create
+
+This is the 'spawn' call. It takes a sub and schedules it to run as a
+thread.
+
+=cut
+
+.sub th_create
+    .param pmc in_sub
+    $P0 = get_global 'threads'
+    push $P0, in_sub
+.end
+
+=head1 th_resched
+
+This is the 'yield' call. When called from a running thread, it saves the
+current point in the computation as a continuation and runs the next thread.
+
+=cut
+
+.sub th_resched
+    .local pmc cur_th, next_th, ths
+    ths = get_global 'threads'
+
+    # This gets the return continuation for the currently running sub.
+    # When this continuation is invoked, it will be as if this call
+    # to th_resched just returned.
+    cur_th = interpinfo .INTERPINFO_CURRENT_CONT
+    push ths, cur_th
+
+again:  
+    next_th = shift ths
+    invokecc next_th
+
+    $I0 = ths
+    if $I0 > 0 goto again
+.end
+
+=head1 th_main
+
+This starts up the thread system (after some threads have been scheduled) and makes
+sure the program doesn't exit before all the threads have run to completion.
+
+=cut
+
+.sub th_main
+    .local pmc ths
+
+again1: 
+    ths = get_global 'threads'
+
+    $I0 = ths
+    if $I0 <= 0 goto done
+
+    th_resched()
+    
+    goto again1
+done:   
+.end
+
+=head1
+
+That's it. All we need now is some test threads and a main function to run them.
+
+=cut
+
+.sub sub1
+    say "sub1: Hallo"
+    th_resched()
+
+    say "sub1: Dance! <(\"< >\")> <(\"<"
+    th_resched()
+
+    say "sub1: Bye"
+.end
+
+.sub sub2
+    say "sub2: Hallo"
+    th_resched()
+
+    say "sub2: Dance! >\")> <(\"< >\")>"
+    th_resched()
+
+    say "sub2: Bye"
+.end
+
+.sub sub3
+    say "sub3: Good morning"
+
+    th_resched()
+    
+    $I0 = 5
+    $I1 = $I0 + 3
+
+    th_resched()
+    
+    print "sub3: 5 + 3 = "
+    say $I1
+
+    th_resched()
+
+    say "sub3: Is leaving."
+.end
+
+.sub main :main
+    th_init()
+
+    $P0 = get_global 'sub1'
+    th_create($P0)
+
+    $P0 = get_global 'sub3'
+    th_create($P0)
+    
+    $P0 = get_global 'sub2'
+    th_create($P0)
+
+    th_main()
+
+    say "All done"
+.end
+
+=head1 Expected Output
+
+The program should (and does) produce this output:
+
+sub1: Hallo
+sub3: Good morning
+sub2: Hallo
+sub1: Dance! <("< >")> <("<
+sub2: Dance! >")> <("< >")>
+sub1: Bye
+sub3: 5 + 3 = 8
+sub2: Bye
+sub3: Is leaving.
+All done
+
+=cut
+                         
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gsoc_threads/examples/pir/io.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/io.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/io.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -17,6 +17,8 @@
 
 =cut
 
+.loadlib 'io_ops' # convenient I/O dynamic opcodes
+
 .sub 'example' :main
     .local string test_fn
     test_fn = "tmp_example_io.tmp"

Modified: branches/gsoc_threads/examples/pir/life.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/life.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/life.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -86,7 +86,10 @@
 	inc $I0
 	mod $I31,$I0,100
 	if $I31, skip
-	printerr "."
+        $P0 = getinterp
+        .include 'stdio.pasm'
+        $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+	print $P1, "."
 skip:
 
 	local_branch jmpstack,  generate

Modified: branches/gsoc_threads/examples/pir/make_hello_pbc.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/make_hello_pbc.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/make_hello_pbc.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -84,9 +84,10 @@
 
     # Now pack Packfile and save it
     $S0 = pf
-    $P1 = open "generated_hello.pbc", "w"
+    $P1 = new ['FileHandle']
+    $P1.'open'("generated_hello.pbc", "w")
     $P1.'puts'($S0)
-    close $P1
+    $P1.'close'()
 
     # And check it!
     load_bytecode 'generated_hello.pbc'

Modified: branches/gsoc_threads/examples/pir/pirric.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/pirric.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/pirric.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -49,6 +49,10 @@
 
 .include 'warnings.pasm'
 
+.loadlib 'io_ops'
+.loadlib 'debug_ops'
+.loadlib 'trans_ops'
+
 #-----------------------------------------------------------------------
 
 .sub pirric_aux_loadbytecode

Modified: branches/gsoc_threads/examples/pir/quine_ord.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/quine_ord.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/quine_ord.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,6 +1,9 @@
 # Copyright (C) 2006-2010, Parrot Foundation.
 # ATT no autoexpanding svn markers please
 
+# XXX currently broken
+.loadlib 'io_ops'
+
 .sub quine :main
     .param pmc argv
 

Modified: branches/gsoc_threads/examples/pir/readline.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/readline.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/readline.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,6 +19,7 @@
 =cut
 
 .include 'cclass.pasm'
+.loadlib 'io_ops'
 
 .sub "example" :main
         .local pmc stdin

Modified: branches/gsoc_threads/examples/pir/sudoku.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/sudoku.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/sudoku.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -151,6 +151,9 @@
 
 .const string VERSION="0.2.3"
 
+.loadlib 'bit_ops'
+.loadlib 'io_ops'
+
 .sub _main :main
     .param pmc argv
     .local int argc

Modified: branches/gsoc_threads/examples/pir/uniq.pir
==============================================================================
--- branches/gsoc_threads/examples/pir/uniq.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/pir/uniq.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -41,6 +41,8 @@
 
 =cut
 
+.loadlib 'io_ops' # convenient I/O dynamic opcodes
+
 .sub "uniq" :main
   .param pmc argv
 

Modified: branches/gsoc_threads/examples/sdl/lcd/clock.pir
==============================================================================
--- branches/gsoc_threads/examples/sdl/lcd/clock.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/sdl/lcd/clock.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -20,6 +20,8 @@
 
 .include "tm.pasm"
 .include "timer.pasm"
+.loadlib 'sys_ops'
+.loadlib 'math_ops'
 
 =item _main
 

Modified: branches/gsoc_threads/examples/sdl/minesweeper/field.pir
==============================================================================
--- branches/gsoc_threads/examples/sdl/minesweeper/field.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/sdl/minesweeper/field.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -35,6 +35,7 @@
 =cut
 
 .include "iterator.pasm"
+.loadlib 'math_ops'
 .namespace ["Mines::Field"]
 
 # size of a single mine field, in pixels

Modified: branches/gsoc_threads/examples/shootout/binarytrees.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/binarytrees.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/binarytrees.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -6,6 +6,8 @@
 # by Joshua Isom, modified by Leopold Toetsch
 # modified by karl : default value of N=10 to match shootout output
 
+.loadlib 'trans_ops'
+
 .sub itemcheck
 	.param pmc node
 	$I0 = exists node[0]

Modified: branches/gsoc_threads/examples/shootout/fasta.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/fasta.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/fasta.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -160,10 +160,12 @@
 
 .sub main :main
 	.param pmc argv
-	.local pmc stdout
+	.local pmc interp, stdout
 	.local int n
 	# stdout is linebuffered per default - make it block buffered
-	stdout = getstdout
+        .include 'stdio.pasm'
+        interp = getinterp
+	stdout = interp.'stdhandle'(.PIO_STDOUT_FILENO)
 	stdout.'buffer_size'(40960)
 	$I0 = argv
 	if $I0 > 1 goto argsok

Modified: branches/gsoc_threads/examples/shootout/knucleotide.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/knucleotide.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/knucleotide.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,6 +1,8 @@
 # Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 
+.loadlib 'io_ops'
+
 .sub main :main
 	.local pmc stdin
 	.local string line

Modified: branches/gsoc_threads/examples/shootout/nbody.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/nbody.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/nbody.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -9,6 +9,8 @@
 # speed up  from 1m25 to 6s by Leopold Toetsch
 # changed default value to 1000 to match shootout default (karl)
 
+.loadlib 'trans_ops'
+
 .const int x = 0
 .const int y = 1
 .const int z = 2

Modified: branches/gsoc_threads/examples/shootout/partialsums-2.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/partialsums-2.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/partialsums-2.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,6 +7,8 @@
 # By Joshua Isom
 # changed default value to N=25000 (shootout test default) Karl Forner
 
+.loadlib 'trans_ops'
+
 .sub main :main
 	.param pmc argv
 	.local int k, n

Modified: branches/gsoc_threads/examples/shootout/partialsums.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/partialsums.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/partialsums.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,6 +7,8 @@
 # By Joshua Isom
 # changed default value to N=25000 (shootout test default) Karl Forner
 
+.loadlib 'trans_ops'
+
 .sub main :main
 	.param pmc argv
 	.local int k, n

Modified: branches/gsoc_threads/examples/shootout/regexdna.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/regexdna.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/regexdna.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -61,8 +61,11 @@
 	############################################
 	# Read in the file
 beginwhile:
-	chunk = read 65535
-	chunklen = length chunk
+        $P0      = getinterp
+        .include 'stdio.pasm'
+        $P1      = $P0.'stdhandle'(.PIO_STDIN_FILENO)
+        chunk    = $P1.'read'(65535)
+        chunklen = length chunk
 	unless chunklen goto endwhile
 	# They don't say you have to match case insenitive...
 	chunk = downcase chunk

Modified: branches/gsoc_threads/examples/shootout/revcomp.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/revcomp.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/revcomp.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -35,15 +35,17 @@
 .sub main :main
 	.local pmc stdin, stdout
 	.local string line, seq
-	stdin = getstdin
-	stdout = getstdout
+        $P0    = getinterp
+        .include 'stdio.pasm'
+        stdin  = $P0.'stdhandle'(.PIO_STDIN_FILENO)
+        stdout = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
 	# stdout is linebuffered per default - make it block buffered
 	stdout.'buffer_size'(8192)
 
 	seq = ''
 
 beginwhile:
-	line = readline stdin
+	line = stdin.'readline'()
 	unless line goto endwhile
 	$I0 = ord line
 	unless $I0 == 62 goto else   # '>'

Modified: branches/gsoc_threads/examples/shootout/sumcol.pir
==============================================================================
--- branches/gsoc_threads/examples/shootout/sumcol.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/shootout/sumcol.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,17 +7,19 @@
 # N.B. it is called the sum-file benchmark on the computer shootout (KF)
 
 .sub main :main
-	.local pmc stdin
+	.local pmc interp, stdin
 	.local string line
 	.local int count, tmp, linelen
-	count = 0
-	stdin = getstdin
+	count  = 0
+	interp = getinterp
+        .include 'stdio.pasm'
+	stdin  = interp.'stdhandle'(.PIO_STDIN_FILENO)
 beginwhile:
-	line = readline stdin
+	line    = stdin.'readline'()
 	linelen = length line
 	unless linelen goto endwhile
-	tmp	= line
-	count += tmp
+	tmp     = line
+	count  += tmp
 	goto beginwhile
 endwhile:
 	print count

Modified: branches/gsoc_threads/examples/tge/branch/transform.pir
==============================================================================
--- branches/gsoc_threads/examples/tge/branch/transform.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/tge/branch/transform.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -105,21 +105,24 @@
     $I0 = argv
     if $I0 == 2 goto fromfile
 
-    filehandle = getstdin
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    filehandle = $P0.'stdhandle'(.PIO_STDIN_FILENO)
     goto grabline
 
   fromfile:
     # Read in the source file
     filename = argv[1]
-    filehandle = open filename, 'r'
+    filehandle = new ['FileHandle']
+    filehandle.'open'(filename, 'r')
 
   grabline:
-    $S1 = read filehandle, 65535
+    $S1 = filehandle.'read'(65535)
 #    $S1 = readline filehandle
 #    print $S1
 
     if $I0 != 2 goto finished
-    close filehandle
+    filehandle.'close'()
 
   finished:
     .return ($S1)

Modified: branches/gsoc_threads/examples/tools/pbc_checker.cpp
==============================================================================
--- branches/gsoc_threads/examples/tools/pbc_checker.cpp	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/tools/pbc_checker.cpp	Thu Jun 10 21:09:12 2010	(r47545)
@@ -728,10 +728,16 @@
 {
     opcode flags;
     opcode charset;
+    const opcode encoding_none = 0xFFFF;
+    opcode encoding = encoding_none;
     if (pbc_major > 5 && pbc_minor > 11) {
         opcode flags_charset = read_opcode(pbcfile);
         flags = flags_charset & 0xFF;
         charset = flags_charset >> 8;
+        if (pbc_major > 6 || pbc_minor >= 17) {
+            encoding = charset >> 8;
+            charset &= 0xFF;
+        }
     }
     else {
         flags = read_opcode(pbcfile);
@@ -740,6 +746,8 @@
 
     cout << "Flags: 0x" << hex << setw(6) << flags << dec;
     cout << " Charset: " << charset;
+    if (encoding != encoding_none)
+        cout << " Encoding: " << encoding;
 
     // Encoding not saved, see TT #468
     //opcode encoding = read_opcode(pbcfile);

Modified: branches/gsoc_threads/examples/tutorial/40_file_ops.pir
==============================================================================
--- branches/gsoc_threads/examples/tutorial/40_file_ops.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/examples/tutorial/40_file_ops.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -10,14 +10,16 @@
 .sub main :main
     .local pmc fileout, filein
 
-    fileout = open '40_file_ops_data.txt', 'w'
-    print fileout, "The quick brown fox jumps over the lazy dog.\n"
-    close fileout
+    fileout = new ['FileHandle']
+    fileout.'open'('40_file_ops_data.txt', 'w')
+    fileout.'print'("The quick brown fox jumps over the lazy dog.\n")
+    fileout.'close'()
 
-    filein = open '40_file_ops_data.txt', 'r'
-    $S0 = readline filein
+    filein = new ['FileHandle']
+    filein.'open'('40_file_ops_data.txt', 'r')
+    $S0 = filein.'readline'()
     say $S0
-    close filein
+    filein.'close'()
 
     # Be nice and remove the temporary file we created.
     $P0 = loadlib 'os'

Modified: branches/gsoc_threads/ext/nqp-rx/src/stage0/HLL-s0.pir
==============================================================================
--- branches/gsoc_threads/ext/nqp-rx/src/stage0/HLL-s0.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/ext/nqp-rx/src/stage0/HLL-s0.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -121,6 +121,27 @@
     # return the result
     .return (ns)
 .end
+
+
+# This sub serves as a cumulative "outer context" for code
+# executed in HLL::Compiler's interactive REPL.  It's invoked
+# exactly once upon load/init to obtain a context, and its
+# default LexPad is replaced with a Hash that we can use to
+# cumulatively store outer context information.  Both the
+# context and hash are then made available via package
+# variables.
+.namespace []
+.sub '&interactive_outer' :lex :init :load
+    .local pmc ctx, pad
+    $P0 = getinterp
+    ctx = $P0['context']
+    set_global ['HLL';'Compiler'], '$interactive_ctx', ctx
+    pad = getattribute ctx, 'lex_pad'
+    $P1 = new ['Hash']
+    copy pad, $P1
+    set_global ['HLL';'Compiler'], '%interactive_pad', pad
+.end
+
 ### .include 'src/cheats/hll-grammar.pir'
 # Copyright (C) 2009, The Perl Foundation.
 
@@ -851,124 +872,166 @@
 # End:
 # vim: expandtab shiftwidth=4 ft=pir:
 
+### .include 'src/cheats/parrot-callcontext.pir'
+.namespace ['CallContext']
+.sub 'lexpad_full' :method
+    .local pmc ctx, lexall, lexpad, lexpad_it
+    ctx = self
+    lexall = root_new ['parrot';'Hash']
+
+  context_loop:
+    if null ctx goto context_done
+    lexpad = getattribute ctx, 'lex_pad'
+    if null lexpad goto lexpad_done
+    lexpad_it = iter lexpad
+  lexpad_loop:
+    unless lexpad_it goto lexpad_done
+    $S0 = shift lexpad_it
+    $I0 = exists lexall[$S0]
+    if $I0 goto lexpad_loop
+    $P0 = lexpad[$S0]
+    lexall[$S0] = $P0
+    goto lexpad_loop
+  lexpad_done:
+    ctx = getattribute ctx, 'outer_ctx'
+    goto context_loop
+  context_done:
+    .return (lexall)
+.end
+
 ### .include 'gen/hllgrammar-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1274022878.64768")
+.sub "_block11"  :anon :subid("10_1275811471.14938")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
+.annotate 'line', 1
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
 .annotate 'line', 5
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
-    $P343 = $P14()
+    $P348 = $P14()
 .annotate 'line', 1
-    .return ($P343)
-    .const 'Sub' $P345 = "104_1274022878.64768" 
-    .return ($P345)
+    .return ($P348)
+    .const 'Sub' $P350 = "106_1275811471.14938" 
+    .return ($P350)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post105") :outer("10_1274022878.64768")
+.sub "" :load :init :subid("post107") :outer("10_1275811471.14938")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1274022878.64768" 
+    .const 'Sub' $P12 = "10_1275811471.14938" 
     .local pmc block
     set block, $P12
-    $P348 = get_root_global ["parrot"], "P6metaclass"
-    $P348."new_class"("HLL::Grammar", "Regex::Cursor" :named("parent"))
+    $P353 = get_root_global ["parrot"], "P6metaclass"
+    $P353."new_class"("HLL::Grammar", "Regex::Cursor" :named("parent"))
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block13"  :subid("11_1274022878.64768") :outer("10_1274022878.64768")
+.sub "_block13"  :subid("11_1275811471.14938") :outer("10_1275811471.14938")
 .annotate 'line', 5
-    .const 'Sub' $P329 = "101_1274022878.64768" 
-    capture_lex $P329
-    .const 'Sub' $P322 = "99_1274022878.64768" 
-    capture_lex $P322
-    .const 'Sub' $P309 = "96_1274022878.64768" 
-    capture_lex $P309
-    .const 'Sub' $P277 = "91_1274022878.64768" 
-    capture_lex $P277
-    .const 'Sub' $P271 = "89_1274022878.64768" 
+    .const 'Sub' $P334 = "103_1275811471.14938" 
+    capture_lex $P334
+    .const 'Sub' $P327 = "101_1275811471.14938" 
+    capture_lex $P327
+    .const 'Sub' $P314 = "98_1275811471.14938" 
+    capture_lex $P314
+    .const 'Sub' $P282 = "93_1275811471.14938" 
+    capture_lex $P282
+    .const 'Sub' $P276 = "91_1275811471.14938" 
+    capture_lex $P276
+    .const 'Sub' $P271 = "89_1275811471.14938" 
     capture_lex $P271
-    .const 'Sub' $P266 = "87_1274022878.64768" 
-    capture_lex $P266
-    .const 'Sub' $P260 = "85_1274022878.64768" 
-    capture_lex $P260
-    .const 'Sub' $P254 = "83_1274022878.64768" 
+    .const 'Sub' $P265 = "87_1275811471.14938" 
+    capture_lex $P265
+    .const 'Sub' $P259 = "85_1275811471.14938" 
+    capture_lex $P259
+    .const 'Sub' $P254 = "83_1275811471.14938" 
     capture_lex $P254
-    .const 'Sub' $P249 = "81_1274022878.64768" 
+    .const 'Sub' $P249 = "81_1275811471.14938" 
     capture_lex $P249
-    .const 'Sub' $P244 = "79_1274022878.64768" 
+    .const 'Sub' $P244 = "79_1275811471.14938" 
     capture_lex $P244
-    .const 'Sub' $P239 = "77_1274022878.64768" 
+    .const 'Sub' $P239 = "77_1275811471.14938" 
     capture_lex $P239
-    .const 'Sub' $P234 = "75_1274022878.64768" 
+    .const 'Sub' $P234 = "75_1275811471.14938" 
     capture_lex $P234
-    .const 'Sub' $P229 = "73_1274022878.64768" 
+    .const 'Sub' $P229 = "73_1275811471.14938" 
     capture_lex $P229
-    .const 'Sub' $P224 = "71_1274022878.64768" 
+    .const 'Sub' $P224 = "71_1275811471.14938" 
     capture_lex $P224
-    .const 'Sub' $P219 = "69_1274022878.64768" 
+    .const 'Sub' $P219 = "69_1275811471.14938" 
     capture_lex $P219
-    .const 'Sub' $P208 = "65_1274022878.64768" 
+    .const 'Sub' $P208 = "65_1275811471.14938" 
     capture_lex $P208
-    .const 'Sub' $P195 = "63_1274022878.64768" 
+    .const 'Sub' $P195 = "63_1275811471.14938" 
     capture_lex $P195
-    .const 'Sub' $P183 = "61_1274022878.64768" 
+    .const 'Sub' $P183 = "61_1275811471.14938" 
     capture_lex $P183
-    .const 'Sub' $P176 = "59_1274022878.64768" 
+    .const 'Sub' $P176 = "59_1275811471.14938" 
     capture_lex $P176
-    .const 'Sub' $P167 = "57_1274022878.64768" 
+    .const 'Sub' $P167 = "57_1275811471.14938" 
     capture_lex $P167
-    .const 'Sub' $P160 = "55_1274022878.64768" 
+    .const 'Sub' $P160 = "55_1275811471.14938" 
     capture_lex $P160
-    .const 'Sub' $P151 = "53_1274022878.64768" 
+    .const 'Sub' $P151 = "53_1275811471.14938" 
     capture_lex $P151
-    .const 'Sub' $P144 = "51_1274022878.64768" 
+    .const 'Sub' $P144 = "51_1275811471.14938" 
     capture_lex $P144
-    .const 'Sub' $P135 = "49_1274022878.64768" 
+    .const 'Sub' $P135 = "49_1275811471.14938" 
     capture_lex $P135
-    .const 'Sub' $P128 = "47_1274022878.64768" 
+    .const 'Sub' $P128 = "47_1275811471.14938" 
     capture_lex $P128
-    .const 'Sub' $P121 = "45_1274022878.64768" 
+    .const 'Sub' $P121 = "45_1275811471.14938" 
     capture_lex $P121
-    .const 'Sub' $P111 = "43_1274022878.64768" 
+    .const 'Sub' $P111 = "43_1275811471.14938" 
     capture_lex $P111
-    .const 'Sub' $P103 = "41_1274022878.64768" 
+    .const 'Sub' $P103 = "41_1275811471.14938" 
     capture_lex $P103
-    .const 'Sub' $P93 = "40_1274022878.64768" 
+    .const 'Sub' $P93 = "40_1275811471.14938" 
     capture_lex $P93
-    .const 'Sub' $P87 = "38_1274022878.64768" 
+    .const 'Sub' $P87 = "38_1275811471.14938" 
     capture_lex $P87
-    .const 'Sub' $P82 = "36_1274022878.64768" 
+    .const 'Sub' $P82 = "36_1275811471.14938" 
     capture_lex $P82
-    .const 'Sub' $P74 = "34_1274022878.64768" 
+    .const 'Sub' $P74 = "34_1275811471.14938" 
     capture_lex $P74
-    .const 'Sub' $P68 = "32_1274022878.64768" 
+    .const 'Sub' $P68 = "32_1275811471.14938" 
     capture_lex $P68
-    .const 'Sub' $P62 = "30_1274022878.64768" 
+    .const 'Sub' $P62 = "30_1275811471.14938" 
     capture_lex $P62
-    .const 'Sub' $P56 = "28_1274022878.64768" 
+    .const 'Sub' $P56 = "28_1275811471.14938" 
     capture_lex $P56
-    .const 'Sub' $P23 = "14_1274022878.64768" 
+    .const 'Sub' $P23 = "14_1275811471.14938" 
     capture_lex $P23
-    .const 'Sub' $P15 = "12_1274022878.64768" 
+    .const 'Sub' $P15 = "12_1275811471.14938" 
     capture_lex $P15
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
 .annotate 'line', 33
-    .const 'Sub' $P329 = "101_1274022878.64768" 
-    capture_lex $P329
+    .const 'Sub' $P334 = "103_1275811471.14938" 
+    capture_lex $P334
 .annotate 'line', 5
-    .return ($P329)
-    .const 'Sub' $P340 = "103_1274022878.64768" 
-    .return ($P340)
+    .return ($P334)
+    .const 'Sub' $P345 = "105_1275811471.14938" 
+    .return ($P345)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "ws"  :subid("12_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "ws"  :subid("12_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 5
     .local string rx16_tgt
     .local int rx16_pos
@@ -982,6 +1045,7 @@
     .local pmc match
     .lex "$/", match
     length rx16_eos, rx16_tgt
+    gt rx16_pos, rx16_eos, rx16_done
     set rx16_off, 0
     lt rx16_pos, 2, rx16_start
     sub rx16_off, rx16_pos, 1
@@ -1052,7 +1116,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__ws"  :subid("13_1274022878.64768") :method
+.sub "!PREFIX__ws"  :subid("13_1275811471.14938") :method
 .annotate 'line', 5
     new $P18, "ResizablePMCArray"
     push $P18, ""
@@ -1061,7 +1125,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "termish"  :subid("14_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "termish"  :subid("14_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 5
     .local string rx24_tgt
     .local int rx24_pos
@@ -1076,6 +1140,7 @@
     .local pmc match
     .lex "$/", match
     length rx24_eos, rx24_tgt
+    gt rx24_pos, rx24_eos, rx24_done
     set rx24_off, 0
     lt rx24_pos, 2, rx24_start
     sub rx24_off, rx24_pos, 1
@@ -1153,7 +1218,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__termish"  :subid("15_1274022878.64768") :method
+.sub "!PREFIX__termish"  :subid("15_1275811471.14938") :method
 .annotate 'line', 5
     new $P26, "ResizablePMCArray"
     push $P26, ""
@@ -1162,7 +1227,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term"  :subid("16_1274022878.64768") :method
+.sub "term"  :subid("16_1275811471.14938") :method
 .annotate 'line', 13
     $P33 = self."!protoregex"("term")
     .return ($P33)
@@ -1170,7 +1235,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term"  :subid("17_1274022878.64768") :method
+.sub "!PREFIX__term"  :subid("17_1275811471.14938") :method
 .annotate 'line', 13
     $P35 = self."!PREFIX__!protoregex"("term")
     .return ($P35)
@@ -1178,7 +1243,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infix"  :subid("18_1274022878.64768") :method
+.sub "infix"  :subid("18_1275811471.14938") :method
 .annotate 'line', 14
     $P37 = self."!protoregex"("infix")
     .return ($P37)
@@ -1186,7 +1251,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infix"  :subid("19_1274022878.64768") :method
+.sub "!PREFIX__infix"  :subid("19_1275811471.14938") :method
 .annotate 'line', 14
     $P39 = self."!PREFIX__!protoregex"("infix")
     .return ($P39)
@@ -1194,7 +1259,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefix"  :subid("20_1274022878.64768") :method
+.sub "prefix"  :subid("20_1275811471.14938") :method
 .annotate 'line', 15
     $P41 = self."!protoregex"("prefix")
     .return ($P41)
@@ -1202,7 +1267,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefix"  :subid("21_1274022878.64768") :method
+.sub "!PREFIX__prefix"  :subid("21_1275811471.14938") :method
 .annotate 'line', 15
     $P43 = self."!PREFIX__!protoregex"("prefix")
     .return ($P43)
@@ -1210,7 +1275,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfix"  :subid("22_1274022878.64768") :method
+.sub "postfix"  :subid("22_1275811471.14938") :method
 .annotate 'line', 16
     $P45 = self."!protoregex"("postfix")
     .return ($P45)
@@ -1218,7 +1283,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfix"  :subid("23_1274022878.64768") :method
+.sub "!PREFIX__postfix"  :subid("23_1275811471.14938") :method
 .annotate 'line', 16
     $P47 = self."!PREFIX__!protoregex"("postfix")
     .return ($P47)
@@ -1226,7 +1291,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "circumfix"  :subid("24_1274022878.64768") :method
+.sub "circumfix"  :subid("24_1275811471.14938") :method
 .annotate 'line', 17
     $P49 = self."!protoregex"("circumfix")
     .return ($P49)
@@ -1234,7 +1299,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__circumfix"  :subid("25_1274022878.64768") :method
+.sub "!PREFIX__circumfix"  :subid("25_1275811471.14938") :method
 .annotate 'line', 17
     $P51 = self."!PREFIX__!protoregex"("circumfix")
     .return ($P51)
@@ -1242,7 +1307,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postcircumfix"  :subid("26_1274022878.64768") :method
+.sub "postcircumfix"  :subid("26_1275811471.14938") :method
 .annotate 'line', 18
     $P53 = self."!protoregex"("postcircumfix")
     .return ($P53)
@@ -1250,7 +1315,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postcircumfix"  :subid("27_1274022878.64768") :method
+.sub "!PREFIX__postcircumfix"  :subid("27_1275811471.14938") :method
 .annotate 'line', 18
     $P55 = self."!PREFIX__!protoregex"("postcircumfix")
     .return ($P55)
@@ -1258,7 +1323,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term:sym<circumfix>"  :subid("28_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "term:sym<circumfix>"  :subid("28_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 5
     .local string rx57_tgt
     .local int rx57_pos
@@ -1272,6 +1337,7 @@
     .local pmc match
     .lex "$/", match
     length rx57_eos, rx57_tgt
+    gt rx57_pos, rx57_eos, rx57_done
     set rx57_off, 0
     lt rx57_pos, 2, rx57_start
     sub rx57_off, rx57_pos, 1
@@ -1316,7 +1382,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1274022878.64768") :method
+.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1275811471.14938") :method
 .annotate 'line', 5
     $P59 = self."!PREFIX__!subrule"("circumfix", "")
     new $P60, "ResizablePMCArray"
@@ -1326,7 +1392,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infixish"  :subid("30_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "infixish"  :subid("30_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 5
     .local string rx63_tgt
     .local int rx63_pos
@@ -1340,6 +1406,7 @@
     .local pmc match
     .lex "$/", match
     length rx63_eos, rx63_tgt
+    gt rx63_pos, rx63_eos, rx63_done
     set rx63_off, 0
     lt rx63_pos, 2, rx63_start
     sub rx63_off, rx63_pos, 1
@@ -1384,9 +1451,9 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("31_1274022878.64768") :method
+.sub "!PREFIX__infixish"  :subid("31_1275811471.14938") :method
 .annotate 'line', 5
-    $P65 = self."!PREFIX__!subrule"("OPER=infix", "")
+    $P65 = self."!PREFIX__!subrule"("infix", "")
     new $P66, "ResizablePMCArray"
     push $P66, $P65
     .return ($P66)
@@ -1394,7 +1461,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefixish"  :subid("32_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "prefixish"  :subid("32_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 5
     .local string rx69_tgt
     .local int rx69_pos
@@ -1408,6 +1475,7 @@
     .local pmc match
     .lex "$/", match
     length rx69_eos, rx69_tgt
+    gt rx69_pos, rx69_eos, rx69_done
     set rx69_off, 0
     lt rx69_pos, 2, rx69_start
     sub rx69_off, rx69_pos, 1
@@ -1457,9 +1525,9 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefixish"  :subid("33_1274022878.64768") :method
+.sub "!PREFIX__prefixish"  :subid("33_1275811471.14938") :method
 .annotate 'line', 5
-    $P71 = self."!PREFIX__!subrule"("OPER=prefix", "")
+    $P71 = self."!PREFIX__!subrule"("prefix", "")
     new $P72, "ResizablePMCArray"
     push $P72, $P71
     .return ($P72)
@@ -1467,7 +1535,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfixish"  :subid("34_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "postfixish"  :subid("34_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 5
     .local string rx75_tgt
     .local int rx75_pos
@@ -1481,6 +1549,7 @@
     .local pmc match
     .lex "$/", match
     length rx75_eos, rx75_tgt
+    gt rx75_pos, rx75_eos, rx75_done
     set rx75_off, 0
     lt rx75_pos, 2, rx75_start
     sub rx75_off, rx75_pos, 1
@@ -1541,10 +1610,10 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfixish"  :subid("35_1274022878.64768") :method
+.sub "!PREFIX__postfixish"  :subid("35_1275811471.14938") :method
 .annotate 'line', 5
-    $P77 = self."!PREFIX__!subrule"("OPER=postcircumfix", "")
-    $P78 = self."!PREFIX__!subrule"("OPER=postfix", "")
+    $P77 = self."!PREFIX__!subrule"("postcircumfix", "")
+    $P78 = self."!PREFIX__!subrule"("postfix", "")
     new $P79, "ResizablePMCArray"
     push $P79, $P77
     push $P79, $P78
@@ -1553,7 +1622,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm"  :subid("36_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "nullterm"  :subid("36_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 5
     .local string rx83_tgt
     .local int rx83_pos
@@ -1567,6 +1636,7 @@
     .local pmc match
     .lex "$/", match
     length rx83_eos, rx83_tgt
+    gt rx83_pos, rx83_eos, rx83_done
     set rx83_off, 0
     lt rx83_pos, 2, rx83_start
     sub rx83_off, rx83_pos, 1
@@ -1604,7 +1674,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm"  :subid("37_1274022878.64768") :method
+.sub "!PREFIX__nullterm"  :subid("37_1275811471.14938") :method
 .annotate 'line', 5
     new $P85, "ResizablePMCArray"
     push $P85, ""
@@ -1613,7 +1683,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm_alt"  :subid("38_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "nullterm_alt"  :subid("38_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 5
     .local string rx88_tgt
     .local int rx88_pos
@@ -1627,6 +1697,7 @@
     .local pmc match
     .lex "$/", match
     length rx88_eos, rx88_tgt
+    gt rx88_pos, rx88_eos, rx88_done
     set rx88_off, 0
     lt rx88_pos, 2, rx88_start
     sub rx88_off, rx88_pos, 1
@@ -1671,9 +1742,9 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm_alt"  :subid("39_1274022878.64768") :method
+.sub "!PREFIX__nullterm_alt"  :subid("39_1275811471.14938") :method
 .annotate 'line', 5
-    $P90 = self."!PREFIX__!subrule"("term", "")
+    $P90 = self."!PREFIX__!subrule"("nullterm", "")
     new $P91, "ResizablePMCArray"
     push $P91, $P90
     .return ($P91)
@@ -1681,11 +1752,12 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nulltermish"  :subid("40_1274022878.64768") :method :outer("11_1274022878.64768")
+.include "except_types.pasm"
+.sub "nulltermish"  :subid("40_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     new $P95, 'ExceptionHandler'
     set_addr $P95, control_94
-    $P95."handle_types"(57)
+    $P95."handle_types"(.CONTROL_RETURN)
     push_eh $P95
     .lex "self", self
     find_lex $P98, "self"
@@ -1708,7 +1780,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_delimited"  :subid("41_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_delimited"  :subid("41_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx104_tgt
     .local int rx104_pos
@@ -1723,6 +1795,7 @@
     .local pmc match
     .lex "$/", match
     length rx104_eos, rx104_tgt
+    gt rx104_pos, rx104_eos, rx104_done
     set rx104_off, 0
     lt rx104_pos, 2, rx104_start
     sub rx104_off, rx104_pos, 1
@@ -1790,7 +1863,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_delimited"  :subid("42_1274022878.64768") :method
+.sub "!PREFIX__quote_delimited"  :subid("42_1275811471.14938") :method
 .annotate 'line', 33
     $P106 = self."!PREFIX__!subrule"("starter", "")
     new $P107, "ResizablePMCArray"
@@ -1800,7 +1873,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_atom"  :subid("43_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_atom"  :subid("43_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx112_tgt
     .local int rx112_pos
@@ -1814,6 +1887,7 @@
     .local pmc match
     .lex "$/", match
     length rx112_eos, rx112_tgt
+    gt rx112_pos, rx112_eos, rx112_done
     set rx112_off, 0
     lt rx112_pos, 2, rx112_start
     sub rx112_off, rx112_pos, 1
@@ -1891,7 +1965,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_atom"  :subid("44_1274022878.64768") :method
+.sub "!PREFIX__quote_atom"  :subid("44_1275811471.14938") :method
 .annotate 'line', 33
     new $P114, "ResizablePMCArray"
     push $P114, ""
@@ -1900,7 +1974,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decint"  :subid("45_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "decint"  :subid("45_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx122_tgt
     .local int rx122_pos
@@ -1914,6 +1988,7 @@
     .local pmc match
     .lex "$/", match
     length rx122_eos, rx122_tgt
+    gt rx122_pos, rx122_eos, rx122_done
     set rx122_off, 0
     lt rx122_pos, 2, rx122_start
     sub rx122_off, rx122_pos, 1
@@ -1972,7 +2047,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decint"  :subid("46_1274022878.64768") :method
+.sub "!PREFIX__decint"  :subid("46_1275811471.14938") :method
 .annotate 'line', 33
     new $P124, "ResizablePMCArray"
     push $P124, ""
@@ -1981,7 +2056,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decints"  :subid("47_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "decints"  :subid("47_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx129_tgt
     .local int rx129_pos
@@ -1996,6 +2071,7 @@
     .local pmc match
     .lex "$/", match
     length rx129_eos, rx129_tgt
+    gt rx129_pos, rx129_eos, rx129_done
     set rx129_off, 0
     lt rx129_pos, 2, rx129_start
     sub rx129_off, rx129_pos, 1
@@ -2065,7 +2141,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decints"  :subid("48_1274022878.64768") :method
+.sub "!PREFIX__decints"  :subid("48_1275811471.14938") :method
 .annotate 'line', 33
     new $P131, "ResizablePMCArray"
     push $P131, ""
@@ -2074,7 +2150,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexint"  :subid("49_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "hexint"  :subid("49_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx136_tgt
     .local int rx136_pos
@@ -2088,6 +2164,7 @@
     .local pmc match
     .lex "$/", match
     length rx136_eos, rx136_tgt
+    gt rx136_pos, rx136_eos, rx136_done
     set rx136_off, 0
     lt rx136_pos, 2, rx136_start
     sub rx136_off, rx136_pos, 1
@@ -2155,7 +2232,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexint"  :subid("50_1274022878.64768") :method
+.sub "!PREFIX__hexint"  :subid("50_1275811471.14938") :method
 .annotate 'line', 33
     new $P138, "ResizablePMCArray"
     push $P138, ""
@@ -2164,7 +2241,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("51_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "hexints"  :subid("51_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx145_tgt
     .local int rx145_pos
@@ -2179,6 +2256,7 @@
     .local pmc match
     .lex "$/", match
     length rx145_eos, rx145_tgt
+    gt rx145_pos, rx145_eos, rx145_done
     set rx145_off, 0
     lt rx145_pos, 2, rx145_start
     sub rx145_off, rx145_pos, 1
@@ -2248,7 +2326,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("52_1274022878.64768") :method
+.sub "!PREFIX__hexints"  :subid("52_1275811471.14938") :method
 .annotate 'line', 33
     new $P147, "ResizablePMCArray"
     push $P147, ""
@@ -2257,7 +2335,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octint"  :subid("53_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "octint"  :subid("53_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx152_tgt
     .local int rx152_pos
@@ -2271,6 +2349,7 @@
     .local pmc match
     .lex "$/", match
     length rx152_eos, rx152_tgt
+    gt rx152_pos, rx152_eos, rx152_done
     set rx152_off, 0
     lt rx152_pos, 2, rx152_start
     sub rx152_off, rx152_pos, 1
@@ -2338,7 +2417,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octint"  :subid("54_1274022878.64768") :method
+.sub "!PREFIX__octint"  :subid("54_1275811471.14938") :method
 .annotate 'line', 33
     new $P154, "ResizablePMCArray"
     push $P154, ""
@@ -2347,7 +2426,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octints"  :subid("55_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "octints"  :subid("55_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx161_tgt
     .local int rx161_pos
@@ -2362,6 +2441,7 @@
     .local pmc match
     .lex "$/", match
     length rx161_eos, rx161_tgt
+    gt rx161_pos, rx161_eos, rx161_done
     set rx161_off, 0
     lt rx161_pos, 2, rx161_start
     sub rx161_off, rx161_pos, 1
@@ -2431,7 +2511,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octints"  :subid("56_1274022878.64768") :method
+.sub "!PREFIX__octints"  :subid("56_1275811471.14938") :method
 .annotate 'line', 33
     new $P163, "ResizablePMCArray"
     push $P163, ""
@@ -2440,7 +2520,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binint"  :subid("57_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "binint"  :subid("57_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx168_tgt
     .local int rx168_pos
@@ -2454,6 +2534,7 @@
     .local pmc match
     .lex "$/", match
     length rx168_eos, rx168_tgt
+    gt rx168_pos, rx168_eos, rx168_done
     set rx168_off, 0
     lt rx168_pos, 2, rx168_start
     sub rx168_off, rx168_pos, 1
@@ -2521,7 +2602,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binint"  :subid("58_1274022878.64768") :method
+.sub "!PREFIX__binint"  :subid("58_1275811471.14938") :method
 .annotate 'line', 33
     new $P170, "ResizablePMCArray"
     push $P170, ""
@@ -2530,7 +2611,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binints"  :subid("59_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "binints"  :subid("59_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx177_tgt
     .local int rx177_pos
@@ -2545,6 +2626,7 @@
     .local pmc match
     .lex "$/", match
     length rx177_eos, rx177_tgt
+    gt rx177_pos, rx177_eos, rx177_done
     set rx177_off, 0
     lt rx177_pos, 2, rx177_start
     sub rx177_off, rx177_pos, 1
@@ -2614,7 +2696,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binints"  :subid("60_1274022878.64768") :method
+.sub "!PREFIX__binints"  :subid("60_1275811471.14938") :method
 .annotate 'line', 33
     new $P179, "ResizablePMCArray"
     push $P179, ""
@@ -2623,7 +2705,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "integer"  :subid("61_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "integer"  :subid("61_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx184_tgt
     .local int rx184_pos
@@ -2637,6 +2719,7 @@
     .local pmc match
     .lex "$/", match
     length rx184_eos, rx184_tgt
+    gt rx184_pos, rx184_eos, rx184_done
     set rx184_off, 0
     lt rx184_pos, 2, rx184_start
     sub rx184_off, rx184_pos, 1
@@ -2771,13 +2854,13 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__integer"  :subid("62_1274022878.64768") :method
+.sub "!PREFIX__integer"  :subid("62_1275811471.14938") :method
 .annotate 'line', 33
-    $P186 = self."!PREFIX__!subrule"("VALUE=decint", "")
-    $P187 = self."!PREFIX__!subrule"("VALUE=decint", "0d")
-    $P188 = self."!PREFIX__!subrule"("VALUE=hexint", "0x")
-    $P189 = self."!PREFIX__!subrule"("VALUE=octint", "0o")
-    $P190 = self."!PREFIX__!subrule"("VALUE=binint", "0b")
+    $P186 = self."!PREFIX__!subrule"("decint", "")
+    $P187 = self."!PREFIX__!subrule"("decint", "0d")
+    $P188 = self."!PREFIX__!subrule"("hexint", "0x")
+    $P189 = self."!PREFIX__!subrule"("octint", "0o")
+    $P190 = self."!PREFIX__!subrule"("binint", "0b")
     new $P191, "ResizablePMCArray"
     push $P191, $P186
     push $P191, $P187
@@ -2789,7 +2872,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "dec_number"  :subid("63_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "dec_number"  :subid("63_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx196_tgt
     .local int rx196_pos
@@ -2804,6 +2887,7 @@
     .local pmc match
     .lex "$/", match
     length rx196_eos, rx196_tgt
+    gt rx196_pos, rx196_eos, rx196_done
     set rx196_off, 0
     lt rx196_pos, 2, rx196_start
     sub rx196_off, rx196_pos, 1
@@ -2968,7 +3052,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__dec_number"  :subid("64_1274022878.64768") :method
+.sub "!PREFIX__dec_number"  :subid("64_1275811471.14938") :method
 .annotate 'line', 33
     new $P198, "ResizablePMCArray"
     push $P198, ""
@@ -2979,7 +3063,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "escale"  :subid("65_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "escale"  :subid("65_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx209_tgt
     .local int rx209_pos
@@ -2993,6 +3077,7 @@
     .local pmc match
     .lex "$/", match
     length rx209_eos, rx209_tgt
+    gt rx209_pos, rx209_eos, rx209_done
     set rx209_off, 0
     lt rx209_pos, 2, rx209_start
     sub rx209_off, rx209_pos, 1
@@ -3056,7 +3141,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__escale"  :subid("66_1274022878.64768") :method
+.sub "!PREFIX__escale"  :subid("66_1275811471.14938") :method
 .annotate 'line', 33
     new $P211, "ResizablePMCArray"
     push $P211, "e"
@@ -3066,7 +3151,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape"  :subid("67_1274022878.64768") :method
+.sub "quote_escape"  :subid("67_1275811471.14938") :method
 .annotate 'line', 79
     $P216 = self."!protoregex"("quote_escape")
     .return ($P216)
@@ -3074,7 +3159,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape"  :subid("68_1274022878.64768") :method
+.sub "!PREFIX__quote_escape"  :subid("68_1275811471.14938") :method
 .annotate 'line', 79
     $P218 = self."!PREFIX__!protoregex"("quote_escape")
     .return ($P218)
@@ -3082,7 +3167,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<backslash>"  :subid("69_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<backslash>"  :subid("69_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx220_tgt
     .local int rx220_pos
@@ -3096,6 +3181,7 @@
     .local pmc match
     .lex "$/", match
     length rx220_eos, rx220_tgt
+    gt rx220_pos, rx220_eos, rx220_done
     set rx220_off, 0
     lt rx220_pos, 2, rx220_start
     sub rx220_off, rx220_pos, 1
@@ -3144,7 +3230,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1275811471.14938") :method
 .annotate 'line', 33
     new $P222, "ResizablePMCArray"
     push $P222, "\\\\"
@@ -3153,7 +3239,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<stopper>"  :subid("71_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<stopper>"  :subid("71_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx225_tgt
     .local int rx225_pos
@@ -3167,6 +3253,7 @@
     .local pmc match
     .lex "$/", match
     length rx225_eos, rx225_tgt
+    gt rx225_pos, rx225_eos, rx225_done
     set rx225_off, 0
     lt rx225_pos, 2, rx225_start
     sub rx225_off, rx225_pos, 1
@@ -3222,7 +3309,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1275811471.14938") :method
 .annotate 'line', 33
     new $P227, "ResizablePMCArray"
     push $P227, "\\"
@@ -3231,7 +3318,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<bs>"  :subid("73_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<bs>"  :subid("73_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx230_tgt
     .local int rx230_pos
@@ -3245,6 +3332,7 @@
     .local pmc match
     .lex "$/", match
     length rx230_eos, rx230_tgt
+    gt rx230_pos, rx230_eos, rx230_done
     set rx230_off, 0
     lt rx230_pos, 2, rx230_start
     sub rx230_off, rx230_pos, 1
@@ -3293,7 +3381,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1275811471.14938") :method
 .annotate 'line', 33
     new $P232, "ResizablePMCArray"
     push $P232, "\\b"
@@ -3302,7 +3390,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<nl>"  :subid("75_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<nl>"  :subid("75_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx235_tgt
     .local int rx235_pos
@@ -3316,6 +3404,7 @@
     .local pmc match
     .lex "$/", match
     length rx235_eos, rx235_tgt
+    gt rx235_pos, rx235_eos, rx235_done
     set rx235_off, 0
     lt rx235_pos, 2, rx235_start
     sub rx235_off, rx235_pos, 1
@@ -3364,7 +3453,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1275811471.14938") :method
 .annotate 'line', 33
     new $P237, "ResizablePMCArray"
     push $P237, "\\n"
@@ -3373,7 +3462,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<cr>"  :subid("77_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<cr>"  :subid("77_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx240_tgt
     .local int rx240_pos
@@ -3387,6 +3476,7 @@
     .local pmc match
     .lex "$/", match
     length rx240_eos, rx240_tgt
+    gt rx240_pos, rx240_eos, rx240_done
     set rx240_off, 0
     lt rx240_pos, 2, rx240_start
     sub rx240_off, rx240_pos, 1
@@ -3435,7 +3525,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1275811471.14938") :method
 .annotate 'line', 33
     new $P242, "ResizablePMCArray"
     push $P242, "\\r"
@@ -3444,7 +3534,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<tab>"  :subid("79_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<tab>"  :subid("79_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx245_tgt
     .local int rx245_pos
@@ -3458,6 +3548,7 @@
     .local pmc match
     .lex "$/", match
     length rx245_eos, rx245_tgt
+    gt rx245_pos, rx245_eos, rx245_done
     set rx245_off, 0
     lt rx245_pos, 2, rx245_start
     sub rx245_off, rx245_pos, 1
@@ -3506,7 +3597,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1275811471.14938") :method
 .annotate 'line', 33
     new $P247, "ResizablePMCArray"
     push $P247, "\\t"
@@ -3515,7 +3606,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<ff>"  :subid("81_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<ff>"  :subid("81_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx250_tgt
     .local int rx250_pos
@@ -3529,6 +3620,7 @@
     .local pmc match
     .lex "$/", match
     length rx250_eos, rx250_tgt
+    gt rx250_pos, rx250_eos, rx250_done
     set rx250_off, 0
     lt rx250_pos, 2, rx250_start
     sub rx250_off, rx250_pos, 1
@@ -3577,7 +3669,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<ff>"  :subid("82_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<ff>"  :subid("82_1275811471.14938") :method
 .annotate 'line', 33
     new $P252, "ResizablePMCArray"
     push $P252, "\\f"
@@ -3586,7 +3678,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<hex>"  :subid("83_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<esc>"  :subid("83_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx255_tgt
     .local int rx255_pos
@@ -3595,11 +3687,12 @@
     .local int rx255_rep
     .local pmc rx255_cur
     (rx255_cur, rx255_pos, rx255_tgt) = self."!cursor_start"()
-    rx255_cur."!cursor_debug"("START ", "quote_escape:sym<hex>")
+    rx255_cur."!cursor_debug"("START ", "quote_escape:sym<esc>")
     .lex unicode:"$\x{a2}", rx255_cur
     .local pmc match
     .lex "$/", match
     length rx255_eos, rx255_tgt
+    gt rx255_pos, rx255_eos, rx255_done
     set rx255_off, 0
     lt rx255_pos, 2, rx255_start
     sub rx255_off, rx255_pos, 1
@@ -3617,57 +3710,21 @@
     set_addr $I10, rxscan258_loop
     rx255_cur."!mark_push"(0, rx255_pos, $I10)
   rxscan258_done:
-.annotate 'line', 89
-  # rx literal  unicode:"\\x"
+.annotate 'line', 88
+  # rx literal  "\\e"
     add $I11, rx255_pos, 2
     gt $I11, rx255_eos, rx255_fail
     sub $I11, rx255_pos, rx255_off
     substr $S10, rx255_tgt, $I11, 2
-    ne $S10, unicode:"\\x", rx255_fail
+    ne $S10, "\\e", rx255_fail
     add rx255_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx255_cur."!cursor_pos"(rx255_pos)
     $P10 = rx255_cur."quotemod_check"("b")
     unless $P10, rx255_fail
-  alt259_0:
-.annotate 'line', 90
-    set_addr $I10, alt259_1
-    rx255_cur."!mark_push"(0, rx255_pos, $I10)
-  # rx subrule "hexint" subtype=capture negate=
-    rx255_cur."!cursor_pos"(rx255_pos)
-    $P10 = rx255_cur."hexint"()
-    unless $P10, rx255_fail
-    rx255_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexint")
-    rx255_pos = $P10."pos"()
-    goto alt259_end
-  alt259_1:
-  # rx literal  "["
-    add $I11, rx255_pos, 1
-    gt $I11, rx255_eos, rx255_fail
-    sub $I11, rx255_pos, rx255_off
-    substr $S10, rx255_tgt, $I11, 1
-    ne $S10, "[", rx255_fail
-    add rx255_pos, 1
-  # rx subrule "hexints" subtype=capture negate=
-    rx255_cur."!cursor_pos"(rx255_pos)
-    $P10 = rx255_cur."hexints"()
-    unless $P10, rx255_fail
-    rx255_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexints")
-    rx255_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx255_pos, 1
-    gt $I11, rx255_eos, rx255_fail
-    sub $I11, rx255_pos, rx255_off
-    substr $S10, rx255_tgt, $I11, 1
-    ne $S10, "]", rx255_fail
-    add rx255_pos, 1
-  alt259_end:
-.annotate 'line', 88
   # rx pass
-    rx255_cur."!cursor_pass"(rx255_pos, "quote_escape:sym<hex>")
-    rx255_cur."!cursor_debug"("PASS  ", "quote_escape:sym<hex>", " at pos=", rx255_pos)
+    rx255_cur."!cursor_pass"(rx255_pos, "quote_escape:sym<esc>")
+    rx255_cur."!cursor_debug"("PASS  ", "quote_escape:sym<esc>", " at pos=", rx255_pos)
     .return (rx255_cur)
   rx255_fail:
 .annotate 'line', 33
@@ -3677,208 +3734,239 @@
     jump $I10
   rx255_done:
     rx255_cur."!cursor_fail"()
-    rx255_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<hex>")
+    rx255_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<esc>")
     .return (rx255_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<hex>"  :subid("84_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<esc>"  :subid("84_1275811471.14938") :method
 .annotate 'line', 33
     new $P257, "ResizablePMCArray"
-    push $P257, unicode:"\\x"
+    push $P257, "\\e"
     .return ($P257)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<oct>"  :subid("85_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<hex>"  :subid("85_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
-    .local string rx261_tgt
-    .local int rx261_pos
-    .local int rx261_off
-    .local int rx261_eos
-    .local int rx261_rep
-    .local pmc rx261_cur
-    (rx261_cur, rx261_pos, rx261_tgt) = self."!cursor_start"()
-    rx261_cur."!cursor_debug"("START ", "quote_escape:sym<oct>")
-    .lex unicode:"$\x{a2}", rx261_cur
+    .local string rx260_tgt
+    .local int rx260_pos
+    .local int rx260_off
+    .local int rx260_eos
+    .local int rx260_rep
+    .local pmc rx260_cur
+    (rx260_cur, rx260_pos, rx260_tgt) = self."!cursor_start"()
+    rx260_cur."!cursor_debug"("START ", "quote_escape:sym<hex>")
+    .lex unicode:"$\x{a2}", rx260_cur
     .local pmc match
     .lex "$/", match
-    length rx261_eos, rx261_tgt
-    set rx261_off, 0
-    lt rx261_pos, 2, rx261_start
-    sub rx261_off, rx261_pos, 1
-    substr rx261_tgt, rx261_tgt, rx261_off
-  rx261_start:
+    length rx260_eos, rx260_tgt
+    gt rx260_pos, rx260_eos, rx260_done
+    set rx260_off, 0
+    lt rx260_pos, 2, rx260_start
+    sub rx260_off, rx260_pos, 1
+    substr rx260_tgt, rx260_tgt, rx260_off
+  rx260_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan264_done
-    goto rxscan264_scan
-  rxscan264_loop:
-    ($P10) = rx261_cur."from"()
+    ne $I10, -1, rxscan263_done
+    goto rxscan263_scan
+  rxscan263_loop:
+    ($P10) = rx260_cur."from"()
     inc $P10
-    set rx261_pos, $P10
-    ge rx261_pos, rx261_eos, rxscan264_done
-  rxscan264_scan:
-    set_addr $I10, rxscan264_loop
-    rx261_cur."!mark_push"(0, rx261_pos, $I10)
-  rxscan264_done:
-.annotate 'line', 93
-  # rx literal  "\\o"
-    add $I11, rx261_pos, 2
-    gt $I11, rx261_eos, rx261_fail
-    sub $I11, rx261_pos, rx261_off
-    substr $S10, rx261_tgt, $I11, 2
-    ne $S10, "\\o", rx261_fail
-    add rx261_pos, 2
+    set rx260_pos, $P10
+    ge rx260_pos, rx260_eos, rxscan263_done
+  rxscan263_scan:
+    set_addr $I10, rxscan263_loop
+    rx260_cur."!mark_push"(0, rx260_pos, $I10)
+  rxscan263_done:
+.annotate 'line', 90
+  # rx literal  unicode:"\\x"
+    add $I11, rx260_pos, 2
+    gt $I11, rx260_eos, rx260_fail
+    sub $I11, rx260_pos, rx260_off
+    substr $S10, rx260_tgt, $I11, 2
+    ne $S10, unicode:"\\x", rx260_fail
+    add rx260_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx261_cur."!cursor_pos"(rx261_pos)
-    $P10 = rx261_cur."quotemod_check"("b")
-    unless $P10, rx261_fail
-  alt265_0:
-.annotate 'line', 94
-    set_addr $I10, alt265_1
-    rx261_cur."!mark_push"(0, rx261_pos, $I10)
-  # rx subrule "octint" subtype=capture negate=
-    rx261_cur."!cursor_pos"(rx261_pos)
-    $P10 = rx261_cur."octint"()
-    unless $P10, rx261_fail
-    rx261_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("octint")
-    rx261_pos = $P10."pos"()
-    goto alt265_end
-  alt265_1:
+    rx260_cur."!cursor_pos"(rx260_pos)
+    $P10 = rx260_cur."quotemod_check"("b")
+    unless $P10, rx260_fail
+  alt264_0:
+.annotate 'line', 91
+    set_addr $I10, alt264_1
+    rx260_cur."!mark_push"(0, rx260_pos, $I10)
+  # rx subrule "hexint" subtype=capture negate=
+    rx260_cur."!cursor_pos"(rx260_pos)
+    $P10 = rx260_cur."hexint"()
+    unless $P10, rx260_fail
+    rx260_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexint")
+    rx260_pos = $P10."pos"()
+    goto alt264_end
+  alt264_1:
   # rx literal  "["
-    add $I11, rx261_pos, 1
-    gt $I11, rx261_eos, rx261_fail
-    sub $I11, rx261_pos, rx261_off
-    substr $S10, rx261_tgt, $I11, 1
-    ne $S10, "[", rx261_fail
-    add rx261_pos, 1
-  # rx subrule "octints" subtype=capture negate=
-    rx261_cur."!cursor_pos"(rx261_pos)
-    $P10 = rx261_cur."octints"()
-    unless $P10, rx261_fail
-    rx261_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("octints")
-    rx261_pos = $P10."pos"()
+    add $I11, rx260_pos, 1
+    gt $I11, rx260_eos, rx260_fail
+    sub $I11, rx260_pos, rx260_off
+    substr $S10, rx260_tgt, $I11, 1
+    ne $S10, "[", rx260_fail
+    add rx260_pos, 1
+  # rx subrule "hexints" subtype=capture negate=
+    rx260_cur."!cursor_pos"(rx260_pos)
+    $P10 = rx260_cur."hexints"()
+    unless $P10, rx260_fail
+    rx260_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexints")
+    rx260_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx261_pos, 1
-    gt $I11, rx261_eos, rx261_fail
-    sub $I11, rx261_pos, rx261_off
-    substr $S10, rx261_tgt, $I11, 1
-    ne $S10, "]", rx261_fail
-    add rx261_pos, 1
-  alt265_end:
-.annotate 'line', 92
+    add $I11, rx260_pos, 1
+    gt $I11, rx260_eos, rx260_fail
+    sub $I11, rx260_pos, rx260_off
+    substr $S10, rx260_tgt, $I11, 1
+    ne $S10, "]", rx260_fail
+    add rx260_pos, 1
+  alt264_end:
+.annotate 'line', 89
   # rx pass
-    rx261_cur."!cursor_pass"(rx261_pos, "quote_escape:sym<oct>")
-    rx261_cur."!cursor_debug"("PASS  ", "quote_escape:sym<oct>", " at pos=", rx261_pos)
-    .return (rx261_cur)
-  rx261_fail:
-.annotate 'line', 33
-    (rx261_rep, rx261_pos, $I10, $P10) = rx261_cur."!mark_fail"(0)
-    lt rx261_pos, -1, rx261_done
-    eq rx261_pos, -1, rx261_fail
+    rx260_cur."!cursor_pass"(rx260_pos, "quote_escape:sym<hex>")
+    rx260_cur."!cursor_debug"("PASS  ", "quote_escape:sym<hex>", " at pos=", rx260_pos)
+    .return (rx260_cur)
+  rx260_fail:
+.annotate 'line', 33
+    (rx260_rep, rx260_pos, $I10, $P10) = rx260_cur."!mark_fail"(0)
+    lt rx260_pos, -1, rx260_done
+    eq rx260_pos, -1, rx260_fail
     jump $I10
-  rx261_done:
-    rx261_cur."!cursor_fail"()
-    rx261_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<oct>")
-    .return (rx261_cur)
+  rx260_done:
+    rx260_cur."!cursor_fail"()
+    rx260_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<hex>")
+    .return (rx260_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<oct>"  :subid("86_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<hex>"  :subid("86_1275811471.14938") :method
 .annotate 'line', 33
-    new $P263, "ResizablePMCArray"
-    push $P263, "\\o"
-    .return ($P263)
+    new $P262, "ResizablePMCArray"
+    push $P262, unicode:"\\x"
+    .return ($P262)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<chr>"  :subid("87_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<oct>"  :subid("87_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
-    .local string rx267_tgt
-    .local int rx267_pos
-    .local int rx267_off
-    .local int rx267_eos
-    .local int rx267_rep
-    .local pmc rx267_cur
-    (rx267_cur, rx267_pos, rx267_tgt) = self."!cursor_start"()
-    rx267_cur."!cursor_debug"("START ", "quote_escape:sym<chr>")
-    .lex unicode:"$\x{a2}", rx267_cur
+    .local string rx266_tgt
+    .local int rx266_pos
+    .local int rx266_off
+    .local int rx266_eos
+    .local int rx266_rep
+    .local pmc rx266_cur
+    (rx266_cur, rx266_pos, rx266_tgt) = self."!cursor_start"()
+    rx266_cur."!cursor_debug"("START ", "quote_escape:sym<oct>")
+    .lex unicode:"$\x{a2}", rx266_cur
     .local pmc match
     .lex "$/", match
-    length rx267_eos, rx267_tgt
-    set rx267_off, 0
-    lt rx267_pos, 2, rx267_start
-    sub rx267_off, rx267_pos, 1
-    substr rx267_tgt, rx267_tgt, rx267_off
-  rx267_start:
+    length rx266_eos, rx266_tgt
+    gt rx266_pos, rx266_eos, rx266_done
+    set rx266_off, 0
+    lt rx266_pos, 2, rx266_start
+    sub rx266_off, rx266_pos, 1
+    substr rx266_tgt, rx266_tgt, rx266_off
+  rx266_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan270_done
-    goto rxscan270_scan
-  rxscan270_loop:
-    ($P10) = rx267_cur."from"()
+    ne $I10, -1, rxscan269_done
+    goto rxscan269_scan
+  rxscan269_loop:
+    ($P10) = rx266_cur."from"()
     inc $P10
-    set rx267_pos, $P10
-    ge rx267_pos, rx267_eos, rxscan270_done
-  rxscan270_scan:
-    set_addr $I10, rxscan270_loop
-    rx267_cur."!mark_push"(0, rx267_pos, $I10)
-  rxscan270_done:
-.annotate 'line', 96
-  # rx literal  "\\c"
-    add $I11, rx267_pos, 2
-    gt $I11, rx267_eos, rx267_fail
-    sub $I11, rx267_pos, rx267_off
-    substr $S10, rx267_tgt, $I11, 2
-    ne $S10, "\\c", rx267_fail
-    add rx267_pos, 2
+    set rx266_pos, $P10
+    ge rx266_pos, rx266_eos, rxscan269_done
+  rxscan269_scan:
+    set_addr $I10, rxscan269_loop
+    rx266_cur."!mark_push"(0, rx266_pos, $I10)
+  rxscan269_done:
+.annotate 'line', 94
+  # rx literal  "\\o"
+    add $I11, rx266_pos, 2
+    gt $I11, rx266_eos, rx266_fail
+    sub $I11, rx266_pos, rx266_off
+    substr $S10, rx266_tgt, $I11, 2
+    ne $S10, "\\o", rx266_fail
+    add rx266_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx267_cur."!cursor_pos"(rx267_pos)
-    $P10 = rx267_cur."quotemod_check"("b")
-    unless $P10, rx267_fail
-  # rx subrule "charspec" subtype=capture negate=
-    rx267_cur."!cursor_pos"(rx267_pos)
-    $P10 = rx267_cur."charspec"()
-    unless $P10, rx267_fail
-    rx267_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("charspec")
-    rx267_pos = $P10."pos"()
+    rx266_cur."!cursor_pos"(rx266_pos)
+    $P10 = rx266_cur."quotemod_check"("b")
+    unless $P10, rx266_fail
+  alt270_0:
+.annotate 'line', 95
+    set_addr $I10, alt270_1
+    rx266_cur."!mark_push"(0, rx266_pos, $I10)
+  # rx subrule "octint" subtype=capture negate=
+    rx266_cur."!cursor_pos"(rx266_pos)
+    $P10 = rx266_cur."octint"()
+    unless $P10, rx266_fail
+    rx266_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("octint")
+    rx266_pos = $P10."pos"()
+    goto alt270_end
+  alt270_1:
+  # rx literal  "["
+    add $I11, rx266_pos, 1
+    gt $I11, rx266_eos, rx266_fail
+    sub $I11, rx266_pos, rx266_off
+    substr $S10, rx266_tgt, $I11, 1
+    ne $S10, "[", rx266_fail
+    add rx266_pos, 1
+  # rx subrule "octints" subtype=capture negate=
+    rx266_cur."!cursor_pos"(rx266_pos)
+    $P10 = rx266_cur."octints"()
+    unless $P10, rx266_fail
+    rx266_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("octints")
+    rx266_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx266_pos, 1
+    gt $I11, rx266_eos, rx266_fail
+    sub $I11, rx266_pos, rx266_off
+    substr $S10, rx266_tgt, $I11, 1
+    ne $S10, "]", rx266_fail
+    add rx266_pos, 1
+  alt270_end:
+.annotate 'line', 93
   # rx pass
-    rx267_cur."!cursor_pass"(rx267_pos, "quote_escape:sym<chr>")
-    rx267_cur."!cursor_debug"("PASS  ", "quote_escape:sym<chr>", " at pos=", rx267_pos)
-    .return (rx267_cur)
-  rx267_fail:
-.annotate 'line', 33
-    (rx267_rep, rx267_pos, $I10, $P10) = rx267_cur."!mark_fail"(0)
-    lt rx267_pos, -1, rx267_done
-    eq rx267_pos, -1, rx267_fail
+    rx266_cur."!cursor_pass"(rx266_pos, "quote_escape:sym<oct>")
+    rx266_cur."!cursor_debug"("PASS  ", "quote_escape:sym<oct>", " at pos=", rx266_pos)
+    .return (rx266_cur)
+  rx266_fail:
+.annotate 'line', 33
+    (rx266_rep, rx266_pos, $I10, $P10) = rx266_cur."!mark_fail"(0)
+    lt rx266_pos, -1, rx266_done
+    eq rx266_pos, -1, rx266_fail
     jump $I10
-  rx267_done:
-    rx267_cur."!cursor_fail"()
-    rx267_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<chr>")
-    .return (rx267_cur)
+  rx266_done:
+    rx266_cur."!cursor_fail"()
+    rx266_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<oct>")
+    .return (rx266_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<chr>"  :subid("88_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<oct>"  :subid("88_1275811471.14938") :method
 .annotate 'line', 33
-    new $P269, "ResizablePMCArray"
-    push $P269, "\\c"
-    .return ($P269)
+    new $P268, "ResizablePMCArray"
+    push $P268, "\\o"
+    .return ($P268)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<0>"  :subid("89_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<chr>"  :subid("89_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
     .local string rx272_tgt
     .local int rx272_pos
@@ -3887,11 +3975,12 @@
     .local int rx272_rep
     .local pmc rx272_cur
     (rx272_cur, rx272_pos, rx272_tgt) = self."!cursor_start"()
-    rx272_cur."!cursor_debug"("START ", "quote_escape:sym<0>")
+    rx272_cur."!cursor_debug"("START ", "quote_escape:sym<chr>")
     .lex unicode:"$\x{a2}", rx272_cur
     .local pmc match
     .lex "$/", match
     length rx272_eos, rx272_tgt
+    gt rx272_pos, rx272_eos, rx272_done
     set rx272_off, 0
     lt rx272_pos, 2, rx272_start
     sub rx272_off, rx272_pos, 1
@@ -3910,41 +3999,27 @@
     rx272_cur."!mark_push"(0, rx272_pos, $I10)
   rxscan275_done:
 .annotate 'line', 97
-  # rx literal  "\\"
-    add $I11, rx272_pos, 1
-    gt $I11, rx272_eos, rx272_fail
-    sub $I11, rx272_pos, rx272_off
-    substr $S10, rx272_tgt, $I11, 1
-    ne $S10, "\\", rx272_fail
-    add rx272_pos, 1
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_276_fail
-    rx272_cur."!mark_push"(0, rx272_pos, $I10)
-  # rx literal  "0"
-    add $I11, rx272_pos, 1
+  # rx literal  "\\c"
+    add $I11, rx272_pos, 2
     gt $I11, rx272_eos, rx272_fail
     sub $I11, rx272_pos, rx272_off
-    substr $S10, rx272_tgt, $I11, 1
-    ne $S10, "0", rx272_fail
-    add rx272_pos, 1
-    set_addr $I10, rxcap_276_fail
-    ($I12, $I11) = rx272_cur."!mark_peek"($I10)
-    rx272_cur."!cursor_pos"($I11)
-    ($P10) = rx272_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx272_pos, "")
-    rx272_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_276_done
-  rxcap_276_fail:
-    goto rx272_fail
-  rxcap_276_done:
+    substr $S10, rx272_tgt, $I11, 2
+    ne $S10, "\\c", rx272_fail
+    add rx272_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx272_cur."!cursor_pos"(rx272_pos)
     $P10 = rx272_cur."quotemod_check"("b")
     unless $P10, rx272_fail
+  # rx subrule "charspec" subtype=capture negate=
+    rx272_cur."!cursor_pos"(rx272_pos)
+    $P10 = rx272_cur."charspec"()
+    unless $P10, rx272_fail
+    rx272_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("charspec")
+    rx272_pos = $P10."pos"()
   # rx pass
-    rx272_cur."!cursor_pass"(rx272_pos, "quote_escape:sym<0>")
-    rx272_cur."!cursor_debug"("PASS  ", "quote_escape:sym<0>", " at pos=", rx272_pos)
+    rx272_cur."!cursor_pass"(rx272_pos, "quote_escape:sym<chr>")
+    rx272_cur."!cursor_debug"("PASS  ", "quote_escape:sym<chr>", " at pos=", rx272_pos)
     .return (rx272_cur)
   rx272_fail:
 .annotate 'line', 33
@@ -3954,884 +4029,1002 @@
     jump $I10
   rx272_done:
     rx272_cur."!cursor_fail"()
-    rx272_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<0>")
+    rx272_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<chr>")
     .return (rx272_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<0>"  :subid("90_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<chr>"  :subid("90_1275811471.14938") :method
 .annotate 'line', 33
     new $P274, "ResizablePMCArray"
-    push $P274, "\\0"
+    push $P274, "\\c"
     .return ($P274)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<misc>"  :subid("91_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "quote_escape:sym<0>"  :subid("91_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
-    .const 'Sub' $P297 = "95_1274022878.64768" 
-    capture_lex $P297
-    .const 'Sub' $P290 = "94_1274022878.64768" 
-    capture_lex $P290
-    .const 'Sub' $P285 = "93_1274022878.64768" 
-    capture_lex $P285
-    .local string rx278_tgt
-    .local int rx278_pos
-    .local int rx278_off
-    .local int rx278_eos
-    .local int rx278_rep
-    .local pmc rx278_cur
-    (rx278_cur, rx278_pos, rx278_tgt) = self."!cursor_start"()
-    rx278_cur."!cursor_debug"("START ", "quote_escape:sym<misc>")
-    .lex unicode:"$\x{a2}", rx278_cur
+    .local string rx277_tgt
+    .local int rx277_pos
+    .local int rx277_off
+    .local int rx277_eos
+    .local int rx277_rep
+    .local pmc rx277_cur
+    (rx277_cur, rx277_pos, rx277_tgt) = self."!cursor_start"()
+    rx277_cur."!cursor_debug"("START ", "quote_escape:sym<0>")
+    .lex unicode:"$\x{a2}", rx277_cur
     .local pmc match
     .lex "$/", match
-    length rx278_eos, rx278_tgt
-    set rx278_off, 0
-    lt rx278_pos, 2, rx278_start
-    sub rx278_off, rx278_pos, 1
-    substr rx278_tgt, rx278_tgt, rx278_off
-  rx278_start:
+    length rx277_eos, rx277_tgt
+    gt rx277_pos, rx277_eos, rx277_done
+    set rx277_off, 0
+    lt rx277_pos, 2, rx277_start
+    sub rx277_off, rx277_pos, 1
+    substr rx277_tgt, rx277_tgt, rx277_off
+  rx277_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan281_done
-    goto rxscan281_scan
-  rxscan281_loop:
-    ($P10) = rx278_cur."from"()
+    ne $I10, -1, rxscan280_done
+    goto rxscan280_scan
+  rxscan280_loop:
+    ($P10) = rx277_cur."from"()
     inc $P10
-    set rx278_pos, $P10
-    ge rx278_pos, rx278_eos, rxscan281_done
-  rxscan281_scan:
-    set_addr $I10, rxscan281_loop
-    rx278_cur."!mark_push"(0, rx278_pos, $I10)
-  rxscan281_done:
+    set rx277_pos, $P10
+    ge rx277_pos, rx277_eos, rxscan280_done
+  rxscan280_scan:
+    set_addr $I10, rxscan280_loop
+    rx277_cur."!mark_push"(0, rx277_pos, $I10)
+  rxscan280_done:
 .annotate 'line', 98
-    rx278_cur."!cursor_pos"(rx278_pos)
-    find_lex $P282, unicode:"$\x{a2}"
-    $P283 = $P282."MATCH"()
-    store_lex "$/", $P283
-.annotate 'line', 99
-    .const 'Sub' $P285 = "93_1274022878.64768" 
-    capture_lex $P285
-    $P286 = $P285()
   # rx literal  "\\"
-    add $I11, rx278_pos, 1
-    gt $I11, rx278_eos, rx278_fail
-    sub $I11, rx278_pos, rx278_off
-    substr $S10, rx278_tgt, $I11, 1
-    ne $S10, "\\", rx278_fail
-    add rx278_pos, 1
-  alt287_0:
+    add $I11, rx277_pos, 1
+    gt $I11, rx277_eos, rx277_fail
+    sub $I11, rx277_pos, rx277_off
+    substr $S10, rx277_tgt, $I11, 1
+    ne $S10, "\\", rx277_fail
+    add rx277_pos, 1
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_281_fail
+    rx277_cur."!mark_push"(0, rx277_pos, $I10)
+  # rx literal  "0"
+    add $I11, rx277_pos, 1
+    gt $I11, rx277_eos, rx277_fail
+    sub $I11, rx277_pos, rx277_off
+    substr $S10, rx277_tgt, $I11, 1
+    ne $S10, "0", rx277_fail
+    add rx277_pos, 1
+    set_addr $I10, rxcap_281_fail
+    ($I12, $I11) = rx277_cur."!mark_peek"($I10)
+    rx277_cur."!cursor_pos"($I11)
+    ($P10) = rx277_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx277_pos, "")
+    rx277_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_281_done
+  rxcap_281_fail:
+    goto rx277_fail
+  rxcap_281_done:
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx277_cur."!cursor_pos"(rx277_pos)
+    $P10 = rx277_cur."quotemod_check"("b")
+    unless $P10, rx277_fail
+  # rx pass
+    rx277_cur."!cursor_pass"(rx277_pos, "quote_escape:sym<0>")
+    rx277_cur."!cursor_debug"("PASS  ", "quote_escape:sym<0>", " at pos=", rx277_pos)
+    .return (rx277_cur)
+  rx277_fail:
+.annotate 'line', 33
+    (rx277_rep, rx277_pos, $I10, $P10) = rx277_cur."!mark_fail"(0)
+    lt rx277_pos, -1, rx277_done
+    eq rx277_pos, -1, rx277_fail
+    jump $I10
+  rx277_done:
+    rx277_cur."!cursor_fail"()
+    rx277_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<0>")
+    .return (rx277_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "!PREFIX__quote_escape:sym<0>"  :subid("92_1275811471.14938") :method
+.annotate 'line', 33
+    new $P279, "ResizablePMCArray"
+    push $P279, "\\0"
+    .return ($P279)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "quote_escape:sym<misc>"  :subid("93_1275811471.14938") :method :outer("11_1275811471.14938")
+.annotate 'line', 33
+    .const 'Sub' $P302 = "97_1275811471.14938" 
+    capture_lex $P302
+    .const 'Sub' $P295 = "96_1275811471.14938" 
+    capture_lex $P295
+    .const 'Sub' $P290 = "95_1275811471.14938" 
+    capture_lex $P290
+    .local string rx283_tgt
+    .local int rx283_pos
+    .local int rx283_off
+    .local int rx283_eos
+    .local int rx283_rep
+    .local pmc rx283_cur
+    (rx283_cur, rx283_pos, rx283_tgt) = self."!cursor_start"()
+    rx283_cur."!cursor_debug"("START ", "quote_escape:sym<misc>")
+    .lex unicode:"$\x{a2}", rx283_cur
+    .local pmc match
+    .lex "$/", match
+    length rx283_eos, rx283_tgt
+    gt rx283_pos, rx283_eos, rx283_done
+    set rx283_off, 0
+    lt rx283_pos, 2, rx283_start
+    sub rx283_off, rx283_pos, 1
+    substr rx283_tgt, rx283_tgt, rx283_off
+  rx283_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan286_done
+    goto rxscan286_scan
+  rxscan286_loop:
+    ($P10) = rx283_cur."from"()
+    inc $P10
+    set rx283_pos, $P10
+    ge rx283_pos, rx283_eos, rxscan286_done
+  rxscan286_scan:
+    set_addr $I10, rxscan286_loop
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+  rxscan286_done:
 .annotate 'line', 100
-    set_addr $I10, alt287_1
-    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+    rx283_cur."!cursor_pos"(rx283_pos)
+    find_lex $P287, unicode:"$\x{a2}"
+    $P288 = $P287."MATCH"()
+    store_lex "$/", $P288
+    .const 'Sub' $P290 = "95_1275811471.14938" 
+    capture_lex $P290
+    $P291 = $P290()
+  # rx literal  "\\"
+    add $I11, rx283_pos, 1
+    gt $I11, rx283_eos, rx283_fail
+    sub $I11, rx283_pos, rx283_off
+    substr $S10, rx283_tgt, $I11, 1
+    ne $S10, "\\", rx283_fail
+    add rx283_pos, 1
+  alt292_0:
 .annotate 'line', 101
-  # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx278_cur."!cursor_pos"(rx278_pos)
-    $P10 = rx278_cur."quotemod_check"("b")
-    unless $P10, rx278_fail
-  alt288_0:
+    set_addr $I10, alt292_1
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
 .annotate 'line', 102
-    set_addr $I10, alt288_1
-    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx283_cur."!cursor_pos"(rx283_pos)
+    $P10 = rx283_cur."quotemod_check"("b")
+    unless $P10, rx283_fail
+  alt293_0:
 .annotate 'line', 103
-  # rx subrule $P290 subtype=capture negate=
-    rx278_cur."!cursor_pos"(rx278_pos)
-    .const 'Sub' $P290 = "94_1274022878.64768" 
-    capture_lex $P290
-    $P10 = rx278_cur.$P290()
-    unless $P10, rx278_fail
-    rx278_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("textqq")
-    rx278_pos = $P10."pos"()
-    goto alt288_end
-  alt288_1:
+    set_addr $I10, alt293_1
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
 .annotate 'line', 104
+  # rx subrule $P295 subtype=capture negate=
+    rx283_cur."!cursor_pos"(rx283_pos)
+    .const 'Sub' $P295 = "96_1275811471.14938" 
+    capture_lex $P295
+    $P10 = rx283_cur.$P295()
+    unless $P10, rx283_fail
+    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("textqq")
+    rx283_pos = $P10."pos"()
+    goto alt293_end
+  alt293_1:
+.annotate 'line', 105
   # rx subcapture "x"
-    set_addr $I10, rxcap_293_fail
-    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+    set_addr $I10, rxcap_298_fail
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
   # rx charclass w
-    ge rx278_pos, rx278_eos, rx278_fail
-    sub $I10, rx278_pos, rx278_off
-    is_cclass $I11, 8192, rx278_tgt, $I10
-    unless $I11, rx278_fail
-    inc rx278_pos
-    set_addr $I10, rxcap_293_fail
-    ($I12, $I11) = rx278_cur."!mark_peek"($I10)
-    rx278_cur."!cursor_pos"($I11)
-    ($P10) = rx278_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx278_pos, "")
-    rx278_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx283_pos, rx283_eos, rx283_fail
+    sub $I10, rx283_pos, rx283_off
+    is_cclass $I11, 8192, rx283_tgt, $I10
+    unless $I11, rx283_fail
+    inc rx283_pos
+    set_addr $I10, rxcap_298_fail
+    ($I12, $I11) = rx283_cur."!mark_peek"($I10)
+    rx283_cur."!cursor_pos"($I11)
+    ($P10) = rx283_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx283_pos, "")
+    rx283_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("x")
-    goto rxcap_293_done
-  rxcap_293_fail:
-    goto rx278_fail
-  rxcap_293_done:
-    rx278_cur."!cursor_pos"(rx278_pos)
-    find_lex $P294, unicode:"$\x{a2}"
-    $P295 = $P294."MATCH"()
-    store_lex "$/", $P295
-    .const 'Sub' $P297 = "95_1274022878.64768" 
-    capture_lex $P297
-    $P307 = $P297()
-  alt288_end:
-.annotate 'line', 101
-    goto alt287_end
-  alt287_1:
-.annotate 'line', 106
+    goto rxcap_298_done
+  rxcap_298_fail:
+    goto rx283_fail
+  rxcap_298_done:
+    rx283_cur."!cursor_pos"(rx283_pos)
+    find_lex $P299, unicode:"$\x{a2}"
+    $P300 = $P299."MATCH"()
+    store_lex "$/", $P300
+    .const 'Sub' $P302 = "97_1275811471.14938" 
+    capture_lex $P302
+    $P312 = $P302()
+  alt293_end:
+.annotate 'line', 102
+    goto alt292_end
+  alt292_1:
+.annotate 'line', 107
   # rx subcapture "textq"
-    set_addr $I10, rxcap_308_fail
-    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+    set_addr $I10, rxcap_313_fail
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
   # rx charclass .
-    ge rx278_pos, rx278_eos, rx278_fail
-    inc rx278_pos
-    set_addr $I10, rxcap_308_fail
-    ($I12, $I11) = rx278_cur."!mark_peek"($I10)
-    rx278_cur."!cursor_pos"($I11)
-    ($P10) = rx278_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx278_pos, "")
-    rx278_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx283_pos, rx283_eos, rx283_fail
+    inc rx283_pos
+    set_addr $I10, rxcap_313_fail
+    ($I12, $I11) = rx283_cur."!mark_peek"($I10)
+    rx283_cur."!cursor_pos"($I11)
+    ($P10) = rx283_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx283_pos, "")
+    rx283_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("textq")
-    goto rxcap_308_done
-  rxcap_308_fail:
-    goto rx278_fail
-  rxcap_308_done:
-  alt287_end:
-.annotate 'line', 98
+    goto rxcap_313_done
+  rxcap_313_fail:
+    goto rx283_fail
+  rxcap_313_done:
+  alt292_end:
+.annotate 'line', 99
   # rx pass
-    rx278_cur."!cursor_pass"(rx278_pos, "quote_escape:sym<misc>")
-    rx278_cur."!cursor_debug"("PASS  ", "quote_escape:sym<misc>", " at pos=", rx278_pos)
-    .return (rx278_cur)
-  rx278_fail:
-.annotate 'line', 33
-    (rx278_rep, rx278_pos, $I10, $P10) = rx278_cur."!mark_fail"(0)
-    lt rx278_pos, -1, rx278_done
-    eq rx278_pos, -1, rx278_fail
+    rx283_cur."!cursor_pass"(rx283_pos, "quote_escape:sym<misc>")
+    rx283_cur."!cursor_debug"("PASS  ", "quote_escape:sym<misc>", " at pos=", rx283_pos)
+    .return (rx283_cur)
+  rx283_fail:
+.annotate 'line', 33
+    (rx283_rep, rx283_pos, $I10, $P10) = rx283_cur."!mark_fail"(0)
+    lt rx283_pos, -1, rx283_done
+    eq rx283_pos, -1, rx283_fail
     jump $I10
-  rx278_done:
-    rx278_cur."!cursor_fail"()
-    rx278_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<misc>")
-    .return (rx278_cur)
+  rx283_done:
+    rx283_cur."!cursor_fail"()
+    rx283_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<misc>")
+    .return (rx283_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<misc>"  :subid("92_1274022878.64768") :method
+.sub "!PREFIX__quote_escape:sym<misc>"  :subid("94_1275811471.14938") :method
 .annotate 'line', 33
-    new $P280, "ResizablePMCArray"
-    push $P280, ""
-    .return ($P280)
+    new $P285, "ResizablePMCArray"
+    push $P285, ""
+    .return ($P285)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block284"  :anon :subid("93_1274022878.64768") :outer("91_1274022878.64768")
-.annotate 'line', 99
+.sub "_block289"  :anon :subid("95_1275811471.14938") :outer("93_1275811471.14938")
+.annotate 'line', 100
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block289"  :anon :subid("94_1274022878.64768") :method :outer("91_1274022878.64768")
-.annotate 'line', 103
-    .local string rx291_tgt
-    .local int rx291_pos
-    .local int rx291_off
-    .local int rx291_eos
-    .local int rx291_rep
-    .local pmc rx291_cur
-    (rx291_cur, rx291_pos, rx291_tgt) = self."!cursor_start"()
-    rx291_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx291_cur
+.sub "_block294"  :anon :subid("96_1275811471.14938") :method :outer("93_1275811471.14938")
+.annotate 'line', 104
+    .local string rx296_tgt
+    .local int rx296_pos
+    .local int rx296_off
+    .local int rx296_eos
+    .local int rx296_rep
+    .local pmc rx296_cur
+    (rx296_cur, rx296_pos, rx296_tgt) = self."!cursor_start"()
+    rx296_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx296_cur
     .local pmc match
     .lex "$/", match
-    length rx291_eos, rx291_tgt
-    set rx291_off, 0
-    lt rx291_pos, 2, rx291_start
-    sub rx291_off, rx291_pos, 1
-    substr rx291_tgt, rx291_tgt, rx291_off
-  rx291_start:
+    length rx296_eos, rx296_tgt
+    gt rx296_pos, rx296_eos, rx296_done
+    set rx296_off, 0
+    lt rx296_pos, 2, rx296_start
+    sub rx296_off, rx296_pos, 1
+    substr rx296_tgt, rx296_tgt, rx296_off
+  rx296_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan292_done
-    goto rxscan292_scan
-  rxscan292_loop:
-    ($P10) = rx291_cur."from"()
+    ne $I10, -1, rxscan297_done
+    goto rxscan297_scan
+  rxscan297_loop:
+    ($P10) = rx296_cur."from"()
     inc $P10
-    set rx291_pos, $P10
-    ge rx291_pos, rx291_eos, rxscan292_done
-  rxscan292_scan:
-    set_addr $I10, rxscan292_loop
-    rx291_cur."!mark_push"(0, rx291_pos, $I10)
-  rxscan292_done:
+    set rx296_pos, $P10
+    ge rx296_pos, rx296_eos, rxscan297_done
+  rxscan297_scan:
+    set_addr $I10, rxscan297_loop
+    rx296_cur."!mark_push"(0, rx296_pos, $I10)
+  rxscan297_done:
   # rx charclass W
-    ge rx291_pos, rx291_eos, rx291_fail
-    sub $I10, rx291_pos, rx291_off
-    is_cclass $I11, 8192, rx291_tgt, $I10
-    if $I11, rx291_fail
-    inc rx291_pos
+    ge rx296_pos, rx296_eos, rx296_fail
+    sub $I10, rx296_pos, rx296_off
+    is_cclass $I11, 8192, rx296_tgt, $I10
+    if $I11, rx296_fail
+    inc rx296_pos
   # rx pass
-    rx291_cur."!cursor_pass"(rx291_pos, "")
-    rx291_cur."!cursor_debug"("PASS  ", "", " at pos=", rx291_pos)
-    .return (rx291_cur)
-  rx291_fail:
-    (rx291_rep, rx291_pos, $I10, $P10) = rx291_cur."!mark_fail"(0)
-    lt rx291_pos, -1, rx291_done
-    eq rx291_pos, -1, rx291_fail
+    rx296_cur."!cursor_pass"(rx296_pos, "")
+    rx296_cur."!cursor_debug"("PASS  ", "", " at pos=", rx296_pos)
+    .return (rx296_cur)
+  rx296_fail:
+    (rx296_rep, rx296_pos, $I10, $P10) = rx296_cur."!mark_fail"(0)
+    lt rx296_pos, -1, rx296_done
+    eq rx296_pos, -1, rx296_fail
     jump $I10
-  rx291_done:
-    rx291_cur."!cursor_fail"()
-    rx291_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx291_cur)
+  rx296_done:
+    rx296_cur."!cursor_fail"()
+    rx296_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx296_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block296"  :anon :subid("95_1274022878.64768") :outer("91_1274022878.64768")
-.annotate 'line', 104
-    find_lex $P298, "$/"
-    $P299 = $P298."CURSOR"()
-    new $P300, "String"
-    assign $P300, "Unrecognized backslash sequence: '\\"
-    find_lex $P301, "$/"
-    unless_null $P301, vivify_106
-    $P301 = root_new ['parrot';'Hash']
-  vivify_106:
-    set $P302, $P301["x"]
-    unless_null $P302, vivify_107
-    new $P302, "Undef"
-  vivify_107:
-    $S303 = $P302."Str"()
-    concat $P304, $P300, $S303
-    concat $P305, $P304, "'"
-    $P306 = $P299."panic"($P305)
-    .return ($P306)
+.sub "_block301"  :anon :subid("97_1275811471.14938") :outer("93_1275811471.14938")
+.annotate 'line', 105
+    find_lex $P303, "$/"
+    $P304 = $P303."CURSOR"()
+    new $P305, "String"
+    assign $P305, "Unrecognized backslash sequence: '\\"
+    find_lex $P306, "$/"
+    unless_null $P306, vivify_108
+    $P306 = root_new ['parrot';'Hash']
+  vivify_108:
+    set $P307, $P306["x"]
+    unless_null $P307, vivify_109
+    new $P307, "Undef"
+  vivify_109:
+    $S308 = $P307."Str"()
+    concat $P309, $P305, $S308
+    concat $P310, $P309, "'"
+    $P311 = $P304."panic"($P310)
+    .return ($P311)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charname"  :subid("96_1274022878.64768") :method :outer("11_1274022878.64768")
-.annotate 'line', 33
-    .const 'Sub' $P319 = "98_1274022878.64768" 
-    capture_lex $P319
-    .local string rx310_tgt
-    .local int rx310_pos
-    .local int rx310_off
-    .local int rx310_eos
-    .local int rx310_rep
-    .local pmc rx310_cur
-    (rx310_cur, rx310_pos, rx310_tgt) = self."!cursor_start"()
-    rx310_cur."!cursor_debug"("START ", "charname")
-    .lex unicode:"$\x{a2}", rx310_cur
+.sub "charname"  :subid("98_1275811471.14938") :method :outer("11_1275811471.14938")
+.annotate 'line', 33
+    .const 'Sub' $P324 = "100_1275811471.14938" 
+    capture_lex $P324
+    .local string rx315_tgt
+    .local int rx315_pos
+    .local int rx315_off
+    .local int rx315_eos
+    .local int rx315_rep
+    .local pmc rx315_cur
+    (rx315_cur, rx315_pos, rx315_tgt) = self."!cursor_start"()
+    rx315_cur."!cursor_debug"("START ", "charname")
+    .lex unicode:"$\x{a2}", rx315_cur
     .local pmc match
     .lex "$/", match
-    length rx310_eos, rx310_tgt
-    set rx310_off, 0
-    lt rx310_pos, 2, rx310_start
-    sub rx310_off, rx310_pos, 1
-    substr rx310_tgt, rx310_tgt, rx310_off
-  rx310_start:
+    length rx315_eos, rx315_tgt
+    gt rx315_pos, rx315_eos, rx315_done
+    set rx315_off, 0
+    lt rx315_pos, 2, rx315_start
+    sub rx315_off, rx315_pos, 1
+    substr rx315_tgt, rx315_tgt, rx315_off
+  rx315_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan314_done
-    goto rxscan314_scan
-  rxscan314_loop:
-    ($P10) = rx310_cur."from"()
+    ne $I10, -1, rxscan319_done
+    goto rxscan319_scan
+  rxscan319_loop:
+    ($P10) = rx315_cur."from"()
     inc $P10
-    set rx310_pos, $P10
-    ge rx310_pos, rx310_eos, rxscan314_done
-  rxscan314_scan:
-    set_addr $I10, rxscan314_loop
-    rx310_cur."!mark_push"(0, rx310_pos, $I10)
-  rxscan314_done:
-  alt315_0:
-.annotate 'line', 110
-    set_addr $I10, alt315_1
-    rx310_cur."!mark_push"(0, rx310_pos, $I10)
+    set rx315_pos, $P10
+    ge rx315_pos, rx315_eos, rxscan319_done
+  rxscan319_scan:
+    set_addr $I10, rxscan319_loop
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+  rxscan319_done:
+  alt320_0:
 .annotate 'line', 111
+    set_addr $I10, alt320_1
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+.annotate 'line', 112
   # rx subrule "integer" subtype=capture negate=
-    rx310_cur."!cursor_pos"(rx310_pos)
-    $P10 = rx310_cur."integer"()
-    unless $P10, rx310_fail
-    rx310_cur."!mark_push"(0, -1, 0, $P10)
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."integer"()
+    unless $P10, rx315_fail
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("integer")
-    rx310_pos = $P10."pos"()
-    goto alt315_end
-  alt315_1:
-.annotate 'line', 112
+    rx315_pos = $P10."pos"()
+    goto alt320_end
+  alt320_1:
+.annotate 'line', 113
   # rx enumcharlist negate=0 
-    ge rx310_pos, rx310_eos, rx310_fail
-    sub $I10, rx310_pos, rx310_off
-    substr $S10, rx310_tgt, $I10, 1
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I10, 1
     index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", $S10
-    lt $I11, 0, rx310_fail
-    inc rx310_pos
-  # rx rxquantf316 ** 0..*
-    set_addr $I10, rxquantf316_loop
-    rx310_cur."!mark_push"(0, rx310_pos, $I10)
-    goto rxquantf316_done
-  rxquantf316_loop:
+    lt $I11, 0, rx315_fail
+    inc rx315_pos
+  # rx rxquantf321 ** 0..*
+    set_addr $I10, rxquantf321_loop
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+    goto rxquantf321_done
+  rxquantf321_loop:
   # rx enumcharlist negate=1 
-    ge rx310_pos, rx310_eos, rx310_fail
-    sub $I10, rx310_pos, rx310_off
-    substr $S10, rx310_tgt, $I10, 1
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I10, 1
     index $I11, "],#", $S10
-    ge $I11, 0, rx310_fail
-    inc rx310_pos
-    set_addr $I10, rxquantf316_loop
-    rx310_cur."!mark_push"($I317, rx310_pos, $I10)
-  rxquantf316_done:
+    ge $I11, 0, rx315_fail
+    inc rx315_pos
+    set_addr $I10, rxquantf321_loop
+    rx315_cur."!mark_push"($I322, rx315_pos, $I10)
+  rxquantf321_done:
   # rx enumcharlist negate=0 
-    ge rx310_pos, rx310_eos, rx310_fail
-    sub $I10, rx310_pos, rx310_off
-    substr $S10, rx310_tgt, $I10, 1
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I10, 1
     index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)", $S10
-    lt $I11, 0, rx310_fail
-    inc rx310_pos
-.annotate 'line', 113
+    lt $I11, 0, rx315_fail
+    inc rx315_pos
+.annotate 'line', 114
   # rx subrule "before" subtype=zerowidth negate=
-    rx310_cur."!cursor_pos"(rx310_pos)
-    .const 'Sub' $P319 = "98_1274022878.64768" 
-    capture_lex $P319
-    $P10 = rx310_cur."before"($P319)
-    unless $P10, rx310_fail
-  alt315_end:
-.annotate 'line', 110
+    rx315_cur."!cursor_pos"(rx315_pos)
+    .const 'Sub' $P324 = "100_1275811471.14938" 
+    capture_lex $P324
+    $P10 = rx315_cur."before"($P324)
+    unless $P10, rx315_fail
+  alt320_end:
+.annotate 'line', 111
   # rx pass
-    rx310_cur."!cursor_pass"(rx310_pos, "charname")
-    rx310_cur."!cursor_debug"("PASS  ", "charname", " at pos=", rx310_pos)
-    .return (rx310_cur)
-  rx310_fail:
-.annotate 'line', 33
-    (rx310_rep, rx310_pos, $I10, $P10) = rx310_cur."!mark_fail"(0)
-    lt rx310_pos, -1, rx310_done
-    eq rx310_pos, -1, rx310_fail
+    rx315_cur."!cursor_pass"(rx315_pos, "charname")
+    rx315_cur."!cursor_debug"("PASS  ", "charname", " at pos=", rx315_pos)
+    .return (rx315_cur)
+  rx315_fail:
+.annotate 'line', 33
+    (rx315_rep, rx315_pos, $I10, $P10) = rx315_cur."!mark_fail"(0)
+    lt rx315_pos, -1, rx315_done
+    eq rx315_pos, -1, rx315_fail
     jump $I10
-  rx310_done:
-    rx310_cur."!cursor_fail"()
-    rx310_cur."!cursor_debug"("FAIL  ", "charname")
-    .return (rx310_cur)
+  rx315_done:
+    rx315_cur."!cursor_fail"()
+    rx315_cur."!cursor_debug"("FAIL  ", "charname")
+    .return (rx315_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charname"  :subid("97_1274022878.64768") :method
-.annotate 'line', 33
-    $P312 = self."!PREFIX__!subrule"("integer", "")
-    new $P313, "ResizablePMCArray"
-    push $P313, "Z"
-    push $P313, "Y"
-    push $P313, "X"
-    push $P313, "W"
-    push $P313, "V"
-    push $P313, "U"
-    push $P313, "T"
-    push $P313, "S"
-    push $P313, "R"
-    push $P313, "Q"
-    push $P313, "P"
-    push $P313, "O"
-    push $P313, "N"
-    push $P313, "M"
-    push $P313, "L"
-    push $P313, "K"
-    push $P313, "J"
-    push $P313, "I"
-    push $P313, "H"
-    push $P313, "G"
-    push $P313, "F"
-    push $P313, "E"
-    push $P313, "D"
-    push $P313, "C"
-    push $P313, "B"
-    push $P313, "A"
-    push $P313, "z"
-    push $P313, "y"
-    push $P313, "x"
-    push $P313, "w"
-    push $P313, "v"
-    push $P313, "u"
-    push $P313, "t"
-    push $P313, "s"
-    push $P313, "r"
-    push $P313, "q"
-    push $P313, "p"
-    push $P313, "o"
-    push $P313, "n"
-    push $P313, "m"
-    push $P313, "l"
-    push $P313, "k"
-    push $P313, "j"
-    push $P313, "i"
-    push $P313, "h"
-    push $P313, "g"
-    push $P313, "f"
-    push $P313, "e"
-    push $P313, "d"
-    push $P313, "c"
-    push $P313, "b"
-    push $P313, "a"
-    push $P313, $P312
-    .return ($P313)
+.sub "!PREFIX__charname"  :subid("99_1275811471.14938") :method
+.annotate 'line', 33
+    $P317 = self."!PREFIX__!subrule"("integer", "")
+    new $P318, "ResizablePMCArray"
+    push $P318, "Z"
+    push $P318, "Y"
+    push $P318, "X"
+    push $P318, "W"
+    push $P318, "V"
+    push $P318, "U"
+    push $P318, "T"
+    push $P318, "S"
+    push $P318, "R"
+    push $P318, "Q"
+    push $P318, "P"
+    push $P318, "O"
+    push $P318, "N"
+    push $P318, "M"
+    push $P318, "L"
+    push $P318, "K"
+    push $P318, "J"
+    push $P318, "I"
+    push $P318, "H"
+    push $P318, "G"
+    push $P318, "F"
+    push $P318, "E"
+    push $P318, "D"
+    push $P318, "C"
+    push $P318, "B"
+    push $P318, "A"
+    push $P318, "z"
+    push $P318, "y"
+    push $P318, "x"
+    push $P318, "w"
+    push $P318, "v"
+    push $P318, "u"
+    push $P318, "t"
+    push $P318, "s"
+    push $P318, "r"
+    push $P318, "q"
+    push $P318, "p"
+    push $P318, "o"
+    push $P318, "n"
+    push $P318, "m"
+    push $P318, "l"
+    push $P318, "k"
+    push $P318, "j"
+    push $P318, "i"
+    push $P318, "h"
+    push $P318, "g"
+    push $P318, "f"
+    push $P318, "e"
+    push $P318, "d"
+    push $P318, "c"
+    push $P318, "b"
+    push $P318, "a"
+    push $P318, $P317
+    .return ($P318)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block318"  :anon :subid("98_1274022878.64768") :method :outer("96_1274022878.64768")
-.annotate 'line', 113
-    .local string rx320_tgt
-    .local int rx320_pos
-    .local int rx320_off
-    .local int rx320_eos
-    .local int rx320_rep
-    .local pmc rx320_cur
-    (rx320_cur, rx320_pos, rx320_tgt) = self."!cursor_start"()
-    rx320_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx320_cur
+.sub "_block323"  :anon :subid("100_1275811471.14938") :method :outer("98_1275811471.14938")
+.annotate 'line', 114
+    .local string rx325_tgt
+    .local int rx325_pos
+    .local int rx325_off
+    .local int rx325_eos
+    .local int rx325_rep
+    .local pmc rx325_cur
+    (rx325_cur, rx325_pos, rx325_tgt) = self."!cursor_start"()
+    rx325_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx325_cur
     .local pmc match
     .lex "$/", match
-    length rx320_eos, rx320_tgt
-    set rx320_off, 0
-    lt rx320_pos, 2, rx320_start
-    sub rx320_off, rx320_pos, 1
-    substr rx320_tgt, rx320_tgt, rx320_off
-  rx320_start:
+    length rx325_eos, rx325_tgt
+    gt rx325_pos, rx325_eos, rx325_done
+    set rx325_off, 0
+    lt rx325_pos, 2, rx325_start
+    sub rx325_off, rx325_pos, 1
+    substr rx325_tgt, rx325_tgt, rx325_off
+  rx325_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan321_done
-    goto rxscan321_scan
-  rxscan321_loop:
-    ($P10) = rx320_cur."from"()
+    ne $I10, -1, rxscan326_done
+    goto rxscan326_scan
+  rxscan326_loop:
+    ($P10) = rx325_cur."from"()
     inc $P10
-    set rx320_pos, $P10
-    ge rx320_pos, rx320_eos, rxscan321_done
-  rxscan321_scan:
-    set_addr $I10, rxscan321_loop
-    rx320_cur."!mark_push"(0, rx320_pos, $I10)
-  rxscan321_done:
+    set rx325_pos, $P10
+    ge rx325_pos, rx325_eos, rxscan326_done
+  rxscan326_scan:
+    set_addr $I10, rxscan326_loop
+    rx325_cur."!mark_push"(0, rx325_pos, $I10)
+  rxscan326_done:
   # rx charclass_q s r 0..-1
-    sub $I10, rx320_pos, rx320_off
-    find_not_cclass $I11, 32, rx320_tgt, $I10, rx320_eos
-    add rx320_pos, rx320_off, $I11
+    sub $I10, rx325_pos, rx325_off
+    find_not_cclass $I11, 32, rx325_tgt, $I10, rx325_eos
+    add rx325_pos, rx325_off, $I11
   # rx enumcharlist negate=0 
-    ge rx320_pos, rx320_eos, rx320_fail
-    sub $I10, rx320_pos, rx320_off
-    substr $S10, rx320_tgt, $I10, 1
+    ge rx325_pos, rx325_eos, rx325_fail
+    sub $I10, rx325_pos, rx325_off
+    substr $S10, rx325_tgt, $I10, 1
     index $I11, "],#", $S10
-    lt $I11, 0, rx320_fail
-    inc rx320_pos
+    lt $I11, 0, rx325_fail
+    inc rx325_pos
   # rx pass
-    rx320_cur."!cursor_pass"(rx320_pos, "")
-    rx320_cur."!cursor_debug"("PASS  ", "", " at pos=", rx320_pos)
-    .return (rx320_cur)
-  rx320_fail:
-    (rx320_rep, rx320_pos, $I10, $P10) = rx320_cur."!mark_fail"(0)
-    lt rx320_pos, -1, rx320_done
-    eq rx320_pos, -1, rx320_fail
+    rx325_cur."!cursor_pass"(rx325_pos, "")
+    rx325_cur."!cursor_debug"("PASS  ", "", " at pos=", rx325_pos)
+    .return (rx325_cur)
+  rx325_fail:
+    (rx325_rep, rx325_pos, $I10, $P10) = rx325_cur."!mark_fail"(0)
+    lt rx325_pos, -1, rx325_done
+    eq rx325_pos, -1, rx325_fail
     jump $I10
-  rx320_done:
-    rx320_cur."!cursor_fail"()
-    rx320_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx320_cur)
+  rx325_done:
+    rx325_cur."!cursor_fail"()
+    rx325_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx325_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charnames"  :subid("99_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "charnames"  :subid("101_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
-    .local string rx323_tgt
-    .local int rx323_pos
-    .local int rx323_off
-    .local int rx323_eos
-    .local int rx323_rep
-    .local pmc rx323_cur
-    (rx323_cur, rx323_pos, rx323_tgt) = self."!cursor_start"()
-    rx323_cur."!cursor_debug"("START ", "charnames")
-    rx323_cur."!cursor_caparray"("charname")
-    .lex unicode:"$\x{a2}", rx323_cur
+    .local string rx328_tgt
+    .local int rx328_pos
+    .local int rx328_off
+    .local int rx328_eos
+    .local int rx328_rep
+    .local pmc rx328_cur
+    (rx328_cur, rx328_pos, rx328_tgt) = self."!cursor_start"()
+    rx328_cur."!cursor_debug"("START ", "charnames")
+    rx328_cur."!cursor_caparray"("charname")
+    .lex unicode:"$\x{a2}", rx328_cur
     .local pmc match
     .lex "$/", match
-    length rx323_eos, rx323_tgt
-    set rx323_off, 0
-    lt rx323_pos, 2, rx323_start
-    sub rx323_off, rx323_pos, 1
-    substr rx323_tgt, rx323_tgt, rx323_off
-  rx323_start:
+    length rx328_eos, rx328_tgt
+    gt rx328_pos, rx328_eos, rx328_done
+    set rx328_off, 0
+    lt rx328_pos, 2, rx328_start
+    sub rx328_off, rx328_pos, 1
+    substr rx328_tgt, rx328_tgt, rx328_off
+  rx328_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan326_done
-    goto rxscan326_scan
-  rxscan326_loop:
-    ($P10) = rx323_cur."from"()
+    ne $I10, -1, rxscan331_done
+    goto rxscan331_scan
+  rxscan331_loop:
+    ($P10) = rx328_cur."from"()
     inc $P10
-    set rx323_pos, $P10
-    ge rx323_pos, rx323_eos, rxscan326_done
-  rxscan326_scan:
-    set_addr $I10, rxscan326_loop
-    rx323_cur."!mark_push"(0, rx323_pos, $I10)
-  rxscan326_done:
-.annotate 'line', 115
-  # rx rxquantr327 ** 1..*
-    set_addr $I328, rxquantr327_done
-    rx323_cur."!mark_push"(0, -1, $I328)
-  rxquantr327_loop:
+    set rx328_pos, $P10
+    ge rx328_pos, rx328_eos, rxscan331_done
+  rxscan331_scan:
+    set_addr $I10, rxscan331_loop
+    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+  rxscan331_done:
+.annotate 'line', 116
+  # rx rxquantr332 ** 1..*
+    set_addr $I333, rxquantr332_done
+    rx328_cur."!mark_push"(0, -1, $I333)
+  rxquantr332_loop:
   # rx subrule "ws" subtype=method negate=
-    rx323_cur."!cursor_pos"(rx323_pos)
-    $P10 = rx323_cur."ws"()
-    unless $P10, rx323_fail
-    rx323_pos = $P10."pos"()
+    rx328_cur."!cursor_pos"(rx328_pos)
+    $P10 = rx328_cur."ws"()
+    unless $P10, rx328_fail
+    rx328_pos = $P10."pos"()
   # rx subrule "charname" subtype=capture negate=
-    rx323_cur."!cursor_pos"(rx323_pos)
-    $P10 = rx323_cur."charname"()
-    unless $P10, rx323_fail
-    rx323_cur."!mark_push"(0, -1, 0, $P10)
+    rx328_cur."!cursor_pos"(rx328_pos)
+    $P10 = rx328_cur."charname"()
+    unless $P10, rx328_fail
+    rx328_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("charname")
-    rx323_pos = $P10."pos"()
+    rx328_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx323_cur."!cursor_pos"(rx323_pos)
-    $P10 = rx323_cur."ws"()
-    unless $P10, rx323_fail
-    rx323_pos = $P10."pos"()
-    (rx323_rep) = rx323_cur."!mark_commit"($I328)
-    rx323_cur."!mark_push"(rx323_rep, rx323_pos, $I328)
+    rx328_cur."!cursor_pos"(rx328_pos)
+    $P10 = rx328_cur."ws"()
+    unless $P10, rx328_fail
+    rx328_pos = $P10."pos"()
+    (rx328_rep) = rx328_cur."!mark_commit"($I333)
+    rx328_cur."!mark_push"(rx328_rep, rx328_pos, $I333)
   # rx literal  ","
-    add $I11, rx323_pos, 1
-    gt $I11, rx323_eos, rx323_fail
-    sub $I11, rx323_pos, rx323_off
-    substr $S10, rx323_tgt, $I11, 1
-    ne $S10, ",", rx323_fail
-    add rx323_pos, 1
-    goto rxquantr327_loop
-  rxquantr327_done:
+    add $I11, rx328_pos, 1
+    gt $I11, rx328_eos, rx328_fail
+    sub $I11, rx328_pos, rx328_off
+    substr $S10, rx328_tgt, $I11, 1
+    ne $S10, ",", rx328_fail
+    add rx328_pos, 1
+    goto rxquantr332_loop
+  rxquantr332_done:
   # rx pass
-    rx323_cur."!cursor_pass"(rx323_pos, "charnames")
-    rx323_cur."!cursor_debug"("PASS  ", "charnames", " at pos=", rx323_pos)
-    .return (rx323_cur)
-  rx323_fail:
-.annotate 'line', 33
-    (rx323_rep, rx323_pos, $I10, $P10) = rx323_cur."!mark_fail"(0)
-    lt rx323_pos, -1, rx323_done
-    eq rx323_pos, -1, rx323_fail
+    rx328_cur."!cursor_pass"(rx328_pos, "charnames")
+    rx328_cur."!cursor_debug"("PASS  ", "charnames", " at pos=", rx328_pos)
+    .return (rx328_cur)
+  rx328_fail:
+.annotate 'line', 33
+    (rx328_rep, rx328_pos, $I10, $P10) = rx328_cur."!mark_fail"(0)
+    lt rx328_pos, -1, rx328_done
+    eq rx328_pos, -1, rx328_fail
     jump $I10
-  rx323_done:
-    rx323_cur."!cursor_fail"()
-    rx323_cur."!cursor_debug"("FAIL  ", "charnames")
-    .return (rx323_cur)
+  rx328_done:
+    rx328_cur."!cursor_fail"()
+    rx328_cur."!cursor_debug"("FAIL  ", "charnames")
+    .return (rx328_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charnames"  :subid("100_1274022878.64768") :method
+.sub "!PREFIX__charnames"  :subid("102_1275811471.14938") :method
 .annotate 'line', 33
-    new $P325, "ResizablePMCArray"
-    push $P325, ""
-    .return ($P325)
+    new $P330, "ResizablePMCArray"
+    push $P330, ""
+    .return ($P330)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charspec"  :subid("101_1274022878.64768") :method :outer("11_1274022878.64768")
+.sub "charspec"  :subid("103_1275811471.14938") :method :outer("11_1275811471.14938")
 .annotate 'line', 33
-    .local string rx330_tgt
-    .local int rx330_pos
-    .local int rx330_off
-    .local int rx330_eos
-    .local int rx330_rep
-    .local pmc rx330_cur
-    (rx330_cur, rx330_pos, rx330_tgt) = self."!cursor_start"()
-    rx330_cur."!cursor_debug"("START ", "charspec")
-    .lex unicode:"$\x{a2}", rx330_cur
+    .local string rx335_tgt
+    .local int rx335_pos
+    .local int rx335_off
+    .local int rx335_eos
+    .local int rx335_rep
+    .local pmc rx335_cur
+    (rx335_cur, rx335_pos, rx335_tgt) = self."!cursor_start"()
+    rx335_cur."!cursor_debug"("START ", "charspec")
+    .lex unicode:"$\x{a2}", rx335_cur
     .local pmc match
     .lex "$/", match
-    length rx330_eos, rx330_tgt
-    set rx330_off, 0
-    lt rx330_pos, 2, rx330_start
-    sub rx330_off, rx330_pos, 1
-    substr rx330_tgt, rx330_tgt, rx330_off
-  rx330_start:
+    length rx335_eos, rx335_tgt
+    gt rx335_pos, rx335_eos, rx335_done
+    set rx335_off, 0
+    lt rx335_pos, 2, rx335_start
+    sub rx335_off, rx335_pos, 1
+    substr rx335_tgt, rx335_tgt, rx335_off
+  rx335_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan335_done
-    goto rxscan335_scan
-  rxscan335_loop:
-    ($P10) = rx330_cur."from"()
+    ne $I10, -1, rxscan340_done
+    goto rxscan340_scan
+  rxscan340_loop:
+    ($P10) = rx335_cur."from"()
     inc $P10
-    set rx330_pos, $P10
-    ge rx330_pos, rx330_eos, rxscan335_done
-  rxscan335_scan:
-    set_addr $I10, rxscan335_loop
-    rx330_cur."!mark_push"(0, rx330_pos, $I10)
-  rxscan335_done:
-  alt336_0:
-.annotate 'line', 117
-    set_addr $I10, alt336_1
-    rx330_cur."!mark_push"(0, rx330_pos, $I10)
+    set rx335_pos, $P10
+    ge rx335_pos, rx335_eos, rxscan340_done
+  rxscan340_scan:
+    set_addr $I10, rxscan340_loop
+    rx335_cur."!mark_push"(0, rx335_pos, $I10)
+  rxscan340_done:
+  alt341_0:
 .annotate 'line', 118
+    set_addr $I10, alt341_1
+    rx335_cur."!mark_push"(0, rx335_pos, $I10)
+.annotate 'line', 119
   # rx literal  "["
-    add $I11, rx330_pos, 1
-    gt $I11, rx330_eos, rx330_fail
-    sub $I11, rx330_pos, rx330_off
-    substr $S10, rx330_tgt, $I11, 1
-    ne $S10, "[", rx330_fail
-    add rx330_pos, 1
+    add $I11, rx335_pos, 1
+    gt $I11, rx335_eos, rx335_fail
+    sub $I11, rx335_pos, rx335_off
+    substr $S10, rx335_tgt, $I11, 1
+    ne $S10, "[", rx335_fail
+    add rx335_pos, 1
   # rx subrule "charnames" subtype=capture negate=
-    rx330_cur."!cursor_pos"(rx330_pos)
-    $P10 = rx330_cur."charnames"()
-    unless $P10, rx330_fail
-    rx330_cur."!mark_push"(0, -1, 0, $P10)
+    rx335_cur."!cursor_pos"(rx335_pos)
+    $P10 = rx335_cur."charnames"()
+    unless $P10, rx335_fail
+    rx335_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("charnames")
-    rx330_pos = $P10."pos"()
+    rx335_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx330_pos, 1
-    gt $I11, rx330_eos, rx330_fail
-    sub $I11, rx330_pos, rx330_off
-    substr $S10, rx330_tgt, $I11, 1
-    ne $S10, "]", rx330_fail
-    add rx330_pos, 1
-    goto alt336_end
-  alt336_1:
-    set_addr $I10, alt336_2
-    rx330_cur."!mark_push"(0, rx330_pos, $I10)
-.annotate 'line', 119
+    add $I11, rx335_pos, 1
+    gt $I11, rx335_eos, rx335_fail
+    sub $I11, rx335_pos, rx335_off
+    substr $S10, rx335_tgt, $I11, 1
+    ne $S10, "]", rx335_fail
+    add rx335_pos, 1
+    goto alt341_end
+  alt341_1:
+    set_addr $I10, alt341_2
+    rx335_cur."!mark_push"(0, rx335_pos, $I10)
+.annotate 'line', 120
   # rx charclass_q d r 1..-1
-    sub $I10, rx330_pos, rx330_off
-    find_not_cclass $I11, 8, rx330_tgt, $I10, rx330_eos
+    sub $I10, rx335_pos, rx335_off
+    find_not_cclass $I11, 8, rx335_tgt, $I10, rx335_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx330_fail
-    add rx330_pos, rx330_off, $I11
-  # rx rxquantr337 ** 0..*
-    set_addr $I338, rxquantr337_done
-    rx330_cur."!mark_push"(0, rx330_pos, $I338)
-  rxquantr337_loop:
+    lt $I11, $I12, rx335_fail
+    add rx335_pos, rx335_off, $I11
+  # rx rxquantr342 ** 0..*
+    set_addr $I343, rxquantr342_done
+    rx335_cur."!mark_push"(0, rx335_pos, $I343)
+  rxquantr342_loop:
   # rx literal  "_"
-    add $I11, rx330_pos, 1
-    gt $I11, rx330_eos, rx330_fail
-    sub $I11, rx330_pos, rx330_off
-    substr $S10, rx330_tgt, $I11, 1
-    ne $S10, "_", rx330_fail
-    add rx330_pos, 1
+    add $I11, rx335_pos, 1
+    gt $I11, rx335_eos, rx335_fail
+    sub $I11, rx335_pos, rx335_off
+    substr $S10, rx335_tgt, $I11, 1
+    ne $S10, "_", rx335_fail
+    add rx335_pos, 1
   # rx charclass_q d r 1..-1
-    sub $I10, rx330_pos, rx330_off
-    find_not_cclass $I11, 8, rx330_tgt, $I10, rx330_eos
+    sub $I10, rx335_pos, rx335_off
+    find_not_cclass $I11, 8, rx335_tgt, $I10, rx335_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx330_fail
-    add rx330_pos, rx330_off, $I11
-    (rx330_rep) = rx330_cur."!mark_commit"($I338)
-    rx330_cur."!mark_push"(rx330_rep, rx330_pos, $I338)
-    goto rxquantr337_loop
-  rxquantr337_done:
-    goto alt336_end
-  alt336_2:
-    set_addr $I10, alt336_3
-    rx330_cur."!mark_push"(0, rx330_pos, $I10)
-.annotate 'line', 120
+    lt $I11, $I12, rx335_fail
+    add rx335_pos, rx335_off, $I11
+    (rx335_rep) = rx335_cur."!mark_commit"($I343)
+    rx335_cur."!mark_push"(rx335_rep, rx335_pos, $I343)
+    goto rxquantr342_loop
+  rxquantr342_done:
+    goto alt341_end
+  alt341_2:
+    set_addr $I10, alt341_3
+    rx335_cur."!mark_push"(0, rx335_pos, $I10)
+.annotate 'line', 121
   # rx enumcharlist negate=0 
-    ge rx330_pos, rx330_eos, rx330_fail
-    sub $I10, rx330_pos, rx330_off
-    substr $S10, rx330_tgt, $I10, 1
+    ge rx335_pos, rx335_eos, rx335_fail
+    sub $I10, rx335_pos, rx335_off
+    substr $S10, rx335_tgt, $I10, 1
     index $I11, "?@ABCDEFGHIJKLMNOPQRSTUVWXYZ", $S10
-    lt $I11, 0, rx330_fail
-    inc rx330_pos
-    goto alt336_end
-  alt336_3:
-.annotate 'line', 121
+    lt $I11, 0, rx335_fail
+    inc rx335_pos
+    goto alt341_end
+  alt341_3:
+.annotate 'line', 122
   # rx subrule "panic" subtype=method negate=
-    rx330_cur."!cursor_pos"(rx330_pos)
-    $P10 = rx330_cur."panic"("Unrecognized \\c character")
-    unless $P10, rx330_fail
-    rx330_pos = $P10."pos"()
-  alt336_end:
-.annotate 'line', 116
+    rx335_cur."!cursor_pos"(rx335_pos)
+    $P10 = rx335_cur."panic"("Unrecognized \\c character")
+    unless $P10, rx335_fail
+    rx335_pos = $P10."pos"()
+  alt341_end:
+.annotate 'line', 117
   # rx pass
-    rx330_cur."!cursor_pass"(rx330_pos, "charspec")
-    rx330_cur."!cursor_debug"("PASS  ", "charspec", " at pos=", rx330_pos)
-    .return (rx330_cur)
-  rx330_fail:
-.annotate 'line', 33
-    (rx330_rep, rx330_pos, $I10, $P10) = rx330_cur."!mark_fail"(0)
-    lt rx330_pos, -1, rx330_done
-    eq rx330_pos, -1, rx330_fail
+    rx335_cur."!cursor_pass"(rx335_pos, "charspec")
+    rx335_cur."!cursor_debug"("PASS  ", "charspec", " at pos=", rx335_pos)
+    .return (rx335_cur)
+  rx335_fail:
+.annotate 'line', 33
+    (rx335_rep, rx335_pos, $I10, $P10) = rx335_cur."!mark_fail"(0)
+    lt rx335_pos, -1, rx335_done
+    eq rx335_pos, -1, rx335_fail
     jump $I10
-  rx330_done:
-    rx330_cur."!cursor_fail"()
-    rx330_cur."!cursor_debug"("FAIL  ", "charspec")
-    .return (rx330_cur)
+  rx335_done:
+    rx335_cur."!cursor_fail"()
+    rx335_cur."!cursor_debug"("FAIL  ", "charspec")
+    .return (rx335_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charspec"  :subid("102_1274022878.64768") :method
-.annotate 'line', 33
-    $P332 = self."!PREFIX__!subrule"("", "")
-    $P333 = self."!PREFIX__!subrule"("charnames", "[")
-    new $P334, "ResizablePMCArray"
-    push $P334, $P332
-    push $P334, "Z"
-    push $P334, "Y"
-    push $P334, "X"
-    push $P334, "W"
-    push $P334, "V"
-    push $P334, "U"
-    push $P334, "T"
-    push $P334, "S"
-    push $P334, "R"
-    push $P334, "Q"
-    push $P334, "P"
-    push $P334, "O"
-    push $P334, "N"
-    push $P334, "M"
-    push $P334, "L"
-    push $P334, "K"
-    push $P334, "J"
-    push $P334, "I"
-    push $P334, "H"
-    push $P334, "G"
-    push $P334, "F"
-    push $P334, "E"
-    push $P334, "D"
-    push $P334, "C"
-    push $P334, "B"
-    push $P334, "A"
-    push $P334, "@"
-    push $P334, "?"
-    push $P334, ""
-    push $P334, $P333
-    .return ($P334)
+.sub "!PREFIX__charspec"  :subid("104_1275811471.14938") :method
+.annotate 'line', 33
+    $P337 = self."!PREFIX__!subrule"("panic", "")
+    $P338 = self."!PREFIX__!subrule"("charnames", "[")
+    new $P339, "ResizablePMCArray"
+    push $P339, $P337
+    push $P339, "Z"
+    push $P339, "Y"
+    push $P339, "X"
+    push $P339, "W"
+    push $P339, "V"
+    push $P339, "U"
+    push $P339, "T"
+    push $P339, "S"
+    push $P339, "R"
+    push $P339, "Q"
+    push $P339, "P"
+    push $P339, "O"
+    push $P339, "N"
+    push $P339, "M"
+    push $P339, "L"
+    push $P339, "K"
+    push $P339, "J"
+    push $P339, "I"
+    push $P339, "H"
+    push $P339, "G"
+    push $P339, "F"
+    push $P339, "E"
+    push $P339, "D"
+    push $P339, "C"
+    push $P339, "B"
+    push $P339, "A"
+    push $P339, "@"
+    push $P339, "?"
+    push $P339, ""
+    push $P339, $P338
+    .return ($P339)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block339" :load :anon :subid("103_1274022878.64768")
+.sub "_block344" :load :anon :subid("105_1275811471.14938")
 .annotate 'line', 5
-    .const 'Sub' $P341 = "11_1274022878.64768" 
-    $P342 = $P341()
-    .return ($P342)
+    .const 'Sub' $P346 = "11_1275811471.14938" 
+    $P347 = $P346()
+    .return ($P347)
 .end
 
 
 .namespace []
-.sub "_block344" :load :anon :subid("104_1274022878.64768")
+.sub "_block349" :load :anon :subid("106_1275811471.14938")
 .annotate 'line', 1
-    .const 'Sub' $P346 = "10_1274022878.64768" 
-    $P347 = $P346()
-    .return ($P347)
+    .const 'Sub' $P351 = "10_1275811471.14938" 
+    $P352 = $P351()
+    .return ($P352)
 .end
 
 ### .include 'gen/hllgrammar-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1274022880.65586")
+.sub "_block11"  :anon :subid("10_1275811473.30481")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Actions"], "_block13" 
     capture_lex $P14
+.annotate 'line', 1
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
 .annotate 'line', 3
     get_hll_global $P14, ["HLL";"Actions"], "_block13" 
     capture_lex $P14
-    $P575 = $P14()
+    $P627 = $P14()
 .annotate 'line', 1
-    .return ($P575)
-    .const 'Sub' $P577 = "50_1274022880.65586" 
-    .return ($P577)
+    .return ($P627)
+    .const 'Sub' $P629 = "55_1275811473.30481" 
+    .return ($P629)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post51") :outer("10_1274022880.65586")
+.sub "" :load :init :subid("post56") :outer("10_1275811473.30481")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1274022880.65586" 
+    .const 'Sub' $P12 = "10_1275811473.30481" 
     .local pmc block
     set block, $P12
-    $P580 = get_root_global ["parrot"], "P6metaclass"
-    $P580."new_class"("HLL::Actions")
+    $P632 = get_root_global ["parrot"], "P6metaclass"
+    $P632."new_class"("HLL::Actions")
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block13"  :subid("11_1274022880.65586") :outer("10_1274022880.65586")
+.sub "_block13"  :subid("11_1275811473.30481") :outer("10_1275811473.30481")
 .annotate 'line', 3
-    .const 'Sub' $P553 = "48_1274022880.65586" 
-    capture_lex $P553
-    .const 'Sub' $P528 = "46_1274022880.65586" 
-    capture_lex $P528
-    .const 'Sub' $P498 = "45_1274022880.65586" 
-    capture_lex $P498
-    .const 'Sub' $P479 = "44_1274022880.65586" 
-    capture_lex $P479
-    .const 'Sub' $P472 = "43_1274022880.65586" 
-    capture_lex $P472
-    .const 'Sub' $P462 = "42_1274022880.65586" 
-    capture_lex $P462
-    .const 'Sub' $P445 = "41_1274022880.65586" 
+    .const 'Sub' $P605 = "53_1275811473.30481" 
+    capture_lex $P605
+    .const 'Sub' $P580 = "51_1275811473.30481" 
+    capture_lex $P580
+    .const 'Sub' $P550 = "50_1275811473.30481" 
+    capture_lex $P550
+    .const 'Sub' $P531 = "49_1275811473.30481" 
+    capture_lex $P531
+    .const 'Sub' $P524 = "48_1275811473.30481" 
+    capture_lex $P524
+    .const 'Sub' $P514 = "47_1275811473.30481" 
+    capture_lex $P514
+    .const 'Sub' $P497 = "46_1275811473.30481" 
+    capture_lex $P497
+    .const 'Sub' $P480 = "45_1275811473.30481" 
+    capture_lex $P480
+    .const 'Sub' $P473 = "44_1275811473.30481" 
+    capture_lex $P473
+    .const 'Sub' $P466 = "43_1275811473.30481" 
+    capture_lex $P466
+    .const 'Sub' $P459 = "42_1275811473.30481" 
+    capture_lex $P459
+    .const 'Sub' $P452 = "41_1275811473.30481" 
+    capture_lex $P452
+    .const 'Sub' $P445 = "40_1275811473.30481" 
     capture_lex $P445
-    .const 'Sub' $P428 = "40_1274022880.65586" 
+    .const 'Sub' $P438 = "39_1275811473.30481" 
+    capture_lex $P438
+    .const 'Sub' $P428 = "38_1275811473.30481" 
     capture_lex $P428
-    .const 'Sub' $P421 = "39_1274022880.65586" 
+    .const 'Sub' $P421 = "37_1275811473.30481" 
     capture_lex $P421
-    .const 'Sub' $P414 = "38_1274022880.65586" 
-    capture_lex $P414
-    .const 'Sub' $P407 = "37_1274022880.65586" 
-    capture_lex $P407
-    .const 'Sub' $P400 = "36_1274022880.65586" 
-    capture_lex $P400
-    .const 'Sub' $P393 = "35_1274022880.65586" 
-    capture_lex $P393
-    .const 'Sub' $P383 = "34_1274022880.65586" 
-    capture_lex $P383
-    .const 'Sub' $P376 = "33_1274022880.65586" 
-    capture_lex $P376
-    .const 'Sub' $P360 = "32_1274022880.65586" 
-    capture_lex $P360
-    .const 'Sub' $P285 = "30_1274022880.65586" 
-    capture_lex $P285
-    .const 'Sub' $P222 = "27_1274022880.65586" 
+    .const 'Sub' $P405 = "36_1275811473.30481" 
+    capture_lex $P405
+    .const 'Sub' $P330 = "34_1275811473.30481" 
+    capture_lex $P330
+    .const 'Sub' $P267 = "31_1275811473.30481" 
+    capture_lex $P267
+    .const 'Sub' $P258 = "30_1275811473.30481" 
+    capture_lex $P258
+    .const 'Sub' $P249 = "29_1275811473.30481" 
+    capture_lex $P249
+    .const 'Sub' $P240 = "28_1275811473.30481" 
+    capture_lex $P240
+    .const 'Sub' $P231 = "27_1275811473.30481" 
+    capture_lex $P231
+    .const 'Sub' $P222 = "26_1275811473.30481" 
     capture_lex $P222
-    .const 'Sub' $P213 = "26_1274022880.65586" 
-    capture_lex $P213
-    .const 'Sub' $P204 = "25_1274022880.65586" 
-    capture_lex $P204
-    .const 'Sub' $P195 = "24_1274022880.65586" 
-    capture_lex $P195
-    .const 'Sub' $P186 = "23_1274022880.65586" 
-    capture_lex $P186
-    .const 'Sub' $P177 = "22_1274022880.65586" 
-    capture_lex $P177
-    .const 'Sub' $P167 = "21_1274022880.65586" 
-    capture_lex $P167
-    .const 'Sub' $P157 = "20_1274022880.65586" 
-    capture_lex $P157
-    .const 'Sub' $P149 = "19_1274022880.65586" 
-    capture_lex $P149
-    .const 'Sub' $P139 = "18_1274022880.65586" 
-    capture_lex $P139
-    .const 'Sub' $P129 = "17_1274022880.65586" 
-    capture_lex $P129
-    .const 'Sub' $P28 = "14_1274022880.65586" 
+    .const 'Sub' $P212 = "25_1275811473.30481" 
+    capture_lex $P212
+    .const 'Sub' $P202 = "24_1275811473.30481" 
+    capture_lex $P202
+    .const 'Sub' $P194 = "23_1275811473.30481" 
+    capture_lex $P194
+    .const 'Sub' $P184 = "22_1275811473.30481" 
+    capture_lex $P184
+    .const 'Sub' $P174 = "21_1275811473.30481" 
+    capture_lex $P174
+    .const 'Sub' $P73 = "18_1275811473.30481" 
+    capture_lex $P73
+    .const 'Sub' $P35 = "15_1275811473.30481" 
+    capture_lex $P35
+    .const 'Sub' $P28 = "14_1275811473.30481" 
     capture_lex $P28
-    .const 'Sub' $P22 = "13_1274022880.65586" 
+    .const 'Sub' $P22 = "13_1275811473.30481" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1274022880.65586" 
+    .const 'Sub' $P15 = "12_1275811473.30481" 
     capture_lex $P15
-.annotate 'line', 197
-    .const 'Sub' $P553 = "48_1274022880.65586" 
-    newclosure $P570, $P553
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
+.annotate 'line', 225
+    .const 'Sub' $P605 = "53_1275811473.30481" 
+    newclosure $P622, $P605
 .annotate 'line', 3
-    .return ($P570)
-    .const 'Sub' $P572 = "49_1274022880.65586" 
-    .return ($P572)
+    .return ($P622)
+    .const 'Sub' $P624 = "54_1275811473.30481" 
+    .return ($P624)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "string_to_int"  :subid("12_1274022880.65586") :outer("11_1274022880.65586")
+.include "except_types.pasm"
+.sub "string_to_int"  :subid("12_1275811473.30481") :outer("11_1275811473.30481")
     .param pmc param_18
     .param pmc param_19
 .annotate 'line', 3
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
-    $P17."handle_types"(57)
+    $P17."handle_types"(.CONTROL_RETURN)
     push_eh $P17
     .lex "$src", param_18
     .lex "$base", param_19
@@ -4878,12 +5071,13 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "ints_to_string"  :subid("13_1274022880.65586") :outer("11_1274022880.65586")
+.include "except_types.pasm"
+.sub "ints_to_string"  :subid("13_1275811473.30481") :outer("11_1275811473.30481")
     .param pmc param_25
 .annotate 'line', 37
     new $P24, 'ExceptionHandler'
     set_addr $P24, control_23
-    $P24."handle_types"(57)
+    $P24."handle_types"(.CONTROL_RETURN)
     push_eh $P24
     .lex "$ints", param_25
 .annotate 'line', 38
@@ -4919,539 +5113,583 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "EXPR"  :subid("14_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_31
-    .param pmc param_32 :optional
-    .param int has_param_32 :opt_flag
+.include "except_types.pasm"
+.sub "CTXSAVE"  :subid("14_1275811473.30481") :method :outer("11_1275811473.30481")
 .annotate 'line', 62
-    .const 'Sub' $P111 = "16_1274022880.65586" 
-    capture_lex $P111
-    .const 'Sub' $P78 = "15_1274022880.65586" 
-    capture_lex $P78
     new $P30, 'ExceptionHandler'
     set_addr $P30, control_29
-    $P30."handle_types"(57)
+    $P30."handle_types"(.CONTROL_RETURN)
     push_eh $P30
     .lex "self", self
-    .lex "$/", param_31
-    if has_param_32, optparam_52
-    new $P33, "Undef"
-    set param_32, $P33
-  optparam_52:
-    .lex "$key", param_32
-.annotate 'line', 64
-    new $P34, "Undef"
-    .lex "$past", $P34
 .annotate 'line', 63
-    find_lex $P36, "$key"
-    if $P36, unless_35_end
-    new $P37, "Exception"
-    set $P37['type'], 57
-    new $P38, "Integer"
-    assign $P38, 0
-    setattribute $P37, 'payload', $P38
-    throw $P37
-  unless_35_end:
-.annotate 'line', 64
-    find_lex $P40, "$/"
-    $P41 = $P40."ast"()
-    set $P39, $P41
-    defined $I43, $P39
-    if $I43, default_42
-    find_lex $P44, "$/"
-    unless_null $P44, vivify_53
-    $P44 = root_new ['parrot';'Hash']
-  vivify_53:
-    set $P45, $P44["OPER"]
-    unless_null $P45, vivify_54
-    new $P45, "Undef"
-  vivify_54:
-    $P46 = $P45."ast"()
-    set $P39, $P46
-  default_42:
-    store_lex "$past", $P39
-.annotate 'line', 65
-    find_lex $P48, "$past"
-    if $P48, unless_47_end
-.annotate 'line', 66
-    get_hll_global $P49, ["PAST"], "Op"
-    find_lex $P50, "$/"
-    $P51 = $P49."new"($P50 :named("node"))
-    store_lex "$past", $P51
-.annotate 'line', 67
-    find_lex $P53, "$/"
-    unless_null $P53, vivify_55
-    $P53 = root_new ['parrot';'Hash']
-  vivify_55:
-    set $P54, $P53["OPER"]
-    unless_null $P54, vivify_56
-    $P54 = root_new ['parrot';'Hash']
-  vivify_56:
-    set $P55, $P54["O"]
-    unless_null $P55, vivify_57
-    $P55 = root_new ['parrot';'Hash']
-  vivify_57:
-    set $P56, $P55["pasttype"]
-    unless_null $P56, vivify_58
-    new $P56, "Undef"
-  vivify_58:
-    if $P56, if_52
-.annotate 'line', 68
-    find_lex $P64, "$/"
-    unless_null $P64, vivify_59
-    $P64 = root_new ['parrot';'Hash']
-  vivify_59:
-    set $P65, $P64["OPER"]
-    unless_null $P65, vivify_60
-    $P65 = root_new ['parrot';'Hash']
-  vivify_60:
-    set $P66, $P65["O"]
-    unless_null $P66, vivify_61
-    $P66 = root_new ['parrot';'Hash']
-  vivify_61:
-    set $P67, $P66["pirop"]
-    unless_null $P67, vivify_62
-    new $P67, "Undef"
-  vivify_62:
-    unless $P67, if_63_end
-    find_lex $P68, "$past"
-    find_lex $P69, "$/"
-    unless_null $P69, vivify_63
-    $P69 = root_new ['parrot';'Hash']
-  vivify_63:
-    set $P70, $P69["OPER"]
-    unless_null $P70, vivify_64
-    $P70 = root_new ['parrot';'Hash']
-  vivify_64:
-    set $P71, $P70["O"]
-    unless_null $P71, vivify_65
-    $P71 = root_new ['parrot';'Hash']
-  vivify_65:
-    set $P72, $P71["pirop"]
-    unless_null $P72, vivify_66
-    new $P72, "Undef"
-  vivify_66:
-    set $S73, $P72
-    $P68."pirop"($S73)
-  if_63_end:
-    goto if_52_end
-  if_52:
-.annotate 'line', 67
-    find_lex $P57, "$past"
-    find_lex $P58, "$/"
-    unless_null $P58, vivify_67
-    $P58 = root_new ['parrot';'Hash']
-  vivify_67:
-    set $P59, $P58["OPER"]
-    unless_null $P59, vivify_68
-    $P59 = root_new ['parrot';'Hash']
-  vivify_68:
-    set $P60, $P59["O"]
-    unless_null $P60, vivify_69
-    $P60 = root_new ['parrot';'Hash']
-  vivify_69:
-    set $P61, $P60["pasttype"]
-    unless_null $P61, vivify_70
-    new $P61, "Undef"
-  vivify_70:
-    set $S62, $P61
-    $P57."pasttype"($S62)
-  if_52_end:
+    get_hll_global $P31, ["PAST"], "Op"
 .annotate 'line', 69
-    find_lex $P75, "$past"
-    $P76 = $P75."name"()
-    if $P76, unless_74_end
-    .const 'Sub' $P78 = "15_1274022880.65586" 
-    capture_lex $P78
-    $P78()
-  unless_74_end:
-  unless_47_end:
-.annotate 'line', 80
-    find_lex $P98, "$key"
-    set $S99, $P98
-    iseq $I100, $S99, "POSTFIX"
-    if $I100, if_97
-.annotate 'line', 82
-    find_lex $P106, "$/"
-    $P107 = $P106."list"()
-    defined $I108, $P107
-    unless $I108, for_undef_74
-    iter $P105, $P107
-    new $P123, 'ExceptionHandler'
-    set_addr $P123, loop122_handler
-    $P123."handle_types"(64, 66, 65)
-    push_eh $P123
-  loop122_test:
-    unless $P105, loop122_done
-    shift $P109, $P105
-  loop122_redo:
-    .const 'Sub' $P111 = "16_1274022880.65586" 
-    capture_lex $P111
-    $P111($P109)
-  loop122_next:
-    goto loop122_test
-  loop122_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P124, exception, 'type'
-    eq $P124, 64, loop122_next
-    eq $P124, 66, loop122_redo
-  loop122_done:
-    pop_eh 
-  for_undef_74:
-.annotate 'line', 81
-    goto if_97_end
-  if_97:
-.annotate 'line', 80
-    find_lex $P101, "$past"
-    find_lex $P102, "$/"
-    unless_null $P102, vivify_75
-    $P102 = root_new ['parrot';'ResizablePMCArray']
-  vivify_75:
-    set $P103, $P102[0]
-    unless_null $P103, vivify_76
-    new $P103, "Undef"
-  vivify_76:
-    $P104 = $P103."ast"()
-    $P101."unshift"($P104)
-  if_97_end:
-.annotate 'line', 84
-    find_lex $P125, "$/"
-    find_lex $P126, "$past"
-    $P127 = $P125."!make"($P126)
+    new $P32, "ResizablePMCArray"
+    push $P32, "    $P0 = find_dynamic_lex \"$*CTXSAVE\""
+    push $P32, "    if null $P0 goto ctxsave_done"
+    push $P32, "    $I0 = can $P0, \"ctxsave\""
+    push $P32, "    unless $I0 goto ctxsave_done"
+    push $P32, "    $P0.\"ctxsave\"()"
+    push $P32, "  ctxsave_done:"
+    $P33 = $P31."new"($P32 :named("inline"))
 .annotate 'line', 62
-    .return ($P127)
+    .return ($P33)
   control_29:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P128, exception, "payload"
-    .return ($P128)
+    getattribute $P34, exception, "payload"
+    .return ($P34)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block77"  :anon :subid("15_1274022880.65586") :outer("14_1274022880.65586")
-.annotate 'line', 71
-    new $P79, "Undef"
-    .lex "$name", $P79
-.annotate 'line', 70
-    find_lex $P81, "$key"
-    set $S82, $P81
-    iseq $I83, $S82, "LIST"
-    unless $I83, if_80_end
-    new $P84, "String"
-    assign $P84, "infix"
-    store_lex "$key", $P84
-  if_80_end:
-.annotate 'line', 71
-
-                $P0 = find_lex '$key'
-                $S0 = $P0
-                $S0 = downcase $S0
-                $P85 = box $S0
-            
-    concat $P86, $P85, ":<"
+.include "except_types.pasm"
+.sub "SET_BLOCK_OUTER_CTX"  :subid("15_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_38
 .annotate 'line', 76
-    find_lex $P87, "$/"
-    unless_null $P87, vivify_71
-    $P87 = root_new ['parrot';'Hash']
-  vivify_71:
-    set $P88, $P87["OPER"]
-    unless_null $P88, vivify_72
-    $P88 = root_new ['parrot';'Hash']
-  vivify_72:
-    set $P89, $P88["sym"]
-    unless_null $P89, vivify_73
-    new $P89, "Undef"
-  vivify_73:
-    concat $P90, $P86, $P89
-    concat $P91, $P90, ">"
-    store_lex "$name", $P91
+    .const 'Sub' $P48 = "16_1275811473.30481" 
+    capture_lex $P48
+    new $P37, 'ExceptionHandler'
+    set_addr $P37, control_36
+    $P37."handle_types"(.CONTROL_RETURN)
+    push_eh $P37
+    .lex "self", self
+    .lex "$block", param_38
 .annotate 'line', 77
-    find_lex $P92, "$past"
-    new $P93, "String"
-    assign $P93, "&"
-    find_lex $P94, "$name"
-    concat $P95, $P93, $P94
-    $P96 = $P92."name"($P95)
-.annotate 'line', 69
-    .return ($P96)
+    new $P39, "Undef"
+    .lex "$outer_ctx", $P39
+    find_dynamic_lex $P40, "%*COMPILING"
+    unless_null $P40, vivify_57
+    get_hll_global $P40, "%COMPILING"
+    unless_null $P40, vivify_58
+    die "Contextual %*COMPILING not found"
+  vivify_58:
+  vivify_57:
+    set $P41, $P40["%?OPTIONS"]
+    unless_null $P41, vivify_59
+    $P41 = root_new ['parrot';'Hash']
+  vivify_59:
+    set $P42, $P41["outer_ctx"]
+    unless_null $P42, vivify_60
+    new $P42, "Undef"
+  vivify_60:
+    store_lex "$outer_ctx", $P42
+.annotate 'line', 78
+    find_lex $P45, "$outer_ctx"
+    defined $I46, $P45
+    if $I46, if_44
+    new $P43, 'Integer'
+    set $P43, $I46
+    goto if_44_end
+  if_44:
+    .const 'Sub' $P48 = "16_1275811473.30481" 
+    capture_lex $P48
+    $P71 = $P48()
+    set $P43, $P71
+  if_44_end:
+.annotate 'line', 76
+    .return ($P43)
+  control_36:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P72, exception, "payload"
+    .return ($P72)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block110"  :anon :subid("16_1274022880.65586") :outer("14_1274022880.65586")
-    .param pmc param_112
+.include "except_types.pasm"
+.sub "_block47"  :anon :subid("16_1275811473.30481") :outer("15_1275811473.30481")
+.annotate 'line', 78
+    .const 'Sub' $P62 = "17_1275811473.30481" 
+    capture_lex $P62
+.annotate 'line', 79
+    $P49 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@ns", $P49
+    find_lex $P50, "$outer_ctx"
+    getattribute $P51, $P50, "current_namespace"
+    $P52 = $P51."get_name"()
+    store_lex "@ns", $P52
+.annotate 'line', 80
+    find_lex $P53, "@ns"
+    $P53."shift"()
+.annotate 'line', 81
+    find_lex $P54, "$block"
+    find_lex $P55, "@ns"
+    $P54."namespace"($P55)
 .annotate 'line', 82
-    .lex "$_", param_112
-    find_lex $P115, "$_"
-    $P116 = $P115."ast"()
-    defined $I117, $P116
-    if $I117, if_114
-    new $P113, 'Integer'
-    set $P113, $I117
-    goto if_114_end
-  if_114:
-    find_lex $P118, "$past"
-    find_lex $P119, "$_"
-    $P120 = $P119."ast"()
-    $P121 = $P118."push"($P120)
-    set $P113, $P121
-  if_114_end:
-    .return ($P113)
+    find_lex $P57, "$outer_ctx"
+    $P58 = $P57."lexpad_full"()
+    defined $I59, $P58
+    unless $I59, for_undef_61
+    iter $P56, $P58
+    new $P69, 'ExceptionHandler'
+    set_addr $P69, loop68_handler
+    $P69."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P69
+  loop68_test:
+    unless $P56, loop68_done
+    shift $P60, $P56
+  loop68_redo:
+    .const 'Sub' $P62 = "17_1275811473.30481" 
+    capture_lex $P62
+    $P62($P60)
+  loop68_next:
+    goto loop68_test
+  loop68_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P70, exception, 'type'
+    eq $P70, .CONTROL_LOOP_NEXT, loop68_next
+    eq $P70, .CONTROL_LOOP_REDO, loop68_redo
+  loop68_done:
+    pop_eh 
+  for_undef_61:
+.annotate 'line', 78
+    .return ($P56)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "term:sym<circumfix>"  :subid("17_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_132
-.annotate 'line', 87
-    new $P131, 'ExceptionHandler'
-    set_addr $P131, control_130
-    $P131."handle_types"(57)
-    push_eh $P131
-    .lex "self", self
-    .lex "$/", param_132
-    find_lex $P133, "$/"
-    find_lex $P134, "$/"
-    unless_null $P134, vivify_77
-    $P134 = root_new ['parrot';'Hash']
-  vivify_77:
-    set $P135, $P134["circumfix"]
-    unless_null $P135, vivify_78
-    new $P135, "Undef"
-  vivify_78:
-    $P136 = $P135."ast"()
-    $P137 = $P133."!make"($P136)
-    .return ($P137)
-  control_130:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P138, exception, "payload"
-    .return ($P138)
+.sub "_block61"  :anon :subid("17_1275811473.30481") :outer("16_1275811473.30481")
+    .param pmc param_63
+.annotate 'line', 82
+    .lex "$_", param_63
+.annotate 'line', 83
+    find_lex $P64, "$block"
+    find_lex $P65, "$_"
+    $P66 = $P65."key"()
+    $P67 = $P64."symbol"($P66, "lexical" :named("scope"))
+.annotate 'line', 82
+    .return ($P67)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "termish"  :subid("18_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_142
+.include "except_types.pasm"
+.sub "EXPR"  :subid("18_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_76
+    .param pmc param_77 :optional
+    .param int has_param_77 :opt_flag
 .annotate 'line', 89
-    new $P141, 'ExceptionHandler'
-    set_addr $P141, control_140
-    $P141."handle_types"(57)
-    push_eh $P141
-    .lex "self", self
-    .lex "$/", param_142
-    find_lex $P143, "$/"
-    find_lex $P144, "$/"
-    unless_null $P144, vivify_79
-    $P144 = root_new ['parrot';'Hash']
-  vivify_79:
-    set $P145, $P144["term"]
-    unless_null $P145, vivify_80
-    new $P145, "Undef"
-  vivify_80:
-    $P146 = $P145."ast"()
-    $P147 = $P143."!make"($P146)
-    .return ($P147)
-  control_140:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P148, exception, "payload"
-    .return ($P148)
-.end
-
-
-.namespace ["HLL";"Actions"]
-.sub "nullterm"  :subid("19_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_152
-.annotate 'line', 90
-    new $P151, 'ExceptionHandler'
-    set_addr $P151, control_150
-    $P151."handle_types"(57)
-    push_eh $P151
+    .const 'Sub' $P156 = "20_1275811473.30481" 
+    capture_lex $P156
+    .const 'Sub' $P123 = "19_1275811473.30481" 
+    capture_lex $P123
+    new $P75, 'ExceptionHandler'
+    set_addr $P75, control_74
+    $P75."handle_types"(.CONTROL_RETURN)
+    push_eh $P75
     .lex "self", self
-    .lex "$/", param_152
-    find_lex $P153, "$/"
- $P154 = new ['Undef'] 
-    $P155 = $P153."!make"($P154)
-    .return ($P155)
-  control_150:
+    .lex "$/", param_76
+    if has_param_77, optparam_62
+    new $P78, "Undef"
+    set param_77, $P78
+  optparam_62:
+    .lex "$key", param_77
+.annotate 'line', 91
+    new $P79, "Undef"
+    .lex "$past", $P79
+.annotate 'line', 90
+    find_lex $P81, "$key"
+    if $P81, unless_80_end
+    new $P82, "Exception"
+    set $P82['type'], .CONTROL_RETURN
+    new $P83, "Integer"
+    assign $P83, 0
+    setattribute $P82, 'payload', $P83
+    throw $P82
+  unless_80_end:
+.annotate 'line', 91
+    find_lex $P85, "$/"
+    $P86 = $P85."ast"()
+    set $P84, $P86
+    defined $I88, $P84
+    if $I88, default_87
+    find_lex $P89, "$/"
+    unless_null $P89, vivify_63
+    $P89 = root_new ['parrot';'Hash']
+  vivify_63:
+    set $P90, $P89["OPER"]
+    unless_null $P90, vivify_64
+    new $P90, "Undef"
+  vivify_64:
+    $P91 = $P90."ast"()
+    set $P84, $P91
+  default_87:
+    store_lex "$past", $P84
+.annotate 'line', 92
+    find_lex $P93, "$past"
+    if $P93, unless_92_end
+.annotate 'line', 93
+    get_hll_global $P94, ["PAST"], "Op"
+    find_lex $P95, "$/"
+    $P96 = $P94."new"($P95 :named("node"))
+    store_lex "$past", $P96
+.annotate 'line', 94
+    find_lex $P98, "$/"
+    unless_null $P98, vivify_65
+    $P98 = root_new ['parrot';'Hash']
+  vivify_65:
+    set $P99, $P98["OPER"]
+    unless_null $P99, vivify_66
+    $P99 = root_new ['parrot';'Hash']
+  vivify_66:
+    set $P100, $P99["O"]
+    unless_null $P100, vivify_67
+    $P100 = root_new ['parrot';'Hash']
+  vivify_67:
+    set $P101, $P100["pasttype"]
+    unless_null $P101, vivify_68
+    new $P101, "Undef"
+  vivify_68:
+    if $P101, if_97
+.annotate 'line', 95
+    find_lex $P109, "$/"
+    unless_null $P109, vivify_69
+    $P109 = root_new ['parrot';'Hash']
+  vivify_69:
+    set $P110, $P109["OPER"]
+    unless_null $P110, vivify_70
+    $P110 = root_new ['parrot';'Hash']
+  vivify_70:
+    set $P111, $P110["O"]
+    unless_null $P111, vivify_71
+    $P111 = root_new ['parrot';'Hash']
+  vivify_71:
+    set $P112, $P111["pirop"]
+    unless_null $P112, vivify_72
+    new $P112, "Undef"
+  vivify_72:
+    unless $P112, if_108_end
+    find_lex $P113, "$past"
+    find_lex $P114, "$/"
+    unless_null $P114, vivify_73
+    $P114 = root_new ['parrot';'Hash']
+  vivify_73:
+    set $P115, $P114["OPER"]
+    unless_null $P115, vivify_74
+    $P115 = root_new ['parrot';'Hash']
+  vivify_74:
+    set $P116, $P115["O"]
+    unless_null $P116, vivify_75
+    $P116 = root_new ['parrot';'Hash']
+  vivify_75:
+    set $P117, $P116["pirop"]
+    unless_null $P117, vivify_76
+    new $P117, "Undef"
+  vivify_76:
+    set $S118, $P117
+    $P113."pirop"($S118)
+  if_108_end:
+    goto if_97_end
+  if_97:
+.annotate 'line', 94
+    find_lex $P102, "$past"
+    find_lex $P103, "$/"
+    unless_null $P103, vivify_77
+    $P103 = root_new ['parrot';'Hash']
+  vivify_77:
+    set $P104, $P103["OPER"]
+    unless_null $P104, vivify_78
+    $P104 = root_new ['parrot';'Hash']
+  vivify_78:
+    set $P105, $P104["O"]
+    unless_null $P105, vivify_79
+    $P105 = root_new ['parrot';'Hash']
+  vivify_79:
+    set $P106, $P105["pasttype"]
+    unless_null $P106, vivify_80
+    new $P106, "Undef"
+  vivify_80:
+    set $S107, $P106
+    $P102."pasttype"($S107)
+  if_97_end:
+.annotate 'line', 96
+    find_lex $P120, "$past"
+    $P121 = $P120."name"()
+    if $P121, unless_119_end
+    .const 'Sub' $P123 = "19_1275811473.30481" 
+    capture_lex $P123
+    $P123()
+  unless_119_end:
+  unless_92_end:
+.annotate 'line', 107
+    find_lex $P143, "$key"
+    set $S144, $P143
+    iseq $I145, $S144, "POSTFIX"
+    if $I145, if_142
+.annotate 'line', 109
+    find_lex $P151, "$/"
+    $P152 = $P151."list"()
+    defined $I153, $P152
+    unless $I153, for_undef_84
+    iter $P150, $P152
+    new $P168, 'ExceptionHandler'
+    set_addr $P168, loop167_handler
+    $P168."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P168
+  loop167_test:
+    unless $P150, loop167_done
+    shift $P154, $P150
+  loop167_redo:
+    .const 'Sub' $P156 = "20_1275811473.30481" 
+    capture_lex $P156
+    $P156($P154)
+  loop167_next:
+    goto loop167_test
+  loop167_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P169, exception, 'type'
+    eq $P169, .CONTROL_LOOP_NEXT, loop167_next
+    eq $P169, .CONTROL_LOOP_REDO, loop167_redo
+  loop167_done:
+    pop_eh 
+  for_undef_84:
+.annotate 'line', 108
+    goto if_142_end
+  if_142:
+.annotate 'line', 107
+    find_lex $P146, "$past"
+    find_lex $P147, "$/"
+    unless_null $P147, vivify_85
+    $P147 = root_new ['parrot';'ResizablePMCArray']
+  vivify_85:
+    set $P148, $P147[0]
+    unless_null $P148, vivify_86
+    new $P148, "Undef"
+  vivify_86:
+    $P149 = $P148."ast"()
+    $P146."unshift"($P149)
+  if_142_end:
+.annotate 'line', 111
+    find_lex $P170, "$/"
+    find_lex $P171, "$past"
+    $P172 = $P170."!make"($P171)
+.annotate 'line', 89
+    .return ($P172)
+  control_74:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P156, exception, "payload"
-    .return ($P156)
+    getattribute $P173, exception, "payload"
+    .return ($P173)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "nullterm_alt"  :subid("20_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_160
-.annotate 'line', 91
-    new $P159, 'ExceptionHandler'
-    set_addr $P159, control_158
-    $P159."handle_types"(57)
-    push_eh $P159
-    .lex "self", self
-    .lex "$/", param_160
-    find_lex $P161, "$/"
-    find_lex $P162, "$/"
-    unless_null $P162, vivify_81
-    $P162 = root_new ['parrot';'Hash']
+.sub "_block122"  :anon :subid("19_1275811473.30481") :outer("18_1275811473.30481")
+.annotate 'line', 98
+    new $P124, "Undef"
+    .lex "$name", $P124
+.annotate 'line', 97
+    find_lex $P126, "$key"
+    set $S127, $P126
+    iseq $I128, $S127, "LIST"
+    unless $I128, if_125_end
+    new $P129, "String"
+    assign $P129, "infix"
+    store_lex "$key", $P129
+  if_125_end:
+.annotate 'line', 98
+
+                $P0 = find_lex '$key'
+                $S0 = $P0
+                $S0 = downcase $S0
+                $P130 = box $S0
+            
+    concat $P131, $P130, ":<"
+.annotate 'line', 103
+    find_lex $P132, "$/"
+    unless_null $P132, vivify_81
+    $P132 = root_new ['parrot';'Hash']
   vivify_81:
-    set $P163, $P162["term"]
-    unless_null $P163, vivify_82
-    new $P163, "Undef"
+    set $P133, $P132["OPER"]
+    unless_null $P133, vivify_82
+    $P133 = root_new ['parrot';'Hash']
   vivify_82:
-    $P164 = $P163."ast"()
-    $P165 = $P161."!make"($P164)
-    .return ($P165)
-  control_158:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P166, exception, "payload"
-    .return ($P166)
+    set $P134, $P133["sym"]
+    unless_null $P134, vivify_83
+    new $P134, "Undef"
+  vivify_83:
+    concat $P135, $P131, $P134
+    concat $P136, $P135, ">"
+    store_lex "$name", $P136
+.annotate 'line', 104
+    find_lex $P137, "$past"
+    new $P138, "String"
+    assign $P138, "&"
+    find_lex $P139, "$name"
+    concat $P140, $P138, $P139
+    $P141 = $P137."name"($P140)
+.annotate 'line', 96
+    .return ($P141)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "integer"  :subid("21_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_170
-.annotate 'line', 93
-    new $P169, 'ExceptionHandler'
-    set_addr $P169, control_168
-    $P169."handle_types"(57)
-    push_eh $P169
-    .lex "self", self
-    .lex "$/", param_170
-    find_lex $P171, "$/"
-    find_lex $P172, "$/"
-    unless_null $P172, vivify_83
-    $P172 = root_new ['parrot';'Hash']
-  vivify_83:
-    set $P173, $P172["VALUE"]
-    unless_null $P173, vivify_84
-    new $P173, "Undef"
-  vivify_84:
-    $P174 = $P173."ast"()
-    $P175 = $P171."!make"($P174)
-    .return ($P175)
-  control_168:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P176, exception, "payload"
-    .return ($P176)
+.sub "_block155"  :anon :subid("20_1275811473.30481") :outer("18_1275811473.30481")
+    .param pmc param_157
+.annotate 'line', 109
+    .lex "$_", param_157
+    find_lex $P160, "$_"
+    $P161 = $P160."ast"()
+    defined $I162, $P161
+    if $I162, if_159
+    new $P158, 'Integer'
+    set $P158, $I162
+    goto if_159_end
+  if_159:
+    find_lex $P163, "$past"
+    find_lex $P164, "$_"
+    $P165 = $P164."ast"()
+    $P166 = $P163."push"($P165)
+    set $P158, $P166
+  if_159_end:
+    .return ($P158)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "dec_number"  :subid("22_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_180
-.annotate 'line', 95
-    new $P179, 'ExceptionHandler'
-    set_addr $P179, control_178
-    $P179."handle_types"(57)
-    push_eh $P179
+.include "except_types.pasm"
+.sub "term:sym<circumfix>"  :subid("21_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_177
+.annotate 'line', 114
+    new $P176, 'ExceptionHandler'
+    set_addr $P176, control_175
+    $P176."handle_types"(.CONTROL_RETURN)
+    push_eh $P176
     .lex "self", self
-    .lex "$/", param_180
-    find_lex $P181, "$/"
-    find_lex $P182, "$/"
-    set $N183, $P182
-    $P184 = $P181."!make"($N183)
-    .return ($P184)
-  control_178:
+    .lex "$/", param_177
+    find_lex $P178, "$/"
+    find_lex $P179, "$/"
+    unless_null $P179, vivify_87
+    $P179 = root_new ['parrot';'Hash']
+  vivify_87:
+    set $P180, $P179["circumfix"]
+    unless_null $P180, vivify_88
+    new $P180, "Undef"
+  vivify_88:
+    $P181 = $P180."ast"()
+    $P182 = $P178."!make"($P181)
+    .return ($P182)
+  control_175:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P185, exception, "payload"
-    .return ($P185)
+    getattribute $P183, exception, "payload"
+    .return ($P183)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "decint"  :subid("23_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_189
-.annotate 'line', 97
-    new $P188, 'ExceptionHandler'
-    set_addr $P188, control_187
-    $P188."handle_types"(57)
-    push_eh $P188
-    .lex "self", self
-    .lex "$/", param_189
-    find_lex $P190, "$/"
-    find_lex $P191, "$/"
-    $P192 = "string_to_int"($P191, 10)
-    $P193 = $P190."!make"($P192)
-    .return ($P193)
-  control_187:
+.include "except_types.pasm"
+.sub "termish"  :subid("22_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_187
+.annotate 'line', 116
+    new $P186, 'ExceptionHandler'
+    set_addr $P186, control_185
+    $P186."handle_types"(.CONTROL_RETURN)
+    push_eh $P186
+    .lex "self", self
+    .lex "$/", param_187
+    find_lex $P188, "$/"
+    find_lex $P189, "$/"
+    unless_null $P189, vivify_89
+    $P189 = root_new ['parrot';'Hash']
+  vivify_89:
+    set $P190, $P189["term"]
+    unless_null $P190, vivify_90
+    new $P190, "Undef"
+  vivify_90:
+    $P191 = $P190."ast"()
+    $P192 = $P188."!make"($P191)
+    .return ($P192)
+  control_185:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P194, exception, "payload"
-    .return ($P194)
+    getattribute $P193, exception, "payload"
+    .return ($P193)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "hexint"  :subid("24_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_198
-.annotate 'line', 98
-    new $P197, 'ExceptionHandler'
-    set_addr $P197, control_196
-    $P197."handle_types"(57)
-    push_eh $P197
+.include "except_types.pasm"
+.sub "nullterm"  :subid("23_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_197
+.annotate 'line', 117
+    new $P196, 'ExceptionHandler'
+    set_addr $P196, control_195
+    $P196."handle_types"(.CONTROL_RETURN)
+    push_eh $P196
     .lex "self", self
-    .lex "$/", param_198
-    find_lex $P199, "$/"
-    find_lex $P200, "$/"
-    $P201 = "string_to_int"($P200, 16)
-    $P202 = $P199."!make"($P201)
-    .return ($P202)
-  control_196:
+    .lex "$/", param_197
+    find_lex $P198, "$/"
+ $P199 = new ['Undef'] 
+    $P200 = $P198."!make"($P199)
+    .return ($P200)
+  control_195:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P203, exception, "payload"
-    .return ($P203)
+    getattribute $P201, exception, "payload"
+    .return ($P201)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "octint"  :subid("25_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_207
-.annotate 'line', 99
-    new $P206, 'ExceptionHandler'
-    set_addr $P206, control_205
-    $P206."handle_types"(57)
-    push_eh $P206
-    .lex "self", self
-    .lex "$/", param_207
-    find_lex $P208, "$/"
-    find_lex $P209, "$/"
-    $P210 = "string_to_int"($P209, 8)
-    $P211 = $P208."!make"($P210)
-    .return ($P211)
-  control_205:
+.include "except_types.pasm"
+.sub "nullterm_alt"  :subid("24_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_205
+.annotate 'line', 118
+    new $P204, 'ExceptionHandler'
+    set_addr $P204, control_203
+    $P204."handle_types"(.CONTROL_RETURN)
+    push_eh $P204
+    .lex "self", self
+    .lex "$/", param_205
+    find_lex $P206, "$/"
+    find_lex $P207, "$/"
+    unless_null $P207, vivify_91
+    $P207 = root_new ['parrot';'Hash']
+  vivify_91:
+    set $P208, $P207["term"]
+    unless_null $P208, vivify_92
+    new $P208, "Undef"
+  vivify_92:
+    $P209 = $P208."ast"()
+    $P210 = $P206."!make"($P209)
+    .return ($P210)
+  control_203:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P212, exception, "payload"
-    .return ($P212)
+    getattribute $P211, exception, "payload"
+    .return ($P211)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "binint"  :subid("26_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_216
-.annotate 'line', 100
-    new $P215, 'ExceptionHandler'
-    set_addr $P215, control_214
-    $P215."handle_types"(57)
-    push_eh $P215
+.include "except_types.pasm"
+.sub "integer"  :subid("25_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_215
+.annotate 'line', 120
+    new $P214, 'ExceptionHandler'
+    set_addr $P214, control_213
+    $P214."handle_types"(.CONTROL_RETURN)
+    push_eh $P214
     .lex "self", self
-    .lex "$/", param_216
+    .lex "$/", param_215
+    find_lex $P216, "$/"
     find_lex $P217, "$/"
-    find_lex $P218, "$/"
-    $P219 = "string_to_int"($P218, 2)
-    $P220 = $P217."!make"($P219)
+    unless_null $P217, vivify_93
+    $P217 = root_new ['parrot';'Hash']
+  vivify_93:
+    set $P218, $P217["VALUE"]
+    unless_null $P218, vivify_94
+    new $P218, "Undef"
+  vivify_94:
+    $P219 = $P218."ast"()
+    $P220 = $P216."!make"($P219)
     .return ($P220)
-  control_214:
+  control_213:
     .local pmc exception 
     .get_results (exception) 
     getattribute $P221, exception, "payload"
@@ -5460,537 +5698,526 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_EXPR"  :subid("27_1274022880.65586") :method :outer("11_1274022880.65586")
+.include "except_types.pasm"
+.sub "dec_number"  :subid("26_1275811473.30481") :method :outer("11_1275811473.30481")
     .param pmc param_225
-.annotate 'line', 102
-    .const 'Sub' $P241 = "28_1274022880.65586" 
-    capture_lex $P241
+.annotate 'line', 122
     new $P224, 'ExceptionHandler'
     set_addr $P224, control_223
-    $P224."handle_types"(57)
+    $P224."handle_types"(.CONTROL_RETURN)
     push_eh $P224
     .lex "self", self
     .lex "$/", param_225
-.annotate 'line', 103
-    new $P226, "Undef"
-    .lex "$past", $P226
+    find_lex $P226, "$/"
     find_lex $P227, "$/"
-    unless_null $P227, vivify_85
-    $P227 = root_new ['parrot';'Hash']
-  vivify_85:
-    set $P228, $P227["quote_delimited"]
-    unless_null $P228, vivify_86
-    new $P228, "Undef"
-  vivify_86:
-    $P229 = $P228."ast"()
-    store_lex "$past", $P229
-.annotate 'line', 104
-    find_lex $P231, "$/"
-    $P232 = $P231."CURSOR"()
-    $P233 = $P232."quotemod_check"("w")
-    unless $P233, if_230_end
-.annotate 'line', 105
-    get_hll_global $P235, ["PAST"], "Node"
-    find_lex $P236, "$past"
-    $P237 = $P235."ACCEPTS"($P236)
-    if $P237, if_234
-.annotate 'line', 108
-    .const 'Sub' $P241 = "28_1274022880.65586" 
-    capture_lex $P241
-    $P241()
-    goto if_234_end
-  if_234:
-.annotate 'line', 106
-    find_lex $P238, "$/"
-    $P239 = $P238."CURSOR"()
-    $P239."panic"("Can't form :w list from non-constant strings (yet)")
-  if_234_end:
-  if_230_end:
-.annotate 'line', 119
-    get_hll_global $P273, ["PAST"], "Node"
-    find_lex $P274, "$past"
-    $P275 = $P273."ACCEPTS"($P274)
-    isfalse $I276, $P275
-    unless $I276, if_272_end
-.annotate 'line', 120
-    get_hll_global $P277, ["PAST"], "Val"
-    find_lex $P278, "$past"
-    set $S279, $P278
-    $P280 = $P277."new"($S279 :named("value"))
-    store_lex "$past", $P280
-  if_272_end:
-.annotate 'line', 122
-    find_lex $P281, "$/"
-    find_lex $P282, "$past"
-    $P283 = $P281."!make"($P282)
-.annotate 'line', 102
-    .return ($P283)
+    set $N228, $P227
+    $P229 = $P226."!make"($N228)
+    .return ($P229)
   control_223:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P284, exception, "payload"
-    .return ($P284)
-.end
-
-
-.namespace ["HLL";"Actions"]
-.sub "_block240"  :anon :subid("28_1274022880.65586") :outer("27_1274022880.65586")
-.annotate 'line', 108
-    .const 'Sub' $P260 = "29_1274022880.65586" 
-    capture_lex $P260
-.annotate 'line', 109
-    $P242 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@words", $P242
-    get_hll_global $P243, ["HLL";"Grammar"], "split_words"
-    find_lex $P244, "$/"
-    find_lex $P245, "$past"
-    $P246 = $P243($P244, $P245)
-    store_lex "@words", $P246
-.annotate 'line', 110
-    find_lex $P249, "@words"
-    set $N250, $P249
-    isgt $I251, $N250, 1.0
-    if $I251, if_248
-.annotate 'line', 115
-    find_lex $P268, "@words"
-    unless_null $P268, vivify_87
-    $P268 = root_new ['parrot';'ResizablePMCArray']
-  vivify_87:
-    set $P269, $P268[0]
-    unless_null $P269, vivify_88
-    new $P269, "Undef"
-  vivify_88:
-    set $S270, $P269
-    new $P271, 'String'
-    set $P271, $S270
-    store_lex "$past", $P271
-.annotate 'line', 114
-    set $P247, $P271
-.annotate 'line', 110
-    goto if_248_end
-  if_248:
-.annotate 'line', 111
-    get_hll_global $P252, ["PAST"], "Op"
-    find_lex $P253, "$/"
-    $P254 = $P252."new"("list" :named("pasttype"), $P253 :named("node"))
-    store_lex "$past", $P254
-.annotate 'line', 112
-    find_lex $P256, "@words"
-    defined $I257, $P256
-    unless $I257, for_undef_89
-    iter $P255, $P256
-    new $P266, 'ExceptionHandler'
-    set_addr $P266, loop265_handler
-    $P266."handle_types"(64, 66, 65)
-    push_eh $P266
-  loop265_test:
-    unless $P255, loop265_done
-    shift $P258, $P255
-  loop265_redo:
-    .const 'Sub' $P260 = "29_1274022880.65586" 
-    capture_lex $P260
-    $P260($P258)
-  loop265_next:
-    goto loop265_test
-  loop265_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P267, exception, 'type'
-    eq $P267, 64, loop265_next
-    eq $P267, 66, loop265_redo
-  loop265_done:
-    pop_eh 
-  for_undef_89:
-.annotate 'line', 110
-    set $P247, $P255
-  if_248_end:
-.annotate 'line', 108
-    .return ($P247)
+    getattribute $P230, exception, "payload"
+    .return ($P230)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block259"  :anon :subid("29_1274022880.65586") :outer("28_1274022880.65586")
-    .param pmc param_261
-.annotate 'line', 112
-    .lex "$_", param_261
-    find_lex $P262, "$past"
-    find_lex $P263, "$_"
-    $P264 = $P262."push"($P263)
-    .return ($P264)
+.include "except_types.pasm"
+.sub "decint"  :subid("27_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_234
+.annotate 'line', 124
+    new $P233, 'ExceptionHandler'
+    set_addr $P233, control_232
+    $P233."handle_types"(.CONTROL_RETURN)
+    push_eh $P233
+    .lex "self", self
+    .lex "$/", param_234
+    find_lex $P235, "$/"
+    find_lex $P236, "$/"
+    $P237 = "string_to_int"($P236, 10)
+    $P238 = $P235."!make"($P237)
+    .return ($P238)
+  control_232:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P239, exception, "payload"
+    .return ($P239)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_delimited"  :subid("30_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_288
+.include "except_types.pasm"
+.sub "hexint"  :subid("28_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_243
 .annotate 'line', 125
-    .const 'Sub' $P300 = "31_1274022880.65586" 
-    capture_lex $P300
-    new $P287, 'ExceptionHandler'
-    set_addr $P287, control_286
-    $P287."handle_types"(57)
-    push_eh $P287
+    new $P242, 'ExceptionHandler'
+    set_addr $P242, control_241
+    $P242."handle_types"(.CONTROL_RETURN)
+    push_eh $P242
     .lex "self", self
-    .lex "$/", param_288
-.annotate 'line', 126
-    $P289 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@parts", $P289
-.annotate 'line', 127
-    new $P290, "Undef"
-    .lex "$lastlit", $P290
-.annotate 'line', 143
-    new $P291, "Undef"
-    .lex "$past", $P291
-.annotate 'line', 125
-    find_lex $P292, "@parts"
-.annotate 'line', 127
-    new $P293, "String"
-    assign $P293, ""
-    store_lex "$lastlit", $P293
-.annotate 'line', 128
-    find_lex $P295, "$/"
-    unless_null $P295, vivify_90
-    $P295 = root_new ['parrot';'Hash']
-  vivify_90:
-    set $P296, $P295["quote_atom"]
-    unless_null $P296, vivify_91
-    new $P296, "Undef"
-  vivify_91:
-    defined $I297, $P296
-    unless $I297, for_undef_92
-    iter $P294, $P296
-    new $P333, 'ExceptionHandler'
-    set_addr $P333, loop332_handler
-    $P333."handle_types"(64, 66, 65)
-    push_eh $P333
-  loop332_test:
-    unless $P294, loop332_done
-    shift $P298, $P294
-  loop332_redo:
-    .const 'Sub' $P300 = "31_1274022880.65586" 
-    capture_lex $P300
-    $P300($P298)
-  loop332_next:
-    goto loop332_test
-  loop332_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P334, exception, 'type'
-    eq $P334, 64, loop332_next
-    eq $P334, 66, loop332_redo
-  loop332_done:
-    pop_eh 
-  for_undef_92:
-.annotate 'line', 142
-    find_lex $P336, "$lastlit"
-    set $S337, $P336
-    isgt $I338, $S337, ""
-    unless $I338, if_335_end
-    find_lex $P339, "@parts"
-    find_lex $P340, "$lastlit"
-    $P339."push"($P340)
-  if_335_end:
-.annotate 'line', 143
-    find_lex $P343, "@parts"
-    if $P343, if_342
-    new $P346, "String"
-    assign $P346, ""
-    set $P341, $P346
-    goto if_342_end
-  if_342:
-    find_lex $P344, "@parts"
-    $P345 = $P344."shift"()
-    set $P341, $P345
-  if_342_end:
-    store_lex "$past", $P341
-.annotate 'line', 144
-    new $P354, 'ExceptionHandler'
-    set_addr $P354, loop353_handler
-    $P354."handle_types"(64, 66, 65)
-    push_eh $P354
-  loop353_test:
-    find_lex $P347, "@parts"
-    unless $P347, loop353_done
-  loop353_redo:
-.annotate 'line', 145
-    get_hll_global $P348, ["PAST"], "Op"
-    find_lex $P349, "$past"
-    find_lex $P350, "@parts"
-    $P351 = $P350."shift"()
-    $P352 = $P348."new"($P349, $P351, "concat" :named("pirop"))
-    store_lex "$past", $P352
-  loop353_next:
-.annotate 'line', 144
-    goto loop353_test
-  loop353_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P355, exception, 'type'
-    eq $P355, 64, loop353_next
-    eq $P355, 66, loop353_redo
-  loop353_done:
-    pop_eh 
-.annotate 'line', 147
-    find_lex $P356, "$/"
-    find_lex $P357, "$past"
-    $P358 = $P356."!make"($P357)
-.annotate 'line', 125
-    .return ($P358)
-  control_286:
+    .lex "$/", param_243
+    find_lex $P244, "$/"
+    find_lex $P245, "$/"
+    $P246 = "string_to_int"($P245, 16)
+    $P247 = $P244."!make"($P246)
+    .return ($P247)
+  control_241:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P359, exception, "payload"
-    .return ($P359)
+    getattribute $P248, exception, "payload"
+    .return ($P248)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block299"  :anon :subid("31_1274022880.65586") :outer("30_1274022880.65586")
-    .param pmc param_302
-.annotate 'line', 129
-    new $P301, "Undef"
-    .lex "$ast", $P301
-    .lex "$_", param_302
-    find_lex $P303, "$_"
-    $P304 = $P303."ast"()
-    store_lex "$ast", $P304
-.annotate 'line', 130
-    get_hll_global $P307, ["PAST"], "Node"
-    find_lex $P308, "$ast"
-    $P309 = $P307."ACCEPTS"($P308)
-    isfalse $I310, $P309
-    if $I310, if_306
-.annotate 'line', 133
-    find_lex $P316, "$ast"
-    get_hll_global $P317, ["PAST"], "Val"
-    $P318 = $P316."isa"($P317)
-    if $P318, if_315
-.annotate 'line', 137
-    find_lex $P324, "$lastlit"
-    set $S325, $P324
-    isgt $I326, $S325, ""
-    unless $I326, if_323_end
-    find_lex $P327, "@parts"
-    find_lex $P328, "$lastlit"
-    $P327."push"($P328)
-  if_323_end:
-.annotate 'line', 138
-    find_lex $P329, "@parts"
-    find_lex $P330, "$ast"
-    $P329."push"($P330)
-.annotate 'line', 139
-    new $P331, "String"
-    assign $P331, ""
-    store_lex "$lastlit", $P331
-.annotate 'line', 136
-    set $P314, $P331
-.annotate 'line', 133
-    goto if_315_end
-  if_315:
-.annotate 'line', 134
-    find_lex $P319, "$lastlit"
-    find_lex $P320, "$ast"
-    $S321 = $P320."value"()
-    concat $P322, $P319, $S321
-    store_lex "$lastlit", $P322
-.annotate 'line', 133
-    set $P314, $P322
-  if_315_end:
-    set $P305, $P314
-.annotate 'line', 130
-    goto if_306_end
-  if_306:
-.annotate 'line', 131
-    find_lex $P311, "$lastlit"
-    find_lex $P312, "$ast"
-    concat $P313, $P311, $P312
-    store_lex "$lastlit", $P313
-.annotate 'line', 130
-    set $P305, $P313
-  if_306_end:
-.annotate 'line', 128
-    .return ($P305)
+.include "except_types.pasm"
+.sub "octint"  :subid("29_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_252
+.annotate 'line', 126
+    new $P251, 'ExceptionHandler'
+    set_addr $P251, control_250
+    $P251."handle_types"(.CONTROL_RETURN)
+    push_eh $P251
+    .lex "self", self
+    .lex "$/", param_252
+    find_lex $P253, "$/"
+    find_lex $P254, "$/"
+    $P255 = "string_to_int"($P254, 8)
+    $P256 = $P253."!make"($P255)
+    .return ($P256)
+  control_250:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P257, exception, "payload"
+    .return ($P257)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_atom"  :subid("32_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_363
-.annotate 'line', 150
-    new $P362, 'ExceptionHandler'
-    set_addr $P362, control_361
-    $P362."handle_types"(57)
-    push_eh $P362
+.include "except_types.pasm"
+.sub "binint"  :subid("30_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_261
+.annotate 'line', 127
+    new $P260, 'ExceptionHandler'
+    set_addr $P260, control_259
+    $P260."handle_types"(.CONTROL_RETURN)
+    push_eh $P260
     .lex "self", self
-    .lex "$/", param_363
-.annotate 'line', 151
-    find_lex $P364, "$/"
-    find_lex $P367, "$/"
-    unless_null $P367, vivify_93
-    $P367 = root_new ['parrot';'Hash']
-  vivify_93:
-    set $P368, $P367["quote_escape"]
-    unless_null $P368, vivify_94
-    new $P368, "Undef"
-  vivify_94:
-    if $P368, if_366
-    find_lex $P372, "$/"
-    set $S373, $P372
-    new $P365, 'String'
-    set $P365, $S373
-    goto if_366_end
-  if_366:
-    find_lex $P369, "$/"
-    unless_null $P369, vivify_95
-    $P369 = root_new ['parrot';'Hash']
-  vivify_95:
-    set $P370, $P369["quote_escape"]
-    unless_null $P370, vivify_96
-    new $P370, "Undef"
-  vivify_96:
-    $P371 = $P370."ast"()
-    set $P365, $P371
-  if_366_end:
-    $P374 = $P364."!make"($P365)
-.annotate 'line', 150
-    .return ($P374)
-  control_361:
+    .lex "$/", param_261
+    find_lex $P262, "$/"
+    find_lex $P263, "$/"
+    $P264 = "string_to_int"($P263, 2)
+    $P265 = $P262."!make"($P264)
+    .return ($P265)
+  control_259:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P375, exception, "payload"
-    .return ($P375)
+    getattribute $P266, exception, "payload"
+    .return ($P266)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<backslash>"  :subid("33_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_379
-.annotate 'line', 154
-    new $P378, 'ExceptionHandler'
-    set_addr $P378, control_377
-    $P378."handle_types"(57)
-    push_eh $P378
+.include "except_types.pasm"
+.sub "quote_EXPR"  :subid("31_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_270
+.annotate 'line', 129
+    .const 'Sub' $P286 = "32_1275811473.30481" 
+    capture_lex $P286
+    new $P269, 'ExceptionHandler'
+    set_addr $P269, control_268
+    $P269."handle_types"(.CONTROL_RETURN)
+    push_eh $P269
     .lex "self", self
-    .lex "$/", param_379
-    find_lex $P380, "$/"
-    $P381 = $P380."!make"("\\")
-    .return ($P381)
-  control_377:
+    .lex "$/", param_270
+.annotate 'line', 130
+    new $P271, "Undef"
+    .lex "$past", $P271
+    find_lex $P272, "$/"
+    unless_null $P272, vivify_95
+    $P272 = root_new ['parrot';'Hash']
+  vivify_95:
+    set $P273, $P272["quote_delimited"]
+    unless_null $P273, vivify_96
+    new $P273, "Undef"
+  vivify_96:
+    $P274 = $P273."ast"()
+    store_lex "$past", $P274
+.annotate 'line', 131
+    find_lex $P276, "$/"
+    $P277 = $P276."CURSOR"()
+    $P278 = $P277."quotemod_check"("w")
+    unless $P278, if_275_end
+.annotate 'line', 132
+    get_hll_global $P280, ["PAST"], "Node"
+    find_lex $P281, "$past"
+    $P282 = $P280."ACCEPTS"($P281)
+    if $P282, if_279
+.annotate 'line', 135
+    .const 'Sub' $P286 = "32_1275811473.30481" 
+    capture_lex $P286
+    $P286()
+    goto if_279_end
+  if_279:
+.annotate 'line', 133
+    find_lex $P283, "$/"
+    $P284 = $P283."CURSOR"()
+    $P284."panic"("Can't form :w list from non-constant strings (yet)")
+  if_279_end:
+  if_275_end:
+.annotate 'line', 146
+    get_hll_global $P318, ["PAST"], "Node"
+    find_lex $P319, "$past"
+    $P320 = $P318."ACCEPTS"($P319)
+    isfalse $I321, $P320
+    unless $I321, if_317_end
+.annotate 'line', 147
+    get_hll_global $P322, ["PAST"], "Val"
+    find_lex $P323, "$past"
+    set $S324, $P323
+    $P325 = $P322."new"($S324 :named("value"))
+    store_lex "$past", $P325
+  if_317_end:
+.annotate 'line', 149
+    find_lex $P326, "$/"
+    find_lex $P327, "$past"
+    $P328 = $P326."!make"($P327)
+.annotate 'line', 129
+    .return ($P328)
+  control_268:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P382, exception, "payload"
-    .return ($P382)
+    getattribute $P329, exception, "payload"
+    .return ($P329)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<stopper>"  :subid("34_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_386
-.annotate 'line', 155
-    new $P385, 'ExceptionHandler'
-    set_addr $P385, control_384
-    $P385."handle_types"(57)
-    push_eh $P385
-    .lex "self", self
-    .lex "$/", param_386
-    find_lex $P387, "$/"
-    find_lex $P388, "$/"
-    unless_null $P388, vivify_97
-    $P388 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "_block285"  :anon :subid("32_1275811473.30481") :outer("31_1275811473.30481")
+.annotate 'line', 135
+    .const 'Sub' $P305 = "33_1275811473.30481" 
+    capture_lex $P305
+.annotate 'line', 136
+    $P287 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@words", $P287
+    get_hll_global $P288, ["HLL";"Grammar"], "split_words"
+    find_lex $P289, "$/"
+    find_lex $P290, "$past"
+    $P291 = $P288($P289, $P290)
+    store_lex "@words", $P291
+.annotate 'line', 137
+    find_lex $P294, "@words"
+    set $N295, $P294
+    isgt $I296, $N295, 1.0
+    if $I296, if_293
+.annotate 'line', 142
+    find_lex $P313, "@words"
+    unless_null $P313, vivify_97
+    $P313 = root_new ['parrot';'ResizablePMCArray']
   vivify_97:
-    set $P389, $P388["stopper"]
-    unless_null $P389, vivify_98
-    new $P389, "Undef"
+    set $P314, $P313[0]
+    unless_null $P314, vivify_98
+    new $P314, "Undef"
   vivify_98:
-    set $S390, $P389
-    $P391 = $P387."!make"($S390)
-    .return ($P391)
-  control_384:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P392, exception, "payload"
-    .return ($P392)
+    set $S315, $P314
+    new $P316, 'String'
+    set $P316, $S315
+    store_lex "$past", $P316
+.annotate 'line', 141
+    set $P292, $P316
+.annotate 'line', 137
+    goto if_293_end
+  if_293:
+.annotate 'line', 138
+    get_hll_global $P297, ["PAST"], "Op"
+    find_lex $P298, "$/"
+    $P299 = $P297."new"("list" :named("pasttype"), $P298 :named("node"))
+    store_lex "$past", $P299
+.annotate 'line', 139
+    find_lex $P301, "@words"
+    defined $I302, $P301
+    unless $I302, for_undef_99
+    iter $P300, $P301
+    new $P311, 'ExceptionHandler'
+    set_addr $P311, loop310_handler
+    $P311."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P311
+  loop310_test:
+    unless $P300, loop310_done
+    shift $P303, $P300
+  loop310_redo:
+    .const 'Sub' $P305 = "33_1275811473.30481" 
+    capture_lex $P305
+    $P305($P303)
+  loop310_next:
+    goto loop310_test
+  loop310_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P312, exception, 'type'
+    eq $P312, .CONTROL_LOOP_NEXT, loop310_next
+    eq $P312, .CONTROL_LOOP_REDO, loop310_redo
+  loop310_done:
+    pop_eh 
+  for_undef_99:
+.annotate 'line', 137
+    set $P292, $P300
+  if_293_end:
+.annotate 'line', 135
+    .return ($P292)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<bs>"  :subid("35_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_396
-.annotate 'line', 157
-    new $P395, 'ExceptionHandler'
-    set_addr $P395, control_394
-    $P395."handle_types"(57)
-    push_eh $P395
-    .lex "self", self
-    .lex "$/", param_396
-    find_lex $P397, "$/"
-    $P398 = $P397."!make"("\b")
-    .return ($P398)
-  control_394:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P399, exception, "payload"
-    .return ($P399)
+.sub "_block304"  :anon :subid("33_1275811473.30481") :outer("32_1275811473.30481")
+    .param pmc param_306
+.annotate 'line', 139
+    .lex "$_", param_306
+    find_lex $P307, "$past"
+    find_lex $P308, "$_"
+    $P309 = $P307."push"($P308)
+    .return ($P309)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<nl>"  :subid("36_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_403
-.annotate 'line', 158
-    new $P402, 'ExceptionHandler'
-    set_addr $P402, control_401
-    $P402."handle_types"(57)
-    push_eh $P402
+.include "except_types.pasm"
+.sub "quote_delimited"  :subid("34_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_333
+.annotate 'line', 152
+    .const 'Sub' $P345 = "35_1275811473.30481" 
+    capture_lex $P345
+    new $P332, 'ExceptionHandler'
+    set_addr $P332, control_331
+    $P332."handle_types"(.CONTROL_RETURN)
+    push_eh $P332
     .lex "self", self
-    .lex "$/", param_403
-    find_lex $P404, "$/"
-    $P405 = $P404."!make"("\n")
-    .return ($P405)
-  control_401:
+    .lex "$/", param_333
+.annotate 'line', 153
+    $P334 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@parts", $P334
+.annotate 'line', 154
+    new $P335, "Undef"
+    .lex "$lastlit", $P335
+.annotate 'line', 170
+    new $P336, "Undef"
+    .lex "$past", $P336
+.annotate 'line', 152
+    find_lex $P337, "@parts"
+.annotate 'line', 154
+    new $P338, "String"
+    assign $P338, ""
+    store_lex "$lastlit", $P338
+.annotate 'line', 155
+    find_lex $P340, "$/"
+    unless_null $P340, vivify_100
+    $P340 = root_new ['parrot';'Hash']
+  vivify_100:
+    set $P341, $P340["quote_atom"]
+    unless_null $P341, vivify_101
+    new $P341, "Undef"
+  vivify_101:
+    defined $I342, $P341
+    unless $I342, for_undef_102
+    iter $P339, $P341
+    new $P378, 'ExceptionHandler'
+    set_addr $P378, loop377_handler
+    $P378."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P378
+  loop377_test:
+    unless $P339, loop377_done
+    shift $P343, $P339
+  loop377_redo:
+    .const 'Sub' $P345 = "35_1275811473.30481" 
+    capture_lex $P345
+    $P345($P343)
+  loop377_next:
+    goto loop377_test
+  loop377_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P379, exception, 'type'
+    eq $P379, .CONTROL_LOOP_NEXT, loop377_next
+    eq $P379, .CONTROL_LOOP_REDO, loop377_redo
+  loop377_done:
+    pop_eh 
+  for_undef_102:
+.annotate 'line', 169
+    find_lex $P381, "$lastlit"
+    set $S382, $P381
+    isgt $I383, $S382, ""
+    unless $I383, if_380_end
+    find_lex $P384, "@parts"
+    find_lex $P385, "$lastlit"
+    $P384."push"($P385)
+  if_380_end:
+.annotate 'line', 170
+    find_lex $P388, "@parts"
+    if $P388, if_387
+    new $P391, "String"
+    assign $P391, ""
+    set $P386, $P391
+    goto if_387_end
+  if_387:
+    find_lex $P389, "@parts"
+    $P390 = $P389."shift"()
+    set $P386, $P390
+  if_387_end:
+    store_lex "$past", $P386
+.annotate 'line', 171
+    new $P399, 'ExceptionHandler'
+    set_addr $P399, loop398_handler
+    $P399."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P399
+  loop398_test:
+    find_lex $P392, "@parts"
+    unless $P392, loop398_done
+  loop398_redo:
+.annotate 'line', 172
+    get_hll_global $P393, ["PAST"], "Op"
+    find_lex $P394, "$past"
+    find_lex $P395, "@parts"
+    $P396 = $P395."shift"()
+    $P397 = $P393."new"($P394, $P396, "concat" :named("pirop"))
+    store_lex "$past", $P397
+  loop398_next:
+.annotate 'line', 171
+    goto loop398_test
+  loop398_handler:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P406, exception, "payload"
-    .return ($P406)
+    getattribute $P400, exception, 'type'
+    eq $P400, .CONTROL_LOOP_NEXT, loop398_next
+    eq $P400, .CONTROL_LOOP_REDO, loop398_redo
+  loop398_done:
+    pop_eh 
+.annotate 'line', 174
+    find_lex $P401, "$/"
+    find_lex $P402, "$past"
+    $P403 = $P401."!make"($P402)
+.annotate 'line', 152
+    .return ($P403)
+  control_331:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P404, exception, "payload"
+    .return ($P404)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<cr>"  :subid("37_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_410
-.annotate 'line', 159
-    new $P409, 'ExceptionHandler'
-    set_addr $P409, control_408
-    $P409."handle_types"(57)
-    push_eh $P409
-    .lex "self", self
-    .lex "$/", param_410
-    find_lex $P411, "$/"
-    $P412 = $P411."!make"("\r")
-    .return ($P412)
-  control_408:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P413, exception, "payload"
-    .return ($P413)
+.sub "_block344"  :anon :subid("35_1275811473.30481") :outer("34_1275811473.30481")
+    .param pmc param_347
+.annotate 'line', 156
+    new $P346, "Undef"
+    .lex "$ast", $P346
+    .lex "$_", param_347
+    find_lex $P348, "$_"
+    $P349 = $P348."ast"()
+    store_lex "$ast", $P349
+.annotate 'line', 157
+    get_hll_global $P352, ["PAST"], "Node"
+    find_lex $P353, "$ast"
+    $P354 = $P352."ACCEPTS"($P353)
+    isfalse $I355, $P354
+    if $I355, if_351
+.annotate 'line', 160
+    find_lex $P361, "$ast"
+    get_hll_global $P362, ["PAST"], "Val"
+    $P363 = $P361."isa"($P362)
+    if $P363, if_360
+.annotate 'line', 164
+    find_lex $P369, "$lastlit"
+    set $S370, $P369
+    isgt $I371, $S370, ""
+    unless $I371, if_368_end
+    find_lex $P372, "@parts"
+    find_lex $P373, "$lastlit"
+    $P372."push"($P373)
+  if_368_end:
+.annotate 'line', 165
+    find_lex $P374, "@parts"
+    find_lex $P375, "$ast"
+    $P374."push"($P375)
+.annotate 'line', 166
+    new $P376, "String"
+    assign $P376, ""
+    store_lex "$lastlit", $P376
+.annotate 'line', 163
+    set $P359, $P376
+.annotate 'line', 160
+    goto if_360_end
+  if_360:
+.annotate 'line', 161
+    find_lex $P364, "$lastlit"
+    find_lex $P365, "$ast"
+    $S366 = $P365."value"()
+    concat $P367, $P364, $S366
+    store_lex "$lastlit", $P367
+.annotate 'line', 160
+    set $P359, $P367
+  if_360_end:
+    set $P350, $P359
+.annotate 'line', 157
+    goto if_351_end
+  if_351:
+.annotate 'line', 158
+    find_lex $P356, "$lastlit"
+    find_lex $P357, "$ast"
+    concat $P358, $P356, $P357
+    store_lex "$lastlit", $P358
+.annotate 'line', 157
+    set $P350, $P358
+  if_351_end:
+.annotate 'line', 155
+    .return ($P350)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<tab>"  :subid("38_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_417
-.annotate 'line', 160
-    new $P416, 'ExceptionHandler'
-    set_addr $P416, control_415
-    $P416."handle_types"(57)
-    push_eh $P416
-    .lex "self", self
-    .lex "$/", param_417
-    find_lex $P418, "$/"
-    $P419 = $P418."!make"("\t")
+.include "except_types.pasm"
+.sub "quote_atom"  :subid("36_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_408
+.annotate 'line', 177
+    new $P407, 'ExceptionHandler'
+    set_addr $P407, control_406
+    $P407."handle_types"(.CONTROL_RETURN)
+    push_eh $P407
+    .lex "self", self
+    .lex "$/", param_408
+.annotate 'line', 178
+    find_lex $P409, "$/"
+    find_lex $P412, "$/"
+    unless_null $P412, vivify_103
+    $P412 = root_new ['parrot';'Hash']
+  vivify_103:
+    set $P413, $P412["quote_escape"]
+    unless_null $P413, vivify_104
+    new $P413, "Undef"
+  vivify_104:
+    if $P413, if_411
+    find_lex $P417, "$/"
+    set $S418, $P417
+    new $P410, 'String'
+    set $P410, $S418
+    goto if_411_end
+  if_411:
+    find_lex $P414, "$/"
+    unless_null $P414, vivify_105
+    $P414 = root_new ['parrot';'Hash']
+  vivify_105:
+    set $P415, $P414["quote_escape"]
+    unless_null $P415, vivify_106
+    new $P415, "Undef"
+  vivify_106:
+    $P416 = $P415."ast"()
+    set $P410, $P416
+  if_411_end:
+    $P419 = $P409."!make"($P410)
+.annotate 'line', 177
     .return ($P419)
-  control_415:
+  control_406:
     .local pmc exception 
     .get_results (exception) 
     getattribute $P420, exception, "payload"
@@ -5999,17 +6226,18 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<ff>"  :subid("39_1274022880.65586") :method :outer("11_1274022880.65586")
+.include "except_types.pasm"
+.sub "quote_escape:sym<backslash>"  :subid("37_1275811473.30481") :method :outer("11_1275811473.30481")
     .param pmc param_424
-.annotate 'line', 161
+.annotate 'line', 181
     new $P423, 'ExceptionHandler'
     set_addr $P423, control_422
-    $P423."handle_types"(57)
+    $P423."handle_types"(.CONTROL_RETURN)
     push_eh $P423
     .lex "self", self
     .lex "$/", param_424
     find_lex $P425, "$/"
-    $P426 = $P425."!make"("\f")
+    $P426 = $P425."!make"("\\")
     .return ($P426)
   control_422:
     .local pmc exception 
@@ -6020,536 +6248,723 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<hex>"  :subid("40_1274022880.65586") :method :outer("11_1274022880.65586")
+.include "except_types.pasm"
+.sub "quote_escape:sym<stopper>"  :subid("38_1275811473.30481") :method :outer("11_1275811473.30481")
     .param pmc param_431
-.annotate 'line', 163
+.annotate 'line', 182
     new $P430, 'ExceptionHandler'
     set_addr $P430, control_429
-    $P430."handle_types"(57)
+    $P430."handle_types"(.CONTROL_RETURN)
     push_eh $P430
     .lex "self", self
     .lex "$/", param_431
-.annotate 'line', 164
     find_lex $P432, "$/"
-    find_lex $P435, "$/"
-    unless_null $P435, vivify_99
-    $P435 = root_new ['parrot';'Hash']
-  vivify_99:
-    set $P436, $P435["hexint"]
-    unless_null $P436, vivify_100
-    new $P436, "Undef"
-  vivify_100:
-    if $P436, if_434
-    find_lex $P439, "$/"
-    unless_null $P439, vivify_101
-    $P439 = root_new ['parrot';'Hash']
-  vivify_101:
-    set $P440, $P439["hexints"]
-    unless_null $P440, vivify_102
-    $P440 = root_new ['parrot';'Hash']
-  vivify_102:
-    set $P441, $P440["hexint"]
-    unless_null $P441, vivify_103
-    new $P441, "Undef"
-  vivify_103:
-    set $P433, $P441
-    goto if_434_end
-  if_434:
-    find_lex $P437, "$/"
-    unless_null $P437, vivify_104
-    $P437 = root_new ['parrot';'Hash']
-  vivify_104:
-    set $P438, $P437["hexint"]
-    unless_null $P438, vivify_105
-    new $P438, "Undef"
-  vivify_105:
-    set $P433, $P438
-  if_434_end:
-    $P442 = "ints_to_string"($P433)
-    $P443 = $P432."!make"($P442)
-.annotate 'line', 163
-    .return ($P443)
+    find_lex $P433, "$/"
+    unless_null $P433, vivify_107
+    $P433 = root_new ['parrot';'Hash']
+  vivify_107:
+    set $P434, $P433["stopper"]
+    unless_null $P434, vivify_108
+    new $P434, "Undef"
+  vivify_108:
+    set $S435, $P434
+    $P436 = $P432."!make"($S435)
+    .return ($P436)
   control_429:
     .local pmc exception 
     .get_results (exception) 
+    getattribute $P437, exception, "payload"
+    .return ($P437)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.include "except_types.pasm"
+.sub "quote_escape:sym<bs>"  :subid("39_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_441
+.annotate 'line', 184
+    new $P440, 'ExceptionHandler'
+    set_addr $P440, control_439
+    $P440."handle_types"(.CONTROL_RETURN)
+    push_eh $P440
+    .lex "self", self
+    .lex "$/", param_441
+    find_lex $P442, "$/"
+    $P443 = $P442."!make"("\b")
+    .return ($P443)
+  control_439:
+    .local pmc exception 
+    .get_results (exception) 
     getattribute $P444, exception, "payload"
     .return ($P444)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<oct>"  :subid("41_1274022880.65586") :method :outer("11_1274022880.65586")
+.include "except_types.pasm"
+.sub "quote_escape:sym<nl>"  :subid("40_1275811473.30481") :method :outer("11_1275811473.30481")
     .param pmc param_448
-.annotate 'line', 167
+.annotate 'line', 185
     new $P447, 'ExceptionHandler'
     set_addr $P447, control_446
-    $P447."handle_types"(57)
+    $P447."handle_types"(.CONTROL_RETURN)
     push_eh $P447
     .lex "self", self
     .lex "$/", param_448
-.annotate 'line', 168
     find_lex $P449, "$/"
-    find_lex $P452, "$/"
-    unless_null $P452, vivify_106
-    $P452 = root_new ['parrot';'Hash']
-  vivify_106:
-    set $P453, $P452["octint"]
-    unless_null $P453, vivify_107
-    new $P453, "Undef"
-  vivify_107:
-    if $P453, if_451
-    find_lex $P456, "$/"
-    unless_null $P456, vivify_108
-    $P456 = root_new ['parrot';'Hash']
-  vivify_108:
-    set $P457, $P456["octints"]
-    unless_null $P457, vivify_109
-    $P457 = root_new ['parrot';'Hash']
-  vivify_109:
-    set $P458, $P457["octint"]
-    unless_null $P458, vivify_110
-    new $P458, "Undef"
-  vivify_110:
-    set $P450, $P458
-    goto if_451_end
-  if_451:
-    find_lex $P454, "$/"
-    unless_null $P454, vivify_111
-    $P454 = root_new ['parrot';'Hash']
-  vivify_111:
-    set $P455, $P454["octint"]
-    unless_null $P455, vivify_112
-    new $P455, "Undef"
-  vivify_112:
-    set $P450, $P455
-  if_451_end:
-    $P459 = "ints_to_string"($P450)
-    $P460 = $P449."!make"($P459)
-.annotate 'line', 167
-    .return ($P460)
+    $P450 = $P449."!make"("\n")
+    .return ($P450)
   control_446:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P461, exception, "payload"
-    .return ($P461)
+    getattribute $P451, exception, "payload"
+    .return ($P451)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.include "except_types.pasm"
+.sub "quote_escape:sym<cr>"  :subid("41_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_455
+.annotate 'line', 186
+    new $P454, 'ExceptionHandler'
+    set_addr $P454, control_453
+    $P454."handle_types"(.CONTROL_RETURN)
+    push_eh $P454
+    .lex "self", self
+    .lex "$/", param_455
+    find_lex $P456, "$/"
+    $P457 = $P456."!make"("\r")
+    .return ($P457)
+  control_453:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P458, exception, "payload"
+    .return ($P458)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.include "except_types.pasm"
+.sub "quote_escape:sym<tab>"  :subid("42_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_462
+.annotate 'line', 187
+    new $P461, 'ExceptionHandler'
+    set_addr $P461, control_460
+    $P461."handle_types"(.CONTROL_RETURN)
+    push_eh $P461
+    .lex "self", self
+    .lex "$/", param_462
+    find_lex $P463, "$/"
+    $P464 = $P463."!make"("\t")
+    .return ($P464)
+  control_460:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P465, exception, "payload"
+    .return ($P465)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<chr>"  :subid("42_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_465
-.annotate 'line', 171
-    new $P464, 'ExceptionHandler'
-    set_addr $P464, control_463
-    $P464."handle_types"(57)
-    push_eh $P464
+.include "except_types.pasm"
+.sub "quote_escape:sym<ff>"  :subid("43_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_469
+.annotate 'line', 188
+    new $P468, 'ExceptionHandler'
+    set_addr $P468, control_467
+    $P468."handle_types"(.CONTROL_RETURN)
+    push_eh $P468
     .lex "self", self
-    .lex "$/", param_465
-.annotate 'line', 172
-    find_lex $P466, "$/"
-    find_lex $P467, "$/"
-    unless_null $P467, vivify_113
-    $P467 = root_new ['parrot';'Hash']
-  vivify_113:
-    set $P468, $P467["charspec"]
-    unless_null $P468, vivify_114
-    new $P468, "Undef"
-  vivify_114:
-    $P469 = $P468."ast"()
-    $P470 = $P466."!make"($P469)
-.annotate 'line', 171
-    .return ($P470)
-  control_463:
+    .lex "$/", param_469
+    find_lex $P470, "$/"
+    $P471 = $P470."!make"("\f")
+    .return ($P471)
+  control_467:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P471, exception, "payload"
-    .return ($P471)
+    getattribute $P472, exception, "payload"
+    .return ($P472)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<0>"  :subid("43_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_475
-.annotate 'line', 175
-    new $P474, 'ExceptionHandler'
-    set_addr $P474, control_473
-    $P474."handle_types"(57)
-    push_eh $P474
-    .lex "self", self
-    .lex "$/", param_475
-.annotate 'line', 176
-    find_lex $P476, "$/"
-    $P477 = $P476."!make"(unicode:"\x{0}")
-.annotate 'line', 175
-    .return ($P477)
-  control_473:
+.include "except_types.pasm"
+.sub "quote_escape:sym<esc>"  :subid("44_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_476
+.annotate 'line', 189
+    new $P475, 'ExceptionHandler'
+    set_addr $P475, control_474
+    $P475."handle_types"(.CONTROL_RETURN)
+    push_eh $P475
+    .lex "self", self
+    .lex "$/", param_476
+    find_lex $P477, "$/"
+    $P478 = $P477."!make"("\e")
+    .return ($P478)
+  control_474:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P478, exception, "payload"
-    .return ($P478)
+    getattribute $P479, exception, "payload"
+    .return ($P479)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<misc>"  :subid("44_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_482
-.annotate 'line', 179
-    new $P481, 'ExceptionHandler'
-    set_addr $P481, control_480
-    $P481."handle_types"(57)
-    push_eh $P481
-    .lex "self", self
-    .lex "$/", param_482
-.annotate 'line', 180
-    find_lex $P483, "$/"
-    find_lex $P486, "$/"
-    unless_null $P486, vivify_115
-    $P486 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "quote_escape:sym<hex>"  :subid("45_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_483
+.annotate 'line', 191
+    new $P482, 'ExceptionHandler'
+    set_addr $P482, control_481
+    $P482."handle_types"(.CONTROL_RETURN)
+    push_eh $P482
+    .lex "self", self
+    .lex "$/", param_483
+.annotate 'line', 192
+    find_lex $P484, "$/"
+    find_lex $P487, "$/"
+    unless_null $P487, vivify_109
+    $P487 = root_new ['parrot';'Hash']
+  vivify_109:
+    set $P488, $P487["hexint"]
+    unless_null $P488, vivify_110
+    new $P488, "Undef"
+  vivify_110:
+    if $P488, if_486
+    find_lex $P491, "$/"
+    unless_null $P491, vivify_111
+    $P491 = root_new ['parrot';'Hash']
+  vivify_111:
+    set $P492, $P491["hexints"]
+    unless_null $P492, vivify_112
+    $P492 = root_new ['parrot';'Hash']
+  vivify_112:
+    set $P493, $P492["hexint"]
+    unless_null $P493, vivify_113
+    new $P493, "Undef"
+  vivify_113:
+    set $P485, $P493
+    goto if_486_end
+  if_486:
+    find_lex $P489, "$/"
+    unless_null $P489, vivify_114
+    $P489 = root_new ['parrot';'Hash']
+  vivify_114:
+    set $P490, $P489["hexint"]
+    unless_null $P490, vivify_115
+    new $P490, "Undef"
   vivify_115:
-    set $P487, $P486["textq"]
-    unless_null $P487, vivify_116
-    new $P487, "Undef"
+    set $P485, $P490
+  if_486_end:
+    $P494 = "ints_to_string"($P485)
+    $P495 = $P484."!make"($P494)
+.annotate 'line', 191
+    .return ($P495)
+  control_481:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P496, exception, "payload"
+    .return ($P496)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.include "except_types.pasm"
+.sub "quote_escape:sym<oct>"  :subid("46_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_500
+.annotate 'line', 195
+    new $P499, 'ExceptionHandler'
+    set_addr $P499, control_498
+    $P499."handle_types"(.CONTROL_RETURN)
+    push_eh $P499
+    .lex "self", self
+    .lex "$/", param_500
+.annotate 'line', 196
+    find_lex $P501, "$/"
+    find_lex $P504, "$/"
+    unless_null $P504, vivify_116
+    $P504 = root_new ['parrot';'Hash']
   vivify_116:
-    if $P487, if_485
-    find_lex $P493, "$/"
-    unless_null $P493, vivify_117
-    $P493 = root_new ['parrot';'Hash']
+    set $P505, $P504["octint"]
+    unless_null $P505, vivify_117
+    new $P505, "Undef"
   vivify_117:
-    set $P494, $P493["textqq"]
-    unless_null $P494, vivify_118
-    new $P494, "Undef"
+    if $P505, if_503
+    find_lex $P508, "$/"
+    unless_null $P508, vivify_118
+    $P508 = root_new ['parrot';'Hash']
   vivify_118:
-    $P495 = $P494."Str"()
-    set $P484, $P495
-    goto if_485_end
-  if_485:
-    new $P488, "String"
-    assign $P488, "\\"
-    find_lex $P489, "$/"
-    unless_null $P489, vivify_119
-    $P489 = root_new ['parrot';'Hash']
+    set $P509, $P508["octints"]
+    unless_null $P509, vivify_119
+    $P509 = root_new ['parrot';'Hash']
   vivify_119:
-    set $P490, $P489["textq"]
-    unless_null $P490, vivify_120
-    new $P490, "Undef"
+    set $P510, $P509["octint"]
+    unless_null $P510, vivify_120
+    new $P510, "Undef"
   vivify_120:
-    $S491 = $P490."Str"()
-    concat $P492, $P488, $S491
-    set $P484, $P492
-  if_485_end:
-    $P496 = $P483."!make"($P484)
-.annotate 'line', 179
-    .return ($P496)
-  control_480:
+    set $P502, $P510
+    goto if_503_end
+  if_503:
+    find_lex $P506, "$/"
+    unless_null $P506, vivify_121
+    $P506 = root_new ['parrot';'Hash']
+  vivify_121:
+    set $P507, $P506["octint"]
+    unless_null $P507, vivify_122
+    new $P507, "Undef"
+  vivify_122:
+    set $P502, $P507
+  if_503_end:
+    $P511 = "ints_to_string"($P502)
+    $P512 = $P501."!make"($P511)
+.annotate 'line', 195
+    .return ($P512)
+  control_498:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P497, exception, "payload"
-    .return ($P497)
+    getattribute $P513, exception, "payload"
+    .return ($P513)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charname"  :subid("45_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_501
-.annotate 'line', 183
-    new $P500, 'ExceptionHandler'
-    set_addr $P500, control_499
-    $P500."handle_types"(57)
-    push_eh $P500
+.include "except_types.pasm"
+.sub "quote_escape:sym<chr>"  :subid("47_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_517
+.annotate 'line', 199
+    new $P516, 'ExceptionHandler'
+    set_addr $P516, control_515
+    $P516."handle_types"(.CONTROL_RETURN)
+    push_eh $P516
     .lex "self", self
-    .lex "$/", param_501
-.annotate 'line', 184
-    new $P502, "Undef"
-    .lex "$codepoint", $P502
-.annotate 'line', 185
-    find_lex $P505, "$/"
-    unless_null $P505, vivify_121
-    $P505 = root_new ['parrot';'Hash']
-  vivify_121:
-    set $P506, $P505["integer"]
-    unless_null $P506, vivify_122
-    new $P506, "Undef"
-  vivify_122:
-    if $P506, if_504
-.annotate 'line', 186
-    find_lex $P510, "$/"
-    set $S511, $P510
-    find_codepoint $I512, $S511
-    new $P503, 'Integer'
-    set $P503, $I512
-.annotate 'line', 185
-    goto if_504_end
-  if_504:
-    find_lex $P507, "$/"
-    unless_null $P507, vivify_123
-    $P507 = root_new ['parrot';'Hash']
+    .lex "$/", param_517
+.annotate 'line', 200
+    find_lex $P518, "$/"
+    find_lex $P519, "$/"
+    unless_null $P519, vivify_123
+    $P519 = root_new ['parrot';'Hash']
   vivify_123:
-    set $P508, $P507["integer"]
-    unless_null $P508, vivify_124
-    new $P508, "Undef"
+    set $P520, $P519["charspec"]
+    unless_null $P520, vivify_124
+    new $P520, "Undef"
   vivify_124:
-    $P509 = $P508."ast"()
-    set $P503, $P509
-  if_504_end:
-    store_lex "$codepoint", $P503
-.annotate 'line', 187
-    find_lex $P514, "$codepoint"
-    set $N515, $P514
-    islt $I516, $N515, 0.0
-    unless $I516, if_513_end
-    find_lex $P517, "$/"
-    $P518 = $P517."CURSOR"()
-    new $P519, 'String'
-    set $P519, "Unrecognized character name "
-    find_lex $P520, "$/"
-    concat $P521, $P519, $P520
-    $P518."panic"($P521)
-  if_513_end:
-.annotate 'line', 188
-    find_lex $P522, "$/"
-    find_lex $P523, "$codepoint"
-    set $I524, $P523
-    chr $S525, $I524
-    $P526 = $P522."!make"($S525)
-.annotate 'line', 183
-    .return ($P526)
-  control_499:
+    $P521 = $P520."ast"()
+    $P522 = $P518."!make"($P521)
+.annotate 'line', 199
+    .return ($P522)
+  control_515:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P527, exception, "payload"
-    .return ($P527)
+    getattribute $P523, exception, "payload"
+    .return ($P523)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charnames"  :subid("46_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_531
-.annotate 'line', 191
-    .const 'Sub' $P540 = "47_1274022880.65586" 
-    capture_lex $P540
-    new $P530, 'ExceptionHandler'
-    set_addr $P530, control_529
-    $P530."handle_types"(57)
-    push_eh $P530
+.include "except_types.pasm"
+.sub "quote_escape:sym<0>"  :subid("48_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_527
+.annotate 'line', 203
+    new $P526, 'ExceptionHandler'
+    set_addr $P526, control_525
+    $P526."handle_types"(.CONTROL_RETURN)
+    push_eh $P526
     .lex "self", self
-    .lex "$/", param_531
-.annotate 'line', 192
-    new $P532, "Undef"
-    .lex "$str", $P532
-    new $P533, "String"
-    assign $P533, ""
-    store_lex "$str", $P533
-.annotate 'line', 193
+    .lex "$/", param_527
+.annotate 'line', 204
+    find_lex $P528, "$/"
+    $P529 = $P528."!make"(unicode:"\x{0}")
+.annotate 'line', 203
+    .return ($P529)
+  control_525:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P530, exception, "payload"
+    .return ($P530)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.include "except_types.pasm"
+.sub "quote_escape:sym<misc>"  :subid("49_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_534
+.annotate 'line', 207
+    new $P533, 'ExceptionHandler'
+    set_addr $P533, control_532
+    $P533."handle_types"(.CONTROL_RETURN)
+    push_eh $P533
+    .lex "self", self
+    .lex "$/", param_534
+.annotate 'line', 208
     find_lex $P535, "$/"
-    unless_null $P535, vivify_125
-    $P535 = root_new ['parrot';'Hash']
+    find_lex $P538, "$/"
+    unless_null $P538, vivify_125
+    $P538 = root_new ['parrot';'Hash']
   vivify_125:
-    set $P536, $P535["charname"]
-    unless_null $P536, vivify_126
-    new $P536, "Undef"
+    set $P539, $P538["textq"]
+    unless_null $P539, vivify_126
+    new $P539, "Undef"
   vivify_126:
-    defined $I537, $P536
-    unless $I537, for_undef_127
-    iter $P534, $P536
-    new $P547, 'ExceptionHandler'
-    set_addr $P547, loop546_handler
-    $P547."handle_types"(64, 66, 65)
-    push_eh $P547
-  loop546_test:
-    unless $P534, loop546_done
-    shift $P538, $P534
-  loop546_redo:
-    .const 'Sub' $P540 = "47_1274022880.65586" 
-    capture_lex $P540
-    $P540($P538)
-  loop546_next:
-    goto loop546_test
-  loop546_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P548, exception, 'type'
-    eq $P548, 64, loop546_next
-    eq $P548, 66, loop546_redo
-  loop546_done:
+    if $P539, if_537
+    find_lex $P545, "$/"
+    unless_null $P545, vivify_127
+    $P545 = root_new ['parrot';'Hash']
+  vivify_127:
+    set $P546, $P545["textqq"]
+    unless_null $P546, vivify_128
+    new $P546, "Undef"
+  vivify_128:
+    $P547 = $P546."Str"()
+    set $P536, $P547
+    goto if_537_end
+  if_537:
+    new $P540, "String"
+    assign $P540, "\\"
+    find_lex $P541, "$/"
+    unless_null $P541, vivify_129
+    $P541 = root_new ['parrot';'Hash']
+  vivify_129:
+    set $P542, $P541["textq"]
+    unless_null $P542, vivify_130
+    new $P542, "Undef"
+  vivify_130:
+    $S543 = $P542."Str"()
+    concat $P544, $P540, $S543
+    set $P536, $P544
+  if_537_end:
+    $P548 = $P535."!make"($P536)
+.annotate 'line', 207
+    .return ($P548)
+  control_532:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P549, exception, "payload"
+    .return ($P549)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.include "except_types.pasm"
+.sub "charname"  :subid("50_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_553
+.annotate 'line', 211
+    new $P552, 'ExceptionHandler'
+    set_addr $P552, control_551
+    $P552."handle_types"(.CONTROL_RETURN)
+    push_eh $P552
+    .lex "self", self
+    .lex "$/", param_553
+.annotate 'line', 212
+    new $P554, "Undef"
+    .lex "$codepoint", $P554
+.annotate 'line', 213
+    find_lex $P557, "$/"
+    unless_null $P557, vivify_131
+    $P557 = root_new ['parrot';'Hash']
+  vivify_131:
+    set $P558, $P557["integer"]
+    unless_null $P558, vivify_132
+    new $P558, "Undef"
+  vivify_132:
+    if $P558, if_556
+.annotate 'line', 214
+    find_lex $P562, "$/"
+    set $S563, $P562
+    find_codepoint $I564, $S563
+    new $P555, 'Integer'
+    set $P555, $I564
+.annotate 'line', 213
+    goto if_556_end
+  if_556:
+    find_lex $P559, "$/"
+    unless_null $P559, vivify_133
+    $P559 = root_new ['parrot';'Hash']
+  vivify_133:
+    set $P560, $P559["integer"]
+    unless_null $P560, vivify_134
+    new $P560, "Undef"
+  vivify_134:
+    $P561 = $P560."ast"()
+    set $P555, $P561
+  if_556_end:
+    store_lex "$codepoint", $P555
+.annotate 'line', 215
+    find_lex $P566, "$codepoint"
+    set $N567, $P566
+    islt $I568, $N567, 0.0
+    unless $I568, if_565_end
+    find_lex $P569, "$/"
+    $P570 = $P569."CURSOR"()
+    new $P571, 'String'
+    set $P571, "Unrecognized character name "
+    find_lex $P572, "$/"
+    concat $P573, $P571, $P572
+    $P570."panic"($P573)
+  if_565_end:
+.annotate 'line', 216
+    find_lex $P574, "$/"
+    find_lex $P575, "$codepoint"
+    set $I576, $P575
+    chr $S577, $I576
+    $P578 = $P574."!make"($S577)
+.annotate 'line', 211
+    .return ($P578)
+  control_551:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P579, exception, "payload"
+    .return ($P579)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.include "except_types.pasm"
+.sub "charnames"  :subid("51_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_583
+.annotate 'line', 219
+    .const 'Sub' $P592 = "52_1275811473.30481" 
+    capture_lex $P592
+    new $P582, 'ExceptionHandler'
+    set_addr $P582, control_581
+    $P582."handle_types"(.CONTROL_RETURN)
+    push_eh $P582
+    .lex "self", self
+    .lex "$/", param_583
+.annotate 'line', 220
+    new $P584, "Undef"
+    .lex "$str", $P584
+    new $P585, "String"
+    assign $P585, ""
+    store_lex "$str", $P585
+.annotate 'line', 221
+    find_lex $P587, "$/"
+    unless_null $P587, vivify_135
+    $P587 = root_new ['parrot';'Hash']
+  vivify_135:
+    set $P588, $P587["charname"]
+    unless_null $P588, vivify_136
+    new $P588, "Undef"
+  vivify_136:
+    defined $I589, $P588
+    unless $I589, for_undef_137
+    iter $P586, $P588
+    new $P599, 'ExceptionHandler'
+    set_addr $P599, loop598_handler
+    $P599."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P599
+  loop598_test:
+    unless $P586, loop598_done
+    shift $P590, $P586
+  loop598_redo:
+    .const 'Sub' $P592 = "52_1275811473.30481" 
+    capture_lex $P592
+    $P592($P590)
+  loop598_next:
+    goto loop598_test
+  loop598_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P600, exception, 'type'
+    eq $P600, .CONTROL_LOOP_NEXT, loop598_next
+    eq $P600, .CONTROL_LOOP_REDO, loop598_redo
+  loop598_done:
     pop_eh 
-  for_undef_127:
-.annotate 'line', 194
-    find_lex $P549, "$/"
-    find_lex $P550, "$str"
-    $P551 = $P549."!make"($P550)
-.annotate 'line', 191
-    .return ($P551)
-  control_529:
+  for_undef_137:
+.annotate 'line', 222
+    find_lex $P601, "$/"
+    find_lex $P602, "$str"
+    $P603 = $P601."!make"($P602)
+.annotate 'line', 219
+    .return ($P603)
+  control_581:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P552, exception, "payload"
-    .return ($P552)
+    getattribute $P604, exception, "payload"
+    .return ($P604)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block539"  :anon :subid("47_1274022880.65586") :outer("46_1274022880.65586")
-    .param pmc param_541
-.annotate 'line', 193
-    .lex "$_", param_541
-    find_lex $P542, "$str"
-    find_lex $P543, "$_"
-    $S544 = $P543."ast"()
-    concat $P545, $P542, $S544
-    store_lex "$str", $P545
-    .return ($P545)
+.sub "_block591"  :anon :subid("52_1275811473.30481") :outer("51_1275811473.30481")
+    .param pmc param_593
+.annotate 'line', 221
+    .lex "$_", param_593
+    find_lex $P594, "$str"
+    find_lex $P595, "$_"
+    $S596 = $P595."ast"()
+    concat $P597, $P594, $S596
+    store_lex "$str", $P597
+    .return ($P597)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charspec"  :subid("48_1274022880.65586") :method :outer("11_1274022880.65586")
-    .param pmc param_556
-.annotate 'line', 197
-    new $P555, 'ExceptionHandler'
-    set_addr $P555, control_554
-    $P555."handle_types"(57)
-    push_eh $P555
+.include "except_types.pasm"
+.sub "charspec"  :subid("53_1275811473.30481") :method :outer("11_1275811473.30481")
+    .param pmc param_608
+.annotate 'line', 225
+    new $P607, 'ExceptionHandler'
+    set_addr $P607, control_606
+    $P607."handle_types"(.CONTROL_RETURN)
+    push_eh $P607
     .lex "self", self
-    .lex "$/", param_556
-.annotate 'line', 198
-    find_lex $P557, "$/"
-    find_lex $P560, "$/"
-    unless_null $P560, vivify_128
-    $P560 = root_new ['parrot';'Hash']
-  vivify_128:
-    set $P561, $P560["charnames"]
-    unless_null $P561, vivify_129
-    new $P561, "Undef"
-  vivify_129:
-    if $P561, if_559
-    find_lex $P565, "$/"
-    $I566 = "string_to_int"($P565, 10)
-    chr $S567, $I566
-    new $P558, 'String'
-    set $P558, $S567
-    goto if_559_end
-  if_559:
-    find_lex $P562, "$/"
-    unless_null $P562, vivify_130
-    $P562 = root_new ['parrot';'Hash']
-  vivify_130:
-    set $P563, $P562["charnames"]
-    unless_null $P563, vivify_131
-    new $P563, "Undef"
-  vivify_131:
-    $P564 = $P563."ast"()
-    set $P558, $P564
-  if_559_end:
-    $P568 = $P557."!make"($P558)
-.annotate 'line', 197
-    .return ($P568)
-  control_554:
+    .lex "$/", param_608
+.annotate 'line', 226
+    find_lex $P609, "$/"
+    find_lex $P612, "$/"
+    unless_null $P612, vivify_138
+    $P612 = root_new ['parrot';'Hash']
+  vivify_138:
+    set $P613, $P612["charnames"]
+    unless_null $P613, vivify_139
+    new $P613, "Undef"
+  vivify_139:
+    if $P613, if_611
+    find_lex $P617, "$/"
+    $I618 = "string_to_int"($P617, 10)
+    chr $S619, $I618
+    new $P610, 'String'
+    set $P610, $S619
+    goto if_611_end
+  if_611:
+    find_lex $P614, "$/"
+    unless_null $P614, vivify_140
+    $P614 = root_new ['parrot';'Hash']
+  vivify_140:
+    set $P615, $P614["charnames"]
+    unless_null $P615, vivify_141
+    new $P615, "Undef"
+  vivify_141:
+    $P616 = $P615."ast"()
+    set $P610, $P616
+  if_611_end:
+    $P620 = $P609."!make"($P610)
+.annotate 'line', 225
+    .return ($P620)
+  control_606:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P569, exception, "payload"
-    .return ($P569)
+    getattribute $P621, exception, "payload"
+    .return ($P621)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block571" :load :anon :subid("49_1274022880.65586")
+.sub "_block623" :load :anon :subid("54_1275811473.30481")
 .annotate 'line', 3
-    .const 'Sub' $P573 = "11_1274022880.65586" 
-    $P574 = $P573()
-    .return ($P574)
+    .const 'Sub' $P625 = "11_1275811473.30481" 
+    $P626 = $P625()
+    .return ($P626)
 .end
 
 
 .namespace []
-.sub "_block576" :load :anon :subid("50_1274022880.65586")
+.sub "_block628" :load :anon :subid("55_1275811473.30481")
 .annotate 'line', 1
-    .const 'Sub' $P578 = "10_1274022880.65586" 
-    $P579 = $P578()
-    .return ($P579)
+    .const 'Sub' $P630 = "10_1275811473.30481" 
+    $P631 = $P630()
+    .return ($P631)
 .end
 
 ### .include 'gen/hllcompiler.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1274022881.57388")
+.sub "_block11"  :anon :subid("10_1275811474.72541")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     capture_lex $P14
+.annotate 'line', 1
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
 .annotate 'line', 6
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     capture_lex $P14
-    $P285 = $P14()
+    $P492 = $P14()
 .annotate 'line', 1
-    .return ($P285)
-    .const 'Sub' $P287 = "25_1274022881.57388" 
-    .return ($P287)
+    .return ($P492)
+    .const 'Sub' $P494 = "35_1275811474.72541" 
+    .return ($P494)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post26") :outer("10_1274022881.57388")
+.sub "" :load :init :subid("post36") :outer("10_1275811474.72541")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1274022881.57388" 
+    .const 'Sub' $P12 = "10_1275811474.72541" 
     .local pmc block
     set block, $P12
 .annotate 'line', 2
     load_bytecode "PCT/HLLCompiler.pbc"
 .annotate 'line', 1
-    $P290 = get_root_global ["parrot"], "P6metaclass"
-    new $P291, "ResizablePMCArray"
-    push $P291, "$!language"
-    $P290."new_class"("HLL::Compiler", "PCT::HLLCompiler" :named("parent"), $P291 :named("attr"))
+    $P497 = get_root_global ["parrot"], "P6metaclass"
+    new $P498, "ResizablePMCArray"
+    push $P498, "$!language"
+    $P497."new_class"("HLL::Compiler", "PCT::HLLCompiler" :named("parent"), $P498 :named("attr"))
 .end
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block13"  :subid("11_1274022881.57388") :outer("10_1274022881.57388")
+.sub "_block13"  :subid("11_1275811474.72541") :outer("10_1275811474.72541")
 .annotate 'line', 6
-    .const 'Sub' $P188 = "20_1274022881.57388" 
+    .const 'Sub' $P484 = "34_1275811474.72541" 
+    capture_lex $P484
+    .const 'Sub' $P442 = "32_1275811474.72541" 
+    capture_lex $P442
+    .const 'Sub' $P298 = "26_1275811474.72541" 
+    capture_lex $P298
+    .const 'Sub' $P283 = "25_1275811474.72541" 
+    capture_lex $P283
+    .const 'Sub' $P188 = "20_1275811474.72541" 
     capture_lex $P188
-    .const 'Sub' $P153 = "18_1274022881.57388" 
+    .const 'Sub' $P153 = "18_1275811474.72541" 
     capture_lex $P153
-    .const 'Sub' $P138 = "17_1274022881.57388" 
+    .const 'Sub' $P138 = "17_1275811474.72541" 
     capture_lex $P138
-    .const 'Sub' $P122 = "16_1274022881.57388" 
+    .const 'Sub' $P122 = "16_1275811474.72541" 
     capture_lex $P122
-    .const 'Sub' $P33 = "13_1274022881.57388" 
+    .const 'Sub' $P33 = "13_1275811474.72541" 
     capture_lex $P33
-    .const 'Sub' $P15 = "12_1274022881.57388" 
+    .const 'Sub' $P15 = "12_1275811474.72541" 
     capture_lex $P15
 .annotate 'line', 14
-    .const 'Sub' $P15 = "12_1274022881.57388" 
+    .const 'Sub' $P15 = "12_1275811474.72541" 
     newclosure $P31, $P15
     .lex "value_type", $P31
 .annotate 'line', 10
     find_lex $P32, "value_type"
-.annotate 'line', 69
-    .const 'Sub' $P188 = "20_1274022881.57388" 
-    newclosure $P283, $P188
+.annotate 'line', 163
+    .const 'Sub' $P484 = "34_1275811474.72541" 
+    newclosure $P490, $P484
 .annotate 'line', 6
-    .return ($P283)
+    .return ($P490)
 .end
 
 
 .namespace ["HLL";"Compiler"]
-.sub "" :load :init :subid("post27") :outer("11_1274022881.57388")
+.sub "" :load :init :subid("post37") :outer("11_1275811474.72541")
 .annotate 'line', 6
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate 'line', 11
-    get_hll_global $P284, ["HLL"], "Compiler"
-    $P284."language"("parrot")
+    get_hll_global $P491, ["HLL"], "Compiler"
+    $P491."language"("parrot")
 .end
 
 
 .namespace ["HLL";"Compiler"]
-.sub "value_type"  :subid("12_1274022881.57388") :outer("11_1274022881.57388")
+.include "except_types.pasm"
+.sub "value_type"  :subid("12_1275811474.72541") :outer("11_1275811474.72541")
     .param pmc param_18
 .annotate 'line', 14
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
-    $P17."handle_types"(57)
+    $P17."handle_types"(.CONTROL_RETURN)
     push_eh $P17
     .lex "$value", param_18
 .annotate 'line', 15
@@ -6588,26 +7003,27 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "get_exports"  :subid("13_1274022881.57388") :method :outer("11_1274022881.57388")
+.include "except_types.pasm"
+.sub "get_exports"  :subid("13_1275811474.72541") :method :outer("11_1275811474.72541")
     .param pmc param_36
     .param pmc param_39 :slurpy
     .param pmc param_37 :optional :named("tagset")
     .param int has_param_37 :opt_flag
 .annotate 'line', 20
-    .const 'Sub' $P105 = "15_1274022881.57388" 
+    .const 'Sub' $P105 = "15_1275811474.72541" 
     capture_lex $P105
-    .const 'Sub' $P84 = "14_1274022881.57388" 
+    .const 'Sub' $P84 = "14_1275811474.72541" 
     capture_lex $P84
     new $P35, 'ExceptionHandler'
     set_addr $P35, control_34
-    $P35."handle_types"(57)
+    $P35."handle_types"(.CONTROL_RETURN)
     push_eh $P35
     .lex "self", self
     .lex "$module", param_36
-    if has_param_37, optparam_28
+    if has_param_37, optparam_38
     new $P38, "Undef"
     set param_37, $P38
-  optparam_28:
+  optparam_38:
     .lex "$tagset", param_37
     .lex "@symbols", param_39
 .annotate 'line', 27
@@ -6653,17 +7069,17 @@
     find_lex $P60, "$tagset"
     set $S61, $P60
     find_lex $P62, "$module"
-    unless_null $P62, vivify_29
+    unless_null $P62, vivify_39
     $P62 = root_new ['parrot';'Hash']
-  vivify_29:
+  vivify_39:
     set $P63, $P62["EXPORT"]
-    unless_null $P63, vivify_30
+    unless_null $P63, vivify_40
     $P63 = root_new ['parrot';'Hash']
-  vivify_30:
+  vivify_40:
     set $P64, $P63[$S61]
-    unless_null $P64, vivify_31
+    unless_null $P64, vivify_41
     new $P64, "Undef"
-  vivify_31:
+  vivify_41:
     store_lex "%source", $P64
 .annotate 'line', 29
     find_lex $P66, "%source"
@@ -6692,17 +7108,17 @@
 .annotate 'line', 39
     find_lex $P101, "%source"
     defined $I102, $P101
-    unless $I102, for_undef_32
+    unless $I102, for_undef_42
     iter $P100, $P101
     new $P118, 'ExceptionHandler'
     set_addr $P118, loop117_handler
-    $P118."handle_types"(64, 66, 65)
+    $P118."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P118
   loop117_test:
     unless $P100, loop117_done
     shift $P103, $P100
   loop117_redo:
-    .const 'Sub' $P105 = "15_1274022881.57388" 
+    .const 'Sub' $P105 = "15_1275811474.72541" 
     capture_lex $P105
     $P105($P103)
   loop117_next:
@@ -6711,28 +7127,28 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P119, exception, 'type'
-    eq $P119, 64, loop117_next
-    eq $P119, 66, loop117_redo
+    eq $P119, .CONTROL_LOOP_NEXT, loop117_next
+    eq $P119, .CONTROL_LOOP_REDO, loop117_redo
   loop117_done:
     pop_eh 
-  for_undef_32:
+  for_undef_42:
 .annotate 'line', 38
     goto if_77_end
   if_77:
 .annotate 'line', 33
     find_lex $P80, "@symbols"
     defined $I81, $P80
-    unless $I81, for_undef_35
+    unless $I81, for_undef_45
     iter $P79, $P80
     new $P98, 'ExceptionHandler'
     set_addr $P98, loop97_handler
-    $P98."handle_types"(64, 66, 65)
+    $P98."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P98
   loop97_test:
     unless $P79, loop97_done
     shift $P82, $P79
   loop97_redo:
-    .const 'Sub' $P84 = "14_1274022881.57388" 
+    .const 'Sub' $P84 = "14_1275811474.72541" 
     capture_lex $P84
     $P84($P82)
   loop97_next:
@@ -6741,11 +7157,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P99, exception, 'type'
-    eq $P99, 64, loop97_next
-    eq $P99, 66, loop97_redo
+    eq $P99, .CONTROL_LOOP_NEXT, loop97_next
+    eq $P99, .CONTROL_LOOP_REDO, loop97_redo
   loop97_done:
     pop_eh 
-  for_undef_35:
+  for_undef_45:
   if_77_end:
 .annotate 'line', 32
     find_lex $P120, "%exports"
@@ -6760,7 +7176,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block104"  :anon :subid("15_1274022881.57388") :outer("13_1274022881.57388")
+.sub "_block104"  :anon :subid("15_1275811474.72541") :outer("13_1275811474.72541")
     .param pmc param_107
 .annotate 'line', 40
     new $P106, "Undef"
@@ -6776,15 +7192,15 @@
     find_lex $P113, "$value"
     $P114 = "value_type"($P113)
     find_lex $P115, "%exports"
-    unless_null $P115, vivify_33
+    unless_null $P115, vivify_43
     $P115 = root_new ['parrot';'Hash']
     store_lex "%exports", $P115
-  vivify_33:
+  vivify_43:
     set $P116, $P115[$P114]
-    unless_null $P116, vivify_34
+    unless_null $P116, vivify_44
     $P116 = root_new ['parrot';'Hash']
     set $P115[$P114], $P116
-  vivify_34:
+  vivify_44:
     set $P116[$P112], $P110
 .annotate 'line', 39
     .return ($P110)
@@ -6792,7 +7208,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block83"  :anon :subid("14_1274022881.57388") :outer("13_1274022881.57388")
+.sub "_block83"  :anon :subid("14_1275811474.72541") :outer("13_1275811474.72541")
     .param pmc param_86
 .annotate 'line', 34
     new $P85, "Undef"
@@ -6801,13 +7217,13 @@
     find_lex $P87, "$_"
     set $S88, $P87
     find_lex $P89, "%source"
-    unless_null $P89, vivify_36
+    unless_null $P89, vivify_46
     $P89 = root_new ['parrot';'Hash']
-  vivify_36:
+  vivify_46:
     set $P90, $P89[$S88]
-    unless_null $P90, vivify_37
+    unless_null $P90, vivify_47
     new $P90, "Undef"
-  vivify_37:
+  vivify_47:
     store_lex "$value", $P90
 .annotate 'line', 35
     find_lex $P91, "$value"
@@ -6815,15 +7231,15 @@
     find_lex $P93, "$value"
     $P94 = "value_type"($P93)
     find_lex $P95, "%exports"
-    unless_null $P95, vivify_38
+    unless_null $P95, vivify_48
     $P95 = root_new ['parrot';'Hash']
     store_lex "%exports", $P95
-  vivify_38:
+  vivify_48:
     set $P96, $P95[$P94]
-    unless_null $P96, vivify_39
+    unless_null $P96, vivify_49
     $P96 = root_new ['parrot';'Hash']
     set $P95[$P94], $P96
-  vivify_39:
+  vivify_49:
     set $P96[$P92], $P91
 .annotate 'line', 33
     .return ($P91)
@@ -6831,12 +7247,13 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "get_module"  :subid("16_1274022881.57388") :method :outer("11_1274022881.57388")
+.include "except_types.pasm"
+.sub "get_module"  :subid("16_1275811474.72541") :method :outer("11_1275811474.72541")
     .param pmc param_125
 .annotate 'line', 47
     new $P124, 'ExceptionHandler'
     set_addr $P124, control_123
-    $P124."handle_types"(57)
+    $P124."handle_types"(.CONTROL_RETURN)
     push_eh $P124
     .lex "self", self
     .lex "$name", param_125
@@ -6851,9 +7268,9 @@
     find_lex $P130, "@name"
     find_lex $P131, "self"
     getattribute $P132, $P131, "$!language"
-    unless_null $P132, vivify_40
+    unless_null $P132, vivify_50
     new $P132, "Undef"
-  vivify_40:
+  vivify_50:
     set $S133, $P132
     downcase $S134, $S133
     $P130."unshift"($S134)
@@ -6871,19 +7288,20 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "language"  :subid("17_1274022881.57388") :method :outer("11_1274022881.57388")
+.include "except_types.pasm"
+.sub "language"  :subid("17_1275811474.72541") :method :outer("11_1275811474.72541")
     .param pmc param_141 :optional
     .param int has_param_141 :opt_flag
 .annotate 'line', 53
     new $P140, 'ExceptionHandler'
     set_addr $P140, control_139
-    $P140."handle_types"(57)
+    $P140."handle_types"(.CONTROL_RETURN)
     push_eh $P140
     .lex "self", self
-    if has_param_141, optparam_41
+    if has_param_141, optparam_51
     new $P142, "Undef"
     set param_141, $P142
-  optparam_41:
+  optparam_51:
     .lex "$name", param_141
 .annotate 'line', 54
     find_lex $P144, "$name"
@@ -6901,9 +7319,9 @@
 .annotate 'line', 54
     find_lex $P150, "self"
     getattribute $P151, $P150, "$!language"
-    unless_null $P151, vivify_42
+    unless_null $P151, vivify_52
     new $P151, "Undef"
-  vivify_42:
+  vivify_52:
 .annotate 'line', 53
     .return ($P151)
   control_139:
@@ -6915,14 +7333,15 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "load_module"  :subid("18_1274022881.57388") :method :outer("11_1274022881.57388")
+.include "except_types.pasm"
+.sub "load_module"  :subid("18_1275811474.72541") :method :outer("11_1275811474.72541")
     .param pmc param_156
 .annotate 'line', 61
-    .const 'Sub' $P166 = "19_1274022881.57388" 
+    .const 'Sub' $P166 = "19_1275811474.72541" 
     capture_lex $P166
     new $P155, 'ExceptionHandler'
     set_addr $P155, control_154
-    $P155."handle_types"(57)
+    $P155."handle_types"(.CONTROL_RETURN)
     push_eh $P155
     .lex "self", self
     .lex "$name", param_156
@@ -6945,7 +7364,7 @@
     assign $P164, 0
     store_lex "$loaded", $P164
 .annotate 'line', 64
-    .const 'Sub' $P166 = "19_1274022881.57388" 
+    .const 'Sub' $P166 = "19_1275811474.72541" 
     capture_lex $P166
     $P166()
 .annotate 'line', 65
@@ -6974,11 +7393,12 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block165"  :anon :subid("19_1274022881.57388") :outer("18_1274022881.57388")
+.include "except_types.pasm"
+.sub "_block165"  :anon :subid("19_1275811474.72541") :outer("18_1275811474.72541")
 .annotate 'line', 64
     new $P173, 'ExceptionHandler'
     set_addr $P173, control_172
-    $P173."handle_types_except"(57, 58, 59, 60, 62, 63, 64, 65, 66)
+    $P173."handle_types_except"(.CONTROL_RETURN,  .CONTROL_OK,  .CONTROL_BREAK,  .CONTROL_CONTINUE,  .CONTROL_TAKE,  .CONTROL_LEAVE,  .CONTROL_EXIT,  .CONTROL_LOOP_NEXT,  .CONTROL_LOOP_LAST,  .CONTROL_LOOP_REDO)
     push_eh $P173
     find_lex $P167, "$base"
     concat $P168, $P167, ".pbc"
@@ -7007,15 +7427,16 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "import"  :subid("20_1274022881.57388") :method :outer("11_1274022881.57388")
+.include "except_types.pasm"
+.sub "import"  :subid("20_1275811474.72541") :method :outer("11_1275811474.72541")
     .param pmc param_191
     .param pmc param_192
 .annotate 'line', 69
-    .const 'Sub' $P198 = "21_1274022881.57388" 
+    .const 'Sub' $P198 = "21_1275811474.72541" 
     capture_lex $P198
     new $P190, 'ExceptionHandler'
     set_addr $P190, control_189
-    $P190."handle_types"(57)
+    $P190."handle_types"(.CONTROL_RETURN)
     push_eh $P190
     .lex "self", self
     .lex "$target", param_191
@@ -7023,17 +7444,17 @@
 .annotate 'line', 70
     find_lex $P194, "%exports"
     defined $I195, $P194
-    unless $I195, for_undef_43
+    unless $I195, for_undef_53
     iter $P193, $P194
     new $P280, 'ExceptionHandler'
     set_addr $P280, loop279_handler
-    $P280."handle_types"(64, 66, 65)
+    $P280."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P280
   loop279_test:
     unless $P193, loop279_done
     shift $P196, $P193
   loop279_redo:
-    .const 'Sub' $P198 = "21_1274022881.57388" 
+    .const 'Sub' $P198 = "21_1275811474.72541" 
     capture_lex $P198
     $P198($P196)
   loop279_next:
@@ -7042,11 +7463,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P281, exception, 'type'
-    eq $P281, 64, loop279_next
-    eq $P281, 66, loop279_redo
+    eq $P281, .CONTROL_LOOP_NEXT, loop279_next
+    eq $P281, .CONTROL_LOOP_REDO, loop279_redo
   loop279_done:
     pop_eh 
-  for_undef_43:
+  for_undef_53:
 .annotate 'line', 69
     .return ($P193)
   control_189:
@@ -7058,14 +7479,15 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block197"  :anon :subid("21_1274022881.57388") :outer("20_1274022881.57388")
+.include "except_types.pasm"
+.sub "_block197"  :anon :subid("21_1275811474.72541") :outer("20_1275811474.72541")
     .param pmc param_201
 .annotate 'line', 70
-    .const 'Sub' $P268 = "24_1274022881.57388" 
+    .const 'Sub' $P268 = "24_1275811474.72541" 
     capture_lex $P268
-    .const 'Sub' $P248 = "23_1274022881.57388" 
+    .const 'Sub' $P248 = "23_1275811474.72541" 
     capture_lex $P248
-    .const 'Sub' $P219 = "22_1274022881.57388" 
+    .const 'Sub' $P219 = "22_1275811474.72541" 
     capture_lex $P219
 .annotate 'line', 71
     new $P199, "Undef"
@@ -7103,17 +7525,17 @@
 .annotate 'line', 80
     find_lex $P264, "%items"
     defined $I265, $P264
-    unless $I265, for_undef_44
+    unless $I265, for_undef_54
     iter $P263, $P264
     new $P277, 'ExceptionHandler'
     set_addr $P277, loop276_handler
-    $P277."handle_types"(64, 66, 65)
+    $P277."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P277
   loop276_test:
     unless $P263, loop276_done
     shift $P266, $P263
   loop276_redo:
-    .const 'Sub' $P268 = "24_1274022881.57388" 
+    .const 'Sub' $P268 = "24_1275811474.72541" 
     capture_lex $P268
     $P268($P266)
   loop276_next:
@@ -7122,11 +7544,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P278, exception, 'type'
-    eq $P278, 64, loop276_next
-    eq $P278, 66, loop276_redo
+    eq $P278, .CONTROL_LOOP_NEXT, loop276_next
+    eq $P278, .CONTROL_LOOP_REDO, loop276_redo
   loop276_done:
     pop_eh 
-  for_undef_44:
+  for_undef_54:
 .annotate 'line', 79
     set $P235, $P263
 .annotate 'line', 76
@@ -7135,17 +7557,17 @@
 .annotate 'line', 77
     find_lex $P244, "%items"
     defined $I245, $P244
-    unless $I245, for_undef_46
+    unless $I245, for_undef_56
     iter $P243, $P244
     new $P261, 'ExceptionHandler'
     set_addr $P261, loop260_handler
-    $P261."handle_types"(64, 66, 65)
+    $P261."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P261
   loop260_test:
     unless $P243, loop260_done
     shift $P246, $P243
   loop260_redo:
-    .const 'Sub' $P248 = "23_1274022881.57388" 
+    .const 'Sub' $P248 = "23_1275811474.72541" 
     capture_lex $P248
     $P248($P246)
   loop260_next:
@@ -7154,11 +7576,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P262, exception, 'type'
-    eq $P262, 64, loop260_next
-    eq $P262, 66, loop260_redo
+    eq $P262, .CONTROL_LOOP_NEXT, loop260_next
+    eq $P262, .CONTROL_LOOP_REDO, loop260_redo
   loop260_done:
     pop_eh 
-  for_undef_46:
+  for_undef_56:
 .annotate 'line', 76
     set $P235, $P243
   if_236_end:
@@ -7169,17 +7591,17 @@
 .annotate 'line', 74
     find_lex $P215, "%items"
     defined $I216, $P215
-    unless $I216, for_undef_47
+    unless $I216, for_undef_57
     iter $P214, $P215
     new $P233, 'ExceptionHandler'
     set_addr $P233, loop232_handler
-    $P233."handle_types"(64, 66, 65)
+    $P233."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P233
   loop232_test:
     unless $P214, loop232_done
     shift $P217, $P214
   loop232_redo:
-    .const 'Sub' $P219 = "22_1274022881.57388" 
+    .const 'Sub' $P219 = "22_1275811474.72541" 
     capture_lex $P219
     $P219($P217)
   loop232_next:
@@ -7188,11 +7610,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P234, exception, 'type'
-    eq $P234, 64, loop232_next
-    eq $P234, 66, loop232_redo
+    eq $P234, .CONTROL_LOOP_NEXT, loop232_next
+    eq $P234, .CONTROL_LOOP_REDO, loop232_redo
   loop232_done:
     pop_eh 
-  for_undef_47:
+  for_undef_57:
 .annotate 'line', 73
     set $P206, $P214
   if_207_end:
@@ -7202,7 +7624,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block267"  :anon :subid("24_1274022881.57388") :outer("21_1274022881.57388")
+.sub "_block267"  :anon :subid("24_1275811474.72541") :outer("21_1275811474.72541")
     .param pmc param_269
 .annotate 'line', 80
     .lex "$_", param_269
@@ -7212,17 +7634,17 @@
     $P273 = $P272."key"()
     set $S274, $P273
     find_lex $P275, "$target"
-    unless_null $P275, vivify_45
+    unless_null $P275, vivify_55
     $P275 = root_new ['parrot';'Hash']
     store_lex "$target", $P275
-  vivify_45:
+  vivify_55:
     set $P275[$S274], $P271
     .return ($P271)
 .end
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block247"  :anon :subid("23_1274022881.57388") :outer("21_1274022881.57388")
+.sub "_block247"  :anon :subid("23_1275811474.72541") :outer("21_1275811474.72541")
     .param pmc param_249
 .annotate 'line', 77
     .lex "$_", param_249
@@ -7242,7 +7664,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block218"  :anon :subid("22_1274022881.57388") :outer("21_1274022881.57388")
+.sub "_block218"  :anon :subid("22_1275811474.72541") :outer("21_1275811474.72541")
     .param pmc param_220
 .annotate 'line', 74
     .lex "$_", param_220
@@ -7262,12 +7684,613 @@
 .end
 
 
+.namespace ["HLL";"Compiler"]
+.include "except_types.pasm"
+.sub "autoprint"  :subid("25_1275811474.72541") :method :outer("11_1275811474.72541")
+    .param pmc param_286
+.annotate 'line', 85
+    new $P285, 'ExceptionHandler'
+    set_addr $P285, control_284
+    $P285."handle_types"(.CONTROL_RETURN)
+    push_eh $P285
+    .lex "self", self
+    .lex "$value", param_286
+.annotate 'line', 87
+    getinterp $P289
+    $P290 = $P289."stdhandle"(1)
+    $N291 = $P290."tell"()
+    find_dynamic_lex $P292, "$*AUTOPRINTPOS"
+    unless_null $P292, vivify_58
+    get_hll_global $P292, "$AUTOPRINTPOS"
+    unless_null $P292, vivify_59
+    die "Contextual $*AUTOPRINTPOS not found"
+  vivify_59:
+  vivify_58:
+    set $N293, $P292
+    isgt $I294, $N291, $N293
+    unless $I294, unless_288
+    new $P287, 'Integer'
+    set $P287, $I294
+    goto unless_288_end
+  unless_288:
+.annotate 'line', 86
+    find_lex $P295, "$value"
+    set $S296, $P295
+    say $S296
+  unless_288_end:
+.annotate 'line', 85
+    .return ($P287)
+  control_284:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P297, exception, "payload"
+    .return ($P297)
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.include "except_types.pasm"
+.sub "interactive"  :subid("26_1275811474.72541") :method :outer("11_1275811474.72541")
+    .param pmc param_301 :slurpy :named
+.annotate 'line', 90
+    .const 'Sub' $P331 = "27_1275811474.72541" 
+    capture_lex $P331
+    new $P300, 'ExceptionHandler'
+    set_addr $P300, control_299
+    $P300."handle_types"(.CONTROL_RETURN)
+    push_eh $P300
+    .lex "self", self
+    .lex "%adverbs", param_301
+.annotate 'line', 91
+    new $P302, "Undef"
+    .lex "$target", $P302
+.annotate 'line', 95
+    new $P303, "Undef"
+    .lex "$stdin", $P303
+.annotate 'line', 96
+    new $P304, "Undef"
+    .lex "$encoding", $P304
+.annotate 'line', 91
+    find_lex $P305, "%adverbs"
+    unless_null $P305, vivify_60
+    $P305 = root_new ['parrot';'Hash']
+  vivify_60:
+    set $P306, $P305["target"]
+    unless_null $P306, vivify_61
+    new $P306, "Undef"
+  vivify_61:
+    set $S307, $P306
+    downcase $S308, $S307
+    new $P309, 'String'
+    set $P309, $S308
+    store_lex "$target", $P309
+.annotate 'line', 93
+    getinterp $P310
+    $P311 = $P310."stdhandle"(2)
+    find_lex $P312, "self"
+    $S313 = $P312."commandline_banner"()
+    print $P311, $S313
+.annotate 'line', 95
+    getinterp $P314
+    $P315 = $P314."stdhandle"(0)
+    store_lex "$stdin", $P315
+.annotate 'line', 96
+    find_lex $P316, "%adverbs"
+    unless_null $P316, vivify_62
+    $P316 = root_new ['parrot';'Hash']
+  vivify_62:
+    set $P317, $P316["encoding"]
+    unless_null $P317, vivify_63
+    new $P317, "Undef"
+  vivify_63:
+    set $S318, $P317
+    new $P319, 'String'
+    set $P319, $S318
+    store_lex "$encoding", $P319
+.annotate 'line', 97
+    find_lex $P323, "$encoding"
+    if $P323, if_322
+    set $P321, $P323
+    goto if_322_end
+  if_322:
+    find_lex $P324, "$encoding"
+    set $S325, $P324
+    isne $I326, $S325, "fixed_8"
+    new $P321, 'Integer'
+    set $P321, $I326
+  if_322_end:
+    unless $P321, if_320_end
+.annotate 'line', 98
+    find_lex $P327, "$stdin"
+    find_lex $P328, "$encoding"
+    $P327."encoding"($P328)
+  if_320_end:
+.annotate 'line', 101
+    new $P439, 'ExceptionHandler'
+    set_addr $P439, loop438_handler
+    $P439."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P439
+  loop438_test:
+    new $P329, "Integer"
+    assign $P329, 1
+    unless $P329, loop438_done
+  loop438_redo:
+    .const 'Sub' $P331 = "27_1275811474.72541" 
+    capture_lex $P331
+    $P331()
+  loop438_next:
+    goto loop438_test
+  loop438_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P440, exception, 'type'
+    eq $P440, .CONTROL_LOOP_NEXT, loop438_next
+    eq $P440, .CONTROL_LOOP_REDO, loop438_redo
+  loop438_done:
+    pop_eh 
+.annotate 'line', 90
+    .return ($P329)
+  control_299:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P441, exception, "payload"
+    .return ($P441)
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.include "except_types.pasm"
+.sub "_block330"  :anon :subid("27_1275811474.72541") :outer("26_1275811474.72541")
+.annotate 'line', 101
+    .const 'Sub' $P367 = "28_1275811474.72541" 
+    capture_lex $P367
+.annotate 'line', 104
+    new $P332, "Undef"
+    .lex "$prompt", $P332
+.annotate 'line', 105
+    new $P333, "Undef"
+    .lex "$code", $P333
+.annotate 'line', 110
+    new $P334, "Undef"
+    .lex "$*AUTOPRINTPOS", $P334
+.annotate 'line', 111
+    get_global $P335, "$interactive_ctx"
+    unless_null $P335, vivify_64
+    new $P335, "Undef"
+    set_global "$interactive_ctx", $P335
+  vivify_64:
+.annotate 'line', 112
+    get_global $P336, "%interactive_pad"
+    unless_null $P336, vivify_65
+    $P336 = root_new ['parrot';'Hash']
+    set_global "%interactive_pad", $P336
+  vivify_65:
+.annotate 'line', 113
+    new $P337, "Undef"
+    .lex "$*CTXSAVE", $P337
+.annotate 'line', 114
+    new $P338, "Undef"
+    .lex "$*MAIN_CTX", $P338
+.annotate 'line', 102
+    find_lex $P340, "$stdin"
+    if $P340, unless_339_end
+    set $I341, .CONTROL_LOOP_LAST
+    die 0, $I341
+  unless_339_end:
+.annotate 'line', 104
+    find_lex $P343, "self"
+    $P344 = $P343."commandline_prompt"()
+    set $P342, $P344
+    defined $I346, $P342
+    if $I346, default_345
+    new $P347, "String"
+    assign $P347, "> "
+    set $P342, $P347
+  default_345:
+    store_lex "$prompt", $P342
+.annotate 'line', 105
+    find_lex $P348, "$stdin"
+    find_lex $P349, "$prompt"
+    set $S350, $P349
+    $P351 = $P348."readline_interactive"($S350)
+    store_lex "$code", $P351
+.annotate 'line', 107
+    find_lex $P353, "$code"
+    isnull $I354, $P353
+    unless $I354, if_352_end
+    set $I355, .CONTROL_LOOP_LAST
+    die 0, $I355
+  if_352_end:
+.annotate 'line', 110
+    getinterp $P356
+    $P357 = $P356."stdhandle"(1)
+    $P358 = $P357."tell"()
+    store_lex "$*AUTOPRINTPOS", $P358
+    get_global $P359, "$interactive_ctx"
+    get_global $P360, "%interactive_pad"
+.annotate 'line', 113
+    find_lex $P361, "self"
+    store_lex "$*CTXSAVE", $P361
+    find_lex $P362, "$*MAIN_CTX"
+    unless_null $P362, vivify_66
+    get_hll_global $P362, "$MAIN_CTX"
+    unless_null $P362, vivify_67
+    die "Contextual $*MAIN_CTX not found"
+  vivify_67:
+  vivify_66:
+.annotate 'line', 116
+    find_lex $P365, "$code"
+    if $P365, if_364
+    set $P363, $P365
+    goto if_364_end
+  if_364:
+    .const 'Sub' $P367 = "28_1275811474.72541" 
+    capture_lex $P367
+    $P437 = $P367()
+    set $P363, $P437
+  if_364_end:
+.annotate 'line', 101
+    .return ($P363)
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.include "except_types.pasm"
+.sub "_block366"  :anon :subid("28_1275811474.72541") :outer("27_1275811474.72541")
+.annotate 'line', 116
+    .const 'Sub' $P405 = "31_1275811474.72541" 
+    capture_lex $P405
+    .const 'Sub' $P373 = "29_1275811474.72541" 
+    capture_lex $P373
+.annotate 'line', 118
+    new $P368, "Undef"
+    .lex "$output", $P368
+.annotate 'line', 117
+    find_lex $P369, "$code"
+    concat $P370, $P369, "\n"
+    store_lex "$code", $P370
+    find_lex $P371, "$output"
+.annotate 'line', 119
+    .const 'Sub' $P373 = "29_1275811474.72541" 
+    capture_lex $P373
+    $P373()
+.annotate 'line', 126
+    find_dynamic_lex $P397, "$*MAIN_CTX"
+    unless_null $P397, vivify_68
+    get_hll_global $P397, "$MAIN_CTX"
+    unless_null $P397, vivify_69
+    die "Contextual $*MAIN_CTX not found"
+  vivify_69:
+  vivify_68:
+    defined $I398, $P397
+    unless $I398, if_396_end
+.annotate 'line', 127
+    find_dynamic_lex $P400, "$*MAIN_CTX"
+    unless_null $P400, vivify_70
+    get_hll_global $P400, "$MAIN_CTX"
+    unless_null $P400, vivify_71
+    die "Contextual $*MAIN_CTX not found"
+  vivify_71:
+  vivify_70:
+    $P401 = $P400."lexpad_full"()
+    defined $I402, $P401
+    unless $I402, for_undef_72
+    iter $P399, $P401
+    new $P413, 'ExceptionHandler'
+    set_addr $P413, loop412_handler
+    $P413."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P413
+  loop412_test:
+    unless $P399, loop412_done
+    shift $P403, $P399
+  loop412_redo:
+    .const 'Sub' $P405 = "31_1275811474.72541" 
+    capture_lex $P405
+    $P405($P403)
+  loop412_next:
+    goto loop412_test
+  loop412_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P414, exception, 'type'
+    eq $P414, .CONTROL_LOOP_NEXT, loop412_next
+    eq $P414, .CONTROL_LOOP_REDO, loop412_redo
+  loop412_done:
+    pop_eh 
+  for_undef_72:
+  if_396_end:
+.annotate 'line', 131
+    find_lex $P416, "$output"
+    isnull $I417, $P416
+    unless $I417, if_415_end
+    set $I418, .CONTROL_LOOP_NEXT
+    die 0, $I418
+  if_415_end:
+.annotate 'line', 133
+    find_lex $P421, "$target"
+    isfalse $I422, $P421
+    if $I422, if_420
+.annotate 'line', 135
+    find_lex $P428, "$target"
+    set $S429, $P428
+    iseq $I430, $S429, "pir"
+    if $I430, if_427
+.annotate 'line', 138
+    find_lex $P432, "self"
+    find_lex $P433, "$output"
+    find_lex $P434, "$target"
+    find_lex $P435, "%adverbs"
+    $P436 = $P432."dumper"($P433, $P434, $P435 :flat)
+.annotate 'line', 137
+    set $P426, $P436
+.annotate 'line', 135
+    goto if_427_end
+  if_427:
+.annotate 'line', 136
+    find_lex $P431, "$output"
+    say $P431
+  if_427_end:
+.annotate 'line', 135
+    set $P419, $P426
+.annotate 'line', 133
+    goto if_420_end
+  if_420:
+.annotate 'line', 134
+    find_lex $P423, "self"
+    find_lex $P424, "$output"
+    $P425 = $P423."autoprint"($P424)
+.annotate 'line', 133
+    set $P419, $P425
+  if_420_end:
+.annotate 'line', 116
+    .return ($P419)
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.include "except_types.pasm"
+.sub "_block372"  :anon :subid("29_1275811474.72541") :outer("28_1275811474.72541")
+.annotate 'line', 119
+    .const 'Sub' $P385 = "30_1275811474.72541" 
+    capture_lex $P385
+    new $P381, 'ExceptionHandler'
+    set_addr $P381, control_380
+    $P381."handle_types_except"(.CONTROL_RETURN,  .CONTROL_OK,  .CONTROL_BREAK,  .CONTROL_CONTINUE,  .CONTROL_TAKE,  .CONTROL_LEAVE,  .CONTROL_EXIT,  .CONTROL_LOOP_NEXT,  .CONTROL_LOOP_LAST,  .CONTROL_LOOP_REDO)
+    push_eh $P381
+.annotate 'line', 120
+    find_lex $P374, "self"
+    find_lex $P375, "$code"
+    get_global $P376, "$interactive_ctx"
+    find_lex $P377, "%adverbs"
+    $P378 = $P374."eval"($P375, $P377 :flat, $P376 :named("outer_ctx"))
+    store_lex "$output", $P378
+.annotate 'line', 119
+    pop_eh 
+    goto skip_handler_379
+  control_380:
+.annotate 'line', 121
+    .local pmc exception 
+    .get_results (exception) 
+    .const 'Sub' $P385 = "30_1275811474.72541" 
+    newclosure $P393, $P385
+    $P393(exception)
+    new $P394, 'Integer'
+    set $P394, 1
+    set exception["handled"], $P394
+    set $I395, exception["handled"]
+    ne $I395, 1, nothandled_383
+  handled_382:
+    .return (exception)
+  nothandled_383:
+    rethrow exception
+  skip_handler_379:
+.annotate 'line', 119
+    .return ()
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.include "except_types.pasm"
+.sub "_block384"  :anon :subid("30_1275811474.72541") :outer("29_1275811474.72541")
+    .param pmc param_386
+.annotate 'line', 121
+    .lex "$_", param_386
+    find_lex $P387, "$_"
+    .lex "$!", $P387
+.annotate 'line', 122
+    find_lex $P388, "$!"
+    set $S389, $P388
+    new $P390, 'String'
+    set $P390, $S389
+    concat $P391, $P390, "\n"
+    print $P391
+.annotate 'line', 123
+    set $I392, .CONTROL_LOOP_NEXT
+    die 0, $I392
+.annotate 'line', 121
+    .return ()
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.sub "_block404"  :anon :subid("31_1275811474.72541") :outer("28_1275811474.72541")
+    .param pmc param_406
+.annotate 'line', 127
+    .lex "$_", param_406
+.annotate 'line', 128
+    find_lex $P407, "$_"
+    $P408 = $P407."value"()
+    find_lex $P409, "$_"
+    $P410 = $P409."key"()
+    get_global $P411, "%interactive_pad"
+    unless_null $P411, vivify_73
+    $P411 = root_new ['parrot';'Hash']
+    set_global "%interactive_pad", $P411
+  vivify_73:
+    set $P411[$P410], $P408
+.annotate 'line', 127
+    .return ($P408)
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.include "except_types.pasm"
+.sub "eval"  :subid("32_1275811474.72541") :method :outer("11_1275811474.72541")
+    .param pmc param_445
+    .param pmc param_446 :slurpy
+    .param pmc param_447 :slurpy :named
+.annotate 'line', 144
+    .const 'Sub' $P466 = "33_1275811474.72541" 
+    capture_lex $P466
+    new $P444, 'ExceptionHandler'
+    set_addr $P444, control_443
+    $P444."handle_types"(.CONTROL_RETURN)
+    push_eh $P444
+    .lex "self", self
+    .lex "$code", param_445
+    .lex "@args", param_446
+    .lex "%adverbs", param_447
+.annotate 'line', 145
+    new $P448, "Undef"
+    .lex "$output", $P448
+.annotate 'line', 144
+    find_lex $P449, "$output"
+.annotate 'line', 146
+    find_lex $P450, "self"
+    find_lex $P451, "$code"
+    find_lex $P452, "%adverbs"
+    $P453 = $P450."compile"($P451, $P452 :flat)
+    store_lex "$output", $P453
+.annotate 'line', 148
+    find_lex $P457, "$output"
+    isa $I458, $P457, "String"
+    new $P459, 'Integer'
+    set $P459, $I458
+    isfalse $I460, $P459
+    if $I460, if_456
+    new $P455, 'Integer'
+    set $P455, $I460
+    goto if_456_end
+  if_456:
+.annotate 'line', 149
+    find_lex $P461, "%adverbs"
+    unless_null $P461, vivify_74
+    $P461 = root_new ['parrot';'Hash']
+  vivify_74:
+    set $P462, $P461["target"]
+    unless_null $P462, vivify_75
+    new $P462, "Undef"
+  vivify_75:
+    set $S463, $P462
+    iseq $I464, $S463, ""
+    new $P455, 'Integer'
+    set $P455, $I464
+  if_456_end:
+    unless $P455, if_454_end
+    .const 'Sub' $P466 = "33_1275811474.72541" 
+    capture_lex $P466
+    $P466()
+  if_454_end:
+.annotate 'line', 148
+    find_lex $P482, "$output"
+.annotate 'line', 144
+    .return ($P482)
+  control_443:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P483, exception, "payload"
+    .return ($P483)
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.sub "_block465"  :anon :subid("33_1275811474.72541") :outer("32_1275811474.72541")
+.annotate 'line', 150
+    new $P467, "Undef"
+    .lex "$outer_ctx", $P467
+    find_lex $P468, "%adverbs"
+    unless_null $P468, vivify_76
+    $P468 = root_new ['parrot';'Hash']
+  vivify_76:
+    set $P469, $P468["outer_ctx"]
+    unless_null $P469, vivify_77
+    new $P469, "Undef"
+  vivify_77:
+    store_lex "$outer_ctx", $P469
+.annotate 'line', 151
+    find_lex $P471, "$outer_ctx"
+    defined $I472, $P471
+    unless $I472, if_470_end
+.annotate 'line', 152
+    find_lex $P473, "$output"
+    unless_null $P473, vivify_78
+    $P473 = root_new ['parrot';'ResizablePMCArray']
+  vivify_78:
+    set $P474, $P473[0]
+    unless_null $P474, vivify_79
+    new $P474, "Undef"
+  vivify_79:
+    find_lex $P475, "$outer_ctx"
+    $P474."set_outer_ctx"($P475)
+  if_470_end:
+.annotate 'line', 155
+    find_lex $P476, "%adverbs"
+    unless_null $P476, vivify_80
+    $P476 = root_new ['parrot';'Hash']
+  vivify_80:
+    set $P477, $P476["trace"]
+    unless_null $P477, vivify_81
+    new $P477, "Undef"
+  vivify_81:
+    set $I478, $P477
+    trace $I478
+.annotate 'line', 156
+    find_lex $P479, "$output"
+    find_lex $P480, "@args"
+    $P481 = $P479($P480 :flat)
+    store_lex "$output", $P481
+.annotate 'line', 157
+    trace 0
+.annotate 'line', 149
+    .return ()
+.end
+
+
+.namespace ["HLL";"Compiler"]
+.include "except_types.pasm"
+.sub "ctxsave"  :subid("34_1275811474.72541") :method :outer("11_1275811474.72541")
+.annotate 'line', 163
+    new $P486, 'ExceptionHandler'
+    set_addr $P486, control_485
+    $P486."handle_types"(.CONTROL_RETURN)
+    push_eh $P486
+    .lex "self", self
+.annotate 'line', 165
+
+                $P0 = getinterp
+                $P487 = $P0['context';1]
+            
+    store_dynamic_lex "$*MAIN_CTX", $P487
+.annotate 'line', 169
+    new $P488, "Integer"
+    assign $P488, 0
+    store_dynamic_lex "$*CTXSAVE", $P488
+.annotate 'line', 163
+    .return ($P488)
+  control_485:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P489, exception, "payload"
+    .return ($P489)
+.end
+
+
 .namespace []
-.sub "_block286" :load :anon :subid("25_1274022881.57388")
+.sub "_block493" :load :anon :subid("35_1275811474.72541")
 .annotate 'line', 1
-    .const 'Sub' $P288 = "10_1274022881.57388" 
-    $P289 = $P288()
-    .return ($P289)
+    .const 'Sub' $P495 = "10_1275811474.72541" 
+    $P496 = $P495()
+    .return ($P496)
 .end
 
 

Modified: branches/gsoc_threads/ext/nqp-rx/src/stage0/NQP-s0.pir
==============================================================================
--- branches/gsoc_threads/ext/nqp-rx/src/stage0/NQP-s0.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/ext/nqp-rx/src/stage0/NQP-s0.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -15,407 +15,429 @@
 ### .include 'gen/nqp-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1274022894.43745")
+.sub "_block11"  :anon :subid("10_1275811487.95429")
 .annotate 'line', 0
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
+.annotate 'line', 1
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
 .annotate 'line', 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
-    $P1350 = $P14()
+    $P1424 = $P14()
 .annotate 'line', 1
-    .return ($P1350)
-    .const 'Sub' $P1352 = "344_1274022894.43745" 
-    .return ($P1352)
+    .return ($P1424)
+    .const 'Sub' $P1426 = "363_1275811487.95429" 
+    .return ($P1426)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post345") :outer("10_1274022894.43745")
+.sub "" :load :init :subid("post364") :outer("10_1275811487.95429")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1274022894.43745" 
+    .const 'Sub' $P12 = "10_1275811487.95429" 
     .local pmc block
     set block, $P12
-    $P1355 = get_root_global ["parrot"], "P6metaclass"
-    $P1355."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
+    $P1429 = get_root_global ["parrot"], "P6metaclass"
+    $P1429."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block13"  :subid("11_1274022894.43745") :outer("10_1274022894.43745")
+.sub "_block13"  :subid("11_1275811487.95429") :outer("10_1275811487.95429")
 .annotate 'line', 4
-    get_hll_global $P1290, ["NQP";"Regex"], "_block1289" 
-    capture_lex $P1290
-    .const 'Sub' $P1276 = "329_1274022894.43745" 
-    capture_lex $P1276
-    .const 'Sub' $P1270 = "327_1274022894.43745" 
-    capture_lex $P1270
-    .const 'Sub' $P1264 = "325_1274022894.43745" 
-    capture_lex $P1264
-    .const 'Sub' $P1258 = "323_1274022894.43745" 
-    capture_lex $P1258
-    .const 'Sub' $P1252 = "321_1274022894.43745" 
-    capture_lex $P1252
-    .const 'Sub' $P1246 = "319_1274022894.43745" 
-    capture_lex $P1246
-    .const 'Sub' $P1239 = "317_1274022894.43745" 
-    capture_lex $P1239
-    .const 'Sub' $P1232 = "315_1274022894.43745" 
-    capture_lex $P1232
-    .const 'Sub' $P1225 = "313_1274022894.43745" 
-    capture_lex $P1225
-    .const 'Sub' $P1218 = "311_1274022894.43745" 
-    capture_lex $P1218
-    .const 'Sub' $P1212 = "309_1274022894.43745" 
-    capture_lex $P1212
-    .const 'Sub' $P1205 = "307_1274022894.43745" 
-    capture_lex $P1205
-    .const 'Sub' $P1198 = "305_1274022894.43745" 
-    capture_lex $P1198
-    .const 'Sub' $P1191 = "303_1274022894.43745" 
-    capture_lex $P1191
-    .const 'Sub' $P1184 = "301_1274022894.43745" 
-    capture_lex $P1184
-    .const 'Sub' $P1177 = "299_1274022894.43745" 
-    capture_lex $P1177
-    .const 'Sub' $P1170 = "297_1274022894.43745" 
-    capture_lex $P1170
-    .const 'Sub' $P1163 = "295_1274022894.43745" 
-    capture_lex $P1163
-    .const 'Sub' $P1156 = "293_1274022894.43745" 
-    capture_lex $P1156
-    .const 'Sub' $P1149 = "291_1274022894.43745" 
-    capture_lex $P1149
-    .const 'Sub' $P1142 = "289_1274022894.43745" 
-    capture_lex $P1142
-    .const 'Sub' $P1135 = "287_1274022894.43745" 
-    capture_lex $P1135
-    .const 'Sub' $P1128 = "285_1274022894.43745" 
-    capture_lex $P1128
-    .const 'Sub' $P1121 = "283_1274022894.43745" 
-    capture_lex $P1121
-    .const 'Sub' $P1114 = "281_1274022894.43745" 
-    capture_lex $P1114
-    .const 'Sub' $P1107 = "279_1274022894.43745" 
-    capture_lex $P1107
-    .const 'Sub' $P1100 = "277_1274022894.43745" 
-    capture_lex $P1100
-    .const 'Sub' $P1093 = "275_1274022894.43745" 
-    capture_lex $P1093
-    .const 'Sub' $P1086 = "273_1274022894.43745" 
-    capture_lex $P1086
-    .const 'Sub' $P1079 = "271_1274022894.43745" 
-    capture_lex $P1079
-    .const 'Sub' $P1072 = "269_1274022894.43745" 
-    capture_lex $P1072
-    .const 'Sub' $P1065 = "267_1274022894.43745" 
-    capture_lex $P1065
-    .const 'Sub' $P1058 = "265_1274022894.43745" 
-    capture_lex $P1058
-    .const 'Sub' $P1051 = "263_1274022894.43745" 
-    capture_lex $P1051
-    .const 'Sub' $P1044 = "261_1274022894.43745" 
-    capture_lex $P1044
-    .const 'Sub' $P1037 = "259_1274022894.43745" 
-    capture_lex $P1037
-    .const 'Sub' $P1030 = "257_1274022894.43745" 
-    capture_lex $P1030
-    .const 'Sub' $P1024 = "255_1274022894.43745" 
-    capture_lex $P1024
-    .const 'Sub' $P1017 = "253_1274022894.43745" 
-    capture_lex $P1017
-    .const 'Sub' $P1010 = "251_1274022894.43745" 
-    capture_lex $P1010
-    .const 'Sub' $P1003 = "249_1274022894.43745" 
-    capture_lex $P1003
-    .const 'Sub' $P996 = "247_1274022894.43745" 
+    get_hll_global $P1340, ["NQP";"Regex"], "_block1339" 
+    capture_lex $P1340
+    .const 'Sub' $P1326 = "340_1275811487.95429" 
+    capture_lex $P1326
+    .const 'Sub' $P1320 = "338_1275811487.95429" 
+    capture_lex $P1320
+    .const 'Sub' $P1314 = "336_1275811487.95429" 
+    capture_lex $P1314
+    .const 'Sub' $P1308 = "334_1275811487.95429" 
+    capture_lex $P1308
+    .const 'Sub' $P1302 = "332_1275811487.95429" 
+    capture_lex $P1302
+    .const 'Sub' $P1296 = "330_1275811487.95429" 
+    capture_lex $P1296
+    .const 'Sub' $P1289 = "328_1275811487.95429" 
+    capture_lex $P1289
+    .const 'Sub' $P1282 = "326_1275811487.95429" 
+    capture_lex $P1282
+    .const 'Sub' $P1275 = "324_1275811487.95429" 
+    capture_lex $P1275
+    .const 'Sub' $P1268 = "322_1275811487.95429" 
+    capture_lex $P1268
+    .const 'Sub' $P1262 = "320_1275811487.95429" 
+    capture_lex $P1262
+    .const 'Sub' $P1255 = "318_1275811487.95429" 
+    capture_lex $P1255
+    .const 'Sub' $P1248 = "316_1275811487.95429" 
+    capture_lex $P1248
+    .const 'Sub' $P1241 = "314_1275811487.95429" 
+    capture_lex $P1241
+    .const 'Sub' $P1234 = "312_1275811487.95429" 
+    capture_lex $P1234
+    .const 'Sub' $P1227 = "310_1275811487.95429" 
+    capture_lex $P1227
+    .const 'Sub' $P1220 = "308_1275811487.95429" 
+    capture_lex $P1220
+    .const 'Sub' $P1213 = "306_1275811487.95429" 
+    capture_lex $P1213
+    .const 'Sub' $P1206 = "304_1275811487.95429" 
+    capture_lex $P1206
+    .const 'Sub' $P1199 = "302_1275811487.95429" 
+    capture_lex $P1199
+    .const 'Sub' $P1192 = "300_1275811487.95429" 
+    capture_lex $P1192
+    .const 'Sub' $P1185 = "298_1275811487.95429" 
+    capture_lex $P1185
+    .const 'Sub' $P1178 = "296_1275811487.95429" 
+    capture_lex $P1178
+    .const 'Sub' $P1171 = "294_1275811487.95429" 
+    capture_lex $P1171
+    .const 'Sub' $P1164 = "292_1275811487.95429" 
+    capture_lex $P1164
+    .const 'Sub' $P1157 = "290_1275811487.95429" 
+    capture_lex $P1157
+    .const 'Sub' $P1150 = "288_1275811487.95429" 
+    capture_lex $P1150
+    .const 'Sub' $P1143 = "286_1275811487.95429" 
+    capture_lex $P1143
+    .const 'Sub' $P1136 = "284_1275811487.95429" 
+    capture_lex $P1136
+    .const 'Sub' $P1129 = "282_1275811487.95429" 
+    capture_lex $P1129
+    .const 'Sub' $P1122 = "280_1275811487.95429" 
+    capture_lex $P1122
+    .const 'Sub' $P1115 = "278_1275811487.95429" 
+    capture_lex $P1115
+    .const 'Sub' $P1108 = "276_1275811487.95429" 
+    capture_lex $P1108
+    .const 'Sub' $P1101 = "274_1275811487.95429" 
+    capture_lex $P1101
+    .const 'Sub' $P1094 = "272_1275811487.95429" 
+    capture_lex $P1094
+    .const 'Sub' $P1087 = "270_1275811487.95429" 
+    capture_lex $P1087
+    .const 'Sub' $P1080 = "268_1275811487.95429" 
+    capture_lex $P1080
+    .const 'Sub' $P1074 = "266_1275811487.95429" 
+    capture_lex $P1074
+    .const 'Sub' $P1067 = "264_1275811487.95429" 
+    capture_lex $P1067
+    .const 'Sub' $P1060 = "262_1275811487.95429" 
+    capture_lex $P1060
+    .const 'Sub' $P1053 = "260_1275811487.95429" 
+    capture_lex $P1053
+    .const 'Sub' $P1046 = "258_1275811487.95429" 
+    capture_lex $P1046
+    .const 'Sub' $P1039 = "256_1275811487.95429" 
+    capture_lex $P1039
+    .const 'Sub' $P1032 = "254_1275811487.95429" 
+    capture_lex $P1032
+    .const 'Sub' $P1025 = "252_1275811487.95429" 
+    capture_lex $P1025
+    .const 'Sub' $P1019 = "250_1275811487.95429" 
+    capture_lex $P1019
+    .const 'Sub' $P1013 = "248_1275811487.95429" 
+    capture_lex $P1013
+    .const 'Sub' $P1008 = "246_1275811487.95429" 
+    capture_lex $P1008
+    .const 'Sub' $P1002 = "244_1275811487.95429" 
+    capture_lex $P1002
+    .const 'Sub' $P996 = "242_1275811487.95429" 
     capture_lex $P996
-    .const 'Sub' $P989 = "245_1274022894.43745" 
-    capture_lex $P989
-    .const 'Sub' $P982 = "243_1274022894.43745" 
-    capture_lex $P982
-    .const 'Sub' $P975 = "241_1274022894.43745" 
-    capture_lex $P975
-    .const 'Sub' $P969 = "239_1274022894.43745" 
-    capture_lex $P969
-    .const 'Sub' $P963 = "237_1274022894.43745" 
-    capture_lex $P963
-    .const 'Sub' $P958 = "235_1274022894.43745" 
-    capture_lex $P958
-    .const 'Sub' $P952 = "233_1274022894.43745" 
-    capture_lex $P952
-    .const 'Sub' $P946 = "231_1274022894.43745" 
-    capture_lex $P946
-    .const 'Sub' $P941 = "229_1274022894.43745" 
-    capture_lex $P941
-    .const 'Sub' $P936 = "227_1274022894.43745" 
-    capture_lex $P936
-    .const 'Sub' $P929 = "225_1274022894.43745" 
+    .const 'Sub' $P991 = "240_1275811487.95429" 
+    capture_lex $P991
+    .const 'Sub' $P986 = "238_1275811487.95429" 
+    capture_lex $P986
+    .const 'Sub' $P978 = "236_1275811487.95429" 
+    capture_lex $P978
+    .const 'Sub' $P970 = "234_1275811487.95429" 
+    capture_lex $P970
+    .const 'Sub' $P965 = "232_1275811487.95429" 
+    capture_lex $P965
+    .const 'Sub' $P960 = "230_1275811487.95429" 
+    capture_lex $P960
+    .const 'Sub' $P955 = "228_1275811487.95429" 
+    capture_lex $P955
+    .const 'Sub' $P947 = "226_1275811487.95429" 
+    capture_lex $P947
+    .const 'Sub' $P939 = "224_1275811487.95429" 
+    capture_lex $P939
+    .const 'Sub' $P934 = "222_1275811487.95429" 
+    capture_lex $P934
+    .const 'Sub' $P929 = "220_1275811487.95429" 
     capture_lex $P929
-    .const 'Sub' $P921 = "223_1274022894.43745" 
-    capture_lex $P921
-    .const 'Sub' $P916 = "221_1274022894.43745" 
-    capture_lex $P916
-    .const 'Sub' $P911 = "219_1274022894.43745" 
-    capture_lex $P911
-    .const 'Sub' $P906 = "217_1274022894.43745" 
+    .const 'Sub' $P924 = "218_1275811487.95429" 
+    capture_lex $P924
+    .const 'Sub' $P918 = "216_1275811487.95429" 
+    capture_lex $P918
+    .const 'Sub' $P912 = "214_1275811487.95429" 
+    capture_lex $P912
+    .const 'Sub' $P906 = "212_1275811487.95429" 
     capture_lex $P906
-    .const 'Sub' $P898 = "215_1274022894.43745" 
-    capture_lex $P898
-    .const 'Sub' $P890 = "213_1274022894.43745" 
-    capture_lex $P890
-    .const 'Sub' $P885 = "211_1274022894.43745" 
-    capture_lex $P885
-    .const 'Sub' $P880 = "209_1274022894.43745" 
-    capture_lex $P880
-    .const 'Sub' $P875 = "207_1274022894.43745" 
-    capture_lex $P875
-    .const 'Sub' $P869 = "205_1274022894.43745" 
-    capture_lex $P869
-    .const 'Sub' $P863 = "203_1274022894.43745" 
+    .const 'Sub' $P900 = "210_1275811487.95429" 
+    capture_lex $P900
+    .const 'Sub' $P894 = "208_1275811487.95429" 
+    capture_lex $P894
+    .const 'Sub' $P889 = "206_1275811487.95429" 
+    capture_lex $P889
+    .const 'Sub' $P884 = "204_1275811487.95429" 
+    capture_lex $P884
+    .const 'Sub' $P871 = "200_1275811487.95429" 
+    capture_lex $P871
+    .const 'Sub' $P863 = "198_1275811487.95429" 
     capture_lex $P863
-    .const 'Sub' $P857 = "201_1274022894.43745" 
+    .const 'Sub' $P857 = "196_1275811487.95429" 
     capture_lex $P857
-    .const 'Sub' $P851 = "199_1274022894.43745" 
-    capture_lex $P851
-    .const 'Sub' $P845 = "197_1274022894.43745" 
-    capture_lex $P845
-    .const 'Sub' $P840 = "195_1274022894.43745" 
-    capture_lex $P840
-    .const 'Sub' $P835 = "193_1274022894.43745" 
-    capture_lex $P835
-    .const 'Sub' $P822 = "189_1274022894.43745" 
+    .const 'Sub' $P850 = "194_1275811487.95429" 
+    capture_lex $P850
+    .const 'Sub' $P844 = "192_1275811487.95429" 
+    capture_lex $P844
+    .const 'Sub' $P836 = "190_1275811487.95429" 
+    capture_lex $P836
+    .const 'Sub' $P828 = "188_1275811487.95429" 
+    capture_lex $P828
+    .const 'Sub' $P822 = "186_1275811487.95429" 
     capture_lex $P822
-    .const 'Sub' $P814 = "187_1274022894.43745" 
-    capture_lex $P814
-    .const 'Sub' $P808 = "185_1274022894.43745" 
-    capture_lex $P808
-    .const 'Sub' $P801 = "183_1274022894.43745" 
+    .const 'Sub' $P816 = "184_1275811487.95429" 
+    capture_lex $P816
+    .const 'Sub' $P801 = "180_1275811487.95429" 
     capture_lex $P801
-    .const 'Sub' $P795 = "181_1274022894.43745" 
-    capture_lex $P795
-    .const 'Sub' $P787 = "179_1274022894.43745" 
-    capture_lex $P787
-    .const 'Sub' $P779 = "177_1274022894.43745" 
-    capture_lex $P779
-    .const 'Sub' $P773 = "175_1274022894.43745" 
-    capture_lex $P773
-    .const 'Sub' $P767 = "173_1274022894.43745" 
-    capture_lex $P767
-    .const 'Sub' $P752 = "169_1274022894.43745" 
-    capture_lex $P752
-    .const 'Sub' $P715 = "167_1274022894.43745" 
+    .const 'Sub' $P763 = "178_1275811487.95429" 
+    capture_lex $P763
+    .const 'Sub' $P754 = "176_1275811487.95429" 
+    capture_lex $P754
+    .const 'Sub' $P748 = "174_1275811487.95429" 
+    capture_lex $P748
+    .const 'Sub' $P738 = "172_1275811487.95429" 
+    capture_lex $P738
+    .const 'Sub' $P724 = "170_1275811487.95429" 
+    capture_lex $P724
+    .const 'Sub' $P715 = "168_1275811487.95429" 
     capture_lex $P715
-    .const 'Sub' $P707 = "165_1274022894.43745" 
+    .const 'Sub' $P707 = "166_1275811487.95429" 
     capture_lex $P707
-    .const 'Sub' $P701 = "163_1274022894.43745" 
-    capture_lex $P701
-    .const 'Sub' $P691 = "161_1274022894.43745" 
-    capture_lex $P691
-    .const 'Sub' $P677 = "159_1274022894.43745" 
-    capture_lex $P677
-    .const 'Sub' $P668 = "157_1274022894.43745" 
-    capture_lex $P668
-    .const 'Sub' $P649 = "155_1274022894.43745" 
-    capture_lex $P649
-    .const 'Sub' $P625 = "153_1274022894.43745" 
-    capture_lex $P625
-    .const 'Sub' $P618 = "151_1274022894.43745" 
-    capture_lex $P618
-    .const 'Sub' $P611 = "149_1274022894.43745" 
-    capture_lex $P611
-    .const 'Sub' $P601 = "145_1274022894.43745" 
-    capture_lex $P601
-    .const 'Sub' $P593 = "143_1274022894.43745" 
-    capture_lex $P593
-    .const 'Sub' $P587 = "141_1274022894.43745" 
-    capture_lex $P587
-    .const 'Sub' $P573 = "139_1274022894.43745" 
-    capture_lex $P573
-    .const 'Sub' $P566 = "137_1274022894.43745" 
-    capture_lex $P566
-    .const 'Sub' $P559 = "135_1274022894.43745" 
-    capture_lex $P559
-    .const 'Sub' $P552 = "133_1274022894.43745" 
-    capture_lex $P552
-    .const 'Sub' $P525 = "129_1274022894.43745" 
-    capture_lex $P525
-    .const 'Sub' $P516 = "127_1274022894.43745" 
-    capture_lex $P516
-    .const 'Sub' $P509 = "125_1274022894.43745" 
-    capture_lex $P509
-    .const 'Sub' $P500 = "121_1274022894.43745" 
-    capture_lex $P500
-    .const 'Sub' $P495 = "119_1274022894.43745" 
-    capture_lex $P495
-    .const 'Sub' $P483 = "117_1274022894.43745" 
-    capture_lex $P483
-    .const 'Sub' $P471 = "115_1274022894.43745" 
-    capture_lex $P471
-    .const 'Sub' $P463 = "113_1274022894.43745" 
-    capture_lex $P463
-    .const 'Sub' $P458 = "111_1274022894.43745" 
-    capture_lex $P458
-    .const 'Sub' $P452 = "109_1274022894.43745" 
-    capture_lex $P452
-    .const 'Sub' $P446 = "107_1274022894.43745" 
-    capture_lex $P446
-    .const 'Sub' $P440 = "105_1274022894.43745" 
-    capture_lex $P440
-    .const 'Sub' $P434 = "103_1274022894.43745" 
-    capture_lex $P434
-    .const 'Sub' $P428 = "101_1274022894.43745" 
-    capture_lex $P428
-    .const 'Sub' $P422 = "99_1274022894.43745" 
-    capture_lex $P422
-    .const 'Sub' $P416 = "97_1274022894.43745" 
-    capture_lex $P416
-    .const 'Sub' $P410 = "95_1274022894.43745" 
-    capture_lex $P410
-    .const 'Sub' $P402 = "93_1274022894.43745" 
-    capture_lex $P402
-    .const 'Sub' $P394 = "91_1274022894.43745" 
-    capture_lex $P394
-    .const 'Sub' $P382 = "87_1274022894.43745" 
-    capture_lex $P382
-    .const 'Sub' $P374 = "85_1274022894.43745" 
-    capture_lex $P374
-    .const 'Sub' $P364 = "81_1274022894.43745" 
-    capture_lex $P364
-    .const 'Sub' $P357 = "79_1274022894.43745" 
-    capture_lex $P357
-    .const 'Sub' $P350 = "77_1274022894.43745" 
-    capture_lex $P350
-    .const 'Sub' $P338 = "73_1274022894.43745" 
-    capture_lex $P338
-    .const 'Sub' $P330 = "71_1274022894.43745" 
-    capture_lex $P330
-    .const 'Sub' $P322 = "69_1274022894.43745" 
-    capture_lex $P322
-    .const 'Sub' $P302 = "67_1274022894.43745" 
+    .const 'Sub' $P697 = "164_1275811487.95429" 
+    capture_lex $P697
+    .const 'Sub' $P673 = "160_1275811487.95429" 
+    capture_lex $P673
+    .const 'Sub' $P648 = "158_1275811487.95429" 
+    capture_lex $P648
+    .const 'Sub' $P641 = "156_1275811487.95429" 
+    capture_lex $P641
+    .const 'Sub' $P634 = "154_1275811487.95429" 
+    capture_lex $P634
+    .const 'Sub' $P624 = "150_1275811487.95429" 
+    capture_lex $P624
+    .const 'Sub' $P616 = "148_1275811487.95429" 
+    capture_lex $P616
+    .const 'Sub' $P610 = "146_1275811487.95429" 
+    capture_lex $P610
+    .const 'Sub' $P597 = "144_1275811487.95429" 
+    capture_lex $P597
+    .const 'Sub' $P590 = "142_1275811487.95429" 
+    capture_lex $P590
+    .const 'Sub' $P583 = "140_1275811487.95429" 
+    capture_lex $P583
+    .const 'Sub' $P576 = "138_1275811487.95429" 
+    capture_lex $P576
+    .const 'Sub' $P548 = "134_1275811487.95429" 
+    capture_lex $P548
+    .const 'Sub' $P539 = "132_1275811487.95429" 
+    capture_lex $P539
+    .const 'Sub' $P532 = "130_1275811487.95429" 
+    capture_lex $P532
+    .const 'Sub' $P523 = "126_1275811487.95429" 
+    capture_lex $P523
+    .const 'Sub' $P518 = "124_1275811487.95429" 
+    capture_lex $P518
+    .const 'Sub' $P506 = "122_1275811487.95429" 
+    capture_lex $P506
+    .const 'Sub' $P494 = "120_1275811487.95429" 
+    capture_lex $P494
+    .const 'Sub' $P486 = "118_1275811487.95429" 
+    capture_lex $P486
+    .const 'Sub' $P481 = "116_1275811487.95429" 
+    capture_lex $P481
+    .const 'Sub' $P475 = "114_1275811487.95429" 
+    capture_lex $P475
+    .const 'Sub' $P469 = "112_1275811487.95429" 
+    capture_lex $P469
+    .const 'Sub' $P459 = "109_1275811487.95429" 
+    capture_lex $P459
+    .const 'Sub' $P453 = "107_1275811487.95429" 
+    capture_lex $P453
+    .const 'Sub' $P447 = "105_1275811487.95429" 
+    capture_lex $P447
+    .const 'Sub' $P441 = "103_1275811487.95429" 
+    capture_lex $P441
+    .const 'Sub' $P435 = "101_1275811487.95429" 
+    capture_lex $P435
+    .const 'Sub' $P429 = "99_1275811487.95429" 
+    capture_lex $P429
+    .const 'Sub' $P423 = "97_1275811487.95429" 
+    capture_lex $P423
+    .const 'Sub' $P414 = "95_1275811487.95429" 
+    capture_lex $P414
+    .const 'Sub' $P405 = "93_1275811487.95429" 
+    capture_lex $P405
+    .const 'Sub' $P392 = "89_1275811487.95429" 
+    capture_lex $P392
+    .const 'Sub' $P383 = "87_1275811487.95429" 
+    capture_lex $P383
+    .const 'Sub' $P373 = "83_1275811487.95429" 
+    capture_lex $P373
+    .const 'Sub' $P366 = "81_1275811487.95429" 
+    capture_lex $P366
+    .const 'Sub' $P359 = "79_1275811487.95429" 
+    capture_lex $P359
+    .const 'Sub' $P347 = "75_1275811487.95429" 
+    capture_lex $P347
+    .const 'Sub' $P339 = "73_1275811487.95429" 
+    capture_lex $P339
+    .const 'Sub' $P331 = "71_1275811487.95429" 
+    capture_lex $P331
+    .const 'Sub' $P311 = "69_1275811487.95429" 
+    capture_lex $P311
+    .const 'Sub' $P302 = "67_1275811487.95429" 
     capture_lex $P302
-    .const 'Sub' $P293 = "65_1274022894.43745" 
-    capture_lex $P293
-    .const 'Sub' $P275 = "62_1274022894.43745" 
-    capture_lex $P275
-    .const 'Sub' $P255 = "60_1274022894.43745" 
+    .const 'Sub' $P284 = "64_1275811487.95429" 
+    capture_lex $P284
+    .const 'Sub' $P264 = "62_1275811487.95429" 
+    capture_lex $P264
+    .const 'Sub' $P255 = "58_1275811487.95429" 
     capture_lex $P255
-    .const 'Sub' $P246 = "56_1274022894.43745" 
-    capture_lex $P246
-    .const 'Sub' $P241 = "54_1274022894.43745" 
+    .const 'Sub' $P250 = "56_1275811487.95429" 
+    capture_lex $P250
+    .const 'Sub' $P241 = "52_1275811487.95429" 
     capture_lex $P241
-    .const 'Sub' $P232 = "50_1274022894.43745" 
-    capture_lex $P232
-    .const 'Sub' $P227 = "48_1274022894.43745" 
-    capture_lex $P227
-    .const 'Sub' $P219 = "46_1274022894.43745" 
-    capture_lex $P219
-    .const 'Sub' $P212 = "44_1274022894.43745" 
-    capture_lex $P212
-    .const 'Sub' $P206 = "42_1274022894.43745" 
-    capture_lex $P206
-    .const 'Sub' $P198 = "40_1274022894.43745" 
-    capture_lex $P198
-    .const 'Sub' $P192 = "38_1274022894.43745" 
-    capture_lex $P192
-    .const 'Sub' $P186 = "36_1274022894.43745" 
-    capture_lex $P186
-    .const 'Sub' $P170 = "33_1274022894.43745" 
-    capture_lex $P170
-    .const 'Sub' $P157 = "31_1274022894.43745" 
-    capture_lex $P157
-    .const 'Sub' $P150 = "29_1274022894.43745" 
-    capture_lex $P150
-    .const 'Sub' $P100 = "26_1274022894.43745" 
-    capture_lex $P100
-    .const 'Sub' $P82 = "23_1274022894.43745" 
-    capture_lex $P82
-    .const 'Sub' $P68 = "21_1274022894.43745" 
-    capture_lex $P68
-    .const 'Sub' $P54 = "19_1274022894.43745" 
-    capture_lex $P54
-    .const 'Sub' $P46 = "17_1274022894.43745" 
-    capture_lex $P46
-    .const 'Sub' $P39 = "15_1274022894.43745" 
-    capture_lex $P39
-    .const 'Sub' $P33 = "13_1274022894.43745" 
-    capture_lex $P33
-    .const 'Sub' $P15 = "12_1274022894.43745" 
+    .const 'Sub' $P236 = "50_1275811487.95429" 
+    capture_lex $P236
+    .const 'Sub' $P231 = "48_1275811487.95429" 
+    capture_lex $P231
+    .const 'Sub' $P223 = "46_1275811487.95429" 
+    capture_lex $P223
+    .const 'Sub' $P216 = "44_1275811487.95429" 
+    capture_lex $P216
+    .const 'Sub' $P210 = "42_1275811487.95429" 
+    capture_lex $P210
+    .const 'Sub' $P202 = "40_1275811487.95429" 
+    capture_lex $P202
+    .const 'Sub' $P196 = "38_1275811487.95429" 
+    capture_lex $P196
+    .const 'Sub' $P190 = "36_1275811487.95429" 
+    capture_lex $P190
+    .const 'Sub' $P174 = "33_1275811487.95429" 
+    capture_lex $P174
+    .const 'Sub' $P159 = "31_1275811487.95429" 
+    capture_lex $P159
+    .const 'Sub' $P152 = "29_1275811487.95429" 
+    capture_lex $P152
+    .const 'Sub' $P102 = "26_1275811487.95429" 
+    capture_lex $P102
+    .const 'Sub' $P84 = "23_1275811487.95429" 
+    capture_lex $P84
+    .const 'Sub' $P70 = "21_1275811487.95429" 
+    capture_lex $P70
+    .const 'Sub' $P56 = "19_1275811487.95429" 
+    capture_lex $P56
+    .const 'Sub' $P48 = "17_1275811487.95429" 
+    capture_lex $P48
+    .const 'Sub' $P41 = "15_1275811487.95429" 
+    capture_lex $P41
+    .const 'Sub' $P35 = "13_1275811487.95429" 
+    capture_lex $P35
+    .const 'Sub' $P15 = "12_1275811487.95429" 
     capture_lex $P15
-.annotate 'line', 548
-    get_hll_global $P1290, ["NQP";"Regex"], "_block1289" 
-    capture_lex $P1290
-    $P1329 = $P1290()
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
+.annotate 'line', 563
+    get_hll_global $P1340, ["NQP";"Regex"], "_block1339" 
+    capture_lex $P1340
+    $P1403 = $P1340()
 .annotate 'line', 4
-    .return ($P1329)
-    .const 'Sub' $P1331 = "343_1274022894.43745" 
-    .return ($P1331)
+    .return ($P1403)
+    .const 'Sub' $P1405 = "362_1275811487.95429" 
+    .return ($P1405)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "" :load :init :subid("post346") :outer("11_1274022894.43745")
+.sub "" :load :init :subid("post365") :outer("11_1275811487.95429")
 .annotate 'line', 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     .local pmc block
     set block, $P14
-.annotate 'line', 432
-    get_hll_global $P1334, ["NQP"], "Grammar"
-    $P1334."O"(":prec<y=>, :assoc<unary>", "%methodop")
-.annotate 'line', 433
-    get_hll_global $P1335, ["NQP"], "Grammar"
-    $P1335."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
-.annotate 'line', 434
-    get_hll_global $P1336, ["NQP"], "Grammar"
-    $P1336."O"(":prec<w=>, :assoc<left>", "%exponentiation")
-.annotate 'line', 435
-    get_hll_global $P1337, ["NQP"], "Grammar"
-    $P1337."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
-.annotate 'line', 436
-    get_hll_global $P1338, ["NQP"], "Grammar"
-    $P1338."O"(":prec<u=>, :assoc<left>", "%multiplicative")
-.annotate 'line', 437
-    get_hll_global $P1339, ["NQP"], "Grammar"
-    $P1339."O"(":prec<t=>, :assoc<left>", "%additive")
-.annotate 'line', 438
-    get_hll_global $P1340, ["NQP"], "Grammar"
-    $P1340."O"(":prec<r=>, :assoc<left>", "%concatenation")
-.annotate 'line', 439
-    get_hll_global $P1341, ["NQP"], "Grammar"
-    $P1341."O"(":prec<m=>, :assoc<left>", "%relational")
-.annotate 'line', 440
-    get_hll_global $P1342, ["NQP"], "Grammar"
-    $P1342."O"(":prec<l=>, :assoc<left>", "%tight_and")
-.annotate 'line', 441
-    get_hll_global $P1343, ["NQP"], "Grammar"
-    $P1343."O"(":prec<k=>, :assoc<left>", "%tight_or")
-.annotate 'line', 442
-    get_hll_global $P1344, ["NQP"], "Grammar"
-    $P1344."O"(":prec<j=>, :assoc<right>", "%conditional")
-.annotate 'line', 443
-    get_hll_global $P1345, ["NQP"], "Grammar"
-    $P1345."O"(":prec<i=>, :assoc<right>", "%assignment")
-.annotate 'line', 444
-    get_hll_global $P1346, ["NQP"], "Grammar"
-    $P1346."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
-.annotate 'line', 445
-    get_hll_global $P1347, ["NQP"], "Grammar"
-    $P1347."O"(":prec<f=>, :assoc<list>", "%list_infix")
+.annotate 'line', 447
+    get_hll_global $P1408, ["NQP"], "Grammar"
+    $P1408."O"(":prec<y=>, :assoc<unary>", "%methodop")
+.annotate 'line', 448
+    get_hll_global $P1409, ["NQP"], "Grammar"
+    $P1409."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
+.annotate 'line', 449
+    get_hll_global $P1410, ["NQP"], "Grammar"
+    $P1410."O"(":prec<w=>, :assoc<left>", "%exponentiation")
+.annotate 'line', 450
+    get_hll_global $P1411, ["NQP"], "Grammar"
+    $P1411."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
+.annotate 'line', 451
+    get_hll_global $P1412, ["NQP"], "Grammar"
+    $P1412."O"(":prec<u=>, :assoc<left>", "%multiplicative")
+.annotate 'line', 452
+    get_hll_global $P1413, ["NQP"], "Grammar"
+    $P1413."O"(":prec<t=>, :assoc<left>", "%additive")
+.annotate 'line', 453
+    get_hll_global $P1414, ["NQP"], "Grammar"
+    $P1414."O"(":prec<r=>, :assoc<left>", "%concatenation")
+.annotate 'line', 454
+    get_hll_global $P1415, ["NQP"], "Grammar"
+    $P1415."O"(":prec<m=>, :assoc<left>", "%relational")
+.annotate 'line', 455
+    get_hll_global $P1416, ["NQP"], "Grammar"
+    $P1416."O"(":prec<l=>, :assoc<left>", "%tight_and")
+.annotate 'line', 456
+    get_hll_global $P1417, ["NQP"], "Grammar"
+    $P1417."O"(":prec<k=>, :assoc<left>", "%tight_or")
+.annotate 'line', 457
+    get_hll_global $P1418, ["NQP"], "Grammar"
+    $P1418."O"(":prec<j=>, :assoc<right>", "%conditional")
+.annotate 'line', 458
+    get_hll_global $P1419, ["NQP"], "Grammar"
+    $P1419."O"(":prec<i=>, :assoc<right>", "%assignment")
+.annotate 'line', 459
+    get_hll_global $P1420, ["NQP"], "Grammar"
+    $P1420."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+.annotate 'line', 460
+    get_hll_global $P1421, ["NQP"], "Grammar"
+    $P1421."O"(":prec<f=>, :assoc<list>", "%list_infix")
+.annotate 'line', 461
+    get_hll_global $P1422, ["NQP"], "Grammar"
+    $P1422."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
 .annotate 'line', 446
-    get_hll_global $P1348, ["NQP"], "Grammar"
-    $P1348."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
-.annotate 'line', 431
-    $P1349 = get_root_global ["parrot"], "P6metaclass"
-    $P1349."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
+    $P1423 = get_root_global ["parrot"], "P6metaclass"
+    $P1423."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "TOP"  :subid("12_1274022894.43745") :method :outer("11_1274022894.43745")
+.include "except_types.pasm"
+.sub "TOP"  :subid("12_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
-    $P17."handle_types"(57)
+    $P17."handle_types"(.CONTROL_RETURN)
     push_eh $P17
     .lex "self", self
 .annotate 'line', 5
@@ -424,2662 +446,2682 @@
 .annotate 'line', 10
     new $P19, "Undef"
     .lex "$*SCOPE", $P19
+.annotate 'line', 11
+    new $P20, "Undef"
+    .lex "$*MULTINESS", $P20
 .annotate 'line', 4
-    find_lex $P20, "%*LANG"
-    unless_null $P20, vivify_347
-    get_hll_global $P20, "%LANG"
-    unless_null $P20, vivify_348
+    find_lex $P21, "%*LANG"
+    unless_null $P21, vivify_366
+    get_hll_global $P21, "%LANG"
+    unless_null $P21, vivify_367
     die "Contextual %*LANG not found"
-  vivify_348:
-  vivify_347:
+  vivify_367:
+  vivify_366:
 .annotate 'line', 6
-    get_hll_global $P21, ["NQP"], "Regex"
-    find_lex $P22, "%*LANG"
-    unless_null $P22, vivify_349
-    get_hll_global $P22, "%LANG"
-    unless_null $P22, vivify_350
+    get_hll_global $P22, ["NQP"], "Regex"
+    find_lex $P23, "%*LANG"
+    unless_null $P23, vivify_368
+    get_hll_global $P23, "%LANG"
+    unless_null $P23, vivify_369
     die "Contextual %*LANG not found"
-  vivify_350:
-    store_lex "%*LANG", $P22
-  vivify_349:
-    set $P22["Regex"], $P21
+  vivify_369:
+    store_lex "%*LANG", $P23
+  vivify_368:
+    set $P23["Regex"], $P22
 .annotate 'line', 7
-    get_hll_global $P23, ["NQP"], "RegexActions"
-    find_lex $P24, "%*LANG"
-    unless_null $P24, vivify_351
-    get_hll_global $P24, "%LANG"
-    unless_null $P24, vivify_352
+    get_hll_global $P24, ["NQP"], "RegexActions"
+    find_lex $P25, "%*LANG"
+    unless_null $P25, vivify_370
+    get_hll_global $P25, "%LANG"
+    unless_null $P25, vivify_371
     die "Contextual %*LANG not found"
-  vivify_352:
-    store_lex "%*LANG", $P24
-  vivify_351:
-    set $P24["Regex-actions"], $P23
+  vivify_371:
+    store_lex "%*LANG", $P25
+  vivify_370:
+    set $P25["Regex-actions"], $P24
 .annotate 'line', 8
-    get_hll_global $P25, ["NQP"], "Grammar"
-    find_lex $P26, "%*LANG"
-    unless_null $P26, vivify_353
-    get_hll_global $P26, "%LANG"
-    unless_null $P26, vivify_354
+    get_hll_global $P26, ["NQP"], "Grammar"
+    find_lex $P27, "%*LANG"
+    unless_null $P27, vivify_372
+    get_hll_global $P27, "%LANG"
+    unless_null $P27, vivify_373
     die "Contextual %*LANG not found"
-  vivify_354:
-    store_lex "%*LANG", $P26
-  vivify_353:
-    set $P26["MAIN"], $P25
+  vivify_373:
+    store_lex "%*LANG", $P27
+  vivify_372:
+    set $P27["MAIN"], $P26
 .annotate 'line', 9
-    get_hll_global $P27, ["NQP"], "Actions"
-    find_lex $P28, "%*LANG"
-    unless_null $P28, vivify_355
-    get_hll_global $P28, "%LANG"
-    unless_null $P28, vivify_356
+    get_hll_global $P28, ["NQP"], "Actions"
+    find_lex $P29, "%*LANG"
+    unless_null $P29, vivify_374
+    get_hll_global $P29, "%LANG"
+    unless_null $P29, vivify_375
     die "Contextual %*LANG not found"
-  vivify_356:
-    store_lex "%*LANG", $P28
-  vivify_355:
-    set $P28["MAIN-actions"], $P27
+  vivify_375:
+    store_lex "%*LANG", $P29
+  vivify_374:
+    set $P29["MAIN-actions"], $P28
 .annotate 'line', 10
-    new $P29, "String"
-    assign $P29, ""
-    store_lex "$*SCOPE", $P29
+    new $P30, "String"
+    assign $P30, ""
+    store_lex "$*SCOPE", $P30
 .annotate 'line', 11
-    find_lex $P30, "self"
-    $P31 = $P30."comp_unit"()
+    new $P31, "String"
+    assign $P31, ""
+    store_lex "$*MULTINESS", $P31
+.annotate 'line', 12
+    find_lex $P32, "self"
+    $P33 = $P32."comp_unit"()
 .annotate 'line', 4
-    .return ($P31)
+    .return ($P33)
   control_16:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P32, exception, "payload"
-    .return ($P32)
+    getattribute $P34, exception, "payload"
+    .return ($P34)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "identifier"  :subid("13_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "identifier"  :subid("13_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx34_tgt
-    .local int rx34_pos
-    .local int rx34_off
-    .local int rx34_eos
-    .local int rx34_rep
-    .local pmc rx34_cur
-    (rx34_cur, rx34_pos, rx34_tgt) = self."!cursor_start"()
-    rx34_cur."!cursor_debug"("START ", "identifier")
-    .lex unicode:"$\x{a2}", rx34_cur
-    .local pmc match
-    .lex "$/", match
-    length rx34_eos, rx34_tgt
-    set rx34_off, 0
-    lt rx34_pos, 2, rx34_start
-    sub rx34_off, rx34_pos, 1
-    substr rx34_tgt, rx34_tgt, rx34_off
-  rx34_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan38_done
-    goto rxscan38_scan
-  rxscan38_loop:
-    ($P10) = rx34_cur."from"()
-    inc $P10
-    set rx34_pos, $P10
-    ge rx34_pos, rx34_eos, rxscan38_done
-  rxscan38_scan:
-    set_addr $I10, rxscan38_loop
-    rx34_cur."!mark_push"(0, rx34_pos, $I10)
-  rxscan38_done:
-.annotate 'line', 16
+    .local string rx36_tgt
+    .local int rx36_pos
+    .local int rx36_off
+    .local int rx36_eos
+    .local int rx36_rep
+    .local pmc rx36_cur
+    (rx36_cur, rx36_pos, rx36_tgt) = self."!cursor_start"()
+    rx36_cur."!cursor_debug"("START ", "identifier")
+    .lex unicode:"$\x{a2}", rx36_cur
+    .local pmc match
+    .lex "$/", match
+    length rx36_eos, rx36_tgt
+    gt rx36_pos, rx36_eos, rx36_done
+    set rx36_off, 0
+    lt rx36_pos, 2, rx36_start
+    sub rx36_off, rx36_pos, 1
+    substr rx36_tgt, rx36_tgt, rx36_off
+  rx36_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan40_done
+    goto rxscan40_scan
+  rxscan40_loop:
+    ($P10) = rx36_cur."from"()
+    inc $P10
+    set rx36_pos, $P10
+    ge rx36_pos, rx36_eos, rxscan40_done
+  rxscan40_scan:
+    set_addr $I10, rxscan40_loop
+    rx36_cur."!mark_push"(0, rx36_pos, $I10)
+  rxscan40_done:
+.annotate 'line', 17
   # rx subrule "ident" subtype=capture negate=
-    rx34_cur."!cursor_pos"(rx34_pos)
-    $P10 = rx34_cur."ident"()
-    unless $P10, rx34_fail
-    rx34_cur."!mark_push"(0, -1, 0, $P10)
+    rx36_cur."!cursor_pos"(rx36_pos)
+    $P10 = rx36_cur."ident"()
+    unless $P10, rx36_fail
+    rx36_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("ident")
-    rx34_pos = $P10."pos"()
+    rx36_pos = $P10."pos"()
   # rx pass
-    rx34_cur."!cursor_pass"(rx34_pos, "identifier")
-    rx34_cur."!cursor_debug"("PASS  ", "identifier", " at pos=", rx34_pos)
-    .return (rx34_cur)
-  rx34_fail:
+    rx36_cur."!cursor_pass"(rx36_pos, "identifier")
+    rx36_cur."!cursor_debug"("PASS  ", "identifier", " at pos=", rx36_pos)
+    .return (rx36_cur)
+  rx36_fail:
 .annotate 'line', 4
-    (rx34_rep, rx34_pos, $I10, $P10) = rx34_cur."!mark_fail"(0)
-    lt rx34_pos, -1, rx34_done
-    eq rx34_pos, -1, rx34_fail
+    (rx36_rep, rx36_pos, $I10, $P10) = rx36_cur."!mark_fail"(0)
+    lt rx36_pos, -1, rx36_done
+    eq rx36_pos, -1, rx36_fail
     jump $I10
-  rx34_done:
-    rx34_cur."!cursor_fail"()
-    rx34_cur."!cursor_debug"("FAIL  ", "identifier")
-    .return (rx34_cur)
+  rx36_done:
+    rx36_cur."!cursor_fail"()
+    rx36_cur."!cursor_debug"("FAIL  ", "identifier")
+    .return (rx36_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("14_1274022894.43745") :method
+.sub "!PREFIX__identifier"  :subid("14_1275811487.95429") :method
 .annotate 'line', 4
-    $P36 = self."!PREFIX__!subrule"("ident", "")
-    new $P37, "ResizablePMCArray"
-    push $P37, $P36
-    .return ($P37)
+    $P38 = self."!PREFIX__!subrule"("ident", "")
+    new $P39, "ResizablePMCArray"
+    push $P39, $P38
+    .return ($P39)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "name"  :subid("15_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "name"  :subid("15_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx40_tgt
-    .local int rx40_pos
-    .local int rx40_off
-    .local int rx40_eos
-    .local int rx40_rep
-    .local pmc rx40_cur
-    (rx40_cur, rx40_pos, rx40_tgt) = self."!cursor_start"()
-    rx40_cur."!cursor_debug"("START ", "name")
-    rx40_cur."!cursor_caparray"("identifier")
-    .lex unicode:"$\x{a2}", rx40_cur
+    .local string rx42_tgt
+    .local int rx42_pos
+    .local int rx42_off
+    .local int rx42_eos
+    .local int rx42_rep
+    .local pmc rx42_cur
+    (rx42_cur, rx42_pos, rx42_tgt) = self."!cursor_start"()
+    rx42_cur."!cursor_debug"("START ", "name")
+    rx42_cur."!cursor_caparray"("identifier")
+    .lex unicode:"$\x{a2}", rx42_cur
     .local pmc match
     .lex "$/", match
-    length rx40_eos, rx40_tgt
-    set rx40_off, 0
-    lt rx40_pos, 2, rx40_start
-    sub rx40_off, rx40_pos, 1
-    substr rx40_tgt, rx40_tgt, rx40_off
-  rx40_start:
+    length rx42_eos, rx42_tgt
+    gt rx42_pos, rx42_eos, rx42_done
+    set rx42_off, 0
+    lt rx42_pos, 2, rx42_start
+    sub rx42_off, rx42_pos, 1
+    substr rx42_tgt, rx42_tgt, rx42_off
+  rx42_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan43_done
-    goto rxscan43_scan
-  rxscan43_loop:
-    ($P10) = rx40_cur."from"()
+    ne $I10, -1, rxscan45_done
+    goto rxscan45_scan
+  rxscan45_loop:
+    ($P10) = rx42_cur."from"()
     inc $P10
-    set rx40_pos, $P10
-    ge rx40_pos, rx40_eos, rxscan43_done
-  rxscan43_scan:
-    set_addr $I10, rxscan43_loop
-    rx40_cur."!mark_push"(0, rx40_pos, $I10)
-  rxscan43_done:
-.annotate 'line', 18
-  # rx rxquantr44 ** 1..*
-    set_addr $I45, rxquantr44_done
-    rx40_cur."!mark_push"(0, -1, $I45)
-  rxquantr44_loop:
+    set rx42_pos, $P10
+    ge rx42_pos, rx42_eos, rxscan45_done
+  rxscan45_scan:
+    set_addr $I10, rxscan45_loop
+    rx42_cur."!mark_push"(0, rx42_pos, $I10)
+  rxscan45_done:
+.annotate 'line', 19
+  # rx rxquantr46 ** 1..*
+    set_addr $I47, rxquantr46_done
+    rx42_cur."!mark_push"(0, -1, $I47)
+  rxquantr46_loop:
   # rx subrule "identifier" subtype=capture negate=
-    rx40_cur."!cursor_pos"(rx40_pos)
-    $P10 = rx40_cur."identifier"()
-    unless $P10, rx40_fail
-    rx40_cur."!mark_push"(0, -1, 0, $P10)
+    rx42_cur."!cursor_pos"(rx42_pos)
+    $P10 = rx42_cur."identifier"()
+    unless $P10, rx42_fail
+    rx42_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx40_pos = $P10."pos"()
-    (rx40_rep) = rx40_cur."!mark_commit"($I45)
-    rx40_cur."!mark_push"(rx40_rep, rx40_pos, $I45)
+    rx42_pos = $P10."pos"()
+    (rx42_rep) = rx42_cur."!mark_commit"($I47)
+    rx42_cur."!mark_push"(rx42_rep, rx42_pos, $I47)
   # rx literal  "::"
-    add $I11, rx40_pos, 2
-    gt $I11, rx40_eos, rx40_fail
-    sub $I11, rx40_pos, rx40_off
-    substr $S10, rx40_tgt, $I11, 2
-    ne $S10, "::", rx40_fail
-    add rx40_pos, 2
-    goto rxquantr44_loop
-  rxquantr44_done:
+    add $I11, rx42_pos, 2
+    gt $I11, rx42_eos, rx42_fail
+    sub $I11, rx42_pos, rx42_off
+    substr $S10, rx42_tgt, $I11, 2
+    ne $S10, "::", rx42_fail
+    add rx42_pos, 2
+    goto rxquantr46_loop
+  rxquantr46_done:
   # rx pass
-    rx40_cur."!cursor_pass"(rx40_pos, "name")
-    rx40_cur."!cursor_debug"("PASS  ", "name", " at pos=", rx40_pos)
-    .return (rx40_cur)
-  rx40_fail:
+    rx42_cur."!cursor_pass"(rx42_pos, "name")
+    rx42_cur."!cursor_debug"("PASS  ", "name", " at pos=", rx42_pos)
+    .return (rx42_cur)
+  rx42_fail:
 .annotate 'line', 4
-    (rx40_rep, rx40_pos, $I10, $P10) = rx40_cur."!mark_fail"(0)
-    lt rx40_pos, -1, rx40_done
-    eq rx40_pos, -1, rx40_fail
+    (rx42_rep, rx42_pos, $I10, $P10) = rx42_cur."!mark_fail"(0)
+    lt rx42_pos, -1, rx42_done
+    eq rx42_pos, -1, rx42_fail
     jump $I10
-  rx40_done:
-    rx40_cur."!cursor_fail"()
-    rx40_cur."!cursor_debug"("FAIL  ", "name")
-    .return (rx40_cur)
+  rx42_done:
+    rx42_cur."!cursor_fail"()
+    rx42_cur."!cursor_debug"("FAIL  ", "name")
+    .return (rx42_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__name"  :subid("16_1274022894.43745") :method
+.sub "!PREFIX__name"  :subid("16_1275811487.95429") :method
 .annotate 'line', 4
-    new $P42, "ResizablePMCArray"
-    push $P42, ""
-    .return ($P42)
+    new $P44, "ResizablePMCArray"
+    push $P44, ""
+    .return ($P44)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "deflongname"  :subid("17_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "deflongname"  :subid("17_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx47_tgt
-    .local int rx47_pos
-    .local int rx47_off
-    .local int rx47_eos
-    .local int rx47_rep
-    .local pmc rx47_cur
-    (rx47_cur, rx47_pos, rx47_tgt) = self."!cursor_start"()
-    rx47_cur."!cursor_debug"("START ", "deflongname")
-    rx47_cur."!cursor_caparray"("colonpair")
-    .lex unicode:"$\x{a2}", rx47_cur
+    .local string rx49_tgt
+    .local int rx49_pos
+    .local int rx49_off
+    .local int rx49_eos
+    .local int rx49_rep
+    .local pmc rx49_cur
+    (rx49_cur, rx49_pos, rx49_tgt) = self."!cursor_start"()
+    rx49_cur."!cursor_debug"("START ", "deflongname")
+    rx49_cur."!cursor_caparray"("colonpair")
+    .lex unicode:"$\x{a2}", rx49_cur
     .local pmc match
     .lex "$/", match
-    length rx47_eos, rx47_tgt
-    set rx47_off, 0
-    lt rx47_pos, 2, rx47_start
-    sub rx47_off, rx47_pos, 1
-    substr rx47_tgt, rx47_tgt, rx47_off
-  rx47_start:
+    length rx49_eos, rx49_tgt
+    gt rx49_pos, rx49_eos, rx49_done
+    set rx49_off, 0
+    lt rx49_pos, 2, rx49_start
+    sub rx49_off, rx49_pos, 1
+    substr rx49_tgt, rx49_tgt, rx49_off
+  rx49_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan51_done
-    goto rxscan51_scan
-  rxscan51_loop:
-    ($P10) = rx47_cur."from"()
+    ne $I10, -1, rxscan53_done
+    goto rxscan53_scan
+  rxscan53_loop:
+    ($P10) = rx49_cur."from"()
     inc $P10
-    set rx47_pos, $P10
-    ge rx47_pos, rx47_eos, rxscan51_done
-  rxscan51_scan:
-    set_addr $I10, rxscan51_loop
-    rx47_cur."!mark_push"(0, rx47_pos, $I10)
-  rxscan51_done:
-.annotate 'line', 21
+    set rx49_pos, $P10
+    ge rx49_pos, rx49_eos, rxscan53_done
+  rxscan53_scan:
+    set_addr $I10, rxscan53_loop
+    rx49_cur."!mark_push"(0, rx49_pos, $I10)
+  rxscan53_done:
+.annotate 'line', 22
   # rx subrule "identifier" subtype=capture negate=
-    rx47_cur."!cursor_pos"(rx47_pos)
-    $P10 = rx47_cur."identifier"()
-    unless $P10, rx47_fail
-    rx47_cur."!mark_push"(0, -1, 0, $P10)
+    rx49_cur."!cursor_pos"(rx49_pos)
+    $P10 = rx49_cur."identifier"()
+    unless $P10, rx49_fail
+    rx49_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx47_pos = $P10."pos"()
-  # rx rxquantr52 ** 0..1
-    set_addr $I53, rxquantr52_done
-    rx47_cur."!mark_push"(0, rx47_pos, $I53)
-  rxquantr52_loop:
+    rx49_pos = $P10."pos"()
+  # rx rxquantr54 ** 0..1
+    set_addr $I55, rxquantr54_done
+    rx49_cur."!mark_push"(0, rx49_pos, $I55)
+  rxquantr54_loop:
   # rx subrule "colonpair" subtype=capture negate=
-    rx47_cur."!cursor_pos"(rx47_pos)
-    $P10 = rx47_cur."colonpair"()
-    unless $P10, rx47_fail
-    rx47_cur."!mark_push"(0, -1, 0, $P10)
+    rx49_cur."!cursor_pos"(rx49_pos)
+    $P10 = rx49_cur."colonpair"()
+    unless $P10, rx49_fail
+    rx49_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("colonpair")
-    rx47_pos = $P10."pos"()
-    (rx47_rep) = rx47_cur."!mark_commit"($I53)
-  rxquantr52_done:
-.annotate 'line', 20
+    rx49_pos = $P10."pos"()
+    (rx49_rep) = rx49_cur."!mark_commit"($I55)
+  rxquantr54_done:
+.annotate 'line', 21
   # rx pass
-    rx47_cur."!cursor_pass"(rx47_pos, "deflongname")
-    rx47_cur."!cursor_debug"("PASS  ", "deflongname", " at pos=", rx47_pos)
-    .return (rx47_cur)
-  rx47_fail:
+    rx49_cur."!cursor_pass"(rx49_pos, "deflongname")
+    rx49_cur."!cursor_debug"("PASS  ", "deflongname", " at pos=", rx49_pos)
+    .return (rx49_cur)
+  rx49_fail:
 .annotate 'line', 4
-    (rx47_rep, rx47_pos, $I10, $P10) = rx47_cur."!mark_fail"(0)
-    lt rx47_pos, -1, rx47_done
-    eq rx47_pos, -1, rx47_fail
+    (rx49_rep, rx49_pos, $I10, $P10) = rx49_cur."!mark_fail"(0)
+    lt rx49_pos, -1, rx49_done
+    eq rx49_pos, -1, rx49_fail
     jump $I10
-  rx47_done:
-    rx47_cur."!cursor_fail"()
-    rx47_cur."!cursor_debug"("FAIL  ", "deflongname")
-    .return (rx47_cur)
+  rx49_done:
+    rx49_cur."!cursor_fail"()
+    rx49_cur."!cursor_debug"("FAIL  ", "deflongname")
+    .return (rx49_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__deflongname"  :subid("18_1274022894.43745") :method
+.sub "!PREFIX__deflongname"  :subid("18_1275811487.95429") :method
 .annotate 'line', 4
-    $P49 = self."!PREFIX__!subrule"("identifier", "")
-    new $P50, "ResizablePMCArray"
-    push $P50, $P49
-    .return ($P50)
+    $P51 = self."!PREFIX__!subrule"("identifier", "")
+    new $P52, "ResizablePMCArray"
+    push $P52, $P51
+    .return ($P52)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ENDSTMT"  :subid("19_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "ENDSTMT"  :subid("19_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx55_tgt
-    .local int rx55_pos
-    .local int rx55_off
-    .local int rx55_eos
-    .local int rx55_rep
-    .local pmc rx55_cur
-    (rx55_cur, rx55_pos, rx55_tgt) = self."!cursor_start"()
-    rx55_cur."!cursor_debug"("START ", "ENDSTMT")
-    .lex unicode:"$\x{a2}", rx55_cur
+    .local string rx57_tgt
+    .local int rx57_pos
+    .local int rx57_off
+    .local int rx57_eos
+    .local int rx57_rep
+    .local pmc rx57_cur
+    (rx57_cur, rx57_pos, rx57_tgt) = self."!cursor_start"()
+    rx57_cur."!cursor_debug"("START ", "ENDSTMT")
+    .lex unicode:"$\x{a2}", rx57_cur
     .local pmc match
     .lex "$/", match
-    length rx55_eos, rx55_tgt
-    set rx55_off, 0
-    lt rx55_pos, 2, rx55_start
-    sub rx55_off, rx55_pos, 1
-    substr rx55_tgt, rx55_tgt, rx55_off
-  rx55_start:
+    length rx57_eos, rx57_tgt
+    gt rx57_pos, rx57_eos, rx57_done
+    set rx57_off, 0
+    lt rx57_pos, 2, rx57_start
+    sub rx57_off, rx57_pos, 1
+    substr rx57_tgt, rx57_tgt, rx57_off
+  rx57_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan58_done
-    goto rxscan58_scan
-  rxscan58_loop:
-    ($P10) = rx55_cur."from"()
+    ne $I10, -1, rxscan60_done
+    goto rxscan60_scan
+  rxscan60_loop:
+    ($P10) = rx57_cur."from"()
     inc $P10
-    set rx55_pos, $P10
-    ge rx55_pos, rx55_eos, rxscan58_done
-  rxscan58_scan:
-    set_addr $I10, rxscan58_loop
-    rx55_cur."!mark_push"(0, rx55_pos, $I10)
-  rxscan58_done:
-.annotate 'line', 28
-  # rx rxquantr59 ** 0..1
-    set_addr $I67, rxquantr59_done
-    rx55_cur."!mark_push"(0, rx55_pos, $I67)
-  rxquantr59_loop:
-  alt60_0:
-.annotate 'line', 25
-    set_addr $I10, alt60_1
-    rx55_cur."!mark_push"(0, rx55_pos, $I10)
-.annotate 'line', 26
-  # rx rxquantr61 ** 0..*
-    set_addr $I62, rxquantr61_done
-    rx55_cur."!mark_push"(0, rx55_pos, $I62)
+    set rx57_pos, $P10
+    ge rx57_pos, rx57_eos, rxscan60_done
+  rxscan60_scan:
+    set_addr $I10, rxscan60_loop
+    rx57_cur."!mark_push"(0, rx57_pos, $I10)
+  rxscan60_done:
+.annotate 'line', 29
+  # rx rxquantr61 ** 0..1
+    set_addr $I69, rxquantr61_done
+    rx57_cur."!mark_push"(0, rx57_pos, $I69)
   rxquantr61_loop:
+  alt62_0:
+.annotate 'line', 26
+    set_addr $I10, alt62_1
+    rx57_cur."!mark_push"(0, rx57_pos, $I10)
+.annotate 'line', 27
+  # rx rxquantr63 ** 0..*
+    set_addr $I64, rxquantr63_done
+    rx57_cur."!mark_push"(0, rx57_pos, $I64)
+  rxquantr63_loop:
   # rx enumcharlist negate=0 
-    ge rx55_pos, rx55_eos, rx55_fail
-    sub $I10, rx55_pos, rx55_off
-    substr $S10, rx55_tgt, $I10, 1
+    ge rx57_pos, rx57_eos, rx57_fail
+    sub $I10, rx57_pos, rx57_off
+    substr $S10, rx57_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx55_fail
-    inc rx55_pos
-    (rx55_rep) = rx55_cur."!mark_commit"($I62)
-    rx55_cur."!mark_push"(rx55_rep, rx55_pos, $I62)
-    goto rxquantr61_loop
-  rxquantr61_done:
+    lt $I11, 0, rx57_fail
+    inc rx57_pos
+    (rx57_rep) = rx57_cur."!mark_commit"($I64)
+    rx57_cur."!mark_push"(rx57_rep, rx57_pos, $I64)
+    goto rxquantr63_loop
+  rxquantr63_done:
   # rxanchor eol
-    sub $I10, rx55_pos, rx55_off
-    is_cclass $I11, 4096, rx55_tgt, $I10
-    if $I11, rxanchor63_done
-    ne rx55_pos, rx55_eos, rx55_fail
-    eq rx55_pos, 0, rxanchor63_done
+    sub $I10, rx57_pos, rx57_off
+    is_cclass $I11, 4096, rx57_tgt, $I10
+    if $I11, rxanchor65_done
+    ne rx57_pos, rx57_eos, rx57_fail
+    eq rx57_pos, 0, rxanchor65_done
     dec $I10
-    is_cclass $I11, 4096, rx55_tgt, $I10
-    if $I11, rx55_fail
-  rxanchor63_done:
-  # rx subrule "ws" subtype=method negate=
-    rx55_cur."!cursor_pos"(rx55_pos)
-    $P10 = rx55_cur."ws"()
-    unless $P10, rx55_fail
-    rx55_pos = $P10."pos"()
+    is_cclass $I11, 4096, rx57_tgt, $I10
+    if $I11, rx57_fail
+  rxanchor65_done:
+  # rx subrule "ws" subtype=method negate=
+    rx57_cur."!cursor_pos"(rx57_pos)
+    $P10 = rx57_cur."ws"()
+    unless $P10, rx57_fail
+    rx57_pos = $P10."pos"()
   # rx subrule "MARKER" subtype=zerowidth negate=
-    rx55_cur."!cursor_pos"(rx55_pos)
-    $P10 = rx55_cur."MARKER"("endstmt")
-    unless $P10, rx55_fail
-    goto alt60_end
-  alt60_1:
-.annotate 'line', 27
-  # rx rxquantr64 ** 0..1
-    set_addr $I65, rxquantr64_done
-    rx55_cur."!mark_push"(0, rx55_pos, $I65)
-  rxquantr64_loop:
+    rx57_cur."!cursor_pos"(rx57_pos)
+    $P10 = rx57_cur."MARKER"("endstmt")
+    unless $P10, rx57_fail
+    goto alt62_end
+  alt62_1:
+.annotate 'line', 28
+  # rx rxquantr66 ** 0..1
+    set_addr $I67, rxquantr66_done
+    rx57_cur."!mark_push"(0, rx57_pos, $I67)
+  rxquantr66_loop:
   # rx subrule "unv" subtype=method negate=
-    rx55_cur."!cursor_pos"(rx55_pos)
-    $P10 = rx55_cur."unv"()
-    unless $P10, rx55_fail
-    rx55_pos = $P10."pos"()
-    (rx55_rep) = rx55_cur."!mark_commit"($I65)
-  rxquantr64_done:
+    rx57_cur."!cursor_pos"(rx57_pos)
+    $P10 = rx57_cur."unv"()
+    unless $P10, rx57_fail
+    rx57_pos = $P10."pos"()
+    (rx57_rep) = rx57_cur."!mark_commit"($I67)
+  rxquantr66_done:
   # rxanchor eol
-    sub $I10, rx55_pos, rx55_off
-    is_cclass $I11, 4096, rx55_tgt, $I10
-    if $I11, rxanchor66_done
-    ne rx55_pos, rx55_eos, rx55_fail
-    eq rx55_pos, 0, rxanchor66_done
+    sub $I10, rx57_pos, rx57_off
+    is_cclass $I11, 4096, rx57_tgt, $I10
+    if $I11, rxanchor68_done
+    ne rx57_pos, rx57_eos, rx57_fail
+    eq rx57_pos, 0, rxanchor68_done
     dec $I10
-    is_cclass $I11, 4096, rx55_tgt, $I10
-    if $I11, rx55_fail
-  rxanchor66_done:
-  # rx subrule "ws" subtype=method negate=
-    rx55_cur."!cursor_pos"(rx55_pos)
-    $P10 = rx55_cur."ws"()
-    unless $P10, rx55_fail
-    rx55_pos = $P10."pos"()
+    is_cclass $I11, 4096, rx57_tgt, $I10
+    if $I11, rx57_fail
+  rxanchor68_done:
+  # rx subrule "ws" subtype=method negate=
+    rx57_cur."!cursor_pos"(rx57_pos)
+    $P10 = rx57_cur."ws"()
+    unless $P10, rx57_fail
+    rx57_pos = $P10."pos"()
   # rx subrule "MARKER" subtype=zerowidth negate=
-    rx55_cur."!cursor_pos"(rx55_pos)
-    $P10 = rx55_cur."MARKER"("endstmt")
-    unless $P10, rx55_fail
-  alt60_end:
-.annotate 'line', 28
-    (rx55_rep) = rx55_cur."!mark_commit"($I67)
-  rxquantr59_done:
-.annotate 'line', 24
+    rx57_cur."!cursor_pos"(rx57_pos)
+    $P10 = rx57_cur."MARKER"("endstmt")
+    unless $P10, rx57_fail
+  alt62_end:
+.annotate 'line', 29
+    (rx57_rep) = rx57_cur."!mark_commit"($I69)
+  rxquantr61_done:
+.annotate 'line', 25
   # rx pass
-    rx55_cur."!cursor_pass"(rx55_pos, "ENDSTMT")
-    rx55_cur."!cursor_debug"("PASS  ", "ENDSTMT", " at pos=", rx55_pos)
-    .return (rx55_cur)
-  rx55_fail:
+    rx57_cur."!cursor_pass"(rx57_pos, "ENDSTMT")
+    rx57_cur."!cursor_debug"("PASS  ", "ENDSTMT", " at pos=", rx57_pos)
+    .return (rx57_cur)
+  rx57_fail:
 .annotate 'line', 4
-    (rx55_rep, rx55_pos, $I10, $P10) = rx55_cur."!mark_fail"(0)
-    lt rx55_pos, -1, rx55_done
-    eq rx55_pos, -1, rx55_fail
+    (rx57_rep, rx57_pos, $I10, $P10) = rx57_cur."!mark_fail"(0)
+    lt rx57_pos, -1, rx57_done
+    eq rx57_pos, -1, rx57_fail
     jump $I10
-  rx55_done:
-    rx55_cur."!cursor_fail"()
-    rx55_cur."!cursor_debug"("FAIL  ", "ENDSTMT")
-    .return (rx55_cur)
+  rx57_done:
+    rx57_cur."!cursor_fail"()
+    rx57_cur."!cursor_debug"("FAIL  ", "ENDSTMT")
+    .return (rx57_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ENDSTMT"  :subid("20_1274022894.43745") :method
+.sub "!PREFIX__ENDSTMT"  :subid("20_1275811487.95429") :method
 .annotate 'line', 4
-    new $P57, "ResizablePMCArray"
-    push $P57, ""
-    .return ($P57)
+    new $P59, "ResizablePMCArray"
+    push $P59, ""
+    .return ($P59)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ws"  :subid("21_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "ws"  :subid("21_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx69_tgt
-    .local int rx69_pos
-    .local int rx69_off
-    .local int rx69_eos
-    .local int rx69_rep
-    .local pmc rx69_cur
-    (rx69_cur, rx69_pos, rx69_tgt) = self."!cursor_start"()
-    rx69_cur."!cursor_debug"("START ", "ws")
-    .lex unicode:"$\x{a2}", rx69_cur
-    .local pmc match
-    .lex "$/", match
-    length rx69_eos, rx69_tgt
-    set rx69_off, 0
-    lt rx69_pos, 2, rx69_start
-    sub rx69_off, rx69_pos, 1
-    substr rx69_tgt, rx69_tgt, rx69_off
-  rx69_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan72_done
-    goto rxscan72_scan
-  rxscan72_loop:
-    ($P10) = rx69_cur."from"()
-    inc $P10
-    set rx69_pos, $P10
-    ge rx69_pos, rx69_eos, rxscan72_done
-  rxscan72_scan:
-    set_addr $I10, rxscan72_loop
-    rx69_cur."!mark_push"(0, rx69_pos, $I10)
-  rxscan72_done:
-  alt73_0:
-.annotate 'line', 31
-    set_addr $I10, alt73_1
-    rx69_cur."!mark_push"(0, rx69_pos, $I10)
+    .local string rx71_tgt
+    .local int rx71_pos
+    .local int rx71_off
+    .local int rx71_eos
+    .local int rx71_rep
+    .local pmc rx71_cur
+    (rx71_cur, rx71_pos, rx71_tgt) = self."!cursor_start"()
+    rx71_cur."!cursor_debug"("START ", "ws")
+    .lex unicode:"$\x{a2}", rx71_cur
+    .local pmc match
+    .lex "$/", match
+    length rx71_eos, rx71_tgt
+    gt rx71_pos, rx71_eos, rx71_done
+    set rx71_off, 0
+    lt rx71_pos, 2, rx71_start
+    sub rx71_off, rx71_pos, 1
+    substr rx71_tgt, rx71_tgt, rx71_off
+  rx71_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan74_done
+    goto rxscan74_scan
+  rxscan74_loop:
+    ($P10) = rx71_cur."from"()
+    inc $P10
+    set rx71_pos, $P10
+    ge rx71_pos, rx71_eos, rxscan74_done
+  rxscan74_scan:
+    set_addr $I10, rxscan74_loop
+    rx71_cur."!mark_push"(0, rx71_pos, $I10)
+  rxscan74_done:
+  alt75_0:
 .annotate 'line', 32
-  # rx subrule "MARKED" subtype=zerowidth negate=
-    rx69_cur."!cursor_pos"(rx69_pos)
-    $P10 = rx69_cur."MARKED"("ws")
-    unless $P10, rx69_fail
-    goto alt73_end
-  alt73_1:
+    set_addr $I10, alt75_1
+    rx71_cur."!mark_push"(0, rx71_pos, $I10)
 .annotate 'line', 33
-  # rx subrule "ww" subtype=zerowidth negate=1
-    rx69_cur."!cursor_pos"(rx69_pos)
-    $P10 = rx69_cur."ww"()
-    if $P10, rx69_fail
-.annotate 'line', 38
-  # rx rxquantr74 ** 0..*
-    set_addr $I81, rxquantr74_done
-    rx69_cur."!mark_push"(0, rx69_pos, $I81)
-  rxquantr74_loop:
-  alt75_0:
+  # rx subrule "MARKED" subtype=zerowidth negate=
+    rx71_cur."!cursor_pos"(rx71_pos)
+    $P10 = rx71_cur."MARKED"("ws")
+    unless $P10, rx71_fail
+    goto alt75_end
+  alt75_1:
 .annotate 'line', 34
-    set_addr $I10, alt75_1
-    rx69_cur."!mark_push"(0, rx69_pos, $I10)
-  # rx rxquantr76 ** 1..*
-    set_addr $I77, rxquantr76_done
-    rx69_cur."!mark_push"(0, -1, $I77)
+  # rx subrule "ww" subtype=zerowidth negate=1
+    rx71_cur."!cursor_pos"(rx71_pos)
+    $P10 = rx71_cur."ww"()
+    if $P10, rx71_fail
+.annotate 'line', 39
+  # rx rxquantr76 ** 0..*
+    set_addr $I83, rxquantr76_done
+    rx71_cur."!mark_push"(0, rx71_pos, $I83)
   rxquantr76_loop:
+  alt77_0:
+.annotate 'line', 35
+    set_addr $I10, alt77_1
+    rx71_cur."!mark_push"(0, rx71_pos, $I10)
+  # rx rxquantr78 ** 1..*
+    set_addr $I79, rxquantr78_done
+    rx71_cur."!mark_push"(0, -1, $I79)
+  rxquantr78_loop:
   # rx enumcharlist negate=0 
-    ge rx69_pos, rx69_eos, rx69_fail
-    sub $I10, rx69_pos, rx69_off
-    substr $S10, rx69_tgt, $I10, 1
+    ge rx71_pos, rx71_eos, rx71_fail
+    sub $I10, rx71_pos, rx71_off
+    substr $S10, rx71_tgt, $I10, 1
     index $I11, unicode:"\n\x{b}\f\r\x{85}\u2028\u2029", $S10
-    lt $I11, 0, rx69_fail
-    inc rx69_pos
-    (rx69_rep) = rx69_cur."!mark_commit"($I77)
-    rx69_cur."!mark_push"(rx69_rep, rx69_pos, $I77)
-    goto rxquantr76_loop
-  rxquantr76_done:
-    goto alt75_end
-  alt75_1:
-    set_addr $I10, alt75_2
-    rx69_cur."!mark_push"(0, rx69_pos, $I10)
-.annotate 'line', 35
+    lt $I11, 0, rx71_fail
+    inc rx71_pos
+    (rx71_rep) = rx71_cur."!mark_commit"($I79)
+    rx71_cur."!mark_push"(rx71_rep, rx71_pos, $I79)
+    goto rxquantr78_loop
+  rxquantr78_done:
+    goto alt77_end
+  alt77_1:
+    set_addr $I10, alt77_2
+    rx71_cur."!mark_push"(0, rx71_pos, $I10)
+.annotate 'line', 36
   # rx literal  "#"
-    add $I11, rx69_pos, 1
-    gt $I11, rx69_eos, rx69_fail
-    sub $I11, rx69_pos, rx69_off
-    substr $S10, rx69_tgt, $I11, 1
-    ne $S10, "#", rx69_fail
-    add rx69_pos, 1
+    add $I11, rx71_pos, 1
+    gt $I11, rx71_eos, rx71_fail
+    sub $I11, rx71_pos, rx71_off
+    substr $S10, rx71_tgt, $I11, 1
+    ne $S10, "#", rx71_fail
+    add rx71_pos, 1
   # rx charclass_q N r 0..-1
-    sub $I10, rx69_pos, rx69_off
-    find_cclass $I11, 4096, rx69_tgt, $I10, rx69_eos
-    add rx69_pos, rx69_off, $I11
-    goto alt75_end
-  alt75_2:
-    set_addr $I10, alt75_3
-    rx69_cur."!mark_push"(0, rx69_pos, $I10)
-.annotate 'line', 36
+    sub $I10, rx71_pos, rx71_off
+    find_cclass $I11, 4096, rx71_tgt, $I10, rx71_eos
+    add rx71_pos, rx71_off, $I11
+    goto alt77_end
+  alt77_2:
+    set_addr $I10, alt77_3
+    rx71_cur."!mark_push"(0, rx71_pos, $I10)
+.annotate 'line', 37
   # rxanchor bol
-    eq rx69_pos, 0, rxanchor78_done
-    ge rx69_pos, rx69_eos, rx69_fail
-    sub $I10, rx69_pos, rx69_off
+    eq rx71_pos, 0, rxanchor80_done
+    ge rx71_pos, rx71_eos, rx71_fail
+    sub $I10, rx71_pos, rx71_off
     dec $I10
-    is_cclass $I11, 4096, rx69_tgt, $I10
-    unless $I11, rx69_fail
-  rxanchor78_done:
+    is_cclass $I11, 4096, rx71_tgt, $I10
+    unless $I11, rx71_fail
+  rxanchor80_done:
   # rx subrule "pod_comment" subtype=method negate=
-    rx69_cur."!cursor_pos"(rx69_pos)
-    $P10 = rx69_cur."pod_comment"()
-    unless $P10, rx69_fail
-    rx69_pos = $P10."pos"()
-    goto alt75_end
-  alt75_3:
-.annotate 'line', 37
-  # rx rxquantr79 ** 1..*
-    set_addr $I80, rxquantr79_done
-    rx69_cur."!mark_push"(0, -1, $I80)
-  rxquantr79_loop:
+    rx71_cur."!cursor_pos"(rx71_pos)
+    $P10 = rx71_cur."pod_comment"()
+    unless $P10, rx71_fail
+    rx71_pos = $P10."pos"()
+    goto alt77_end
+  alt77_3:
+.annotate 'line', 38
+  # rx rxquantr81 ** 1..*
+    set_addr $I82, rxquantr81_done
+    rx71_cur."!mark_push"(0, -1, $I82)
+  rxquantr81_loop:
   # rx enumcharlist negate=0 
-    ge rx69_pos, rx69_eos, rx69_fail
-    sub $I10, rx69_pos, rx69_off
-    substr $S10, rx69_tgt, $I10, 1
+    ge rx71_pos, rx71_eos, rx71_fail
+    sub $I10, rx71_pos, rx71_off
+    substr $S10, rx71_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx69_fail
-    inc rx69_pos
-    (rx69_rep) = rx69_cur."!mark_commit"($I80)
-    rx69_cur."!mark_push"(rx69_rep, rx69_pos, $I80)
-    goto rxquantr79_loop
-  rxquantr79_done:
-  alt75_end:
-.annotate 'line', 38
-    (rx69_rep) = rx69_cur."!mark_commit"($I81)
-    rx69_cur."!mark_push"(rx69_rep, rx69_pos, $I81)
-    goto rxquantr74_loop
-  rxquantr74_done:
+    lt $I11, 0, rx71_fail
+    inc rx71_pos
+    (rx71_rep) = rx71_cur."!mark_commit"($I82)
+    rx71_cur."!mark_push"(rx71_rep, rx71_pos, $I82)
+    goto rxquantr81_loop
+  rxquantr81_done:
+  alt77_end:
 .annotate 'line', 39
+    (rx71_rep) = rx71_cur."!mark_commit"($I83)
+    rx71_cur."!mark_push"(rx71_rep, rx71_pos, $I83)
+    goto rxquantr76_loop
+  rxquantr76_done:
+.annotate 'line', 40
   # rx subrule "MARKER" subtype=zerowidth negate=
-    rx69_cur."!cursor_pos"(rx69_pos)
-    $P10 = rx69_cur."MARKER"("ws")
-    unless $P10, rx69_fail
-  alt73_end:
-.annotate 'line', 31
+    rx71_cur."!cursor_pos"(rx71_pos)
+    $P10 = rx71_cur."MARKER"("ws")
+    unless $P10, rx71_fail
+  alt75_end:
+.annotate 'line', 32
   # rx pass
-    rx69_cur."!cursor_pass"(rx69_pos, "ws")
-    rx69_cur."!cursor_debug"("PASS  ", "ws", " at pos=", rx69_pos)
-    .return (rx69_cur)
-  rx69_fail:
+    rx71_cur."!cursor_pass"(rx71_pos, "ws")
+    rx71_cur."!cursor_debug"("PASS  ", "ws", " at pos=", rx71_pos)
+    .return (rx71_cur)
+  rx71_fail:
 .annotate 'line', 4
-    (rx69_rep, rx69_pos, $I10, $P10) = rx69_cur."!mark_fail"(0)
-    lt rx69_pos, -1, rx69_done
-    eq rx69_pos, -1, rx69_fail
+    (rx71_rep, rx71_pos, $I10, $P10) = rx71_cur."!mark_fail"(0)
+    lt rx71_pos, -1, rx71_done
+    eq rx71_pos, -1, rx71_fail
     jump $I10
-  rx69_done:
-    rx69_cur."!cursor_fail"()
-    rx69_cur."!cursor_debug"("FAIL  ", "ws")
-    .return (rx69_cur)
+  rx71_done:
+    rx71_cur."!cursor_fail"()
+    rx71_cur."!cursor_debug"("FAIL  ", "ws")
+    .return (rx71_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ws"  :subid("22_1274022894.43745") :method
+.sub "!PREFIX__ws"  :subid("22_1275811487.95429") :method
 .annotate 'line', 4
-    new $P71, "ResizablePMCArray"
-    push $P71, ""
-    push $P71, ""
-    .return ($P71)
+    new $P73, "ResizablePMCArray"
+    push $P73, ""
+    push $P73, ""
+    .return ($P73)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "unv"  :subid("23_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "unv"  :subid("23_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .const 'Sub' $P90 = "25_1274022894.43745" 
-    capture_lex $P90
-    .local string rx83_tgt
-    .local int rx83_pos
-    .local int rx83_off
-    .local int rx83_eos
-    .local int rx83_rep
-    .local pmc rx83_cur
-    (rx83_cur, rx83_pos, rx83_tgt) = self."!cursor_start"()
-    rx83_cur."!cursor_debug"("START ", "unv")
-    .lex unicode:"$\x{a2}", rx83_cur
+    .const 'Sub' $P92 = "25_1275811487.95429" 
+    capture_lex $P92
+    .local string rx85_tgt
+    .local int rx85_pos
+    .local int rx85_off
+    .local int rx85_eos
+    .local int rx85_rep
+    .local pmc rx85_cur
+    (rx85_cur, rx85_pos, rx85_tgt) = self."!cursor_start"()
+    rx85_cur."!cursor_debug"("START ", "unv")
+    .lex unicode:"$\x{a2}", rx85_cur
     .local pmc match
     .lex "$/", match
-    length rx83_eos, rx83_tgt
-    set rx83_off, 0
-    lt rx83_pos, 2, rx83_start
-    sub rx83_off, rx83_pos, 1
-    substr rx83_tgt, rx83_tgt, rx83_off
-  rx83_start:
+    length rx85_eos, rx85_tgt
+    gt rx85_pos, rx85_eos, rx85_done
+    set rx85_off, 0
+    lt rx85_pos, 2, rx85_start
+    sub rx85_off, rx85_pos, 1
+    substr rx85_tgt, rx85_tgt, rx85_off
+  rx85_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan86_done
-    goto rxscan86_scan
-  rxscan86_loop:
-    ($P10) = rx83_cur."from"()
+    ne $I10, -1, rxscan88_done
+    goto rxscan88_scan
+  rxscan88_loop:
+    ($P10) = rx85_cur."from"()
     inc $P10
-    set rx83_pos, $P10
-    ge rx83_pos, rx83_eos, rxscan86_done
-  rxscan86_scan:
-    set_addr $I10, rxscan86_loop
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
-  rxscan86_done:
-  alt87_0:
-.annotate 'line', 44
-    set_addr $I10, alt87_1
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
+    set rx85_pos, $P10
+    ge rx85_pos, rx85_eos, rxscan88_done
+  rxscan88_scan:
+    set_addr $I10, rxscan88_loop
+    rx85_cur."!mark_push"(0, rx85_pos, $I10)
+  rxscan88_done:
+  alt89_0:
 .annotate 'line', 45
+    set_addr $I10, alt89_1
+    rx85_cur."!mark_push"(0, rx85_pos, $I10)
+.annotate 'line', 46
   # rxanchor bol
-    eq rx83_pos, 0, rxanchor88_done
-    ge rx83_pos, rx83_eos, rx83_fail
-    sub $I10, rx83_pos, rx83_off
+    eq rx85_pos, 0, rxanchor90_done
+    ge rx85_pos, rx85_eos, rx85_fail
+    sub $I10, rx85_pos, rx85_off
     dec $I10
-    is_cclass $I11, 4096, rx83_tgt, $I10
-    unless $I11, rx83_fail
-  rxanchor88_done:
+    is_cclass $I11, 4096, rx85_tgt, $I10
+    unless $I11, rx85_fail
+  rxanchor90_done:
   # rx subrule "before" subtype=zerowidth negate=
-    rx83_cur."!cursor_pos"(rx83_pos)
-    .const 'Sub' $P90 = "25_1274022894.43745" 
-    capture_lex $P90
-    $P10 = rx83_cur."before"($P90)
-    unless $P10, rx83_fail
+    rx85_cur."!cursor_pos"(rx85_pos)
+    .const 'Sub' $P92 = "25_1275811487.95429" 
+    capture_lex $P92
+    $P10 = rx85_cur."before"($P92)
+    unless $P10, rx85_fail
   # rx subrule "pod_comment" subtype=method negate=
-    rx83_cur."!cursor_pos"(rx83_pos)
-    $P10 = rx83_cur."pod_comment"()
-    unless $P10, rx83_fail
-    rx83_pos = $P10."pos"()
-    goto alt87_end
-  alt87_1:
-    set_addr $I10, alt87_2
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
-.annotate 'line', 46
-  # rx rxquantr96 ** 0..*
-    set_addr $I97, rxquantr96_done
-    rx83_cur."!mark_push"(0, rx83_pos, $I97)
-  rxquantr96_loop:
-  # rx enumcharlist negate=0 
-    ge rx83_pos, rx83_eos, rx83_fail
-    sub $I10, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I10, 1
-    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx83_fail
-    inc rx83_pos
-    (rx83_rep) = rx83_cur."!mark_commit"($I97)
-    rx83_cur."!mark_push"(rx83_rep, rx83_pos, $I97)
-    goto rxquantr96_loop
-  rxquantr96_done:
-  # rx literal  "#"
-    add $I11, rx83_pos, 1
-    gt $I11, rx83_eos, rx83_fail
-    sub $I11, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I11, 1
-    ne $S10, "#", rx83_fail
-    add rx83_pos, 1
-  # rx charclass_q N r 0..-1
-    sub $I10, rx83_pos, rx83_off
-    find_cclass $I11, 4096, rx83_tgt, $I10, rx83_eos
-    add rx83_pos, rx83_off, $I11
-    goto alt87_end
-  alt87_2:
+    rx85_cur."!cursor_pos"(rx85_pos)
+    $P10 = rx85_cur."pod_comment"()
+    unless $P10, rx85_fail
+    rx85_pos = $P10."pos"()
+    goto alt89_end
+  alt89_1:
+    set_addr $I10, alt89_2
+    rx85_cur."!mark_push"(0, rx85_pos, $I10)
 .annotate 'line', 47
-  # rx rxquantr98 ** 1..*
+  # rx rxquantr98 ** 0..*
     set_addr $I99, rxquantr98_done
-    rx83_cur."!mark_push"(0, -1, $I99)
+    rx85_cur."!mark_push"(0, rx85_pos, $I99)
   rxquantr98_loop:
   # rx enumcharlist negate=0 
-    ge rx83_pos, rx83_eos, rx83_fail
-    sub $I10, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I10, 1
+    ge rx85_pos, rx85_eos, rx85_fail
+    sub $I10, rx85_pos, rx85_off
+    substr $S10, rx85_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx83_fail
-    inc rx83_pos
-    (rx83_rep) = rx83_cur."!mark_commit"($I99)
-    rx83_cur."!mark_push"(rx83_rep, rx83_pos, $I99)
+    lt $I11, 0, rx85_fail
+    inc rx85_pos
+    (rx85_rep) = rx85_cur."!mark_commit"($I99)
+    rx85_cur."!mark_push"(rx85_rep, rx85_pos, $I99)
     goto rxquantr98_loop
   rxquantr98_done:
-  alt87_end:
-.annotate 'line', 42
+  # rx literal  "#"
+    add $I11, rx85_pos, 1
+    gt $I11, rx85_eos, rx85_fail
+    sub $I11, rx85_pos, rx85_off
+    substr $S10, rx85_tgt, $I11, 1
+    ne $S10, "#", rx85_fail
+    add rx85_pos, 1
+  # rx charclass_q N r 0..-1
+    sub $I10, rx85_pos, rx85_off
+    find_cclass $I11, 4096, rx85_tgt, $I10, rx85_eos
+    add rx85_pos, rx85_off, $I11
+    goto alt89_end
+  alt89_2:
+.annotate 'line', 48
+  # rx rxquantr100 ** 1..*
+    set_addr $I101, rxquantr100_done
+    rx85_cur."!mark_push"(0, -1, $I101)
+  rxquantr100_loop:
+  # rx enumcharlist negate=0 
+    ge rx85_pos, rx85_eos, rx85_fail
+    sub $I10, rx85_pos, rx85_off
+    substr $S10, rx85_tgt, $I10, 1
+    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
+    lt $I11, 0, rx85_fail
+    inc rx85_pos
+    (rx85_rep) = rx85_cur."!mark_commit"($I101)
+    rx85_cur."!mark_push"(rx85_rep, rx85_pos, $I101)
+    goto rxquantr100_loop
+  rxquantr100_done:
+  alt89_end:
+.annotate 'line', 43
   # rx pass
-    rx83_cur."!cursor_pass"(rx83_pos, "unv")
-    rx83_cur."!cursor_debug"("PASS  ", "unv", " at pos=", rx83_pos)
-    .return (rx83_cur)
-  rx83_fail:
+    rx85_cur."!cursor_pass"(rx85_pos, "unv")
+    rx85_cur."!cursor_debug"("PASS  ", "unv", " at pos=", rx85_pos)
+    .return (rx85_cur)
+  rx85_fail:
 .annotate 'line', 4
-    (rx83_rep, rx83_pos, $I10, $P10) = rx83_cur."!mark_fail"(0)
-    lt rx83_pos, -1, rx83_done
-    eq rx83_pos, -1, rx83_fail
+    (rx85_rep, rx85_pos, $I10, $P10) = rx85_cur."!mark_fail"(0)
+    lt rx85_pos, -1, rx85_done
+    eq rx85_pos, -1, rx85_fail
     jump $I10
-  rx83_done:
-    rx83_cur."!cursor_fail"()
-    rx83_cur."!cursor_debug"("FAIL  ", "unv")
-    .return (rx83_cur)
+  rx85_done:
+    rx85_cur."!cursor_fail"()
+    rx85_cur."!cursor_debug"("FAIL  ", "unv")
+    .return (rx85_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__unv"  :subid("24_1274022894.43745") :method
+.sub "!PREFIX__unv"  :subid("24_1275811487.95429") :method
 .annotate 'line', 4
-    new $P85, "ResizablePMCArray"
-    push $P85, ""
-    push $P85, ""
-    push $P85, ""
-    .return ($P85)
+    new $P87, "ResizablePMCArray"
+    push $P87, ""
+    push $P87, ""
+    push $P87, ""
+    .return ($P87)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block89"  :anon :subid("25_1274022894.43745") :method :outer("23_1274022894.43745")
-.annotate 'line', 45
-    .local string rx91_tgt
-    .local int rx91_pos
-    .local int rx91_off
-    .local int rx91_eos
-    .local int rx91_rep
-    .local pmc rx91_cur
-    (rx91_cur, rx91_pos, rx91_tgt) = self."!cursor_start"()
-    rx91_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx91_cur
-    .local pmc match
-    .lex "$/", match
-    length rx91_eos, rx91_tgt
-    set rx91_off, 0
-    lt rx91_pos, 2, rx91_start
-    sub rx91_off, rx91_pos, 1
-    substr rx91_tgt, rx91_tgt, rx91_off
-  rx91_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan92_done
-    goto rxscan92_scan
-  rxscan92_loop:
-    ($P10) = rx91_cur."from"()
-    inc $P10
-    set rx91_pos, $P10
-    ge rx91_pos, rx91_eos, rxscan92_done
-  rxscan92_scan:
-    set_addr $I10, rxscan92_loop
-    rx91_cur."!mark_push"(0, rx91_pos, $I10)
-  rxscan92_done:
-  # rx rxquantr93 ** 0..*
-    set_addr $I94, rxquantr93_done
-    rx91_cur."!mark_push"(0, rx91_pos, $I94)
-  rxquantr93_loop:
+.sub "_block91"  :anon :subid("25_1275811487.95429") :method :outer("23_1275811487.95429")
+.annotate 'line', 46
+    .local string rx93_tgt
+    .local int rx93_pos
+    .local int rx93_off
+    .local int rx93_eos
+    .local int rx93_rep
+    .local pmc rx93_cur
+    (rx93_cur, rx93_pos, rx93_tgt) = self."!cursor_start"()
+    rx93_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx93_cur
+    .local pmc match
+    .lex "$/", match
+    length rx93_eos, rx93_tgt
+    gt rx93_pos, rx93_eos, rx93_done
+    set rx93_off, 0
+    lt rx93_pos, 2, rx93_start
+    sub rx93_off, rx93_pos, 1
+    substr rx93_tgt, rx93_tgt, rx93_off
+  rx93_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan94_done
+    goto rxscan94_scan
+  rxscan94_loop:
+    ($P10) = rx93_cur."from"()
+    inc $P10
+    set rx93_pos, $P10
+    ge rx93_pos, rx93_eos, rxscan94_done
+  rxscan94_scan:
+    set_addr $I10, rxscan94_loop
+    rx93_cur."!mark_push"(0, rx93_pos, $I10)
+  rxscan94_done:
+  # rx rxquantr95 ** 0..*
+    set_addr $I96, rxquantr95_done
+    rx93_cur."!mark_push"(0, rx93_pos, $I96)
+  rxquantr95_loop:
   # rx enumcharlist negate=0 
-    ge rx91_pos, rx91_eos, rx91_fail
-    sub $I10, rx91_pos, rx91_off
-    substr $S10, rx91_tgt, $I10, 1
+    ge rx93_pos, rx93_eos, rx93_fail
+    sub $I10, rx93_pos, rx93_off
+    substr $S10, rx93_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx91_fail
-    inc rx91_pos
-    (rx91_rep) = rx91_cur."!mark_commit"($I94)
-    rx91_cur."!mark_push"(rx91_rep, rx91_pos, $I94)
-    goto rxquantr93_loop
-  rxquantr93_done:
+    lt $I11, 0, rx93_fail
+    inc rx93_pos
+    (rx93_rep) = rx93_cur."!mark_commit"($I96)
+    rx93_cur."!mark_push"(rx93_rep, rx93_pos, $I96)
+    goto rxquantr95_loop
+  rxquantr95_done:
   # rx literal  "="
-    add $I11, rx91_pos, 1
-    gt $I11, rx91_eos, rx91_fail
-    sub $I11, rx91_pos, rx91_off
-    substr $S10, rx91_tgt, $I11, 1
-    ne $S10, "=", rx91_fail
-    add rx91_pos, 1
-  alt95_0:
-    set_addr $I10, alt95_1
-    rx91_cur."!mark_push"(0, rx91_pos, $I10)
+    add $I11, rx93_pos, 1
+    gt $I11, rx93_eos, rx93_fail
+    sub $I11, rx93_pos, rx93_off
+    substr $S10, rx93_tgt, $I11, 1
+    ne $S10, "=", rx93_fail
+    add rx93_pos, 1
+  alt97_0:
+    set_addr $I10, alt97_1
+    rx93_cur."!mark_push"(0, rx93_pos, $I10)
   # rx charclass w
-    ge rx91_pos, rx91_eos, rx91_fail
-    sub $I10, rx91_pos, rx91_off
-    is_cclass $I11, 8192, rx91_tgt, $I10
-    unless $I11, rx91_fail
-    inc rx91_pos
-    goto alt95_end
-  alt95_1:
+    ge rx93_pos, rx93_eos, rx93_fail
+    sub $I10, rx93_pos, rx93_off
+    is_cclass $I11, 8192, rx93_tgt, $I10
+    unless $I11, rx93_fail
+    inc rx93_pos
+    goto alt97_end
+  alt97_1:
   # rx literal  "\\"
-    add $I11, rx91_pos, 1
-    gt $I11, rx91_eos, rx91_fail
-    sub $I11, rx91_pos, rx91_off
-    substr $S10, rx91_tgt, $I11, 1
-    ne $S10, "\\", rx91_fail
-    add rx91_pos, 1
-  alt95_end:
-  # rx pass
-    rx91_cur."!cursor_pass"(rx91_pos, "")
-    rx91_cur."!cursor_debug"("PASS  ", "", " at pos=", rx91_pos)
-    .return (rx91_cur)
-  rx91_fail:
-    (rx91_rep, rx91_pos, $I10, $P10) = rx91_cur."!mark_fail"(0)
-    lt rx91_pos, -1, rx91_done
-    eq rx91_pos, -1, rx91_fail
-    jump $I10
-  rx91_done:
-    rx91_cur."!cursor_fail"()
-    rx91_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx91_cur)
+    add $I11, rx93_pos, 1
+    gt $I11, rx93_eos, rx93_fail
+    sub $I11, rx93_pos, rx93_off
+    substr $S10, rx93_tgt, $I11, 1
+    ne $S10, "\\", rx93_fail
+    add rx93_pos, 1
+  alt97_end:
+  # rx pass
+    rx93_cur."!cursor_pass"(rx93_pos, "")
+    rx93_cur."!cursor_debug"("PASS  ", "", " at pos=", rx93_pos)
+    .return (rx93_cur)
+  rx93_fail:
+    (rx93_rep, rx93_pos, $I10, $P10) = rx93_cur."!mark_fail"(0)
+    lt rx93_pos, -1, rx93_done
+    eq rx93_pos, -1, rx93_fail
+    jump $I10
+  rx93_done:
+    rx93_cur."!cursor_fail"()
+    rx93_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx93_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pod_comment"  :subid("26_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .const 'Sub' $P141 = "28_1274022894.43745" 
-    capture_lex $P141
-    .local string rx101_tgt
-    .local int rx101_pos
-    .local int rx101_off
-    .local int rx101_eos
-    .local int rx101_rep
-    .local pmc rx101_cur
-    (rx101_cur, rx101_pos, rx101_tgt) = self."!cursor_start"()
-    rx101_cur."!cursor_debug"("START ", "pod_comment")
-    .lex unicode:"$\x{a2}", rx101_cur
-    .local pmc match
-    .lex "$/", match
-    length rx101_eos, rx101_tgt
-    set rx101_off, 0
-    lt rx101_pos, 2, rx101_start
-    sub rx101_off, rx101_pos, 1
-    substr rx101_tgt, rx101_tgt, rx101_off
-  rx101_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan104_done
-    goto rxscan104_scan
-  rxscan104_loop:
-    ($P10) = rx101_cur."from"()
-    inc $P10
-    set rx101_pos, $P10
-    ge rx101_pos, rx101_eos, rxscan104_done
-  rxscan104_scan:
-    set_addr $I10, rxscan104_loop
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-  rxscan104_done:
-.annotate 'line', 52
+.sub "pod_comment"  :subid("26_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .const 'Sub' $P143 = "28_1275811487.95429" 
+    capture_lex $P143
+    .local string rx103_tgt
+    .local int rx103_pos
+    .local int rx103_off
+    .local int rx103_eos
+    .local int rx103_rep
+    .local pmc rx103_cur
+    (rx103_cur, rx103_pos, rx103_tgt) = self."!cursor_start"()
+    rx103_cur."!cursor_debug"("START ", "pod_comment")
+    .lex unicode:"$\x{a2}", rx103_cur
+    .local pmc match
+    .lex "$/", match
+    length rx103_eos, rx103_tgt
+    gt rx103_pos, rx103_eos, rx103_done
+    set rx103_off, 0
+    lt rx103_pos, 2, rx103_start
+    sub rx103_off, rx103_pos, 1
+    substr rx103_tgt, rx103_tgt, rx103_off
+  rx103_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan106_done
+    goto rxscan106_scan
+  rxscan106_loop:
+    ($P10) = rx103_cur."from"()
+    inc $P10
+    set rx103_pos, $P10
+    ge rx103_pos, rx103_eos, rxscan106_done
+  rxscan106_scan:
+    set_addr $I10, rxscan106_loop
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+  rxscan106_done:
+.annotate 'line', 53
   # rxanchor bol
-    eq rx101_pos, 0, rxanchor105_done
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
+    eq rx103_pos, 0, rxanchor107_done
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
     dec $I10
-    is_cclass $I11, 4096, rx101_tgt, $I10
-    unless $I11, rx101_fail
-  rxanchor105_done:
-  # rx rxquantr106 ** 0..*
-    set_addr $I107, rxquantr106_done
-    rx101_cur."!mark_push"(0, rx101_pos, $I107)
-  rxquantr106_loop:
+    is_cclass $I11, 4096, rx103_tgt, $I10
+    unless $I11, rx103_fail
+  rxanchor107_done:
+  # rx rxquantr108 ** 0..*
+    set_addr $I109, rxquantr108_done
+    rx103_cur."!mark_push"(0, rx103_pos, $I109)
+  rxquantr108_loop:
   # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I107)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I107)
-    goto rxquantr106_loop
-  rxquantr106_done:
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I109)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I109)
+    goto rxquantr108_loop
+  rxquantr108_done:
   # rx literal  "="
-    add $I11, rx101_pos, 1
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 1
-    ne $S10, "=", rx101_fail
-    add rx101_pos, 1
-  alt108_0:
-.annotate 'line', 53
-    set_addr $I10, alt108_1
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
+    add $I11, rx103_pos, 1
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 1
+    ne $S10, "=", rx103_fail
+    add rx103_pos, 1
+  alt110_0:
 .annotate 'line', 54
+    set_addr $I10, alt110_1
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+.annotate 'line', 55
   # rx literal  "begin"
-    add $I11, rx101_pos, 5
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 5
-    ne $S10, "begin", rx101_fail
-    add rx101_pos, 5
-  # rx rxquantr109 ** 1..*
-    set_addr $I110, rxquantr109_done
-    rx101_cur."!mark_push"(0, -1, $I110)
-  rxquantr109_loop:
+    add $I11, rx103_pos, 5
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 5
+    ne $S10, "begin", rx103_fail
+    add rx103_pos, 5
+  # rx rxquantr111 ** 1..*
+    set_addr $I112, rxquantr111_done
+    rx103_cur."!mark_push"(0, -1, $I112)
+  rxquantr111_loop:
   # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I110)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I110)
-    goto rxquantr109_loop
-  rxquantr109_done:
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I112)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I112)
+    goto rxquantr111_loop
+  rxquantr111_done:
   # rx literal  "END"
-    add $I11, rx101_pos, 3
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 3
-    ne $S10, "END", rx101_fail
-    add rx101_pos, 3
+    add $I11, rx103_pos, 3
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 3
+    ne $S10, "END", rx103_fail
+    add rx103_pos, 3
   # rxanchor rwb
-    le rx101_pos, 0, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    if $I11, rx101_fail
+    le rx103_pos, 0, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    if $I11, rx103_fail
     dec $I10
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    unless $I11, rx101_fail
-  alt111_0:
-.annotate 'line', 55
-    set_addr $I10, alt111_1
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-  # rx rxquantf112 ** 0..*
-    set_addr $I10, rxquantf112_loop
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-    goto rxquantf112_done
-  rxquantf112_loop:
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    unless $I11, rx103_fail
+  alt113_0:
+.annotate 'line', 56
+    set_addr $I10, alt113_1
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+  # rx rxquantf114 ** 0..*
+    set_addr $I10, rxquantf114_loop
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+    goto rxquantf114_done
+  rxquantf114_loop:
   # rx charclass .
-    ge rx101_pos, rx101_eos, rx101_fail
-    inc rx101_pos
-    set_addr $I10, rxquantf112_loop
-    rx101_cur."!mark_push"($I113, rx101_pos, $I10)
-  rxquantf112_done:
+    ge rx103_pos, rx103_eos, rx103_fail
+    inc rx103_pos
+    set_addr $I10, rxquantf114_loop
+    rx103_cur."!mark_push"($I115, rx103_pos, $I10)
+  rxquantf114_done:
   # rx charclass nl
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 4096, rx101_tgt, $I10
-    unless $I11, rx101_fail
-    substr $S10, rx101_tgt, $I10, 2
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 4096, rx103_tgt, $I10
+    unless $I11, rx103_fail
+    substr $S10, rx103_tgt, $I10, 2
     iseq $I11, $S10, "\r\n"
-    add rx101_pos, $I11
-    inc rx101_pos
-  # rx rxquantr114 ** 0..*
-    set_addr $I115, rxquantr114_done
-    rx101_cur."!mark_push"(0, rx101_pos, $I115)
-  rxquantr114_loop:
-  # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
-    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I115)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I115)
-    goto rxquantr114_loop
-  rxquantr114_done:
-  # rx literal  "=end"
-    add $I11, rx101_pos, 4
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 4
-    ne $S10, "=end", rx101_fail
-    add rx101_pos, 4
-  # rx rxquantr116 ** 1..*
+    add rx103_pos, $I11
+    inc rx103_pos
+  # rx rxquantr116 ** 0..*
     set_addr $I117, rxquantr116_done
-    rx101_cur."!mark_push"(0, -1, $I117)
+    rx103_cur."!mark_push"(0, rx103_pos, $I117)
   rxquantr116_loop:
   # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I117)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I117)
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I117)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I117)
     goto rxquantr116_loop
   rxquantr116_done:
+  # rx literal  "=end"
+    add $I11, rx103_pos, 4
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 4
+    ne $S10, "=end", rx103_fail
+    add rx103_pos, 4
+  # rx rxquantr118 ** 1..*
+    set_addr $I119, rxquantr118_done
+    rx103_cur."!mark_push"(0, -1, $I119)
+  rxquantr118_loop:
+  # rx enumcharlist negate=0 
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
+    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I119)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I119)
+    goto rxquantr118_loop
+  rxquantr118_done:
   # rx literal  "END"
-    add $I11, rx101_pos, 3
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 3
-    ne $S10, "END", rx101_fail
-    add rx101_pos, 3
+    add $I11, rx103_pos, 3
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 3
+    ne $S10, "END", rx103_fail
+    add rx103_pos, 3
   # rxanchor rwb
-    le rx101_pos, 0, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    if $I11, rx101_fail
+    le rx103_pos, 0, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    if $I11, rx103_fail
     dec $I10
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    unless $I11, rx101_fail
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    unless $I11, rx103_fail
   # rx charclass_q N r 0..-1
-    sub $I10, rx101_pos, rx101_off
-    find_cclass $I11, 4096, rx101_tgt, $I10, rx101_eos
-    add rx101_pos, rx101_off, $I11
-    goto alt111_end
-  alt111_1:
+    sub $I10, rx103_pos, rx103_off
+    find_cclass $I11, 4096, rx103_tgt, $I10, rx103_eos
+    add rx103_pos, rx103_off, $I11
+    goto alt113_end
+  alt113_1:
   # rx charclass_q . r 0..-1
-    sub $I10, rx101_pos, rx101_off
-    find_not_cclass $I11, 65535, rx101_tgt, $I10, rx101_eos
-    add rx101_pos, rx101_off, $I11
-  alt111_end:
-.annotate 'line', 54
-    goto alt108_end
-  alt108_1:
-    set_addr $I10, alt108_2
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-.annotate 'line', 56
+    sub $I10, rx103_pos, rx103_off
+    find_not_cclass $I11, 65535, rx103_tgt, $I10, rx103_eos
+    add rx103_pos, rx103_off, $I11
+  alt113_end:
+.annotate 'line', 55
+    goto alt110_end
+  alt110_1:
+    set_addr $I10, alt110_2
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+.annotate 'line', 57
   # rx literal  "begin"
-    add $I11, rx101_pos, 5
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 5
-    ne $S10, "begin", rx101_fail
-    add rx101_pos, 5
-  # rx rxquantr118 ** 1..*
-    set_addr $I119, rxquantr118_done
-    rx101_cur."!mark_push"(0, -1, $I119)
-  rxquantr118_loop:
+    add $I11, rx103_pos, 5
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 5
+    ne $S10, "begin", rx103_fail
+    add rx103_pos, 5
+  # rx rxquantr120 ** 1..*
+    set_addr $I121, rxquantr120_done
+    rx103_cur."!mark_push"(0, -1, $I121)
+  rxquantr120_loop:
   # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I119)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I119)
-    goto rxquantr118_loop
-  rxquantr118_done:
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I121)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I121)
+    goto rxquantr120_loop
+  rxquantr120_done:
   # rx subrule "identifier" subtype=capture negate=
-    rx101_cur."!cursor_pos"(rx101_pos)
-    $P10 = rx101_cur."identifier"()
-    unless $P10, rx101_fail
-    rx101_cur."!mark_push"(0, -1, 0, $P10)
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."identifier"()
+    unless $P10, rx103_fail
+    rx103_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx101_pos = $P10."pos"()
-  alt120_0:
-.annotate 'line', 57
-    set_addr $I10, alt120_1
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
+    rx103_pos = $P10."pos"()
+  alt122_0:
 .annotate 'line', 58
-  # rx rxquantf121 ** 0..*
-    set_addr $I10, rxquantf121_loop
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-    goto rxquantf121_done
-  rxquantf121_loop:
+    set_addr $I10, alt122_1
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+.annotate 'line', 59
+  # rx rxquantf123 ** 0..*
+    set_addr $I10, rxquantf123_loop
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+    goto rxquantf123_done
+  rxquantf123_loop:
   # rx charclass .
-    ge rx101_pos, rx101_eos, rx101_fail
-    inc rx101_pos
-    set_addr $I10, rxquantf121_loop
-    rx101_cur."!mark_push"($I122, rx101_pos, $I10)
-  rxquantf121_done:
+    ge rx103_pos, rx103_eos, rx103_fail
+    inc rx103_pos
+    set_addr $I10, rxquantf123_loop
+    rx103_cur."!mark_push"($I124, rx103_pos, $I10)
+  rxquantf123_done:
   # rx charclass nl
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 4096, rx101_tgt, $I10
-    unless $I11, rx101_fail
-    substr $S10, rx101_tgt, $I10, 2
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 4096, rx103_tgt, $I10
+    unless $I11, rx103_fail
+    substr $S10, rx103_tgt, $I10, 2
     iseq $I11, $S10, "\r\n"
-    add rx101_pos, $I11
-    inc rx101_pos
-  # rx rxquantr123 ** 0..*
-    set_addr $I124, rxquantr123_done
-    rx101_cur."!mark_push"(0, rx101_pos, $I124)
-  rxquantr123_loop:
-  # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
-    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I124)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I124)
-    goto rxquantr123_loop
-  rxquantr123_done:
-  # rx literal  "=end"
-    add $I11, rx101_pos, 4
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 4
-    ne $S10, "=end", rx101_fail
-    add rx101_pos, 4
-  # rx rxquantr125 ** 1..*
+    add rx103_pos, $I11
+    inc rx103_pos
+  # rx rxquantr125 ** 0..*
     set_addr $I126, rxquantr125_done
-    rx101_cur."!mark_push"(0, -1, $I126)
+    rx103_cur."!mark_push"(0, rx103_pos, $I126)
   rxquantr125_loop:
   # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I126)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I126)
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I126)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I126)
     goto rxquantr125_loop
   rxquantr125_done:
+  # rx literal  "=end"
+    add $I11, rx103_pos, 4
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 4
+    ne $S10, "=end", rx103_fail
+    add rx103_pos, 4
+  # rx rxquantr127 ** 1..*
+    set_addr $I128, rxquantr127_done
+    rx103_cur."!mark_push"(0, -1, $I128)
+  rxquantr127_loop:
+  # rx enumcharlist negate=0 
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
+    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I128)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I128)
+    goto rxquantr127_loop
+  rxquantr127_done:
   # rx subrule "!BACKREF" subtype=method negate=
-    rx101_cur."!cursor_pos"(rx101_pos)
-    $P10 = rx101_cur."!BACKREF"("identifier")
-    unless $P10, rx101_fail
-    rx101_pos = $P10."pos"()
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."!BACKREF"("identifier")
+    unless $P10, rx103_fail
+    rx103_pos = $P10."pos"()
   # rxanchor rwb
-    le rx101_pos, 0, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    if $I11, rx101_fail
+    le rx103_pos, 0, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    if $I11, rx103_fail
     dec $I10
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    unless $I11, rx101_fail
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    unless $I11, rx103_fail
   # rx charclass_q N r 0..-1
-    sub $I10, rx101_pos, rx101_off
-    find_cclass $I11, 4096, rx101_tgt, $I10, rx101_eos
-    add rx101_pos, rx101_off, $I11
-    goto alt120_end
-  alt120_1:
-.annotate 'line', 59
+    sub $I10, rx103_pos, rx103_off
+    find_cclass $I11, 4096, rx103_tgt, $I10, rx103_eos
+    add rx103_pos, rx103_off, $I11
+    goto alt122_end
+  alt122_1:
+.annotate 'line', 60
   # rx subrule "panic" subtype=method negate=
-    rx101_cur."!cursor_pos"(rx101_pos)
-    $P10 = rx101_cur."panic"("=begin without matching =end")
-    unless $P10, rx101_fail
-    rx101_pos = $P10."pos"()
-  alt120_end:
-.annotate 'line', 56
-    goto alt108_end
-  alt108_2:
-    set_addr $I10, alt108_3
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-.annotate 'line', 61
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."panic"("=begin without matching =end")
+    unless $P10, rx103_fail
+    rx103_pos = $P10."pos"()
+  alt122_end:
+.annotate 'line', 57
+    goto alt110_end
+  alt110_2:
+    set_addr $I10, alt110_3
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+.annotate 'line', 62
   # rx literal  "begin"
-    add $I11, rx101_pos, 5
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 5
-    ne $S10, "begin", rx101_fail
-    add rx101_pos, 5
+    add $I11, rx103_pos, 5
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 5
+    ne $S10, "begin", rx103_fail
+    add rx103_pos, 5
   # rxanchor rwb
-    le rx101_pos, 0, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    if $I11, rx101_fail
+    le rx103_pos, 0, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    if $I11, rx103_fail
     dec $I10
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    unless $I11, rx101_fail
-  # rx rxquantr128 ** 0..*
-    set_addr $I129, rxquantr128_done
-    rx101_cur."!mark_push"(0, rx101_pos, $I129)
-  rxquantr128_loop:
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    unless $I11, rx103_fail
+  # rx rxquantr130 ** 0..*
+    set_addr $I131, rxquantr130_done
+    rx103_cur."!mark_push"(0, rx103_pos, $I131)
+  rxquantr130_loop:
   # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I129)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I129)
-    goto rxquantr128_loop
-  rxquantr128_done:
-  alt130_0:
-.annotate 'line', 62
-    set_addr $I10, alt130_1
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I131)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I131)
+    goto rxquantr130_loop
+  rxquantr130_done:
+  alt132_0:
+.annotate 'line', 63
+    set_addr $I10, alt132_1
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
   # rxanchor eol
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 4096, rx101_tgt, $I10
-    if $I11, rxanchor131_done
-    ne rx101_pos, rx101_eos, rx101_fail
-    eq rx101_pos, 0, rxanchor131_done
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 4096, rx103_tgt, $I10
+    if $I11, rxanchor133_done
+    ne rx103_pos, rx103_eos, rx103_fail
+    eq rx103_pos, 0, rxanchor133_done
     dec $I10
-    is_cclass $I11, 4096, rx101_tgt, $I10
-    if $I11, rx101_fail
-  rxanchor131_done:
-    goto alt130_end
-  alt130_1:
-    set_addr $I10, alt130_2
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
+    is_cclass $I11, 4096, rx103_tgt, $I10
+    if $I11, rx103_fail
+  rxanchor133_done:
+    goto alt132_end
+  alt132_1:
+    set_addr $I10, alt132_2
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
   # rx literal  "#"
-    add $I11, rx101_pos, 1
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 1
-    ne $S10, "#", rx101_fail
-    add rx101_pos, 1
-    goto alt130_end
-  alt130_2:
+    add $I11, rx103_pos, 1
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 1
+    ne $S10, "#", rx103_fail
+    add rx103_pos, 1
+    goto alt132_end
+  alt132_2:
   # rx subrule "panic" subtype=method negate=
-    rx101_cur."!cursor_pos"(rx101_pos)
-    $P10 = rx101_cur."panic"("Unrecognized token after =begin")
-    unless $P10, rx101_fail
-    rx101_pos = $P10."pos"()
-  alt130_end:
-  alt132_0:
-.annotate 'line', 63
-    set_addr $I10, alt132_1
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."panic"("Unrecognized token after =begin")
+    unless $P10, rx103_fail
+    rx103_pos = $P10."pos"()
+  alt132_end:
+  alt134_0:
 .annotate 'line', 64
-  # rx rxquantf133 ** 0..*
-    set_addr $I10, rxquantf133_loop
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-    goto rxquantf133_done
-  rxquantf133_loop:
+    set_addr $I10, alt134_1
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+.annotate 'line', 65
+  # rx rxquantf135 ** 0..*
+    set_addr $I10, rxquantf135_loop
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+    goto rxquantf135_done
+  rxquantf135_loop:
   # rx charclass .
-    ge rx101_pos, rx101_eos, rx101_fail
-    inc rx101_pos
-    set_addr $I10, rxquantf133_loop
-    rx101_cur."!mark_push"($I134, rx101_pos, $I10)
-  rxquantf133_done:
+    ge rx103_pos, rx103_eos, rx103_fail
+    inc rx103_pos
+    set_addr $I10, rxquantf135_loop
+    rx103_cur."!mark_push"($I136, rx103_pos, $I10)
+  rxquantf135_done:
   # rx charclass nl
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 4096, rx101_tgt, $I10
-    unless $I11, rx101_fail
-    substr $S10, rx101_tgt, $I10, 2
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 4096, rx103_tgt, $I10
+    unless $I11, rx103_fail
+    substr $S10, rx103_tgt, $I10, 2
     iseq $I11, $S10, "\r\n"
-    add rx101_pos, $I11
-    inc rx101_pos
-  # rx rxquantr135 ** 0..*
-    set_addr $I136, rxquantr135_done
-    rx101_cur."!mark_push"(0, rx101_pos, $I136)
-  rxquantr135_loop:
+    add rx103_pos, $I11
+    inc rx103_pos
+  # rx rxquantr137 ** 0..*
+    set_addr $I138, rxquantr137_done
+    rx103_cur."!mark_push"(0, rx103_pos, $I138)
+  rxquantr137_loop:
   # rx enumcharlist negate=0 
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I10, 1
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx101_fail
-    inc rx101_pos
-    (rx101_rep) = rx101_cur."!mark_commit"($I136)
-    rx101_cur."!mark_push"(rx101_rep, rx101_pos, $I136)
-    goto rxquantr135_loop
-  rxquantr135_done:
+    lt $I11, 0, rx103_fail
+    inc rx103_pos
+    (rx103_rep) = rx103_cur."!mark_commit"($I138)
+    rx103_cur."!mark_push"(rx103_rep, rx103_pos, $I138)
+    goto rxquantr137_loop
+  rxquantr137_done:
   # rx literal  "=end"
-    add $I11, rx101_pos, 4
-    gt $I11, rx101_eos, rx101_fail
-    sub $I11, rx101_pos, rx101_off
-    substr $S10, rx101_tgt, $I11, 4
-    ne $S10, "=end", rx101_fail
-    add rx101_pos, 4
+    add $I11, rx103_pos, 4
+    gt $I11, rx103_eos, rx103_fail
+    sub $I11, rx103_pos, rx103_off
+    substr $S10, rx103_tgt, $I11, 4
+    ne $S10, "=end", rx103_fail
+    add rx103_pos, 4
   # rxanchor rwb
-    le rx101_pos, 0, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    if $I11, rx101_fail
+    le rx103_pos, 0, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    if $I11, rx103_fail
     dec $I10
-    is_cclass $I11, 8192, rx101_tgt, $I10
-    unless $I11, rx101_fail
+    is_cclass $I11, 8192, rx103_tgt, $I10
+    unless $I11, rx103_fail
   # rx charclass_q N r 0..-1
-    sub $I10, rx101_pos, rx101_off
-    find_cclass $I11, 4096, rx101_tgt, $I10, rx101_eos
-    add rx101_pos, rx101_off, $I11
-    goto alt132_end
-  alt132_1:
-.annotate 'line', 65
+    sub $I10, rx103_pos, rx103_off
+    find_cclass $I11, 4096, rx103_tgt, $I10, rx103_eos
+    add rx103_pos, rx103_off, $I11
+    goto alt134_end
+  alt134_1:
+.annotate 'line', 66
   # rx subrule "panic" subtype=method negate=
-    rx101_cur."!cursor_pos"(rx101_pos)
-    $P10 = rx101_cur."panic"("=begin without matching =end")
-    unless $P10, rx101_fail
-    rx101_pos = $P10."pos"()
-  alt132_end:
-.annotate 'line', 61
-    goto alt108_end
-  alt108_3:
-    set_addr $I10, alt108_4
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-.annotate 'line', 67
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."panic"("=begin without matching =end")
+    unless $P10, rx103_fail
+    rx103_pos = $P10."pos"()
+  alt134_end:
+.annotate 'line', 62
+    goto alt110_end
+  alt110_3:
+    set_addr $I10, alt110_4
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+.annotate 'line', 68
   # rx subrule "identifier" subtype=capture negate=
-    rx101_cur."!cursor_pos"(rx101_pos)
-    $P10 = rx101_cur."identifier"()
-    unless $P10, rx101_fail
-    rx101_cur."!mark_push"(0, -1, 0, $P10)
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."identifier"()
+    unless $P10, rx103_fail
+    rx103_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx101_pos = $P10."pos"()
-.annotate 'line', 68
-  # rx rxquantf137 ** 0..*
-    set_addr $I10, rxquantf137_loop
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
-    goto rxquantf137_done
-  rxquantf137_loop:
+    rx103_pos = $P10."pos"()
+.annotate 'line', 69
+  # rx rxquantf139 ** 0..*
+    set_addr $I10, rxquantf139_loop
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+    goto rxquantf139_done
+  rxquantf139_loop:
   # rx charclass .
-    ge rx101_pos, rx101_eos, rx101_fail
-    inc rx101_pos
-    set_addr $I10, rxquantf137_loop
-    rx101_cur."!mark_push"($I138, rx101_pos, $I10)
-  rxquantf137_done:
+    ge rx103_pos, rx103_eos, rx103_fail
+    inc rx103_pos
+    set_addr $I10, rxquantf139_loop
+    rx103_cur."!mark_push"($I140, rx103_pos, $I10)
+  rxquantf139_done:
   # rxanchor bol
-    eq rx101_pos, 0, rxanchor139_done
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
+    eq rx103_pos, 0, rxanchor141_done
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
     dec $I10
-    is_cclass $I11, 4096, rx101_tgt, $I10
-    unless $I11, rx101_fail
-  rxanchor139_done:
+    is_cclass $I11, 4096, rx103_tgt, $I10
+    unless $I11, rx103_fail
+  rxanchor141_done:
   # rx subrule "before" subtype=zerowidth negate=
-    rx101_cur."!cursor_pos"(rx101_pos)
-    .const 'Sub' $P141 = "28_1274022894.43745" 
-    capture_lex $P141
-    $P10 = rx101_cur."before"($P141)
-    unless $P10, rx101_fail
-.annotate 'line', 67
-    goto alt108_end
-  alt108_4:
-  alt149_0:
-.annotate 'line', 74
-    set_addr $I10, alt149_1
-    rx101_cur."!mark_push"(0, rx101_pos, $I10)
+    rx103_cur."!cursor_pos"(rx103_pos)
+    .const 'Sub' $P143 = "28_1275811487.95429" 
+    capture_lex $P143
+    $P10 = rx103_cur."before"($P143)
+    unless $P10, rx103_fail
+.annotate 'line', 68
+    goto alt110_end
+  alt110_4:
+  alt151_0:
+.annotate 'line', 75
+    set_addr $I10, alt151_1
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
   # rx charclass s
-    ge rx101_pos, rx101_eos, rx101_fail
-    sub $I10, rx101_pos, rx101_off
-    is_cclass $I11, 32, rx101_tgt, $I10
-    unless $I11, rx101_fail
-    inc rx101_pos
-    goto alt149_end
-  alt149_1:
+    ge rx103_pos, rx103_eos, rx103_fail
+    sub $I10, rx103_pos, rx103_off
+    is_cclass $I11, 32, rx103_tgt, $I10
+    unless $I11, rx103_fail
+    inc rx103_pos
+    goto alt151_end
+  alt151_1:
   # rx subrule "panic" subtype=method negate=
-    rx101_cur."!cursor_pos"(rx101_pos)
-    $P10 = rx101_cur."panic"("Illegal pod directive")
-    unless $P10, rx101_fail
-    rx101_pos = $P10."pos"()
-  alt149_end:
-.annotate 'line', 75
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."panic"("Illegal pod directive")
+    unless $P10, rx103_fail
+    rx103_pos = $P10."pos"()
+  alt151_end:
+.annotate 'line', 76
   # rx charclass_q N r 0..-1
-    sub $I10, rx101_pos, rx101_off
-    find_cclass $I11, 4096, rx101_tgt, $I10, rx101_eos
-    add rx101_pos, rx101_off, $I11
-  alt108_end:
-.annotate 'line', 51
+    sub $I10, rx103_pos, rx103_off
+    find_cclass $I11, 4096, rx103_tgt, $I10, rx103_eos
+    add rx103_pos, rx103_off, $I11
+  alt110_end:
+.annotate 'line', 52
   # rx pass
-    rx101_cur."!cursor_pass"(rx101_pos, "pod_comment")
-    rx101_cur."!cursor_debug"("PASS  ", "pod_comment", " at pos=", rx101_pos)
-    .return (rx101_cur)
-  rx101_fail:
+    rx103_cur."!cursor_pass"(rx103_pos, "pod_comment")
+    rx103_cur."!cursor_debug"("PASS  ", "pod_comment", " at pos=", rx103_pos)
+    .return (rx103_cur)
+  rx103_fail:
 .annotate 'line', 4
-    (rx101_rep, rx101_pos, $I10, $P10) = rx101_cur."!mark_fail"(0)
-    lt rx101_pos, -1, rx101_done
-    eq rx101_pos, -1, rx101_fail
+    (rx103_rep, rx103_pos, $I10, $P10) = rx103_cur."!mark_fail"(0)
+    lt rx103_pos, -1, rx103_done
+    eq rx103_pos, -1, rx103_fail
     jump $I10
-  rx101_done:
-    rx101_cur."!cursor_fail"()
-    rx101_cur."!cursor_debug"("FAIL  ", "pod_comment")
-    .return (rx101_cur)
+  rx103_done:
+    rx103_cur."!cursor_fail"()
+    rx103_cur."!cursor_debug"("FAIL  ", "pod_comment")
+    .return (rx103_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pod_comment"  :subid("27_1274022894.43745") :method
+.sub "!PREFIX__pod_comment"  :subid("27_1275811487.95429") :method
 .annotate 'line', 4
-    new $P103, "ResizablePMCArray"
-    push $P103, ""
-    .return ($P103)
+    new $P105, "ResizablePMCArray"
+    push $P105, ""
+    .return ($P105)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block140"  :anon :subid("28_1274022894.43745") :method :outer("26_1274022894.43745")
-.annotate 'line', 68
-    .local string rx142_tgt
-    .local int rx142_pos
-    .local int rx142_off
-    .local int rx142_eos
-    .local int rx142_rep
-    .local pmc rx142_cur
-    (rx142_cur, rx142_pos, rx142_tgt) = self."!cursor_start"()
-    rx142_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx142_cur
-    .local pmc match
-    .lex "$/", match
-    length rx142_eos, rx142_tgt
-    set rx142_off, 0
-    lt rx142_pos, 2, rx142_start
-    sub rx142_off, rx142_pos, 1
-    substr rx142_tgt, rx142_tgt, rx142_off
-  rx142_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan143_done
-    goto rxscan143_scan
-  rxscan143_loop:
-    ($P10) = rx142_cur."from"()
-    inc $P10
-    set rx142_pos, $P10
-    ge rx142_pos, rx142_eos, rxscan143_done
-  rxscan143_scan:
-    set_addr $I10, rxscan143_loop
-    rx142_cur."!mark_push"(0, rx142_pos, $I10)
-  rxscan143_done:
-  # rx rxquantr144 ** 0..*
-    set_addr $I145, rxquantr144_done
-    rx142_cur."!mark_push"(0, rx142_pos, $I145)
-  rxquantr144_loop:
+.sub "_block142"  :anon :subid("28_1275811487.95429") :method :outer("26_1275811487.95429")
+.annotate 'line', 69
+    .local string rx144_tgt
+    .local int rx144_pos
+    .local int rx144_off
+    .local int rx144_eos
+    .local int rx144_rep
+    .local pmc rx144_cur
+    (rx144_cur, rx144_pos, rx144_tgt) = self."!cursor_start"()
+    rx144_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx144_cur
+    .local pmc match
+    .lex "$/", match
+    length rx144_eos, rx144_tgt
+    gt rx144_pos, rx144_eos, rx144_done
+    set rx144_off, 0
+    lt rx144_pos, 2, rx144_start
+    sub rx144_off, rx144_pos, 1
+    substr rx144_tgt, rx144_tgt, rx144_off
+  rx144_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan145_done
+    goto rxscan145_scan
+  rxscan145_loop:
+    ($P10) = rx144_cur."from"()
+    inc $P10
+    set rx144_pos, $P10
+    ge rx144_pos, rx144_eos, rxscan145_done
+  rxscan145_scan:
+    set_addr $I10, rxscan145_loop
+    rx144_cur."!mark_push"(0, rx144_pos, $I10)
+  rxscan145_done:
+  # rx rxquantr146 ** 0..*
+    set_addr $I147, rxquantr146_done
+    rx144_cur."!mark_push"(0, rx144_pos, $I147)
+  rxquantr146_loop:
   # rx enumcharlist negate=0 
-    ge rx142_pos, rx142_eos, rx142_fail
-    sub $I10, rx142_pos, rx142_off
-    substr $S10, rx142_tgt, $I10, 1
+    ge rx144_pos, rx144_eos, rx144_fail
+    sub $I10, rx144_pos, rx144_off
+    substr $S10, rx144_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx142_fail
-    inc rx142_pos
-    (rx142_rep) = rx142_cur."!mark_commit"($I145)
-    rx142_cur."!mark_push"(rx142_rep, rx142_pos, $I145)
-    goto rxquantr144_loop
-  rxquantr144_done:
-  alt146_0:
-    set_addr $I10, alt146_1
-    rx142_cur."!mark_push"(0, rx142_pos, $I10)
-.annotate 'line', 69
+    lt $I11, 0, rx144_fail
+    inc rx144_pos
+    (rx144_rep) = rx144_cur."!mark_commit"($I147)
+    rx144_cur."!mark_push"(rx144_rep, rx144_pos, $I147)
+    goto rxquantr146_loop
+  rxquantr146_done:
+  alt148_0:
+    set_addr $I10, alt148_1
+    rx144_cur."!mark_push"(0, rx144_pos, $I10)
+.annotate 'line', 70
   # rx literal  "="
-    add $I11, rx142_pos, 1
-    gt $I11, rx142_eos, rx142_fail
-    sub $I11, rx142_pos, rx142_off
-    substr $S10, rx142_tgt, $I11, 1
-    ne $S10, "=", rx142_fail
-    add rx142_pos, 1
+    add $I11, rx144_pos, 1
+    gt $I11, rx144_eos, rx144_fail
+    sub $I11, rx144_pos, rx144_off
+    substr $S10, rx144_tgt, $I11, 1
+    ne $S10, "=", rx144_fail
+    add rx144_pos, 1
+.annotate 'line', 72
+  # rx rxquantr149 ** 0..1
+    set_addr $I150, rxquantr149_done
+    rx144_cur."!mark_push"(0, rx144_pos, $I150)
+  rxquantr149_loop:
 .annotate 'line', 71
-  # rx rxquantr147 ** 0..1
-    set_addr $I148, rxquantr147_done
-    rx142_cur."!mark_push"(0, rx142_pos, $I148)
-  rxquantr147_loop:
-.annotate 'line', 70
   # rx literal  "cut"
-    add $I11, rx142_pos, 3
-    gt $I11, rx142_eos, rx142_fail
-    sub $I11, rx142_pos, rx142_off
-    substr $S10, rx142_tgt, $I11, 3
-    ne $S10, "cut", rx142_fail
-    add rx142_pos, 3
+    add $I11, rx144_pos, 3
+    gt $I11, rx144_eos, rx144_fail
+    sub $I11, rx144_pos, rx144_off
+    substr $S10, rx144_tgt, $I11, 3
+    ne $S10, "cut", rx144_fail
+    add rx144_pos, 3
   # rxanchor rwb
-    le rx142_pos, 0, rx142_fail
-    sub $I10, rx142_pos, rx142_off
-    is_cclass $I11, 8192, rx142_tgt, $I10
-    if $I11, rx142_fail
+    le rx144_pos, 0, rx144_fail
+    sub $I10, rx144_pos, rx144_off
+    is_cclass $I11, 8192, rx144_tgt, $I10
+    if $I11, rx144_fail
     dec $I10
-    is_cclass $I11, 8192, rx142_tgt, $I10
-    unless $I11, rx142_fail
-.annotate 'line', 71
-  # rx subrule "panic" subtype=method negate=
-    rx142_cur."!cursor_pos"(rx142_pos)
-    $P10 = rx142_cur."panic"("Obsolete pod format, please use =begin/=end instead")
-    unless $P10, rx142_fail
-    rx142_pos = $P10."pos"()
-    (rx142_rep) = rx142_cur."!mark_commit"($I148)
-  rxquantr147_done:
-.annotate 'line', 68
-    goto alt146_end
-  alt146_1:
+    is_cclass $I11, 8192, rx144_tgt, $I10
+    unless $I11, rx144_fail
 .annotate 'line', 72
+  # rx subrule "panic" subtype=method negate=
+    rx144_cur."!cursor_pos"(rx144_pos)
+    $P10 = rx144_cur."panic"("Obsolete pod format, please use =begin/=end instead")
+    unless $P10, rx144_fail
+    rx144_pos = $P10."pos"()
+    (rx144_rep) = rx144_cur."!mark_commit"($I150)
+  rxquantr149_done:
+.annotate 'line', 69
+    goto alt148_end
+  alt148_1:
+.annotate 'line', 73
   # rx charclass nl
-    ge rx142_pos, rx142_eos, rx142_fail
-    sub $I10, rx142_pos, rx142_off
-    is_cclass $I11, 4096, rx142_tgt, $I10
-    unless $I11, rx142_fail
-    substr $S10, rx142_tgt, $I10, 2
+    ge rx144_pos, rx144_eos, rx144_fail
+    sub $I10, rx144_pos, rx144_off
+    is_cclass $I11, 4096, rx144_tgt, $I10
+    unless $I11, rx144_fail
+    substr $S10, rx144_tgt, $I10, 2
     iseq $I11, $S10, "\r\n"
-    add rx142_pos, $I11
-    inc rx142_pos
-  alt146_end:
-.annotate 'line', 68
+    add rx144_pos, $I11
+    inc rx144_pos
+  alt148_end:
+.annotate 'line', 69
   # rx pass
-    rx142_cur."!cursor_pass"(rx142_pos, "")
-    rx142_cur."!cursor_debug"("PASS  ", "", " at pos=", rx142_pos)
-    .return (rx142_cur)
-  rx142_fail:
-    (rx142_rep, rx142_pos, $I10, $P10) = rx142_cur."!mark_fail"(0)
-    lt rx142_pos, -1, rx142_done
-    eq rx142_pos, -1, rx142_fail
-    jump $I10
-  rx142_done:
-    rx142_cur."!cursor_fail"()
-    rx142_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx142_cur)
+    rx144_cur."!cursor_pass"(rx144_pos, "")
+    rx144_cur."!cursor_debug"("PASS  ", "", " at pos=", rx144_pos)
+    .return (rx144_cur)
+  rx144_fail:
+    (rx144_rep, rx144_pos, $I10, $P10) = rx144_cur."!mark_fail"(0)
+    lt rx144_pos, -1, rx144_done
+    eq rx144_pos, -1, rx144_fail
+    jump $I10
+  rx144_done:
+    rx144_cur."!cursor_fail"()
+    rx144_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx144_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "comp_unit"  :subid("29_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx151_tgt
-    .local int rx151_pos
-    .local int rx151_off
-    .local int rx151_eos
-    .local int rx151_rep
-    .local pmc rx151_cur
-    (rx151_cur, rx151_pos, rx151_tgt) = self."!cursor_start"()
-    rx151_cur."!cursor_debug"("START ", "comp_unit")
-    .lex unicode:"$\x{a2}", rx151_cur
-    .local pmc match
-    .lex "$/", match
-    length rx151_eos, rx151_tgt
-    set rx151_off, 0
-    lt rx151_pos, 2, rx151_start
-    sub rx151_off, rx151_pos, 1
-    substr rx151_tgt, rx151_tgt, rx151_off
-  rx151_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan155_done
-    goto rxscan155_scan
-  rxscan155_loop:
-    ($P10) = rx151_cur."from"()
-    inc $P10
-    set rx151_pos, $P10
-    ge rx151_pos, rx151_eos, rxscan155_done
-  rxscan155_scan:
-    set_addr $I10, rxscan155_loop
-    rx151_cur."!mark_push"(0, rx151_pos, $I10)
-  rxscan155_done:
-.annotate 'line', 83
-  # rx subrule "newpad" subtype=method negate=
-    rx151_cur."!cursor_pos"(rx151_pos)
-    $P10 = rx151_cur."newpad"()
-    unless $P10, rx151_fail
-    rx151_pos = $P10."pos"()
+.sub "comp_unit"  :subid("29_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx153_tgt
+    .local int rx153_pos
+    .local int rx153_off
+    .local int rx153_eos
+    .local int rx153_rep
+    .local pmc rx153_cur
+    (rx153_cur, rx153_pos, rx153_tgt) = self."!cursor_start"()
+    rx153_cur."!cursor_debug"("START ", "comp_unit")
+    .lex unicode:"$\x{a2}", rx153_cur
+    .local pmc match
+    .lex "$/", match
+    length rx153_eos, rx153_tgt
+    gt rx153_pos, rx153_eos, rx153_done
+    set rx153_off, 0
+    lt rx153_pos, 2, rx153_start
+    sub rx153_off, rx153_pos, 1
+    substr rx153_tgt, rx153_tgt, rx153_off
+  rx153_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan157_done
+    goto rxscan157_scan
+  rxscan157_loop:
+    ($P10) = rx153_cur."from"()
+    inc $P10
+    set rx153_pos, $P10
+    ge rx153_pos, rx153_eos, rxscan157_done
+  rxscan157_scan:
+    set_addr $I10, rxscan157_loop
+    rx153_cur."!mark_push"(0, rx153_pos, $I10)
+  rxscan157_done:
 .annotate 'line', 84
+  # rx subrule "newpad" subtype=method negate=
+    rx153_cur."!cursor_pos"(rx153_pos)
+    $P10 = rx153_cur."newpad"()
+    unless $P10, rx153_fail
+    rx153_pos = $P10."pos"()
+.annotate 'line', 85
+  # rx subrule "outerctx" subtype=method negate=
+    rx153_cur."!cursor_pos"(rx153_pos)
+    $P10 = rx153_cur."outerctx"()
+    unless $P10, rx153_fail
+    rx153_pos = $P10."pos"()
+.annotate 'line', 86
   # rx subrule "statementlist" subtype=capture negate=
-    rx151_cur."!cursor_pos"(rx151_pos)
-    $P10 = rx151_cur."statementlist"()
-    unless $P10, rx151_fail
-    rx151_cur."!mark_push"(0, -1, 0, $P10)
+    rx153_cur."!cursor_pos"(rx153_pos)
+    $P10 = rx153_cur."statementlist"()
+    unless $P10, rx153_fail
+    rx153_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statementlist")
-    rx151_pos = $P10."pos"()
-  alt156_0:
-.annotate 'line', 85
-    set_addr $I10, alt156_1
-    rx151_cur."!mark_push"(0, rx151_pos, $I10)
+    rx153_pos = $P10."pos"()
+  alt158_0:
+.annotate 'line', 87
+    set_addr $I10, alt158_1
+    rx153_cur."!mark_push"(0, rx153_pos, $I10)
   # rxanchor eos
-    ne rx151_pos, rx151_eos, rx151_fail
-    goto alt156_end
-  alt156_1:
+    ne rx153_pos, rx153_eos, rx153_fail
+    goto alt158_end
+  alt158_1:
   # rx subrule "panic" subtype=method negate=
-    rx151_cur."!cursor_pos"(rx151_pos)
-    $P10 = rx151_cur."panic"("Confused")
-    unless $P10, rx151_fail
-    rx151_pos = $P10."pos"()
-  alt156_end:
-.annotate 'line', 82
+    rx153_cur."!cursor_pos"(rx153_pos)
+    $P10 = rx153_cur."panic"("Confused")
+    unless $P10, rx153_fail
+    rx153_pos = $P10."pos"()
+  alt158_end:
+.annotate 'line', 83
   # rx pass
-    rx151_cur."!cursor_pass"(rx151_pos, "comp_unit")
-    rx151_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx151_pos)
-    .return (rx151_cur)
-  rx151_fail:
+    rx153_cur."!cursor_pass"(rx153_pos, "comp_unit")
+    rx153_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx153_pos)
+    .return (rx153_cur)
+  rx153_fail:
 .annotate 'line', 4
-    (rx151_rep, rx151_pos, $I10, $P10) = rx151_cur."!mark_fail"(0)
-    lt rx151_pos, -1, rx151_done
-    eq rx151_pos, -1, rx151_fail
+    (rx153_rep, rx153_pos, $I10, $P10) = rx153_cur."!mark_fail"(0)
+    lt rx153_pos, -1, rx153_done
+    eq rx153_pos, -1, rx153_fail
     jump $I10
-  rx151_done:
-    rx151_cur."!cursor_fail"()
-    rx151_cur."!cursor_debug"("FAIL  ", "comp_unit")
-    .return (rx151_cur)
+  rx153_done:
+    rx153_cur."!cursor_fail"()
+    rx153_cur."!cursor_debug"("FAIL  ", "comp_unit")
+    .return (rx153_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__comp_unit"  :subid("30_1274022894.43745") :method
+.sub "!PREFIX__comp_unit"  :subid("30_1275811487.95429") :method
 .annotate 'line', 4
-    $P153 = self."!PREFIX__!subrule"("", "")
-    new $P154, "ResizablePMCArray"
-    push $P154, $P153
-    .return ($P154)
+    $P155 = self."!PREFIX__!subrule"("newpad", "")
+    new $P156, "ResizablePMCArray"
+    push $P156, $P155
+    .return ($P156)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statementlist"  :subid("31_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statementlist"  :subid("31_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx158_tgt
-    .local int rx158_pos
-    .local int rx158_off
-    .local int rx158_eos
-    .local int rx158_rep
-    .local pmc rx158_cur
-    (rx158_cur, rx158_pos, rx158_tgt) = self."!cursor_start"()
-    rx158_cur."!cursor_debug"("START ", "statementlist")
-    rx158_cur."!cursor_caparray"("statement")
-    .lex unicode:"$\x{a2}", rx158_cur
+    .local string rx160_tgt
+    .local int rx160_pos
+    .local int rx160_off
+    .local int rx160_eos
+    .local int rx160_rep
+    .local pmc rx160_cur
+    (rx160_cur, rx160_pos, rx160_tgt) = self."!cursor_start"()
+    rx160_cur."!cursor_debug"("START ", "statementlist")
+    rx160_cur."!cursor_caparray"("statement")
+    .lex unicode:"$\x{a2}", rx160_cur
     .local pmc match
     .lex "$/", match
-    length rx158_eos, rx158_tgt
-    set rx158_off, 0
-    lt rx158_pos, 2, rx158_start
-    sub rx158_off, rx158_pos, 1
-    substr rx158_tgt, rx158_tgt, rx158_off
-  rx158_start:
+    length rx160_eos, rx160_tgt
+    gt rx160_pos, rx160_eos, rx160_done
+    set rx160_off, 0
+    lt rx160_pos, 2, rx160_start
+    sub rx160_off, rx160_pos, 1
+    substr rx160_tgt, rx160_tgt, rx160_off
+  rx160_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan161_done
-    goto rxscan161_scan
-  rxscan161_loop:
-    ($P10) = rx158_cur."from"()
+    ne $I10, -1, rxscan165_done
+    goto rxscan165_scan
+  rxscan165_loop:
+    ($P10) = rx160_cur."from"()
     inc $P10
-    set rx158_pos, $P10
-    ge rx158_pos, rx158_eos, rxscan161_done
-  rxscan161_scan:
-    set_addr $I10, rxscan161_loop
-    rx158_cur."!mark_push"(0, rx158_pos, $I10)
-  rxscan161_done:
-  alt162_0:
-.annotate 'line', 88
-    set_addr $I10, alt162_1
-    rx158_cur."!mark_push"(0, rx158_pos, $I10)
-.annotate 'line', 89
+    set rx160_pos, $P10
+    ge rx160_pos, rx160_eos, rxscan165_done
+  rxscan165_scan:
+    set_addr $I10, rxscan165_loop
+    rx160_cur."!mark_push"(0, rx160_pos, $I10)
+  rxscan165_done:
+  alt166_0:
+.annotate 'line', 90
+    set_addr $I10, alt166_1
+    rx160_cur."!mark_push"(0, rx160_pos, $I10)
+.annotate 'line', 91
   # rx subrule "ws" subtype=method negate=
-    rx158_cur."!cursor_pos"(rx158_pos)
-    $P10 = rx158_cur."ws"()
-    unless $P10, rx158_fail
-    rx158_pos = $P10."pos"()
+    rx160_cur."!cursor_pos"(rx160_pos)
+    $P10 = rx160_cur."ws"()
+    unless $P10, rx160_fail
+    rx160_pos = $P10."pos"()
   # rxanchor eos
-    ne rx158_pos, rx158_eos, rx158_fail
+    ne rx160_pos, rx160_eos, rx160_fail
   # rx subrule "ws" subtype=method negate=
-    rx158_cur."!cursor_pos"(rx158_pos)
-    $P10 = rx158_cur."ws"()
-    unless $P10, rx158_fail
-    rx158_pos = $P10."pos"()
-    goto alt162_end
-  alt162_1:
-.annotate 'line', 90
+    rx160_cur."!cursor_pos"(rx160_pos)
+    $P10 = rx160_cur."ws"()
+    unless $P10, rx160_fail
+    rx160_pos = $P10."pos"()
+    goto alt166_end
+  alt166_1:
+.annotate 'line', 92
   # rx subrule "ws" subtype=method negate=
-    rx158_cur."!cursor_pos"(rx158_pos)
-    $P10 = rx158_cur."ws"()
-    unless $P10, rx158_fail
-    rx158_pos = $P10."pos"()
-  # rx rxquantr166 ** 0..*
-    set_addr $I168, rxquantr166_done
-    rx158_cur."!mark_push"(0, rx158_pos, $I168)
-  rxquantr166_loop:
+    rx160_cur."!cursor_pos"(rx160_pos)
+    $P10 = rx160_cur."ws"()
+    unless $P10, rx160_fail
+    rx160_pos = $P10."pos"()
+  # rx rxquantr170 ** 0..*
+    set_addr $I172, rxquantr170_done
+    rx160_cur."!mark_push"(0, rx160_pos, $I172)
+  rxquantr170_loop:
   # rx subrule "statement" subtype=capture negate=
-    rx158_cur."!cursor_pos"(rx158_pos)
-    $P10 = rx158_cur."statement"()
-    unless $P10, rx158_fail
-    rx158_cur."!mark_push"(0, -1, 0, $P10)
+    rx160_cur."!cursor_pos"(rx160_pos)
+    $P10 = rx160_cur."statement"()
+    unless $P10, rx160_fail
+    rx160_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx158_pos = $P10."pos"()
+    rx160_pos = $P10."pos"()
   # rx subrule "eat_terminator" subtype=method negate=
-    rx158_cur."!cursor_pos"(rx158_pos)
-    $P10 = rx158_cur."eat_terminator"()
-    unless $P10, rx158_fail
-    rx158_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx158_cur."!cursor_pos"(rx158_pos)
-    $P10 = rx158_cur."ws"()
-    unless $P10, rx158_fail
-    rx158_pos = $P10."pos"()
-    (rx158_rep) = rx158_cur."!mark_commit"($I168)
-    rx158_cur."!mark_push"(rx158_rep, rx158_pos, $I168)
-    goto rxquantr166_loop
-  rxquantr166_done:
-  # rx subrule "ws" subtype=method negate=
-    rx158_cur."!cursor_pos"(rx158_pos)
-    $P10 = rx158_cur."ws"()
-    unless $P10, rx158_fail
-    rx158_pos = $P10."pos"()
-  alt162_end:
-.annotate 'line', 88
-  # rx pass
-    rx158_cur."!cursor_pass"(rx158_pos, "statementlist")
-    rx158_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx158_pos)
-    .return (rx158_cur)
-  rx158_fail:
-.annotate 'line', 4
-    (rx158_rep, rx158_pos, $I10, $P10) = rx158_cur."!mark_fail"(0)
-    lt rx158_pos, -1, rx158_done
-    eq rx158_pos, -1, rx158_fail
-    jump $I10
-  rx158_done:
-    rx158_cur."!cursor_fail"()
-    rx158_cur."!cursor_debug"("FAIL  ", "statementlist")
-    .return (rx158_cur)
+    rx160_cur."!cursor_pos"(rx160_pos)
+    $P10 = rx160_cur."eat_terminator"()
+    unless $P10, rx160_fail
+    rx160_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx160_cur."!cursor_pos"(rx160_pos)
+    $P10 = rx160_cur."ws"()
+    unless $P10, rx160_fail
+    rx160_pos = $P10."pos"()
+    (rx160_rep) = rx160_cur."!mark_commit"($I172)
+    rx160_cur."!mark_push"(rx160_rep, rx160_pos, $I172)
+    goto rxquantr170_loop
+  rxquantr170_done:
+  # rx subrule "ws" subtype=method negate=
+    rx160_cur."!cursor_pos"(rx160_pos)
+    $P10 = rx160_cur."ws"()
+    unless $P10, rx160_fail
+    rx160_pos = $P10."pos"()
+  alt166_end:
+.annotate 'line', 90
+  # rx pass
+    rx160_cur."!cursor_pass"(rx160_pos, "statementlist")
+    rx160_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx160_pos)
+    .return (rx160_cur)
+  rx160_fail:
+.annotate 'line', 4
+    (rx160_rep, rx160_pos, $I10, $P10) = rx160_cur."!mark_fail"(0)
+    lt rx160_pos, -1, rx160_done
+    eq rx160_pos, -1, rx160_fail
+    jump $I10
+  rx160_done:
+    rx160_cur."!cursor_fail"()
+    rx160_cur."!cursor_debug"("FAIL  ", "statementlist")
+    .return (rx160_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statementlist"  :subid("32_1274022894.43745") :method
-.annotate 'line', 4
-    new $P160, "ResizablePMCArray"
-    push $P160, ""
-    push $P160, ""
-    .return ($P160)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "statement"  :subid("33_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .const 'Sub' $P176 = "35_1274022894.43745" 
-    capture_lex $P176
-    .local string rx171_tgt
-    .local int rx171_pos
-    .local int rx171_off
-    .local int rx171_eos
-    .local int rx171_rep
-    .local pmc rx171_cur
-    (rx171_cur, rx171_pos, rx171_tgt) = self."!cursor_start"()
-    rx171_cur."!cursor_debug"("START ", "statement")
-    rx171_cur."!cursor_caparray"("statement_mod_loop", "statement_mod_cond")
-    .lex unicode:"$\x{a2}", rx171_cur
-    .local pmc match
-    .lex "$/", match
-    length rx171_eos, rx171_tgt
-    set rx171_off, 0
-    lt rx171_pos, 2, rx171_start
-    sub rx171_off, rx171_pos, 1
-    substr rx171_tgt, rx171_tgt, rx171_off
-  rx171_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan174_done
-    goto rxscan174_scan
-  rxscan174_loop:
-    ($P10) = rx171_cur."from"()
-    inc $P10
-    set rx171_pos, $P10
-    ge rx171_pos, rx171_eos, rxscan174_done
-  rxscan174_scan:
-    set_addr $I10, rxscan174_loop
-    rx171_cur."!mark_push"(0, rx171_pos, $I10)
-  rxscan174_done:
-.annotate 'line', 94
+.sub "!PREFIX__statementlist"  :subid("32_1275811487.95429") :method
+.annotate 'line', 4
+    $P162 = self."!PREFIX__!subrule"("ws", "")
+    $P163 = self."!PREFIX__!subrule"("ws", "")
+    new $P164, "ResizablePMCArray"
+    push $P164, $P162
+    push $P164, $P163
+    .return ($P164)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "statement"  :subid("33_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .const 'Sub' $P180 = "35_1275811487.95429" 
+    capture_lex $P180
+    .local string rx175_tgt
+    .local int rx175_pos
+    .local int rx175_off
+    .local int rx175_eos
+    .local int rx175_rep
+    .local pmc rx175_cur
+    (rx175_cur, rx175_pos, rx175_tgt) = self."!cursor_start"()
+    rx175_cur."!cursor_debug"("START ", "statement")
+    rx175_cur."!cursor_caparray"("statement_mod_loop", "statement_mod_cond")
+    .lex unicode:"$\x{a2}", rx175_cur
+    .local pmc match
+    .lex "$/", match
+    length rx175_eos, rx175_tgt
+    gt rx175_pos, rx175_eos, rx175_done
+    set rx175_off, 0
+    lt rx175_pos, 2, rx175_start
+    sub rx175_off, rx175_pos, 1
+    substr rx175_tgt, rx175_tgt, rx175_off
+  rx175_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan178_done
+    goto rxscan178_scan
+  rxscan178_loop:
+    ($P10) = rx175_cur."from"()
+    inc $P10
+    set rx175_pos, $P10
+    ge rx175_pos, rx175_eos, rxscan178_done
+  rxscan178_scan:
+    set_addr $I10, rxscan178_loop
+    rx175_cur."!mark_push"(0, rx175_pos, $I10)
+  rxscan178_done:
+.annotate 'line', 96
   # rx subrule "before" subtype=zerowidth negate=1
-    rx171_cur."!cursor_pos"(rx171_pos)
-    .const 'Sub' $P176 = "35_1274022894.43745" 
-    capture_lex $P176
-    $P10 = rx171_cur."before"($P176)
-    if $P10, rx171_fail
-  alt180_0:
-.annotate 'line', 95
-    set_addr $I10, alt180_1
-    rx171_cur."!mark_push"(0, rx171_pos, $I10)
-.annotate 'line', 96
+    rx175_cur."!cursor_pos"(rx175_pos)
+    .const 'Sub' $P180 = "35_1275811487.95429" 
+    capture_lex $P180
+    $P10 = rx175_cur."before"($P180)
+    if $P10, rx175_fail
+  alt184_0:
+.annotate 'line', 97
+    set_addr $I10, alt184_1
+    rx175_cur."!mark_push"(0, rx175_pos, $I10)
+.annotate 'line', 98
   # rx subrule "statement_control" subtype=capture negate=
-    rx171_cur."!cursor_pos"(rx171_pos)
-    $P10 = rx171_cur."statement_control"()
-    unless $P10, rx171_fail
-    rx171_cur."!mark_push"(0, -1, 0, $P10)
+    rx175_cur."!cursor_pos"(rx175_pos)
+    $P10 = rx175_cur."statement_control"()
+    unless $P10, rx175_fail
+    rx175_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_control")
-    rx171_pos = $P10."pos"()
-    goto alt180_end
-  alt180_1:
-.annotate 'line', 97
+    rx175_pos = $P10."pos"()
+    goto alt184_end
+  alt184_1:
+.annotate 'line', 99
   # rx subrule "EXPR" subtype=capture negate=
-    rx171_cur."!cursor_pos"(rx171_pos)
-    $P10 = rx171_cur."EXPR"()
-    unless $P10, rx171_fail
-    rx171_cur."!mark_push"(0, -1, 0, $P10)
+    rx175_cur."!cursor_pos"(rx175_pos)
+    $P10 = rx175_cur."EXPR"()
+    unless $P10, rx175_fail
+    rx175_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx171_pos = $P10."pos"()
+    rx175_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx171_cur."!cursor_pos"(rx171_pos)
-    $P10 = rx171_cur."ws"()
-    unless $P10, rx171_fail
-    rx171_pos = $P10."pos"()
-.annotate 'line', 102
-  # rx rxquantr181 ** 0..1
-    set_addr $I185, rxquantr181_done
-    rx171_cur."!mark_push"(0, rx171_pos, $I185)
-  rxquantr181_loop:
-  alt182_0:
-.annotate 'line', 98
-    set_addr $I10, alt182_1
-    rx171_cur."!mark_push"(0, rx171_pos, $I10)
-.annotate 'line', 99
-  # rx subrule "MARKED" subtype=zerowidth negate=
-    rx171_cur."!cursor_pos"(rx171_pos)
-    $P10 = rx171_cur."MARKED"("endstmt")
-    unless $P10, rx171_fail
-    goto alt182_end
-  alt182_1:
-    set_addr $I10, alt182_2
-    rx171_cur."!mark_push"(0, rx171_pos, $I10)
+    rx175_cur."!cursor_pos"(rx175_pos)
+    $P10 = rx175_cur."ws"()
+    unless $P10, rx175_fail
+    rx175_pos = $P10."pos"()
+.annotate 'line', 104
+  # rx rxquantr185 ** 0..1
+    set_addr $I189, rxquantr185_done
+    rx175_cur."!mark_push"(0, rx175_pos, $I189)
+  rxquantr185_loop:
+  alt186_0:
 .annotate 'line', 100
+    set_addr $I10, alt186_1
+    rx175_cur."!mark_push"(0, rx175_pos, $I10)
+.annotate 'line', 101
+  # rx subrule "MARKED" subtype=zerowidth negate=
+    rx175_cur."!cursor_pos"(rx175_pos)
+    $P10 = rx175_cur."MARKED"("endstmt")
+    unless $P10, rx175_fail
+    goto alt186_end
+  alt186_1:
+    set_addr $I10, alt186_2
+    rx175_cur."!mark_push"(0, rx175_pos, $I10)
+.annotate 'line', 102
   # rx subrule "statement_mod_cond" subtype=capture negate=
-    rx171_cur."!cursor_pos"(rx171_pos)
-    $P10 = rx171_cur."statement_mod_cond"()
-    unless $P10, rx171_fail
-    rx171_cur."!mark_push"(0, -1, 0, $P10)
+    rx175_cur."!cursor_pos"(rx175_pos)
+    $P10 = rx175_cur."statement_mod_cond"()
+    unless $P10, rx175_fail
+    rx175_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_cond")
-    rx171_pos = $P10."pos"()
-  # rx rxquantr183 ** 0..1
-    set_addr $I184, rxquantr183_done
-    rx171_cur."!mark_push"(0, rx171_pos, $I184)
-  rxquantr183_loop:
+    rx175_pos = $P10."pos"()
+  # rx rxquantr187 ** 0..1
+    set_addr $I188, rxquantr187_done
+    rx175_cur."!mark_push"(0, rx175_pos, $I188)
+  rxquantr187_loop:
   # rx subrule "statement_mod_loop" subtype=capture negate=
-    rx171_cur."!cursor_pos"(rx171_pos)
-    $P10 = rx171_cur."statement_mod_loop"()
-    unless $P10, rx171_fail
-    rx171_cur."!mark_push"(0, -1, 0, $P10)
+    rx175_cur."!cursor_pos"(rx175_pos)
+    $P10 = rx175_cur."statement_mod_loop"()
+    unless $P10, rx175_fail
+    rx175_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_loop")
-    rx171_pos = $P10."pos"()
-    (rx171_rep) = rx171_cur."!mark_commit"($I184)
-  rxquantr183_done:
-    goto alt182_end
-  alt182_2:
-.annotate 'line', 101
+    rx175_pos = $P10."pos"()
+    (rx175_rep) = rx175_cur."!mark_commit"($I188)
+  rxquantr187_done:
+    goto alt186_end
+  alt186_2:
+.annotate 'line', 103
   # rx subrule "statement_mod_loop" subtype=capture negate=
-    rx171_cur."!cursor_pos"(rx171_pos)
-    $P10 = rx171_cur."statement_mod_loop"()
-    unless $P10, rx171_fail
-    rx171_cur."!mark_push"(0, -1, 0, $P10)
+    rx175_cur."!cursor_pos"(rx175_pos)
+    $P10 = rx175_cur."statement_mod_loop"()
+    unless $P10, rx175_fail
+    rx175_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_loop")
-    rx171_pos = $P10."pos"()
-  alt182_end:
-.annotate 'line', 102
-    (rx171_rep) = rx171_cur."!mark_commit"($I185)
-  rxquantr181_done:
-  alt180_end:
-.annotate 'line', 93
+    rx175_pos = $P10."pos"()
+  alt186_end:
+.annotate 'line', 104
+    (rx175_rep) = rx175_cur."!mark_commit"($I189)
+  rxquantr185_done:
+  alt184_end:
+.annotate 'line', 95
   # rx pass
-    rx171_cur."!cursor_pass"(rx171_pos, "statement")
-    rx171_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx171_pos)
-    .return (rx171_cur)
-  rx171_fail:
+    rx175_cur."!cursor_pass"(rx175_pos, "statement")
+    rx175_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx175_pos)
+    .return (rx175_cur)
+  rx175_fail:
 .annotate 'line', 4
-    (rx171_rep, rx171_pos, $I10, $P10) = rx171_cur."!mark_fail"(0)
-    lt rx171_pos, -1, rx171_done
-    eq rx171_pos, -1, rx171_fail
+    (rx175_rep, rx175_pos, $I10, $P10) = rx175_cur."!mark_fail"(0)
+    lt rx175_pos, -1, rx175_done
+    eq rx175_pos, -1, rx175_fail
     jump $I10
-  rx171_done:
-    rx171_cur."!cursor_fail"()
-    rx171_cur."!cursor_debug"("FAIL  ", "statement")
-    .return (rx171_cur)
+  rx175_done:
+    rx175_cur."!cursor_fail"()
+    rx175_cur."!cursor_debug"("FAIL  ", "statement")
+    .return (rx175_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement"  :subid("34_1274022894.43745") :method
+.sub "!PREFIX__statement"  :subid("34_1275811487.95429") :method
 .annotate 'line', 4
-    new $P173, "ResizablePMCArray"
-    push $P173, ""
-    .return ($P173)
+    new $P177, "ResizablePMCArray"
+    push $P177, ""
+    .return ($P177)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block175"  :anon :subid("35_1274022894.43745") :method :outer("33_1274022894.43745")
-.annotate 'line', 94
-    .local string rx177_tgt
-    .local int rx177_pos
-    .local int rx177_off
-    .local int rx177_eos
-    .local int rx177_rep
-    .local pmc rx177_cur
-    (rx177_cur, rx177_pos, rx177_tgt) = self."!cursor_start"()
-    rx177_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx177_cur
-    .local pmc match
-    .lex "$/", match
-    length rx177_eos, rx177_tgt
-    set rx177_off, 0
-    lt rx177_pos, 2, rx177_start
-    sub rx177_off, rx177_pos, 1
-    substr rx177_tgt, rx177_tgt, rx177_off
-  rx177_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan178_done
-    goto rxscan178_scan
-  rxscan178_loop:
-    ($P10) = rx177_cur."from"()
-    inc $P10
-    set rx177_pos, $P10
-    ge rx177_pos, rx177_eos, rxscan178_done
-  rxscan178_scan:
-    set_addr $I10, rxscan178_loop
-    rx177_cur."!mark_push"(0, rx177_pos, $I10)
-  rxscan178_done:
-  alt179_0:
-    set_addr $I10, alt179_1
-    rx177_cur."!mark_push"(0, rx177_pos, $I10)
+.sub "_block179"  :anon :subid("35_1275811487.95429") :method :outer("33_1275811487.95429")
+.annotate 'line', 96
+    .local string rx181_tgt
+    .local int rx181_pos
+    .local int rx181_off
+    .local int rx181_eos
+    .local int rx181_rep
+    .local pmc rx181_cur
+    (rx181_cur, rx181_pos, rx181_tgt) = self."!cursor_start"()
+    rx181_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx181_cur
+    .local pmc match
+    .lex "$/", match
+    length rx181_eos, rx181_tgt
+    gt rx181_pos, rx181_eos, rx181_done
+    set rx181_off, 0
+    lt rx181_pos, 2, rx181_start
+    sub rx181_off, rx181_pos, 1
+    substr rx181_tgt, rx181_tgt, rx181_off
+  rx181_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan182_done
+    goto rxscan182_scan
+  rxscan182_loop:
+    ($P10) = rx181_cur."from"()
+    inc $P10
+    set rx181_pos, $P10
+    ge rx181_pos, rx181_eos, rxscan182_done
+  rxscan182_scan:
+    set_addr $I10, rxscan182_loop
+    rx181_cur."!mark_push"(0, rx181_pos, $I10)
+  rxscan182_done:
+  alt183_0:
+    set_addr $I10, alt183_1
+    rx181_cur."!mark_push"(0, rx181_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx177_pos, rx177_eos, rx177_fail
-    sub $I10, rx177_pos, rx177_off
-    substr $S10, rx177_tgt, $I10, 1
+    ge rx181_pos, rx181_eos, rx181_fail
+    sub $I10, rx181_pos, rx181_off
+    substr $S10, rx181_tgt, $I10, 1
     index $I11, "])}", $S10
-    lt $I11, 0, rx177_fail
-    inc rx177_pos
-    goto alt179_end
-  alt179_1:
+    lt $I11, 0, rx181_fail
+    inc rx181_pos
+    goto alt183_end
+  alt183_1:
   # rxanchor eos
-    ne rx177_pos, rx177_eos, rx177_fail
-  alt179_end:
+    ne rx181_pos, rx181_eos, rx181_fail
+  alt183_end:
   # rx pass
-    rx177_cur."!cursor_pass"(rx177_pos, "")
-    rx177_cur."!cursor_debug"("PASS  ", "", " at pos=", rx177_pos)
-    .return (rx177_cur)
-  rx177_fail:
-    (rx177_rep, rx177_pos, $I10, $P10) = rx177_cur."!mark_fail"(0)
-    lt rx177_pos, -1, rx177_done
-    eq rx177_pos, -1, rx177_fail
-    jump $I10
-  rx177_done:
-    rx177_cur."!cursor_fail"()
-    rx177_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx177_cur)
+    rx181_cur."!cursor_pass"(rx181_pos, "")
+    rx181_cur."!cursor_debug"("PASS  ", "", " at pos=", rx181_pos)
+    .return (rx181_cur)
+  rx181_fail:
+    (rx181_rep, rx181_pos, $I10, $P10) = rx181_cur."!mark_fail"(0)
+    lt rx181_pos, -1, rx181_done
+    eq rx181_pos, -1, rx181_fail
+    jump $I10
+  rx181_done:
+    rx181_cur."!cursor_fail"()
+    rx181_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx181_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "eat_terminator"  :subid("36_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx187_tgt
-    .local int rx187_pos
-    .local int rx187_off
-    .local int rx187_eos
-    .local int rx187_rep
-    .local pmc rx187_cur
-    (rx187_cur, rx187_pos, rx187_tgt) = self."!cursor_start"()
-    rx187_cur."!cursor_debug"("START ", "eat_terminator")
-    .lex unicode:"$\x{a2}", rx187_cur
-    .local pmc match
-    .lex "$/", match
-    length rx187_eos, rx187_tgt
-    set rx187_off, 0
-    lt rx187_pos, 2, rx187_start
-    sub rx187_off, rx187_pos, 1
-    substr rx187_tgt, rx187_tgt, rx187_off
-  rx187_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan190_done
-    goto rxscan190_scan
-  rxscan190_loop:
-    ($P10) = rx187_cur."from"()
-    inc $P10
-    set rx187_pos, $P10
-    ge rx187_pos, rx187_eos, rxscan190_done
-  rxscan190_scan:
-    set_addr $I10, rxscan190_loop
-    rx187_cur."!mark_push"(0, rx187_pos, $I10)
-  rxscan190_done:
-  alt191_0:
-.annotate 'line', 106
-    set_addr $I10, alt191_1
-    rx187_cur."!mark_push"(0, rx187_pos, $I10)
-.annotate 'line', 107
-  # rx literal  ";"
-    add $I11, rx187_pos, 1
-    gt $I11, rx187_eos, rx187_fail
-    sub $I11, rx187_pos, rx187_off
-    substr $S10, rx187_tgt, $I11, 1
-    ne $S10, ";", rx187_fail
-    add rx187_pos, 1
-    goto alt191_end
-  alt191_1:
-    set_addr $I10, alt191_2
-    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+.sub "eat_terminator"  :subid("36_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx191_tgt
+    .local int rx191_pos
+    .local int rx191_off
+    .local int rx191_eos
+    .local int rx191_rep
+    .local pmc rx191_cur
+    (rx191_cur, rx191_pos, rx191_tgt) = self."!cursor_start"()
+    rx191_cur."!cursor_debug"("START ", "eat_terminator")
+    .lex unicode:"$\x{a2}", rx191_cur
+    .local pmc match
+    .lex "$/", match
+    length rx191_eos, rx191_tgt
+    gt rx191_pos, rx191_eos, rx191_done
+    set rx191_off, 0
+    lt rx191_pos, 2, rx191_start
+    sub rx191_off, rx191_pos, 1
+    substr rx191_tgt, rx191_tgt, rx191_off
+  rx191_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan194_done
+    goto rxscan194_scan
+  rxscan194_loop:
+    ($P10) = rx191_cur."from"()
+    inc $P10
+    set rx191_pos, $P10
+    ge rx191_pos, rx191_eos, rxscan194_done
+  rxscan194_scan:
+    set_addr $I10, rxscan194_loop
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+  rxscan194_done:
+  alt195_0:
 .annotate 'line', 108
-  # rx subrule "MARKED" subtype=zerowidth negate=
-    rx187_cur."!cursor_pos"(rx187_pos)
-    $P10 = rx187_cur."MARKED"("endstmt")
-    unless $P10, rx187_fail
-    goto alt191_end
-  alt191_2:
-    set_addr $I10, alt191_3
-    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+    set_addr $I10, alt195_1
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
 .annotate 'line', 109
-  # rx subrule "terminator" subtype=zerowidth negate=
-    rx187_cur."!cursor_pos"(rx187_pos)
-    $P10 = rx187_cur."terminator"()
-    unless $P10, rx187_fail
-    goto alt191_end
-  alt191_3:
+  # rx literal  ";"
+    add $I11, rx191_pos, 1
+    gt $I11, rx191_eos, rx191_fail
+    sub $I11, rx191_pos, rx191_off
+    substr $S10, rx191_tgt, $I11, 1
+    ne $S10, ";", rx191_fail
+    add rx191_pos, 1
+    goto alt195_end
+  alt195_1:
+    set_addr $I10, alt195_2
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
 .annotate 'line', 110
+  # rx subrule "MARKED" subtype=zerowidth negate=
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."MARKED"("endstmt")
+    unless $P10, rx191_fail
+    goto alt195_end
+  alt195_2:
+    set_addr $I10, alt195_3
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+.annotate 'line', 111
+  # rx subrule "terminator" subtype=zerowidth negate=
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."terminator"()
+    unless $P10, rx191_fail
+    goto alt195_end
+  alt195_3:
+.annotate 'line', 112
   # rxanchor eos
-    ne rx187_pos, rx187_eos, rx187_fail
-  alt191_end:
-.annotate 'line', 106
+    ne rx191_pos, rx191_eos, rx191_fail
+  alt195_end:
+.annotate 'line', 108
   # rx pass
-    rx187_cur."!cursor_pass"(rx187_pos, "eat_terminator")
-    rx187_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx187_pos)
-    .return (rx187_cur)
-  rx187_fail:
+    rx191_cur."!cursor_pass"(rx191_pos, "eat_terminator")
+    rx191_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx191_pos)
+    .return (rx191_cur)
+  rx191_fail:
 .annotate 'line', 4
-    (rx187_rep, rx187_pos, $I10, $P10) = rx187_cur."!mark_fail"(0)
-    lt rx187_pos, -1, rx187_done
-    eq rx187_pos, -1, rx187_fail
+    (rx191_rep, rx191_pos, $I10, $P10) = rx191_cur."!mark_fail"(0)
+    lt rx191_pos, -1, rx191_done
+    eq rx191_pos, -1, rx191_fail
     jump $I10
-  rx187_done:
-    rx187_cur."!cursor_fail"()
-    rx187_cur."!cursor_debug"("FAIL  ", "eat_terminator")
-    .return (rx187_cur)
+  rx191_done:
+    rx191_cur."!cursor_fail"()
+    rx191_cur."!cursor_debug"("FAIL  ", "eat_terminator")
+    .return (rx191_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__eat_terminator"  :subid("37_1274022894.43745") :method
+.sub "!PREFIX__eat_terminator"  :subid("37_1275811487.95429") :method
 .annotate 'line', 4
-    new $P189, "ResizablePMCArray"
-    push $P189, ""
-    push $P189, ""
-    push $P189, ""
-    push $P189, ";"
-    .return ($P189)
+    new $P193, "ResizablePMCArray"
+    push $P193, ""
+    push $P193, ""
+    push $P193, ""
+    push $P193, ";"
+    .return ($P193)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "xblock"  :subid("38_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "xblock"  :subid("38_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx193_tgt
-    .local int rx193_pos
-    .local int rx193_off
-    .local int rx193_eos
-    .local int rx193_rep
-    .local pmc rx193_cur
-    (rx193_cur, rx193_pos, rx193_tgt) = self."!cursor_start"()
-    rx193_cur."!cursor_debug"("START ", "xblock")
-    .lex unicode:"$\x{a2}", rx193_cur
+    .local string rx197_tgt
+    .local int rx197_pos
+    .local int rx197_off
+    .local int rx197_eos
+    .local int rx197_rep
+    .local pmc rx197_cur
+    (rx197_cur, rx197_pos, rx197_tgt) = self."!cursor_start"()
+    rx197_cur."!cursor_debug"("START ", "xblock")
+    .lex unicode:"$\x{a2}", rx197_cur
     .local pmc match
     .lex "$/", match
-    length rx193_eos, rx193_tgt
-    set rx193_off, 0
-    lt rx193_pos, 2, rx193_start
-    sub rx193_off, rx193_pos, 1
-    substr rx193_tgt, rx193_tgt, rx193_off
-  rx193_start:
+    length rx197_eos, rx197_tgt
+    gt rx197_pos, rx197_eos, rx197_done
+    set rx197_off, 0
+    lt rx197_pos, 2, rx197_start
+    sub rx197_off, rx197_pos, 1
+    substr rx197_tgt, rx197_tgt, rx197_off
+  rx197_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan197_done
-    goto rxscan197_scan
-  rxscan197_loop:
-    ($P10) = rx193_cur."from"()
+    ne $I10, -1, rxscan201_done
+    goto rxscan201_scan
+  rxscan201_loop:
+    ($P10) = rx197_cur."from"()
     inc $P10
-    set rx193_pos, $P10
-    ge rx193_pos, rx193_eos, rxscan197_done
-  rxscan197_scan:
-    set_addr $I10, rxscan197_loop
-    rx193_cur."!mark_push"(0, rx193_pos, $I10)
-  rxscan197_done:
-.annotate 'line', 114
+    set rx197_pos, $P10
+    ge rx197_pos, rx197_eos, rxscan201_done
+  rxscan201_scan:
+    set_addr $I10, rxscan201_loop
+    rx197_cur."!mark_push"(0, rx197_pos, $I10)
+  rxscan201_done:
+.annotate 'line', 116
   # rx subrule "EXPR" subtype=capture negate=
-    rx193_cur."!cursor_pos"(rx193_pos)
-    $P10 = rx193_cur."EXPR"()
-    unless $P10, rx193_fail
-    rx193_cur."!mark_push"(0, -1, 0, $P10)
+    rx197_cur."!cursor_pos"(rx197_pos)
+    $P10 = rx197_cur."EXPR"()
+    unless $P10, rx197_fail
+    rx197_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx193_pos = $P10."pos"()
+    rx197_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx193_cur."!cursor_pos"(rx193_pos)
-    $P10 = rx193_cur."ws"()
-    unless $P10, rx193_fail
-    rx193_pos = $P10."pos"()
+    rx197_cur."!cursor_pos"(rx197_pos)
+    $P10 = rx197_cur."ws"()
+    unless $P10, rx197_fail
+    rx197_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx193_cur."!cursor_pos"(rx193_pos)
-    $P10 = rx193_cur."pblock"()
-    unless $P10, rx193_fail
-    rx193_cur."!mark_push"(0, -1, 0, $P10)
+    rx197_cur."!cursor_pos"(rx197_pos)
+    $P10 = rx197_cur."pblock"()
+    unless $P10, rx197_fail
+    rx197_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx193_pos = $P10."pos"()
-.annotate 'line', 113
+    rx197_pos = $P10."pos"()
+.annotate 'line', 115
   # rx pass
-    rx193_cur."!cursor_pass"(rx193_pos, "xblock")
-    rx193_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx193_pos)
-    .return (rx193_cur)
-  rx193_fail:
+    rx197_cur."!cursor_pass"(rx197_pos, "xblock")
+    rx197_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx197_pos)
+    .return (rx197_cur)
+  rx197_fail:
 .annotate 'line', 4
-    (rx193_rep, rx193_pos, $I10, $P10) = rx193_cur."!mark_fail"(0)
-    lt rx193_pos, -1, rx193_done
-    eq rx193_pos, -1, rx193_fail
+    (rx197_rep, rx197_pos, $I10, $P10) = rx197_cur."!mark_fail"(0)
+    lt rx197_pos, -1, rx197_done
+    eq rx197_pos, -1, rx197_fail
     jump $I10
-  rx193_done:
-    rx193_cur."!cursor_fail"()
-    rx193_cur."!cursor_debug"("FAIL  ", "xblock")
-    .return (rx193_cur)
+  rx197_done:
+    rx197_cur."!cursor_fail"()
+    rx197_cur."!cursor_debug"("FAIL  ", "xblock")
+    .return (rx197_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__xblock"  :subid("39_1274022894.43745") :method
+.sub "!PREFIX__xblock"  :subid("39_1275811487.95429") :method
 .annotate 'line', 4
-    $P195 = self."!PREFIX__!subrule"("EXPR", "")
-    new $P196, "ResizablePMCArray"
-    push $P196, $P195
-    .return ($P196)
+    $P199 = self."!PREFIX__!subrule"("EXPR", "")
+    new $P200, "ResizablePMCArray"
+    push $P200, $P199
+    .return ($P200)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pblock"  :subid("40_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "pblock"  :subid("40_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx199_tgt
-    .local int rx199_pos
-    .local int rx199_off
-    .local int rx199_eos
-    .local int rx199_rep
-    .local pmc rx199_cur
-    (rx199_cur, rx199_pos, rx199_tgt) = self."!cursor_start"()
-    rx199_cur."!cursor_debug"("START ", "pblock")
-    .lex unicode:"$\x{a2}", rx199_cur
+    .local string rx203_tgt
+    .local int rx203_pos
+    .local int rx203_off
+    .local int rx203_eos
+    .local int rx203_rep
+    .local pmc rx203_cur
+    (rx203_cur, rx203_pos, rx203_tgt) = self."!cursor_start"()
+    rx203_cur."!cursor_debug"("START ", "pblock")
+    .lex unicode:"$\x{a2}", rx203_cur
     .local pmc match
     .lex "$/", match
-    length rx199_eos, rx199_tgt
-    set rx199_off, 0
-    lt rx199_pos, 2, rx199_start
-    sub rx199_off, rx199_pos, 1
-    substr rx199_tgt, rx199_tgt, rx199_off
-  rx199_start:
+    length rx203_eos, rx203_tgt
+    gt rx203_pos, rx203_eos, rx203_done
+    set rx203_off, 0
+    lt rx203_pos, 2, rx203_start
+    sub rx203_off, rx203_pos, 1
+    substr rx203_tgt, rx203_tgt, rx203_off
+  rx203_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan204_done
-    goto rxscan204_scan
-  rxscan204_loop:
-    ($P10) = rx199_cur."from"()
+    ne $I10, -1, rxscan208_done
+    goto rxscan208_scan
+  rxscan208_loop:
+    ($P10) = rx203_cur."from"()
     inc $P10
-    set rx199_pos, $P10
-    ge rx199_pos, rx199_eos, rxscan204_done
-  rxscan204_scan:
-    set_addr $I10, rxscan204_loop
-    rx199_cur."!mark_push"(0, rx199_pos, $I10)
-  rxscan204_done:
-  alt205_0:
-.annotate 'line', 117
-    set_addr $I10, alt205_1
-    rx199_cur."!mark_push"(0, rx199_pos, $I10)
-.annotate 'line', 118
-  # rx subrule "lambda" subtype=method negate=
-    rx199_cur."!cursor_pos"(rx199_pos)
-    $P10 = rx199_cur."lambda"()
-    unless $P10, rx199_fail
-    rx199_pos = $P10."pos"()
+    set rx203_pos, $P10
+    ge rx203_pos, rx203_eos, rxscan208_done
+  rxscan208_scan:
+    set_addr $I10, rxscan208_loop
+    rx203_cur."!mark_push"(0, rx203_pos, $I10)
+  rxscan208_done:
+  alt209_0:
 .annotate 'line', 119
-  # rx subrule "newpad" subtype=method negate=
-    rx199_cur."!cursor_pos"(rx199_pos)
-    $P10 = rx199_cur."newpad"()
-    unless $P10, rx199_fail
-    rx199_pos = $P10."pos"()
+    set_addr $I10, alt209_1
+    rx203_cur."!mark_push"(0, rx203_pos, $I10)
 .annotate 'line', 120
+  # rx subrule "lambda" subtype=method negate=
+    rx203_cur."!cursor_pos"(rx203_pos)
+    $P10 = rx203_cur."lambda"()
+    unless $P10, rx203_fail
+    rx203_pos = $P10."pos"()
+.annotate 'line', 121
+  # rx subrule "newpad" subtype=method negate=
+    rx203_cur."!cursor_pos"(rx203_pos)
+    $P10 = rx203_cur."newpad"()
+    unless $P10, rx203_fail
+    rx203_pos = $P10."pos"()
+.annotate 'line', 122
   # rx subrule "signature" subtype=capture negate=
-    rx199_cur."!cursor_pos"(rx199_pos)
-    $P10 = rx199_cur."signature"()
-    unless $P10, rx199_fail
-    rx199_cur."!mark_push"(0, -1, 0, $P10)
+    rx203_cur."!cursor_pos"(rx203_pos)
+    $P10 = rx203_cur."signature"()
+    unless $P10, rx203_fail
+    rx203_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx199_pos = $P10."pos"()
-.annotate 'line', 121
+    rx203_pos = $P10."pos"()
+.annotate 'line', 123
   # rx subrule "blockoid" subtype=capture negate=
-    rx199_cur."!cursor_pos"(rx199_pos)
-    $P10 = rx199_cur."blockoid"()
-    unless $P10, rx199_fail
-    rx199_cur."!mark_push"(0, -1, 0, $P10)
+    rx203_cur."!cursor_pos"(rx203_pos)
+    $P10 = rx203_cur."blockoid"()
+    unless $P10, rx203_fail
+    rx203_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx199_pos = $P10."pos"()
-.annotate 'line', 118
-    goto alt205_end
-  alt205_1:
-    set_addr $I10, alt205_2
-    rx199_cur."!mark_push"(0, rx199_pos, $I10)
-.annotate 'line', 122
+    rx203_pos = $P10."pos"()
+.annotate 'line', 120
+    goto alt209_end
+  alt209_1:
+    set_addr $I10, alt209_2
+    rx203_cur."!mark_push"(0, rx203_pos, $I10)
+.annotate 'line', 124
   # rx enumcharlist negate=0 zerowidth
-    ge rx199_pos, rx199_eos, rx199_fail
-    sub $I10, rx199_pos, rx199_off
-    substr $S10, rx199_tgt, $I10, 1
+    ge rx203_pos, rx203_eos, rx203_fail
+    sub $I10, rx203_pos, rx203_off
+    substr $S10, rx203_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx199_fail
-.annotate 'line', 123
+    lt $I11, 0, rx203_fail
+.annotate 'line', 125
   # rx subrule "newpad" subtype=method negate=
-    rx199_cur."!cursor_pos"(rx199_pos)
-    $P10 = rx199_cur."newpad"()
-    unless $P10, rx199_fail
-    rx199_pos = $P10."pos"()
-.annotate 'line', 124
+    rx203_cur."!cursor_pos"(rx203_pos)
+    $P10 = rx203_cur."newpad"()
+    unless $P10, rx203_fail
+    rx203_pos = $P10."pos"()
+.annotate 'line', 126
   # rx subrule "blockoid" subtype=capture negate=
-    rx199_cur."!cursor_pos"(rx199_pos)
-    $P10 = rx199_cur."blockoid"()
-    unless $P10, rx199_fail
-    rx199_cur."!mark_push"(0, -1, 0, $P10)
+    rx203_cur."!cursor_pos"(rx203_pos)
+    $P10 = rx203_cur."blockoid"()
+    unless $P10, rx203_fail
+    rx203_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx199_pos = $P10."pos"()
-.annotate 'line', 122
-    goto alt205_end
-  alt205_2:
-.annotate 'line', 125
+    rx203_pos = $P10."pos"()
+.annotate 'line', 124
+    goto alt209_end
+  alt209_2:
+.annotate 'line', 127
   # rx subrule "panic" subtype=method negate=
-    rx199_cur."!cursor_pos"(rx199_pos)
-    $P10 = rx199_cur."panic"("Missing block")
-    unless $P10, rx199_fail
-    rx199_pos = $P10."pos"()
-  alt205_end:
-.annotate 'line', 117
+    rx203_cur."!cursor_pos"(rx203_pos)
+    $P10 = rx203_cur."panic"("Missing block")
+    unless $P10, rx203_fail
+    rx203_pos = $P10."pos"()
+  alt209_end:
+.annotate 'line', 119
   # rx pass
-    rx199_cur."!cursor_pass"(rx199_pos, "pblock")
-    rx199_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx199_pos)
-    .return (rx199_cur)
-  rx199_fail:
+    rx203_cur."!cursor_pass"(rx203_pos, "pblock")
+    rx203_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx203_pos)
+    .return (rx203_cur)
+  rx203_fail:
 .annotate 'line', 4
-    (rx199_rep, rx199_pos, $I10, $P10) = rx199_cur."!mark_fail"(0)
-    lt rx199_pos, -1, rx199_done
-    eq rx199_pos, -1, rx199_fail
+    (rx203_rep, rx203_pos, $I10, $P10) = rx203_cur."!mark_fail"(0)
+    lt rx203_pos, -1, rx203_done
+    eq rx203_pos, -1, rx203_fail
     jump $I10
-  rx199_done:
-    rx199_cur."!cursor_fail"()
-    rx199_cur."!cursor_debug"("FAIL  ", "pblock")
-    .return (rx199_cur)
+  rx203_done:
+    rx203_cur."!cursor_fail"()
+    rx203_cur."!cursor_debug"("FAIL  ", "pblock")
+    .return (rx203_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pblock"  :subid("41_1274022894.43745") :method
+.sub "!PREFIX__pblock"  :subid("41_1275811487.95429") :method
 .annotate 'line', 4
-    $P201 = self."!PREFIX__!subrule"("", "")
-    $P202 = self."!PREFIX__!subrule"("", "")
-    new $P203, "ResizablePMCArray"
-    push $P203, $P201
-    push $P203, "{"
-    push $P203, $P202
-    .return ($P203)
+    $P205 = self."!PREFIX__!subrule"("panic", "")
+    $P206 = self."!PREFIX__!subrule"("lambda", "")
+    new $P207, "ResizablePMCArray"
+    push $P207, $P205
+    push $P207, "{"
+    push $P207, $P206
+    .return ($P207)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "lambda"  :subid("42_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "lambda"  :subid("42_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx207_tgt
-    .local int rx207_pos
-    .local int rx207_off
-    .local int rx207_eos
-    .local int rx207_rep
-    .local pmc rx207_cur
-    (rx207_cur, rx207_pos, rx207_tgt) = self."!cursor_start"()
-    rx207_cur."!cursor_debug"("START ", "lambda")
-    .lex unicode:"$\x{a2}", rx207_cur
+    .local string rx211_tgt
+    .local int rx211_pos
+    .local int rx211_off
+    .local int rx211_eos
+    .local int rx211_rep
+    .local pmc rx211_cur
+    (rx211_cur, rx211_pos, rx211_tgt) = self."!cursor_start"()
+    rx211_cur."!cursor_debug"("START ", "lambda")
+    .lex unicode:"$\x{a2}", rx211_cur
     .local pmc match
     .lex "$/", match
-    length rx207_eos, rx207_tgt
-    set rx207_off, 0
-    lt rx207_pos, 2, rx207_start
-    sub rx207_off, rx207_pos, 1
-    substr rx207_tgt, rx207_tgt, rx207_off
-  rx207_start:
+    length rx211_eos, rx211_tgt
+    gt rx211_pos, rx211_eos, rx211_done
+    set rx211_off, 0
+    lt rx211_pos, 2, rx211_start
+    sub rx211_off, rx211_pos, 1
+    substr rx211_tgt, rx211_tgt, rx211_off
+  rx211_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan210_done
-    goto rxscan210_scan
-  rxscan210_loop:
-    ($P10) = rx207_cur."from"()
+    ne $I10, -1, rxscan214_done
+    goto rxscan214_scan
+  rxscan214_loop:
+    ($P10) = rx211_cur."from"()
     inc $P10
-    set rx207_pos, $P10
-    ge rx207_pos, rx207_eos, rxscan210_done
-  rxscan210_scan:
-    set_addr $I10, rxscan210_loop
-    rx207_cur."!mark_push"(0, rx207_pos, $I10)
-  rxscan210_done:
-  alt211_0:
-.annotate 'line', 128
-    set_addr $I10, alt211_1
-    rx207_cur."!mark_push"(0, rx207_pos, $I10)
+    set rx211_pos, $P10
+    ge rx211_pos, rx211_eos, rxscan214_done
+  rxscan214_scan:
+    set_addr $I10, rxscan214_loop
+    rx211_cur."!mark_push"(0, rx211_pos, $I10)
+  rxscan214_done:
+  alt215_0:
+.annotate 'line', 130
+    set_addr $I10, alt215_1
+    rx211_cur."!mark_push"(0, rx211_pos, $I10)
   # rx literal  "->"
-    add $I11, rx207_pos, 2
-    gt $I11, rx207_eos, rx207_fail
-    sub $I11, rx207_pos, rx207_off
-    substr $S10, rx207_tgt, $I11, 2
-    ne $S10, "->", rx207_fail
-    add rx207_pos, 2
-    goto alt211_end
-  alt211_1:
+    add $I11, rx211_pos, 2
+    gt $I11, rx211_eos, rx211_fail
+    sub $I11, rx211_pos, rx211_off
+    substr $S10, rx211_tgt, $I11, 2
+    ne $S10, "->", rx211_fail
+    add rx211_pos, 2
+    goto alt215_end
+  alt215_1:
   # rx literal  "<->"
-    add $I11, rx207_pos, 3
-    gt $I11, rx207_eos, rx207_fail
-    sub $I11, rx207_pos, rx207_off
-    substr $S10, rx207_tgt, $I11, 3
-    ne $S10, "<->", rx207_fail
-    add rx207_pos, 3
-  alt211_end:
+    add $I11, rx211_pos, 3
+    gt $I11, rx211_eos, rx211_fail
+    sub $I11, rx211_pos, rx211_off
+    substr $S10, rx211_tgt, $I11, 3
+    ne $S10, "<->", rx211_fail
+    add rx211_pos, 3
+  alt215_end:
   # rx pass
-    rx207_cur."!cursor_pass"(rx207_pos, "lambda")
-    rx207_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx207_pos)
-    .return (rx207_cur)
-  rx207_fail:
+    rx211_cur."!cursor_pass"(rx211_pos, "lambda")
+    rx211_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx211_pos)
+    .return (rx211_cur)
+  rx211_fail:
 .annotate 'line', 4
-    (rx207_rep, rx207_pos, $I10, $P10) = rx207_cur."!mark_fail"(0)
-    lt rx207_pos, -1, rx207_done
-    eq rx207_pos, -1, rx207_fail
+    (rx211_rep, rx211_pos, $I10, $P10) = rx211_cur."!mark_fail"(0)
+    lt rx211_pos, -1, rx211_done
+    eq rx211_pos, -1, rx211_fail
     jump $I10
-  rx207_done:
-    rx207_cur."!cursor_fail"()
-    rx207_cur."!cursor_debug"("FAIL  ", "lambda")
-    .return (rx207_cur)
+  rx211_done:
+    rx211_cur."!cursor_fail"()
+    rx211_cur."!cursor_debug"("FAIL  ", "lambda")
+    .return (rx211_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__lambda"  :subid("43_1274022894.43745") :method
+.sub "!PREFIX__lambda"  :subid("43_1275811487.95429") :method
 .annotate 'line', 4
-    new $P209, "ResizablePMCArray"
-    push $P209, "<->"
-    push $P209, "->"
-    .return ($P209)
+    new $P213, "ResizablePMCArray"
+    push $P213, "<->"
+    push $P213, "->"
+    .return ($P213)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "block"  :subid("44_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "block"  :subid("44_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx213_tgt
-    .local int rx213_pos
-    .local int rx213_off
-    .local int rx213_eos
-    .local int rx213_rep
-    .local pmc rx213_cur
-    (rx213_cur, rx213_pos, rx213_tgt) = self."!cursor_start"()
-    rx213_cur."!cursor_debug"("START ", "block")
-    .lex unicode:"$\x{a2}", rx213_cur
+    .local string rx217_tgt
+    .local int rx217_pos
+    .local int rx217_off
+    .local int rx217_eos
+    .local int rx217_rep
+    .local pmc rx217_cur
+    (rx217_cur, rx217_pos, rx217_tgt) = self."!cursor_start"()
+    rx217_cur."!cursor_debug"("START ", "block")
+    .lex unicode:"$\x{a2}", rx217_cur
     .local pmc match
     .lex "$/", match
-    length rx213_eos, rx213_tgt
-    set rx213_off, 0
-    lt rx213_pos, 2, rx213_start
-    sub rx213_off, rx213_pos, 1
-    substr rx213_tgt, rx213_tgt, rx213_off
-  rx213_start:
+    length rx217_eos, rx217_tgt
+    gt rx217_pos, rx217_eos, rx217_done
+    set rx217_off, 0
+    lt rx217_pos, 2, rx217_start
+    sub rx217_off, rx217_pos, 1
+    substr rx217_tgt, rx217_tgt, rx217_off
+  rx217_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan217_done
-    goto rxscan217_scan
-  rxscan217_loop:
-    ($P10) = rx213_cur."from"()
+    ne $I10, -1, rxscan221_done
+    goto rxscan221_scan
+  rxscan221_loop:
+    ($P10) = rx217_cur."from"()
     inc $P10
-    set rx213_pos, $P10
-    ge rx213_pos, rx213_eos, rxscan217_done
-  rxscan217_scan:
-    set_addr $I10, rxscan217_loop
-    rx213_cur."!mark_push"(0, rx213_pos, $I10)
-  rxscan217_done:
-  alt218_0:
-.annotate 'line', 131
-    set_addr $I10, alt218_1
-    rx213_cur."!mark_push"(0, rx213_pos, $I10)
+    set rx217_pos, $P10
+    ge rx217_pos, rx217_eos, rxscan221_done
+  rxscan221_scan:
+    set_addr $I10, rxscan221_loop
+    rx217_cur."!mark_push"(0, rx217_pos, $I10)
+  rxscan221_done:
+  alt222_0:
+.annotate 'line', 133
+    set_addr $I10, alt222_1
+    rx217_cur."!mark_push"(0, rx217_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx213_pos, rx213_eos, rx213_fail
-    sub $I10, rx213_pos, rx213_off
-    substr $S10, rx213_tgt, $I10, 1
+    ge rx217_pos, rx217_eos, rx217_fail
+    sub $I10, rx217_pos, rx217_off
+    substr $S10, rx217_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx213_fail
-    goto alt218_end
-  alt218_1:
+    lt $I11, 0, rx217_fail
+    goto alt222_end
+  alt222_1:
   # rx subrule "panic" subtype=method negate=
-    rx213_cur."!cursor_pos"(rx213_pos)
-    $P10 = rx213_cur."panic"("Missing block")
-    unless $P10, rx213_fail
-    rx213_pos = $P10."pos"()
-  alt218_end:
-.annotate 'line', 132
+    rx217_cur."!cursor_pos"(rx217_pos)
+    $P10 = rx217_cur."panic"("Missing block")
+    unless $P10, rx217_fail
+    rx217_pos = $P10."pos"()
+  alt222_end:
+.annotate 'line', 134
   # rx subrule "newpad" subtype=method negate=
-    rx213_cur."!cursor_pos"(rx213_pos)
-    $P10 = rx213_cur."newpad"()
-    unless $P10, rx213_fail
-    rx213_pos = $P10."pos"()
-.annotate 'line', 133
+    rx217_cur."!cursor_pos"(rx217_pos)
+    $P10 = rx217_cur."newpad"()
+    unless $P10, rx217_fail
+    rx217_pos = $P10."pos"()
+.annotate 'line', 135
   # rx subrule "blockoid" subtype=capture negate=
-    rx213_cur."!cursor_pos"(rx213_pos)
-    $P10 = rx213_cur."blockoid"()
-    unless $P10, rx213_fail
-    rx213_cur."!mark_push"(0, -1, 0, $P10)
+    rx217_cur."!cursor_pos"(rx217_pos)
+    $P10 = rx217_cur."blockoid"()
+    unless $P10, rx217_fail
+    rx217_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx213_pos = $P10."pos"()
-.annotate 'line', 130
+    rx217_pos = $P10."pos"()
+.annotate 'line', 132
   # rx pass
-    rx213_cur."!cursor_pass"(rx213_pos, "block")
-    rx213_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx213_pos)
-    .return (rx213_cur)
-  rx213_fail:
+    rx217_cur."!cursor_pass"(rx217_pos, "block")
+    rx217_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx217_pos)
+    .return (rx217_cur)
+  rx217_fail:
 .annotate 'line', 4
-    (rx213_rep, rx213_pos, $I10, $P10) = rx213_cur."!mark_fail"(0)
-    lt rx213_pos, -1, rx213_done
-    eq rx213_pos, -1, rx213_fail
+    (rx217_rep, rx217_pos, $I10, $P10) = rx217_cur."!mark_fail"(0)
+    lt rx217_pos, -1, rx217_done
+    eq rx217_pos, -1, rx217_fail
     jump $I10
-  rx213_done:
-    rx213_cur."!cursor_fail"()
-    rx213_cur."!cursor_debug"("FAIL  ", "block")
-    .return (rx213_cur)
+  rx217_done:
+    rx217_cur."!cursor_fail"()
+    rx217_cur."!cursor_debug"("FAIL  ", "block")
+    .return (rx217_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__block"  :subid("45_1274022894.43745") :method
+.sub "!PREFIX__block"  :subid("45_1275811487.95429") :method
 .annotate 'line', 4
-    $P215 = self."!PREFIX__!subrule"("", "")
-    new $P216, "ResizablePMCArray"
-    push $P216, $P215
-    push $P216, "{"
-    .return ($P216)
+    $P219 = self."!PREFIX__!subrule"("panic", "")
+    new $P220, "ResizablePMCArray"
+    push $P220, $P219
+    push $P220, "{"
+    .return ($P220)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blockoid"  :subid("46_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "blockoid"  :subid("46_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx220_tgt
-    .local int rx220_pos
-    .local int rx220_off
-    .local int rx220_eos
-    .local int rx220_rep
-    .local pmc rx220_cur
-    (rx220_cur, rx220_pos, rx220_tgt) = self."!cursor_start"()
-    rx220_cur."!cursor_debug"("START ", "blockoid")
-    .lex unicode:"$\x{a2}", rx220_cur
+    .local string rx224_tgt
+    .local int rx224_pos
+    .local int rx224_off
+    .local int rx224_eos
+    .local int rx224_rep
+    .local pmc rx224_cur
+    (rx224_cur, rx224_pos, rx224_tgt) = self."!cursor_start"()
+    rx224_cur."!cursor_debug"("START ", "blockoid")
+    .lex unicode:"$\x{a2}", rx224_cur
     .local pmc match
     .lex "$/", match
-    length rx220_eos, rx220_tgt
-    set rx220_off, 0
-    lt rx220_pos, 2, rx220_start
-    sub rx220_off, rx220_pos, 1
-    substr rx220_tgt, rx220_tgt, rx220_off
-  rx220_start:
+    length rx224_eos, rx224_tgt
+    gt rx224_pos, rx224_eos, rx224_done
+    set rx224_off, 0
+    lt rx224_pos, 2, rx224_start
+    sub rx224_off, rx224_pos, 1
+    substr rx224_tgt, rx224_tgt, rx224_off
+  rx224_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan224_done
-    goto rxscan224_scan
-  rxscan224_loop:
-    ($P10) = rx220_cur."from"()
+    ne $I10, -1, rxscan228_done
+    goto rxscan228_scan
+  rxscan228_loop:
+    ($P10) = rx224_cur."from"()
     inc $P10
-    set rx220_pos, $P10
-    ge rx220_pos, rx220_eos, rxscan224_done
-  rxscan224_scan:
-    set_addr $I10, rxscan224_loop
-    rx220_cur."!mark_push"(0, rx220_pos, $I10)
-  rxscan224_done:
-.annotate 'line', 137
+    set rx224_pos, $P10
+    ge rx224_pos, rx224_eos, rxscan228_done
+  rxscan228_scan:
+    set_addr $I10, rxscan228_loop
+    rx224_cur."!mark_push"(0, rx224_pos, $I10)
+  rxscan228_done:
+.annotate 'line', 139
   # rx subrule "finishpad" subtype=method negate=
-    rx220_cur."!cursor_pos"(rx220_pos)
-    $P10 = rx220_cur."finishpad"()
-    unless $P10, rx220_fail
-    rx220_pos = $P10."pos"()
-.annotate 'line', 138
+    rx224_cur."!cursor_pos"(rx224_pos)
+    $P10 = rx224_cur."finishpad"()
+    unless $P10, rx224_fail
+    rx224_pos = $P10."pos"()
+.annotate 'line', 140
   # rx literal  "{"
-    add $I11, rx220_pos, 1
-    gt $I11, rx220_eos, rx220_fail
-    sub $I11, rx220_pos, rx220_off
-    substr $S10, rx220_tgt, $I11, 1
-    ne $S10, "{", rx220_fail
-    add rx220_pos, 1
+    add $I11, rx224_pos, 1
+    gt $I11, rx224_eos, rx224_fail
+    sub $I11, rx224_pos, rx224_off
+    substr $S10, rx224_tgt, $I11, 1
+    ne $S10, "{", rx224_fail
+    add rx224_pos, 1
   # rx subrule "statementlist" subtype=capture negate=
-    rx220_cur."!cursor_pos"(rx220_pos)
-    $P10 = rx220_cur."statementlist"()
-    unless $P10, rx220_fail
-    rx220_cur."!mark_push"(0, -1, 0, $P10)
+    rx224_cur."!cursor_pos"(rx224_pos)
+    $P10 = rx224_cur."statementlist"()
+    unless $P10, rx224_fail
+    rx224_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statementlist")
-    rx220_pos = $P10."pos"()
-  alt225_0:
-    set_addr $I10, alt225_1
-    rx220_cur."!mark_push"(0, rx220_pos, $I10)
+    rx224_pos = $P10."pos"()
+  alt229_0:
+    set_addr $I10, alt229_1
+    rx224_cur."!mark_push"(0, rx224_pos, $I10)
   # rx literal  "}"
-    add $I11, rx220_pos, 1
-    gt $I11, rx220_eos, rx220_fail
-    sub $I11, rx220_pos, rx220_off
-    substr $S10, rx220_tgt, $I11, 1
-    ne $S10, "}", rx220_fail
-    add rx220_pos, 1
-    goto alt225_end
-  alt225_1:
+    add $I11, rx224_pos, 1
+    gt $I11, rx224_eos, rx224_fail
+    sub $I11, rx224_pos, rx224_off
+    substr $S10, rx224_tgt, $I11, 1
+    ne $S10, "}", rx224_fail
+    add rx224_pos, 1
+    goto alt229_end
+  alt229_1:
   # rx subrule "FAILGOAL" subtype=method negate=
-    rx220_cur."!cursor_pos"(rx220_pos)
-    $P10 = rx220_cur."FAILGOAL"("'}'")
-    unless $P10, rx220_fail
-    rx220_pos = $P10."pos"()
-  alt225_end:
-.annotate 'line', 139
+    rx224_cur."!cursor_pos"(rx224_pos)
+    $P10 = rx224_cur."FAILGOAL"("'}'")
+    unless $P10, rx224_fail
+    rx224_pos = $P10."pos"()
+  alt229_end:
+.annotate 'line', 141
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx220_cur."!cursor_pos"(rx220_pos)
-    $P10 = rx220_cur."ENDSTMT"()
-    unless $P10, rx220_fail
-.annotate 'line', 136
+    rx224_cur."!cursor_pos"(rx224_pos)
+    $P10 = rx224_cur."ENDSTMT"()
+    unless $P10, rx224_fail
+.annotate 'line', 138
   # rx pass
-    rx220_cur."!cursor_pass"(rx220_pos, "blockoid")
-    rx220_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx220_pos)
-    .return (rx220_cur)
-  rx220_fail:
+    rx224_cur."!cursor_pass"(rx224_pos, "blockoid")
+    rx224_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx224_pos)
+    .return (rx224_cur)
+  rx224_fail:
 .annotate 'line', 4
-    (rx220_rep, rx220_pos, $I10, $P10) = rx220_cur."!mark_fail"(0)
-    lt rx220_pos, -1, rx220_done
-    eq rx220_pos, -1, rx220_fail
+    (rx224_rep, rx224_pos, $I10, $P10) = rx224_cur."!mark_fail"(0)
+    lt rx224_pos, -1, rx224_done
+    eq rx224_pos, -1, rx224_fail
     jump $I10
-  rx220_done:
-    rx220_cur."!cursor_fail"()
-    rx220_cur."!cursor_debug"("FAIL  ", "blockoid")
-    .return (rx220_cur)
+  rx224_done:
+    rx224_cur."!cursor_fail"()
+    rx224_cur."!cursor_debug"("FAIL  ", "blockoid")
+    .return (rx224_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blockoid"  :subid("47_1274022894.43745") :method
+.sub "!PREFIX__blockoid"  :subid("47_1275811487.95429") :method
 .annotate 'line', 4
-    $P222 = self."!PREFIX__!subrule"("", "")
-    new $P223, "ResizablePMCArray"
-    push $P223, $P222
-    .return ($P223)
+    $P226 = self."!PREFIX__!subrule"("finishpad", "")
+    new $P227, "ResizablePMCArray"
+    push $P227, $P226
+    .return ($P227)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "newpad"  :subid("48_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "newpad"  :subid("48_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx228_tgt
-    .local int rx228_pos
-    .local int rx228_off
-    .local int rx228_eos
-    .local int rx228_rep
-    .local pmc rx228_cur
-    (rx228_cur, rx228_pos, rx228_tgt) = self."!cursor_start"()
-    rx228_cur."!cursor_debug"("START ", "newpad")
-    .lex unicode:"$\x{a2}", rx228_cur
+    .local string rx232_tgt
+    .local int rx232_pos
+    .local int rx232_off
+    .local int rx232_eos
+    .local int rx232_rep
+    .local pmc rx232_cur
+    (rx232_cur, rx232_pos, rx232_tgt) = self."!cursor_start"()
+    rx232_cur."!cursor_debug"("START ", "newpad")
+    .lex unicode:"$\x{a2}", rx232_cur
     .local pmc match
     .lex "$/", match
-    length rx228_eos, rx228_tgt
-    set rx228_off, 0
-    lt rx228_pos, 2, rx228_start
-    sub rx228_off, rx228_pos, 1
-    substr rx228_tgt, rx228_tgt, rx228_off
-  rx228_start:
+    length rx232_eos, rx232_tgt
+    gt rx232_pos, rx232_eos, rx232_done
+    set rx232_off, 0
+    lt rx232_pos, 2, rx232_start
+    sub rx232_off, rx232_pos, 1
+    substr rx232_tgt, rx232_tgt, rx232_off
+  rx232_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan231_done
-    goto rxscan231_scan
-  rxscan231_loop:
-    ($P10) = rx228_cur."from"()
+    ne $I10, -1, rxscan235_done
+    goto rxscan235_scan
+  rxscan235_loop:
+    ($P10) = rx232_cur."from"()
     inc $P10
-    set rx228_pos, $P10
-    ge rx228_pos, rx228_eos, rxscan231_done
-  rxscan231_scan:
-    set_addr $I10, rxscan231_loop
-    rx228_cur."!mark_push"(0, rx228_pos, $I10)
-  rxscan231_done:
-.annotate 'line', 142
+    set rx232_pos, $P10
+    ge rx232_pos, rx232_eos, rxscan235_done
+  rxscan235_scan:
+    set_addr $I10, rxscan235_loop
+    rx232_cur."!mark_push"(0, rx232_pos, $I10)
+  rxscan235_done:
+.annotate 'line', 144
   # rx pass
-    rx228_cur."!cursor_pass"(rx228_pos, "newpad")
-    rx228_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx228_pos)
-    .return (rx228_cur)
-  rx228_fail:
+    rx232_cur."!cursor_pass"(rx232_pos, "newpad")
+    rx232_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx232_pos)
+    .return (rx232_cur)
+  rx232_fail:
 .annotate 'line', 4
-    (rx228_rep, rx228_pos, $I10, $P10) = rx228_cur."!mark_fail"(0)
-    lt rx228_pos, -1, rx228_done
-    eq rx228_pos, -1, rx228_fail
+    (rx232_rep, rx232_pos, $I10, $P10) = rx232_cur."!mark_fail"(0)
+    lt rx232_pos, -1, rx232_done
+    eq rx232_pos, -1, rx232_fail
     jump $I10
-  rx228_done:
-    rx228_cur."!cursor_fail"()
-    rx228_cur."!cursor_debug"("FAIL  ", "newpad")
-    .return (rx228_cur)
+  rx232_done:
+    rx232_cur."!cursor_fail"()
+    rx232_cur."!cursor_debug"("FAIL  ", "newpad")
+    .return (rx232_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__newpad"  :subid("49_1274022894.43745") :method
+.sub "!PREFIX__newpad"  :subid("49_1275811487.95429") :method
 .annotate 'line', 4
-    new $P230, "ResizablePMCArray"
-    push $P230, ""
-    .return ($P230)
+    new $P234, "ResizablePMCArray"
+    push $P234, ""
+    .return ($P234)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "finishpad"  :subid("50_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "outerctx"  :subid("50_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx233_tgt
-    .local int rx233_pos
-    .local int rx233_off
-    .local int rx233_eos
-    .local int rx233_rep
-    .local pmc rx233_cur
-    (rx233_cur, rx233_pos, rx233_tgt) = self."!cursor_start"()
-    rx233_cur."!cursor_debug"("START ", "finishpad")
-    .lex unicode:"$\x{a2}", rx233_cur
+    .local string rx237_tgt
+    .local int rx237_pos
+    .local int rx237_off
+    .local int rx237_eos
+    .local int rx237_rep
+    .local pmc rx237_cur
+    (rx237_cur, rx237_pos, rx237_tgt) = self."!cursor_start"()
+    rx237_cur."!cursor_debug"("START ", "outerctx")
+    .lex unicode:"$\x{a2}", rx237_cur
     .local pmc match
     .lex "$/", match
-    length rx233_eos, rx233_tgt
-    set rx233_off, 0
-    lt rx233_pos, 2, rx233_start
-    sub rx233_off, rx233_pos, 1
-    substr rx233_tgt, rx233_tgt, rx233_off
-  rx233_start:
+    length rx237_eos, rx237_tgt
+    gt rx237_pos, rx237_eos, rx237_done
+    set rx237_off, 0
+    lt rx237_pos, 2, rx237_start
+    sub rx237_off, rx237_pos, 1
+    substr rx237_tgt, rx237_tgt, rx237_off
+  rx237_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan236_done
-    goto rxscan236_scan
-  rxscan236_loop:
-    ($P10) = rx233_cur."from"()
+    ne $I10, -1, rxscan240_done
+    goto rxscan240_scan
+  rxscan240_loop:
+    ($P10) = rx237_cur."from"()
     inc $P10
-    set rx233_pos, $P10
-    ge rx233_pos, rx233_eos, rxscan236_done
-  rxscan236_scan:
-    set_addr $I10, rxscan236_loop
-    rx233_cur."!mark_push"(0, rx233_pos, $I10)
-  rxscan236_done:
-.annotate 'line', 143
+    set rx237_pos, $P10
+    ge rx237_pos, rx237_eos, rxscan240_done
+  rxscan240_scan:
+    set_addr $I10, rxscan240_loop
+    rx237_cur."!mark_push"(0, rx237_pos, $I10)
+  rxscan240_done:
+.annotate 'line', 145
   # rx pass
-    rx233_cur."!cursor_pass"(rx233_pos, "finishpad")
-    rx233_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx233_pos)
-    .return (rx233_cur)
-  rx233_fail:
+    rx237_cur."!cursor_pass"(rx237_pos, "outerctx")
+    rx237_cur."!cursor_debug"("PASS  ", "outerctx", " at pos=", rx237_pos)
+    .return (rx237_cur)
+  rx237_fail:
 .annotate 'line', 4
-    (rx233_rep, rx233_pos, $I10, $P10) = rx233_cur."!mark_fail"(0)
-    lt rx233_pos, -1, rx233_done
-    eq rx233_pos, -1, rx233_fail
+    (rx237_rep, rx237_pos, $I10, $P10) = rx237_cur."!mark_fail"(0)
+    lt rx237_pos, -1, rx237_done
+    eq rx237_pos, -1, rx237_fail
     jump $I10
-  rx233_done:
-    rx233_cur."!cursor_fail"()
-    rx233_cur."!cursor_debug"("FAIL  ", "finishpad")
-    .return (rx233_cur)
+  rx237_done:
+    rx237_cur."!cursor_fail"()
+    rx237_cur."!cursor_debug"("FAIL  ", "outerctx")
+    .return (rx237_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__finishpad"  :subid("51_1274022894.43745") :method
+.sub "!PREFIX__outerctx"  :subid("51_1275811487.95429") :method
 .annotate 'line', 4
-    new $P235, "ResizablePMCArray"
-    push $P235, ""
-    .return ($P235)
+    new $P239, "ResizablePMCArray"
+    push $P239, ""
+    .return ($P239)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator"  :subid("52_1274022894.43745") :method
-.annotate 'line', 145
-    $P238 = self."!protoregex"("terminator")
-    .return ($P238)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator"  :subid("53_1274022894.43745") :method
-.annotate 'line', 145
-    $P240 = self."!PREFIX__!protoregex"("terminator")
-    .return ($P240)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "terminator:sym<;>"  :subid("54_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "finishpad"  :subid("52_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx242_tgt
     .local int rx242_pos
@@ -3088,11 +3130,12 @@
     .local int rx242_rep
     .local pmc rx242_cur
     (rx242_cur, rx242_pos, rx242_tgt) = self."!cursor_start"()
-    rx242_cur."!cursor_debug"("START ", "terminator:sym<;>")
+    rx242_cur."!cursor_debug"("START ", "finishpad")
     .lex unicode:"$\x{a2}", rx242_cur
     .local pmc match
     .lex "$/", match
     length rx242_eos, rx242_tgt
+    gt rx242_pos, rx242_eos, rx242_done
     set rx242_off, 0
     lt rx242_pos, 2, rx242_start
     sub rx242_off, rx242_pos, 1
@@ -3110,16 +3153,10 @@
     set_addr $I10, rxscan245_loop
     rx242_cur."!mark_push"(0, rx242_pos, $I10)
   rxscan245_done:
-.annotate 'line', 147
-  # rx enumcharlist negate=0 zerowidth
-    ge rx242_pos, rx242_eos, rx242_fail
-    sub $I10, rx242_pos, rx242_off
-    substr $S10, rx242_tgt, $I10, 1
-    index $I11, ";", $S10
-    lt $I11, 0, rx242_fail
+.annotate 'line', 146
   # rx pass
-    rx242_cur."!cursor_pass"(rx242_pos, "terminator:sym<;>")
-    rx242_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx242_pos)
+    rx242_cur."!cursor_pass"(rx242_pos, "finishpad")
+    rx242_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx242_pos)
     .return (rx242_cur)
   rx242_fail:
 .annotate 'line', 4
@@ -3129,105 +3166,106 @@
     jump $I10
   rx242_done:
     rx242_cur."!cursor_fail"()
-    rx242_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
+    rx242_cur."!cursor_debug"("FAIL  ", "finishpad")
     .return (rx242_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<;>"  :subid("55_1274022894.43745") :method
+.sub "!PREFIX__finishpad"  :subid("53_1275811487.95429") :method
 .annotate 'line', 4
     new $P244, "ResizablePMCArray"
-    push $P244, ";"
+    push $P244, ""
     .return ($P244)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<}>"  :subid("56_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx247_tgt
-    .local int rx247_pos
-    .local int rx247_off
-    .local int rx247_eos
-    .local int rx247_rep
-    .local pmc rx247_cur
-    (rx247_cur, rx247_pos, rx247_tgt) = self."!cursor_start"()
-    rx247_cur."!cursor_debug"("START ", "terminator:sym<}>")
-    .lex unicode:"$\x{a2}", rx247_cur
-    .local pmc match
-    .lex "$/", match
-    length rx247_eos, rx247_tgt
-    set rx247_off, 0
-    lt rx247_pos, 2, rx247_start
-    sub rx247_off, rx247_pos, 1
-    substr rx247_tgt, rx247_tgt, rx247_off
-  rx247_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan250_done
-    goto rxscan250_scan
-  rxscan250_loop:
-    ($P10) = rx247_cur."from"()
-    inc $P10
-    set rx247_pos, $P10
-    ge rx247_pos, rx247_eos, rxscan250_done
-  rxscan250_scan:
-    set_addr $I10, rxscan250_loop
-    rx247_cur."!mark_push"(0, rx247_pos, $I10)
-  rxscan250_done:
+.sub "terminator"  :subid("54_1275811487.95429") :method
 .annotate 'line', 148
-  # rx enumcharlist negate=0 zerowidth
-    ge rx247_pos, rx247_eos, rx247_fail
-    sub $I10, rx247_pos, rx247_off
-    substr $S10, rx247_tgt, $I10, 1
-    index $I11, "}", $S10
-    lt $I11, 0, rx247_fail
-  # rx pass
-    rx247_cur."!cursor_pass"(rx247_pos, "terminator:sym<}>")
-    rx247_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx247_pos)
-    .return (rx247_cur)
-  rx247_fail:
-.annotate 'line', 4
-    (rx247_rep, rx247_pos, $I10, $P10) = rx247_cur."!mark_fail"(0)
-    lt rx247_pos, -1, rx247_done
-    eq rx247_pos, -1, rx247_fail
-    jump $I10
-  rx247_done:
-    rx247_cur."!cursor_fail"()
-    rx247_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
-    .return (rx247_cur)
-    .return ()
+    $P247 = self."!protoregex"("terminator")
+    .return ($P247)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<}>"  :subid("57_1274022894.43745") :method
-.annotate 'line', 4
-    new $P249, "ResizablePMCArray"
-    push $P249, "}"
+.sub "!PREFIX__terminator"  :subid("55_1275811487.95429") :method
+.annotate 'line', 148
+    $P249 = self."!PREFIX__!protoregex"("terminator")
     .return ($P249)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control"  :subid("58_1274022894.43745") :method
-.annotate 'line', 152
-    $P252 = self."!protoregex"("statement_control")
-    .return ($P252)
+.sub "terminator:sym<;>"  :subid("56_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx251_tgt
+    .local int rx251_pos
+    .local int rx251_off
+    .local int rx251_eos
+    .local int rx251_rep
+    .local pmc rx251_cur
+    (rx251_cur, rx251_pos, rx251_tgt) = self."!cursor_start"()
+    rx251_cur."!cursor_debug"("START ", "terminator:sym<;>")
+    .lex unicode:"$\x{a2}", rx251_cur
+    .local pmc match
+    .lex "$/", match
+    length rx251_eos, rx251_tgt
+    gt rx251_pos, rx251_eos, rx251_done
+    set rx251_off, 0
+    lt rx251_pos, 2, rx251_start
+    sub rx251_off, rx251_pos, 1
+    substr rx251_tgt, rx251_tgt, rx251_off
+  rx251_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan254_done
+    goto rxscan254_scan
+  rxscan254_loop:
+    ($P10) = rx251_cur."from"()
+    inc $P10
+    set rx251_pos, $P10
+    ge rx251_pos, rx251_eos, rxscan254_done
+  rxscan254_scan:
+    set_addr $I10, rxscan254_loop
+    rx251_cur."!mark_push"(0, rx251_pos, $I10)
+  rxscan254_done:
+.annotate 'line', 150
+  # rx enumcharlist negate=0 zerowidth
+    ge rx251_pos, rx251_eos, rx251_fail
+    sub $I10, rx251_pos, rx251_off
+    substr $S10, rx251_tgt, $I10, 1
+    index $I11, ";", $S10
+    lt $I11, 0, rx251_fail
+  # rx pass
+    rx251_cur."!cursor_pass"(rx251_pos, "terminator:sym<;>")
+    rx251_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx251_pos)
+    .return (rx251_cur)
+  rx251_fail:
+.annotate 'line', 4
+    (rx251_rep, rx251_pos, $I10, $P10) = rx251_cur."!mark_fail"(0)
+    lt rx251_pos, -1, rx251_done
+    eq rx251_pos, -1, rx251_fail
+    jump $I10
+  rx251_done:
+    rx251_cur."!cursor_fail"()
+    rx251_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
+    .return (rx251_cur)
+    .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control"  :subid("59_1274022894.43745") :method
-.annotate 'line', 152
-    $P254 = self."!PREFIX__!protoregex"("statement_control")
-    .return ($P254)
+.sub "!PREFIX__terminator:sym<;>"  :subid("57_1275811487.95429") :method
+.annotate 'line', 4
+    new $P253, "ResizablePMCArray"
+    push $P253, ";"
+    .return ($P253)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<if>"  :subid("60_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "terminator:sym<}>"  :subid("58_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx256_tgt
     .local int rx256_pos
@@ -3236,12 +3274,12 @@
     .local int rx256_rep
     .local pmc rx256_cur
     (rx256_cur, rx256_pos, rx256_tgt) = self."!cursor_start"()
-    rx256_cur."!cursor_debug"("START ", "statement_control:sym<if>")
-    rx256_cur."!cursor_caparray"("xblock", "else")
+    rx256_cur."!cursor_debug"("START ", "terminator:sym<}>")
     .lex unicode:"$\x{a2}", rx256_cur
     .local pmc match
     .lex "$/", match
     length rx256_eos, rx256_tgt
+    gt rx256_pos, rx256_eos, rx256_done
     set rx256_off, 0
     lt rx256_pos, 2, rx256_start
     sub rx256_off, rx256_pos, 1
@@ -3259,152 +3297,16 @@
     set_addr $I10, rxscan259_loop
     rx256_cur."!mark_push"(0, rx256_pos, $I10)
   rxscan259_done:
-.annotate 'line', 155
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_260_fail
-    rx256_cur."!mark_push"(0, rx256_pos, $I10)
-  # rx literal  "if"
-    add $I11, rx256_pos, 2
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 2
-    ne $S10, "if", rx256_fail
-    add rx256_pos, 2
-    set_addr $I10, rxcap_260_fail
-    ($I12, $I11) = rx256_cur."!mark_peek"($I10)
-    rx256_cur."!cursor_pos"($I11)
-    ($P10) = rx256_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx256_pos, "")
-    rx256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_260_done
-  rxcap_260_fail:
-    goto rx256_fail
-  rxcap_260_done:
-  # rx charclass s
-    ge rx256_pos, rx256_eos, rx256_fail
-    sub $I10, rx256_pos, rx256_off
-    is_cclass $I11, 32, rx256_tgt, $I10
-    unless $I11, rx256_fail
-    inc rx256_pos
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-.annotate 'line', 156
-  # rx subrule "xblock" subtype=capture negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."xblock"()
-    unless $P10, rx256_fail
-    rx256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("xblock")
-    rx256_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-.annotate 'line', 157
-  # rx rxquantr263 ** 0..*
-    set_addr $I267, rxquantr263_done
-    rx256_cur."!mark_push"(0, rx256_pos, $I267)
-  rxquantr263_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-  # rx literal  "elsif"
-    add $I11, rx256_pos, 5
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 5
-    ne $S10, "elsif", rx256_fail
-    add rx256_pos, 5
-  # rx charclass s
-    ge rx256_pos, rx256_eos, rx256_fail
-    sub $I10, rx256_pos, rx256_off
-    is_cclass $I11, 32, rx256_tgt, $I10
-    unless $I11, rx256_fail
-    inc rx256_pos
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-  # rx subrule "xblock" subtype=capture negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."xblock"()
-    unless $P10, rx256_fail
-    rx256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("xblock")
-    rx256_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-    (rx256_rep) = rx256_cur."!mark_commit"($I267)
-    rx256_cur."!mark_push"(rx256_rep, rx256_pos, $I267)
-    goto rxquantr263_loop
-  rxquantr263_done:
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-.annotate 'line', 158
-  # rx rxquantr269 ** 0..1
-    set_addr $I273, rxquantr269_done
-    rx256_cur."!mark_push"(0, rx256_pos, $I273)
-  rxquantr269_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-  # rx literal  "else"
-    add $I11, rx256_pos, 4
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 4
-    ne $S10, "else", rx256_fail
-    add rx256_pos, 4
-  # rx charclass s
+.annotate 'line', 151
+  # rx enumcharlist negate=0 zerowidth
     ge rx256_pos, rx256_eos, rx256_fail
     sub $I10, rx256_pos, rx256_off
-    is_cclass $I11, 32, rx256_tgt, $I10
-    unless $I11, rx256_fail
-    inc rx256_pos
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-  # rx subrule "pblock" subtype=capture negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."pblock"()
-    unless $P10, rx256_fail
-    rx256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("else")
-    rx256_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-    (rx256_rep) = rx256_cur."!mark_commit"($I273)
-  rxquantr269_done:
-  # rx subrule "ws" subtype=method negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."ws"()
-    unless $P10, rx256_fail
-    rx256_pos = $P10."pos"()
-.annotate 'line', 154
+    substr $S10, rx256_tgt, $I10, 1
+    index $I11, "}", $S10
+    lt $I11, 0, rx256_fail
   # rx pass
-    rx256_cur."!cursor_pass"(rx256_pos, "statement_control:sym<if>")
-    rx256_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx256_pos)
+    rx256_cur."!cursor_pass"(rx256_pos, "terminator:sym<}>")
+    rx256_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx256_pos)
     .return (rx256_cur)
   rx256_fail:
 .annotate 'line', 4
@@ -3414,350 +3316,452 @@
     jump $I10
   rx256_done:
     rx256_cur."!cursor_fail"()
-    rx256_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
+    rx256_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
     .return (rx256_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1274022894.43745") :method
+.sub "!PREFIX__terminator:sym<}>"  :subid("59_1275811487.95429") :method
 .annotate 'line', 4
     new $P258, "ResizablePMCArray"
-    push $P258, "if"
+    push $P258, "}"
     .return ($P258)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<unless>"  :subid("62_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_control"  :subid("60_1275811487.95429") :method
+.annotate 'line', 155
+    $P261 = self."!protoregex"("statement_control")
+    .return ($P261)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__statement_control"  :subid("61_1275811487.95429") :method
+.annotate 'line', 155
+    $P263 = self."!PREFIX__!protoregex"("statement_control")
+    .return ($P263)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "statement_control:sym<if>"  :subid("62_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .const 'Sub' $P286 = "64_1274022894.43745" 
-    capture_lex $P286
-    .local string rx276_tgt
-    .local int rx276_pos
-    .local int rx276_off
-    .local int rx276_eos
-    .local int rx276_rep
-    .local pmc rx276_cur
-    (rx276_cur, rx276_pos, rx276_tgt) = self."!cursor_start"()
-    rx276_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
-    .lex unicode:"$\x{a2}", rx276_cur
-    .local pmc match
-    .lex "$/", match
-    length rx276_eos, rx276_tgt
-    set rx276_off, 0
-    lt rx276_pos, 2, rx276_start
-    sub rx276_off, rx276_pos, 1
-    substr rx276_tgt, rx276_tgt, rx276_off
-  rx276_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan279_done
-    goto rxscan279_scan
-  rxscan279_loop:
-    ($P10) = rx276_cur."from"()
-    inc $P10
-    set rx276_pos, $P10
-    ge rx276_pos, rx276_eos, rxscan279_done
-  rxscan279_scan:
-    set_addr $I10, rxscan279_loop
-    rx276_cur."!mark_push"(0, rx276_pos, $I10)
-  rxscan279_done:
-.annotate 'line', 162
+    .local string rx265_tgt
+    .local int rx265_pos
+    .local int rx265_off
+    .local int rx265_eos
+    .local int rx265_rep
+    .local pmc rx265_cur
+    (rx265_cur, rx265_pos, rx265_tgt) = self."!cursor_start"()
+    rx265_cur."!cursor_debug"("START ", "statement_control:sym<if>")
+    rx265_cur."!cursor_caparray"("else", "xblock")
+    .lex unicode:"$\x{a2}", rx265_cur
+    .local pmc match
+    .lex "$/", match
+    length rx265_eos, rx265_tgt
+    gt rx265_pos, rx265_eos, rx265_done
+    set rx265_off, 0
+    lt rx265_pos, 2, rx265_start
+    sub rx265_off, rx265_pos, 1
+    substr rx265_tgt, rx265_tgt, rx265_off
+  rx265_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan268_done
+    goto rxscan268_scan
+  rxscan268_loop:
+    ($P10) = rx265_cur."from"()
+    inc $P10
+    set rx265_pos, $P10
+    ge rx265_pos, rx265_eos, rxscan268_done
+  rxscan268_scan:
+    set_addr $I10, rxscan268_loop
+    rx265_cur."!mark_push"(0, rx265_pos, $I10)
+  rxscan268_done:
+.annotate 'line', 158
   # rx subcapture "sym"
-    set_addr $I10, rxcap_280_fail
-    rx276_cur."!mark_push"(0, rx276_pos, $I10)
-  # rx literal  "unless"
-    add $I11, rx276_pos, 6
-    gt $I11, rx276_eos, rx276_fail
-    sub $I11, rx276_pos, rx276_off
-    substr $S10, rx276_tgt, $I11, 6
-    ne $S10, "unless", rx276_fail
-    add rx276_pos, 6
-    set_addr $I10, rxcap_280_fail
-    ($I12, $I11) = rx276_cur."!mark_peek"($I10)
-    rx276_cur."!cursor_pos"($I11)
-    ($P10) = rx276_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx276_pos, "")
-    rx276_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_269_fail
+    rx265_cur."!mark_push"(0, rx265_pos, $I10)
+  # rx literal  "if"
+    add $I11, rx265_pos, 2
+    gt $I11, rx265_eos, rx265_fail
+    sub $I11, rx265_pos, rx265_off
+    substr $S10, rx265_tgt, $I11, 2
+    ne $S10, "if", rx265_fail
+    add rx265_pos, 2
+    set_addr $I10, rxcap_269_fail
+    ($I12, $I11) = rx265_cur."!mark_peek"($I10)
+    rx265_cur."!cursor_pos"($I11)
+    ($P10) = rx265_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx265_pos, "")
+    rx265_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_280_done
-  rxcap_280_fail:
-    goto rx276_fail
-  rxcap_280_done:
+    goto rxcap_269_done
+  rxcap_269_fail:
+    goto rx265_fail
+  rxcap_269_done:
   # rx charclass s
-    ge rx276_pos, rx276_eos, rx276_fail
-    sub $I10, rx276_pos, rx276_off
-    is_cclass $I11, 32, rx276_tgt, $I10
-    unless $I11, rx276_fail
-    inc rx276_pos
-  # rx subrule "ws" subtype=method negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."ws"()
-    unless $P10, rx276_fail
-    rx276_pos = $P10."pos"()
-.annotate 'line', 163
+    ge rx265_pos, rx265_eos, rx265_fail
+    sub $I10, rx265_pos, rx265_off
+    is_cclass $I11, 32, rx265_tgt, $I10
+    unless $I11, rx265_fail
+    inc rx265_pos
+  # rx subrule "ws" subtype=method negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+.annotate 'line', 159
   # rx subrule "xblock" subtype=capture negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."xblock"()
-    unless $P10, rx276_fail
-    rx276_cur."!mark_push"(0, -1, 0, $P10)
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."xblock"()
+    unless $P10, rx265_fail
+    rx265_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx276_pos = $P10."pos"()
+    rx265_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."ws"()
-    unless $P10, rx276_fail
-    rx276_pos = $P10."pos"()
-  alt283_0:
-.annotate 'line', 164
-    set_addr $I10, alt283_1
-    rx276_cur."!mark_push"(0, rx276_pos, $I10)
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+.annotate 'line', 160
+  # rx rxquantr272 ** 0..*
+    set_addr $I276, rxquantr272_done
+    rx265_cur."!mark_push"(0, rx265_pos, $I276)
+  rxquantr272_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+  # rx literal  "elsif"
+    add $I11, rx265_pos, 5
+    gt $I11, rx265_eos, rx265_fail
+    sub $I11, rx265_pos, rx265_off
+    substr $S10, rx265_tgt, $I11, 5
+    ne $S10, "elsif", rx265_fail
+    add rx265_pos, 5
+  # rx charclass s
+    ge rx265_pos, rx265_eos, rx265_fail
+    sub $I10, rx265_pos, rx265_off
+    is_cclass $I11, 32, rx265_tgt, $I10
+    unless $I11, rx265_fail
+    inc rx265_pos
+  # rx subrule "ws" subtype=method negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+  # rx subrule "xblock" subtype=capture negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."xblock"()
+    unless $P10, rx265_fail
+    rx265_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("xblock")
+    rx265_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."ws"()
-    unless $P10, rx276_fail
-    rx276_pos = $P10."pos"()
-  # rx subrule "before" subtype=zerowidth negate=1
-    rx276_cur."!cursor_pos"(rx276_pos)
-    .const 'Sub' $P286 = "64_1274022894.43745" 
-    capture_lex $P286
-    $P10 = rx276_cur."before"($P286)
-    if $P10, rx276_fail
-  # rx subrule "ws" subtype=method negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."ws"()
-    unless $P10, rx276_fail
-    rx276_pos = $P10."pos"()
-    goto alt283_end
-  alt283_1:
-  # rx subrule "ws" subtype=method negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."ws"()
-    unless $P10, rx276_fail
-    rx276_pos = $P10."pos"()
-  # rx subrule "panic" subtype=method negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."panic"("unless does not take \"else\", please rewrite using \"if\"")
-    unless $P10, rx276_fail
-    rx276_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."ws"()
-    unless $P10, rx276_fail
-    rx276_pos = $P10."pos"()
-  alt283_end:
-  # rx subrule "ws" subtype=method negate=
-    rx276_cur."!cursor_pos"(rx276_pos)
-    $P10 = rx276_cur."ws"()
-    unless $P10, rx276_fail
-    rx276_pos = $P10."pos"()
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+    (rx265_rep) = rx265_cur."!mark_commit"($I276)
+    rx265_cur."!mark_push"(rx265_rep, rx265_pos, $I276)
+    goto rxquantr272_loop
+  rxquantr272_done:
+  # rx subrule "ws" subtype=method negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
 .annotate 'line', 161
+  # rx rxquantr278 ** 0..1
+    set_addr $I282, rxquantr278_done
+    rx265_cur."!mark_push"(0, rx265_pos, $I282)
+  rxquantr278_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+  # rx literal  "else"
+    add $I11, rx265_pos, 4
+    gt $I11, rx265_eos, rx265_fail
+    sub $I11, rx265_pos, rx265_off
+    substr $S10, rx265_tgt, $I11, 4
+    ne $S10, "else", rx265_fail
+    add rx265_pos, 4
+  # rx charclass s
+    ge rx265_pos, rx265_eos, rx265_fail
+    sub $I10, rx265_pos, rx265_off
+    is_cclass $I11, 32, rx265_tgt, $I10
+    unless $I11, rx265_fail
+    inc rx265_pos
+  # rx subrule "ws" subtype=method negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+  # rx subrule "pblock" subtype=capture negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."pblock"()
+    unless $P10, rx265_fail
+    rx265_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("else")
+    rx265_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+    (rx265_rep) = rx265_cur."!mark_commit"($I282)
+  rxquantr278_done:
+  # rx subrule "ws" subtype=method negate=
+    rx265_cur."!cursor_pos"(rx265_pos)
+    $P10 = rx265_cur."ws"()
+    unless $P10, rx265_fail
+    rx265_pos = $P10."pos"()
+.annotate 'line', 157
   # rx pass
-    rx276_cur."!cursor_pass"(rx276_pos, "statement_control:sym<unless>")
-    rx276_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx276_pos)
-    .return (rx276_cur)
-  rx276_fail:
+    rx265_cur."!cursor_pass"(rx265_pos, "statement_control:sym<if>")
+    rx265_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx265_pos)
+    .return (rx265_cur)
+  rx265_fail:
 .annotate 'line', 4
-    (rx276_rep, rx276_pos, $I10, $P10) = rx276_cur."!mark_fail"(0)
-    lt rx276_pos, -1, rx276_done
-    eq rx276_pos, -1, rx276_fail
+    (rx265_rep, rx265_pos, $I10, $P10) = rx265_cur."!mark_fail"(0)
+    lt rx265_pos, -1, rx265_done
+    eq rx265_pos, -1, rx265_fail
     jump $I10
-  rx276_done:
-    rx276_cur."!cursor_fail"()
-    rx276_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
-    .return (rx276_cur)
+  rx265_done:
+    rx265_cur."!cursor_fail"()
+    rx265_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
+    .return (rx265_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1274022894.43745") :method
+.sub "!PREFIX__statement_control:sym<if>"  :subid("63_1275811487.95429") :method
 .annotate 'line', 4
-    new $P278, "ResizablePMCArray"
-    push $P278, "unless"
-    .return ($P278)
+    new $P267, "ResizablePMCArray"
+    push $P267, "if"
+    .return ($P267)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block285"  :anon :subid("64_1274022894.43745") :method :outer("62_1274022894.43745")
-.annotate 'line', 164
-    .local string rx287_tgt
-    .local int rx287_pos
-    .local int rx287_off
-    .local int rx287_eos
-    .local int rx287_rep
-    .local pmc rx287_cur
-    (rx287_cur, rx287_pos, rx287_tgt) = self."!cursor_start"()
-    rx287_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx287_cur
-    .local pmc match
-    .lex "$/", match
-    length rx287_eos, rx287_tgt
-    set rx287_off, 0
-    lt rx287_pos, 2, rx287_start
-    sub rx287_off, rx287_pos, 1
-    substr rx287_tgt, rx287_tgt, rx287_off
-  rx287_start:
+.sub "statement_control:sym<unless>"  :subid("64_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .const 'Sub' $P295 = "66_1275811487.95429" 
+    capture_lex $P295
+    .local string rx285_tgt
+    .local int rx285_pos
+    .local int rx285_off
+    .local int rx285_eos
+    .local int rx285_rep
+    .local pmc rx285_cur
+    (rx285_cur, rx285_pos, rx285_tgt) = self."!cursor_start"()
+    rx285_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
+    .lex unicode:"$\x{a2}", rx285_cur
+    .local pmc match
+    .lex "$/", match
+    length rx285_eos, rx285_tgt
+    gt rx285_pos, rx285_eos, rx285_done
+    set rx285_off, 0
+    lt rx285_pos, 2, rx285_start
+    sub rx285_off, rx285_pos, 1
+    substr rx285_tgt, rx285_tgt, rx285_off
+  rx285_start:
     $I10 = self.'from'()
     ne $I10, -1, rxscan288_done
     goto rxscan288_scan
   rxscan288_loop:
-    ($P10) = rx287_cur."from"()
+    ($P10) = rx285_cur."from"()
     inc $P10
-    set rx287_pos, $P10
-    ge rx287_pos, rx287_eos, rxscan288_done
+    set rx285_pos, $P10
+    ge rx285_pos, rx285_eos, rxscan288_done
   rxscan288_scan:
     set_addr $I10, rxscan288_loop
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
+    rx285_cur."!mark_push"(0, rx285_pos, $I10)
   rxscan288_done:
-  # rx literal  "else"
-    add $I11, rx287_pos, 4
-    gt $I11, rx287_eos, rx287_fail
-    sub $I11, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I11, 4
-    ne $S10, "else", rx287_fail
-    add rx287_pos, 4
-  # rx pass
-    rx287_cur."!cursor_pass"(rx287_pos, "")
-    rx287_cur."!cursor_debug"("PASS  ", "", " at pos=", rx287_pos)
-    .return (rx287_cur)
-  rx287_fail:
-    (rx287_rep, rx287_pos, $I10, $P10) = rx287_cur."!mark_fail"(0)
-    lt rx287_pos, -1, rx287_done
-    eq rx287_pos, -1, rx287_fail
-    jump $I10
-  rx287_done:
-    rx287_cur."!cursor_fail"()
-    rx287_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx287_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<while>"  :subid("65_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx294_tgt
-    .local int rx294_pos
-    .local int rx294_off
-    .local int rx294_eos
-    .local int rx294_rep
-    .local pmc rx294_cur
-    (rx294_cur, rx294_pos, rx294_tgt) = self."!cursor_start"()
-    rx294_cur."!cursor_debug"("START ", "statement_control:sym<while>")
-    .lex unicode:"$\x{a2}", rx294_cur
-    .local pmc match
-    .lex "$/", match
-    length rx294_eos, rx294_tgt
-    set rx294_off, 0
-    lt rx294_pos, 2, rx294_start
-    sub rx294_off, rx294_pos, 1
-    substr rx294_tgt, rx294_tgt, rx294_off
-  rx294_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan297_done
-    goto rxscan297_scan
-  rxscan297_loop:
-    ($P10) = rx294_cur."from"()
-    inc $P10
-    set rx294_pos, $P10
-    ge rx294_pos, rx294_eos, rxscan297_done
-  rxscan297_scan:
-    set_addr $I10, rxscan297_loop
-    rx294_cur."!mark_push"(0, rx294_pos, $I10)
-  rxscan297_done:
-.annotate 'line', 168
+.annotate 'line', 165
   # rx subcapture "sym"
-    set_addr $I10, rxcap_299_fail
-    rx294_cur."!mark_push"(0, rx294_pos, $I10)
-  alt298_0:
-    set_addr $I10, alt298_1
-    rx294_cur."!mark_push"(0, rx294_pos, $I10)
-  # rx literal  "while"
-    add $I11, rx294_pos, 5
-    gt $I11, rx294_eos, rx294_fail
-    sub $I11, rx294_pos, rx294_off
-    substr $S10, rx294_tgt, $I11, 5
-    ne $S10, "while", rx294_fail
-    add rx294_pos, 5
-    goto alt298_end
-  alt298_1:
-  # rx literal  "until"
-    add $I11, rx294_pos, 5
-    gt $I11, rx294_eos, rx294_fail
-    sub $I11, rx294_pos, rx294_off
-    substr $S10, rx294_tgt, $I11, 5
-    ne $S10, "until", rx294_fail
-    add rx294_pos, 5
-  alt298_end:
-    set_addr $I10, rxcap_299_fail
-    ($I12, $I11) = rx294_cur."!mark_peek"($I10)
-    rx294_cur."!cursor_pos"($I11)
-    ($P10) = rx294_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx294_pos, "")
-    rx294_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_289_fail
+    rx285_cur."!mark_push"(0, rx285_pos, $I10)
+  # rx literal  "unless"
+    add $I11, rx285_pos, 6
+    gt $I11, rx285_eos, rx285_fail
+    sub $I11, rx285_pos, rx285_off
+    substr $S10, rx285_tgt, $I11, 6
+    ne $S10, "unless", rx285_fail
+    add rx285_pos, 6
+    set_addr $I10, rxcap_289_fail
+    ($I12, $I11) = rx285_cur."!mark_peek"($I10)
+    rx285_cur."!cursor_pos"($I11)
+    ($P10) = rx285_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx285_pos, "")
+    rx285_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_299_done
-  rxcap_299_fail:
-    goto rx294_fail
-  rxcap_299_done:
+    goto rxcap_289_done
+  rxcap_289_fail:
+    goto rx285_fail
+  rxcap_289_done:
   # rx charclass s
-    ge rx294_pos, rx294_eos, rx294_fail
-    sub $I10, rx294_pos, rx294_off
-    is_cclass $I11, 32, rx294_tgt, $I10
-    unless $I11, rx294_fail
-    inc rx294_pos
-  # rx subrule "ws" subtype=method negate=
-    rx294_cur."!cursor_pos"(rx294_pos)
-    $P10 = rx294_cur."ws"()
-    unless $P10, rx294_fail
-    rx294_pos = $P10."pos"()
-.annotate 'line', 169
+    ge rx285_pos, rx285_eos, rx285_fail
+    sub $I10, rx285_pos, rx285_off
+    is_cclass $I11, 32, rx285_tgt, $I10
+    unless $I11, rx285_fail
+    inc rx285_pos
+  # rx subrule "ws" subtype=method negate=
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."ws"()
+    unless $P10, rx285_fail
+    rx285_pos = $P10."pos"()
+.annotate 'line', 166
   # rx subrule "xblock" subtype=capture negate=
-    rx294_cur."!cursor_pos"(rx294_pos)
-    $P10 = rx294_cur."xblock"()
-    unless $P10, rx294_fail
-    rx294_cur."!mark_push"(0, -1, 0, $P10)
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."xblock"()
+    unless $P10, rx285_fail
+    rx285_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx294_pos = $P10."pos"()
+    rx285_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx294_cur."!cursor_pos"(rx294_pos)
-    $P10 = rx294_cur."ws"()
-    unless $P10, rx294_fail
-    rx294_pos = $P10."pos"()
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."ws"()
+    unless $P10, rx285_fail
+    rx285_pos = $P10."pos"()
+  alt292_0:
 .annotate 'line', 167
+    set_addr $I10, alt292_1
+    rx285_cur."!mark_push"(0, rx285_pos, $I10)
+  # rx subrule "ws" subtype=method negate=
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."ws"()
+    unless $P10, rx285_fail
+    rx285_pos = $P10."pos"()
+  # rx subrule "before" subtype=zerowidth negate=1
+    rx285_cur."!cursor_pos"(rx285_pos)
+    .const 'Sub' $P295 = "66_1275811487.95429" 
+    capture_lex $P295
+    $P10 = rx285_cur."before"($P295)
+    if $P10, rx285_fail
+  # rx subrule "ws" subtype=method negate=
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."ws"()
+    unless $P10, rx285_fail
+    rx285_pos = $P10."pos"()
+    goto alt292_end
+  alt292_1:
+  # rx subrule "ws" subtype=method negate=
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."ws"()
+    unless $P10, rx285_fail
+    rx285_pos = $P10."pos"()
+  # rx subrule "panic" subtype=method negate=
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."panic"("unless does not take \"else\", please rewrite using \"if\"")
+    unless $P10, rx285_fail
+    rx285_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."ws"()
+    unless $P10, rx285_fail
+    rx285_pos = $P10."pos"()
+  alt292_end:
+  # rx subrule "ws" subtype=method negate=
+    rx285_cur."!cursor_pos"(rx285_pos)
+    $P10 = rx285_cur."ws"()
+    unless $P10, rx285_fail
+    rx285_pos = $P10."pos"()
+.annotate 'line', 164
   # rx pass
-    rx294_cur."!cursor_pass"(rx294_pos, "statement_control:sym<while>")
-    rx294_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx294_pos)
-    .return (rx294_cur)
-  rx294_fail:
+    rx285_cur."!cursor_pass"(rx285_pos, "statement_control:sym<unless>")
+    rx285_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx285_pos)
+    .return (rx285_cur)
+  rx285_fail:
 .annotate 'line', 4
-    (rx294_rep, rx294_pos, $I10, $P10) = rx294_cur."!mark_fail"(0)
-    lt rx294_pos, -1, rx294_done
-    eq rx294_pos, -1, rx294_fail
+    (rx285_rep, rx285_pos, $I10, $P10) = rx285_cur."!mark_fail"(0)
+    lt rx285_pos, -1, rx285_done
+    eq rx285_pos, -1, rx285_fail
     jump $I10
-  rx294_done:
-    rx294_cur."!cursor_fail"()
-    rx294_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
-    .return (rx294_cur)
+  rx285_done:
+    rx285_cur."!cursor_fail"()
+    rx285_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
+    .return (rx285_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1274022894.43745") :method
+.sub "!PREFIX__statement_control:sym<unless>"  :subid("65_1275811487.95429") :method
 .annotate 'line', 4
-    new $P296, "ResizablePMCArray"
-    push $P296, "until"
-    push $P296, "while"
-    .return ($P296)
+    new $P287, "ResizablePMCArray"
+    push $P287, "unless"
+    .return ($P287)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "_block294"  :anon :subid("66_1275811487.95429") :method :outer("64_1275811487.95429")
+.annotate 'line', 167
+    .local string rx296_tgt
+    .local int rx296_pos
+    .local int rx296_off
+    .local int rx296_eos
+    .local int rx296_rep
+    .local pmc rx296_cur
+    (rx296_cur, rx296_pos, rx296_tgt) = self."!cursor_start"()
+    rx296_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx296_cur
+    .local pmc match
+    .lex "$/", match
+    length rx296_eos, rx296_tgt
+    gt rx296_pos, rx296_eos, rx296_done
+    set rx296_off, 0
+    lt rx296_pos, 2, rx296_start
+    sub rx296_off, rx296_pos, 1
+    substr rx296_tgt, rx296_tgt, rx296_off
+  rx296_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan297_done
+    goto rxscan297_scan
+  rxscan297_loop:
+    ($P10) = rx296_cur."from"()
+    inc $P10
+    set rx296_pos, $P10
+    ge rx296_pos, rx296_eos, rxscan297_done
+  rxscan297_scan:
+    set_addr $I10, rxscan297_loop
+    rx296_cur."!mark_push"(0, rx296_pos, $I10)
+  rxscan297_done:
+  # rx literal  "else"
+    add $I11, rx296_pos, 4
+    gt $I11, rx296_eos, rx296_fail
+    sub $I11, rx296_pos, rx296_off
+    substr $S10, rx296_tgt, $I11, 4
+    ne $S10, "else", rx296_fail
+    add rx296_pos, 4
+  # rx pass
+    rx296_cur."!cursor_pass"(rx296_pos, "")
+    rx296_cur."!cursor_debug"("PASS  ", "", " at pos=", rx296_pos)
+    .return (rx296_cur)
+  rx296_fail:
+    (rx296_rep, rx296_pos, $I10, $P10) = rx296_cur."!mark_fail"(0)
+    lt rx296_pos, -1, rx296_done
+    eq rx296_pos, -1, rx296_fail
+    jump $I10
+  rx296_done:
+    rx296_cur."!cursor_fail"()
+    rx296_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx296_cur)
+    .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<repeat>"  :subid("67_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_control:sym<while>"  :subid("67_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx303_tgt
     .local int rx303_pos
@@ -3766,11 +3770,12 @@
     .local int rx303_rep
     .local pmc rx303_cur
     (rx303_cur, rx303_pos, rx303_tgt) = self."!cursor_start"()
-    rx303_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
+    rx303_cur."!cursor_debug"("START ", "statement_control:sym<while>")
     .lex unicode:"$\x{a2}", rx303_cur
     .local pmc match
     .lex "$/", match
     length rx303_eos, rx303_tgt
+    gt rx303_pos, rx303_eos, rx303_done
     set rx303_off, 0
     lt rx303_pos, 2, rx303_start
     sub rx303_off, rx303_pos, 1
@@ -3788,54 +3793,12 @@
     set_addr $I10, rxscan306_loop
     rx303_cur."!mark_push"(0, rx303_pos, $I10)
   rxscan306_done:
-.annotate 'line', 173
+.annotate 'line', 171
   # rx subcapture "sym"
-    set_addr $I10, rxcap_307_fail
-    rx303_cur."!mark_push"(0, rx303_pos, $I10)
-  # rx literal  "repeat"
-    add $I11, rx303_pos, 6
-    gt $I11, rx303_eos, rx303_fail
-    sub $I11, rx303_pos, rx303_off
-    substr $S10, rx303_tgt, $I11, 6
-    ne $S10, "repeat", rx303_fail
-    add rx303_pos, 6
-    set_addr $I10, rxcap_307_fail
-    ($I12, $I11) = rx303_cur."!mark_peek"($I10)
-    rx303_cur."!cursor_pos"($I11)
-    ($P10) = rx303_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx303_pos, "")
-    rx303_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_307_done
-  rxcap_307_fail:
-    goto rx303_fail
-  rxcap_307_done:
-  # rx charclass s
-    ge rx303_pos, rx303_eos, rx303_fail
-    sub $I10, rx303_pos, rx303_off
-    is_cclass $I11, 32, rx303_tgt, $I10
-    unless $I11, rx303_fail
-    inc rx303_pos
-  # rx subrule "ws" subtype=method negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."ws"()
-    unless $P10, rx303_fail
-    rx303_pos = $P10."pos"()
-  alt309_0:
-.annotate 'line', 174
-    set_addr $I10, alt309_1
-    rx303_cur."!mark_push"(0, rx303_pos, $I10)
-.annotate 'line', 175
-  # rx subrule "ws" subtype=method negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."ws"()
-    unless $P10, rx303_fail
-    rx303_pos = $P10."pos"()
-  # rx subcapture "wu"
-    set_addr $I10, rxcap_312_fail
+    set_addr $I10, rxcap_308_fail
     rx303_cur."!mark_push"(0, rx303_pos, $I10)
-  alt311_0:
-    set_addr $I10, alt311_1
+  alt307_0:
+    set_addr $I10, alt307_1
     rx303_cur."!mark_push"(0, rx303_pos, $I10)
   # rx literal  "while"
     add $I11, rx303_pos, 5
@@ -3844,8 +3807,8 @@
     substr $S10, rx303_tgt, $I11, 5
     ne $S10, "while", rx303_fail
     add rx303_pos, 5
-    goto alt311_end
-  alt311_1:
+    goto alt307_end
+  alt307_1:
   # rx literal  "until"
     add $I11, rx303_pos, 5
     gt $I11, rx303_eos, rx303_fail
@@ -3853,18 +3816,18 @@
     substr $S10, rx303_tgt, $I11, 5
     ne $S10, "until", rx303_fail
     add rx303_pos, 5
-  alt311_end:
-    set_addr $I10, rxcap_312_fail
+  alt307_end:
+    set_addr $I10, rxcap_308_fail
     ($I12, $I11) = rx303_cur."!mark_peek"($I10)
     rx303_cur."!cursor_pos"($I11)
     ($P10) = rx303_cur."!cursor_start"()
     $P10."!cursor_pass"(rx303_pos, "")
     rx303_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("wu")
-    goto rxcap_312_done
-  rxcap_312_fail:
+    $P10."!cursor_names"("sym")
+    goto rxcap_308_done
+  rxcap_308_fail:
     goto rx303_fail
-  rxcap_312_done:
+  rxcap_308_done:
   # rx charclass s
     ge rx303_pos, rx303_eos, rx303_fail
     sub $I10, rx303_pos, rx303_off
@@ -3876,6 +3839,7 @@
     $P10 = rx303_cur."ws"()
     unless $P10, rx303_fail
     rx303_pos = $P10."pos"()
+.annotate 'line', 172
   # rx subrule "xblock" subtype=capture negate=
     rx303_cur."!cursor_pos"(rx303_pos)
     $P10 = rx303_cur."xblock"()
@@ -3888,94 +3852,10 @@
     $P10 = rx303_cur."ws"()
     unless $P10, rx303_fail
     rx303_pos = $P10."pos"()
-    goto alt309_end
-  alt309_1:
-.annotate 'line', 176
-  # rx subrule "ws" subtype=method negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."ws"()
-    unless $P10, rx303_fail
-    rx303_pos = $P10."pos"()
-  # rx subrule "pblock" subtype=capture negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."pblock"()
-    unless $P10, rx303_fail
-    rx303_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("pblock")
-    rx303_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."ws"()
-    unless $P10, rx303_fail
-    rx303_pos = $P10."pos"()
-  # rx subcapture "wu"
-    set_addr $I10, rxcap_318_fail
-    rx303_cur."!mark_push"(0, rx303_pos, $I10)
-  alt317_0:
-    set_addr $I10, alt317_1
-    rx303_cur."!mark_push"(0, rx303_pos, $I10)
-  # rx literal  "while"
-    add $I11, rx303_pos, 5
-    gt $I11, rx303_eos, rx303_fail
-    sub $I11, rx303_pos, rx303_off
-    substr $S10, rx303_tgt, $I11, 5
-    ne $S10, "while", rx303_fail
-    add rx303_pos, 5
-    goto alt317_end
-  alt317_1:
-  # rx literal  "until"
-    add $I11, rx303_pos, 5
-    gt $I11, rx303_eos, rx303_fail
-    sub $I11, rx303_pos, rx303_off
-    substr $S10, rx303_tgt, $I11, 5
-    ne $S10, "until", rx303_fail
-    add rx303_pos, 5
-  alt317_end:
-    set_addr $I10, rxcap_318_fail
-    ($I12, $I11) = rx303_cur."!mark_peek"($I10)
-    rx303_cur."!cursor_pos"($I11)
-    ($P10) = rx303_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx303_pos, "")
-    rx303_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("wu")
-    goto rxcap_318_done
-  rxcap_318_fail:
-    goto rx303_fail
-  rxcap_318_done:
-  # rx charclass s
-    ge rx303_pos, rx303_eos, rx303_fail
-    sub $I10, rx303_pos, rx303_off
-    is_cclass $I11, 32, rx303_tgt, $I10
-    unless $I11, rx303_fail
-    inc rx303_pos
-  # rx subrule "ws" subtype=method negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."ws"()
-    unless $P10, rx303_fail
-    rx303_pos = $P10."pos"()
-  # rx subrule "EXPR" subtype=capture negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."EXPR"()
-    unless $P10, rx303_fail
-    rx303_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx303_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."ws"()
-    unless $P10, rx303_fail
-    rx303_pos = $P10."pos"()
-  alt309_end:
-.annotate 'line', 177
-  # rx subrule "ws" subtype=method negate=
-    rx303_cur."!cursor_pos"(rx303_pos)
-    $P10 = rx303_cur."ws"()
-    unless $P10, rx303_fail
-    rx303_pos = $P10."pos"()
-.annotate 'line', 172
+.annotate 'line', 170
   # rx pass
-    rx303_cur."!cursor_pass"(rx303_pos, "statement_control:sym<repeat>")
-    rx303_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx303_pos)
+    rx303_cur."!cursor_pass"(rx303_pos, "statement_control:sym<while>")
+    rx303_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx303_pos)
     .return (rx303_cur)
   rx303_fail:
 .annotate 'line', 4
@@ -3985,4446 +3865,4523 @@
     jump $I10
   rx303_done:
     rx303_cur."!cursor_fail"()
-    rx303_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
+    rx303_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
     .return (rx303_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1274022894.43745") :method
+.sub "!PREFIX__statement_control:sym<while>"  :subid("68_1275811487.95429") :method
 .annotate 'line', 4
     new $P305, "ResizablePMCArray"
-    push $P305, "repeat"
+    push $P305, "until"
+    push $P305, "while"
     .return ($P305)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<for>"  :subid("69_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_control:sym<repeat>"  :subid("69_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx323_tgt
-    .local int rx323_pos
-    .local int rx323_off
-    .local int rx323_eos
-    .local int rx323_rep
-    .local pmc rx323_cur
-    (rx323_cur, rx323_pos, rx323_tgt) = self."!cursor_start"()
-    rx323_cur."!cursor_debug"("START ", "statement_control:sym<for>")
-    .lex unicode:"$\x{a2}", rx323_cur
-    .local pmc match
-    .lex "$/", match
-    length rx323_eos, rx323_tgt
-    set rx323_off, 0
-    lt rx323_pos, 2, rx323_start
-    sub rx323_off, rx323_pos, 1
-    substr rx323_tgt, rx323_tgt, rx323_off
-  rx323_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan326_done
-    goto rxscan326_scan
-  rxscan326_loop:
-    ($P10) = rx323_cur."from"()
-    inc $P10
-    set rx323_pos, $P10
-    ge rx323_pos, rx323_eos, rxscan326_done
-  rxscan326_scan:
-    set_addr $I10, rxscan326_loop
-    rx323_cur."!mark_push"(0, rx323_pos, $I10)
-  rxscan326_done:
-.annotate 'line', 181
+    .local string rx312_tgt
+    .local int rx312_pos
+    .local int rx312_off
+    .local int rx312_eos
+    .local int rx312_rep
+    .local pmc rx312_cur
+    (rx312_cur, rx312_pos, rx312_tgt) = self."!cursor_start"()
+    rx312_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
+    .lex unicode:"$\x{a2}", rx312_cur
+    .local pmc match
+    .lex "$/", match
+    length rx312_eos, rx312_tgt
+    gt rx312_pos, rx312_eos, rx312_done
+    set rx312_off, 0
+    lt rx312_pos, 2, rx312_start
+    sub rx312_off, rx312_pos, 1
+    substr rx312_tgt, rx312_tgt, rx312_off
+  rx312_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan315_done
+    goto rxscan315_scan
+  rxscan315_loop:
+    ($P10) = rx312_cur."from"()
+    inc $P10
+    set rx312_pos, $P10
+    ge rx312_pos, rx312_eos, rxscan315_done
+  rxscan315_scan:
+    set_addr $I10, rxscan315_loop
+    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+  rxscan315_done:
+.annotate 'line', 176
   # rx subcapture "sym"
+    set_addr $I10, rxcap_316_fail
+    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+  # rx literal  "repeat"
+    add $I11, rx312_pos, 6
+    gt $I11, rx312_eos, rx312_fail
+    sub $I11, rx312_pos, rx312_off
+    substr $S10, rx312_tgt, $I11, 6
+    ne $S10, "repeat", rx312_fail
+    add rx312_pos, 6
+    set_addr $I10, rxcap_316_fail
+    ($I12, $I11) = rx312_cur."!mark_peek"($I10)
+    rx312_cur."!cursor_pos"($I11)
+    ($P10) = rx312_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx312_pos, "")
+    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_316_done
+  rxcap_316_fail:
+    goto rx312_fail
+  rxcap_316_done:
+  # rx charclass s
+    ge rx312_pos, rx312_eos, rx312_fail
+    sub $I10, rx312_pos, rx312_off
+    is_cclass $I11, 32, rx312_tgt, $I10
+    unless $I11, rx312_fail
+    inc rx312_pos
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+  alt318_0:
+.annotate 'line', 177
+    set_addr $I10, alt318_1
+    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+.annotate 'line', 178
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+  # rx subcapture "wu"
+    set_addr $I10, rxcap_321_fail
+    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+  alt320_0:
+    set_addr $I10, alt320_1
+    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+  # rx literal  "while"
+    add $I11, rx312_pos, 5
+    gt $I11, rx312_eos, rx312_fail
+    sub $I11, rx312_pos, rx312_off
+    substr $S10, rx312_tgt, $I11, 5
+    ne $S10, "while", rx312_fail
+    add rx312_pos, 5
+    goto alt320_end
+  alt320_1:
+  # rx literal  "until"
+    add $I11, rx312_pos, 5
+    gt $I11, rx312_eos, rx312_fail
+    sub $I11, rx312_pos, rx312_off
+    substr $S10, rx312_tgt, $I11, 5
+    ne $S10, "until", rx312_fail
+    add rx312_pos, 5
+  alt320_end:
+    set_addr $I10, rxcap_321_fail
+    ($I12, $I11) = rx312_cur."!mark_peek"($I10)
+    rx312_cur."!cursor_pos"($I11)
+    ($P10) = rx312_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx312_pos, "")
+    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("wu")
+    goto rxcap_321_done
+  rxcap_321_fail:
+    goto rx312_fail
+  rxcap_321_done:
+  # rx charclass s
+    ge rx312_pos, rx312_eos, rx312_fail
+    sub $I10, rx312_pos, rx312_off
+    is_cclass $I11, 32, rx312_tgt, $I10
+    unless $I11, rx312_fail
+    inc rx312_pos
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+  # rx subrule "xblock" subtype=capture negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."xblock"()
+    unless $P10, rx312_fail
+    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("xblock")
+    rx312_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+    goto alt318_end
+  alt318_1:
+.annotate 'line', 179
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+  # rx subrule "pblock" subtype=capture negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."pblock"()
+    unless $P10, rx312_fail
+    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("pblock")
+    rx312_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+  # rx subcapture "wu"
     set_addr $I10, rxcap_327_fail
-    rx323_cur."!mark_push"(0, rx323_pos, $I10)
-  # rx literal  "for"
-    add $I11, rx323_pos, 3
-    gt $I11, rx323_eos, rx323_fail
-    sub $I11, rx323_pos, rx323_off
-    substr $S10, rx323_tgt, $I11, 3
-    ne $S10, "for", rx323_fail
-    add rx323_pos, 3
+    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+  alt326_0:
+    set_addr $I10, alt326_1
+    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+  # rx literal  "while"
+    add $I11, rx312_pos, 5
+    gt $I11, rx312_eos, rx312_fail
+    sub $I11, rx312_pos, rx312_off
+    substr $S10, rx312_tgt, $I11, 5
+    ne $S10, "while", rx312_fail
+    add rx312_pos, 5
+    goto alt326_end
+  alt326_1:
+  # rx literal  "until"
+    add $I11, rx312_pos, 5
+    gt $I11, rx312_eos, rx312_fail
+    sub $I11, rx312_pos, rx312_off
+    substr $S10, rx312_tgt, $I11, 5
+    ne $S10, "until", rx312_fail
+    add rx312_pos, 5
+  alt326_end:
     set_addr $I10, rxcap_327_fail
-    ($I12, $I11) = rx323_cur."!mark_peek"($I10)
-    rx323_cur."!cursor_pos"($I11)
-    ($P10) = rx323_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx323_pos, "")
-    rx323_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
+    ($I12, $I11) = rx312_cur."!mark_peek"($I10)
+    rx312_cur."!cursor_pos"($I11)
+    ($P10) = rx312_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx312_pos, "")
+    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("wu")
     goto rxcap_327_done
   rxcap_327_fail:
-    goto rx323_fail
+    goto rx312_fail
   rxcap_327_done:
   # rx charclass s
-    ge rx323_pos, rx323_eos, rx323_fail
-    sub $I10, rx323_pos, rx323_off
-    is_cclass $I11, 32, rx323_tgt, $I10
-    unless $I11, rx323_fail
-    inc rx323_pos
-  # rx subrule "ws" subtype=method negate=
-    rx323_cur."!cursor_pos"(rx323_pos)
-    $P10 = rx323_cur."ws"()
-    unless $P10, rx323_fail
-    rx323_pos = $P10."pos"()
-.annotate 'line', 182
+    ge rx312_pos, rx312_eos, rx312_fail
+    sub $I10, rx312_pos, rx312_off
+    is_cclass $I11, 32, rx312_tgt, $I10
+    unless $I11, rx312_fail
+    inc rx312_pos
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+  # rx subrule "EXPR" subtype=capture negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."EXPR"()
+    unless $P10, rx312_fail
+    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx312_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+  alt318_end:
+.annotate 'line', 180
+  # rx subrule "ws" subtype=method negate=
+    rx312_cur."!cursor_pos"(rx312_pos)
+    $P10 = rx312_cur."ws"()
+    unless $P10, rx312_fail
+    rx312_pos = $P10."pos"()
+.annotate 'line', 175
+  # rx pass
+    rx312_cur."!cursor_pass"(rx312_pos, "statement_control:sym<repeat>")
+    rx312_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx312_pos)
+    .return (rx312_cur)
+  rx312_fail:
+.annotate 'line', 4
+    (rx312_rep, rx312_pos, $I10, $P10) = rx312_cur."!mark_fail"(0)
+    lt rx312_pos, -1, rx312_done
+    eq rx312_pos, -1, rx312_fail
+    jump $I10
+  rx312_done:
+    rx312_cur."!cursor_fail"()
+    rx312_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
+    .return (rx312_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__statement_control:sym<repeat>"  :subid("70_1275811487.95429") :method
+.annotate 'line', 4
+    new $P314, "ResizablePMCArray"
+    push $P314, "repeat"
+    .return ($P314)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "statement_control:sym<for>"  :subid("71_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx332_tgt
+    .local int rx332_pos
+    .local int rx332_off
+    .local int rx332_eos
+    .local int rx332_rep
+    .local pmc rx332_cur
+    (rx332_cur, rx332_pos, rx332_tgt) = self."!cursor_start"()
+    rx332_cur."!cursor_debug"("START ", "statement_control:sym<for>")
+    .lex unicode:"$\x{a2}", rx332_cur
+    .local pmc match
+    .lex "$/", match
+    length rx332_eos, rx332_tgt
+    gt rx332_pos, rx332_eos, rx332_done
+    set rx332_off, 0
+    lt rx332_pos, 2, rx332_start
+    sub rx332_off, rx332_pos, 1
+    substr rx332_tgt, rx332_tgt, rx332_off
+  rx332_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan335_done
+    goto rxscan335_scan
+  rxscan335_loop:
+    ($P10) = rx332_cur."from"()
+    inc $P10
+    set rx332_pos, $P10
+    ge rx332_pos, rx332_eos, rxscan335_done
+  rxscan335_scan:
+    set_addr $I10, rxscan335_loop
+    rx332_cur."!mark_push"(0, rx332_pos, $I10)
+  rxscan335_done:
+.annotate 'line', 184
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_336_fail
+    rx332_cur."!mark_push"(0, rx332_pos, $I10)
+  # rx literal  "for"
+    add $I11, rx332_pos, 3
+    gt $I11, rx332_eos, rx332_fail
+    sub $I11, rx332_pos, rx332_off
+    substr $S10, rx332_tgt, $I11, 3
+    ne $S10, "for", rx332_fail
+    add rx332_pos, 3
+    set_addr $I10, rxcap_336_fail
+    ($I12, $I11) = rx332_cur."!mark_peek"($I10)
+    rx332_cur."!cursor_pos"($I11)
+    ($P10) = rx332_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx332_pos, "")
+    rx332_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_336_done
+  rxcap_336_fail:
+    goto rx332_fail
+  rxcap_336_done:
+  # rx charclass s
+    ge rx332_pos, rx332_eos, rx332_fail
+    sub $I10, rx332_pos, rx332_off
+    is_cclass $I11, 32, rx332_tgt, $I10
+    unless $I11, rx332_fail
+    inc rx332_pos
+  # rx subrule "ws" subtype=method negate=
+    rx332_cur."!cursor_pos"(rx332_pos)
+    $P10 = rx332_cur."ws"()
+    unless $P10, rx332_fail
+    rx332_pos = $P10."pos"()
+.annotate 'line', 185
   # rx subrule "xblock" subtype=capture negate=
-    rx323_cur."!cursor_pos"(rx323_pos)
-    $P10 = rx323_cur."xblock"()
-    unless $P10, rx323_fail
-    rx323_cur."!mark_push"(0, -1, 0, $P10)
+    rx332_cur."!cursor_pos"(rx332_pos)
+    $P10 = rx332_cur."xblock"()
+    unless $P10, rx332_fail
+    rx332_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx323_pos = $P10."pos"()
+    rx332_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx323_cur."!cursor_pos"(rx323_pos)
-    $P10 = rx323_cur."ws"()
-    unless $P10, rx323_fail
-    rx323_pos = $P10."pos"()
-.annotate 'line', 180
+    rx332_cur."!cursor_pos"(rx332_pos)
+    $P10 = rx332_cur."ws"()
+    unless $P10, rx332_fail
+    rx332_pos = $P10."pos"()
+.annotate 'line', 183
   # rx pass
-    rx323_cur."!cursor_pass"(rx323_pos, "statement_control:sym<for>")
-    rx323_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx323_pos)
-    .return (rx323_cur)
-  rx323_fail:
+    rx332_cur."!cursor_pass"(rx332_pos, "statement_control:sym<for>")
+    rx332_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx332_pos)
+    .return (rx332_cur)
+  rx332_fail:
 .annotate 'line', 4
-    (rx323_rep, rx323_pos, $I10, $P10) = rx323_cur."!mark_fail"(0)
-    lt rx323_pos, -1, rx323_done
-    eq rx323_pos, -1, rx323_fail
+    (rx332_rep, rx332_pos, $I10, $P10) = rx332_cur."!mark_fail"(0)
+    lt rx332_pos, -1, rx332_done
+    eq rx332_pos, -1, rx332_fail
     jump $I10
-  rx323_done:
-    rx323_cur."!cursor_fail"()
-    rx323_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
-    .return (rx323_cur)
+  rx332_done:
+    rx332_cur."!cursor_fail"()
+    rx332_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
+    .return (rx332_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1274022894.43745") :method
+.sub "!PREFIX__statement_control:sym<for>"  :subid("72_1275811487.95429") :method
 .annotate 'line', 4
-    new $P325, "ResizablePMCArray"
-    push $P325, "for"
-    .return ($P325)
+    new $P334, "ResizablePMCArray"
+    push $P334, "for"
+    .return ($P334)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CATCH>"  :subid("71_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_control:sym<CATCH>"  :subid("73_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx331_tgt
-    .local int rx331_pos
-    .local int rx331_off
-    .local int rx331_eos
-    .local int rx331_rep
-    .local pmc rx331_cur
-    (rx331_cur, rx331_pos, rx331_tgt) = self."!cursor_start"()
-    rx331_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
-    .lex unicode:"$\x{a2}", rx331_cur
+    .local string rx340_tgt
+    .local int rx340_pos
+    .local int rx340_off
+    .local int rx340_eos
+    .local int rx340_rep
+    .local pmc rx340_cur
+    (rx340_cur, rx340_pos, rx340_tgt) = self."!cursor_start"()
+    rx340_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
+    .lex unicode:"$\x{a2}", rx340_cur
     .local pmc match
     .lex "$/", match
-    length rx331_eos, rx331_tgt
-    set rx331_off, 0
-    lt rx331_pos, 2, rx331_start
-    sub rx331_off, rx331_pos, 1
-    substr rx331_tgt, rx331_tgt, rx331_off
-  rx331_start:
+    length rx340_eos, rx340_tgt
+    gt rx340_pos, rx340_eos, rx340_done
+    set rx340_off, 0
+    lt rx340_pos, 2, rx340_start
+    sub rx340_off, rx340_pos, 1
+    substr rx340_tgt, rx340_tgt, rx340_off
+  rx340_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan334_done
-    goto rxscan334_scan
-  rxscan334_loop:
-    ($P10) = rx331_cur."from"()
+    ne $I10, -1, rxscan343_done
+    goto rxscan343_scan
+  rxscan343_loop:
+    ($P10) = rx340_cur."from"()
     inc $P10
-    set rx331_pos, $P10
-    ge rx331_pos, rx331_eos, rxscan334_done
-  rxscan334_scan:
-    set_addr $I10, rxscan334_loop
-    rx331_cur."!mark_push"(0, rx331_pos, $I10)
-  rxscan334_done:
-.annotate 'line', 186
+    set rx340_pos, $P10
+    ge rx340_pos, rx340_eos, rxscan343_done
+  rxscan343_scan:
+    set_addr $I10, rxscan343_loop
+    rx340_cur."!mark_push"(0, rx340_pos, $I10)
+  rxscan343_done:
+.annotate 'line', 189
   # rx subcapture "sym"
-    set_addr $I10, rxcap_335_fail
-    rx331_cur."!mark_push"(0, rx331_pos, $I10)
+    set_addr $I10, rxcap_344_fail
+    rx340_cur."!mark_push"(0, rx340_pos, $I10)
   # rx literal  "CATCH"
-    add $I11, rx331_pos, 5
-    gt $I11, rx331_eos, rx331_fail
-    sub $I11, rx331_pos, rx331_off
-    substr $S10, rx331_tgt, $I11, 5
-    ne $S10, "CATCH", rx331_fail
-    add rx331_pos, 5
-    set_addr $I10, rxcap_335_fail
-    ($I12, $I11) = rx331_cur."!mark_peek"($I10)
-    rx331_cur."!cursor_pos"($I11)
-    ($P10) = rx331_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx331_pos, "")
-    rx331_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx340_pos, 5
+    gt $I11, rx340_eos, rx340_fail
+    sub $I11, rx340_pos, rx340_off
+    substr $S10, rx340_tgt, $I11, 5
+    ne $S10, "CATCH", rx340_fail
+    add rx340_pos, 5
+    set_addr $I10, rxcap_344_fail
+    ($I12, $I11) = rx340_cur."!mark_peek"($I10)
+    rx340_cur."!cursor_pos"($I11)
+    ($P10) = rx340_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx340_pos, "")
+    rx340_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_335_done
-  rxcap_335_fail:
-    goto rx331_fail
-  rxcap_335_done:
+    goto rxcap_344_done
+  rxcap_344_fail:
+    goto rx340_fail
+  rxcap_344_done:
   # rx charclass s
-    ge rx331_pos, rx331_eos, rx331_fail
-    sub $I10, rx331_pos, rx331_off
-    is_cclass $I11, 32, rx331_tgt, $I10
-    unless $I11, rx331_fail
-    inc rx331_pos
-  # rx subrule "ws" subtype=method negate=
-    rx331_cur."!cursor_pos"(rx331_pos)
-    $P10 = rx331_cur."ws"()
-    unless $P10, rx331_fail
-    rx331_pos = $P10."pos"()
-.annotate 'line', 187
+    ge rx340_pos, rx340_eos, rx340_fail
+    sub $I10, rx340_pos, rx340_off
+    is_cclass $I11, 32, rx340_tgt, $I10
+    unless $I11, rx340_fail
+    inc rx340_pos
+  # rx subrule "ws" subtype=method negate=
+    rx340_cur."!cursor_pos"(rx340_pos)
+    $P10 = rx340_cur."ws"()
+    unless $P10, rx340_fail
+    rx340_pos = $P10."pos"()
+.annotate 'line', 190
   # rx subrule "block" subtype=capture negate=
-    rx331_cur."!cursor_pos"(rx331_pos)
-    $P10 = rx331_cur."block"()
-    unless $P10, rx331_fail
-    rx331_cur."!mark_push"(0, -1, 0, $P10)
+    rx340_cur."!cursor_pos"(rx340_pos)
+    $P10 = rx340_cur."block"()
+    unless $P10, rx340_fail
+    rx340_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx331_pos = $P10."pos"()
+    rx340_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx331_cur."!cursor_pos"(rx331_pos)
-    $P10 = rx331_cur."ws"()
-    unless $P10, rx331_fail
-    rx331_pos = $P10."pos"()
-.annotate 'line', 185
+    rx340_cur."!cursor_pos"(rx340_pos)
+    $P10 = rx340_cur."ws"()
+    unless $P10, rx340_fail
+    rx340_pos = $P10."pos"()
+.annotate 'line', 188
   # rx pass
-    rx331_cur."!cursor_pass"(rx331_pos, "statement_control:sym<CATCH>")
-    rx331_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx331_pos)
-    .return (rx331_cur)
-  rx331_fail:
+    rx340_cur."!cursor_pass"(rx340_pos, "statement_control:sym<CATCH>")
+    rx340_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx340_pos)
+    .return (rx340_cur)
+  rx340_fail:
 .annotate 'line', 4
-    (rx331_rep, rx331_pos, $I10, $P10) = rx331_cur."!mark_fail"(0)
-    lt rx331_pos, -1, rx331_done
-    eq rx331_pos, -1, rx331_fail
+    (rx340_rep, rx340_pos, $I10, $P10) = rx340_cur."!mark_fail"(0)
+    lt rx340_pos, -1, rx340_done
+    eq rx340_pos, -1, rx340_fail
     jump $I10
-  rx331_done:
-    rx331_cur."!cursor_fail"()
-    rx331_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
-    .return (rx331_cur)
+  rx340_done:
+    rx340_cur."!cursor_fail"()
+    rx340_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
+    .return (rx340_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1274022894.43745") :method
+.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("74_1275811487.95429") :method
 .annotate 'line', 4
-    new $P333, "ResizablePMCArray"
-    push $P333, "CATCH"
-    .return ($P333)
+    new $P342, "ResizablePMCArray"
+    push $P342, "CATCH"
+    .return ($P342)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CONTROL>"  :subid("73_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_control:sym<CONTROL>"  :subid("75_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx339_tgt
-    .local int rx339_pos
-    .local int rx339_off
-    .local int rx339_eos
-    .local int rx339_rep
-    .local pmc rx339_cur
-    (rx339_cur, rx339_pos, rx339_tgt) = self."!cursor_start"()
-    rx339_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
-    .lex unicode:"$\x{a2}", rx339_cur
+    .local string rx348_tgt
+    .local int rx348_pos
+    .local int rx348_off
+    .local int rx348_eos
+    .local int rx348_rep
+    .local pmc rx348_cur
+    (rx348_cur, rx348_pos, rx348_tgt) = self."!cursor_start"()
+    rx348_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
+    .lex unicode:"$\x{a2}", rx348_cur
     .local pmc match
     .lex "$/", match
-    length rx339_eos, rx339_tgt
-    set rx339_off, 0
-    lt rx339_pos, 2, rx339_start
-    sub rx339_off, rx339_pos, 1
-    substr rx339_tgt, rx339_tgt, rx339_off
-  rx339_start:
+    length rx348_eos, rx348_tgt
+    gt rx348_pos, rx348_eos, rx348_done
+    set rx348_off, 0
+    lt rx348_pos, 2, rx348_start
+    sub rx348_off, rx348_pos, 1
+    substr rx348_tgt, rx348_tgt, rx348_off
+  rx348_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan342_done
-    goto rxscan342_scan
-  rxscan342_loop:
-    ($P10) = rx339_cur."from"()
+    ne $I10, -1, rxscan351_done
+    goto rxscan351_scan
+  rxscan351_loop:
+    ($P10) = rx348_cur."from"()
     inc $P10
-    set rx339_pos, $P10
-    ge rx339_pos, rx339_eos, rxscan342_done
-  rxscan342_scan:
-    set_addr $I10, rxscan342_loop
-    rx339_cur."!mark_push"(0, rx339_pos, $I10)
-  rxscan342_done:
-.annotate 'line', 191
+    set rx348_pos, $P10
+    ge rx348_pos, rx348_eos, rxscan351_done
+  rxscan351_scan:
+    set_addr $I10, rxscan351_loop
+    rx348_cur."!mark_push"(0, rx348_pos, $I10)
+  rxscan351_done:
+.annotate 'line', 194
   # rx subcapture "sym"
-    set_addr $I10, rxcap_343_fail
-    rx339_cur."!mark_push"(0, rx339_pos, $I10)
+    set_addr $I10, rxcap_352_fail
+    rx348_cur."!mark_push"(0, rx348_pos, $I10)
   # rx literal  "CONTROL"
-    add $I11, rx339_pos, 7
-    gt $I11, rx339_eos, rx339_fail
-    sub $I11, rx339_pos, rx339_off
-    substr $S10, rx339_tgt, $I11, 7
-    ne $S10, "CONTROL", rx339_fail
-    add rx339_pos, 7
-    set_addr $I10, rxcap_343_fail
-    ($I12, $I11) = rx339_cur."!mark_peek"($I10)
-    rx339_cur."!cursor_pos"($I11)
-    ($P10) = rx339_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx339_pos, "")
-    rx339_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx348_pos, 7
+    gt $I11, rx348_eos, rx348_fail
+    sub $I11, rx348_pos, rx348_off
+    substr $S10, rx348_tgt, $I11, 7
+    ne $S10, "CONTROL", rx348_fail
+    add rx348_pos, 7
+    set_addr $I10, rxcap_352_fail
+    ($I12, $I11) = rx348_cur."!mark_peek"($I10)
+    rx348_cur."!cursor_pos"($I11)
+    ($P10) = rx348_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx348_pos, "")
+    rx348_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_343_done
-  rxcap_343_fail:
-    goto rx339_fail
-  rxcap_343_done:
+    goto rxcap_352_done
+  rxcap_352_fail:
+    goto rx348_fail
+  rxcap_352_done:
   # rx charclass s
-    ge rx339_pos, rx339_eos, rx339_fail
-    sub $I10, rx339_pos, rx339_off
-    is_cclass $I11, 32, rx339_tgt, $I10
-    unless $I11, rx339_fail
-    inc rx339_pos
-  # rx subrule "ws" subtype=method negate=
-    rx339_cur."!cursor_pos"(rx339_pos)
-    $P10 = rx339_cur."ws"()
-    unless $P10, rx339_fail
-    rx339_pos = $P10."pos"()
-.annotate 'line', 192
+    ge rx348_pos, rx348_eos, rx348_fail
+    sub $I10, rx348_pos, rx348_off
+    is_cclass $I11, 32, rx348_tgt, $I10
+    unless $I11, rx348_fail
+    inc rx348_pos
+  # rx subrule "ws" subtype=method negate=
+    rx348_cur."!cursor_pos"(rx348_pos)
+    $P10 = rx348_cur."ws"()
+    unless $P10, rx348_fail
+    rx348_pos = $P10."pos"()
+.annotate 'line', 195
   # rx subrule "block" subtype=capture negate=
-    rx339_cur."!cursor_pos"(rx339_pos)
-    $P10 = rx339_cur."block"()
-    unless $P10, rx339_fail
-    rx339_cur."!mark_push"(0, -1, 0, $P10)
+    rx348_cur."!cursor_pos"(rx348_pos)
+    $P10 = rx348_cur."block"()
+    unless $P10, rx348_fail
+    rx348_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx339_pos = $P10."pos"()
+    rx348_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx339_cur."!cursor_pos"(rx339_pos)
-    $P10 = rx339_cur."ws"()
-    unless $P10, rx339_fail
-    rx339_pos = $P10."pos"()
-.annotate 'line', 190
+    rx348_cur."!cursor_pos"(rx348_pos)
+    $P10 = rx348_cur."ws"()
+    unless $P10, rx348_fail
+    rx348_pos = $P10."pos"()
+.annotate 'line', 193
   # rx pass
-    rx339_cur."!cursor_pass"(rx339_pos, "statement_control:sym<CONTROL>")
-    rx339_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx339_pos)
-    .return (rx339_cur)
-  rx339_fail:
+    rx348_cur."!cursor_pass"(rx348_pos, "statement_control:sym<CONTROL>")
+    rx348_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx348_pos)
+    .return (rx348_cur)
+  rx348_fail:
 .annotate 'line', 4
-    (rx339_rep, rx339_pos, $I10, $P10) = rx339_cur."!mark_fail"(0)
-    lt rx339_pos, -1, rx339_done
-    eq rx339_pos, -1, rx339_fail
+    (rx348_rep, rx348_pos, $I10, $P10) = rx348_cur."!mark_fail"(0)
+    lt rx348_pos, -1, rx348_done
+    eq rx348_pos, -1, rx348_fail
     jump $I10
-  rx339_done:
-    rx339_cur."!cursor_fail"()
-    rx339_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
-    .return (rx339_cur)
+  rx348_done:
+    rx348_cur."!cursor_fail"()
+    rx348_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
+    .return (rx348_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1274022894.43745") :method
+.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("76_1275811487.95429") :method
 .annotate 'line', 4
-    new $P341, "ResizablePMCArray"
-    push $P341, "CONTROL"
-    .return ($P341)
+    new $P350, "ResizablePMCArray"
+    push $P350, "CONTROL"
+    .return ($P350)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix"  :subid("75_1274022894.43745") :method
-.annotate 'line', 195
-    $P347 = self."!protoregex"("statement_prefix")
-    .return ($P347)
+.sub "statement_prefix"  :subid("77_1275811487.95429") :method
+.annotate 'line', 198
+    $P356 = self."!protoregex"("statement_prefix")
+    .return ($P356)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix"  :subid("76_1274022894.43745") :method
-.annotate 'line', 195
-    $P349 = self."!PREFIX__!protoregex"("statement_prefix")
-    .return ($P349)
+.sub "!PREFIX__statement_prefix"  :subid("78_1275811487.95429") :method
+.annotate 'line', 198
+    $P358 = self."!PREFIX__!protoregex"("statement_prefix")
+    .return ($P358)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<INIT>"  :subid("77_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_prefix:sym<INIT>"  :subid("79_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx351_tgt
-    .local int rx351_pos
-    .local int rx351_off
-    .local int rx351_eos
-    .local int rx351_rep
-    .local pmc rx351_cur
-    (rx351_cur, rx351_pos, rx351_tgt) = self."!cursor_start"()
-    rx351_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
-    .lex unicode:"$\x{a2}", rx351_cur
-    .local pmc match
-    .lex "$/", match
-    length rx351_eos, rx351_tgt
-    set rx351_off, 0
-    lt rx351_pos, 2, rx351_start
-    sub rx351_off, rx351_pos, 1
-    substr rx351_tgt, rx351_tgt, rx351_off
-  rx351_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan355_done
-    goto rxscan355_scan
-  rxscan355_loop:
-    ($P10) = rx351_cur."from"()
-    inc $P10
-    set rx351_pos, $P10
-    ge rx351_pos, rx351_eos, rxscan355_done
-  rxscan355_scan:
-    set_addr $I10, rxscan355_loop
-    rx351_cur."!mark_push"(0, rx351_pos, $I10)
-  rxscan355_done:
-.annotate 'line', 196
+    .local string rx360_tgt
+    .local int rx360_pos
+    .local int rx360_off
+    .local int rx360_eos
+    .local int rx360_rep
+    .local pmc rx360_cur
+    (rx360_cur, rx360_pos, rx360_tgt) = self."!cursor_start"()
+    rx360_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
+    .lex unicode:"$\x{a2}", rx360_cur
+    .local pmc match
+    .lex "$/", match
+    length rx360_eos, rx360_tgt
+    gt rx360_pos, rx360_eos, rx360_done
+    set rx360_off, 0
+    lt rx360_pos, 2, rx360_start
+    sub rx360_off, rx360_pos, 1
+    substr rx360_tgt, rx360_tgt, rx360_off
+  rx360_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan364_done
+    goto rxscan364_scan
+  rxscan364_loop:
+    ($P10) = rx360_cur."from"()
+    inc $P10
+    set rx360_pos, $P10
+    ge rx360_pos, rx360_eos, rxscan364_done
+  rxscan364_scan:
+    set_addr $I10, rxscan364_loop
+    rx360_cur."!mark_push"(0, rx360_pos, $I10)
+  rxscan364_done:
+.annotate 'line', 199
   # rx subcapture "sym"
-    set_addr $I10, rxcap_356_fail
-    rx351_cur."!mark_push"(0, rx351_pos, $I10)
+    set_addr $I10, rxcap_365_fail
+    rx360_cur."!mark_push"(0, rx360_pos, $I10)
   # rx literal  "INIT"
-    add $I11, rx351_pos, 4
-    gt $I11, rx351_eos, rx351_fail
-    sub $I11, rx351_pos, rx351_off
-    substr $S10, rx351_tgt, $I11, 4
-    ne $S10, "INIT", rx351_fail
-    add rx351_pos, 4
-    set_addr $I10, rxcap_356_fail
-    ($I12, $I11) = rx351_cur."!mark_peek"($I10)
-    rx351_cur."!cursor_pos"($I11)
-    ($P10) = rx351_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx351_pos, "")
-    rx351_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx360_pos, 4
+    gt $I11, rx360_eos, rx360_fail
+    sub $I11, rx360_pos, rx360_off
+    substr $S10, rx360_tgt, $I11, 4
+    ne $S10, "INIT", rx360_fail
+    add rx360_pos, 4
+    set_addr $I10, rxcap_365_fail
+    ($I12, $I11) = rx360_cur."!mark_peek"($I10)
+    rx360_cur."!cursor_pos"($I11)
+    ($P10) = rx360_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx360_pos, "")
+    rx360_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_356_done
-  rxcap_356_fail:
-    goto rx351_fail
-  rxcap_356_done:
+    goto rxcap_365_done
+  rxcap_365_fail:
+    goto rx360_fail
+  rxcap_365_done:
   # rx subrule "blorst" subtype=capture negate=
-    rx351_cur."!cursor_pos"(rx351_pos)
-    $P10 = rx351_cur."blorst"()
-    unless $P10, rx351_fail
-    rx351_cur."!mark_push"(0, -1, 0, $P10)
+    rx360_cur."!cursor_pos"(rx360_pos)
+    $P10 = rx360_cur."blorst"()
+    unless $P10, rx360_fail
+    rx360_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
-    rx351_pos = $P10."pos"()
+    rx360_pos = $P10."pos"()
   # rx pass
-    rx351_cur."!cursor_pass"(rx351_pos, "statement_prefix:sym<INIT>")
-    rx351_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx351_pos)
-    .return (rx351_cur)
-  rx351_fail:
+    rx360_cur."!cursor_pass"(rx360_pos, "statement_prefix:sym<INIT>")
+    rx360_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx360_pos)
+    .return (rx360_cur)
+  rx360_fail:
 .annotate 'line', 4
-    (rx351_rep, rx351_pos, $I10, $P10) = rx351_cur."!mark_fail"(0)
-    lt rx351_pos, -1, rx351_done
-    eq rx351_pos, -1, rx351_fail
+    (rx360_rep, rx360_pos, $I10, $P10) = rx360_cur."!mark_fail"(0)
+    lt rx360_pos, -1, rx360_done
+    eq rx360_pos, -1, rx360_fail
     jump $I10
-  rx351_done:
-    rx351_cur."!cursor_fail"()
-    rx351_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
-    .return (rx351_cur)
+  rx360_done:
+    rx360_cur."!cursor_fail"()
+    rx360_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
+    .return (rx360_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1274022894.43745") :method
+.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("80_1275811487.95429") :method
 .annotate 'line', 4
-    $P353 = self."!PREFIX__!subrule"("blorst", "INIT")
-    new $P354, "ResizablePMCArray"
-    push $P354, $P353
-    .return ($P354)
+    $P362 = self."!PREFIX__!subrule"("blorst", "INIT")
+    new $P363, "ResizablePMCArray"
+    push $P363, $P362
+    .return ($P363)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<try>"  :subid("79_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_prefix:sym<try>"  :subid("81_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx358_tgt
-    .local int rx358_pos
-    .local int rx358_off
-    .local int rx358_eos
-    .local int rx358_rep
-    .local pmc rx358_cur
-    (rx358_cur, rx358_pos, rx358_tgt) = self."!cursor_start"()
-    rx358_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
-    .lex unicode:"$\x{a2}", rx358_cur
+    .local string rx367_tgt
+    .local int rx367_pos
+    .local int rx367_off
+    .local int rx367_eos
+    .local int rx367_rep
+    .local pmc rx367_cur
+    (rx367_cur, rx367_pos, rx367_tgt) = self."!cursor_start"()
+    rx367_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
+    .lex unicode:"$\x{a2}", rx367_cur
     .local pmc match
     .lex "$/", match
-    length rx358_eos, rx358_tgt
-    set rx358_off, 0
-    lt rx358_pos, 2, rx358_start
-    sub rx358_off, rx358_pos, 1
-    substr rx358_tgt, rx358_tgt, rx358_off
-  rx358_start:
+    length rx367_eos, rx367_tgt
+    gt rx367_pos, rx367_eos, rx367_done
+    set rx367_off, 0
+    lt rx367_pos, 2, rx367_start
+    sub rx367_off, rx367_pos, 1
+    substr rx367_tgt, rx367_tgt, rx367_off
+  rx367_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan362_done
-    goto rxscan362_scan
-  rxscan362_loop:
-    ($P10) = rx358_cur."from"()
+    ne $I10, -1, rxscan371_done
+    goto rxscan371_scan
+  rxscan371_loop:
+    ($P10) = rx367_cur."from"()
     inc $P10
-    set rx358_pos, $P10
-    ge rx358_pos, rx358_eos, rxscan362_done
-  rxscan362_scan:
-    set_addr $I10, rxscan362_loop
-    rx358_cur."!mark_push"(0, rx358_pos, $I10)
-  rxscan362_done:
-.annotate 'line', 199
+    set rx367_pos, $P10
+    ge rx367_pos, rx367_eos, rxscan371_done
+  rxscan371_scan:
+    set_addr $I10, rxscan371_loop
+    rx367_cur."!mark_push"(0, rx367_pos, $I10)
+  rxscan371_done:
+.annotate 'line', 202
   # rx subcapture "sym"
-    set_addr $I10, rxcap_363_fail
-    rx358_cur."!mark_push"(0, rx358_pos, $I10)
+    set_addr $I10, rxcap_372_fail
+    rx367_cur."!mark_push"(0, rx367_pos, $I10)
   # rx literal  "try"
-    add $I11, rx358_pos, 3
-    gt $I11, rx358_eos, rx358_fail
-    sub $I11, rx358_pos, rx358_off
-    substr $S10, rx358_tgt, $I11, 3
-    ne $S10, "try", rx358_fail
-    add rx358_pos, 3
-    set_addr $I10, rxcap_363_fail
-    ($I12, $I11) = rx358_cur."!mark_peek"($I10)
-    rx358_cur."!cursor_pos"($I11)
-    ($P10) = rx358_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx358_pos, "")
-    rx358_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx367_pos, 3
+    gt $I11, rx367_eos, rx367_fail
+    sub $I11, rx367_pos, rx367_off
+    substr $S10, rx367_tgt, $I11, 3
+    ne $S10, "try", rx367_fail
+    add rx367_pos, 3
+    set_addr $I10, rxcap_372_fail
+    ($I12, $I11) = rx367_cur."!mark_peek"($I10)
+    rx367_cur."!cursor_pos"($I11)
+    ($P10) = rx367_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx367_pos, "")
+    rx367_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_363_done
-  rxcap_363_fail:
-    goto rx358_fail
-  rxcap_363_done:
-.annotate 'line', 200
+    goto rxcap_372_done
+  rxcap_372_fail:
+    goto rx367_fail
+  rxcap_372_done:
+.annotate 'line', 203
   # rx subrule "blorst" subtype=capture negate=
-    rx358_cur."!cursor_pos"(rx358_pos)
-    $P10 = rx358_cur."blorst"()
-    unless $P10, rx358_fail
-    rx358_cur."!mark_push"(0, -1, 0, $P10)
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."blorst"()
+    unless $P10, rx367_fail
+    rx367_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
-    rx358_pos = $P10."pos"()
-.annotate 'line', 198
+    rx367_pos = $P10."pos"()
+.annotate 'line', 201
   # rx pass
-    rx358_cur."!cursor_pass"(rx358_pos, "statement_prefix:sym<try>")
-    rx358_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx358_pos)
-    .return (rx358_cur)
-  rx358_fail:
+    rx367_cur."!cursor_pass"(rx367_pos, "statement_prefix:sym<try>")
+    rx367_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx367_pos)
+    .return (rx367_cur)
+  rx367_fail:
 .annotate 'line', 4
-    (rx358_rep, rx358_pos, $I10, $P10) = rx358_cur."!mark_fail"(0)
-    lt rx358_pos, -1, rx358_done
-    eq rx358_pos, -1, rx358_fail
+    (rx367_rep, rx367_pos, $I10, $P10) = rx367_cur."!mark_fail"(0)
+    lt rx367_pos, -1, rx367_done
+    eq rx367_pos, -1, rx367_fail
     jump $I10
-  rx358_done:
-    rx358_cur."!cursor_fail"()
-    rx358_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
-    .return (rx358_cur)
+  rx367_done:
+    rx367_cur."!cursor_fail"()
+    rx367_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
+    .return (rx367_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1274022894.43745") :method
+.sub "!PREFIX__statement_prefix:sym<try>"  :subid("82_1275811487.95429") :method
 .annotate 'line', 4
-    $P360 = self."!PREFIX__!subrule"("blorst", "try")
-    new $P361, "ResizablePMCArray"
-    push $P361, $P360
-    .return ($P361)
+    $P369 = self."!PREFIX__!subrule"("blorst", "try")
+    new $P370, "ResizablePMCArray"
+    push $P370, $P369
+    .return ($P370)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blorst"  :subid("81_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "blorst"  :subid("83_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx365_tgt
-    .local int rx365_pos
-    .local int rx365_off
-    .local int rx365_eos
-    .local int rx365_rep
-    .local pmc rx365_cur
-    (rx365_cur, rx365_pos, rx365_tgt) = self."!cursor_start"()
-    rx365_cur."!cursor_debug"("START ", "blorst")
-    .lex unicode:"$\x{a2}", rx365_cur
-    .local pmc match
-    .lex "$/", match
-    length rx365_eos, rx365_tgt
-    set rx365_off, 0
-    lt rx365_pos, 2, rx365_start
-    sub rx365_off, rx365_pos, 1
-    substr rx365_tgt, rx365_tgt, rx365_off
-  rx365_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan368_done
-    goto rxscan368_scan
-  rxscan368_loop:
-    ($P10) = rx365_cur."from"()
-    inc $P10
-    set rx365_pos, $P10
-    ge rx365_pos, rx365_eos, rxscan368_done
-  rxscan368_scan:
-    set_addr $I10, rxscan368_loop
-    rx365_cur."!mark_push"(0, rx365_pos, $I10)
-  rxscan368_done:
-.annotate 'line', 204
+    .local string rx374_tgt
+    .local int rx374_pos
+    .local int rx374_off
+    .local int rx374_eos
+    .local int rx374_rep
+    .local pmc rx374_cur
+    (rx374_cur, rx374_pos, rx374_tgt) = self."!cursor_start"()
+    rx374_cur."!cursor_debug"("START ", "blorst")
+    .lex unicode:"$\x{a2}", rx374_cur
+    .local pmc match
+    .lex "$/", match
+    length rx374_eos, rx374_tgt
+    gt rx374_pos, rx374_eos, rx374_done
+    set rx374_off, 0
+    lt rx374_pos, 2, rx374_start
+    sub rx374_off, rx374_pos, 1
+    substr rx374_tgt, rx374_tgt, rx374_off
+  rx374_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan377_done
+    goto rxscan377_scan
+  rxscan377_loop:
+    ($P10) = rx374_cur."from"()
+    inc $P10
+    set rx374_pos, $P10
+    ge rx374_pos, rx374_eos, rxscan377_done
+  rxscan377_scan:
+    set_addr $I10, rxscan377_loop
+    rx374_cur."!mark_push"(0, rx374_pos, $I10)
+  rxscan377_done:
+.annotate 'line', 207
   # rx charclass s
-    ge rx365_pos, rx365_eos, rx365_fail
-    sub $I10, rx365_pos, rx365_off
-    is_cclass $I11, 32, rx365_tgt, $I10
-    unless $I11, rx365_fail
-    inc rx365_pos
-  # rx subrule "ws" subtype=method negate=
-    rx365_cur."!cursor_pos"(rx365_pos)
-    $P10 = rx365_cur."ws"()
-    unless $P10, rx365_fail
-    rx365_pos = $P10."pos"()
-  alt369_0:
-    set_addr $I10, alt369_1
-    rx365_cur."!mark_push"(0, rx365_pos, $I10)
+    ge rx374_pos, rx374_eos, rx374_fail
+    sub $I10, rx374_pos, rx374_off
+    is_cclass $I11, 32, rx374_tgt, $I10
+    unless $I11, rx374_fail
+    inc rx374_pos
+  # rx subrule "ws" subtype=method negate=
+    rx374_cur."!cursor_pos"(rx374_pos)
+    $P10 = rx374_cur."ws"()
+    unless $P10, rx374_fail
+    rx374_pos = $P10."pos"()
+  alt378_0:
+    set_addr $I10, alt378_1
+    rx374_cur."!mark_push"(0, rx374_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx365_pos, rx365_eos, rx365_fail
-    sub $I10, rx365_pos, rx365_off
-    substr $S10, rx365_tgt, $I10, 1
+    ge rx374_pos, rx374_eos, rx374_fail
+    sub $I10, rx374_pos, rx374_off
+    substr $S10, rx374_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx365_fail
+    lt $I11, 0, rx374_fail
   # rx subrule "block" subtype=capture negate=
-    rx365_cur."!cursor_pos"(rx365_pos)
-    $P10 = rx365_cur."block"()
-    unless $P10, rx365_fail
-    rx365_cur."!mark_push"(0, -1, 0, $P10)
+    rx374_cur."!cursor_pos"(rx374_pos)
+    $P10 = rx374_cur."block"()
+    unless $P10, rx374_fail
+    rx374_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx365_pos = $P10."pos"()
-    goto alt369_end
-  alt369_1:
+    rx374_pos = $P10."pos"()
+    goto alt378_end
+  alt378_1:
   # rx subrule "statement" subtype=capture negate=
-    rx365_cur."!cursor_pos"(rx365_pos)
-    $P10 = rx365_cur."statement"()
-    unless $P10, rx365_fail
-    rx365_cur."!mark_push"(0, -1, 0, $P10)
+    rx374_cur."!cursor_pos"(rx374_pos)
+    $P10 = rx374_cur."statement"()
+    unless $P10, rx374_fail
+    rx374_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx365_pos = $P10."pos"()
-  alt369_end:
-.annotate 'line', 203
+    rx374_pos = $P10."pos"()
+  alt378_end:
+.annotate 'line', 206
   # rx pass
-    rx365_cur."!cursor_pass"(rx365_pos, "blorst")
-    rx365_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx365_pos)
-    .return (rx365_cur)
-  rx365_fail:
+    rx374_cur."!cursor_pass"(rx374_pos, "blorst")
+    rx374_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx374_pos)
+    .return (rx374_cur)
+  rx374_fail:
 .annotate 'line', 4
-    (rx365_rep, rx365_pos, $I10, $P10) = rx365_cur."!mark_fail"(0)
-    lt rx365_pos, -1, rx365_done
-    eq rx365_pos, -1, rx365_fail
+    (rx374_rep, rx374_pos, $I10, $P10) = rx374_cur."!mark_fail"(0)
+    lt rx374_pos, -1, rx374_done
+    eq rx374_pos, -1, rx374_fail
     jump $I10
-  rx365_done:
-    rx365_cur."!cursor_fail"()
-    rx365_cur."!cursor_debug"("FAIL  ", "blorst")
-    .return (rx365_cur)
+  rx374_done:
+    rx374_cur."!cursor_fail"()
+    rx374_cur."!cursor_debug"("FAIL  ", "blorst")
+    .return (rx374_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blorst"  :subid("82_1274022894.43745") :method
+.sub "!PREFIX__blorst"  :subid("84_1275811487.95429") :method
 .annotate 'line', 4
-    new $P367, "ResizablePMCArray"
-    push $P367, ""
-    .return ($P367)
+    new $P376, "ResizablePMCArray"
+    push $P376, ""
+    .return ($P376)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond"  :subid("83_1274022894.43745") :method
-.annotate 'line', 209
-    $P371 = self."!protoregex"("statement_mod_cond")
-    .return ($P371)
+.sub "statement_mod_cond"  :subid("85_1275811487.95429") :method
+.annotate 'line', 212
+    $P380 = self."!protoregex"("statement_mod_cond")
+    .return ($P380)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond"  :subid("84_1274022894.43745") :method
-.annotate 'line', 209
-    $P373 = self."!PREFIX__!protoregex"("statement_mod_cond")
-    .return ($P373)
+.sub "!PREFIX__statement_mod_cond"  :subid("86_1275811487.95429") :method
+.annotate 'line', 212
+    $P382 = self."!PREFIX__!protoregex"("statement_mod_cond")
+    .return ($P382)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<if>"  :subid("85_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_mod_cond:sym<if>"  :subid("87_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx375_tgt
-    .local int rx375_pos
-    .local int rx375_off
-    .local int rx375_eos
-    .local int rx375_rep
-    .local pmc rx375_cur
-    (rx375_cur, rx375_pos, rx375_tgt) = self."!cursor_start"()
-    rx375_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
-    .lex unicode:"$\x{a2}", rx375_cur
-    .local pmc match
-    .lex "$/", match
-    length rx375_eos, rx375_tgt
-    set rx375_off, 0
-    lt rx375_pos, 2, rx375_start
-    sub rx375_off, rx375_pos, 1
-    substr rx375_tgt, rx375_tgt, rx375_off
-  rx375_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan378_done
-    goto rxscan378_scan
-  rxscan378_loop:
-    ($P10) = rx375_cur."from"()
-    inc $P10
-    set rx375_pos, $P10
-    ge rx375_pos, rx375_eos, rxscan378_done
-  rxscan378_scan:
-    set_addr $I10, rxscan378_loop
-    rx375_cur."!mark_push"(0, rx375_pos, $I10)
-  rxscan378_done:
-.annotate 'line', 211
+    .local string rx384_tgt
+    .local int rx384_pos
+    .local int rx384_off
+    .local int rx384_eos
+    .local int rx384_rep
+    .local pmc rx384_cur
+    (rx384_cur, rx384_pos, rx384_tgt) = self."!cursor_start"()
+    rx384_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
+    .lex unicode:"$\x{a2}", rx384_cur
+    .local pmc match
+    .lex "$/", match
+    length rx384_eos, rx384_tgt
+    gt rx384_pos, rx384_eos, rx384_done
+    set rx384_off, 0
+    lt rx384_pos, 2, rx384_start
+    sub rx384_off, rx384_pos, 1
+    substr rx384_tgt, rx384_tgt, rx384_off
+  rx384_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan388_done
+    goto rxscan388_scan
+  rxscan388_loop:
+    ($P10) = rx384_cur."from"()
+    inc $P10
+    set rx384_pos, $P10
+    ge rx384_pos, rx384_eos, rxscan388_done
+  rxscan388_scan:
+    set_addr $I10, rxscan388_loop
+    rx384_cur."!mark_push"(0, rx384_pos, $I10)
+  rxscan388_done:
+.annotate 'line', 214
   # rx subcapture "sym"
-    set_addr $I10, rxcap_379_fail
-    rx375_cur."!mark_push"(0, rx375_pos, $I10)
+    set_addr $I10, rxcap_389_fail
+    rx384_cur."!mark_push"(0, rx384_pos, $I10)
   # rx literal  "if"
-    add $I11, rx375_pos, 2
-    gt $I11, rx375_eos, rx375_fail
-    sub $I11, rx375_pos, rx375_off
-    substr $S10, rx375_tgt, $I11, 2
-    ne $S10, "if", rx375_fail
-    add rx375_pos, 2
-    set_addr $I10, rxcap_379_fail
-    ($I12, $I11) = rx375_cur."!mark_peek"($I10)
-    rx375_cur."!cursor_pos"($I11)
-    ($P10) = rx375_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx375_pos, "")
-    rx375_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx384_pos, 2
+    gt $I11, rx384_eos, rx384_fail
+    sub $I11, rx384_pos, rx384_off
+    substr $S10, rx384_tgt, $I11, 2
+    ne $S10, "if", rx384_fail
+    add rx384_pos, 2
+    set_addr $I10, rxcap_389_fail
+    ($I12, $I11) = rx384_cur."!mark_peek"($I10)
+    rx384_cur."!cursor_pos"($I11)
+    ($P10) = rx384_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx384_pos, "")
+    rx384_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_379_done
-  rxcap_379_fail:
-    goto rx375_fail
-  rxcap_379_done:
-  # rx subrule "ws" subtype=method negate=
-    rx375_cur."!cursor_pos"(rx375_pos)
-    $P10 = rx375_cur."ws"()
-    unless $P10, rx375_fail
-    rx375_pos = $P10."pos"()
+    goto rxcap_389_done
+  rxcap_389_fail:
+    goto rx384_fail
+  rxcap_389_done:
+  # rx subrule "ws" subtype=method negate=
+    rx384_cur."!cursor_pos"(rx384_pos)
+    $P10 = rx384_cur."ws"()
+    unless $P10, rx384_fail
+    rx384_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx375_cur."!cursor_pos"(rx375_pos)
-    $P10 = rx375_cur."EXPR"()
-    unless $P10, rx375_fail
-    rx375_cur."!mark_push"(0, -1, 0, $P10)
+    rx384_cur."!cursor_pos"(rx384_pos)
+    $P10 = rx384_cur."EXPR"()
+    unless $P10, rx384_fail
+    rx384_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx375_pos = $P10."pos"()
+    rx384_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx375_cur."!cursor_pos"(rx375_pos)
-    $P10 = rx375_cur."ws"()
-    unless $P10, rx375_fail
-    rx375_pos = $P10."pos"()
+    rx384_cur."!cursor_pos"(rx384_pos)
+    $P10 = rx384_cur."ws"()
+    unless $P10, rx384_fail
+    rx384_pos = $P10."pos"()
   # rx pass
-    rx375_cur."!cursor_pass"(rx375_pos, "statement_mod_cond:sym<if>")
-    rx375_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx375_pos)
-    .return (rx375_cur)
-  rx375_fail:
+    rx384_cur."!cursor_pass"(rx384_pos, "statement_mod_cond:sym<if>")
+    rx384_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx384_pos)
+    .return (rx384_cur)
+  rx384_fail:
 .annotate 'line', 4
-    (rx375_rep, rx375_pos, $I10, $P10) = rx375_cur."!mark_fail"(0)
-    lt rx375_pos, -1, rx375_done
-    eq rx375_pos, -1, rx375_fail
+    (rx384_rep, rx384_pos, $I10, $P10) = rx384_cur."!mark_fail"(0)
+    lt rx384_pos, -1, rx384_done
+    eq rx384_pos, -1, rx384_fail
     jump $I10
-  rx375_done:
-    rx375_cur."!cursor_fail"()
-    rx375_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
-    .return (rx375_cur)
+  rx384_done:
+    rx384_cur."!cursor_fail"()
+    rx384_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
+    .return (rx384_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1274022894.43745") :method
+.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("88_1275811487.95429") :method
 .annotate 'line', 4
-    new $P377, "ResizablePMCArray"
-    push $P377, "if"
-    .return ($P377)
+    $P386 = self."!PREFIX__!subrule"("ws", "if")
+    new $P387, "ResizablePMCArray"
+    push $P387, $P386
+    .return ($P387)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<unless>"  :subid("87_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_mod_cond:sym<unless>"  :subid("89_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx383_tgt
-    .local int rx383_pos
-    .local int rx383_off
-    .local int rx383_eos
-    .local int rx383_rep
-    .local pmc rx383_cur
-    (rx383_cur, rx383_pos, rx383_tgt) = self."!cursor_start"()
-    rx383_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
-    .lex unicode:"$\x{a2}", rx383_cur
+    .local string rx393_tgt
+    .local int rx393_pos
+    .local int rx393_off
+    .local int rx393_eos
+    .local int rx393_rep
+    .local pmc rx393_cur
+    (rx393_cur, rx393_pos, rx393_tgt) = self."!cursor_start"()
+    rx393_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
+    .lex unicode:"$\x{a2}", rx393_cur
     .local pmc match
     .lex "$/", match
-    length rx383_eos, rx383_tgt
-    set rx383_off, 0
-    lt rx383_pos, 2, rx383_start
-    sub rx383_off, rx383_pos, 1
-    substr rx383_tgt, rx383_tgt, rx383_off
-  rx383_start:
+    length rx393_eos, rx393_tgt
+    gt rx393_pos, rx393_eos, rx393_done
+    set rx393_off, 0
+    lt rx393_pos, 2, rx393_start
+    sub rx393_off, rx393_pos, 1
+    substr rx393_tgt, rx393_tgt, rx393_off
+  rx393_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan386_done
-    goto rxscan386_scan
-  rxscan386_loop:
-    ($P10) = rx383_cur."from"()
+    ne $I10, -1, rxscan397_done
+    goto rxscan397_scan
+  rxscan397_loop:
+    ($P10) = rx393_cur."from"()
     inc $P10
-    set rx383_pos, $P10
-    ge rx383_pos, rx383_eos, rxscan386_done
-  rxscan386_scan:
-    set_addr $I10, rxscan386_loop
-    rx383_cur."!mark_push"(0, rx383_pos, $I10)
-  rxscan386_done:
-.annotate 'line', 212
+    set rx393_pos, $P10
+    ge rx393_pos, rx393_eos, rxscan397_done
+  rxscan397_scan:
+    set_addr $I10, rxscan397_loop
+    rx393_cur."!mark_push"(0, rx393_pos, $I10)
+  rxscan397_done:
+.annotate 'line', 215
   # rx subcapture "sym"
-    set_addr $I10, rxcap_387_fail
-    rx383_cur."!mark_push"(0, rx383_pos, $I10)
+    set_addr $I10, rxcap_398_fail
+    rx393_cur."!mark_push"(0, rx393_pos, $I10)
   # rx literal  "unless"
-    add $I11, rx383_pos, 6
-    gt $I11, rx383_eos, rx383_fail
-    sub $I11, rx383_pos, rx383_off
-    substr $S10, rx383_tgt, $I11, 6
-    ne $S10, "unless", rx383_fail
-    add rx383_pos, 6
-    set_addr $I10, rxcap_387_fail
-    ($I12, $I11) = rx383_cur."!mark_peek"($I10)
-    rx383_cur."!cursor_pos"($I11)
-    ($P10) = rx383_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx383_pos, "")
-    rx383_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx393_pos, 6
+    gt $I11, rx393_eos, rx393_fail
+    sub $I11, rx393_pos, rx393_off
+    substr $S10, rx393_tgt, $I11, 6
+    ne $S10, "unless", rx393_fail
+    add rx393_pos, 6
+    set_addr $I10, rxcap_398_fail
+    ($I12, $I11) = rx393_cur."!mark_peek"($I10)
+    rx393_cur."!cursor_pos"($I11)
+    ($P10) = rx393_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx393_pos, "")
+    rx393_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_387_done
-  rxcap_387_fail:
-    goto rx383_fail
-  rxcap_387_done:
-  # rx subrule "ws" subtype=method negate=
-    rx383_cur."!cursor_pos"(rx383_pos)
-    $P10 = rx383_cur."ws"()
-    unless $P10, rx383_fail
-    rx383_pos = $P10."pos"()
+    goto rxcap_398_done
+  rxcap_398_fail:
+    goto rx393_fail
+  rxcap_398_done:
+  # rx subrule "ws" subtype=method negate=
+    rx393_cur."!cursor_pos"(rx393_pos)
+    $P10 = rx393_cur."ws"()
+    unless $P10, rx393_fail
+    rx393_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx383_cur."!cursor_pos"(rx383_pos)
-    $P10 = rx383_cur."EXPR"()
-    unless $P10, rx383_fail
-    rx383_cur."!mark_push"(0, -1, 0, $P10)
+    rx393_cur."!cursor_pos"(rx393_pos)
+    $P10 = rx393_cur."EXPR"()
+    unless $P10, rx393_fail
+    rx393_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx383_pos = $P10."pos"()
+    rx393_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx383_cur."!cursor_pos"(rx383_pos)
-    $P10 = rx383_cur."ws"()
-    unless $P10, rx383_fail
-    rx383_pos = $P10."pos"()
+    rx393_cur."!cursor_pos"(rx393_pos)
+    $P10 = rx393_cur."ws"()
+    unless $P10, rx393_fail
+    rx393_pos = $P10."pos"()
   # rx pass
-    rx383_cur."!cursor_pass"(rx383_pos, "statement_mod_cond:sym<unless>")
-    rx383_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<unless>", " at pos=", rx383_pos)
-    .return (rx383_cur)
-  rx383_fail:
+    rx393_cur."!cursor_pass"(rx393_pos, "statement_mod_cond:sym<unless>")
+    rx393_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<unless>", " at pos=", rx393_pos)
+    .return (rx393_cur)
+  rx393_fail:
 .annotate 'line', 4
-    (rx383_rep, rx383_pos, $I10, $P10) = rx383_cur."!mark_fail"(0)
-    lt rx383_pos, -1, rx383_done
-    eq rx383_pos, -1, rx383_fail
+    (rx393_rep, rx393_pos, $I10, $P10) = rx393_cur."!mark_fail"(0)
+    lt rx393_pos, -1, rx393_done
+    eq rx393_pos, -1, rx393_fail
     jump $I10
-  rx383_done:
-    rx383_cur."!cursor_fail"()
-    rx383_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
-    .return (rx383_cur)
+  rx393_done:
+    rx393_cur."!cursor_fail"()
+    rx393_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
+    .return (rx393_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1274022894.43745") :method
+.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("90_1275811487.95429") :method
 .annotate 'line', 4
-    new $P385, "ResizablePMCArray"
-    push $P385, "unless"
-    .return ($P385)
+    $P395 = self."!PREFIX__!subrule"("ws", "unless")
+    new $P396, "ResizablePMCArray"
+    push $P396, $P395
+    .return ($P396)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop"  :subid("89_1274022894.43745") :method
-.annotate 'line', 214
-    $P391 = self."!protoregex"("statement_mod_loop")
-    .return ($P391)
+.sub "statement_mod_loop"  :subid("91_1275811487.95429") :method
+.annotate 'line', 217
+    $P402 = self."!protoregex"("statement_mod_loop")
+    .return ($P402)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop"  :subid("90_1274022894.43745") :method
-.annotate 'line', 214
-    $P393 = self."!PREFIX__!protoregex"("statement_mod_loop")
-    .return ($P393)
+.sub "!PREFIX__statement_mod_loop"  :subid("92_1275811487.95429") :method
+.annotate 'line', 217
+    $P404 = self."!PREFIX__!protoregex"("statement_mod_loop")
+    .return ($P404)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<while>"  :subid("91_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_mod_loop:sym<while>"  :subid("93_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx395_tgt
-    .local int rx395_pos
-    .local int rx395_off
-    .local int rx395_eos
-    .local int rx395_rep
-    .local pmc rx395_cur
-    (rx395_cur, rx395_pos, rx395_tgt) = self."!cursor_start"()
-    rx395_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
-    .lex unicode:"$\x{a2}", rx395_cur
-    .local pmc match
-    .lex "$/", match
-    length rx395_eos, rx395_tgt
-    set rx395_off, 0
-    lt rx395_pos, 2, rx395_start
-    sub rx395_off, rx395_pos, 1
-    substr rx395_tgt, rx395_tgt, rx395_off
-  rx395_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan398_done
-    goto rxscan398_scan
-  rxscan398_loop:
-    ($P10) = rx395_cur."from"()
-    inc $P10
-    set rx395_pos, $P10
-    ge rx395_pos, rx395_eos, rxscan398_done
-  rxscan398_scan:
-    set_addr $I10, rxscan398_loop
-    rx395_cur."!mark_push"(0, rx395_pos, $I10)
-  rxscan398_done:
-.annotate 'line', 216
+    .local string rx406_tgt
+    .local int rx406_pos
+    .local int rx406_off
+    .local int rx406_eos
+    .local int rx406_rep
+    .local pmc rx406_cur
+    (rx406_cur, rx406_pos, rx406_tgt) = self."!cursor_start"()
+    rx406_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
+    .lex unicode:"$\x{a2}", rx406_cur
+    .local pmc match
+    .lex "$/", match
+    length rx406_eos, rx406_tgt
+    gt rx406_pos, rx406_eos, rx406_done
+    set rx406_off, 0
+    lt rx406_pos, 2, rx406_start
+    sub rx406_off, rx406_pos, 1
+    substr rx406_tgt, rx406_tgt, rx406_off
+  rx406_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan410_done
+    goto rxscan410_scan
+  rxscan410_loop:
+    ($P10) = rx406_cur."from"()
+    inc $P10
+    set rx406_pos, $P10
+    ge rx406_pos, rx406_eos, rxscan410_done
+  rxscan410_scan:
+    set_addr $I10, rxscan410_loop
+    rx406_cur."!mark_push"(0, rx406_pos, $I10)
+  rxscan410_done:
+.annotate 'line', 219
   # rx subcapture "sym"
-    set_addr $I10, rxcap_399_fail
-    rx395_cur."!mark_push"(0, rx395_pos, $I10)
+    set_addr $I10, rxcap_411_fail
+    rx406_cur."!mark_push"(0, rx406_pos, $I10)
   # rx literal  "while"
-    add $I11, rx395_pos, 5
-    gt $I11, rx395_eos, rx395_fail
-    sub $I11, rx395_pos, rx395_off
-    substr $S10, rx395_tgt, $I11, 5
-    ne $S10, "while", rx395_fail
-    add rx395_pos, 5
-    set_addr $I10, rxcap_399_fail
-    ($I12, $I11) = rx395_cur."!mark_peek"($I10)
-    rx395_cur."!cursor_pos"($I11)
-    ($P10) = rx395_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx395_pos, "")
-    rx395_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx406_pos, 5
+    gt $I11, rx406_eos, rx406_fail
+    sub $I11, rx406_pos, rx406_off
+    substr $S10, rx406_tgt, $I11, 5
+    ne $S10, "while", rx406_fail
+    add rx406_pos, 5
+    set_addr $I10, rxcap_411_fail
+    ($I12, $I11) = rx406_cur."!mark_peek"($I10)
+    rx406_cur."!cursor_pos"($I11)
+    ($P10) = rx406_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx406_pos, "")
+    rx406_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_399_done
-  rxcap_399_fail:
-    goto rx395_fail
-  rxcap_399_done:
-  # rx subrule "ws" subtype=method negate=
-    rx395_cur."!cursor_pos"(rx395_pos)
-    $P10 = rx395_cur."ws"()
-    unless $P10, rx395_fail
-    rx395_pos = $P10."pos"()
+    goto rxcap_411_done
+  rxcap_411_fail:
+    goto rx406_fail
+  rxcap_411_done:
+  # rx subrule "ws" subtype=method negate=
+    rx406_cur."!cursor_pos"(rx406_pos)
+    $P10 = rx406_cur."ws"()
+    unless $P10, rx406_fail
+    rx406_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx395_cur."!cursor_pos"(rx395_pos)
-    $P10 = rx395_cur."EXPR"()
-    unless $P10, rx395_fail
-    rx395_cur."!mark_push"(0, -1, 0, $P10)
+    rx406_cur."!cursor_pos"(rx406_pos)
+    $P10 = rx406_cur."EXPR"()
+    unless $P10, rx406_fail
+    rx406_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx395_pos = $P10."pos"()
+    rx406_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx395_cur."!cursor_pos"(rx395_pos)
-    $P10 = rx395_cur."ws"()
-    unless $P10, rx395_fail
-    rx395_pos = $P10."pos"()
+    rx406_cur."!cursor_pos"(rx406_pos)
+    $P10 = rx406_cur."ws"()
+    unless $P10, rx406_fail
+    rx406_pos = $P10."pos"()
   # rx pass
-    rx395_cur."!cursor_pass"(rx395_pos, "statement_mod_loop:sym<while>")
-    rx395_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx395_pos)
-    .return (rx395_cur)
-  rx395_fail:
+    rx406_cur."!cursor_pass"(rx406_pos, "statement_mod_loop:sym<while>")
+    rx406_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx406_pos)
+    .return (rx406_cur)
+  rx406_fail:
 .annotate 'line', 4
-    (rx395_rep, rx395_pos, $I10, $P10) = rx395_cur."!mark_fail"(0)
-    lt rx395_pos, -1, rx395_done
-    eq rx395_pos, -1, rx395_fail
+    (rx406_rep, rx406_pos, $I10, $P10) = rx406_cur."!mark_fail"(0)
+    lt rx406_pos, -1, rx406_done
+    eq rx406_pos, -1, rx406_fail
     jump $I10
-  rx395_done:
-    rx395_cur."!cursor_fail"()
-    rx395_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
-    .return (rx395_cur)
+  rx406_done:
+    rx406_cur."!cursor_fail"()
+    rx406_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
+    .return (rx406_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1274022894.43745") :method
+.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("94_1275811487.95429") :method
 .annotate 'line', 4
-    new $P397, "ResizablePMCArray"
-    push $P397, "while"
-    .return ($P397)
+    $P408 = self."!PREFIX__!subrule"("ws", "while")
+    new $P409, "ResizablePMCArray"
+    push $P409, $P408
+    .return ($P409)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<until>"  :subid("93_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "statement_mod_loop:sym<until>"  :subid("95_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx403_tgt
-    .local int rx403_pos
-    .local int rx403_off
-    .local int rx403_eos
-    .local int rx403_rep
-    .local pmc rx403_cur
-    (rx403_cur, rx403_pos, rx403_tgt) = self."!cursor_start"()
-    rx403_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
-    .lex unicode:"$\x{a2}", rx403_cur
+    .local string rx415_tgt
+    .local int rx415_pos
+    .local int rx415_off
+    .local int rx415_eos
+    .local int rx415_rep
+    .local pmc rx415_cur
+    (rx415_cur, rx415_pos, rx415_tgt) = self."!cursor_start"()
+    rx415_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
+    .lex unicode:"$\x{a2}", rx415_cur
     .local pmc match
     .lex "$/", match
-    length rx403_eos, rx403_tgt
-    set rx403_off, 0
-    lt rx403_pos, 2, rx403_start
-    sub rx403_off, rx403_pos, 1
-    substr rx403_tgt, rx403_tgt, rx403_off
-  rx403_start:
+    length rx415_eos, rx415_tgt
+    gt rx415_pos, rx415_eos, rx415_done
+    set rx415_off, 0
+    lt rx415_pos, 2, rx415_start
+    sub rx415_off, rx415_pos, 1
+    substr rx415_tgt, rx415_tgt, rx415_off
+  rx415_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan406_done
-    goto rxscan406_scan
-  rxscan406_loop:
-    ($P10) = rx403_cur."from"()
+    ne $I10, -1, rxscan419_done
+    goto rxscan419_scan
+  rxscan419_loop:
+    ($P10) = rx415_cur."from"()
     inc $P10
-    set rx403_pos, $P10
-    ge rx403_pos, rx403_eos, rxscan406_done
-  rxscan406_scan:
-    set_addr $I10, rxscan406_loop
-    rx403_cur."!mark_push"(0, rx403_pos, $I10)
-  rxscan406_done:
-.annotate 'line', 217
+    set rx415_pos, $P10
+    ge rx415_pos, rx415_eos, rxscan419_done
+  rxscan419_scan:
+    set_addr $I10, rxscan419_loop
+    rx415_cur."!mark_push"(0, rx415_pos, $I10)
+  rxscan419_done:
+.annotate 'line', 220
   # rx subcapture "sym"
-    set_addr $I10, rxcap_407_fail
-    rx403_cur."!mark_push"(0, rx403_pos, $I10)
+    set_addr $I10, rxcap_420_fail
+    rx415_cur."!mark_push"(0, rx415_pos, $I10)
   # rx literal  "until"
-    add $I11, rx403_pos, 5
-    gt $I11, rx403_eos, rx403_fail
-    sub $I11, rx403_pos, rx403_off
-    substr $S10, rx403_tgt, $I11, 5
-    ne $S10, "until", rx403_fail
-    add rx403_pos, 5
-    set_addr $I10, rxcap_407_fail
-    ($I12, $I11) = rx403_cur."!mark_peek"($I10)
-    rx403_cur."!cursor_pos"($I11)
-    ($P10) = rx403_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx403_pos, "")
-    rx403_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx415_pos, 5
+    gt $I11, rx415_eos, rx415_fail
+    sub $I11, rx415_pos, rx415_off
+    substr $S10, rx415_tgt, $I11, 5
+    ne $S10, "until", rx415_fail
+    add rx415_pos, 5
+    set_addr $I10, rxcap_420_fail
+    ($I12, $I11) = rx415_cur."!mark_peek"($I10)
+    rx415_cur."!cursor_pos"($I11)
+    ($P10) = rx415_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx415_pos, "")
+    rx415_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_407_done
-  rxcap_407_fail:
-    goto rx403_fail
-  rxcap_407_done:
-  # rx subrule "ws" subtype=method negate=
-    rx403_cur."!cursor_pos"(rx403_pos)
-    $P10 = rx403_cur."ws"()
-    unless $P10, rx403_fail
-    rx403_pos = $P10."pos"()
+    goto rxcap_420_done
+  rxcap_420_fail:
+    goto rx415_fail
+  rxcap_420_done:
+  # rx subrule "ws" subtype=method negate=
+    rx415_cur."!cursor_pos"(rx415_pos)
+    $P10 = rx415_cur."ws"()
+    unless $P10, rx415_fail
+    rx415_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx403_cur."!cursor_pos"(rx403_pos)
-    $P10 = rx403_cur."EXPR"()
-    unless $P10, rx403_fail
-    rx403_cur."!mark_push"(0, -1, 0, $P10)
+    rx415_cur."!cursor_pos"(rx415_pos)
+    $P10 = rx415_cur."EXPR"()
+    unless $P10, rx415_fail
+    rx415_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx403_pos = $P10."pos"()
+    rx415_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx403_cur."!cursor_pos"(rx403_pos)
-    $P10 = rx403_cur."ws"()
-    unless $P10, rx403_fail
-    rx403_pos = $P10."pos"()
+    rx415_cur."!cursor_pos"(rx415_pos)
+    $P10 = rx415_cur."ws"()
+    unless $P10, rx415_fail
+    rx415_pos = $P10."pos"()
   # rx pass
-    rx403_cur."!cursor_pass"(rx403_pos, "statement_mod_loop:sym<until>")
-    rx403_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx403_pos)
-    .return (rx403_cur)
-  rx403_fail:
+    rx415_cur."!cursor_pass"(rx415_pos, "statement_mod_loop:sym<until>")
+    rx415_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx415_pos)
+    .return (rx415_cur)
+  rx415_fail:
 .annotate 'line', 4
-    (rx403_rep, rx403_pos, $I10, $P10) = rx403_cur."!mark_fail"(0)
-    lt rx403_pos, -1, rx403_done
-    eq rx403_pos, -1, rx403_fail
+    (rx415_rep, rx415_pos, $I10, $P10) = rx415_cur."!mark_fail"(0)
+    lt rx415_pos, -1, rx415_done
+    eq rx415_pos, -1, rx415_fail
     jump $I10
-  rx403_done:
-    rx403_cur."!cursor_fail"()
-    rx403_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
-    .return (rx403_cur)
+  rx415_done:
+    rx415_cur."!cursor_fail"()
+    rx415_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
+    .return (rx415_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1274022894.43745") :method
+.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("96_1275811487.95429") :method
 .annotate 'line', 4
-    new $P405, "ResizablePMCArray"
-    push $P405, "until"
-    .return ($P405)
+    $P417 = self."!PREFIX__!subrule"("ws", "until")
+    new $P418, "ResizablePMCArray"
+    push $P418, $P417
+    .return ($P418)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<fatarrow>"  :subid("95_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<fatarrow>"  :subid("97_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx411_tgt
-    .local int rx411_pos
-    .local int rx411_off
-    .local int rx411_eos
-    .local int rx411_rep
-    .local pmc rx411_cur
-    (rx411_cur, rx411_pos, rx411_tgt) = self."!cursor_start"()
-    rx411_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
-    .lex unicode:"$\x{a2}", rx411_cur
+    .local string rx424_tgt
+    .local int rx424_pos
+    .local int rx424_off
+    .local int rx424_eos
+    .local int rx424_rep
+    .local pmc rx424_cur
+    (rx424_cur, rx424_pos, rx424_tgt) = self."!cursor_start"()
+    rx424_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
+    .lex unicode:"$\x{a2}", rx424_cur
     .local pmc match
     .lex "$/", match
-    length rx411_eos, rx411_tgt
-    set rx411_off, 0
-    lt rx411_pos, 2, rx411_start
-    sub rx411_off, rx411_pos, 1
-    substr rx411_tgt, rx411_tgt, rx411_off
-  rx411_start:
+    length rx424_eos, rx424_tgt
+    gt rx424_pos, rx424_eos, rx424_done
+    set rx424_off, 0
+    lt rx424_pos, 2, rx424_start
+    sub rx424_off, rx424_pos, 1
+    substr rx424_tgt, rx424_tgt, rx424_off
+  rx424_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan415_done
-    goto rxscan415_scan
-  rxscan415_loop:
-    ($P10) = rx411_cur."from"()
+    ne $I10, -1, rxscan428_done
+    goto rxscan428_scan
+  rxscan428_loop:
+    ($P10) = rx424_cur."from"()
     inc $P10
-    set rx411_pos, $P10
-    ge rx411_pos, rx411_eos, rxscan415_done
-  rxscan415_scan:
-    set_addr $I10, rxscan415_loop
-    rx411_cur."!mark_push"(0, rx411_pos, $I10)
-  rxscan415_done:
-.annotate 'line', 221
+    set rx424_pos, $P10
+    ge rx424_pos, rx424_eos, rxscan428_done
+  rxscan428_scan:
+    set_addr $I10, rxscan428_loop
+    rx424_cur."!mark_push"(0, rx424_pos, $I10)
+  rxscan428_done:
+.annotate 'line', 224
   # rx subrule "fatarrow" subtype=capture negate=
-    rx411_cur."!cursor_pos"(rx411_pos)
-    $P10 = rx411_cur."fatarrow"()
-    unless $P10, rx411_fail
-    rx411_cur."!mark_push"(0, -1, 0, $P10)
+    rx424_cur."!cursor_pos"(rx424_pos)
+    $P10 = rx424_cur."fatarrow"()
+    unless $P10, rx424_fail
+    rx424_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("fatarrow")
-    rx411_pos = $P10."pos"()
+    rx424_pos = $P10."pos"()
   # rx pass
-    rx411_cur."!cursor_pass"(rx411_pos, "term:sym<fatarrow>")
-    rx411_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx411_pos)
-    .return (rx411_cur)
-  rx411_fail:
+    rx424_cur."!cursor_pass"(rx424_pos, "term:sym<fatarrow>")
+    rx424_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx424_pos)
+    .return (rx424_cur)
+  rx424_fail:
 .annotate 'line', 4
-    (rx411_rep, rx411_pos, $I10, $P10) = rx411_cur."!mark_fail"(0)
-    lt rx411_pos, -1, rx411_done
-    eq rx411_pos, -1, rx411_fail
+    (rx424_rep, rx424_pos, $I10, $P10) = rx424_cur."!mark_fail"(0)
+    lt rx424_pos, -1, rx424_done
+    eq rx424_pos, -1, rx424_fail
     jump $I10
-  rx411_done:
-    rx411_cur."!cursor_fail"()
-    rx411_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
-    .return (rx411_cur)
+  rx424_done:
+    rx424_cur."!cursor_fail"()
+    rx424_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
+    .return (rx424_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1274022894.43745") :method
+.sub "!PREFIX__term:sym<fatarrow>"  :subid("98_1275811487.95429") :method
 .annotate 'line', 4
-    $P413 = self."!PREFIX__!subrule"("fatarrow", "")
-    new $P414, "ResizablePMCArray"
-    push $P414, $P413
-    .return ($P414)
+    $P426 = self."!PREFIX__!subrule"("fatarrow", "")
+    new $P427, "ResizablePMCArray"
+    push $P427, $P426
+    .return ($P427)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<colonpair>"  :subid("97_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<colonpair>"  :subid("99_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx417_tgt
-    .local int rx417_pos
-    .local int rx417_off
-    .local int rx417_eos
-    .local int rx417_rep
-    .local pmc rx417_cur
-    (rx417_cur, rx417_pos, rx417_tgt) = self."!cursor_start"()
-    rx417_cur."!cursor_debug"("START ", "term:sym<colonpair>")
-    .lex unicode:"$\x{a2}", rx417_cur
+    .local string rx430_tgt
+    .local int rx430_pos
+    .local int rx430_off
+    .local int rx430_eos
+    .local int rx430_rep
+    .local pmc rx430_cur
+    (rx430_cur, rx430_pos, rx430_tgt) = self."!cursor_start"()
+    rx430_cur."!cursor_debug"("START ", "term:sym<colonpair>")
+    .lex unicode:"$\x{a2}", rx430_cur
     .local pmc match
     .lex "$/", match
-    length rx417_eos, rx417_tgt
-    set rx417_off, 0
-    lt rx417_pos, 2, rx417_start
-    sub rx417_off, rx417_pos, 1
-    substr rx417_tgt, rx417_tgt, rx417_off
-  rx417_start:
+    length rx430_eos, rx430_tgt
+    gt rx430_pos, rx430_eos, rx430_done
+    set rx430_off, 0
+    lt rx430_pos, 2, rx430_start
+    sub rx430_off, rx430_pos, 1
+    substr rx430_tgt, rx430_tgt, rx430_off
+  rx430_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan421_done
-    goto rxscan421_scan
-  rxscan421_loop:
-    ($P10) = rx417_cur."from"()
+    ne $I10, -1, rxscan434_done
+    goto rxscan434_scan
+  rxscan434_loop:
+    ($P10) = rx430_cur."from"()
     inc $P10
-    set rx417_pos, $P10
-    ge rx417_pos, rx417_eos, rxscan421_done
-  rxscan421_scan:
-    set_addr $I10, rxscan421_loop
-    rx417_cur."!mark_push"(0, rx417_pos, $I10)
-  rxscan421_done:
-.annotate 'line', 222
+    set rx430_pos, $P10
+    ge rx430_pos, rx430_eos, rxscan434_done
+  rxscan434_scan:
+    set_addr $I10, rxscan434_loop
+    rx430_cur."!mark_push"(0, rx430_pos, $I10)
+  rxscan434_done:
+.annotate 'line', 225
   # rx subrule "colonpair" subtype=capture negate=
-    rx417_cur."!cursor_pos"(rx417_pos)
-    $P10 = rx417_cur."colonpair"()
-    unless $P10, rx417_fail
-    rx417_cur."!mark_push"(0, -1, 0, $P10)
+    rx430_cur."!cursor_pos"(rx430_pos)
+    $P10 = rx430_cur."colonpair"()
+    unless $P10, rx430_fail
+    rx430_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("colonpair")
-    rx417_pos = $P10."pos"()
+    rx430_pos = $P10."pos"()
   # rx pass
-    rx417_cur."!cursor_pass"(rx417_pos, "term:sym<colonpair>")
-    rx417_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx417_pos)
-    .return (rx417_cur)
-  rx417_fail:
+    rx430_cur."!cursor_pass"(rx430_pos, "term:sym<colonpair>")
+    rx430_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx430_pos)
+    .return (rx430_cur)
+  rx430_fail:
 .annotate 'line', 4
-    (rx417_rep, rx417_pos, $I10, $P10) = rx417_cur."!mark_fail"(0)
-    lt rx417_pos, -1, rx417_done
-    eq rx417_pos, -1, rx417_fail
+    (rx430_rep, rx430_pos, $I10, $P10) = rx430_cur."!mark_fail"(0)
+    lt rx430_pos, -1, rx430_done
+    eq rx430_pos, -1, rx430_fail
     jump $I10
-  rx417_done:
-    rx417_cur."!cursor_fail"()
-    rx417_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
-    .return (rx417_cur)
+  rx430_done:
+    rx430_cur."!cursor_fail"()
+    rx430_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
+    .return (rx430_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1274022894.43745") :method
+.sub "!PREFIX__term:sym<colonpair>"  :subid("100_1275811487.95429") :method
 .annotate 'line', 4
-    $P419 = self."!PREFIX__!subrule"("colonpair", "")
-    new $P420, "ResizablePMCArray"
-    push $P420, $P419
-    .return ($P420)
+    $P432 = self."!PREFIX__!subrule"("colonpair", "")
+    new $P433, "ResizablePMCArray"
+    push $P433, $P432
+    .return ($P433)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<variable>"  :subid("99_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<variable>"  :subid("101_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx423_tgt
-    .local int rx423_pos
-    .local int rx423_off
-    .local int rx423_eos
-    .local int rx423_rep
-    .local pmc rx423_cur
-    (rx423_cur, rx423_pos, rx423_tgt) = self."!cursor_start"()
-    rx423_cur."!cursor_debug"("START ", "term:sym<variable>")
-    .lex unicode:"$\x{a2}", rx423_cur
+    .local string rx436_tgt
+    .local int rx436_pos
+    .local int rx436_off
+    .local int rx436_eos
+    .local int rx436_rep
+    .local pmc rx436_cur
+    (rx436_cur, rx436_pos, rx436_tgt) = self."!cursor_start"()
+    rx436_cur."!cursor_debug"("START ", "term:sym<variable>")
+    .lex unicode:"$\x{a2}", rx436_cur
     .local pmc match
     .lex "$/", match
-    length rx423_eos, rx423_tgt
-    set rx423_off, 0
-    lt rx423_pos, 2, rx423_start
-    sub rx423_off, rx423_pos, 1
-    substr rx423_tgt, rx423_tgt, rx423_off
-  rx423_start:
+    length rx436_eos, rx436_tgt
+    gt rx436_pos, rx436_eos, rx436_done
+    set rx436_off, 0
+    lt rx436_pos, 2, rx436_start
+    sub rx436_off, rx436_pos, 1
+    substr rx436_tgt, rx436_tgt, rx436_off
+  rx436_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan427_done
-    goto rxscan427_scan
-  rxscan427_loop:
-    ($P10) = rx423_cur."from"()
+    ne $I10, -1, rxscan440_done
+    goto rxscan440_scan
+  rxscan440_loop:
+    ($P10) = rx436_cur."from"()
     inc $P10
-    set rx423_pos, $P10
-    ge rx423_pos, rx423_eos, rxscan427_done
-  rxscan427_scan:
-    set_addr $I10, rxscan427_loop
-    rx423_cur."!mark_push"(0, rx423_pos, $I10)
-  rxscan427_done:
-.annotate 'line', 223
+    set rx436_pos, $P10
+    ge rx436_pos, rx436_eos, rxscan440_done
+  rxscan440_scan:
+    set_addr $I10, rxscan440_loop
+    rx436_cur."!mark_push"(0, rx436_pos, $I10)
+  rxscan440_done:
+.annotate 'line', 226
   # rx subrule "variable" subtype=capture negate=
-    rx423_cur."!cursor_pos"(rx423_pos)
-    $P10 = rx423_cur."variable"()
-    unless $P10, rx423_fail
-    rx423_cur."!mark_push"(0, -1, 0, $P10)
+    rx436_cur."!cursor_pos"(rx436_pos)
+    $P10 = rx436_cur."variable"()
+    unless $P10, rx436_fail
+    rx436_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx423_pos = $P10."pos"()
+    rx436_pos = $P10."pos"()
   # rx pass
-    rx423_cur."!cursor_pass"(rx423_pos, "term:sym<variable>")
-    rx423_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx423_pos)
-    .return (rx423_cur)
-  rx423_fail:
+    rx436_cur."!cursor_pass"(rx436_pos, "term:sym<variable>")
+    rx436_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx436_pos)
+    .return (rx436_cur)
+  rx436_fail:
 .annotate 'line', 4
-    (rx423_rep, rx423_pos, $I10, $P10) = rx423_cur."!mark_fail"(0)
-    lt rx423_pos, -1, rx423_done
-    eq rx423_pos, -1, rx423_fail
+    (rx436_rep, rx436_pos, $I10, $P10) = rx436_cur."!mark_fail"(0)
+    lt rx436_pos, -1, rx436_done
+    eq rx436_pos, -1, rx436_fail
     jump $I10
-  rx423_done:
-    rx423_cur."!cursor_fail"()
-    rx423_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
-    .return (rx423_cur)
+  rx436_done:
+    rx436_cur."!cursor_fail"()
+    rx436_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
+    .return (rx436_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<variable>"  :subid("100_1274022894.43745") :method
+.sub "!PREFIX__term:sym<variable>"  :subid("102_1275811487.95429") :method
 .annotate 'line', 4
-    $P425 = self."!PREFIX__!subrule"("variable", "")
-    new $P426, "ResizablePMCArray"
-    push $P426, $P425
-    .return ($P426)
+    $P438 = self."!PREFIX__!subrule"("variable", "")
+    new $P439, "ResizablePMCArray"
+    push $P439, $P438
+    .return ($P439)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<package_declarator>"  :subid("101_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<package_declarator>"  :subid("103_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx429_tgt
-    .local int rx429_pos
-    .local int rx429_off
-    .local int rx429_eos
-    .local int rx429_rep
-    .local pmc rx429_cur
-    (rx429_cur, rx429_pos, rx429_tgt) = self."!cursor_start"()
-    rx429_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
-    .lex unicode:"$\x{a2}", rx429_cur
-    .local pmc match
-    .lex "$/", match
-    length rx429_eos, rx429_tgt
-    set rx429_off, 0
-    lt rx429_pos, 2, rx429_start
-    sub rx429_off, rx429_pos, 1
-    substr rx429_tgt, rx429_tgt, rx429_off
-  rx429_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan433_done
-    goto rxscan433_scan
-  rxscan433_loop:
-    ($P10) = rx429_cur."from"()
-    inc $P10
-    set rx429_pos, $P10
-    ge rx429_pos, rx429_eos, rxscan433_done
-  rxscan433_scan:
-    set_addr $I10, rxscan433_loop
-    rx429_cur."!mark_push"(0, rx429_pos, $I10)
-  rxscan433_done:
-.annotate 'line', 224
+    .local string rx442_tgt
+    .local int rx442_pos
+    .local int rx442_off
+    .local int rx442_eos
+    .local int rx442_rep
+    .local pmc rx442_cur
+    (rx442_cur, rx442_pos, rx442_tgt) = self."!cursor_start"()
+    rx442_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
+    .lex unicode:"$\x{a2}", rx442_cur
+    .local pmc match
+    .lex "$/", match
+    length rx442_eos, rx442_tgt
+    gt rx442_pos, rx442_eos, rx442_done
+    set rx442_off, 0
+    lt rx442_pos, 2, rx442_start
+    sub rx442_off, rx442_pos, 1
+    substr rx442_tgt, rx442_tgt, rx442_off
+  rx442_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan446_done
+    goto rxscan446_scan
+  rxscan446_loop:
+    ($P10) = rx442_cur."from"()
+    inc $P10
+    set rx442_pos, $P10
+    ge rx442_pos, rx442_eos, rxscan446_done
+  rxscan446_scan:
+    set_addr $I10, rxscan446_loop
+    rx442_cur."!mark_push"(0, rx442_pos, $I10)
+  rxscan446_done:
+.annotate 'line', 227
   # rx subrule "package_declarator" subtype=capture negate=
-    rx429_cur."!cursor_pos"(rx429_pos)
-    $P10 = rx429_cur."package_declarator"()
-    unless $P10, rx429_fail
-    rx429_cur."!mark_push"(0, -1, 0, $P10)
+    rx442_cur."!cursor_pos"(rx442_pos)
+    $P10 = rx442_cur."package_declarator"()
+    unless $P10, rx442_fail
+    rx442_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_declarator")
-    rx429_pos = $P10."pos"()
+    rx442_pos = $P10."pos"()
   # rx pass
-    rx429_cur."!cursor_pass"(rx429_pos, "term:sym<package_declarator>")
-    rx429_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx429_pos)
-    .return (rx429_cur)
-  rx429_fail:
+    rx442_cur."!cursor_pass"(rx442_pos, "term:sym<package_declarator>")
+    rx442_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx442_pos)
+    .return (rx442_cur)
+  rx442_fail:
 .annotate 'line', 4
-    (rx429_rep, rx429_pos, $I10, $P10) = rx429_cur."!mark_fail"(0)
-    lt rx429_pos, -1, rx429_done
-    eq rx429_pos, -1, rx429_fail
+    (rx442_rep, rx442_pos, $I10, $P10) = rx442_cur."!mark_fail"(0)
+    lt rx442_pos, -1, rx442_done
+    eq rx442_pos, -1, rx442_fail
     jump $I10
-  rx429_done:
-    rx429_cur."!cursor_fail"()
-    rx429_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
-    .return (rx429_cur)
+  rx442_done:
+    rx442_cur."!cursor_fail"()
+    rx442_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
+    .return (rx442_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1274022894.43745") :method
+.sub "!PREFIX__term:sym<package_declarator>"  :subid("104_1275811487.95429") :method
 .annotate 'line', 4
-    $P431 = self."!PREFIX__!subrule"("package_declarator", "")
-    new $P432, "ResizablePMCArray"
-    push $P432, $P431
-    .return ($P432)
+    $P444 = self."!PREFIX__!subrule"("package_declarator", "")
+    new $P445, "ResizablePMCArray"
+    push $P445, $P444
+    .return ($P445)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<scope_declarator>"  :subid("103_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<scope_declarator>"  :subid("105_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx435_tgt
-    .local int rx435_pos
-    .local int rx435_off
-    .local int rx435_eos
-    .local int rx435_rep
-    .local pmc rx435_cur
-    (rx435_cur, rx435_pos, rx435_tgt) = self."!cursor_start"()
-    rx435_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
-    .lex unicode:"$\x{a2}", rx435_cur
+    .local string rx448_tgt
+    .local int rx448_pos
+    .local int rx448_off
+    .local int rx448_eos
+    .local int rx448_rep
+    .local pmc rx448_cur
+    (rx448_cur, rx448_pos, rx448_tgt) = self."!cursor_start"()
+    rx448_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
+    .lex unicode:"$\x{a2}", rx448_cur
     .local pmc match
     .lex "$/", match
-    length rx435_eos, rx435_tgt
-    set rx435_off, 0
-    lt rx435_pos, 2, rx435_start
-    sub rx435_off, rx435_pos, 1
-    substr rx435_tgt, rx435_tgt, rx435_off
-  rx435_start:
+    length rx448_eos, rx448_tgt
+    gt rx448_pos, rx448_eos, rx448_done
+    set rx448_off, 0
+    lt rx448_pos, 2, rx448_start
+    sub rx448_off, rx448_pos, 1
+    substr rx448_tgt, rx448_tgt, rx448_off
+  rx448_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan439_done
-    goto rxscan439_scan
-  rxscan439_loop:
-    ($P10) = rx435_cur."from"()
+    ne $I10, -1, rxscan452_done
+    goto rxscan452_scan
+  rxscan452_loop:
+    ($P10) = rx448_cur."from"()
     inc $P10
-    set rx435_pos, $P10
-    ge rx435_pos, rx435_eos, rxscan439_done
-  rxscan439_scan:
-    set_addr $I10, rxscan439_loop
-    rx435_cur."!mark_push"(0, rx435_pos, $I10)
-  rxscan439_done:
-.annotate 'line', 225
+    set rx448_pos, $P10
+    ge rx448_pos, rx448_eos, rxscan452_done
+  rxscan452_scan:
+    set_addr $I10, rxscan452_loop
+    rx448_cur."!mark_push"(0, rx448_pos, $I10)
+  rxscan452_done:
+.annotate 'line', 228
   # rx subrule "scope_declarator" subtype=capture negate=
-    rx435_cur."!cursor_pos"(rx435_pos)
-    $P10 = rx435_cur."scope_declarator"()
-    unless $P10, rx435_fail
-    rx435_cur."!mark_push"(0, -1, 0, $P10)
+    rx448_cur."!cursor_pos"(rx448_pos)
+    $P10 = rx448_cur."scope_declarator"()
+    unless $P10, rx448_fail
+    rx448_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scope_declarator")
-    rx435_pos = $P10."pos"()
+    rx448_pos = $P10."pos"()
   # rx pass
-    rx435_cur."!cursor_pass"(rx435_pos, "term:sym<scope_declarator>")
-    rx435_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx435_pos)
-    .return (rx435_cur)
-  rx435_fail:
+    rx448_cur."!cursor_pass"(rx448_pos, "term:sym<scope_declarator>")
+    rx448_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx448_pos)
+    .return (rx448_cur)
+  rx448_fail:
 .annotate 'line', 4
-    (rx435_rep, rx435_pos, $I10, $P10) = rx435_cur."!mark_fail"(0)
-    lt rx435_pos, -1, rx435_done
-    eq rx435_pos, -1, rx435_fail
+    (rx448_rep, rx448_pos, $I10, $P10) = rx448_cur."!mark_fail"(0)
+    lt rx448_pos, -1, rx448_done
+    eq rx448_pos, -1, rx448_fail
     jump $I10
-  rx435_done:
-    rx435_cur."!cursor_fail"()
-    rx435_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
-    .return (rx435_cur)
+  rx448_done:
+    rx448_cur."!cursor_fail"()
+    rx448_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
+    .return (rx448_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1274022894.43745") :method
+.sub "!PREFIX__term:sym<scope_declarator>"  :subid("106_1275811487.95429") :method
 .annotate 'line', 4
-    $P437 = self."!PREFIX__!subrule"("scope_declarator", "")
-    new $P438, "ResizablePMCArray"
-    push $P438, $P437
-    .return ($P438)
+    $P450 = self."!PREFIX__!subrule"("scope_declarator", "")
+    new $P451, "ResizablePMCArray"
+    push $P451, $P450
+    .return ($P451)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<routine_declarator>"  :subid("105_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<routine_declarator>"  :subid("107_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx441_tgt
-    .local int rx441_pos
-    .local int rx441_off
-    .local int rx441_eos
-    .local int rx441_rep
-    .local pmc rx441_cur
-    (rx441_cur, rx441_pos, rx441_tgt) = self."!cursor_start"()
-    rx441_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
-    .lex unicode:"$\x{a2}", rx441_cur
+    .local string rx454_tgt
+    .local int rx454_pos
+    .local int rx454_off
+    .local int rx454_eos
+    .local int rx454_rep
+    .local pmc rx454_cur
+    (rx454_cur, rx454_pos, rx454_tgt) = self."!cursor_start"()
+    rx454_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
+    .lex unicode:"$\x{a2}", rx454_cur
     .local pmc match
     .lex "$/", match
-    length rx441_eos, rx441_tgt
-    set rx441_off, 0
-    lt rx441_pos, 2, rx441_start
-    sub rx441_off, rx441_pos, 1
-    substr rx441_tgt, rx441_tgt, rx441_off
-  rx441_start:
+    length rx454_eos, rx454_tgt
+    gt rx454_pos, rx454_eos, rx454_done
+    set rx454_off, 0
+    lt rx454_pos, 2, rx454_start
+    sub rx454_off, rx454_pos, 1
+    substr rx454_tgt, rx454_tgt, rx454_off
+  rx454_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan445_done
-    goto rxscan445_scan
-  rxscan445_loop:
-    ($P10) = rx441_cur."from"()
+    ne $I10, -1, rxscan458_done
+    goto rxscan458_scan
+  rxscan458_loop:
+    ($P10) = rx454_cur."from"()
     inc $P10
-    set rx441_pos, $P10
-    ge rx441_pos, rx441_eos, rxscan445_done
-  rxscan445_scan:
-    set_addr $I10, rxscan445_loop
-    rx441_cur."!mark_push"(0, rx441_pos, $I10)
-  rxscan445_done:
-.annotate 'line', 226
+    set rx454_pos, $P10
+    ge rx454_pos, rx454_eos, rxscan458_done
+  rxscan458_scan:
+    set_addr $I10, rxscan458_loop
+    rx454_cur."!mark_push"(0, rx454_pos, $I10)
+  rxscan458_done:
+.annotate 'line', 229
   # rx subrule "routine_declarator" subtype=capture negate=
-    rx441_cur."!cursor_pos"(rx441_pos)
-    $P10 = rx441_cur."routine_declarator"()
-    unless $P10, rx441_fail
-    rx441_cur."!mark_push"(0, -1, 0, $P10)
+    rx454_cur."!cursor_pos"(rx454_pos)
+    $P10 = rx454_cur."routine_declarator"()
+    unless $P10, rx454_fail
+    rx454_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_declarator")
-    rx441_pos = $P10."pos"()
+    rx454_pos = $P10."pos"()
   # rx pass
-    rx441_cur."!cursor_pass"(rx441_pos, "term:sym<routine_declarator>")
-    rx441_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx441_pos)
-    .return (rx441_cur)
-  rx441_fail:
+    rx454_cur."!cursor_pass"(rx454_pos, "term:sym<routine_declarator>")
+    rx454_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx454_pos)
+    .return (rx454_cur)
+  rx454_fail:
 .annotate 'line', 4
-    (rx441_rep, rx441_pos, $I10, $P10) = rx441_cur."!mark_fail"(0)
-    lt rx441_pos, -1, rx441_done
-    eq rx441_pos, -1, rx441_fail
+    (rx454_rep, rx454_pos, $I10, $P10) = rx454_cur."!mark_fail"(0)
+    lt rx454_pos, -1, rx454_done
+    eq rx454_pos, -1, rx454_fail
     jump $I10
-  rx441_done:
-    rx441_cur."!cursor_fail"()
-    rx441_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
-    .return (rx441_cur)
+  rx454_done:
+    rx454_cur."!cursor_fail"()
+    rx454_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
+    .return (rx454_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1274022894.43745") :method
+.sub "!PREFIX__term:sym<routine_declarator>"  :subid("108_1275811487.95429") :method
 .annotate 'line', 4
-    $P443 = self."!PREFIX__!subrule"("routine_declarator", "")
-    new $P444, "ResizablePMCArray"
-    push $P444, $P443
-    .return ($P444)
+    $P456 = self."!PREFIX__!subrule"("routine_declarator", "")
+    new $P457, "ResizablePMCArray"
+    push $P457, $P456
+    .return ($P457)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<regex_declarator>"  :subid("107_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<multi_declarator>"  :subid("109_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx447_tgt
-    .local int rx447_pos
-    .local int rx447_off
-    .local int rx447_eos
-    .local int rx447_rep
-    .local pmc rx447_cur
-    (rx447_cur, rx447_pos, rx447_tgt) = self."!cursor_start"()
-    rx447_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
-    .lex unicode:"$\x{a2}", rx447_cur
+    .const 'Sub' $P465 = "111_1275811487.95429" 
+    capture_lex $P465
+    .local string rx460_tgt
+    .local int rx460_pos
+    .local int rx460_off
+    .local int rx460_eos
+    .local int rx460_rep
+    .local pmc rx460_cur
+    (rx460_cur, rx460_pos, rx460_tgt) = self."!cursor_start"()
+    rx460_cur."!cursor_debug"("START ", "term:sym<multi_declarator>")
+    .lex unicode:"$\x{a2}", rx460_cur
     .local pmc match
     .lex "$/", match
-    length rx447_eos, rx447_tgt
-    set rx447_off, 0
-    lt rx447_pos, 2, rx447_start
-    sub rx447_off, rx447_pos, 1
-    substr rx447_tgt, rx447_tgt, rx447_off
-  rx447_start:
+    length rx460_eos, rx460_tgt
+    gt rx460_pos, rx460_eos, rx460_done
+    set rx460_off, 0
+    lt rx460_pos, 2, rx460_start
+    sub rx460_off, rx460_pos, 1
+    substr rx460_tgt, rx460_tgt, rx460_off
+  rx460_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan451_done
-    goto rxscan451_scan
-  rxscan451_loop:
-    ($P10) = rx447_cur."from"()
+    ne $I10, -1, rxscan463_done
+    goto rxscan463_scan
+  rxscan463_loop:
+    ($P10) = rx460_cur."from"()
     inc $P10
-    set rx447_pos, $P10
-    ge rx447_pos, rx447_eos, rxscan451_done
-  rxscan451_scan:
-    set_addr $I10, rxscan451_loop
-    rx447_cur."!mark_push"(0, rx447_pos, $I10)
-  rxscan451_done:
-.annotate 'line', 227
+    set rx460_pos, $P10
+    ge rx460_pos, rx460_eos, rxscan463_done
+  rxscan463_scan:
+    set_addr $I10, rxscan463_loop
+    rx460_cur."!mark_push"(0, rx460_pos, $I10)
+  rxscan463_done:
+.annotate 'line', 230
+  # rx subrule "before" subtype=zerowidth negate=
+    rx460_cur."!cursor_pos"(rx460_pos)
+    .const 'Sub' $P465 = "111_1275811487.95429" 
+    capture_lex $P465
+    $P10 = rx460_cur."before"($P465)
+    unless $P10, rx460_fail
+  # rx subrule "multi_declarator" subtype=capture negate=
+    rx460_cur."!cursor_pos"(rx460_pos)
+    $P10 = rx460_cur."multi_declarator"()
+    unless $P10, rx460_fail
+    rx460_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("multi_declarator")
+    rx460_pos = $P10."pos"()
+  # rx pass
+    rx460_cur."!cursor_pass"(rx460_pos, "term:sym<multi_declarator>")
+    rx460_cur."!cursor_debug"("PASS  ", "term:sym<multi_declarator>", " at pos=", rx460_pos)
+    .return (rx460_cur)
+  rx460_fail:
+.annotate 'line', 4
+    (rx460_rep, rx460_pos, $I10, $P10) = rx460_cur."!mark_fail"(0)
+    lt rx460_pos, -1, rx460_done
+    eq rx460_pos, -1, rx460_fail
+    jump $I10
+  rx460_done:
+    rx460_cur."!cursor_fail"()
+    rx460_cur."!cursor_debug"("FAIL  ", "term:sym<multi_declarator>")
+    .return (rx460_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__term:sym<multi_declarator>"  :subid("110_1275811487.95429") :method
+.annotate 'line', 4
+    new $P462, "ResizablePMCArray"
+    push $P462, ""
+    .return ($P462)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "_block464"  :anon :subid("111_1275811487.95429") :method :outer("109_1275811487.95429")
+.annotate 'line', 230
+    .local string rx466_tgt
+    .local int rx466_pos
+    .local int rx466_off
+    .local int rx466_eos
+    .local int rx466_rep
+    .local pmc rx466_cur
+    (rx466_cur, rx466_pos, rx466_tgt) = self."!cursor_start"()
+    rx466_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx466_cur
+    .local pmc match
+    .lex "$/", match
+    length rx466_eos, rx466_tgt
+    gt rx466_pos, rx466_eos, rx466_done
+    set rx466_off, 0
+    lt rx466_pos, 2, rx466_start
+    sub rx466_off, rx466_pos, 1
+    substr rx466_tgt, rx466_tgt, rx466_off
+  rx466_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan467_done
+    goto rxscan467_scan
+  rxscan467_loop:
+    ($P10) = rx466_cur."from"()
+    inc $P10
+    set rx466_pos, $P10
+    ge rx466_pos, rx466_eos, rxscan467_done
+  rxscan467_scan:
+    set_addr $I10, rxscan467_loop
+    rx466_cur."!mark_push"(0, rx466_pos, $I10)
+  rxscan467_done:
+  alt468_0:
+    set_addr $I10, alt468_1
+    rx466_cur."!mark_push"(0, rx466_pos, $I10)
+  # rx literal  "multi"
+    add $I11, rx466_pos, 5
+    gt $I11, rx466_eos, rx466_fail
+    sub $I11, rx466_pos, rx466_off
+    substr $S10, rx466_tgt, $I11, 5
+    ne $S10, "multi", rx466_fail
+    add rx466_pos, 5
+    goto alt468_end
+  alt468_1:
+    set_addr $I10, alt468_2
+    rx466_cur."!mark_push"(0, rx466_pos, $I10)
+  # rx literal  "proto"
+    add $I11, rx466_pos, 5
+    gt $I11, rx466_eos, rx466_fail
+    sub $I11, rx466_pos, rx466_off
+    substr $S10, rx466_tgt, $I11, 5
+    ne $S10, "proto", rx466_fail
+    add rx466_pos, 5
+    goto alt468_end
+  alt468_2:
+  # rx literal  "only"
+    add $I11, rx466_pos, 4
+    gt $I11, rx466_eos, rx466_fail
+    sub $I11, rx466_pos, rx466_off
+    substr $S10, rx466_tgt, $I11, 4
+    ne $S10, "only", rx466_fail
+    add rx466_pos, 4
+  alt468_end:
+  # rx pass
+    rx466_cur."!cursor_pass"(rx466_pos, "")
+    rx466_cur."!cursor_debug"("PASS  ", "", " at pos=", rx466_pos)
+    .return (rx466_cur)
+  rx466_fail:
+    (rx466_rep, rx466_pos, $I10, $P10) = rx466_cur."!mark_fail"(0)
+    lt rx466_pos, -1, rx466_done
+    eq rx466_pos, -1, rx466_fail
+    jump $I10
+  rx466_done:
+    rx466_cur."!cursor_fail"()
+    rx466_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx466_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "term:sym<regex_declarator>"  :subid("112_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx470_tgt
+    .local int rx470_pos
+    .local int rx470_off
+    .local int rx470_eos
+    .local int rx470_rep
+    .local pmc rx470_cur
+    (rx470_cur, rx470_pos, rx470_tgt) = self."!cursor_start"()
+    rx470_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
+    .lex unicode:"$\x{a2}", rx470_cur
+    .local pmc match
+    .lex "$/", match
+    length rx470_eos, rx470_tgt
+    gt rx470_pos, rx470_eos, rx470_done
+    set rx470_off, 0
+    lt rx470_pos, 2, rx470_start
+    sub rx470_off, rx470_pos, 1
+    substr rx470_tgt, rx470_tgt, rx470_off
+  rx470_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan474_done
+    goto rxscan474_scan
+  rxscan474_loop:
+    ($P10) = rx470_cur."from"()
+    inc $P10
+    set rx470_pos, $P10
+    ge rx470_pos, rx470_eos, rxscan474_done
+  rxscan474_scan:
+    set_addr $I10, rxscan474_loop
+    rx470_cur."!mark_push"(0, rx470_pos, $I10)
+  rxscan474_done:
+.annotate 'line', 231
   # rx subrule "regex_declarator" subtype=capture negate=
-    rx447_cur."!cursor_pos"(rx447_pos)
-    $P10 = rx447_cur."regex_declarator"()
-    unless $P10, rx447_fail
-    rx447_cur."!mark_push"(0, -1, 0, $P10)
+    rx470_cur."!cursor_pos"(rx470_pos)
+    $P10 = rx470_cur."regex_declarator"()
+    unless $P10, rx470_fail
+    rx470_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("regex_declarator")
-    rx447_pos = $P10."pos"()
+    rx470_pos = $P10."pos"()
   # rx pass
-    rx447_cur."!cursor_pass"(rx447_pos, "term:sym<regex_declarator>")
-    rx447_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx447_pos)
-    .return (rx447_cur)
-  rx447_fail:
+    rx470_cur."!cursor_pass"(rx470_pos, "term:sym<regex_declarator>")
+    rx470_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx470_pos)
+    .return (rx470_cur)
+  rx470_fail:
 .annotate 'line', 4
-    (rx447_rep, rx447_pos, $I10, $P10) = rx447_cur."!mark_fail"(0)
-    lt rx447_pos, -1, rx447_done
-    eq rx447_pos, -1, rx447_fail
+    (rx470_rep, rx470_pos, $I10, $P10) = rx470_cur."!mark_fail"(0)
+    lt rx470_pos, -1, rx470_done
+    eq rx470_pos, -1, rx470_fail
     jump $I10
-  rx447_done:
-    rx447_cur."!cursor_fail"()
-    rx447_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
-    .return (rx447_cur)
+  rx470_done:
+    rx470_cur."!cursor_fail"()
+    rx470_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
+    .return (rx470_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1274022894.43745") :method
+.sub "!PREFIX__term:sym<regex_declarator>"  :subid("113_1275811487.95429") :method
 .annotate 'line', 4
-    $P449 = self."!PREFIX__!subrule"("regex_declarator", "")
-    new $P450, "ResizablePMCArray"
-    push $P450, $P449
-    .return ($P450)
+    $P472 = self."!PREFIX__!subrule"("regex_declarator", "")
+    new $P473, "ResizablePMCArray"
+    push $P473, $P472
+    .return ($P473)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<statement_prefix>"  :subid("109_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<statement_prefix>"  :subid("114_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx453_tgt
-    .local int rx453_pos
-    .local int rx453_off
-    .local int rx453_eos
-    .local int rx453_rep
-    .local pmc rx453_cur
-    (rx453_cur, rx453_pos, rx453_tgt) = self."!cursor_start"()
-    rx453_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
-    .lex unicode:"$\x{a2}", rx453_cur
+    .local string rx476_tgt
+    .local int rx476_pos
+    .local int rx476_off
+    .local int rx476_eos
+    .local int rx476_rep
+    .local pmc rx476_cur
+    (rx476_cur, rx476_pos, rx476_tgt) = self."!cursor_start"()
+    rx476_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
+    .lex unicode:"$\x{a2}", rx476_cur
     .local pmc match
     .lex "$/", match
-    length rx453_eos, rx453_tgt
-    set rx453_off, 0
-    lt rx453_pos, 2, rx453_start
-    sub rx453_off, rx453_pos, 1
-    substr rx453_tgt, rx453_tgt, rx453_off
-  rx453_start:
+    length rx476_eos, rx476_tgt
+    gt rx476_pos, rx476_eos, rx476_done
+    set rx476_off, 0
+    lt rx476_pos, 2, rx476_start
+    sub rx476_off, rx476_pos, 1
+    substr rx476_tgt, rx476_tgt, rx476_off
+  rx476_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan457_done
-    goto rxscan457_scan
-  rxscan457_loop:
-    ($P10) = rx453_cur."from"()
+    ne $I10, -1, rxscan480_done
+    goto rxscan480_scan
+  rxscan480_loop:
+    ($P10) = rx476_cur."from"()
     inc $P10
-    set rx453_pos, $P10
-    ge rx453_pos, rx453_eos, rxscan457_done
-  rxscan457_scan:
-    set_addr $I10, rxscan457_loop
-    rx453_cur."!mark_push"(0, rx453_pos, $I10)
-  rxscan457_done:
-.annotate 'line', 228
+    set rx476_pos, $P10
+    ge rx476_pos, rx476_eos, rxscan480_done
+  rxscan480_scan:
+    set_addr $I10, rxscan480_loop
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+  rxscan480_done:
+.annotate 'line', 232
   # rx subrule "statement_prefix" subtype=capture negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."statement_prefix"()
-    unless $P10, rx453_fail
-    rx453_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."statement_prefix"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_prefix")
-    rx453_pos = $P10."pos"()
+    rx476_pos = $P10."pos"()
   # rx pass
-    rx453_cur."!cursor_pass"(rx453_pos, "term:sym<statement_prefix>")
-    rx453_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx453_pos)
-    .return (rx453_cur)
-  rx453_fail:
+    rx476_cur."!cursor_pass"(rx476_pos, "term:sym<statement_prefix>")
+    rx476_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx476_pos)
+    .return (rx476_cur)
+  rx476_fail:
 .annotate 'line', 4
-    (rx453_rep, rx453_pos, $I10, $P10) = rx453_cur."!mark_fail"(0)
-    lt rx453_pos, -1, rx453_done
-    eq rx453_pos, -1, rx453_fail
+    (rx476_rep, rx476_pos, $I10, $P10) = rx476_cur."!mark_fail"(0)
+    lt rx476_pos, -1, rx476_done
+    eq rx476_pos, -1, rx476_fail
     jump $I10
-  rx453_done:
-    rx453_cur."!cursor_fail"()
-    rx453_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
-    .return (rx453_cur)
+  rx476_done:
+    rx476_cur."!cursor_fail"()
+    rx476_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
+    .return (rx476_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1274022894.43745") :method
+.sub "!PREFIX__term:sym<statement_prefix>"  :subid("115_1275811487.95429") :method
 .annotate 'line', 4
-    $P455 = self."!PREFIX__!subrule"("statement_prefix", "")
-    new $P456, "ResizablePMCArray"
-    push $P456, $P455
-    .return ($P456)
+    $P478 = self."!PREFIX__!subrule"("statement_prefix", "")
+    new $P479, "ResizablePMCArray"
+    push $P479, $P478
+    .return ($P479)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<lambda>"  :subid("111_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<lambda>"  :subid("116_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx459_tgt
-    .local int rx459_pos
-    .local int rx459_off
-    .local int rx459_eos
-    .local int rx459_rep
-    .local pmc rx459_cur
-    (rx459_cur, rx459_pos, rx459_tgt) = self."!cursor_start"()
-    rx459_cur."!cursor_debug"("START ", "term:sym<lambda>")
-    .lex unicode:"$\x{a2}", rx459_cur
+    .local string rx482_tgt
+    .local int rx482_pos
+    .local int rx482_off
+    .local int rx482_eos
+    .local int rx482_rep
+    .local pmc rx482_cur
+    (rx482_cur, rx482_pos, rx482_tgt) = self."!cursor_start"()
+    rx482_cur."!cursor_debug"("START ", "term:sym<lambda>")
+    .lex unicode:"$\x{a2}", rx482_cur
     .local pmc match
     .lex "$/", match
-    length rx459_eos, rx459_tgt
-    set rx459_off, 0
-    lt rx459_pos, 2, rx459_start
-    sub rx459_off, rx459_pos, 1
-    substr rx459_tgt, rx459_tgt, rx459_off
-  rx459_start:
+    length rx482_eos, rx482_tgt
+    gt rx482_pos, rx482_eos, rx482_done
+    set rx482_off, 0
+    lt rx482_pos, 2, rx482_start
+    sub rx482_off, rx482_pos, 1
+    substr rx482_tgt, rx482_tgt, rx482_off
+  rx482_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan462_done
-    goto rxscan462_scan
-  rxscan462_loop:
-    ($P10) = rx459_cur."from"()
+    ne $I10, -1, rxscan485_done
+    goto rxscan485_scan
+  rxscan485_loop:
+    ($P10) = rx482_cur."from"()
     inc $P10
-    set rx459_pos, $P10
-    ge rx459_pos, rx459_eos, rxscan462_done
-  rxscan462_scan:
-    set_addr $I10, rxscan462_loop
-    rx459_cur."!mark_push"(0, rx459_pos, $I10)
-  rxscan462_done:
-.annotate 'line', 229
+    set rx482_pos, $P10
+    ge rx482_pos, rx482_eos, rxscan485_done
+  rxscan485_scan:
+    set_addr $I10, rxscan485_loop
+    rx482_cur."!mark_push"(0, rx482_pos, $I10)
+  rxscan485_done:
+.annotate 'line', 233
   # rx subrule "lambda" subtype=zerowidth negate=
-    rx459_cur."!cursor_pos"(rx459_pos)
-    $P10 = rx459_cur."lambda"()
-    unless $P10, rx459_fail
+    rx482_cur."!cursor_pos"(rx482_pos)
+    $P10 = rx482_cur."lambda"()
+    unless $P10, rx482_fail
   # rx subrule "pblock" subtype=capture negate=
-    rx459_cur."!cursor_pos"(rx459_pos)
-    $P10 = rx459_cur."pblock"()
-    unless $P10, rx459_fail
-    rx459_cur."!mark_push"(0, -1, 0, $P10)
+    rx482_cur."!cursor_pos"(rx482_pos)
+    $P10 = rx482_cur."pblock"()
+    unless $P10, rx482_fail
+    rx482_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx459_pos = $P10."pos"()
+    rx482_pos = $P10."pos"()
   # rx pass
-    rx459_cur."!cursor_pass"(rx459_pos, "term:sym<lambda>")
-    rx459_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx459_pos)
-    .return (rx459_cur)
-  rx459_fail:
+    rx482_cur."!cursor_pass"(rx482_pos, "term:sym<lambda>")
+    rx482_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx482_pos)
+    .return (rx482_cur)
+  rx482_fail:
 .annotate 'line', 4
-    (rx459_rep, rx459_pos, $I10, $P10) = rx459_cur."!mark_fail"(0)
-    lt rx459_pos, -1, rx459_done
-    eq rx459_pos, -1, rx459_fail
+    (rx482_rep, rx482_pos, $I10, $P10) = rx482_cur."!mark_fail"(0)
+    lt rx482_pos, -1, rx482_done
+    eq rx482_pos, -1, rx482_fail
     jump $I10
-  rx459_done:
-    rx459_cur."!cursor_fail"()
-    rx459_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
-    .return (rx459_cur)
+  rx482_done:
+    rx482_cur."!cursor_fail"()
+    rx482_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
+    .return (rx482_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<lambda>"  :subid("112_1274022894.43745") :method
+.sub "!PREFIX__term:sym<lambda>"  :subid("117_1275811487.95429") :method
 .annotate 'line', 4
-    new $P461, "ResizablePMCArray"
-    push $P461, ""
-    .return ($P461)
+    new $P484, "ResizablePMCArray"
+    push $P484, ""
+    .return ($P484)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "fatarrow"  :subid("113_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "fatarrow"  :subid("118_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx464_tgt
-    .local int rx464_pos
-    .local int rx464_off
-    .local int rx464_eos
-    .local int rx464_rep
-    .local pmc rx464_cur
-    (rx464_cur, rx464_pos, rx464_tgt) = self."!cursor_start"()
-    rx464_cur."!cursor_debug"("START ", "fatarrow")
-    .lex unicode:"$\x{a2}", rx464_cur
+    .local string rx487_tgt
+    .local int rx487_pos
+    .local int rx487_off
+    .local int rx487_eos
+    .local int rx487_rep
+    .local pmc rx487_cur
+    (rx487_cur, rx487_pos, rx487_tgt) = self."!cursor_start"()
+    rx487_cur."!cursor_debug"("START ", "fatarrow")
+    .lex unicode:"$\x{a2}", rx487_cur
     .local pmc match
     .lex "$/", match
-    length rx464_eos, rx464_tgt
-    set rx464_off, 0
-    lt rx464_pos, 2, rx464_start
-    sub rx464_off, rx464_pos, 1
-    substr rx464_tgt, rx464_tgt, rx464_off
-  rx464_start:
+    length rx487_eos, rx487_tgt
+    gt rx487_pos, rx487_eos, rx487_done
+    set rx487_off, 0
+    lt rx487_pos, 2, rx487_start
+    sub rx487_off, rx487_pos, 1
+    substr rx487_tgt, rx487_tgt, rx487_off
+  rx487_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan468_done
-    goto rxscan468_scan
-  rxscan468_loop:
-    ($P10) = rx464_cur."from"()
+    ne $I10, -1, rxscan491_done
+    goto rxscan491_scan
+  rxscan491_loop:
+    ($P10) = rx487_cur."from"()
     inc $P10
-    set rx464_pos, $P10
-    ge rx464_pos, rx464_eos, rxscan468_done
-  rxscan468_scan:
-    set_addr $I10, rxscan468_loop
-    rx464_cur."!mark_push"(0, rx464_pos, $I10)
-  rxscan468_done:
-.annotate 'line', 232
+    set rx487_pos, $P10
+    ge rx487_pos, rx487_eos, rxscan491_done
+  rxscan491_scan:
+    set_addr $I10, rxscan491_loop
+    rx487_cur."!mark_push"(0, rx487_pos, $I10)
+  rxscan491_done:
+.annotate 'line', 236
   # rx subrule "identifier" subtype=capture negate=
-    rx464_cur."!cursor_pos"(rx464_pos)
-    $P10 = rx464_cur."identifier"()
-    unless $P10, rx464_fail
-    rx464_cur."!mark_push"(0, -1, 0, $P10)
+    rx487_cur."!cursor_pos"(rx487_pos)
+    $P10 = rx487_cur."identifier"()
+    unless $P10, rx487_fail
+    rx487_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("key")
-    rx464_pos = $P10."pos"()
-  # rx rxquantr469 ** 0..*
-    set_addr $I470, rxquantr469_done
-    rx464_cur."!mark_push"(0, rx464_pos, $I470)
-  rxquantr469_loop:
+    rx487_pos = $P10."pos"()
+  # rx rxquantr492 ** 0..*
+    set_addr $I493, rxquantr492_done
+    rx487_cur."!mark_push"(0, rx487_pos, $I493)
+  rxquantr492_loop:
   # rx enumcharlist negate=0 
-    ge rx464_pos, rx464_eos, rx464_fail
-    sub $I10, rx464_pos, rx464_off
-    substr $S10, rx464_tgt, $I10, 1
+    ge rx487_pos, rx487_eos, rx487_fail
+    sub $I10, rx487_pos, rx487_off
+    substr $S10, rx487_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx464_fail
-    inc rx464_pos
-    (rx464_rep) = rx464_cur."!mark_commit"($I470)
-    rx464_cur."!mark_push"(rx464_rep, rx464_pos, $I470)
-    goto rxquantr469_loop
-  rxquantr469_done:
+    lt $I11, 0, rx487_fail
+    inc rx487_pos
+    (rx487_rep) = rx487_cur."!mark_commit"($I493)
+    rx487_cur."!mark_push"(rx487_rep, rx487_pos, $I493)
+    goto rxquantr492_loop
+  rxquantr492_done:
   # rx literal  "=>"
-    add $I11, rx464_pos, 2
-    gt $I11, rx464_eos, rx464_fail
-    sub $I11, rx464_pos, rx464_off
-    substr $S10, rx464_tgt, $I11, 2
-    ne $S10, "=>", rx464_fail
-    add rx464_pos, 2
-  # rx subrule "ws" subtype=method negate=
-    rx464_cur."!cursor_pos"(rx464_pos)
-    $P10 = rx464_cur."ws"()
-    unless $P10, rx464_fail
-    rx464_pos = $P10."pos"()
+    add $I11, rx487_pos, 2
+    gt $I11, rx487_eos, rx487_fail
+    sub $I11, rx487_pos, rx487_off
+    substr $S10, rx487_tgt, $I11, 2
+    ne $S10, "=>", rx487_fail
+    add rx487_pos, 2
+  # rx subrule "ws" subtype=method negate=
+    rx487_cur."!cursor_pos"(rx487_pos)
+    $P10 = rx487_cur."ws"()
+    unless $P10, rx487_fail
+    rx487_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx464_cur."!cursor_pos"(rx464_pos)
-    $P10 = rx464_cur."EXPR"("i=")
-    unless $P10, rx464_fail
-    rx464_cur."!mark_push"(0, -1, 0, $P10)
+    rx487_cur."!cursor_pos"(rx487_pos)
+    $P10 = rx487_cur."EXPR"("i=")
+    unless $P10, rx487_fail
+    rx487_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("val")
-    rx464_pos = $P10."pos"()
-.annotate 'line', 231
+    rx487_pos = $P10."pos"()
+.annotate 'line', 235
   # rx pass
-    rx464_cur."!cursor_pass"(rx464_pos, "fatarrow")
-    rx464_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx464_pos)
-    .return (rx464_cur)
-  rx464_fail:
+    rx487_cur."!cursor_pass"(rx487_pos, "fatarrow")
+    rx487_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx487_pos)
+    .return (rx487_cur)
+  rx487_fail:
 .annotate 'line', 4
-    (rx464_rep, rx464_pos, $I10, $P10) = rx464_cur."!mark_fail"(0)
-    lt rx464_pos, -1, rx464_done
-    eq rx464_pos, -1, rx464_fail
+    (rx487_rep, rx487_pos, $I10, $P10) = rx487_cur."!mark_fail"(0)
+    lt rx487_pos, -1, rx487_done
+    eq rx487_pos, -1, rx487_fail
     jump $I10
-  rx464_done:
-    rx464_cur."!cursor_fail"()
-    rx464_cur."!cursor_debug"("FAIL  ", "fatarrow")
-    .return (rx464_cur)
+  rx487_done:
+    rx487_cur."!cursor_fail"()
+    rx487_cur."!cursor_debug"("FAIL  ", "fatarrow")
+    .return (rx487_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__fatarrow"  :subid("114_1274022894.43745") :method
+.sub "!PREFIX__fatarrow"  :subid("119_1275811487.95429") :method
 .annotate 'line', 4
-    $P466 = self."!PREFIX__!subrule"("key", "")
-    new $P467, "ResizablePMCArray"
-    push $P467, $P466
-    .return ($P467)
+    $P489 = self."!PREFIX__!subrule"("identifier", "")
+    new $P490, "ResizablePMCArray"
+    push $P490, $P489
+    .return ($P490)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "colonpair"  :subid("115_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "colonpair"  :subid("120_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx472_tgt
-    .local int rx472_pos
-    .local int rx472_off
-    .local int rx472_eos
-    .local int rx472_rep
-    .local pmc rx472_cur
-    (rx472_cur, rx472_pos, rx472_tgt) = self."!cursor_start"()
-    rx472_cur."!cursor_debug"("START ", "colonpair")
-    rx472_cur."!cursor_caparray"("circumfix")
-    .lex unicode:"$\x{a2}", rx472_cur
+    .local string rx495_tgt
+    .local int rx495_pos
+    .local int rx495_off
+    .local int rx495_eos
+    .local int rx495_rep
+    .local pmc rx495_cur
+    (rx495_cur, rx495_pos, rx495_tgt) = self."!cursor_start"()
+    rx495_cur."!cursor_debug"("START ", "colonpair")
+    rx495_cur."!cursor_caparray"("circumfix")
+    .lex unicode:"$\x{a2}", rx495_cur
     .local pmc match
     .lex "$/", match
-    length rx472_eos, rx472_tgt
-    set rx472_off, 0
-    lt rx472_pos, 2, rx472_start
-    sub rx472_off, rx472_pos, 1
-    substr rx472_tgt, rx472_tgt, rx472_off
-  rx472_start:
+    length rx495_eos, rx495_tgt
+    gt rx495_pos, rx495_eos, rx495_done
+    set rx495_off, 0
+    lt rx495_pos, 2, rx495_start
+    sub rx495_off, rx495_pos, 1
+    substr rx495_tgt, rx495_tgt, rx495_off
+  rx495_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan478_done
-    goto rxscan478_scan
-  rxscan478_loop:
-    ($P10) = rx472_cur."from"()
+    ne $I10, -1, rxscan501_done
+    goto rxscan501_scan
+  rxscan501_loop:
+    ($P10) = rx495_cur."from"()
     inc $P10
-    set rx472_pos, $P10
-    ge rx472_pos, rx472_eos, rxscan478_done
-  rxscan478_scan:
-    set_addr $I10, rxscan478_loop
-    rx472_cur."!mark_push"(0, rx472_pos, $I10)
-  rxscan478_done:
-.annotate 'line', 236
+    set rx495_pos, $P10
+    ge rx495_pos, rx495_eos, rxscan501_done
+  rxscan501_scan:
+    set_addr $I10, rxscan501_loop
+    rx495_cur."!mark_push"(0, rx495_pos, $I10)
+  rxscan501_done:
+.annotate 'line', 240
   # rx literal  ":"
-    add $I11, rx472_pos, 1
-    gt $I11, rx472_eos, rx472_fail
-    sub $I11, rx472_pos, rx472_off
-    substr $S10, rx472_tgt, $I11, 1
-    ne $S10, ":", rx472_fail
-    add rx472_pos, 1
-  alt479_0:
-.annotate 'line', 237
-    set_addr $I10, alt479_1
-    rx472_cur."!mark_push"(0, rx472_pos, $I10)
-.annotate 'line', 238
+    add $I11, rx495_pos, 1
+    gt $I11, rx495_eos, rx495_fail
+    sub $I11, rx495_pos, rx495_off
+    substr $S10, rx495_tgt, $I11, 1
+    ne $S10, ":", rx495_fail
+    add rx495_pos, 1
+  alt502_0:
+.annotate 'line', 241
+    set_addr $I10, alt502_1
+    rx495_cur."!mark_push"(0, rx495_pos, $I10)
+.annotate 'line', 242
   # rx subcapture "not"
-    set_addr $I10, rxcap_480_fail
-    rx472_cur."!mark_push"(0, rx472_pos, $I10)
+    set_addr $I10, rxcap_503_fail
+    rx495_cur."!mark_push"(0, rx495_pos, $I10)
   # rx literal  "!"
-    add $I11, rx472_pos, 1
-    gt $I11, rx472_eos, rx472_fail
-    sub $I11, rx472_pos, rx472_off
-    substr $S10, rx472_tgt, $I11, 1
-    ne $S10, "!", rx472_fail
-    add rx472_pos, 1
-    set_addr $I10, rxcap_480_fail
-    ($I12, $I11) = rx472_cur."!mark_peek"($I10)
-    rx472_cur."!cursor_pos"($I11)
-    ($P10) = rx472_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx472_pos, "")
-    rx472_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx495_pos, 1
+    gt $I11, rx495_eos, rx495_fail
+    sub $I11, rx495_pos, rx495_off
+    substr $S10, rx495_tgt, $I11, 1
+    ne $S10, "!", rx495_fail
+    add rx495_pos, 1
+    set_addr $I10, rxcap_503_fail
+    ($I12, $I11) = rx495_cur."!mark_peek"($I10)
+    rx495_cur."!cursor_pos"($I11)
+    ($P10) = rx495_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx495_pos, "")
+    rx495_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("not")
-    goto rxcap_480_done
-  rxcap_480_fail:
-    goto rx472_fail
-  rxcap_480_done:
+    goto rxcap_503_done
+  rxcap_503_fail:
+    goto rx495_fail
+  rxcap_503_done:
   # rx subrule "identifier" subtype=capture negate=
-    rx472_cur."!cursor_pos"(rx472_pos)
-    $P10 = rx472_cur."identifier"()
-    unless $P10, rx472_fail
-    rx472_cur."!mark_push"(0, -1, 0, $P10)
+    rx495_cur."!cursor_pos"(rx495_pos)
+    $P10 = rx495_cur."identifier"()
+    unless $P10, rx495_fail
+    rx495_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx472_pos = $P10."pos"()
-    goto alt479_end
-  alt479_1:
-    set_addr $I10, alt479_2
-    rx472_cur."!mark_push"(0, rx472_pos, $I10)
-.annotate 'line', 239
+    rx495_pos = $P10."pos"()
+    goto alt502_end
+  alt502_1:
+    set_addr $I10, alt502_2
+    rx495_cur."!mark_push"(0, rx495_pos, $I10)
+.annotate 'line', 243
   # rx subrule "identifier" subtype=capture negate=
-    rx472_cur."!cursor_pos"(rx472_pos)
-    $P10 = rx472_cur."identifier"()
-    unless $P10, rx472_fail
-    rx472_cur."!mark_push"(0, -1, 0, $P10)
+    rx495_cur."!cursor_pos"(rx495_pos)
+    $P10 = rx495_cur."identifier"()
+    unless $P10, rx495_fail
+    rx495_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx472_pos = $P10."pos"()
-  # rx rxquantr481 ** 0..1
-    set_addr $I482, rxquantr481_done
-    rx472_cur."!mark_push"(0, rx472_pos, $I482)
-  rxquantr481_loop:
+    rx495_pos = $P10."pos"()
+  # rx rxquantr504 ** 0..1
+    set_addr $I505, rxquantr504_done
+    rx495_cur."!mark_push"(0, rx495_pos, $I505)
+  rxquantr504_loop:
   # rx subrule "circumfix" subtype=capture negate=
-    rx472_cur."!cursor_pos"(rx472_pos)
-    $P10 = rx472_cur."circumfix"()
-    unless $P10, rx472_fail
-    rx472_cur."!mark_push"(0, -1, 0, $P10)
+    rx495_cur."!cursor_pos"(rx495_pos)
+    $P10 = rx495_cur."circumfix"()
+    unless $P10, rx495_fail
+    rx495_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("circumfix")
-    rx472_pos = $P10."pos"()
-    (rx472_rep) = rx472_cur."!mark_commit"($I482)
-  rxquantr481_done:
-    goto alt479_end
-  alt479_2:
-.annotate 'line', 240
+    rx495_pos = $P10."pos"()
+    (rx495_rep) = rx495_cur."!mark_commit"($I505)
+  rxquantr504_done:
+    goto alt502_end
+  alt502_2:
+.annotate 'line', 244
   # rx subrule "circumfix" subtype=capture negate=
-    rx472_cur."!cursor_pos"(rx472_pos)
-    $P10 = rx472_cur."circumfix"()
-    unless $P10, rx472_fail
-    rx472_cur."!mark_push"(0, -1, 0, $P10)
+    rx495_cur."!cursor_pos"(rx495_pos)
+    $P10 = rx495_cur."circumfix"()
+    unless $P10, rx495_fail
+    rx495_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("circumfix")
-    rx472_pos = $P10."pos"()
-  alt479_end:
-.annotate 'line', 235
+    rx495_pos = $P10."pos"()
+  alt502_end:
+.annotate 'line', 239
   # rx pass
-    rx472_cur."!cursor_pass"(rx472_pos, "colonpair")
-    rx472_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx472_pos)
-    .return (rx472_cur)
-  rx472_fail:
+    rx495_cur."!cursor_pass"(rx495_pos, "colonpair")
+    rx495_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx495_pos)
+    .return (rx495_cur)
+  rx495_fail:
 .annotate 'line', 4
-    (rx472_rep, rx472_pos, $I10, $P10) = rx472_cur."!mark_fail"(0)
-    lt rx472_pos, -1, rx472_done
-    eq rx472_pos, -1, rx472_fail
+    (rx495_rep, rx495_pos, $I10, $P10) = rx495_cur."!mark_fail"(0)
+    lt rx495_pos, -1, rx495_done
+    eq rx495_pos, -1, rx495_fail
     jump $I10
-  rx472_done:
-    rx472_cur."!cursor_fail"()
-    rx472_cur."!cursor_debug"("FAIL  ", "colonpair")
-    .return (rx472_cur)
+  rx495_done:
+    rx495_cur."!cursor_fail"()
+    rx495_cur."!cursor_debug"("FAIL  ", "colonpair")
+    .return (rx495_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__colonpair"  :subid("116_1274022894.43745") :method
+.sub "!PREFIX__colonpair"  :subid("121_1275811487.95429") :method
 .annotate 'line', 4
-    $P474 = self."!PREFIX__!subrule"("circumfix", ":")
-    $P475 = self."!PREFIX__!subrule"("identifier", ":")
-    $P476 = self."!PREFIX__!subrule"("identifier", ":!")
-    new $P477, "ResizablePMCArray"
-    push $P477, $P474
-    push $P477, $P475
-    push $P477, $P476
-    .return ($P477)
+    $P497 = self."!PREFIX__!subrule"("circumfix", ":")
+    $P498 = self."!PREFIX__!subrule"("identifier", ":")
+    $P499 = self."!PREFIX__!subrule"("identifier", ":!")
+    new $P500, "ResizablePMCArray"
+    push $P500, $P497
+    push $P500, $P498
+    push $P500, $P499
+    .return ($P500)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable"  :subid("117_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "variable"  :subid("122_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx484_tgt
-    .local int rx484_pos
-    .local int rx484_off
-    .local int rx484_eos
-    .local int rx484_rep
-    .local pmc rx484_cur
-    (rx484_cur, rx484_pos, rx484_tgt) = self."!cursor_start"()
-    rx484_cur."!cursor_debug"("START ", "variable")
-    rx484_cur."!cursor_caparray"("twigil")
-    .lex unicode:"$\x{a2}", rx484_cur
+    .local string rx507_tgt
+    .local int rx507_pos
+    .local int rx507_off
+    .local int rx507_eos
+    .local int rx507_rep
+    .local pmc rx507_cur
+    (rx507_cur, rx507_pos, rx507_tgt) = self."!cursor_start"()
+    rx507_cur."!cursor_debug"("START ", "variable")
+    rx507_cur."!cursor_caparray"("twigil")
+    .lex unicode:"$\x{a2}", rx507_cur
     .local pmc match
     .lex "$/", match
-    length rx484_eos, rx484_tgt
-    set rx484_off, 0
-    lt rx484_pos, 2, rx484_start
-    sub rx484_off, rx484_pos, 1
-    substr rx484_tgt, rx484_tgt, rx484_off
-  rx484_start:
+    length rx507_eos, rx507_tgt
+    gt rx507_pos, rx507_eos, rx507_done
+    set rx507_off, 0
+    lt rx507_pos, 2, rx507_start
+    sub rx507_off, rx507_pos, 1
+    substr rx507_tgt, rx507_tgt, rx507_off
+  rx507_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan489_done
-    goto rxscan489_scan
-  rxscan489_loop:
-    ($P10) = rx484_cur."from"()
+    ne $I10, -1, rxscan512_done
+    goto rxscan512_scan
+  rxscan512_loop:
+    ($P10) = rx507_cur."from"()
     inc $P10
-    set rx484_pos, $P10
-    ge rx484_pos, rx484_eos, rxscan489_done
-  rxscan489_scan:
-    set_addr $I10, rxscan489_loop
-    rx484_cur."!mark_push"(0, rx484_pos, $I10)
-  rxscan489_done:
-  alt490_0:
-.annotate 'line', 244
-    set_addr $I10, alt490_1
-    rx484_cur."!mark_push"(0, rx484_pos, $I10)
-.annotate 'line', 245
+    set rx507_pos, $P10
+    ge rx507_pos, rx507_eos, rxscan512_done
+  rxscan512_scan:
+    set_addr $I10, rxscan512_loop
+    rx507_cur."!mark_push"(0, rx507_pos, $I10)
+  rxscan512_done:
+  alt513_0:
+.annotate 'line', 248
+    set_addr $I10, alt513_1
+    rx507_cur."!mark_push"(0, rx507_pos, $I10)
+.annotate 'line', 249
   # rx subrule "sigil" subtype=capture negate=
-    rx484_cur."!cursor_pos"(rx484_pos)
-    $P10 = rx484_cur."sigil"()
-    unless $P10, rx484_fail
-    rx484_cur."!mark_push"(0, -1, 0, $P10)
+    rx507_cur."!cursor_pos"(rx507_pos)
+    $P10 = rx507_cur."sigil"()
+    unless $P10, rx507_fail
+    rx507_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx484_pos = $P10."pos"()
-  # rx rxquantr491 ** 0..1
-    set_addr $I492, rxquantr491_done
-    rx484_cur."!mark_push"(0, rx484_pos, $I492)
-  rxquantr491_loop:
+    rx507_pos = $P10."pos"()
+  # rx rxquantr514 ** 0..1
+    set_addr $I515, rxquantr514_done
+    rx507_cur."!mark_push"(0, rx507_pos, $I515)
+  rxquantr514_loop:
   # rx subrule "twigil" subtype=capture negate=
-    rx484_cur."!cursor_pos"(rx484_pos)
-    $P10 = rx484_cur."twigil"()
-    unless $P10, rx484_fail
-    rx484_cur."!mark_push"(0, -1, 0, $P10)
+    rx507_cur."!cursor_pos"(rx507_pos)
+    $P10 = rx507_cur."twigil"()
+    unless $P10, rx507_fail
+    rx507_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("twigil")
-    rx484_pos = $P10."pos"()
-    (rx484_rep) = rx484_cur."!mark_commit"($I492)
-  rxquantr491_done:
+    rx507_pos = $P10."pos"()
+    (rx507_rep) = rx507_cur."!mark_commit"($I515)
+  rxquantr514_done:
   # rx subrule "name" subtype=capture negate=
-    rx484_cur."!cursor_pos"(rx484_pos)
-    $P10 = rx484_cur."name"()
-    unless $P10, rx484_fail
-    rx484_cur."!mark_push"(0, -1, 0, $P10)
+    rx507_cur."!cursor_pos"(rx507_pos)
+    $P10 = rx507_cur."name"()
+    unless $P10, rx507_fail
+    rx507_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("desigilname")
-    rx484_pos = $P10."pos"()
-    goto alt490_end
-  alt490_1:
-    set_addr $I10, alt490_2
-    rx484_cur."!mark_push"(0, rx484_pos, $I10)
-.annotate 'line', 246
+    rx507_pos = $P10."pos"()
+    goto alt513_end
+  alt513_1:
+    set_addr $I10, alt513_2
+    rx507_cur."!mark_push"(0, rx507_pos, $I10)
+.annotate 'line', 250
   # rx subrule "sigil" subtype=capture negate=
-    rx484_cur."!cursor_pos"(rx484_pos)
-    $P10 = rx484_cur."sigil"()
-    unless $P10, rx484_fail
-    rx484_cur."!mark_push"(0, -1, 0, $P10)
+    rx507_cur."!cursor_pos"(rx507_pos)
+    $P10 = rx507_cur."sigil"()
+    unless $P10, rx507_fail
+    rx507_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx484_pos = $P10."pos"()
+    rx507_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx484_pos, rx484_eos, rx484_fail
-    sub $I10, rx484_pos, rx484_off
-    substr $S10, rx484_tgt, $I10, 1
+    ge rx507_pos, rx507_eos, rx507_fail
+    sub $I10, rx507_pos, rx507_off
+    substr $S10, rx507_tgt, $I10, 1
     index $I11, "<[", $S10
-    lt $I11, 0, rx484_fail
+    lt $I11, 0, rx507_fail
   # rx subrule "postcircumfix" subtype=capture negate=
-    rx484_cur."!cursor_pos"(rx484_pos)
-    $P10 = rx484_cur."postcircumfix"()
-    unless $P10, rx484_fail
-    rx484_cur."!mark_push"(0, -1, 0, $P10)
+    rx507_cur."!cursor_pos"(rx507_pos)
+    $P10 = rx507_cur."postcircumfix"()
+    unless $P10, rx507_fail
+    rx507_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("postcircumfix")
-    rx484_pos = $P10."pos"()
-    goto alt490_end
-  alt490_2:
-.annotate 'line', 247
+    rx507_pos = $P10."pos"()
+    goto alt513_end
+  alt513_2:
+.annotate 'line', 251
   # rx subcapture "sigil"
-    set_addr $I10, rxcap_493_fail
-    rx484_cur."!mark_push"(0, rx484_pos, $I10)
+    set_addr $I10, rxcap_516_fail
+    rx507_cur."!mark_push"(0, rx507_pos, $I10)
   # rx literal  "$"
-    add $I11, rx484_pos, 1
-    gt $I11, rx484_eos, rx484_fail
-    sub $I11, rx484_pos, rx484_off
-    substr $S10, rx484_tgt, $I11, 1
-    ne $S10, "$", rx484_fail
-    add rx484_pos, 1
-    set_addr $I10, rxcap_493_fail
-    ($I12, $I11) = rx484_cur."!mark_peek"($I10)
-    rx484_cur."!cursor_pos"($I11)
-    ($P10) = rx484_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx484_pos, "")
-    rx484_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx507_pos, 1
+    gt $I11, rx507_eos, rx507_fail
+    sub $I11, rx507_pos, rx507_off
+    substr $S10, rx507_tgt, $I11, 1
+    ne $S10, "$", rx507_fail
+    add rx507_pos, 1
+    set_addr $I10, rxcap_516_fail
+    ($I12, $I11) = rx507_cur."!mark_peek"($I10)
+    rx507_cur."!cursor_pos"($I11)
+    ($P10) = rx507_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx507_pos, "")
+    rx507_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    goto rxcap_493_done
-  rxcap_493_fail:
-    goto rx484_fail
-  rxcap_493_done:
+    goto rxcap_516_done
+  rxcap_516_fail:
+    goto rx507_fail
+  rxcap_516_done:
   # rx subcapture "desigilname"
-    set_addr $I10, rxcap_494_fail
-    rx484_cur."!mark_push"(0, rx484_pos, $I10)
+    set_addr $I10, rxcap_517_fail
+    rx507_cur."!mark_push"(0, rx507_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx484_pos, rx484_eos, rx484_fail
-    sub $I10, rx484_pos, rx484_off
-    substr $S10, rx484_tgt, $I10, 1
+    ge rx507_pos, rx507_eos, rx507_fail
+    sub $I10, rx507_pos, rx507_off
+    substr $S10, rx507_tgt, $I10, 1
     index $I11, "/_!", $S10
-    lt $I11, 0, rx484_fail
-    inc rx484_pos
-    set_addr $I10, rxcap_494_fail
-    ($I12, $I11) = rx484_cur."!mark_peek"($I10)
-    rx484_cur."!cursor_pos"($I11)
-    ($P10) = rx484_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx484_pos, "")
-    rx484_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx507_fail
+    inc rx507_pos
+    set_addr $I10, rxcap_517_fail
+    ($I12, $I11) = rx507_cur."!mark_peek"($I10)
+    rx507_cur."!cursor_pos"($I11)
+    ($P10) = rx507_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx507_pos, "")
+    rx507_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("desigilname")
-    goto rxcap_494_done
-  rxcap_494_fail:
-    goto rx484_fail
-  rxcap_494_done:
-  alt490_end:
-.annotate 'line', 244
+    goto rxcap_517_done
+  rxcap_517_fail:
+    goto rx507_fail
+  rxcap_517_done:
+  alt513_end:
+.annotate 'line', 248
   # rx pass
-    rx484_cur."!cursor_pass"(rx484_pos, "variable")
-    rx484_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx484_pos)
-    .return (rx484_cur)
-  rx484_fail:
+    rx507_cur."!cursor_pass"(rx507_pos, "variable")
+    rx507_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx507_pos)
+    .return (rx507_cur)
+  rx507_fail:
 .annotate 'line', 4
-    (rx484_rep, rx484_pos, $I10, $P10) = rx484_cur."!mark_fail"(0)
-    lt rx484_pos, -1, rx484_done
-    eq rx484_pos, -1, rx484_fail
+    (rx507_rep, rx507_pos, $I10, $P10) = rx507_cur."!mark_fail"(0)
+    lt rx507_pos, -1, rx507_done
+    eq rx507_pos, -1, rx507_fail
     jump $I10
-  rx484_done:
-    rx484_cur."!cursor_fail"()
-    rx484_cur."!cursor_debug"("FAIL  ", "variable")
-    .return (rx484_cur)
+  rx507_done:
+    rx507_cur."!cursor_fail"()
+    rx507_cur."!cursor_debug"("FAIL  ", "variable")
+    .return (rx507_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable"  :subid("118_1274022894.43745") :method
+.sub "!PREFIX__variable"  :subid("123_1275811487.95429") :method
 .annotate 'line', 4
-    $P486 = self."!PREFIX__!subrule"("sigil", "")
-    $P487 = self."!PREFIX__!subrule"("sigil", "")
-    new $P488, "ResizablePMCArray"
-    push $P488, "$!"
-    push $P488, "$_"
-    push $P488, "$/"
-    push $P488, $P486
-    push $P488, $P487
-    .return ($P488)
+    $P509 = self."!PREFIX__!subrule"("sigil", "")
+    $P510 = self."!PREFIX__!subrule"("sigil", "")
+    new $P511, "ResizablePMCArray"
+    push $P511, "$!"
+    push $P511, "$_"
+    push $P511, "$/"
+    push $P511, $P509
+    push $P511, $P510
+    .return ($P511)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "sigil"  :subid("119_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "sigil"  :subid("124_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx496_tgt
-    .local int rx496_pos
-    .local int rx496_off
-    .local int rx496_eos
-    .local int rx496_rep
-    .local pmc rx496_cur
-    (rx496_cur, rx496_pos, rx496_tgt) = self."!cursor_start"()
-    rx496_cur."!cursor_debug"("START ", "sigil")
-    .lex unicode:"$\x{a2}", rx496_cur
+    .local string rx519_tgt
+    .local int rx519_pos
+    .local int rx519_off
+    .local int rx519_eos
+    .local int rx519_rep
+    .local pmc rx519_cur
+    (rx519_cur, rx519_pos, rx519_tgt) = self."!cursor_start"()
+    rx519_cur."!cursor_debug"("START ", "sigil")
+    .lex unicode:"$\x{a2}", rx519_cur
     .local pmc match
     .lex "$/", match
-    length rx496_eos, rx496_tgt
-    set rx496_off, 0
-    lt rx496_pos, 2, rx496_start
-    sub rx496_off, rx496_pos, 1
-    substr rx496_tgt, rx496_tgt, rx496_off
-  rx496_start:
+    length rx519_eos, rx519_tgt
+    gt rx519_pos, rx519_eos, rx519_done
+    set rx519_off, 0
+    lt rx519_pos, 2, rx519_start
+    sub rx519_off, rx519_pos, 1
+    substr rx519_tgt, rx519_tgt, rx519_off
+  rx519_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan499_done
-    goto rxscan499_scan
-  rxscan499_loop:
-    ($P10) = rx496_cur."from"()
+    ne $I10, -1, rxscan522_done
+    goto rxscan522_scan
+  rxscan522_loop:
+    ($P10) = rx519_cur."from"()
     inc $P10
-    set rx496_pos, $P10
-    ge rx496_pos, rx496_eos, rxscan499_done
-  rxscan499_scan:
-    set_addr $I10, rxscan499_loop
-    rx496_cur."!mark_push"(0, rx496_pos, $I10)
-  rxscan499_done:
-.annotate 'line', 250
+    set rx519_pos, $P10
+    ge rx519_pos, rx519_eos, rxscan522_done
+  rxscan522_scan:
+    set_addr $I10, rxscan522_loop
+    rx519_cur."!mark_push"(0, rx519_pos, $I10)
+  rxscan522_done:
+.annotate 'line', 254
   # rx enumcharlist negate=0 
-    ge rx496_pos, rx496_eos, rx496_fail
-    sub $I10, rx496_pos, rx496_off
-    substr $S10, rx496_tgt, $I10, 1
+    ge rx519_pos, rx519_eos, rx519_fail
+    sub $I10, rx519_pos, rx519_off
+    substr $S10, rx519_tgt, $I10, 1
     index $I11, "$@%&", $S10
-    lt $I11, 0, rx496_fail
-    inc rx496_pos
+    lt $I11, 0, rx519_fail
+    inc rx519_pos
   # rx pass
-    rx496_cur."!cursor_pass"(rx496_pos, "sigil")
-    rx496_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx496_pos)
-    .return (rx496_cur)
-  rx496_fail:
+    rx519_cur."!cursor_pass"(rx519_pos, "sigil")
+    rx519_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx519_pos)
+    .return (rx519_cur)
+  rx519_fail:
 .annotate 'line', 4
-    (rx496_rep, rx496_pos, $I10, $P10) = rx496_cur."!mark_fail"(0)
-    lt rx496_pos, -1, rx496_done
-    eq rx496_pos, -1, rx496_fail
+    (rx519_rep, rx519_pos, $I10, $P10) = rx519_cur."!mark_fail"(0)
+    lt rx519_pos, -1, rx519_done
+    eq rx519_pos, -1, rx519_fail
     jump $I10
-  rx496_done:
-    rx496_cur."!cursor_fail"()
-    rx496_cur."!cursor_debug"("FAIL  ", "sigil")
-    .return (rx496_cur)
+  rx519_done:
+    rx519_cur."!cursor_fail"()
+    rx519_cur."!cursor_debug"("FAIL  ", "sigil")
+    .return (rx519_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__sigil"  :subid("120_1274022894.43745") :method
+.sub "!PREFIX__sigil"  :subid("125_1275811487.95429") :method
 .annotate 'line', 4
-    new $P498, "ResizablePMCArray"
-    push $P498, "&"
-    push $P498, "%"
-    push $P498, "@"
-    push $P498, "$"
-    .return ($P498)
+    new $P521, "ResizablePMCArray"
+    push $P521, "&"
+    push $P521, "%"
+    push $P521, "@"
+    push $P521, "$"
+    .return ($P521)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "twigil"  :subid("121_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "twigil"  :subid("126_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx501_tgt
-    .local int rx501_pos
-    .local int rx501_off
-    .local int rx501_eos
-    .local int rx501_rep
-    .local pmc rx501_cur
-    (rx501_cur, rx501_pos, rx501_tgt) = self."!cursor_start"()
-    rx501_cur."!cursor_debug"("START ", "twigil")
-    .lex unicode:"$\x{a2}", rx501_cur
-    .local pmc match
-    .lex "$/", match
-    length rx501_eos, rx501_tgt
-    set rx501_off, 0
-    lt rx501_pos, 2, rx501_start
-    sub rx501_off, rx501_pos, 1
-    substr rx501_tgt, rx501_tgt, rx501_off
-  rx501_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan504_done
-    goto rxscan504_scan
-  rxscan504_loop:
-    ($P10) = rx501_cur."from"()
-    inc $P10
-    set rx501_pos, $P10
-    ge rx501_pos, rx501_eos, rxscan504_done
-  rxscan504_scan:
-    set_addr $I10, rxscan504_loop
-    rx501_cur."!mark_push"(0, rx501_pos, $I10)
-  rxscan504_done:
-.annotate 'line', 252
+    .local string rx524_tgt
+    .local int rx524_pos
+    .local int rx524_off
+    .local int rx524_eos
+    .local int rx524_rep
+    .local pmc rx524_cur
+    (rx524_cur, rx524_pos, rx524_tgt) = self."!cursor_start"()
+    rx524_cur."!cursor_debug"("START ", "twigil")
+    .lex unicode:"$\x{a2}", rx524_cur
+    .local pmc match
+    .lex "$/", match
+    length rx524_eos, rx524_tgt
+    gt rx524_pos, rx524_eos, rx524_done
+    set rx524_off, 0
+    lt rx524_pos, 2, rx524_start
+    sub rx524_off, rx524_pos, 1
+    substr rx524_tgt, rx524_tgt, rx524_off
+  rx524_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan527_done
+    goto rxscan527_scan
+  rxscan527_loop:
+    ($P10) = rx524_cur."from"()
+    inc $P10
+    set rx524_pos, $P10
+    ge rx524_pos, rx524_eos, rxscan527_done
+  rxscan527_scan:
+    set_addr $I10, rxscan527_loop
+    rx524_cur."!mark_push"(0, rx524_pos, $I10)
+  rxscan527_done:
+.annotate 'line', 256
   # rx enumcharlist negate=0 
-    ge rx501_pos, rx501_eos, rx501_fail
-    sub $I10, rx501_pos, rx501_off
-    substr $S10, rx501_tgt, $I10, 1
+    ge rx524_pos, rx524_eos, rx524_fail
+    sub $I10, rx524_pos, rx524_off
+    substr $S10, rx524_tgt, $I10, 1
     index $I11, "*!?", $S10
-    lt $I11, 0, rx501_fail
-    inc rx501_pos
+    lt $I11, 0, rx524_fail
+    inc rx524_pos
   # rx pass
-    rx501_cur."!cursor_pass"(rx501_pos, "twigil")
-    rx501_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx501_pos)
-    .return (rx501_cur)
-  rx501_fail:
+    rx524_cur."!cursor_pass"(rx524_pos, "twigil")
+    rx524_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx524_pos)
+    .return (rx524_cur)
+  rx524_fail:
 .annotate 'line', 4
-    (rx501_rep, rx501_pos, $I10, $P10) = rx501_cur."!mark_fail"(0)
-    lt rx501_pos, -1, rx501_done
-    eq rx501_pos, -1, rx501_fail
+    (rx524_rep, rx524_pos, $I10, $P10) = rx524_cur."!mark_fail"(0)
+    lt rx524_pos, -1, rx524_done
+    eq rx524_pos, -1, rx524_fail
     jump $I10
-  rx501_done:
-    rx501_cur."!cursor_fail"()
-    rx501_cur."!cursor_debug"("FAIL  ", "twigil")
-    .return (rx501_cur)
+  rx524_done:
+    rx524_cur."!cursor_fail"()
+    rx524_cur."!cursor_debug"("FAIL  ", "twigil")
+    .return (rx524_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__twigil"  :subid("122_1274022894.43745") :method
+.sub "!PREFIX__twigil"  :subid("127_1275811487.95429") :method
 .annotate 'line', 4
-    new $P503, "ResizablePMCArray"
-    push $P503, "?"
-    push $P503, "!"
-    push $P503, "*"
-    .return ($P503)
+    new $P526, "ResizablePMCArray"
+    push $P526, "?"
+    push $P526, "!"
+    push $P526, "*"
+    .return ($P526)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator"  :subid("123_1274022894.43745") :method
-.annotate 'line', 254
-    $P506 = self."!protoregex"("package_declarator")
-    .return ($P506)
+.sub "package_declarator"  :subid("128_1275811487.95429") :method
+.annotate 'line', 258
+    $P529 = self."!protoregex"("package_declarator")
+    .return ($P529)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator"  :subid("124_1274022894.43745") :method
-.annotate 'line', 254
-    $P508 = self."!PREFIX__!protoregex"("package_declarator")
-    .return ($P508)
+.sub "!PREFIX__package_declarator"  :subid("129_1275811487.95429") :method
+.annotate 'line', 258
+    $P531 = self."!PREFIX__!protoregex"("package_declarator")
+    .return ($P531)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<module>"  :subid("125_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "package_declarator:sym<module>"  :subid("130_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx510_tgt
-    .local int rx510_pos
-    .local int rx510_off
-    .local int rx510_eos
-    .local int rx510_rep
-    .local pmc rx510_cur
-    (rx510_cur, rx510_pos, rx510_tgt) = self."!cursor_start"()
-    rx510_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
-    .lex unicode:"$\x{a2}", rx510_cur
-    .local pmc match
-    .lex "$/", match
-    length rx510_eos, rx510_tgt
-    set rx510_off, 0
-    lt rx510_pos, 2, rx510_start
-    sub rx510_off, rx510_pos, 1
-    substr rx510_tgt, rx510_tgt, rx510_off
-  rx510_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan514_done
-    goto rxscan514_scan
-  rxscan514_loop:
-    ($P10) = rx510_cur."from"()
-    inc $P10
-    set rx510_pos, $P10
-    ge rx510_pos, rx510_eos, rxscan514_done
-  rxscan514_scan:
-    set_addr $I10, rxscan514_loop
-    rx510_cur."!mark_push"(0, rx510_pos, $I10)
-  rxscan514_done:
-.annotate 'line', 255
+    .local string rx533_tgt
+    .local int rx533_pos
+    .local int rx533_off
+    .local int rx533_eos
+    .local int rx533_rep
+    .local pmc rx533_cur
+    (rx533_cur, rx533_pos, rx533_tgt) = self."!cursor_start"()
+    rx533_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
+    .lex unicode:"$\x{a2}", rx533_cur
+    .local pmc match
+    .lex "$/", match
+    length rx533_eos, rx533_tgt
+    gt rx533_pos, rx533_eos, rx533_done
+    set rx533_off, 0
+    lt rx533_pos, 2, rx533_start
+    sub rx533_off, rx533_pos, 1
+    substr rx533_tgt, rx533_tgt, rx533_off
+  rx533_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan537_done
+    goto rxscan537_scan
+  rxscan537_loop:
+    ($P10) = rx533_cur."from"()
+    inc $P10
+    set rx533_pos, $P10
+    ge rx533_pos, rx533_eos, rxscan537_done
+  rxscan537_scan:
+    set_addr $I10, rxscan537_loop
+    rx533_cur."!mark_push"(0, rx533_pos, $I10)
+  rxscan537_done:
+.annotate 'line', 259
   # rx subcapture "sym"
-    set_addr $I10, rxcap_515_fail
-    rx510_cur."!mark_push"(0, rx510_pos, $I10)
+    set_addr $I10, rxcap_538_fail
+    rx533_cur."!mark_push"(0, rx533_pos, $I10)
   # rx literal  "module"
-    add $I11, rx510_pos, 6
-    gt $I11, rx510_eos, rx510_fail
-    sub $I11, rx510_pos, rx510_off
-    substr $S10, rx510_tgt, $I11, 6
-    ne $S10, "module", rx510_fail
-    add rx510_pos, 6
-    set_addr $I10, rxcap_515_fail
-    ($I12, $I11) = rx510_cur."!mark_peek"($I10)
-    rx510_cur."!cursor_pos"($I11)
-    ($P10) = rx510_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx510_pos, "")
-    rx510_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx533_pos, 6
+    gt $I11, rx533_eos, rx533_fail
+    sub $I11, rx533_pos, rx533_off
+    substr $S10, rx533_tgt, $I11, 6
+    ne $S10, "module", rx533_fail
+    add rx533_pos, 6
+    set_addr $I10, rxcap_538_fail
+    ($I12, $I11) = rx533_cur."!mark_peek"($I10)
+    rx533_cur."!cursor_pos"($I11)
+    ($P10) = rx533_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx533_pos, "")
+    rx533_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_515_done
-  rxcap_515_fail:
-    goto rx510_fail
-  rxcap_515_done:
+    goto rxcap_538_done
+  rxcap_538_fail:
+    goto rx533_fail
+  rxcap_538_done:
   # rx subrule "package_def" subtype=capture negate=
-    rx510_cur."!cursor_pos"(rx510_pos)
-    $P10 = rx510_cur."package_def"()
-    unless $P10, rx510_fail
-    rx510_cur."!mark_push"(0, -1, 0, $P10)
+    rx533_cur."!cursor_pos"(rx533_pos)
+    $P10 = rx533_cur."package_def"()
+    unless $P10, rx533_fail
+    rx533_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_def")
-    rx510_pos = $P10."pos"()
+    rx533_pos = $P10."pos"()
   # rx pass
-    rx510_cur."!cursor_pass"(rx510_pos, "package_declarator:sym<module>")
-    rx510_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx510_pos)
-    .return (rx510_cur)
-  rx510_fail:
+    rx533_cur."!cursor_pass"(rx533_pos, "package_declarator:sym<module>")
+    rx533_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx533_pos)
+    .return (rx533_cur)
+  rx533_fail:
 .annotate 'line', 4
-    (rx510_rep, rx510_pos, $I10, $P10) = rx510_cur."!mark_fail"(0)
-    lt rx510_pos, -1, rx510_done
-    eq rx510_pos, -1, rx510_fail
+    (rx533_rep, rx533_pos, $I10, $P10) = rx533_cur."!mark_fail"(0)
+    lt rx533_pos, -1, rx533_done
+    eq rx533_pos, -1, rx533_fail
     jump $I10
-  rx510_done:
-    rx510_cur."!cursor_fail"()
-    rx510_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
-    .return (rx510_cur)
+  rx533_done:
+    rx533_cur."!cursor_fail"()
+    rx533_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
+    .return (rx533_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1274022894.43745") :method
+.sub "!PREFIX__package_declarator:sym<module>"  :subid("131_1275811487.95429") :method
 .annotate 'line', 4
-    $P512 = self."!PREFIX__!subrule"("package_def", "module")
-    new $P513, "ResizablePMCArray"
-    push $P513, $P512
-    .return ($P513)
+    $P535 = self."!PREFIX__!subrule"("package_def", "module")
+    new $P536, "ResizablePMCArray"
+    push $P536, $P535
+    .return ($P536)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<class>"  :subid("127_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "package_declarator:sym<class>"  :subid("132_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx517_tgt
-    .local int rx517_pos
-    .local int rx517_off
-    .local int rx517_eos
-    .local int rx517_rep
-    .local pmc rx517_cur
-    (rx517_cur, rx517_pos, rx517_tgt) = self."!cursor_start"()
-    rx517_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
-    .lex unicode:"$\x{a2}", rx517_cur
+    .local string rx540_tgt
+    .local int rx540_pos
+    .local int rx540_off
+    .local int rx540_eos
+    .local int rx540_rep
+    .local pmc rx540_cur
+    (rx540_cur, rx540_pos, rx540_tgt) = self."!cursor_start"()
+    rx540_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
+    .lex unicode:"$\x{a2}", rx540_cur
     .local pmc match
     .lex "$/", match
-    length rx517_eos, rx517_tgt
-    set rx517_off, 0
-    lt rx517_pos, 2, rx517_start
-    sub rx517_off, rx517_pos, 1
-    substr rx517_tgt, rx517_tgt, rx517_off
-  rx517_start:
+    length rx540_eos, rx540_tgt
+    gt rx540_pos, rx540_eos, rx540_done
+    set rx540_off, 0
+    lt rx540_pos, 2, rx540_start
+    sub rx540_off, rx540_pos, 1
+    substr rx540_tgt, rx540_tgt, rx540_off
+  rx540_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan522_done
-    goto rxscan522_scan
-  rxscan522_loop:
-    ($P10) = rx517_cur."from"()
+    ne $I10, -1, rxscan545_done
+    goto rxscan545_scan
+  rxscan545_loop:
+    ($P10) = rx540_cur."from"()
     inc $P10
-    set rx517_pos, $P10
-    ge rx517_pos, rx517_eos, rxscan522_done
-  rxscan522_scan:
-    set_addr $I10, rxscan522_loop
-    rx517_cur."!mark_push"(0, rx517_pos, $I10)
-  rxscan522_done:
-.annotate 'line', 256
+    set rx540_pos, $P10
+    ge rx540_pos, rx540_eos, rxscan545_done
+  rxscan545_scan:
+    set_addr $I10, rxscan545_loop
+    rx540_cur."!mark_push"(0, rx540_pos, $I10)
+  rxscan545_done:
+.annotate 'line', 260
   # rx subcapture "sym"
-    set_addr $I10, rxcap_524_fail
-    rx517_cur."!mark_push"(0, rx517_pos, $I10)
-  alt523_0:
-    set_addr $I10, alt523_1
-    rx517_cur."!mark_push"(0, rx517_pos, $I10)
+    set_addr $I10, rxcap_547_fail
+    rx540_cur."!mark_push"(0, rx540_pos, $I10)
+  alt546_0:
+    set_addr $I10, alt546_1
+    rx540_cur."!mark_push"(0, rx540_pos, $I10)
   # rx literal  "class"
-    add $I11, rx517_pos, 5
-    gt $I11, rx517_eos, rx517_fail
-    sub $I11, rx517_pos, rx517_off
-    substr $S10, rx517_tgt, $I11, 5
-    ne $S10, "class", rx517_fail
-    add rx517_pos, 5
-    goto alt523_end
-  alt523_1:
+    add $I11, rx540_pos, 5
+    gt $I11, rx540_eos, rx540_fail
+    sub $I11, rx540_pos, rx540_off
+    substr $S10, rx540_tgt, $I11, 5
+    ne $S10, "class", rx540_fail
+    add rx540_pos, 5
+    goto alt546_end
+  alt546_1:
   # rx literal  "grammar"
-    add $I11, rx517_pos, 7
-    gt $I11, rx517_eos, rx517_fail
-    sub $I11, rx517_pos, rx517_off
-    substr $S10, rx517_tgt, $I11, 7
-    ne $S10, "grammar", rx517_fail
-    add rx517_pos, 7
-  alt523_end:
-    set_addr $I10, rxcap_524_fail
-    ($I12, $I11) = rx517_cur."!mark_peek"($I10)
-    rx517_cur."!cursor_pos"($I11)
-    ($P10) = rx517_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx517_pos, "")
-    rx517_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx540_pos, 7
+    gt $I11, rx540_eos, rx540_fail
+    sub $I11, rx540_pos, rx540_off
+    substr $S10, rx540_tgt, $I11, 7
+    ne $S10, "grammar", rx540_fail
+    add rx540_pos, 7
+  alt546_end:
+    set_addr $I10, rxcap_547_fail
+    ($I12, $I11) = rx540_cur."!mark_peek"($I10)
+    rx540_cur."!cursor_pos"($I11)
+    ($P10) = rx540_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx540_pos, "")
+    rx540_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_524_done
-  rxcap_524_fail:
-    goto rx517_fail
-  rxcap_524_done:
+    goto rxcap_547_done
+  rxcap_547_fail:
+    goto rx540_fail
+  rxcap_547_done:
   # rx subrule "package_def" subtype=capture negate=
-    rx517_cur."!cursor_pos"(rx517_pos)
-    $P10 = rx517_cur."package_def"()
-    unless $P10, rx517_fail
-    rx517_cur."!mark_push"(0, -1, 0, $P10)
+    rx540_cur."!cursor_pos"(rx540_pos)
+    $P10 = rx540_cur."package_def"()
+    unless $P10, rx540_fail
+    rx540_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_def")
-    rx517_pos = $P10."pos"()
+    rx540_pos = $P10."pos"()
   # rx pass
-    rx517_cur."!cursor_pass"(rx517_pos, "package_declarator:sym<class>")
-    rx517_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx517_pos)
-    .return (rx517_cur)
-  rx517_fail:
+    rx540_cur."!cursor_pass"(rx540_pos, "package_declarator:sym<class>")
+    rx540_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx540_pos)
+    .return (rx540_cur)
+  rx540_fail:
 .annotate 'line', 4
-    (rx517_rep, rx517_pos, $I10, $P10) = rx517_cur."!mark_fail"(0)
-    lt rx517_pos, -1, rx517_done
-    eq rx517_pos, -1, rx517_fail
+    (rx540_rep, rx540_pos, $I10, $P10) = rx540_cur."!mark_fail"(0)
+    lt rx540_pos, -1, rx540_done
+    eq rx540_pos, -1, rx540_fail
     jump $I10
-  rx517_done:
-    rx517_cur."!cursor_fail"()
-    rx517_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
-    .return (rx517_cur)
+  rx540_done:
+    rx540_cur."!cursor_fail"()
+    rx540_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
+    .return (rx540_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1274022894.43745") :method
+.sub "!PREFIX__package_declarator:sym<class>"  :subid("133_1275811487.95429") :method
 .annotate 'line', 4
-    $P519 = self."!PREFIX__!subrule"("package_def", "grammar")
-    $P520 = self."!PREFIX__!subrule"("package_def", "class")
-    new $P521, "ResizablePMCArray"
-    push $P521, $P519
-    push $P521, $P520
-    .return ($P521)
+    $P542 = self."!PREFIX__!subrule"("package_def", "grammar")
+    $P543 = self."!PREFIX__!subrule"("package_def", "class")
+    new $P544, "ResizablePMCArray"
+    push $P544, $P542
+    push $P544, $P543
+    .return ($P544)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_def"  :subid("129_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "package_def"  :subid("134_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx526_tgt
-    .local int rx526_pos
-    .local int rx526_off
-    .local int rx526_eos
-    .local int rx526_rep
-    .local pmc rx526_cur
-    (rx526_cur, rx526_pos, rx526_tgt) = self."!cursor_start"()
-    rx526_cur."!cursor_debug"("START ", "package_def")
-    rx526_cur."!cursor_caparray"("parent")
-    .lex unicode:"$\x{a2}", rx526_cur
-    .local pmc match
-    .lex "$/", match
-    length rx526_eos, rx526_tgt
-    set rx526_off, 0
-    lt rx526_pos, 2, rx526_start
-    sub rx526_off, rx526_pos, 1
-    substr rx526_tgt, rx526_tgt, rx526_off
-  rx526_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan529_done
-    goto rxscan529_scan
-  rxscan529_loop:
-    ($P10) = rx526_cur."from"()
-    inc $P10
-    set rx526_pos, $P10
-    ge rx526_pos, rx526_eos, rxscan529_done
-  rxscan529_scan:
-    set_addr $I10, rxscan529_loop
-    rx526_cur."!mark_push"(0, rx526_pos, $I10)
-  rxscan529_done:
-.annotate 'line', 258
+    .local string rx549_tgt
+    .local int rx549_pos
+    .local int rx549_off
+    .local int rx549_eos
+    .local int rx549_rep
+    .local pmc rx549_cur
+    (rx549_cur, rx549_pos, rx549_tgt) = self."!cursor_start"()
+    rx549_cur."!cursor_debug"("START ", "package_def")
+    rx549_cur."!cursor_caparray"("parent")
+    .lex unicode:"$\x{a2}", rx549_cur
+    .local pmc match
+    .lex "$/", match
+    length rx549_eos, rx549_tgt
+    gt rx549_pos, rx549_eos, rx549_done
+    set rx549_off, 0
+    lt rx549_pos, 2, rx549_start
+    sub rx549_off, rx549_pos, 1
+    substr rx549_tgt, rx549_tgt, rx549_off
+  rx549_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan553_done
+    goto rxscan553_scan
+  rxscan553_loop:
+    ($P10) = rx549_cur."from"()
+    inc $P10
+    set rx549_pos, $P10
+    ge rx549_pos, rx549_eos, rxscan553_done
+  rxscan553_scan:
+    set_addr $I10, rxscan553_loop
+    rx549_cur."!mark_push"(0, rx549_pos, $I10)
+  rxscan553_done:
+.annotate 'line', 262
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-.annotate 'line', 259
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+.annotate 'line', 263
   # rx subrule "name" subtype=capture negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."name"()
-    unless $P10, rx526_fail
-    rx526_cur."!mark_push"(0, -1, 0, $P10)
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."name"()
+    unless $P10, rx549_fail
+    rx549_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx526_pos = $P10."pos"()
+    rx549_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-.annotate 'line', 260
-  # rx rxquantr532 ** 0..1
-    set_addr $I536, rxquantr532_done
-    rx526_cur."!mark_push"(0, rx526_pos, $I536)
-  rxquantr532_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+.annotate 'line', 264
+  # rx rxquantr556 ** 0..1
+    set_addr $I560, rxquantr556_done
+    rx549_cur."!mark_push"(0, rx549_pos, $I560)
+  rxquantr556_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
   # rx literal  "is"
-    add $I11, rx526_pos, 2
-    gt $I11, rx526_eos, rx526_fail
-    sub $I11, rx526_pos, rx526_off
-    substr $S10, rx526_tgt, $I11, 2
-    ne $S10, "is", rx526_fail
-    add rx526_pos, 2
-  # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
+    add $I11, rx549_pos, 2
+    gt $I11, rx549_eos, rx549_fail
+    sub $I11, rx549_pos, rx549_off
+    substr $S10, rx549_tgt, $I11, 2
+    ne $S10, "is", rx549_fail
+    add rx549_pos, 2
+  # rx subrule "ws" subtype=method negate=
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
   # rx subrule "name" subtype=capture negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."name"()
-    unless $P10, rx526_fail
-    rx526_cur."!mark_push"(0, -1, 0, $P10)
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."name"()
+    unless $P10, rx549_fail
+    rx549_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("parent")
-    rx526_pos = $P10."pos"()
+    rx549_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-    (rx526_rep) = rx526_cur."!mark_commit"($I536)
-  rxquantr532_done:
-  # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-  alt538_0:
-.annotate 'line', 261
-    set_addr $I10, alt538_1
-    rx526_cur."!mark_push"(0, rx526_pos, $I10)
-.annotate 'line', 262
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+    (rx549_rep) = rx549_cur."!mark_commit"($I560)
+  rxquantr556_done:
+  # rx subrule "ws" subtype=method negate=
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+  alt562_0:
+.annotate 'line', 265
+    set_addr $I10, alt562_1
+    rx549_cur."!mark_push"(0, rx549_pos, $I10)
+.annotate 'line', 266
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
   # rx literal  ";"
-    add $I11, rx526_pos, 1
-    gt $I11, rx526_eos, rx526_fail
-    sub $I11, rx526_pos, rx526_off
-    substr $S10, rx526_tgt, $I11, 1
-    ne $S10, ";", rx526_fail
-    add rx526_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
+    add $I11, rx549_pos, 1
+    gt $I11, rx549_eos, rx549_fail
+    sub $I11, rx549_pos, rx549_off
+    substr $S10, rx549_tgt, $I11, 1
+    ne $S10, ";", rx549_fail
+    add rx549_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
   # rx subrule "comp_unit" subtype=capture negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."comp_unit"()
-    unless $P10, rx526_fail
-    rx526_cur."!mark_push"(0, -1, 0, $P10)
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."comp_unit"()
+    unless $P10, rx549_fail
+    rx549_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("comp_unit")
-    rx526_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-    goto alt538_end
-  alt538_1:
-    set_addr $I10, alt538_2
-    rx526_cur."!mark_push"(0, rx526_pos, $I10)
-.annotate 'line', 263
+    rx549_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+    goto alt562_end
+  alt562_1:
+    set_addr $I10, alt562_2
+    rx549_cur."!mark_push"(0, rx549_pos, $I10)
+.annotate 'line', 267
+  # rx subrule "ws" subtype=method negate=
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx526_pos, rx526_eos, rx526_fail
-    sub $I10, rx526_pos, rx526_off
-    substr $S10, rx526_tgt, $I10, 1
+    ge rx549_pos, rx549_eos, rx549_fail
+    sub $I10, rx549_pos, rx549_off
+    substr $S10, rx549_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx526_fail
+    lt $I11, 0, rx549_fail
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
   # rx subrule "block" subtype=capture negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."block"()
-    unless $P10, rx526_fail
-    rx526_cur."!mark_push"(0, -1, 0, $P10)
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."block"()
+    unless $P10, rx549_fail
+    rx549_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx526_pos = $P10."pos"()
+    rx549_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-    goto alt538_end
-  alt538_2:
-.annotate 'line', 264
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+    goto alt562_end
+  alt562_2:
+.annotate 'line', 268
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."panic"("Malformed package declaration")
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-  alt538_end:
-.annotate 'line', 265
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."panic"("Malformed package declaration")
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+  alt562_end:
+.annotate 'line', 269
   # rx subrule "ws" subtype=method negate=
-    rx526_cur."!cursor_pos"(rx526_pos)
-    $P10 = rx526_cur."ws"()
-    unless $P10, rx526_fail
-    rx526_pos = $P10."pos"()
-.annotate 'line', 258
+    rx549_cur."!cursor_pos"(rx549_pos)
+    $P10 = rx549_cur."ws"()
+    unless $P10, rx549_fail
+    rx549_pos = $P10."pos"()
+.annotate 'line', 262
   # rx pass
-    rx526_cur."!cursor_pass"(rx526_pos, "package_def")
-    rx526_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx526_pos)
-    .return (rx526_cur)
-  rx526_fail:
+    rx549_cur."!cursor_pass"(rx549_pos, "package_def")
+    rx549_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx549_pos)
+    .return (rx549_cur)
+  rx549_fail:
 .annotate 'line', 4
-    (rx526_rep, rx526_pos, $I10, $P10) = rx526_cur."!mark_fail"(0)
-    lt rx526_pos, -1, rx526_done
-    eq rx526_pos, -1, rx526_fail
+    (rx549_rep, rx549_pos, $I10, $P10) = rx549_cur."!mark_fail"(0)
+    lt rx549_pos, -1, rx549_done
+    eq rx549_pos, -1, rx549_fail
     jump $I10
-  rx526_done:
-    rx526_cur."!cursor_fail"()
-    rx526_cur."!cursor_debug"("FAIL  ", "package_def")
-    .return (rx526_cur)
+  rx549_done:
+    rx549_cur."!cursor_fail"()
+    rx549_cur."!cursor_debug"("FAIL  ", "package_def")
+    .return (rx549_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_def"  :subid("130_1274022894.43745") :method
+.sub "!PREFIX__package_def"  :subid("135_1275811487.95429") :method
 .annotate 'line', 4
-    new $P528, "ResizablePMCArray"
-    push $P528, ""
-    .return ($P528)
+    $P551 = self."!PREFIX__!subrule"("ws", "")
+    new $P552, "ResizablePMCArray"
+    push $P552, $P551
+    .return ($P552)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator"  :subid("131_1274022894.43745") :method
-.annotate 'line', 268
-    $P549 = self."!protoregex"("scope_declarator")
-    .return ($P549)
+.sub "scope_declarator"  :subid("136_1275811487.95429") :method
+.annotate 'line', 272
+    $P573 = self."!protoregex"("scope_declarator")
+    .return ($P573)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator"  :subid("132_1274022894.43745") :method
-.annotate 'line', 268
-    $P551 = self."!PREFIX__!protoregex"("scope_declarator")
-    .return ($P551)
+.sub "!PREFIX__scope_declarator"  :subid("137_1275811487.95429") :method
+.annotate 'line', 272
+    $P575 = self."!PREFIX__!protoregex"("scope_declarator")
+    .return ($P575)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<my>"  :subid("133_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "scope_declarator:sym<my>"  :subid("138_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx553_tgt
-    .local int rx553_pos
-    .local int rx553_off
-    .local int rx553_eos
-    .local int rx553_rep
-    .local pmc rx553_cur
-    (rx553_cur, rx553_pos, rx553_tgt) = self."!cursor_start"()
-    rx553_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
-    .lex unicode:"$\x{a2}", rx553_cur
-    .local pmc match
-    .lex "$/", match
-    length rx553_eos, rx553_tgt
-    set rx553_off, 0
-    lt rx553_pos, 2, rx553_start
-    sub rx553_off, rx553_pos, 1
-    substr rx553_tgt, rx553_tgt, rx553_off
-  rx553_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan557_done
-    goto rxscan557_scan
-  rxscan557_loop:
-    ($P10) = rx553_cur."from"()
-    inc $P10
-    set rx553_pos, $P10
-    ge rx553_pos, rx553_eos, rxscan557_done
-  rxscan557_scan:
-    set_addr $I10, rxscan557_loop
-    rx553_cur."!mark_push"(0, rx553_pos, $I10)
-  rxscan557_done:
-.annotate 'line', 269
+    .local string rx577_tgt
+    .local int rx577_pos
+    .local int rx577_off
+    .local int rx577_eos
+    .local int rx577_rep
+    .local pmc rx577_cur
+    (rx577_cur, rx577_pos, rx577_tgt) = self."!cursor_start"()
+    rx577_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
+    .lex unicode:"$\x{a2}", rx577_cur
+    .local pmc match
+    .lex "$/", match
+    length rx577_eos, rx577_tgt
+    gt rx577_pos, rx577_eos, rx577_done
+    set rx577_off, 0
+    lt rx577_pos, 2, rx577_start
+    sub rx577_off, rx577_pos, 1
+    substr rx577_tgt, rx577_tgt, rx577_off
+  rx577_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan581_done
+    goto rxscan581_scan
+  rxscan581_loop:
+    ($P10) = rx577_cur."from"()
+    inc $P10
+    set rx577_pos, $P10
+    ge rx577_pos, rx577_eos, rxscan581_done
+  rxscan581_scan:
+    set_addr $I10, rxscan581_loop
+    rx577_cur."!mark_push"(0, rx577_pos, $I10)
+  rxscan581_done:
+.annotate 'line', 273
   # rx subcapture "sym"
-    set_addr $I10, rxcap_558_fail
-    rx553_cur."!mark_push"(0, rx553_pos, $I10)
+    set_addr $I10, rxcap_582_fail
+    rx577_cur."!mark_push"(0, rx577_pos, $I10)
   # rx literal  "my"
-    add $I11, rx553_pos, 2
-    gt $I11, rx553_eos, rx553_fail
-    sub $I11, rx553_pos, rx553_off
-    substr $S10, rx553_tgt, $I11, 2
-    ne $S10, "my", rx553_fail
-    add rx553_pos, 2
-    set_addr $I10, rxcap_558_fail
-    ($I12, $I11) = rx553_cur."!mark_peek"($I10)
-    rx553_cur."!cursor_pos"($I11)
-    ($P10) = rx553_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx553_pos, "")
-    rx553_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx577_pos, 2
+    gt $I11, rx577_eos, rx577_fail
+    sub $I11, rx577_pos, rx577_off
+    substr $S10, rx577_tgt, $I11, 2
+    ne $S10, "my", rx577_fail
+    add rx577_pos, 2
+    set_addr $I10, rxcap_582_fail
+    ($I12, $I11) = rx577_cur."!mark_peek"($I10)
+    rx577_cur."!cursor_pos"($I11)
+    ($P10) = rx577_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx577_pos, "")
+    rx577_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_558_done
-  rxcap_558_fail:
-    goto rx553_fail
-  rxcap_558_done:
+    goto rxcap_582_done
+  rxcap_582_fail:
+    goto rx577_fail
+  rxcap_582_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx553_cur."!cursor_pos"(rx553_pos)
-    $P10 = rx553_cur."scoped"("my")
-    unless $P10, rx553_fail
-    rx553_cur."!mark_push"(0, -1, 0, $P10)
+    rx577_cur."!cursor_pos"(rx577_pos)
+    $P10 = rx577_cur."scoped"("my")
+    unless $P10, rx577_fail
+    rx577_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx553_pos = $P10."pos"()
+    rx577_pos = $P10."pos"()
   # rx pass
-    rx553_cur."!cursor_pass"(rx553_pos, "scope_declarator:sym<my>")
-    rx553_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx553_pos)
-    .return (rx553_cur)
-  rx553_fail:
+    rx577_cur."!cursor_pass"(rx577_pos, "scope_declarator:sym<my>")
+    rx577_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx577_pos)
+    .return (rx577_cur)
+  rx577_fail:
 .annotate 'line', 4
-    (rx553_rep, rx553_pos, $I10, $P10) = rx553_cur."!mark_fail"(0)
-    lt rx553_pos, -1, rx553_done
-    eq rx553_pos, -1, rx553_fail
+    (rx577_rep, rx577_pos, $I10, $P10) = rx577_cur."!mark_fail"(0)
+    lt rx577_pos, -1, rx577_done
+    eq rx577_pos, -1, rx577_fail
     jump $I10
-  rx553_done:
-    rx553_cur."!cursor_fail"()
-    rx553_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
-    .return (rx553_cur)
+  rx577_done:
+    rx577_cur."!cursor_fail"()
+    rx577_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
+    .return (rx577_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1274022894.43745") :method
+.sub "!PREFIX__scope_declarator:sym<my>"  :subid("139_1275811487.95429") :method
 .annotate 'line', 4
-    $P555 = self."!PREFIX__!subrule"("scoped", "my")
-    new $P556, "ResizablePMCArray"
-    push $P556, $P555
-    .return ($P556)
+    $P579 = self."!PREFIX__!subrule"("scoped", "my")
+    new $P580, "ResizablePMCArray"
+    push $P580, $P579
+    .return ($P580)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<our>"  :subid("135_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "scope_declarator:sym<our>"  :subid("140_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx560_tgt
-    .local int rx560_pos
-    .local int rx560_off
-    .local int rx560_eos
-    .local int rx560_rep
-    .local pmc rx560_cur
-    (rx560_cur, rx560_pos, rx560_tgt) = self."!cursor_start"()
-    rx560_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
-    .lex unicode:"$\x{a2}", rx560_cur
+    .local string rx584_tgt
+    .local int rx584_pos
+    .local int rx584_off
+    .local int rx584_eos
+    .local int rx584_rep
+    .local pmc rx584_cur
+    (rx584_cur, rx584_pos, rx584_tgt) = self."!cursor_start"()
+    rx584_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
+    .lex unicode:"$\x{a2}", rx584_cur
     .local pmc match
     .lex "$/", match
-    length rx560_eos, rx560_tgt
-    set rx560_off, 0
-    lt rx560_pos, 2, rx560_start
-    sub rx560_off, rx560_pos, 1
-    substr rx560_tgt, rx560_tgt, rx560_off
-  rx560_start:
+    length rx584_eos, rx584_tgt
+    gt rx584_pos, rx584_eos, rx584_done
+    set rx584_off, 0
+    lt rx584_pos, 2, rx584_start
+    sub rx584_off, rx584_pos, 1
+    substr rx584_tgt, rx584_tgt, rx584_off
+  rx584_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan564_done
-    goto rxscan564_scan
-  rxscan564_loop:
-    ($P10) = rx560_cur."from"()
+    ne $I10, -1, rxscan588_done
+    goto rxscan588_scan
+  rxscan588_loop:
+    ($P10) = rx584_cur."from"()
     inc $P10
-    set rx560_pos, $P10
-    ge rx560_pos, rx560_eos, rxscan564_done
-  rxscan564_scan:
-    set_addr $I10, rxscan564_loop
-    rx560_cur."!mark_push"(0, rx560_pos, $I10)
-  rxscan564_done:
-.annotate 'line', 270
+    set rx584_pos, $P10
+    ge rx584_pos, rx584_eos, rxscan588_done
+  rxscan588_scan:
+    set_addr $I10, rxscan588_loop
+    rx584_cur."!mark_push"(0, rx584_pos, $I10)
+  rxscan588_done:
+.annotate 'line', 274
   # rx subcapture "sym"
-    set_addr $I10, rxcap_565_fail
-    rx560_cur."!mark_push"(0, rx560_pos, $I10)
+    set_addr $I10, rxcap_589_fail
+    rx584_cur."!mark_push"(0, rx584_pos, $I10)
   # rx literal  "our"
-    add $I11, rx560_pos, 3
-    gt $I11, rx560_eos, rx560_fail
-    sub $I11, rx560_pos, rx560_off
-    substr $S10, rx560_tgt, $I11, 3
-    ne $S10, "our", rx560_fail
-    add rx560_pos, 3
-    set_addr $I10, rxcap_565_fail
-    ($I12, $I11) = rx560_cur."!mark_peek"($I10)
-    rx560_cur."!cursor_pos"($I11)
-    ($P10) = rx560_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx560_pos, "")
-    rx560_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx584_pos, 3
+    gt $I11, rx584_eos, rx584_fail
+    sub $I11, rx584_pos, rx584_off
+    substr $S10, rx584_tgt, $I11, 3
+    ne $S10, "our", rx584_fail
+    add rx584_pos, 3
+    set_addr $I10, rxcap_589_fail
+    ($I12, $I11) = rx584_cur."!mark_peek"($I10)
+    rx584_cur."!cursor_pos"($I11)
+    ($P10) = rx584_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx584_pos, "")
+    rx584_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_565_done
-  rxcap_565_fail:
-    goto rx560_fail
-  rxcap_565_done:
+    goto rxcap_589_done
+  rxcap_589_fail:
+    goto rx584_fail
+  rxcap_589_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx560_cur."!cursor_pos"(rx560_pos)
-    $P10 = rx560_cur."scoped"("our")
-    unless $P10, rx560_fail
-    rx560_cur."!mark_push"(0, -1, 0, $P10)
+    rx584_cur."!cursor_pos"(rx584_pos)
+    $P10 = rx584_cur."scoped"("our")
+    unless $P10, rx584_fail
+    rx584_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx560_pos = $P10."pos"()
+    rx584_pos = $P10."pos"()
   # rx pass
-    rx560_cur."!cursor_pass"(rx560_pos, "scope_declarator:sym<our>")
-    rx560_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx560_pos)
-    .return (rx560_cur)
-  rx560_fail:
+    rx584_cur."!cursor_pass"(rx584_pos, "scope_declarator:sym<our>")
+    rx584_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx584_pos)
+    .return (rx584_cur)
+  rx584_fail:
 .annotate 'line', 4
-    (rx560_rep, rx560_pos, $I10, $P10) = rx560_cur."!mark_fail"(0)
-    lt rx560_pos, -1, rx560_done
-    eq rx560_pos, -1, rx560_fail
+    (rx584_rep, rx584_pos, $I10, $P10) = rx584_cur."!mark_fail"(0)
+    lt rx584_pos, -1, rx584_done
+    eq rx584_pos, -1, rx584_fail
     jump $I10
-  rx560_done:
-    rx560_cur."!cursor_fail"()
-    rx560_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
-    .return (rx560_cur)
+  rx584_done:
+    rx584_cur."!cursor_fail"()
+    rx584_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
+    .return (rx584_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1274022894.43745") :method
+.sub "!PREFIX__scope_declarator:sym<our>"  :subid("141_1275811487.95429") :method
 .annotate 'line', 4
-    $P562 = self."!PREFIX__!subrule"("scoped", "our")
-    new $P563, "ResizablePMCArray"
-    push $P563, $P562
-    .return ($P563)
+    $P586 = self."!PREFIX__!subrule"("scoped", "our")
+    new $P587, "ResizablePMCArray"
+    push $P587, $P586
+    .return ($P587)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<has>"  :subid("137_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "scope_declarator:sym<has>"  :subid("142_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx567_tgt
-    .local int rx567_pos
-    .local int rx567_off
-    .local int rx567_eos
-    .local int rx567_rep
-    .local pmc rx567_cur
-    (rx567_cur, rx567_pos, rx567_tgt) = self."!cursor_start"()
-    rx567_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
-    .lex unicode:"$\x{a2}", rx567_cur
+    .local string rx591_tgt
+    .local int rx591_pos
+    .local int rx591_off
+    .local int rx591_eos
+    .local int rx591_rep
+    .local pmc rx591_cur
+    (rx591_cur, rx591_pos, rx591_tgt) = self."!cursor_start"()
+    rx591_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
+    .lex unicode:"$\x{a2}", rx591_cur
     .local pmc match
     .lex "$/", match
-    length rx567_eos, rx567_tgt
-    set rx567_off, 0
-    lt rx567_pos, 2, rx567_start
-    sub rx567_off, rx567_pos, 1
-    substr rx567_tgt, rx567_tgt, rx567_off
-  rx567_start:
+    length rx591_eos, rx591_tgt
+    gt rx591_pos, rx591_eos, rx591_done
+    set rx591_off, 0
+    lt rx591_pos, 2, rx591_start
+    sub rx591_off, rx591_pos, 1
+    substr rx591_tgt, rx591_tgt, rx591_off
+  rx591_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan571_done
-    goto rxscan571_scan
-  rxscan571_loop:
-    ($P10) = rx567_cur."from"()
+    ne $I10, -1, rxscan595_done
+    goto rxscan595_scan
+  rxscan595_loop:
+    ($P10) = rx591_cur."from"()
     inc $P10
-    set rx567_pos, $P10
-    ge rx567_pos, rx567_eos, rxscan571_done
-  rxscan571_scan:
-    set_addr $I10, rxscan571_loop
-    rx567_cur."!mark_push"(0, rx567_pos, $I10)
-  rxscan571_done:
-.annotate 'line', 271
+    set rx591_pos, $P10
+    ge rx591_pos, rx591_eos, rxscan595_done
+  rxscan595_scan:
+    set_addr $I10, rxscan595_loop
+    rx591_cur."!mark_push"(0, rx591_pos, $I10)
+  rxscan595_done:
+.annotate 'line', 275
   # rx subcapture "sym"
-    set_addr $I10, rxcap_572_fail
-    rx567_cur."!mark_push"(0, rx567_pos, $I10)
+    set_addr $I10, rxcap_596_fail
+    rx591_cur."!mark_push"(0, rx591_pos, $I10)
   # rx literal  "has"
-    add $I11, rx567_pos, 3
-    gt $I11, rx567_eos, rx567_fail
-    sub $I11, rx567_pos, rx567_off
-    substr $S10, rx567_tgt, $I11, 3
-    ne $S10, "has", rx567_fail
-    add rx567_pos, 3
-    set_addr $I10, rxcap_572_fail
-    ($I12, $I11) = rx567_cur."!mark_peek"($I10)
-    rx567_cur."!cursor_pos"($I11)
-    ($P10) = rx567_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx567_pos, "")
-    rx567_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx591_pos, 3
+    gt $I11, rx591_eos, rx591_fail
+    sub $I11, rx591_pos, rx591_off
+    substr $S10, rx591_tgt, $I11, 3
+    ne $S10, "has", rx591_fail
+    add rx591_pos, 3
+    set_addr $I10, rxcap_596_fail
+    ($I12, $I11) = rx591_cur."!mark_peek"($I10)
+    rx591_cur."!cursor_pos"($I11)
+    ($P10) = rx591_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx591_pos, "")
+    rx591_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_572_done
-  rxcap_572_fail:
-    goto rx567_fail
-  rxcap_572_done:
+    goto rxcap_596_done
+  rxcap_596_fail:
+    goto rx591_fail
+  rxcap_596_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx567_cur."!cursor_pos"(rx567_pos)
-    $P10 = rx567_cur."scoped"("has")
-    unless $P10, rx567_fail
-    rx567_cur."!mark_push"(0, -1, 0, $P10)
+    rx591_cur."!cursor_pos"(rx591_pos)
+    $P10 = rx591_cur."scoped"("has")
+    unless $P10, rx591_fail
+    rx591_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx567_pos = $P10."pos"()
+    rx591_pos = $P10."pos"()
   # rx pass
-    rx567_cur."!cursor_pass"(rx567_pos, "scope_declarator:sym<has>")
-    rx567_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx567_pos)
-    .return (rx567_cur)
-  rx567_fail:
+    rx591_cur."!cursor_pass"(rx591_pos, "scope_declarator:sym<has>")
+    rx591_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx591_pos)
+    .return (rx591_cur)
+  rx591_fail:
 .annotate 'line', 4
-    (rx567_rep, rx567_pos, $I10, $P10) = rx567_cur."!mark_fail"(0)
-    lt rx567_pos, -1, rx567_done
-    eq rx567_pos, -1, rx567_fail
+    (rx591_rep, rx591_pos, $I10, $P10) = rx591_cur."!mark_fail"(0)
+    lt rx591_pos, -1, rx591_done
+    eq rx591_pos, -1, rx591_fail
     jump $I10
-  rx567_done:
-    rx567_cur."!cursor_fail"()
-    rx567_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
-    .return (rx567_cur)
+  rx591_done:
+    rx591_cur."!cursor_fail"()
+    rx591_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
+    .return (rx591_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1274022894.43745") :method
+.sub "!PREFIX__scope_declarator:sym<has>"  :subid("143_1275811487.95429") :method
 .annotate 'line', 4
-    $P569 = self."!PREFIX__!subrule"("scoped", "has")
-    new $P570, "ResizablePMCArray"
-    push $P570, $P569
-    .return ($P570)
+    $P593 = self."!PREFIX__!subrule"("scoped", "has")
+    new $P594, "ResizablePMCArray"
+    push $P594, $P593
+    .return ($P594)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scoped"  :subid("139_1274022894.43745") :method :outer("11_1274022894.43745")
-    .param pmc param_574
-.annotate 'line', 273
-    .lex "$*SCOPE", param_574
+.sub "scoped"  :subid("144_1275811487.95429") :method :outer("11_1275811487.95429")
+    .param pmc param_598
+.annotate 'line', 277
+    .lex "$*SCOPE", param_598
 .annotate 'line', 4
-    .local string rx575_tgt
-    .local int rx575_pos
-    .local int rx575_off
-    .local int rx575_eos
-    .local int rx575_rep
-    .local pmc rx575_cur
-    (rx575_cur, rx575_pos, rx575_tgt) = self."!cursor_start"()
-    rx575_cur."!cursor_debug"("START ", "scoped")
-    rx575_cur."!cursor_caparray"("typename")
-    .lex unicode:"$\x{a2}", rx575_cur
-    .local pmc match
-    .lex "$/", match
-    length rx575_eos, rx575_tgt
-    set rx575_off, 0
-    lt rx575_pos, 2, rx575_start
-    sub rx575_off, rx575_pos, 1
-    substr rx575_tgt, rx575_tgt, rx575_off
-  rx575_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan578_done
-    goto rxscan578_scan
-  rxscan578_loop:
-    ($P10) = rx575_cur."from"()
-    inc $P10
-    set rx575_pos, $P10
-    ge rx575_pos, rx575_eos, rxscan578_done
-  rxscan578_scan:
-    set_addr $I10, rxscan578_loop
-    rx575_cur."!mark_push"(0, rx575_pos, $I10)
-  rxscan578_done:
-  alt579_0:
-.annotate 'line', 273
-    set_addr $I10, alt579_1
-    rx575_cur."!mark_push"(0, rx575_pos, $I10)
-.annotate 'line', 274
-  # rx subrule "ws" subtype=method negate=
-    rx575_cur."!cursor_pos"(rx575_pos)
-    $P10 = rx575_cur."ws"()
-    unless $P10, rx575_fail
-    rx575_pos = $P10."pos"()
-  # rx subrule "declarator" subtype=capture negate=
-    rx575_cur."!cursor_pos"(rx575_pos)
-    $P10 = rx575_cur."declarator"()
-    unless $P10, rx575_fail
-    rx575_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("declarator")
-    rx575_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx575_cur."!cursor_pos"(rx575_pos)
-    $P10 = rx575_cur."ws"()
-    unless $P10, rx575_fail
-    rx575_pos = $P10."pos"()
-    goto alt579_end
-  alt579_1:
-.annotate 'line', 275
+    .local string rx599_tgt
+    .local int rx599_pos
+    .local int rx599_off
+    .local int rx599_eos
+    .local int rx599_rep
+    .local pmc rx599_cur
+    (rx599_cur, rx599_pos, rx599_tgt) = self."!cursor_start"()
+    rx599_cur."!cursor_debug"("START ", "scoped")
+    .lex unicode:"$\x{a2}", rx599_cur
+    .local pmc match
+    .lex "$/", match
+    length rx599_eos, rx599_tgt
+    gt rx599_pos, rx599_eos, rx599_done
+    set rx599_off, 0
+    lt rx599_pos, 2, rx599_start
+    sub rx599_off, rx599_pos, 1
+    substr rx599_tgt, rx599_tgt, rx599_off
+  rx599_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan604_done
+    goto rxscan604_scan
+  rxscan604_loop:
+    ($P10) = rx599_cur."from"()
+    inc $P10
+    set rx599_pos, $P10
+    ge rx599_pos, rx599_eos, rxscan604_done
+  rxscan604_scan:
+    set_addr $I10, rxscan604_loop
+    rx599_cur."!mark_push"(0, rx599_pos, $I10)
+  rxscan604_done:
+  alt605_0:
+.annotate 'line', 277
+    set_addr $I10, alt605_1
+    rx599_cur."!mark_push"(0, rx599_pos, $I10)
+.annotate 'line', 278
   # rx subrule "ws" subtype=method negate=
-    rx575_cur."!cursor_pos"(rx575_pos)
-    $P10 = rx575_cur."ws"()
-    unless $P10, rx575_fail
-    rx575_pos = $P10."pos"()
-  # rx rxquantr583 ** 1..*
-    set_addr $I584, rxquantr583_done
-    rx575_cur."!mark_push"(0, -1, $I584)
-  rxquantr583_loop:
-  # rx subrule "typename" subtype=capture negate=
-    rx575_cur."!cursor_pos"(rx575_pos)
-    $P10 = rx575_cur."typename"()
-    unless $P10, rx575_fail
-    rx575_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("typename")
-    rx575_pos = $P10."pos"()
-    (rx575_rep) = rx575_cur."!mark_commit"($I584)
-    rx575_cur."!mark_push"(rx575_rep, rx575_pos, $I584)
-    goto rxquantr583_loop
-  rxquantr583_done:
-  # rx subrule "ws" subtype=method negate=
-    rx575_cur."!cursor_pos"(rx575_pos)
-    $P10 = rx575_cur."ws"()
-    unless $P10, rx575_fail
-    rx575_pos = $P10."pos"()
+    rx599_cur."!cursor_pos"(rx599_pos)
+    $P10 = rx599_cur."ws"()
+    unless $P10, rx599_fail
+    rx599_pos = $P10."pos"()
   # rx subrule "declarator" subtype=capture negate=
-    rx575_cur."!cursor_pos"(rx575_pos)
-    $P10 = rx575_cur."declarator"()
-    unless $P10, rx575_fail
-    rx575_cur."!mark_push"(0, -1, 0, $P10)
+    rx599_cur."!cursor_pos"(rx599_pos)
+    $P10 = rx599_cur."declarator"()
+    unless $P10, rx599_fail
+    rx599_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("declarator")
-    rx575_pos = $P10."pos"()
+    rx599_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx575_cur."!cursor_pos"(rx575_pos)
-    $P10 = rx575_cur."ws"()
-    unless $P10, rx575_fail
-    rx575_pos = $P10."pos"()
-  alt579_end:
-.annotate 'line', 273
+    rx599_cur."!cursor_pos"(rx599_pos)
+    $P10 = rx599_cur."ws"()
+    unless $P10, rx599_fail
+    rx599_pos = $P10."pos"()
+    goto alt605_end
+  alt605_1:
+.annotate 'line', 279
+  # rx subrule "ws" subtype=method negate=
+    rx599_cur."!cursor_pos"(rx599_pos)
+    $P10 = rx599_cur."ws"()
+    unless $P10, rx599_fail
+    rx599_pos = $P10."pos"()
+  # rx subrule "multi_declarator" subtype=capture negate=
+    rx599_cur."!cursor_pos"(rx599_pos)
+    $P10 = rx599_cur."multi_declarator"()
+    unless $P10, rx599_fail
+    rx599_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("multi_declarator")
+    rx599_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx599_cur."!cursor_pos"(rx599_pos)
+    $P10 = rx599_cur."ws"()
+    unless $P10, rx599_fail
+    rx599_pos = $P10."pos"()
+  alt605_end:
+.annotate 'line', 277
   # rx pass
-    rx575_cur."!cursor_pass"(rx575_pos, "scoped")
-    rx575_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx575_pos)
-    .return (rx575_cur)
-  rx575_fail:
+    rx599_cur."!cursor_pass"(rx599_pos, "scoped")
+    rx599_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx599_pos)
+    .return (rx599_cur)
+  rx599_fail:
 .annotate 'line', 4
-    (rx575_rep, rx575_pos, $I10, $P10) = rx575_cur."!mark_fail"(0)
-    lt rx575_pos, -1, rx575_done
-    eq rx575_pos, -1, rx575_fail
+    (rx599_rep, rx599_pos, $I10, $P10) = rx599_cur."!mark_fail"(0)
+    lt rx599_pos, -1, rx599_done
+    eq rx599_pos, -1, rx599_fail
     jump $I10
-  rx575_done:
-    rx575_cur."!cursor_fail"()
-    rx575_cur."!cursor_debug"("FAIL  ", "scoped")
-    .return (rx575_cur)
+  rx599_done:
+    rx599_cur."!cursor_fail"()
+    rx599_cur."!cursor_debug"("FAIL  ", "scoped")
+    .return (rx599_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scoped"  :subid("140_1274022894.43745") :method
+.sub "!PREFIX__scoped"  :subid("145_1275811487.95429") :method
 .annotate 'line', 4
-    new $P577, "ResizablePMCArray"
-    push $P577, ""
-    push $P577, ""
-    .return ($P577)
+    $P601 = self."!PREFIX__!subrule"("ws", "")
+    $P602 = self."!PREFIX__!subrule"("ws", "")
+    new $P603, "ResizablePMCArray"
+    push $P603, $P601
+    push $P603, $P602
+    .return ($P603)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "typename"  :subid("141_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "typename"  :subid("146_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx588_tgt
-    .local int rx588_pos
-    .local int rx588_off
-    .local int rx588_eos
-    .local int rx588_rep
-    .local pmc rx588_cur
-    (rx588_cur, rx588_pos, rx588_tgt) = self."!cursor_start"()
-    rx588_cur."!cursor_debug"("START ", "typename")
-    .lex unicode:"$\x{a2}", rx588_cur
+    .local string rx611_tgt
+    .local int rx611_pos
+    .local int rx611_off
+    .local int rx611_eos
+    .local int rx611_rep
+    .local pmc rx611_cur
+    (rx611_cur, rx611_pos, rx611_tgt) = self."!cursor_start"()
+    rx611_cur."!cursor_debug"("START ", "typename")
+    .lex unicode:"$\x{a2}", rx611_cur
     .local pmc match
     .lex "$/", match
-    length rx588_eos, rx588_tgt
-    set rx588_off, 0
-    lt rx588_pos, 2, rx588_start
-    sub rx588_off, rx588_pos, 1
-    substr rx588_tgt, rx588_tgt, rx588_off
-  rx588_start:
+    length rx611_eos, rx611_tgt
+    gt rx611_pos, rx611_eos, rx611_done
+    set rx611_off, 0
+    lt rx611_pos, 2, rx611_start
+    sub rx611_off, rx611_pos, 1
+    substr rx611_tgt, rx611_tgt, rx611_off
+  rx611_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan592_done
-    goto rxscan592_scan
-  rxscan592_loop:
-    ($P10) = rx588_cur."from"()
+    ne $I10, -1, rxscan615_done
+    goto rxscan615_scan
+  rxscan615_loop:
+    ($P10) = rx611_cur."from"()
     inc $P10
-    set rx588_pos, $P10
-    ge rx588_pos, rx588_eos, rxscan592_done
-  rxscan592_scan:
-    set_addr $I10, rxscan592_loop
-    rx588_cur."!mark_push"(0, rx588_pos, $I10)
-  rxscan592_done:
-.annotate 'line', 278
+    set rx611_pos, $P10
+    ge rx611_pos, rx611_eos, rxscan615_done
+  rxscan615_scan:
+    set_addr $I10, rxscan615_loop
+    rx611_cur."!mark_push"(0, rx611_pos, $I10)
+  rxscan615_done:
+.annotate 'line', 282
   # rx subrule "name" subtype=capture negate=
-    rx588_cur."!cursor_pos"(rx588_pos)
-    $P10 = rx588_cur."name"()
-    unless $P10, rx588_fail
-    rx588_cur."!mark_push"(0, -1, 0, $P10)
+    rx611_cur."!cursor_pos"(rx611_pos)
+    $P10 = rx611_cur."name"()
+    unless $P10, rx611_fail
+    rx611_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx588_pos = $P10."pos"()
+    rx611_pos = $P10."pos"()
   # rx pass
-    rx588_cur."!cursor_pass"(rx588_pos, "typename")
-    rx588_cur."!cursor_debug"("PASS  ", "typename", " at pos=", rx588_pos)
-    .return (rx588_cur)
-  rx588_fail:
+    rx611_cur."!cursor_pass"(rx611_pos, "typename")
+    rx611_cur."!cursor_debug"("PASS  ", "typename", " at pos=", rx611_pos)
+    .return (rx611_cur)
+  rx611_fail:
 .annotate 'line', 4
-    (rx588_rep, rx588_pos, $I10, $P10) = rx588_cur."!mark_fail"(0)
-    lt rx588_pos, -1, rx588_done
-    eq rx588_pos, -1, rx588_fail
+    (rx611_rep, rx611_pos, $I10, $P10) = rx611_cur."!mark_fail"(0)
+    lt rx611_pos, -1, rx611_done
+    eq rx611_pos, -1, rx611_fail
     jump $I10
-  rx588_done:
-    rx588_cur."!cursor_fail"()
-    rx588_cur."!cursor_debug"("FAIL  ", "typename")
-    .return (rx588_cur)
+  rx611_done:
+    rx611_cur."!cursor_fail"()
+    rx611_cur."!cursor_debug"("FAIL  ", "typename")
+    .return (rx611_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__typename"  :subid("142_1274022894.43745") :method
+.sub "!PREFIX__typename"  :subid("147_1275811487.95429") :method
 .annotate 'line', 4
-    $P590 = self."!PREFIX__!subrule"("name", "")
-    new $P591, "ResizablePMCArray"
-    push $P591, $P590
-    .return ($P591)
+    $P613 = self."!PREFIX__!subrule"("name", "")
+    new $P614, "ResizablePMCArray"
+    push $P614, $P613
+    .return ($P614)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "declarator"  :subid("143_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "declarator"  :subid("148_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx594_tgt
-    .local int rx594_pos
-    .local int rx594_off
-    .local int rx594_eos
-    .local int rx594_rep
-    .local pmc rx594_cur
-    (rx594_cur, rx594_pos, rx594_tgt) = self."!cursor_start"()
-    rx594_cur."!cursor_debug"("START ", "declarator")
-    .lex unicode:"$\x{a2}", rx594_cur
+    .local string rx617_tgt
+    .local int rx617_pos
+    .local int rx617_off
+    .local int rx617_eos
+    .local int rx617_rep
+    .local pmc rx617_cur
+    (rx617_cur, rx617_pos, rx617_tgt) = self."!cursor_start"()
+    rx617_cur."!cursor_debug"("START ", "declarator")
+    .lex unicode:"$\x{a2}", rx617_cur
     .local pmc match
     .lex "$/", match
-    length rx594_eos, rx594_tgt
-    set rx594_off, 0
-    lt rx594_pos, 2, rx594_start
-    sub rx594_off, rx594_pos, 1
-    substr rx594_tgt, rx594_tgt, rx594_off
-  rx594_start:
+    length rx617_eos, rx617_tgt
+    gt rx617_pos, rx617_eos, rx617_done
+    set rx617_off, 0
+    lt rx617_pos, 2, rx617_start
+    sub rx617_off, rx617_pos, 1
+    substr rx617_tgt, rx617_tgt, rx617_off
+  rx617_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan599_done
-    goto rxscan599_scan
-  rxscan599_loop:
-    ($P10) = rx594_cur."from"()
+    ne $I10, -1, rxscan622_done
+    goto rxscan622_scan
+  rxscan622_loop:
+    ($P10) = rx617_cur."from"()
     inc $P10
-    set rx594_pos, $P10
-    ge rx594_pos, rx594_eos, rxscan599_done
-  rxscan599_scan:
-    set_addr $I10, rxscan599_loop
-    rx594_cur."!mark_push"(0, rx594_pos, $I10)
-  rxscan599_done:
-  alt600_0:
-.annotate 'line', 280
-    set_addr $I10, alt600_1
-    rx594_cur."!mark_push"(0, rx594_pos, $I10)
-.annotate 'line', 281
+    set rx617_pos, $P10
+    ge rx617_pos, rx617_eos, rxscan622_done
+  rxscan622_scan:
+    set_addr $I10, rxscan622_loop
+    rx617_cur."!mark_push"(0, rx617_pos, $I10)
+  rxscan622_done:
+  alt623_0:
+.annotate 'line', 284
+    set_addr $I10, alt623_1
+    rx617_cur."!mark_push"(0, rx617_pos, $I10)
+.annotate 'line', 285
   # rx subrule "variable_declarator" subtype=capture negate=
-    rx594_cur."!cursor_pos"(rx594_pos)
-    $P10 = rx594_cur."variable_declarator"()
-    unless $P10, rx594_fail
-    rx594_cur."!mark_push"(0, -1, 0, $P10)
+    rx617_cur."!cursor_pos"(rx617_pos)
+    $P10 = rx617_cur."variable_declarator"()
+    unless $P10, rx617_fail
+    rx617_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable_declarator")
-    rx594_pos = $P10."pos"()
-    goto alt600_end
-  alt600_1:
-.annotate 'line', 282
+    rx617_pos = $P10."pos"()
+    goto alt623_end
+  alt623_1:
+.annotate 'line', 286
   # rx subrule "routine_declarator" subtype=capture negate=
-    rx594_cur."!cursor_pos"(rx594_pos)
-    $P10 = rx594_cur."routine_declarator"()
-    unless $P10, rx594_fail
-    rx594_cur."!mark_push"(0, -1, 0, $P10)
+    rx617_cur."!cursor_pos"(rx617_pos)
+    $P10 = rx617_cur."routine_declarator"()
+    unless $P10, rx617_fail
+    rx617_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_declarator")
-    rx594_pos = $P10."pos"()
-  alt600_end:
-.annotate 'line', 280
+    rx617_pos = $P10."pos"()
+  alt623_end:
+.annotate 'line', 284
   # rx pass
-    rx594_cur."!cursor_pass"(rx594_pos, "declarator")
-    rx594_cur."!cursor_debug"("PASS  ", "declarator", " at pos=", rx594_pos)
-    .return (rx594_cur)
-  rx594_fail:
+    rx617_cur."!cursor_pass"(rx617_pos, "declarator")
+    rx617_cur."!cursor_debug"("PASS  ", "declarator", " at pos=", rx617_pos)
+    .return (rx617_cur)
+  rx617_fail:
 .annotate 'line', 4
-    (rx594_rep, rx594_pos, $I10, $P10) = rx594_cur."!mark_fail"(0)
-    lt rx594_pos, -1, rx594_done
-    eq rx594_pos, -1, rx594_fail
+    (rx617_rep, rx617_pos, $I10, $P10) = rx617_cur."!mark_fail"(0)
+    lt rx617_pos, -1, rx617_done
+    eq rx617_pos, -1, rx617_fail
     jump $I10
-  rx594_done:
-    rx594_cur."!cursor_fail"()
-    rx594_cur."!cursor_debug"("FAIL  ", "declarator")
-    .return (rx594_cur)
+  rx617_done:
+    rx617_cur."!cursor_fail"()
+    rx617_cur."!cursor_debug"("FAIL  ", "declarator")
+    .return (rx617_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__declarator"  :subid("144_1274022894.43745") :method
+.sub "!PREFIX__declarator"  :subid("149_1275811487.95429") :method
 .annotate 'line', 4
-    $P596 = self."!PREFIX__!subrule"("routine_declarator", "")
-    $P597 = self."!PREFIX__!subrule"("variable_declarator", "")
-    new $P598, "ResizablePMCArray"
-    push $P598, $P596
-    push $P598, $P597
-    .return ($P598)
+    $P619 = self."!PREFIX__!subrule"("routine_declarator", "")
+    $P620 = self."!PREFIX__!subrule"("variable_declarator", "")
+    new $P621, "ResizablePMCArray"
+    push $P621, $P619
+    push $P621, $P620
+    .return ($P621)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable_declarator"  :subid("145_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "variable_declarator"  :subid("150_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx602_tgt
-    .local int rx602_pos
-    .local int rx602_off
-    .local int rx602_eos
-    .local int rx602_rep
-    .local pmc rx602_cur
-    (rx602_cur, rx602_pos, rx602_tgt) = self."!cursor_start"()
-    rx602_cur."!cursor_debug"("START ", "variable_declarator")
-    .lex unicode:"$\x{a2}", rx602_cur
+    .local string rx625_tgt
+    .local int rx625_pos
+    .local int rx625_off
+    .local int rx625_eos
+    .local int rx625_rep
+    .local pmc rx625_cur
+    (rx625_cur, rx625_pos, rx625_tgt) = self."!cursor_start"()
+    rx625_cur."!cursor_debug"("START ", "variable_declarator")
+    .lex unicode:"$\x{a2}", rx625_cur
     .local pmc match
     .lex "$/", match
-    length rx602_eos, rx602_tgt
-    set rx602_off, 0
-    lt rx602_pos, 2, rx602_start
-    sub rx602_off, rx602_pos, 1
-    substr rx602_tgt, rx602_tgt, rx602_off
-  rx602_start:
+    length rx625_eos, rx625_tgt
+    gt rx625_pos, rx625_eos, rx625_done
+    set rx625_off, 0
+    lt rx625_pos, 2, rx625_start
+    sub rx625_off, rx625_pos, 1
+    substr rx625_tgt, rx625_tgt, rx625_off
+  rx625_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan606_done
-    goto rxscan606_scan
-  rxscan606_loop:
-    ($P10) = rx602_cur."from"()
+    ne $I10, -1, rxscan629_done
+    goto rxscan629_scan
+  rxscan629_loop:
+    ($P10) = rx625_cur."from"()
     inc $P10
-    set rx602_pos, $P10
-    ge rx602_pos, rx602_eos, rxscan606_done
-  rxscan606_scan:
-    set_addr $I10, rxscan606_loop
-    rx602_cur."!mark_push"(0, rx602_pos, $I10)
-  rxscan606_done:
-.annotate 'line', 285
+    set rx625_pos, $P10
+    ge rx625_pos, rx625_eos, rxscan629_done
+  rxscan629_scan:
+    set_addr $I10, rxscan629_loop
+    rx625_cur."!mark_push"(0, rx625_pos, $I10)
+  rxscan629_done:
+.annotate 'line', 289
   # rx subrule "variable" subtype=capture negate=
-    rx602_cur."!cursor_pos"(rx602_pos)
-    $P10 = rx602_cur."variable"()
-    unless $P10, rx602_fail
-    rx602_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."variable"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx602_pos = $P10."pos"()
+    rx625_pos = $P10."pos"()
   # rx pass
-    rx602_cur."!cursor_pass"(rx602_pos, "variable_declarator")
-    rx602_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx602_pos)
-    .return (rx602_cur)
-  rx602_fail:
+    rx625_cur."!cursor_pass"(rx625_pos, "variable_declarator")
+    rx625_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx625_pos)
+    .return (rx625_cur)
+  rx625_fail:
 .annotate 'line', 4
-    (rx602_rep, rx602_pos, $I10, $P10) = rx602_cur."!mark_fail"(0)
-    lt rx602_pos, -1, rx602_done
-    eq rx602_pos, -1, rx602_fail
+    (rx625_rep, rx625_pos, $I10, $P10) = rx625_cur."!mark_fail"(0)
+    lt rx625_pos, -1, rx625_done
+    eq rx625_pos, -1, rx625_fail
     jump $I10
-  rx602_done:
-    rx602_cur."!cursor_fail"()
-    rx602_cur."!cursor_debug"("FAIL  ", "variable_declarator")
-    .return (rx602_cur)
+  rx625_done:
+    rx625_cur."!cursor_fail"()
+    rx625_cur."!cursor_debug"("FAIL  ", "variable_declarator")
+    .return (rx625_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable_declarator"  :subid("146_1274022894.43745") :method
+.sub "!PREFIX__variable_declarator"  :subid("151_1275811487.95429") :method
 .annotate 'line', 4
-    $P604 = self."!PREFIX__!subrule"("variable", "")
-    new $P605, "ResizablePMCArray"
-    push $P605, $P604
-    .return ($P605)
+    $P627 = self."!PREFIX__!subrule"("variable", "")
+    new $P628, "ResizablePMCArray"
+    push $P628, $P627
+    .return ($P628)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator"  :subid("147_1274022894.43745") :method
-.annotate 'line', 287
-    $P608 = self."!protoregex"("routine_declarator")
-    .return ($P608)
+.sub "routine_declarator"  :subid("152_1275811487.95429") :method
+.annotate 'line', 291
+    $P631 = self."!protoregex"("routine_declarator")
+    .return ($P631)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator"  :subid("148_1274022894.43745") :method
-.annotate 'line', 287
-    $P610 = self."!PREFIX__!protoregex"("routine_declarator")
-    .return ($P610)
+.sub "!PREFIX__routine_declarator"  :subid("153_1275811487.95429") :method
+.annotate 'line', 291
+    $P633 = self."!PREFIX__!protoregex"("routine_declarator")
+    .return ($P633)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<sub>"  :subid("149_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "routine_declarator:sym<sub>"  :subid("154_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx612_tgt
-    .local int rx612_pos
-    .local int rx612_off
-    .local int rx612_eos
-    .local int rx612_rep
-    .local pmc rx612_cur
-    (rx612_cur, rx612_pos, rx612_tgt) = self."!cursor_start"()
-    rx612_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
-    .lex unicode:"$\x{a2}", rx612_cur
-    .local pmc match
-    .lex "$/", match
-    length rx612_eos, rx612_tgt
-    set rx612_off, 0
-    lt rx612_pos, 2, rx612_start
-    sub rx612_off, rx612_pos, 1
-    substr rx612_tgt, rx612_tgt, rx612_off
-  rx612_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan616_done
-    goto rxscan616_scan
-  rxscan616_loop:
-    ($P10) = rx612_cur."from"()
-    inc $P10
-    set rx612_pos, $P10
-    ge rx612_pos, rx612_eos, rxscan616_done
-  rxscan616_scan:
-    set_addr $I10, rxscan616_loop
-    rx612_cur."!mark_push"(0, rx612_pos, $I10)
-  rxscan616_done:
-.annotate 'line', 288
+    .local string rx635_tgt
+    .local int rx635_pos
+    .local int rx635_off
+    .local int rx635_eos
+    .local int rx635_rep
+    .local pmc rx635_cur
+    (rx635_cur, rx635_pos, rx635_tgt) = self."!cursor_start"()
+    rx635_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
+    .lex unicode:"$\x{a2}", rx635_cur
+    .local pmc match
+    .lex "$/", match
+    length rx635_eos, rx635_tgt
+    gt rx635_pos, rx635_eos, rx635_done
+    set rx635_off, 0
+    lt rx635_pos, 2, rx635_start
+    sub rx635_off, rx635_pos, 1
+    substr rx635_tgt, rx635_tgt, rx635_off
+  rx635_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan639_done
+    goto rxscan639_scan
+  rxscan639_loop:
+    ($P10) = rx635_cur."from"()
+    inc $P10
+    set rx635_pos, $P10
+    ge rx635_pos, rx635_eos, rxscan639_done
+  rxscan639_scan:
+    set_addr $I10, rxscan639_loop
+    rx635_cur."!mark_push"(0, rx635_pos, $I10)
+  rxscan639_done:
+.annotate 'line', 292
   # rx subcapture "sym"
-    set_addr $I10, rxcap_617_fail
-    rx612_cur."!mark_push"(0, rx612_pos, $I10)
+    set_addr $I10, rxcap_640_fail
+    rx635_cur."!mark_push"(0, rx635_pos, $I10)
   # rx literal  "sub"
-    add $I11, rx612_pos, 3
-    gt $I11, rx612_eos, rx612_fail
-    sub $I11, rx612_pos, rx612_off
-    substr $S10, rx612_tgt, $I11, 3
-    ne $S10, "sub", rx612_fail
-    add rx612_pos, 3
-    set_addr $I10, rxcap_617_fail
-    ($I12, $I11) = rx612_cur."!mark_peek"($I10)
-    rx612_cur."!cursor_pos"($I11)
-    ($P10) = rx612_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx612_pos, "")
-    rx612_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx635_pos, 3
+    gt $I11, rx635_eos, rx635_fail
+    sub $I11, rx635_pos, rx635_off
+    substr $S10, rx635_tgt, $I11, 3
+    ne $S10, "sub", rx635_fail
+    add rx635_pos, 3
+    set_addr $I10, rxcap_640_fail
+    ($I12, $I11) = rx635_cur."!mark_peek"($I10)
+    rx635_cur."!cursor_pos"($I11)
+    ($P10) = rx635_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx635_pos, "")
+    rx635_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_617_done
-  rxcap_617_fail:
-    goto rx612_fail
-  rxcap_617_done:
+    goto rxcap_640_done
+  rxcap_640_fail:
+    goto rx635_fail
+  rxcap_640_done:
   # rx subrule "routine_def" subtype=capture negate=
-    rx612_cur."!cursor_pos"(rx612_pos)
-    $P10 = rx612_cur."routine_def"()
-    unless $P10, rx612_fail
-    rx612_cur."!mark_push"(0, -1, 0, $P10)
+    rx635_cur."!cursor_pos"(rx635_pos)
+    $P10 = rx635_cur."routine_def"()
+    unless $P10, rx635_fail
+    rx635_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_def")
-    rx612_pos = $P10."pos"()
+    rx635_pos = $P10."pos"()
   # rx pass
-    rx612_cur."!cursor_pass"(rx612_pos, "routine_declarator:sym<sub>")
-    rx612_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx612_pos)
-    .return (rx612_cur)
-  rx612_fail:
+    rx635_cur."!cursor_pass"(rx635_pos, "routine_declarator:sym<sub>")
+    rx635_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx635_pos)
+    .return (rx635_cur)
+  rx635_fail:
 .annotate 'line', 4
-    (rx612_rep, rx612_pos, $I10, $P10) = rx612_cur."!mark_fail"(0)
-    lt rx612_pos, -1, rx612_done
-    eq rx612_pos, -1, rx612_fail
+    (rx635_rep, rx635_pos, $I10, $P10) = rx635_cur."!mark_fail"(0)
+    lt rx635_pos, -1, rx635_done
+    eq rx635_pos, -1, rx635_fail
     jump $I10
-  rx612_done:
-    rx612_cur."!cursor_fail"()
-    rx612_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
-    .return (rx612_cur)
+  rx635_done:
+    rx635_cur."!cursor_fail"()
+    rx635_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
+    .return (rx635_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("150_1274022894.43745") :method
+.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("155_1275811487.95429") :method
 .annotate 'line', 4
-    $P614 = self."!PREFIX__!subrule"("routine_def", "sub")
-    new $P615, "ResizablePMCArray"
-    push $P615, $P614
-    .return ($P615)
+    $P637 = self."!PREFIX__!subrule"("routine_def", "sub")
+    new $P638, "ResizablePMCArray"
+    push $P638, $P637
+    .return ($P638)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<method>"  :subid("151_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "routine_declarator:sym<method>"  :subid("156_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx619_tgt
-    .local int rx619_pos
-    .local int rx619_off
-    .local int rx619_eos
-    .local int rx619_rep
-    .local pmc rx619_cur
-    (rx619_cur, rx619_pos, rx619_tgt) = self."!cursor_start"()
-    rx619_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
-    .lex unicode:"$\x{a2}", rx619_cur
+    .local string rx642_tgt
+    .local int rx642_pos
+    .local int rx642_off
+    .local int rx642_eos
+    .local int rx642_rep
+    .local pmc rx642_cur
+    (rx642_cur, rx642_pos, rx642_tgt) = self."!cursor_start"()
+    rx642_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
+    .lex unicode:"$\x{a2}", rx642_cur
     .local pmc match
     .lex "$/", match
-    length rx619_eos, rx619_tgt
-    set rx619_off, 0
-    lt rx619_pos, 2, rx619_start
-    sub rx619_off, rx619_pos, 1
-    substr rx619_tgt, rx619_tgt, rx619_off
-  rx619_start:
+    length rx642_eos, rx642_tgt
+    gt rx642_pos, rx642_eos, rx642_done
+    set rx642_off, 0
+    lt rx642_pos, 2, rx642_start
+    sub rx642_off, rx642_pos, 1
+    substr rx642_tgt, rx642_tgt, rx642_off
+  rx642_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan623_done
-    goto rxscan623_scan
-  rxscan623_loop:
-    ($P10) = rx619_cur."from"()
+    ne $I10, -1, rxscan646_done
+    goto rxscan646_scan
+  rxscan646_loop:
+    ($P10) = rx642_cur."from"()
     inc $P10
-    set rx619_pos, $P10
-    ge rx619_pos, rx619_eos, rxscan623_done
-  rxscan623_scan:
-    set_addr $I10, rxscan623_loop
-    rx619_cur."!mark_push"(0, rx619_pos, $I10)
-  rxscan623_done:
-.annotate 'line', 289
+    set rx642_pos, $P10
+    ge rx642_pos, rx642_eos, rxscan646_done
+  rxscan646_scan:
+    set_addr $I10, rxscan646_loop
+    rx642_cur."!mark_push"(0, rx642_pos, $I10)
+  rxscan646_done:
+.annotate 'line', 293
   # rx subcapture "sym"
-    set_addr $I10, rxcap_624_fail
-    rx619_cur."!mark_push"(0, rx619_pos, $I10)
+    set_addr $I10, rxcap_647_fail
+    rx642_cur."!mark_push"(0, rx642_pos, $I10)
   # rx literal  "method"
-    add $I11, rx619_pos, 6
-    gt $I11, rx619_eos, rx619_fail
-    sub $I11, rx619_pos, rx619_off
-    substr $S10, rx619_tgt, $I11, 6
-    ne $S10, "method", rx619_fail
-    add rx619_pos, 6
-    set_addr $I10, rxcap_624_fail
-    ($I12, $I11) = rx619_cur."!mark_peek"($I10)
-    rx619_cur."!cursor_pos"($I11)
-    ($P10) = rx619_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx619_pos, "")
-    rx619_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx642_pos, 6
+    gt $I11, rx642_eos, rx642_fail
+    sub $I11, rx642_pos, rx642_off
+    substr $S10, rx642_tgt, $I11, 6
+    ne $S10, "method", rx642_fail
+    add rx642_pos, 6
+    set_addr $I10, rxcap_647_fail
+    ($I12, $I11) = rx642_cur."!mark_peek"($I10)
+    rx642_cur."!cursor_pos"($I11)
+    ($P10) = rx642_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx642_pos, "")
+    rx642_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_624_done
-  rxcap_624_fail:
-    goto rx619_fail
-  rxcap_624_done:
+    goto rxcap_647_done
+  rxcap_647_fail:
+    goto rx642_fail
+  rxcap_647_done:
   # rx subrule "method_def" subtype=capture negate=
-    rx619_cur."!cursor_pos"(rx619_pos)
-    $P10 = rx619_cur."method_def"()
-    unless $P10, rx619_fail
-    rx619_cur."!mark_push"(0, -1, 0, $P10)
+    rx642_cur."!cursor_pos"(rx642_pos)
+    $P10 = rx642_cur."method_def"()
+    unless $P10, rx642_fail
+    rx642_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("method_def")
-    rx619_pos = $P10."pos"()
+    rx642_pos = $P10."pos"()
   # rx pass
-    rx619_cur."!cursor_pass"(rx619_pos, "routine_declarator:sym<method>")
-    rx619_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx619_pos)
-    .return (rx619_cur)
-  rx619_fail:
+    rx642_cur."!cursor_pass"(rx642_pos, "routine_declarator:sym<method>")
+    rx642_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx642_pos)
+    .return (rx642_cur)
+  rx642_fail:
 .annotate 'line', 4
-    (rx619_rep, rx619_pos, $I10, $P10) = rx619_cur."!mark_fail"(0)
-    lt rx619_pos, -1, rx619_done
-    eq rx619_pos, -1, rx619_fail
+    (rx642_rep, rx642_pos, $I10, $P10) = rx642_cur."!mark_fail"(0)
+    lt rx642_pos, -1, rx642_done
+    eq rx642_pos, -1, rx642_fail
     jump $I10
-  rx619_done:
-    rx619_cur."!cursor_fail"()
-    rx619_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
-    .return (rx619_cur)
+  rx642_done:
+    rx642_cur."!cursor_fail"()
+    rx642_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
+    .return (rx642_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<method>"  :subid("152_1274022894.43745") :method
+.sub "!PREFIX__routine_declarator:sym<method>"  :subid("157_1275811487.95429") :method
 .annotate 'line', 4
-    $P621 = self."!PREFIX__!subrule"("method_def", "method")
-    new $P622, "ResizablePMCArray"
-    push $P622, $P621
-    .return ($P622)
+    $P644 = self."!PREFIX__!subrule"("method_def", "method")
+    new $P645, "ResizablePMCArray"
+    push $P645, $P644
+    .return ($P645)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_def"  :subid("153_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "routine_def"  :subid("158_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx626_tgt
-    .local int rx626_pos
-    .local int rx626_off
-    .local int rx626_eos
-    .local int rx626_rep
-    .local pmc rx626_cur
-    (rx626_cur, rx626_pos, rx626_tgt) = self."!cursor_start"()
-    rx626_cur."!cursor_debug"("START ", "routine_def")
-    rx626_cur."!cursor_caparray"("sigil", "deflongname")
-    .lex unicode:"$\x{a2}", rx626_cur
+    .local string rx649_tgt
+    .local int rx649_pos
+    .local int rx649_off
+    .local int rx649_eos
+    .local int rx649_rep
+    .local pmc rx649_cur
+    (rx649_cur, rx649_pos, rx649_tgt) = self."!cursor_start"()
+    rx649_cur."!cursor_debug"("START ", "routine_def")
+    rx649_cur."!cursor_caparray"("deflongname", "sigil")
+    .lex unicode:"$\x{a2}", rx649_cur
     .local pmc match
     .lex "$/", match
-    length rx626_eos, rx626_tgt
-    set rx626_off, 0
-    lt rx626_pos, 2, rx626_start
-    sub rx626_off, rx626_pos, 1
-    substr rx626_tgt, rx626_tgt, rx626_off
-  rx626_start:
+    length rx649_eos, rx649_tgt
+    gt rx649_pos, rx649_eos, rx649_done
+    set rx649_off, 0
+    lt rx649_pos, 2, rx649_start
+    sub rx649_off, rx649_pos, 1
+    substr rx649_tgt, rx649_tgt, rx649_off
+  rx649_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan629_done
-    goto rxscan629_scan
-  rxscan629_loop:
-    ($P10) = rx626_cur."from"()
+    ne $I10, -1, rxscan653_done
+    goto rxscan653_scan
+  rxscan653_loop:
+    ($P10) = rx649_cur."from"()
     inc $P10
-    set rx626_pos, $P10
-    ge rx626_pos, rx626_eos, rxscan629_done
-  rxscan629_scan:
-    set_addr $I10, rxscan629_loop
-    rx626_cur."!mark_push"(0, rx626_pos, $I10)
-  rxscan629_done:
-.annotate 'line', 291
+    set rx649_pos, $P10
+    ge rx649_pos, rx649_eos, rxscan653_done
+  rxscan653_scan:
+    set_addr $I10, rxscan653_loop
+    rx649_cur."!mark_push"(0, rx649_pos, $I10)
+  rxscan653_done:
+.annotate 'line', 295
   # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-.annotate 'line', 292
-  # rx rxquantr631 ** 0..1
-    set_addr $I637, rxquantr631_done
-    rx626_cur."!mark_push"(0, rx626_pos, $I637)
-  rxquantr631_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+.annotate 'line', 296
+  # rx rxquantr655 ** 0..1
+    set_addr $I661, rxquantr655_done
+    rx649_cur."!mark_push"(0, rx649_pos, $I661)
+  rxquantr655_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
   # rx subcapture "sigil"
-    set_addr $I10, rxcap_635_fail
-    rx626_cur."!mark_push"(0, rx626_pos, $I10)
-  # rx rxquantr633 ** 0..1
-    set_addr $I634, rxquantr633_done
-    rx626_cur."!mark_push"(0, rx626_pos, $I634)
-  rxquantr633_loop:
+    set_addr $I10, rxcap_659_fail
+    rx649_cur."!mark_push"(0, rx649_pos, $I10)
+  # rx rxquantr657 ** 0..1
+    set_addr $I658, rxquantr657_done
+    rx649_cur."!mark_push"(0, rx649_pos, $I658)
+  rxquantr657_loop:
   # rx literal  "&"
-    add $I11, rx626_pos, 1
-    gt $I11, rx626_eos, rx626_fail
-    sub $I11, rx626_pos, rx626_off
-    substr $S10, rx626_tgt, $I11, 1
-    ne $S10, "&", rx626_fail
-    add rx626_pos, 1
-    (rx626_rep) = rx626_cur."!mark_commit"($I634)
-  rxquantr633_done:
-    set_addr $I10, rxcap_635_fail
-    ($I12, $I11) = rx626_cur."!mark_peek"($I10)
-    rx626_cur."!cursor_pos"($I11)
-    ($P10) = rx626_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx626_pos, "")
-    rx626_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx649_pos, 1
+    gt $I11, rx649_eos, rx649_fail
+    sub $I11, rx649_pos, rx649_off
+    substr $S10, rx649_tgt, $I11, 1
+    ne $S10, "&", rx649_fail
+    add rx649_pos, 1
+    (rx649_rep) = rx649_cur."!mark_commit"($I658)
+  rxquantr657_done:
+    set_addr $I10, rxcap_659_fail
+    ($I12, $I11) = rx649_cur."!mark_peek"($I10)
+    rx649_cur."!cursor_pos"($I11)
+    ($P10) = rx649_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx649_pos, "")
+    rx649_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    goto rxcap_635_done
-  rxcap_635_fail:
-    goto rx626_fail
-  rxcap_635_done:
+    goto rxcap_659_done
+  rxcap_659_fail:
+    goto rx649_fail
+  rxcap_659_done:
   # rx subrule "deflongname" subtype=capture negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."deflongname"()
-    unless $P10, rx626_fail
-    rx626_cur."!mark_push"(0, -1, 0, $P10)
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."deflongname"()
+    unless $P10, rx649_fail
+    rx649_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx626_pos = $P10."pos"()
+    rx649_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-    (rx626_rep) = rx626_cur."!mark_commit"($I637)
-  rxquantr631_done:
-  # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-.annotate 'line', 293
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+    (rx649_rep) = rx649_cur."!mark_commit"($I661)
+  rxquantr655_done:
+  # rx subrule "ws" subtype=method negate=
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+.annotate 'line', 297
   # rx subrule "newpad" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."newpad"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-  alt640_0:
-.annotate 'line', 294
-    set_addr $I10, alt640_1
-    rx626_cur."!mark_push"(0, rx626_pos, $I10)
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."newpad"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+  alt664_0:
+.annotate 'line', 298
+    set_addr $I10, alt664_1
+    rx649_cur."!mark_push"(0, rx649_pos, $I10)
   # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx626_pos, 1
-    gt $I11, rx626_eos, rx626_fail
-    sub $I11, rx626_pos, rx626_off
-    substr $S10, rx626_tgt, $I11, 1
-    ne $S10, "(", rx626_fail
-    add rx626_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
+    add $I11, rx649_pos, 1
+    gt $I11, rx649_eos, rx649_fail
+    sub $I11, rx649_pos, rx649_off
+    substr $S10, rx649_tgt, $I11, 1
+    ne $S10, "(", rx649_fail
+    add rx649_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."signature"()
-    unless $P10, rx626_fail
-    rx626_cur."!mark_push"(0, -1, 0, $P10)
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."signature"()
+    unless $P10, rx649_fail
+    rx649_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx626_pos = $P10."pos"()
+    rx649_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx626_pos, 1
-    gt $I11, rx626_eos, rx626_fail
-    sub $I11, rx626_pos, rx626_off
-    substr $S10, rx626_tgt, $I11, 1
-    ne $S10, ")", rx626_fail
-    add rx626_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-    goto alt640_end
-  alt640_1:
-.annotate 'line', 295
+    add $I11, rx649_pos, 1
+    gt $I11, rx649_eos, rx649_fail
+    sub $I11, rx649_pos, rx649_off
+    substr $S10, rx649_tgt, $I11, 1
+    ne $S10, ")", rx649_fail
+    add rx649_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+    goto alt664_end
+  alt664_1:
+.annotate 'line', 299
   # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-  alt640_end:
-  # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-.annotate 'line', 296
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+  alt664_end:
+  # rx subrule "ws" subtype=method negate=
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+.annotate 'line', 300
   # rx subrule "blockoid" subtype=capture negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."blockoid"()
-    unless $P10, rx626_fail
-    rx626_cur."!mark_push"(0, -1, 0, $P10)
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."blockoid"()
+    unless $P10, rx649_fail
+    rx649_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx626_pos = $P10."pos"()
+    rx649_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx626_cur."!cursor_pos"(rx626_pos)
-    $P10 = rx626_cur."ws"()
-    unless $P10, rx626_fail
-    rx626_pos = $P10."pos"()
-.annotate 'line', 291
+    rx649_cur."!cursor_pos"(rx649_pos)
+    $P10 = rx649_cur."ws"()
+    unless $P10, rx649_fail
+    rx649_pos = $P10."pos"()
+.annotate 'line', 295
   # rx pass
-    rx626_cur."!cursor_pass"(rx626_pos, "routine_def")
-    rx626_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx626_pos)
-    .return (rx626_cur)
-  rx626_fail:
+    rx649_cur."!cursor_pass"(rx649_pos, "routine_def")
+    rx649_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx649_pos)
+    .return (rx649_cur)
+  rx649_fail:
 .annotate 'line', 4
-    (rx626_rep, rx626_pos, $I10, $P10) = rx626_cur."!mark_fail"(0)
-    lt rx626_pos, -1, rx626_done
-    eq rx626_pos, -1, rx626_fail
+    (rx649_rep, rx649_pos, $I10, $P10) = rx649_cur."!mark_fail"(0)
+    lt rx649_pos, -1, rx649_done
+    eq rx649_pos, -1, rx649_fail
     jump $I10
-  rx626_done:
-    rx626_cur."!cursor_fail"()
-    rx626_cur."!cursor_debug"("FAIL  ", "routine_def")
-    .return (rx626_cur)
+  rx649_done:
+    rx649_cur."!cursor_fail"()
+    rx649_cur."!cursor_debug"("FAIL  ", "routine_def")
+    .return (rx649_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_def"  :subid("154_1274022894.43745") :method
+.sub "!PREFIX__routine_def"  :subid("159_1275811487.95429") :method
 .annotate 'line', 4
-    new $P628, "ResizablePMCArray"
-    push $P628, ""
-    .return ($P628)
+    $P651 = self."!PREFIX__!subrule"("ws", "")
+    new $P652, "ResizablePMCArray"
+    push $P652, $P651
+    .return ($P652)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "method_def"  :subid("155_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "method_def"  :subid("160_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx650_tgt
-    .local int rx650_pos
-    .local int rx650_off
-    .local int rx650_eos
-    .local int rx650_rep
-    .local pmc rx650_cur
-    (rx650_cur, rx650_pos, rx650_tgt) = self."!cursor_start"()
-    rx650_cur."!cursor_debug"("START ", "method_def")
-    rx650_cur."!cursor_caparray"("deflongname")
-    .lex unicode:"$\x{a2}", rx650_cur
-    .local pmc match
-    .lex "$/", match
-    length rx650_eos, rx650_tgt
-    set rx650_off, 0
-    lt rx650_pos, 2, rx650_start
-    sub rx650_off, rx650_pos, 1
-    substr rx650_tgt, rx650_tgt, rx650_off
-  rx650_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan653_done
-    goto rxscan653_scan
-  rxscan653_loop:
-    ($P10) = rx650_cur."from"()
-    inc $P10
-    set rx650_pos, $P10
-    ge rx650_pos, rx650_eos, rxscan653_done
-  rxscan653_scan:
-    set_addr $I10, rxscan653_loop
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-  rxscan653_done:
-.annotate 'line', 299
+    .local string rx674_tgt
+    .local int rx674_pos
+    .local int rx674_off
+    .local int rx674_eos
+    .local int rx674_rep
+    .local pmc rx674_cur
+    (rx674_cur, rx674_pos, rx674_tgt) = self."!cursor_start"()
+    rx674_cur."!cursor_debug"("START ", "method_def")
+    rx674_cur."!cursor_caparray"("deflongname")
+    .lex unicode:"$\x{a2}", rx674_cur
+    .local pmc match
+    .lex "$/", match
+    length rx674_eos, rx674_tgt
+    gt rx674_pos, rx674_eos, rx674_done
+    set rx674_off, 0
+    lt rx674_pos, 2, rx674_start
+    sub rx674_off, rx674_pos, 1
+    substr rx674_tgt, rx674_tgt, rx674_off
+  rx674_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan678_done
+    goto rxscan678_scan
+  rxscan678_loop:
+    ($P10) = rx674_cur."from"()
+    inc $P10
+    set rx674_pos, $P10
+    ge rx674_pos, rx674_eos, rxscan678_done
+  rxscan678_scan:
+    set_addr $I10, rxscan678_loop
+    rx674_cur."!mark_push"(0, rx674_pos, $I10)
+  rxscan678_done:
+.annotate 'line', 303
   # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-.annotate 'line', 300
-  # rx rxquantr655 ** 0..1
-    set_addr $I656, rxquantr655_done
-    rx650_cur."!mark_push"(0, rx650_pos, $I656)
-  rxquantr655_loop:
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+.annotate 'line', 304
+  # rx rxquantr680 ** 0..1
+    set_addr $I681, rxquantr680_done
+    rx674_cur."!mark_push"(0, rx674_pos, $I681)
+  rxquantr680_loop:
   # rx subrule "deflongname" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."deflongname"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."deflongname"()
+    unless $P10, rx674_fail
+    rx674_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx650_pos = $P10."pos"()
-    (rx650_rep) = rx650_cur."!mark_commit"($I656)
-  rxquantr655_done:
-  # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-.annotate 'line', 301
+    rx674_pos = $P10."pos"()
+    (rx674_rep) = rx674_cur."!mark_commit"($I681)
+  rxquantr680_done:
+  # rx subrule "ws" subtype=method negate=
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+.annotate 'line', 305
   # rx subrule "newpad" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."newpad"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-  alt659_0:
-.annotate 'line', 302
-    set_addr $I10, alt659_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."newpad"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+  alt684_0:
+.annotate 'line', 306
+    set_addr $I10, alt684_1
+    rx674_cur."!mark_push"(0, rx674_pos, $I10)
   # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "(", rx650_fail
-    add rx650_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
+    add $I11, rx674_pos, 1
+    gt $I11, rx674_eos, rx674_fail
+    sub $I11, rx674_pos, rx674_off
+    substr $S10, rx674_tgt, $I11, 1
+    ne $S10, "(", rx674_fail
+    add rx674_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."signature"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."signature"()
+    unless $P10, rx674_fail
+    rx674_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx650_pos = $P10."pos"()
+    rx674_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, ")", rx650_fail
-    add rx650_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-    goto alt659_end
-  alt659_1:
-.annotate 'line', 303
+    add $I11, rx674_pos, 1
+    gt $I11, rx674_eos, rx674_fail
+    sub $I11, rx674_pos, rx674_off
+    substr $S10, rx674_tgt, $I11, 1
+    ne $S10, ")", rx674_fail
+    add rx674_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+    goto alt684_end
+  alt684_1:
+.annotate 'line', 307
   # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-  alt659_end:
-  # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-.annotate 'line', 304
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+  alt684_end:
+  # rx subrule "ws" subtype=method negate=
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+.annotate 'line', 308
   # rx subrule "blockoid" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."blockoid"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."blockoid"()
+    unless $P10, rx674_fail
+    rx674_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx650_pos = $P10."pos"()
+    rx674_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."ws"()
-    unless $P10, rx650_fail
-    rx650_pos = $P10."pos"()
-.annotate 'line', 299
+    rx674_cur."!cursor_pos"(rx674_pos)
+    $P10 = rx674_cur."ws"()
+    unless $P10, rx674_fail
+    rx674_pos = $P10."pos"()
+.annotate 'line', 303
   # rx pass
-    rx650_cur."!cursor_pass"(rx650_pos, "method_def")
-    rx650_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx650_pos)
-    .return (rx650_cur)
-  rx650_fail:
+    rx674_cur."!cursor_pass"(rx674_pos, "method_def")
+    rx674_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx674_pos)
+    .return (rx674_cur)
+  rx674_fail:
 .annotate 'line', 4
-    (rx650_rep, rx650_pos, $I10, $P10) = rx650_cur."!mark_fail"(0)
-    lt rx650_pos, -1, rx650_done
-    eq rx650_pos, -1, rx650_fail
+    (rx674_rep, rx674_pos, $I10, $P10) = rx674_cur."!mark_fail"(0)
+    lt rx674_pos, -1, rx674_done
+    eq rx674_pos, -1, rx674_fail
     jump $I10
-  rx650_done:
-    rx650_cur."!cursor_fail"()
-    rx650_cur."!cursor_debug"("FAIL  ", "method_def")
-    .return (rx650_cur)
+  rx674_done:
+    rx674_cur."!cursor_fail"()
+    rx674_cur."!cursor_debug"("FAIL  ", "method_def")
+    .return (rx674_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__method_def"  :subid("156_1274022894.43745") :method
+.sub "!PREFIX__method_def"  :subid("161_1275811487.95429") :method
 .annotate 'line', 4
-    new $P652, "ResizablePMCArray"
-    push $P652, ""
-    .return ($P652)
+    $P676 = self."!PREFIX__!subrule"("ws", "")
+    new $P677, "ResizablePMCArray"
+    push $P677, $P676
+    .return ($P677)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "signature"  :subid("157_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx669_tgt
-    .local int rx669_pos
-    .local int rx669_off
-    .local int rx669_eos
-    .local int rx669_rep
-    .local pmc rx669_cur
-    (rx669_cur, rx669_pos, rx669_tgt) = self."!cursor_start"()
-    rx669_cur."!cursor_debug"("START ", "signature")
-    rx669_cur."!cursor_caparray"("parameter")
-    .lex unicode:"$\x{a2}", rx669_cur
-    .local pmc match
-    .lex "$/", match
-    length rx669_eos, rx669_tgt
-    set rx669_off, 0
-    lt rx669_pos, 2, rx669_start
-    sub rx669_off, rx669_pos, 1
-    substr rx669_tgt, rx669_tgt, rx669_off
-  rx669_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan672_done
-    goto rxscan672_scan
-  rxscan672_loop:
-    ($P10) = rx669_cur."from"()
-    inc $P10
-    set rx669_pos, $P10
-    ge rx669_pos, rx669_eos, rxscan672_done
-  rxscan672_scan:
-    set_addr $I10, rxscan672_loop
-    rx669_cur."!mark_push"(0, rx669_pos, $I10)
-  rxscan672_done:
-.annotate 'line', 307
-  # rx rxquantr673 ** 0..1
-    set_addr $I676, rxquantr673_done
-    rx669_cur."!mark_push"(0, rx669_pos, $I676)
-  rxquantr673_loop:
-  # rx rxquantr674 ** 1..*
-    set_addr $I675, rxquantr674_done
-    rx669_cur."!mark_push"(0, -1, $I675)
-  rxquantr674_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx669_cur."!cursor_pos"(rx669_pos)
-    $P10 = rx669_cur."ws"()
-    unless $P10, rx669_fail
-    rx669_pos = $P10."pos"()
-  # rx subrule "parameter" subtype=capture negate=
-    rx669_cur."!cursor_pos"(rx669_pos)
-    $P10 = rx669_cur."parameter"()
-    unless $P10, rx669_fail
-    rx669_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("parameter")
-    rx669_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx669_cur."!cursor_pos"(rx669_pos)
-    $P10 = rx669_cur."ws"()
-    unless $P10, rx669_fail
-    rx669_pos = $P10."pos"()
-    (rx669_rep) = rx669_cur."!mark_commit"($I675)
-    rx669_cur."!mark_push"(rx669_rep, rx669_pos, $I675)
-  # rx literal  ","
-    add $I11, rx669_pos, 1
-    gt $I11, rx669_eos, rx669_fail
-    sub $I11, rx669_pos, rx669_off
-    substr $S10, rx669_tgt, $I11, 1
-    ne $S10, ",", rx669_fail
-    add rx669_pos, 1
-    goto rxquantr674_loop
-  rxquantr674_done:
-    (rx669_rep) = rx669_cur."!mark_commit"($I676)
-  rxquantr673_done:
-  # rx pass
-    rx669_cur."!cursor_pass"(rx669_pos, "signature")
-    rx669_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx669_pos)
-    .return (rx669_cur)
-  rx669_fail:
-.annotate 'line', 4
-    (rx669_rep, rx669_pos, $I10, $P10) = rx669_cur."!mark_fail"(0)
-    lt rx669_pos, -1, rx669_done
-    eq rx669_pos, -1, rx669_fail
-    jump $I10
-  rx669_done:
-    rx669_cur."!cursor_fail"()
-    rx669_cur."!cursor_debug"("FAIL  ", "signature")
-    .return (rx669_cur)
-    .return ()
+.sub "multi_declarator"  :subid("162_1275811487.95429") :method
+.annotate 'line', 311
+    $P694 = self."!protoregex"("multi_declarator")
+    .return ($P694)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__signature"  :subid("158_1274022894.43745") :method
-.annotate 'line', 4
-    new $P671, "ResizablePMCArray"
-    push $P671, ""
-    .return ($P671)
+.sub "!PREFIX__multi_declarator"  :subid("163_1275811487.95429") :method
+.annotate 'line', 311
+    $P696 = self."!PREFIX__!protoregex"("multi_declarator")
+    .return ($P696)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "parameter"  :subid("159_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "multi_declarator:sym<multi>"  :subid("164_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 313
+    new $P698, "Undef"
+    .lex "$*MULTINESS", $P698
 .annotate 'line', 4
-    .local string rx678_tgt
-    .local int rx678_pos
-    .local int rx678_off
-    .local int rx678_eos
-    .local int rx678_rep
-    .local pmc rx678_cur
-    (rx678_cur, rx678_pos, rx678_tgt) = self."!cursor_start"()
-    rx678_cur."!cursor_debug"("START ", "parameter")
-    rx678_cur."!cursor_caparray"("typename", "default_value")
-    .lex unicode:"$\x{a2}", rx678_cur
-    .local pmc match
-    .lex "$/", match
-    length rx678_eos, rx678_tgt
-    set rx678_off, 0
-    lt rx678_pos, 2, rx678_start
-    sub rx678_off, rx678_pos, 1
-    substr rx678_tgt, rx678_tgt, rx678_off
-  rx678_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan681_done
-    goto rxscan681_scan
-  rxscan681_loop:
-    ($P10) = rx678_cur."from"()
-    inc $P10
-    set rx678_pos, $P10
-    ge rx678_pos, rx678_eos, rxscan681_done
-  rxscan681_scan:
-    set_addr $I10, rxscan681_loop
-    rx678_cur."!mark_push"(0, rx678_pos, $I10)
-  rxscan681_done:
-.annotate 'line', 310
-  # rx rxquantr682 ** 0..*
-    set_addr $I683, rxquantr682_done
-    rx678_cur."!mark_push"(0, rx678_pos, $I683)
-  rxquantr682_loop:
-  # rx subrule "typename" subtype=capture negate=
-    rx678_cur."!cursor_pos"(rx678_pos)
-    $P10 = rx678_cur."typename"()
-    unless $P10, rx678_fail
-    rx678_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("typename")
-    rx678_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx678_cur."!cursor_pos"(rx678_pos)
-    $P10 = rx678_cur."ws"()
-    unless $P10, rx678_fail
-    rx678_pos = $P10."pos"()
-    (rx678_rep) = rx678_cur."!mark_commit"($I683)
-    rx678_cur."!mark_push"(rx678_rep, rx678_pos, $I683)
-    goto rxquantr682_loop
-  rxquantr682_done:
-  alt684_0:
-.annotate 'line', 311
-    set_addr $I10, alt684_1
-    rx678_cur."!mark_push"(0, rx678_pos, $I10)
-.annotate 'line', 312
-  # rx subcapture "quant"
-    set_addr $I10, rxcap_685_fail
-    rx678_cur."!mark_push"(0, rx678_pos, $I10)
-  # rx literal  "*"
-    add $I11, rx678_pos, 1
-    gt $I11, rx678_eos, rx678_fail
-    sub $I11, rx678_pos, rx678_off
-    substr $S10, rx678_tgt, $I11, 1
-    ne $S10, "*", rx678_fail
-    add rx678_pos, 1
-    set_addr $I10, rxcap_685_fail
-    ($I12, $I11) = rx678_cur."!mark_peek"($I10)
-    rx678_cur."!cursor_pos"($I11)
-    ($P10) = rx678_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx678_pos, "")
-    rx678_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quant")
-    goto rxcap_685_done
-  rxcap_685_fail:
-    goto rx678_fail
-  rxcap_685_done:
-  # rx subrule "param_var" subtype=capture negate=
-    rx678_cur."!cursor_pos"(rx678_pos)
-    $P10 = rx678_cur."param_var"()
-    unless $P10, rx678_fail
-    rx678_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("param_var")
-    rx678_pos = $P10."pos"()
-    goto alt684_end
-  alt684_1:
-  alt686_0:
+    .local string rx699_tgt
+    .local int rx699_pos
+    .local int rx699_off
+    .local int rx699_eos
+    .local int rx699_rep
+    .local pmc rx699_cur
+    (rx699_cur, rx699_pos, rx699_tgt) = self."!cursor_start"()
+    rx699_cur."!cursor_debug"("START ", "multi_declarator:sym<multi>")
+    .lex unicode:"$\x{a2}", rx699_cur
+    .local pmc match
+    .lex "$/", match
+    length rx699_eos, rx699_tgt
+    gt rx699_pos, rx699_eos, rx699_done
+    set rx699_off, 0
+    lt rx699_pos, 2, rx699_start
+    sub rx699_off, rx699_pos, 1
+    substr rx699_tgt, rx699_tgt, rx699_off
+  rx699_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan703_done
+    goto rxscan703_scan
+  rxscan703_loop:
+    ($P10) = rx699_cur."from"()
+    inc $P10
+    set rx699_pos, $P10
+    ge rx699_pos, rx699_eos, rxscan703_done
+  rxscan703_scan:
+    set_addr $I10, rxscan703_loop
+    rx699_cur."!mark_push"(0, rx699_pos, $I10)
+  rxscan703_done:
 .annotate 'line', 313
-    set_addr $I10, alt686_1
-    rx678_cur."!mark_push"(0, rx678_pos, $I10)
-  # rx subrule "param_var" subtype=capture negate=
-    rx678_cur."!cursor_pos"(rx678_pos)
-    $P10 = rx678_cur."param_var"()
-    unless $P10, rx678_fail
-    rx678_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("param_var")
-    rx678_pos = $P10."pos"()
-    goto alt686_end
-  alt686_1:
-  # rx subrule "named_param" subtype=capture negate=
-    rx678_cur."!cursor_pos"(rx678_pos)
-    $P10 = rx678_cur."named_param"()
-    unless $P10, rx678_fail
-    rx678_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("named_param")
-    rx678_pos = $P10."pos"()
-  alt686_end:
-  # rx subcapture "quant"
-    set_addr $I10, rxcap_688_fail
-    rx678_cur."!mark_push"(0, rx678_pos, $I10)
-  alt687_0:
-    set_addr $I10, alt687_1
-    rx678_cur."!mark_push"(0, rx678_pos, $I10)
-  # rx literal  "?"
-    add $I11, rx678_pos, 1
-    gt $I11, rx678_eos, rx678_fail
-    sub $I11, rx678_pos, rx678_off
-    substr $S10, rx678_tgt, $I11, 1
-    ne $S10, "?", rx678_fail
-    add rx678_pos, 1
-    goto alt687_end
-  alt687_1:
-    set_addr $I10, alt687_2
-    rx678_cur."!mark_push"(0, rx678_pos, $I10)
-  # rx literal  "!"
-    add $I11, rx678_pos, 1
-    gt $I11, rx678_eos, rx678_fail
-    sub $I11, rx678_pos, rx678_off
-    substr $S10, rx678_tgt, $I11, 1
-    ne $S10, "!", rx678_fail
-    add rx678_pos, 1
-    goto alt687_end
-  alt687_2:
-  alt687_end:
-    set_addr $I10, rxcap_688_fail
-    ($I12, $I11) = rx678_cur."!mark_peek"($I10)
-    rx678_cur."!cursor_pos"($I11)
-    ($P10) = rx678_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx678_pos, "")
-    rx678_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quant")
-    goto rxcap_688_done
-  rxcap_688_fail:
-    goto rx678_fail
-  rxcap_688_done:
-  alt684_end:
+    rx699_cur."!cursor_pos"(rx699_pos)
+    new $P704, "String"
+    assign $P704, "multi"
+    store_lex "$*MULTINESS", $P704
+.annotate 'line', 314
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_705_fail
+    rx699_cur."!mark_push"(0, rx699_pos, $I10)
+  # rx literal  "multi"
+    add $I11, rx699_pos, 5
+    gt $I11, rx699_eos, rx699_fail
+    sub $I11, rx699_pos, rx699_off
+    substr $S10, rx699_tgt, $I11, 5
+    ne $S10, "multi", rx699_fail
+    add rx699_pos, 5
+    set_addr $I10, rxcap_705_fail
+    ($I12, $I11) = rx699_cur."!mark_peek"($I10)
+    rx699_cur."!cursor_pos"($I11)
+    ($P10) = rx699_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx699_pos, "")
+    rx699_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_705_done
+  rxcap_705_fail:
+    goto rx699_fail
+  rxcap_705_done:
 .annotate 'line', 315
-  # rx rxquantr689 ** 0..1
-    set_addr $I690, rxquantr689_done
-    rx678_cur."!mark_push"(0, rx678_pos, $I690)
-  rxquantr689_loop:
-  # rx subrule "default_value" subtype=capture negate=
-    rx678_cur."!cursor_pos"(rx678_pos)
-    $P10 = rx678_cur."default_value"()
-    unless $P10, rx678_fail
-    rx678_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("default_value")
-    rx678_pos = $P10."pos"()
-    (rx678_rep) = rx678_cur."!mark_commit"($I690)
-  rxquantr689_done:
-.annotate 'line', 309
+  # rx subrule "ws" subtype=method negate=
+    rx699_cur."!cursor_pos"(rx699_pos)
+    $P10 = rx699_cur."ws"()
+    unless $P10, rx699_fail
+    rx699_pos = $P10."pos"()
+  alt706_0:
+    set_addr $I10, alt706_1
+    rx699_cur."!mark_push"(0, rx699_pos, $I10)
+  # rx subrule "declarator" subtype=capture negate=
+    rx699_cur."!cursor_pos"(rx699_pos)
+    $P10 = rx699_cur."declarator"()
+    unless $P10, rx699_fail
+    rx699_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("declarator")
+    rx699_pos = $P10."pos"()
+    goto alt706_end
+  alt706_1:
+    set_addr $I10, alt706_2
+    rx699_cur."!mark_push"(0, rx699_pos, $I10)
+  # rx subrule "routine_def" subtype=capture negate=
+    rx699_cur."!cursor_pos"(rx699_pos)
+    $P10 = rx699_cur."routine_def"()
+    unless $P10, rx699_fail
+    rx699_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("routine_def")
+    rx699_pos = $P10."pos"()
+    goto alt706_end
+  alt706_2:
+  # rx subrule "panic" subtype=method negate=
+    rx699_cur."!cursor_pos"(rx699_pos)
+    $P10 = rx699_cur."panic"("Malformed multi")
+    unless $P10, rx699_fail
+    rx699_pos = $P10."pos"()
+  alt706_end:
+.annotate 'line', 312
   # rx pass
-    rx678_cur."!cursor_pass"(rx678_pos, "parameter")
-    rx678_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx678_pos)
-    .return (rx678_cur)
-  rx678_fail:
+    rx699_cur."!cursor_pass"(rx699_pos, "multi_declarator:sym<multi>")
+    rx699_cur."!cursor_debug"("PASS  ", "multi_declarator:sym<multi>", " at pos=", rx699_pos)
+    .return (rx699_cur)
+  rx699_fail:
 .annotate 'line', 4
-    (rx678_rep, rx678_pos, $I10, $P10) = rx678_cur."!mark_fail"(0)
-    lt rx678_pos, -1, rx678_done
-    eq rx678_pos, -1, rx678_fail
+    (rx699_rep, rx699_pos, $I10, $P10) = rx699_cur."!mark_fail"(0)
+    lt rx699_pos, -1, rx699_done
+    eq rx699_pos, -1, rx699_fail
     jump $I10
-  rx678_done:
-    rx678_cur."!cursor_fail"()
-    rx678_cur."!cursor_debug"("FAIL  ", "parameter")
-    .return (rx678_cur)
+  rx699_done:
+    rx699_cur."!cursor_fail"()
+    rx699_cur."!cursor_debug"("FAIL  ", "multi_declarator:sym<multi>")
+    .return (rx699_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__parameter"  :subid("160_1274022894.43745") :method
+.sub "!PREFIX__multi_declarator:sym<multi>"  :subid("165_1275811487.95429") :method
 .annotate 'line', 4
-    new $P680, "ResizablePMCArray"
-    push $P680, ""
-    .return ($P680)
+    $P701 = self."!PREFIX__!subrule"("ws", "multi")
+    new $P702, "ResizablePMCArray"
+    push $P702, $P701
+    .return ($P702)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "param_var"  :subid("161_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx692_tgt
-    .local int rx692_pos
-    .local int rx692_off
-    .local int rx692_eos
-    .local int rx692_rep
-    .local pmc rx692_cur
-    (rx692_cur, rx692_pos, rx692_tgt) = self."!cursor_start"()
-    rx692_cur."!cursor_debug"("START ", "param_var")
-    rx692_cur."!cursor_caparray"("twigil")
-    .lex unicode:"$\x{a2}", rx692_cur
-    .local pmc match
-    .lex "$/", match
-    length rx692_eos, rx692_tgt
-    set rx692_off, 0
-    lt rx692_pos, 2, rx692_start
-    sub rx692_off, rx692_pos, 1
-    substr rx692_tgt, rx692_tgt, rx692_off
-  rx692_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan696_done
-    goto rxscan696_scan
-  rxscan696_loop:
-    ($P10) = rx692_cur."from"()
-    inc $P10
-    set rx692_pos, $P10
-    ge rx692_pos, rx692_eos, rxscan696_done
-  rxscan696_scan:
-    set_addr $I10, rxscan696_loop
-    rx692_cur."!mark_push"(0, rx692_pos, $I10)
-  rxscan696_done:
-.annotate 'line', 319
-  # rx subrule "sigil" subtype=capture negate=
-    rx692_cur."!cursor_pos"(rx692_pos)
-    $P10 = rx692_cur."sigil"()
-    unless $P10, rx692_fail
-    rx692_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sigil")
-    rx692_pos = $P10."pos"()
-  # rx rxquantr697 ** 0..1
-    set_addr $I698, rxquantr697_done
-    rx692_cur."!mark_push"(0, rx692_pos, $I698)
-  rxquantr697_loop:
-  # rx subrule "twigil" subtype=capture negate=
-    rx692_cur."!cursor_pos"(rx692_pos)
-    $P10 = rx692_cur."twigil"()
-    unless $P10, rx692_fail
-    rx692_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("twigil")
-    rx692_pos = $P10."pos"()
-    (rx692_rep) = rx692_cur."!mark_commit"($I698)
-  rxquantr697_done:
-  alt699_0:
-.annotate 'line', 320
-    set_addr $I10, alt699_1
-    rx692_cur."!mark_push"(0, rx692_pos, $I10)
-  # rx subrule "ident" subtype=capture negate=
-    rx692_cur."!cursor_pos"(rx692_pos)
-    $P10 = rx692_cur."ident"()
-    unless $P10, rx692_fail
-    rx692_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("name")
-    rx692_pos = $P10."pos"()
-    goto alt699_end
-  alt699_1:
-  # rx subcapture "name"
-    set_addr $I10, rxcap_700_fail
-    rx692_cur."!mark_push"(0, rx692_pos, $I10)
-  # rx enumcharlist negate=0 
-    ge rx692_pos, rx692_eos, rx692_fail
-    sub $I10, rx692_pos, rx692_off
-    substr $S10, rx692_tgt, $I10, 1
-    index $I11, "/!", $S10
-    lt $I11, 0, rx692_fail
-    inc rx692_pos
-    set_addr $I10, rxcap_700_fail
-    ($I12, $I11) = rx692_cur."!mark_peek"($I10)
-    rx692_cur."!cursor_pos"($I11)
-    ($P10) = rx692_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx692_pos, "")
-    rx692_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("name")
-    goto rxcap_700_done
-  rxcap_700_fail:
-    goto rx692_fail
-  rxcap_700_done:
-  alt699_end:
+.sub "multi_declarator:sym<null>"  :subid("166_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 318
-  # rx pass
-    rx692_cur."!cursor_pass"(rx692_pos, "param_var")
-    rx692_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx692_pos)
-    .return (rx692_cur)
-  rx692_fail:
-.annotate 'line', 4
-    (rx692_rep, rx692_pos, $I10, $P10) = rx692_cur."!mark_fail"(0)
-    lt rx692_pos, -1, rx692_done
-    eq rx692_pos, -1, rx692_fail
-    jump $I10
-  rx692_done:
-    rx692_cur."!cursor_fail"()
-    rx692_cur."!cursor_debug"("FAIL  ", "param_var")
-    .return (rx692_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__param_var"  :subid("162_1274022894.43745") :method
+    new $P708, "Undef"
+    .lex "$*MULTINESS", $P708
 .annotate 'line', 4
-    $P694 = self."!PREFIX__!subrule"("sigil", "")
-    new $P695, "ResizablePMCArray"
-    push $P695, $P694
-    .return ($P695)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "named_param"  :subid("163_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx702_tgt
-    .local int rx702_pos
-    .local int rx702_off
-    .local int rx702_eos
-    .local int rx702_rep
-    .local pmc rx702_cur
-    (rx702_cur, rx702_pos, rx702_tgt) = self."!cursor_start"()
-    rx702_cur."!cursor_debug"("START ", "named_param")
-    .lex unicode:"$\x{a2}", rx702_cur
-    .local pmc match
-    .lex "$/", match
-    length rx702_eos, rx702_tgt
-    set rx702_off, 0
-    lt rx702_pos, 2, rx702_start
-    sub rx702_off, rx702_pos, 1
-    substr rx702_tgt, rx702_tgt, rx702_off
-  rx702_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan706_done
-    goto rxscan706_scan
-  rxscan706_loop:
-    ($P10) = rx702_cur."from"()
-    inc $P10
-    set rx702_pos, $P10
-    ge rx702_pos, rx702_eos, rxscan706_done
-  rxscan706_scan:
-    set_addr $I10, rxscan706_loop
-    rx702_cur."!mark_push"(0, rx702_pos, $I10)
-  rxscan706_done:
-.annotate 'line', 324
-  # rx literal  ":"
-    add $I11, rx702_pos, 1
-    gt $I11, rx702_eos, rx702_fail
-    sub $I11, rx702_pos, rx702_off
-    substr $S10, rx702_tgt, $I11, 1
-    ne $S10, ":", rx702_fail
-    add rx702_pos, 1
-  # rx subrule "param_var" subtype=capture negate=
-    rx702_cur."!cursor_pos"(rx702_pos)
-    $P10 = rx702_cur."param_var"()
-    unless $P10, rx702_fail
-    rx702_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("param_var")
-    rx702_pos = $P10."pos"()
-.annotate 'line', 323
+    .local string rx709_tgt
+    .local int rx709_pos
+    .local int rx709_off
+    .local int rx709_eos
+    .local int rx709_rep
+    .local pmc rx709_cur
+    (rx709_cur, rx709_pos, rx709_tgt) = self."!cursor_start"()
+    rx709_cur."!cursor_debug"("START ", "multi_declarator:sym<null>")
+    .lex unicode:"$\x{a2}", rx709_cur
+    .local pmc match
+    .lex "$/", match
+    length rx709_eos, rx709_tgt
+    gt rx709_pos, rx709_eos, rx709_done
+    set rx709_off, 0
+    lt rx709_pos, 2, rx709_start
+    sub rx709_off, rx709_pos, 1
+    substr rx709_tgt, rx709_tgt, rx709_off
+  rx709_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan713_done
+    goto rxscan713_scan
+  rxscan713_loop:
+    ($P10) = rx709_cur."from"()
+    inc $P10
+    set rx709_pos, $P10
+    ge rx709_pos, rx709_eos, rxscan713_done
+  rxscan713_scan:
+    set_addr $I10, rxscan713_loop
+    rx709_cur."!mark_push"(0, rx709_pos, $I10)
+  rxscan713_done:
+.annotate 'line', 318
+    rx709_cur."!cursor_pos"(rx709_pos)
+    new $P714, "String"
+    assign $P714, ""
+    store_lex "$*MULTINESS", $P714
+.annotate 'line', 319
+  # rx subrule "declarator" subtype=capture negate=
+    rx709_cur."!cursor_pos"(rx709_pos)
+    $P10 = rx709_cur."declarator"()
+    unless $P10, rx709_fail
+    rx709_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("declarator")
+    rx709_pos = $P10."pos"()
+.annotate 'line', 317
   # rx pass
-    rx702_cur."!cursor_pass"(rx702_pos, "named_param")
-    rx702_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx702_pos)
-    .return (rx702_cur)
-  rx702_fail:
+    rx709_cur."!cursor_pass"(rx709_pos, "multi_declarator:sym<null>")
+    rx709_cur."!cursor_debug"("PASS  ", "multi_declarator:sym<null>", " at pos=", rx709_pos)
+    .return (rx709_cur)
+  rx709_fail:
 .annotate 'line', 4
-    (rx702_rep, rx702_pos, $I10, $P10) = rx702_cur."!mark_fail"(0)
-    lt rx702_pos, -1, rx702_done
-    eq rx702_pos, -1, rx702_fail
+    (rx709_rep, rx709_pos, $I10, $P10) = rx709_cur."!mark_fail"(0)
+    lt rx709_pos, -1, rx709_done
+    eq rx709_pos, -1, rx709_fail
     jump $I10
-  rx702_done:
-    rx702_cur."!cursor_fail"()
-    rx702_cur."!cursor_debug"("FAIL  ", "named_param")
-    .return (rx702_cur)
+  rx709_done:
+    rx709_cur."!cursor_fail"()
+    rx709_cur."!cursor_debug"("FAIL  ", "multi_declarator:sym<null>")
+    .return (rx709_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__named_param"  :subid("164_1274022894.43745") :method
-.annotate 'line', 4
-    $P704 = self."!PREFIX__!subrule"("param_var", ":")
-    new $P705, "ResizablePMCArray"
-    push $P705, $P704
-    .return ($P705)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "default_value"  :subid("165_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx708_tgt
-    .local int rx708_pos
-    .local int rx708_off
-    .local int rx708_eos
-    .local int rx708_rep
-    .local pmc rx708_cur
-    (rx708_cur, rx708_pos, rx708_tgt) = self."!cursor_start"()
-    rx708_cur."!cursor_debug"("START ", "default_value")
-    .lex unicode:"$\x{a2}", rx708_cur
-    .local pmc match
-    .lex "$/", match
-    length rx708_eos, rx708_tgt
-    set rx708_off, 0
-    lt rx708_pos, 2, rx708_start
-    sub rx708_off, rx708_pos, 1
-    substr rx708_tgt, rx708_tgt, rx708_off
-  rx708_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan711_done
-    goto rxscan711_scan
-  rxscan711_loop:
-    ($P10) = rx708_cur."from"()
-    inc $P10
-    set rx708_pos, $P10
-    ge rx708_pos, rx708_eos, rxscan711_done
-  rxscan711_scan:
-    set_addr $I10, rxscan711_loop
-    rx708_cur."!mark_push"(0, rx708_pos, $I10)
-  rxscan711_done:
-.annotate 'line', 327
-  # rx subrule "ws" subtype=method negate=
-    rx708_cur."!cursor_pos"(rx708_pos)
-    $P10 = rx708_cur."ws"()
-    unless $P10, rx708_fail
-    rx708_pos = $P10."pos"()
-  # rx literal  "="
-    add $I11, rx708_pos, 1
-    gt $I11, rx708_eos, rx708_fail
-    sub $I11, rx708_pos, rx708_off
-    substr $S10, rx708_tgt, $I11, 1
-    ne $S10, "=", rx708_fail
-    add rx708_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx708_cur."!cursor_pos"(rx708_pos)
-    $P10 = rx708_cur."ws"()
-    unless $P10, rx708_fail
-    rx708_pos = $P10."pos"()
-  # rx subrule "EXPR" subtype=capture negate=
-    rx708_cur."!cursor_pos"(rx708_pos)
-    $P10 = rx708_cur."EXPR"("i=")
-    unless $P10, rx708_fail
-    rx708_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx708_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx708_cur."!cursor_pos"(rx708_pos)
-    $P10 = rx708_cur."ws"()
-    unless $P10, rx708_fail
-    rx708_pos = $P10."pos"()
-  # rx pass
-    rx708_cur."!cursor_pass"(rx708_pos, "default_value")
-    rx708_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx708_pos)
-    .return (rx708_cur)
-  rx708_fail:
+.sub "!PREFIX__multi_declarator:sym<null>"  :subid("167_1275811487.95429") :method
 .annotate 'line', 4
-    (rx708_rep, rx708_pos, $I10, $P10) = rx708_cur."!mark_fail"(0)
-    lt rx708_pos, -1, rx708_done
-    eq rx708_pos, -1, rx708_fail
-    jump $I10
-  rx708_done:
-    rx708_cur."!cursor_fail"()
-    rx708_cur."!cursor_debug"("FAIL  ", "default_value")
-    .return (rx708_cur)
-    .return ()
+    $P711 = self."!PREFIX__!subrule"("declarator", "")
+    new $P712, "ResizablePMCArray"
+    push $P712, $P711
+    .return ($P712)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__default_value"  :subid("166_1274022894.43745") :method
-.annotate 'line', 4
-    new $P710, "ResizablePMCArray"
-    push $P710, ""
-    .return ($P710)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "regex_declarator"  :subid("167_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "signature"  :subid("168_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx716_tgt
     .local int rx716_pos
@@ -8433,12 +8390,13 @@
     .local int rx716_rep
     .local pmc rx716_cur
     (rx716_cur, rx716_pos, rx716_tgt) = self."!cursor_start"()
-    rx716_cur."!cursor_debug"("START ", "regex_declarator")
-    rx716_cur."!cursor_caparray"("signature")
+    rx716_cur."!cursor_debug"("START ", "signature")
+    rx716_cur."!cursor_caparray"("parameter")
     .lex unicode:"$\x{a2}", rx716_cur
     .local pmc match
     .lex "$/", match
     length rx716_eos, rx716_tgt
+    gt rx716_pos, rx716_eos, rx716_done
     set rx716_off, 0
     lt rx716_pos, 2, rx716_start
     sub rx716_off, rx716_pos, 1
@@ -8456,359 +8414,48 @@
     set_addr $I10, rxscan719_loop
     rx716_cur."!mark_push"(0, rx716_pos, $I10)
   rxscan719_done:
-.annotate 'line', 329
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  alt721_0:
-.annotate 'line', 330
-    set_addr $I10, alt721_1
-    rx716_cur."!mark_push"(0, rx716_pos, $I10)
-.annotate 'line', 331
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx subcapture "proto"
-    set_addr $I10, rxcap_723_fail
-    rx716_cur."!mark_push"(0, rx716_pos, $I10)
-  # rx literal  "proto"
-    add $I11, rx716_pos, 5
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 5
-    ne $S10, "proto", rx716_fail
-    add rx716_pos, 5
-    set_addr $I10, rxcap_723_fail
-    ($I12, $I11) = rx716_cur."!mark_peek"($I10)
-    rx716_cur."!cursor_pos"($I11)
-    ($P10) = rx716_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx716_pos, "")
-    rx716_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("proto")
-    goto rxcap_723_done
-  rxcap_723_fail:
-    goto rx716_fail
-  rxcap_723_done:
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  alt725_0:
-    set_addr $I10, alt725_1
-    rx716_cur."!mark_push"(0, rx716_pos, $I10)
-  # rx literal  "regex"
-    add $I11, rx716_pos, 5
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 5
-    ne $S10, "regex", rx716_fail
-    add rx716_pos, 5
-    goto alt725_end
-  alt725_1:
-    set_addr $I10, alt725_2
-    rx716_cur."!mark_push"(0, rx716_pos, $I10)
-  # rx literal  "token"
-    add $I11, rx716_pos, 5
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 5
-    ne $S10, "token", rx716_fail
-    add rx716_pos, 5
-    goto alt725_end
-  alt725_2:
-  # rx literal  "rule"
-    add $I11, rx716_pos, 4
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 4
-    ne $S10, "rule", rx716_fail
-    add rx716_pos, 4
-  alt725_end:
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-.annotate 'line', 332
-  # rx subrule "deflongname" subtype=capture negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."deflongname"()
-    unless $P10, rx716_fail
-    rx716_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("deflongname")
-    rx716_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  alt728_0:
-.annotate 'line', 333
-    set_addr $I10, alt728_1
-    rx716_cur."!mark_push"(0, rx716_pos, $I10)
-.annotate 'line', 334
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx literal  "{"
-    add $I11, rx716_pos, 1
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 1
-    ne $S10, "{", rx716_fail
-    add rx716_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx literal  "<...>"
-    add $I11, rx716_pos, 5
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 5
-    ne $S10, "<...>", rx716_fail
-    add rx716_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx literal  "}"
-    add $I11, rx716_pos, 1
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 1
-    ne $S10, "}", rx716_fail
-    add rx716_pos, 1
-  # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ENDSTMT"()
-    unless $P10, rx716_fail
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-    goto alt728_end
-  alt728_1:
-.annotate 'line', 335
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx subrule "panic" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."panic"("Proto regex body must be <...>")
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  alt728_end:
-.annotate 'line', 336
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-.annotate 'line', 331
-    goto alt721_end
-  alt721_1:
-.annotate 'line', 337
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_738_fail
-    rx716_cur."!mark_push"(0, rx716_pos, $I10)
-  alt737_0:
-    set_addr $I10, alt737_1
-    rx716_cur."!mark_push"(0, rx716_pos, $I10)
-  # rx literal  "regex"
-    add $I11, rx716_pos, 5
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 5
-    ne $S10, "regex", rx716_fail
-    add rx716_pos, 5
-    goto alt737_end
-  alt737_1:
-    set_addr $I10, alt737_2
-    rx716_cur."!mark_push"(0, rx716_pos, $I10)
-  # rx literal  "token"
-    add $I11, rx716_pos, 5
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 5
-    ne $S10, "token", rx716_fail
-    add rx716_pos, 5
-    goto alt737_end
-  alt737_2:
-  # rx literal  "rule"
-    add $I11, rx716_pos, 4
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 4
-    ne $S10, "rule", rx716_fail
-    add rx716_pos, 4
-  alt737_end:
-    set_addr $I10, rxcap_738_fail
-    ($I12, $I11) = rx716_cur."!mark_peek"($I10)
-    rx716_cur."!cursor_pos"($I11)
-    ($P10) = rx716_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx716_pos, "")
-    rx716_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_738_done
-  rxcap_738_fail:
-    goto rx716_fail
-  rxcap_738_done:
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-.annotate 'line', 338
-  # rx subrule "deflongname" subtype=capture negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."deflongname"()
-    unless $P10, rx716_fail
-    rx716_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("deflongname")
-    rx716_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-.annotate 'line', 339
-  # rx subrule "newpad" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."newpad"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-.annotate 'line', 340
-  # rx rxquantr742 ** 0..1
-    set_addr $I747, rxquantr742_done
-    rx716_cur."!mark_push"(0, rx716_pos, $I747)
-  rxquantr742_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx literal  "("
-    add $I11, rx716_pos, 1
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 1
-    ne $S10, "(", rx716_fail
-    add rx716_pos, 1
+.annotate 'line', 322
+  # rx rxquantr720 ** 0..1
+    set_addr $I723, rxquantr720_done
+    rx716_cur."!mark_push"(0, rx716_pos, $I723)
+  rxquantr720_loop:
+  # rx rxquantr721 ** 1..*
+    set_addr $I722, rxquantr721_done
+    rx716_cur."!mark_push"(0, -1, $I722)
+  rxquantr721_loop:
   # rx subrule "ws" subtype=method negate=
     rx716_cur."!cursor_pos"(rx716_pos)
     $P10 = rx716_cur."ws"()
     unless $P10, rx716_fail
     rx716_pos = $P10."pos"()
-  # rx subrule "signature" subtype=capture negate=
+  # rx subrule "parameter" subtype=capture negate=
     rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."signature"()
+    $P10 = rx716_cur."parameter"()
     unless $P10, rx716_fail
     rx716_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("signature")
-    rx716_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  # rx literal  ")"
-    add $I11, rx716_pos, 1
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 1
-    ne $S10, ")", rx716_fail
-    add rx716_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-    (rx716_rep) = rx716_cur."!mark_commit"($I747)
-  rxquantr742_done:
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
+    $P10."!cursor_names"("parameter")
     rx716_pos = $P10."pos"()
-.annotate 'line', 341
-  # rx reduce name="regex_declarator" key="open"
-    rx716_cur."!cursor_pos"(rx716_pos)
-    rx716_cur."!reduce"("regex_declarator", "open")
   # rx subrule "ws" subtype=method negate=
     rx716_cur."!cursor_pos"(rx716_pos)
     $P10 = rx716_cur."ws"()
     unless $P10, rx716_fail
     rx716_pos = $P10."pos"()
-.annotate 'line', 342
-  # rx literal  "{"
-    add $I11, rx716_pos, 1
-    gt $I11, rx716_eos, rx716_fail
-    sub $I11, rx716_pos, rx716_off
-    substr $S10, rx716_tgt, $I11, 1
-    ne $S10, "{", rx716_fail
-    add rx716_pos, 1
-  # rx subrule "LANG" subtype=capture negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx716_fail
-    rx716_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("p6regex")
-    rx716_pos = $P10."pos"()
-  # rx literal  "}"
+    (rx716_rep) = rx716_cur."!mark_commit"($I722)
+    rx716_cur."!mark_push"(rx716_rep, rx716_pos, $I722)
+  # rx literal  ","
     add $I11, rx716_pos, 1
     gt $I11, rx716_eos, rx716_fail
     sub $I11, rx716_pos, rx716_off
     substr $S10, rx716_tgt, $I11, 1
-    ne $S10, "}", rx716_fail
+    ne $S10, ",", rx716_fail
     add rx716_pos, 1
-  # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ENDSTMT"()
-    unless $P10, rx716_fail
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-  alt721_end:
-.annotate 'line', 343
-  # rx subrule "ws" subtype=method negate=
-    rx716_cur."!cursor_pos"(rx716_pos)
-    $P10 = rx716_cur."ws"()
-    unless $P10, rx716_fail
-    rx716_pos = $P10."pos"()
-.annotate 'line', 329
+    goto rxquantr721_loop
+  rxquantr721_done:
+    (rx716_rep) = rx716_cur."!mark_commit"($I723)
+  rxquantr720_done:
   # rx pass
-    rx716_cur."!cursor_pass"(rx716_pos, "regex_declarator")
-    rx716_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx716_pos)
+    rx716_cur."!cursor_pass"(rx716_pos, "signature")
+    rx716_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx716_pos)
     .return (rx716_cur)
   rx716_fail:
 .annotate 'line', 4
@@ -8818,14 +8465,14 @@
     jump $I10
   rx716_done:
     rx716_cur."!cursor_fail"()
-    rx716_cur."!cursor_debug"("FAIL  ", "regex_declarator")
+    rx716_cur."!cursor_debug"("FAIL  ", "signature")
     .return (rx716_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__regex_declarator"  :subid("168_1274022894.43745") :method
+.sub "!PREFIX__signature"  :subid("169_1275811487.95429") :method
 .annotate 'line', 4
     new $P718, "ResizablePMCArray"
     push $P718, ""
@@ -8834,629 +8481,898 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "dotty"  :subid("169_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "parameter"  :subid("170_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx753_tgt
-    .local int rx753_pos
-    .local int rx753_off
-    .local int rx753_eos
-    .local int rx753_rep
-    .local pmc rx753_cur
-    (rx753_cur, rx753_pos, rx753_tgt) = self."!cursor_start"()
-    rx753_cur."!cursor_debug"("START ", "dotty")
-    rx753_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx753_cur
-    .local pmc match
-    .lex "$/", match
-    length rx753_eos, rx753_tgt
-    set rx753_off, 0
-    lt rx753_pos, 2, rx753_start
-    sub rx753_off, rx753_pos, 1
-    substr rx753_tgt, rx753_tgt, rx753_off
-  rx753_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan757_done
-    goto rxscan757_scan
-  rxscan757_loop:
-    ($P10) = rx753_cur."from"()
-    inc $P10
-    set rx753_pos, $P10
-    ge rx753_pos, rx753_eos, rxscan757_done
-  rxscan757_scan:
-    set_addr $I10, rxscan757_loop
-    rx753_cur."!mark_push"(0, rx753_pos, $I10)
-  rxscan757_done:
-.annotate 'line', 347
-  # rx literal  "."
-    add $I11, rx753_pos, 1
-    gt $I11, rx753_eos, rx753_fail
-    sub $I11, rx753_pos, rx753_off
-    substr $S10, rx753_tgt, $I11, 1
-    ne $S10, ".", rx753_fail
-    add rx753_pos, 1
-  alt758_0:
-.annotate 'line', 348
-    set_addr $I10, alt758_1
-    rx753_cur."!mark_push"(0, rx753_pos, $I10)
-  # rx subrule "identifier" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."identifier"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("longname=identifier")
-    rx753_pos = $P10."pos"()
-    goto alt758_end
-  alt758_1:
-.annotate 'line', 349
-  # rx enumcharlist negate=0 zerowidth
-    ge rx753_pos, rx753_eos, rx753_fail
-    sub $I10, rx753_pos, rx753_off
-    substr $S10, rx753_tgt, $I10, 1
-    index $I11, "'\"", $S10
-    lt $I11, 0, rx753_fail
-  # rx subrule "quote" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."quote"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote")
-    rx753_pos = $P10."pos"()
-  alt759_0:
-.annotate 'line', 350
-    set_addr $I10, alt759_1
-    rx753_cur."!mark_push"(0, rx753_pos, $I10)
-  # rx enumcharlist negate=0 zerowidth
-    ge rx753_pos, rx753_eos, rx753_fail
-    sub $I10, rx753_pos, rx753_off
-    substr $S10, rx753_tgt, $I10, 1
-    index $I11, "(", $S10
-    lt $I11, 0, rx753_fail
-    goto alt759_end
-  alt759_1:
-  # rx subrule "panic" subtype=method negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."panic"("Quoted method name requires parenthesized arguments")
-    unless $P10, rx753_fail
-    rx753_pos = $P10."pos"()
-  alt759_end:
-  alt758_end:
-.annotate 'line', 356
-  # rx rxquantr760 ** 0..1
-    set_addr $I762, rxquantr760_done
-    rx753_cur."!mark_push"(0, rx753_pos, $I762)
-  rxquantr760_loop:
-  alt761_0:
-.annotate 'line', 353
-    set_addr $I10, alt761_1
-    rx753_cur."!mark_push"(0, rx753_pos, $I10)
-.annotate 'line', 354
-  # rx enumcharlist negate=0 zerowidth
-    ge rx753_pos, rx753_eos, rx753_fail
-    sub $I10, rx753_pos, rx753_off
-    substr $S10, rx753_tgt, $I10, 1
-    index $I11, "(", $S10
-    lt $I11, 0, rx753_fail
-  # rx subrule "args" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."args"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("args")
-    rx753_pos = $P10."pos"()
-    goto alt761_end
-  alt761_1:
-.annotate 'line', 355
-  # rx literal  ":"
-    add $I11, rx753_pos, 1
-    gt $I11, rx753_eos, rx753_fail
-    sub $I11, rx753_pos, rx753_off
-    substr $S10, rx753_tgt, $I11, 1
-    ne $S10, ":", rx753_fail
-    add rx753_pos, 1
-  # rx charclass s
-    ge rx753_pos, rx753_eos, rx753_fail
-    sub $I10, rx753_pos, rx753_off
-    is_cclass $I11, 32, rx753_tgt, $I10
-    unless $I11, rx753_fail
-    inc rx753_pos
-  # rx subrule "arglist" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."arglist"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("args")
-    rx753_pos = $P10."pos"()
-  alt761_end:
-.annotate 'line', 356
-    (rx753_rep) = rx753_cur."!mark_commit"($I762)
-  rxquantr760_done:
-.annotate 'line', 346
-  # rx pass
-    rx753_cur."!cursor_pass"(rx753_pos, "dotty")
-    rx753_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx753_pos)
-    .return (rx753_cur)
-  rx753_fail:
-.annotate 'line', 4
-    (rx753_rep, rx753_pos, $I10, $P10) = rx753_cur."!mark_fail"(0)
-    lt rx753_pos, -1, rx753_done
-    eq rx753_pos, -1, rx753_fail
-    jump $I10
-  rx753_done:
-    rx753_cur."!cursor_fail"()
-    rx753_cur."!cursor_debug"("FAIL  ", "dotty")
-    .return (rx753_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__dotty"  :subid("170_1274022894.43745") :method
-.annotate 'line', 4
-    $P755 = self."!PREFIX__!subrule"("longname=identifier", ".")
-    new $P756, "ResizablePMCArray"
-    push $P756, "'"
-    push $P756, "\""
-    push $P756, $P755
-    .return ($P756)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "term"  :subid("171_1274022894.43745") :method
-.annotate 'line', 360
-    $P764 = self."!protoregex"("term")
-    .return ($P764)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term"  :subid("172_1274022894.43745") :method
-.annotate 'line', 360
-    $P766 = self."!PREFIX__!protoregex"("term")
-    .return ($P766)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "term:sym<self>"  :subid("173_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx768_tgt
-    .local int rx768_pos
-    .local int rx768_off
-    .local int rx768_eos
-    .local int rx768_rep
-    .local pmc rx768_cur
-    (rx768_cur, rx768_pos, rx768_tgt) = self."!cursor_start"()
-    rx768_cur."!cursor_debug"("START ", "term:sym<self>")
-    .lex unicode:"$\x{a2}", rx768_cur
-    .local pmc match
-    .lex "$/", match
-    length rx768_eos, rx768_tgt
-    set rx768_off, 0
-    lt rx768_pos, 2, rx768_start
-    sub rx768_off, rx768_pos, 1
-    substr rx768_tgt, rx768_tgt, rx768_off
-  rx768_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan771_done
-    goto rxscan771_scan
-  rxscan771_loop:
-    ($P10) = rx768_cur."from"()
-    inc $P10
-    set rx768_pos, $P10
-    ge rx768_pos, rx768_eos, rxscan771_done
-  rxscan771_scan:
-    set_addr $I10, rxscan771_loop
-    rx768_cur."!mark_push"(0, rx768_pos, $I10)
-  rxscan771_done:
-.annotate 'line', 362
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_772_fail
-    rx768_cur."!mark_push"(0, rx768_pos, $I10)
-  # rx literal  "self"
-    add $I11, rx768_pos, 4
-    gt $I11, rx768_eos, rx768_fail
-    sub $I11, rx768_pos, rx768_off
-    substr $S10, rx768_tgt, $I11, 4
-    ne $S10, "self", rx768_fail
-    add rx768_pos, 4
-    set_addr $I10, rxcap_772_fail
-    ($I12, $I11) = rx768_cur."!mark_peek"($I10)
-    rx768_cur."!cursor_pos"($I11)
-    ($P10) = rx768_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx768_pos, "")
-    rx768_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_772_done
-  rxcap_772_fail:
-    goto rx768_fail
-  rxcap_772_done:
-  # rxanchor rwb
-    le rx768_pos, 0, rx768_fail
-    sub $I10, rx768_pos, rx768_off
-    is_cclass $I11, 8192, rx768_tgt, $I10
-    if $I11, rx768_fail
-    dec $I10
-    is_cclass $I11, 8192, rx768_tgt, $I10
-    unless $I11, rx768_fail
+    .local string rx725_tgt
+    .local int rx725_pos
+    .local int rx725_off
+    .local int rx725_eos
+    .local int rx725_rep
+    .local pmc rx725_cur
+    (rx725_cur, rx725_pos, rx725_tgt) = self."!cursor_start"()
+    rx725_cur."!cursor_debug"("START ", "parameter")
+    rx725_cur."!cursor_caparray"("default_value", "typename")
+    .lex unicode:"$\x{a2}", rx725_cur
+    .local pmc match
+    .lex "$/", match
+    length rx725_eos, rx725_tgt
+    gt rx725_pos, rx725_eos, rx725_done
+    set rx725_off, 0
+    lt rx725_pos, 2, rx725_start
+    sub rx725_off, rx725_pos, 1
+    substr rx725_tgt, rx725_tgt, rx725_off
+  rx725_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan728_done
+    goto rxscan728_scan
+  rxscan728_loop:
+    ($P10) = rx725_cur."from"()
+    inc $P10
+    set rx725_pos, $P10
+    ge rx725_pos, rx725_eos, rxscan728_done
+  rxscan728_scan:
+    set_addr $I10, rxscan728_loop
+    rx725_cur."!mark_push"(0, rx725_pos, $I10)
+  rxscan728_done:
+.annotate 'line', 325
+  # rx rxquantr729 ** 0..*
+    set_addr $I730, rxquantr729_done
+    rx725_cur."!mark_push"(0, rx725_pos, $I730)
+  rxquantr729_loop:
+  # rx subrule "typename" subtype=capture negate=
+    rx725_cur."!cursor_pos"(rx725_pos)
+    $P10 = rx725_cur."typename"()
+    unless $P10, rx725_fail
+    rx725_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("typename")
+    rx725_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx725_cur."!cursor_pos"(rx725_pos)
+    $P10 = rx725_cur."ws"()
+    unless $P10, rx725_fail
+    rx725_pos = $P10."pos"()
+    (rx725_rep) = rx725_cur."!mark_commit"($I730)
+    rx725_cur."!mark_push"(rx725_rep, rx725_pos, $I730)
+    goto rxquantr729_loop
+  rxquantr729_done:
+  alt731_0:
+.annotate 'line', 326
+    set_addr $I10, alt731_1
+    rx725_cur."!mark_push"(0, rx725_pos, $I10)
+.annotate 'line', 327
+  # rx subcapture "quant"
+    set_addr $I10, rxcap_732_fail
+    rx725_cur."!mark_push"(0, rx725_pos, $I10)
+  # rx literal  "*"
+    add $I11, rx725_pos, 1
+    gt $I11, rx725_eos, rx725_fail
+    sub $I11, rx725_pos, rx725_off
+    substr $S10, rx725_tgt, $I11, 1
+    ne $S10, "*", rx725_fail
+    add rx725_pos, 1
+    set_addr $I10, rxcap_732_fail
+    ($I12, $I11) = rx725_cur."!mark_peek"($I10)
+    rx725_cur."!cursor_pos"($I11)
+    ($P10) = rx725_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx725_pos, "")
+    rx725_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quant")
+    goto rxcap_732_done
+  rxcap_732_fail:
+    goto rx725_fail
+  rxcap_732_done:
+  # rx subrule "param_var" subtype=capture negate=
+    rx725_cur."!cursor_pos"(rx725_pos)
+    $P10 = rx725_cur."param_var"()
+    unless $P10, rx725_fail
+    rx725_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("param_var")
+    rx725_pos = $P10."pos"()
+    goto alt731_end
+  alt731_1:
+  alt733_0:
+.annotate 'line', 328
+    set_addr $I10, alt733_1
+    rx725_cur."!mark_push"(0, rx725_pos, $I10)
+  # rx subrule "param_var" subtype=capture negate=
+    rx725_cur."!cursor_pos"(rx725_pos)
+    $P10 = rx725_cur."param_var"()
+    unless $P10, rx725_fail
+    rx725_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("param_var")
+    rx725_pos = $P10."pos"()
+    goto alt733_end
+  alt733_1:
+  # rx subrule "named_param" subtype=capture negate=
+    rx725_cur."!cursor_pos"(rx725_pos)
+    $P10 = rx725_cur."named_param"()
+    unless $P10, rx725_fail
+    rx725_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("named_param")
+    rx725_pos = $P10."pos"()
+  alt733_end:
+  # rx subcapture "quant"
+    set_addr $I10, rxcap_735_fail
+    rx725_cur."!mark_push"(0, rx725_pos, $I10)
+  alt734_0:
+    set_addr $I10, alt734_1
+    rx725_cur."!mark_push"(0, rx725_pos, $I10)
+  # rx literal  "?"
+    add $I11, rx725_pos, 1
+    gt $I11, rx725_eos, rx725_fail
+    sub $I11, rx725_pos, rx725_off
+    substr $S10, rx725_tgt, $I11, 1
+    ne $S10, "?", rx725_fail
+    add rx725_pos, 1
+    goto alt734_end
+  alt734_1:
+    set_addr $I10, alt734_2
+    rx725_cur."!mark_push"(0, rx725_pos, $I10)
+  # rx literal  "!"
+    add $I11, rx725_pos, 1
+    gt $I11, rx725_eos, rx725_fail
+    sub $I11, rx725_pos, rx725_off
+    substr $S10, rx725_tgt, $I11, 1
+    ne $S10, "!", rx725_fail
+    add rx725_pos, 1
+    goto alt734_end
+  alt734_2:
+  alt734_end:
+    set_addr $I10, rxcap_735_fail
+    ($I12, $I11) = rx725_cur."!mark_peek"($I10)
+    rx725_cur."!cursor_pos"($I11)
+    ($P10) = rx725_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx725_pos, "")
+    rx725_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quant")
+    goto rxcap_735_done
+  rxcap_735_fail:
+    goto rx725_fail
+  rxcap_735_done:
+  alt731_end:
+.annotate 'line', 330
+  # rx rxquantr736 ** 0..1
+    set_addr $I737, rxquantr736_done
+    rx725_cur."!mark_push"(0, rx725_pos, $I737)
+  rxquantr736_loop:
+  # rx subrule "default_value" subtype=capture negate=
+    rx725_cur."!cursor_pos"(rx725_pos)
+    $P10 = rx725_cur."default_value"()
+    unless $P10, rx725_fail
+    rx725_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("default_value")
+    rx725_pos = $P10."pos"()
+    (rx725_rep) = rx725_cur."!mark_commit"($I737)
+  rxquantr736_done:
+.annotate 'line', 324
   # rx pass
-    rx768_cur."!cursor_pass"(rx768_pos, "term:sym<self>")
-    rx768_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx768_pos)
-    .return (rx768_cur)
-  rx768_fail:
+    rx725_cur."!cursor_pass"(rx725_pos, "parameter")
+    rx725_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx725_pos)
+    .return (rx725_cur)
+  rx725_fail:
 .annotate 'line', 4
-    (rx768_rep, rx768_pos, $I10, $P10) = rx768_cur."!mark_fail"(0)
-    lt rx768_pos, -1, rx768_done
-    eq rx768_pos, -1, rx768_fail
+    (rx725_rep, rx725_pos, $I10, $P10) = rx725_cur."!mark_fail"(0)
+    lt rx725_pos, -1, rx725_done
+    eq rx725_pos, -1, rx725_fail
     jump $I10
-  rx768_done:
-    rx768_cur."!cursor_fail"()
-    rx768_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
-    .return (rx768_cur)
+  rx725_done:
+    rx725_cur."!cursor_fail"()
+    rx725_cur."!cursor_debug"("FAIL  ", "parameter")
+    .return (rx725_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<self>"  :subid("174_1274022894.43745") :method
+.sub "!PREFIX__parameter"  :subid("171_1275811487.95429") :method
 .annotate 'line', 4
-    new $P770, "ResizablePMCArray"
-    push $P770, "self"
-    .return ($P770)
+    new $P727, "ResizablePMCArray"
+    push $P727, ""
+    .return ($P727)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<identifier>"  :subid("175_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "param_var"  :subid("172_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx774_tgt
-    .local int rx774_pos
-    .local int rx774_off
-    .local int rx774_eos
-    .local int rx774_rep
-    .local pmc rx774_cur
-    (rx774_cur, rx774_pos, rx774_tgt) = self."!cursor_start"()
-    rx774_cur."!cursor_debug"("START ", "term:sym<identifier>")
-    .lex unicode:"$\x{a2}", rx774_cur
+    .local string rx739_tgt
+    .local int rx739_pos
+    .local int rx739_off
+    .local int rx739_eos
+    .local int rx739_rep
+    .local pmc rx739_cur
+    (rx739_cur, rx739_pos, rx739_tgt) = self."!cursor_start"()
+    rx739_cur."!cursor_debug"("START ", "param_var")
+    rx739_cur."!cursor_caparray"("twigil")
+    .lex unicode:"$\x{a2}", rx739_cur
     .local pmc match
     .lex "$/", match
-    length rx774_eos, rx774_tgt
-    set rx774_off, 0
-    lt rx774_pos, 2, rx774_start
-    sub rx774_off, rx774_pos, 1
-    substr rx774_tgt, rx774_tgt, rx774_off
-  rx774_start:
+    length rx739_eos, rx739_tgt
+    gt rx739_pos, rx739_eos, rx739_done
+    set rx739_off, 0
+    lt rx739_pos, 2, rx739_start
+    sub rx739_off, rx739_pos, 1
+    substr rx739_tgt, rx739_tgt, rx739_off
+  rx739_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan778_done
-    goto rxscan778_scan
-  rxscan778_loop:
-    ($P10) = rx774_cur."from"()
+    ne $I10, -1, rxscan743_done
+    goto rxscan743_scan
+  rxscan743_loop:
+    ($P10) = rx739_cur."from"()
     inc $P10
-    set rx774_pos, $P10
-    ge rx774_pos, rx774_eos, rxscan778_done
-  rxscan778_scan:
-    set_addr $I10, rxscan778_loop
-    rx774_cur."!mark_push"(0, rx774_pos, $I10)
-  rxscan778_done:
-.annotate 'line', 365
-  # rx subrule "identifier" subtype=capture negate=
-    rx774_cur."!cursor_pos"(rx774_pos)
-    $P10 = rx774_cur."identifier"()
-    unless $P10, rx774_fail
-    rx774_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("identifier")
-    rx774_pos = $P10."pos"()
-  # rx enumcharlist negate=0 zerowidth
-    ge rx774_pos, rx774_eos, rx774_fail
-    sub $I10, rx774_pos, rx774_off
-    substr $S10, rx774_tgt, $I10, 1
-    index $I11, "(", $S10
-    lt $I11, 0, rx774_fail
-  # rx subrule "args" subtype=capture negate=
-    rx774_cur."!cursor_pos"(rx774_pos)
-    $P10 = rx774_cur."args"()
-    unless $P10, rx774_fail
-    rx774_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("args")
-    rx774_pos = $P10."pos"()
-.annotate 'line', 364
+    set rx739_pos, $P10
+    ge rx739_pos, rx739_eos, rxscan743_done
+  rxscan743_scan:
+    set_addr $I10, rxscan743_loop
+    rx739_cur."!mark_push"(0, rx739_pos, $I10)
+  rxscan743_done:
+.annotate 'line', 334
+  # rx subrule "sigil" subtype=capture negate=
+    rx739_cur."!cursor_pos"(rx739_pos)
+    $P10 = rx739_cur."sigil"()
+    unless $P10, rx739_fail
+    rx739_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sigil")
+    rx739_pos = $P10."pos"()
+  # rx rxquantr744 ** 0..1
+    set_addr $I745, rxquantr744_done
+    rx739_cur."!mark_push"(0, rx739_pos, $I745)
+  rxquantr744_loop:
+  # rx subrule "twigil" subtype=capture negate=
+    rx739_cur."!cursor_pos"(rx739_pos)
+    $P10 = rx739_cur."twigil"()
+    unless $P10, rx739_fail
+    rx739_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("twigil")
+    rx739_pos = $P10."pos"()
+    (rx739_rep) = rx739_cur."!mark_commit"($I745)
+  rxquantr744_done:
+  alt746_0:
+.annotate 'line', 335
+    set_addr $I10, alt746_1
+    rx739_cur."!mark_push"(0, rx739_pos, $I10)
+  # rx subrule "ident" subtype=capture negate=
+    rx739_cur."!cursor_pos"(rx739_pos)
+    $P10 = rx739_cur."ident"()
+    unless $P10, rx739_fail
+    rx739_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("name")
+    rx739_pos = $P10."pos"()
+    goto alt746_end
+  alt746_1:
+  # rx subcapture "name"
+    set_addr $I10, rxcap_747_fail
+    rx739_cur."!mark_push"(0, rx739_pos, $I10)
+  # rx enumcharlist negate=0 
+    ge rx739_pos, rx739_eos, rx739_fail
+    sub $I10, rx739_pos, rx739_off
+    substr $S10, rx739_tgt, $I10, 1
+    index $I11, "/!", $S10
+    lt $I11, 0, rx739_fail
+    inc rx739_pos
+    set_addr $I10, rxcap_747_fail
+    ($I12, $I11) = rx739_cur."!mark_peek"($I10)
+    rx739_cur."!cursor_pos"($I11)
+    ($P10) = rx739_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx739_pos, "")
+    rx739_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("name")
+    goto rxcap_747_done
+  rxcap_747_fail:
+    goto rx739_fail
+  rxcap_747_done:
+  alt746_end:
+.annotate 'line', 333
   # rx pass
-    rx774_cur."!cursor_pass"(rx774_pos, "term:sym<identifier>")
-    rx774_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx774_pos)
-    .return (rx774_cur)
-  rx774_fail:
+    rx739_cur."!cursor_pass"(rx739_pos, "param_var")
+    rx739_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx739_pos)
+    .return (rx739_cur)
+  rx739_fail:
 .annotate 'line', 4
-    (rx774_rep, rx774_pos, $I10, $P10) = rx774_cur."!mark_fail"(0)
-    lt rx774_pos, -1, rx774_done
-    eq rx774_pos, -1, rx774_fail
+    (rx739_rep, rx739_pos, $I10, $P10) = rx739_cur."!mark_fail"(0)
+    lt rx739_pos, -1, rx739_done
+    eq rx739_pos, -1, rx739_fail
     jump $I10
-  rx774_done:
-    rx774_cur."!cursor_fail"()
-    rx774_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
-    .return (rx774_cur)
+  rx739_done:
+    rx739_cur."!cursor_fail"()
+    rx739_cur."!cursor_debug"("FAIL  ", "param_var")
+    .return (rx739_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<identifier>"  :subid("176_1274022894.43745") :method
+.sub "!PREFIX__param_var"  :subid("173_1275811487.95429") :method
 .annotate 'line', 4
-    $P776 = self."!PREFIX__!subrule"("identifier", "")
-    new $P777, "ResizablePMCArray"
-    push $P777, $P776
-    .return ($P777)
+    $P741 = self."!PREFIX__!subrule"("sigil", "")
+    new $P742, "ResizablePMCArray"
+    push $P742, $P741
+    .return ($P742)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<name>"  :subid("177_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "named_param"  :subid("174_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx780_tgt
-    .local int rx780_pos
-    .local int rx780_off
-    .local int rx780_eos
-    .local int rx780_rep
-    .local pmc rx780_cur
-    (rx780_cur, rx780_pos, rx780_tgt) = self."!cursor_start"()
-    rx780_cur."!cursor_debug"("START ", "term:sym<name>")
-    rx780_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx780_cur
-    .local pmc match
-    .lex "$/", match
-    length rx780_eos, rx780_tgt
-    set rx780_off, 0
-    lt rx780_pos, 2, rx780_start
-    sub rx780_off, rx780_pos, 1
-    substr rx780_tgt, rx780_tgt, rx780_off
-  rx780_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan784_done
-    goto rxscan784_scan
-  rxscan784_loop:
-    ($P10) = rx780_cur."from"()
-    inc $P10
-    set rx780_pos, $P10
-    ge rx780_pos, rx780_eos, rxscan784_done
-  rxscan784_scan:
-    set_addr $I10, rxscan784_loop
-    rx780_cur."!mark_push"(0, rx780_pos, $I10)
-  rxscan784_done:
-.annotate 'line', 369
-  # rx subrule "name" subtype=capture negate=
-    rx780_cur."!cursor_pos"(rx780_pos)
-    $P10 = rx780_cur."name"()
-    unless $P10, rx780_fail
-    rx780_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("name")
-    rx780_pos = $P10."pos"()
-  # rx rxquantr785 ** 0..1
-    set_addr $I786, rxquantr785_done
-    rx780_cur."!mark_push"(0, rx780_pos, $I786)
-  rxquantr785_loop:
-  # rx subrule "args" subtype=capture negate=
-    rx780_cur."!cursor_pos"(rx780_pos)
-    $P10 = rx780_cur."args"()
-    unless $P10, rx780_fail
-    rx780_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("args")
-    rx780_pos = $P10."pos"()
-    (rx780_rep) = rx780_cur."!mark_commit"($I786)
-  rxquantr785_done:
-.annotate 'line', 368
+    .local string rx749_tgt
+    .local int rx749_pos
+    .local int rx749_off
+    .local int rx749_eos
+    .local int rx749_rep
+    .local pmc rx749_cur
+    (rx749_cur, rx749_pos, rx749_tgt) = self."!cursor_start"()
+    rx749_cur."!cursor_debug"("START ", "named_param")
+    .lex unicode:"$\x{a2}", rx749_cur
+    .local pmc match
+    .lex "$/", match
+    length rx749_eos, rx749_tgt
+    gt rx749_pos, rx749_eos, rx749_done
+    set rx749_off, 0
+    lt rx749_pos, 2, rx749_start
+    sub rx749_off, rx749_pos, 1
+    substr rx749_tgt, rx749_tgt, rx749_off
+  rx749_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan753_done
+    goto rxscan753_scan
+  rxscan753_loop:
+    ($P10) = rx749_cur."from"()
+    inc $P10
+    set rx749_pos, $P10
+    ge rx749_pos, rx749_eos, rxscan753_done
+  rxscan753_scan:
+    set_addr $I10, rxscan753_loop
+    rx749_cur."!mark_push"(0, rx749_pos, $I10)
+  rxscan753_done:
+.annotate 'line', 339
+  # rx literal  ":"
+    add $I11, rx749_pos, 1
+    gt $I11, rx749_eos, rx749_fail
+    sub $I11, rx749_pos, rx749_off
+    substr $S10, rx749_tgt, $I11, 1
+    ne $S10, ":", rx749_fail
+    add rx749_pos, 1
+  # rx subrule "param_var" subtype=capture negate=
+    rx749_cur."!cursor_pos"(rx749_pos)
+    $P10 = rx749_cur."param_var"()
+    unless $P10, rx749_fail
+    rx749_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("param_var")
+    rx749_pos = $P10."pos"()
+.annotate 'line', 338
   # rx pass
-    rx780_cur."!cursor_pass"(rx780_pos, "term:sym<name>")
-    rx780_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx780_pos)
-    .return (rx780_cur)
-  rx780_fail:
+    rx749_cur."!cursor_pass"(rx749_pos, "named_param")
+    rx749_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx749_pos)
+    .return (rx749_cur)
+  rx749_fail:
 .annotate 'line', 4
-    (rx780_rep, rx780_pos, $I10, $P10) = rx780_cur."!mark_fail"(0)
-    lt rx780_pos, -1, rx780_done
-    eq rx780_pos, -1, rx780_fail
+    (rx749_rep, rx749_pos, $I10, $P10) = rx749_cur."!mark_fail"(0)
+    lt rx749_pos, -1, rx749_done
+    eq rx749_pos, -1, rx749_fail
     jump $I10
-  rx780_done:
-    rx780_cur."!cursor_fail"()
-    rx780_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
-    .return (rx780_cur)
+  rx749_done:
+    rx749_cur."!cursor_fail"()
+    rx749_cur."!cursor_debug"("FAIL  ", "named_param")
+    .return (rx749_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<name>"  :subid("178_1274022894.43745") :method
+.sub "!PREFIX__named_param"  :subid("175_1275811487.95429") :method
 .annotate 'line', 4
-    $P782 = self."!PREFIX__!subrule"("name", "")
-    new $P783, "ResizablePMCArray"
-    push $P783, $P782
-    .return ($P783)
+    $P751 = self."!PREFIX__!subrule"("param_var", ":")
+    new $P752, "ResizablePMCArray"
+    push $P752, $P751
+    .return ($P752)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<pir::op>"  :subid("179_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "default_value"  :subid("176_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx788_tgt
-    .local int rx788_pos
-    .local int rx788_off
-    .local int rx788_eos
-    .local int rx788_rep
-    .local pmc rx788_cur
-    (rx788_cur, rx788_pos, rx788_tgt) = self."!cursor_start"()
-    rx788_cur."!cursor_debug"("START ", "term:sym<pir::op>")
-    rx788_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx788_cur
-    .local pmc match
-    .lex "$/", match
-    length rx788_eos, rx788_tgt
-    set rx788_off, 0
-    lt rx788_pos, 2, rx788_start
-    sub rx788_off, rx788_pos, 1
-    substr rx788_tgt, rx788_tgt, rx788_off
-  rx788_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan791_done
-    goto rxscan791_scan
-  rxscan791_loop:
-    ($P10) = rx788_cur."from"()
-    inc $P10
-    set rx788_pos, $P10
-    ge rx788_pos, rx788_eos, rxscan791_done
-  rxscan791_scan:
-    set_addr $I10, rxscan791_loop
-    rx788_cur."!mark_push"(0, rx788_pos, $I10)
-  rxscan791_done:
-.annotate 'line', 373
-  # rx literal  "pir::"
-    add $I11, rx788_pos, 5
-    gt $I11, rx788_eos, rx788_fail
-    sub $I11, rx788_pos, rx788_off
-    substr $S10, rx788_tgt, $I11, 5
-    ne $S10, "pir::", rx788_fail
-    add rx788_pos, 5
-  # rx subcapture "op"
-    set_addr $I10, rxcap_792_fail
-    rx788_cur."!mark_push"(0, rx788_pos, $I10)
-  # rx charclass_q w r 1..-1
-    sub $I10, rx788_pos, rx788_off
-    find_not_cclass $I11, 8192, rx788_tgt, $I10, rx788_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx788_fail
-    add rx788_pos, rx788_off, $I11
-    set_addr $I10, rxcap_792_fail
-    ($I12, $I11) = rx788_cur."!mark_peek"($I10)
-    rx788_cur."!cursor_pos"($I11)
-    ($P10) = rx788_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx788_pos, "")
-    rx788_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("op")
-    goto rxcap_792_done
-  rxcap_792_fail:
-    goto rx788_fail
-  rxcap_792_done:
-  # rx rxquantr793 ** 0..1
-    set_addr $I794, rxquantr793_done
-    rx788_cur."!mark_push"(0, rx788_pos, $I794)
-  rxquantr793_loop:
-  # rx subrule "args" subtype=capture negate=
-    rx788_cur."!cursor_pos"(rx788_pos)
-    $P10 = rx788_cur."args"()
-    unless $P10, rx788_fail
-    rx788_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("args")
-    rx788_pos = $P10."pos"()
-    (rx788_rep) = rx788_cur."!mark_commit"($I794)
-  rxquantr793_done:
-.annotate 'line', 372
+    .local string rx755_tgt
+    .local int rx755_pos
+    .local int rx755_off
+    .local int rx755_eos
+    .local int rx755_rep
+    .local pmc rx755_cur
+    (rx755_cur, rx755_pos, rx755_tgt) = self."!cursor_start"()
+    rx755_cur."!cursor_debug"("START ", "default_value")
+    .lex unicode:"$\x{a2}", rx755_cur
+    .local pmc match
+    .lex "$/", match
+    length rx755_eos, rx755_tgt
+    gt rx755_pos, rx755_eos, rx755_done
+    set rx755_off, 0
+    lt rx755_pos, 2, rx755_start
+    sub rx755_off, rx755_pos, 1
+    substr rx755_tgt, rx755_tgt, rx755_off
+  rx755_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan759_done
+    goto rxscan759_scan
+  rxscan759_loop:
+    ($P10) = rx755_cur."from"()
+    inc $P10
+    set rx755_pos, $P10
+    ge rx755_pos, rx755_eos, rxscan759_done
+  rxscan759_scan:
+    set_addr $I10, rxscan759_loop
+    rx755_cur."!mark_push"(0, rx755_pos, $I10)
+  rxscan759_done:
+.annotate 'line', 342
+  # rx subrule "ws" subtype=method negate=
+    rx755_cur."!cursor_pos"(rx755_pos)
+    $P10 = rx755_cur."ws"()
+    unless $P10, rx755_fail
+    rx755_pos = $P10."pos"()
+  # rx literal  "="
+    add $I11, rx755_pos, 1
+    gt $I11, rx755_eos, rx755_fail
+    sub $I11, rx755_pos, rx755_off
+    substr $S10, rx755_tgt, $I11, 1
+    ne $S10, "=", rx755_fail
+    add rx755_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx755_cur."!cursor_pos"(rx755_pos)
+    $P10 = rx755_cur."ws"()
+    unless $P10, rx755_fail
+    rx755_pos = $P10."pos"()
+  # rx subrule "EXPR" subtype=capture negate=
+    rx755_cur."!cursor_pos"(rx755_pos)
+    $P10 = rx755_cur."EXPR"("i=")
+    unless $P10, rx755_fail
+    rx755_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx755_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx755_cur."!cursor_pos"(rx755_pos)
+    $P10 = rx755_cur."ws"()
+    unless $P10, rx755_fail
+    rx755_pos = $P10."pos"()
   # rx pass
-    rx788_cur."!cursor_pass"(rx788_pos, "term:sym<pir::op>")
-    rx788_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx788_pos)
-    .return (rx788_cur)
-  rx788_fail:
+    rx755_cur."!cursor_pass"(rx755_pos, "default_value")
+    rx755_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx755_pos)
+    .return (rx755_cur)
+  rx755_fail:
 .annotate 'line', 4
-    (rx788_rep, rx788_pos, $I10, $P10) = rx788_cur."!mark_fail"(0)
-    lt rx788_pos, -1, rx788_done
-    eq rx788_pos, -1, rx788_fail
+    (rx755_rep, rx755_pos, $I10, $P10) = rx755_cur."!mark_fail"(0)
+    lt rx755_pos, -1, rx755_done
+    eq rx755_pos, -1, rx755_fail
     jump $I10
-  rx788_done:
-    rx788_cur."!cursor_fail"()
-    rx788_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
-    .return (rx788_cur)
+  rx755_done:
+    rx755_cur."!cursor_fail"()
+    rx755_cur."!cursor_debug"("FAIL  ", "default_value")
+    .return (rx755_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<pir::op>"  :subid("180_1274022894.43745") :method
+.sub "!PREFIX__default_value"  :subid("177_1275811487.95429") :method
 .annotate 'line', 4
-    new $P790, "ResizablePMCArray"
-    push $P790, "pir::"
-    .return ($P790)
+    $P757 = self."!PREFIX__!subrule"("ws", "")
+    new $P758, "ResizablePMCArray"
+    push $P758, $P757
+    .return ($P758)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "args"  :subid("181_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "regex_declarator"  :subid("178_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx796_tgt
-    .local int rx796_pos
-    .local int rx796_off
-    .local int rx796_eos
-    .local int rx796_rep
-    .local pmc rx796_cur
-    (rx796_cur, rx796_pos, rx796_tgt) = self."!cursor_start"()
-    rx796_cur."!cursor_debug"("START ", "args")
-    .lex unicode:"$\x{a2}", rx796_cur
+    .local string rx764_tgt
+    .local int rx764_pos
+    .local int rx764_off
+    .local int rx764_eos
+    .local int rx764_rep
+    .local pmc rx764_cur
+    (rx764_cur, rx764_pos, rx764_tgt) = self."!cursor_start"()
+    rx764_cur."!cursor_debug"("START ", "regex_declarator")
+    rx764_cur."!cursor_caparray"("signature")
+    .lex unicode:"$\x{a2}", rx764_cur
     .local pmc match
     .lex "$/", match
-    length rx796_eos, rx796_tgt
-    set rx796_off, 0
-    lt rx796_pos, 2, rx796_start
-    sub rx796_off, rx796_pos, 1
-    substr rx796_tgt, rx796_tgt, rx796_off
-  rx796_start:
+    length rx764_eos, rx764_tgt
+    gt rx764_pos, rx764_eos, rx764_done
+    set rx764_off, 0
+    lt rx764_pos, 2, rx764_start
+    sub rx764_off, rx764_pos, 1
+    substr rx764_tgt, rx764_tgt, rx764_off
+  rx764_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan800_done
-    goto rxscan800_scan
-  rxscan800_loop:
-    ($P10) = rx796_cur."from"()
+    ne $I10, -1, rxscan768_done
+    goto rxscan768_scan
+  rxscan768_loop:
+    ($P10) = rx764_cur."from"()
     inc $P10
-    set rx796_pos, $P10
-    ge rx796_pos, rx796_eos, rxscan800_done
-  rxscan800_scan:
-    set_addr $I10, rxscan800_loop
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
-  rxscan800_done:
-.annotate 'line', 377
+    set rx764_pos, $P10
+    ge rx764_pos, rx764_eos, rxscan768_done
+  rxscan768_scan:
+    set_addr $I10, rxscan768_loop
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  rxscan768_done:
+.annotate 'line', 344
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  alt770_0:
+.annotate 'line', 345
+    set_addr $I10, alt770_1
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+.annotate 'line', 346
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx subcapture "proto"
+    set_addr $I10, rxcap_772_fail
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  # rx literal  "proto"
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "proto", rx764_fail
+    add rx764_pos, 5
+    set_addr $I10, rxcap_772_fail
+    ($I12, $I11) = rx764_cur."!mark_peek"($I10)
+    rx764_cur."!cursor_pos"($I11)
+    ($P10) = rx764_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx764_pos, "")
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("proto")
+    goto rxcap_772_done
+  rxcap_772_fail:
+    goto rx764_fail
+  rxcap_772_done:
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  alt774_0:
+    set_addr $I10, alt774_1
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  # rx literal  "regex"
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "regex", rx764_fail
+    add rx764_pos, 5
+    goto alt774_end
+  alt774_1:
+    set_addr $I10, alt774_2
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  # rx literal  "token"
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "token", rx764_fail
+    add rx764_pos, 5
+    goto alt774_end
+  alt774_2:
+  # rx literal  "rule"
+    add $I11, rx764_pos, 4
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 4
+    ne $S10, "rule", rx764_fail
+    add rx764_pos, 4
+  alt774_end:
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+.annotate 'line', 347
+  # rx subrule "deflongname" subtype=capture negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."deflongname"()
+    unless $P10, rx764_fail
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("deflongname")
+    rx764_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  alt777_0:
+.annotate 'line', 348
+    set_addr $I10, alt777_1
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+.annotate 'line', 349
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx literal  "{"
+    add $I11, rx764_pos, 1
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 1
+    ne $S10, "{", rx764_fail
+    add rx764_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx literal  "<...>"
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "<...>", rx764_fail
+    add rx764_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx literal  "}"
+    add $I11, rx764_pos, 1
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 1
+    ne $S10, "}", rx764_fail
+    add rx764_pos, 1
+  # rx subrule "ENDSTMT" subtype=zerowidth negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ENDSTMT"()
+    unless $P10, rx764_fail
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+    goto alt777_end
+  alt777_1:
+.annotate 'line', 350
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx subrule "panic" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."panic"("Proto regex body must be <...>")
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  alt777_end:
+.annotate 'line', 351
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+.annotate 'line', 346
+    goto alt770_end
+  alt770_1:
+.annotate 'line', 352
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_787_fail
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  alt786_0:
+    set_addr $I10, alt786_1
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  # rx literal  "regex"
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "regex", rx764_fail
+    add rx764_pos, 5
+    goto alt786_end
+  alt786_1:
+    set_addr $I10, alt786_2
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  # rx literal  "token"
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "token", rx764_fail
+    add rx764_pos, 5
+    goto alt786_end
+  alt786_2:
+  # rx literal  "rule"
+    add $I11, rx764_pos, 4
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 4
+    ne $S10, "rule", rx764_fail
+    add rx764_pos, 4
+  alt786_end:
+    set_addr $I10, rxcap_787_fail
+    ($I12, $I11) = rx764_cur."!mark_peek"($I10)
+    rx764_cur."!cursor_pos"($I11)
+    ($P10) = rx764_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx764_pos, "")
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_787_done
+  rxcap_787_fail:
+    goto rx764_fail
+  rxcap_787_done:
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+.annotate 'line', 353
+  # rx subrule "deflongname" subtype=capture negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."deflongname"()
+    unless $P10, rx764_fail
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("deflongname")
+    rx764_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+.annotate 'line', 354
+  # rx subrule "newpad" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."newpad"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+.annotate 'line', 355
+  # rx rxquantr791 ** 0..1
+    set_addr $I796, rxquantr791_done
+    rx764_cur."!mark_push"(0, rx764_pos, $I796)
+  rxquantr791_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx796_pos, 1
-    gt $I11, rx796_eos, rx796_fail
-    sub $I11, rx796_pos, rx796_off
-    substr $S10, rx796_tgt, $I11, 1
-    ne $S10, "(", rx796_fail
-    add rx796_pos, 1
-  # rx subrule "arglist" subtype=capture negate=
-    rx796_cur."!cursor_pos"(rx796_pos)
-    $P10 = rx796_cur."arglist"()
-    unless $P10, rx796_fail
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx796_pos = $P10."pos"()
+    add $I11, rx764_pos, 1
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 1
+    ne $S10, "(", rx764_fail
+    add rx764_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  # rx subrule "signature" subtype=capture negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."signature"()
+    unless $P10, rx764_fail
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("signature")
+    rx764_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx796_pos, 1
-    gt $I11, rx796_eos, rx796_fail
-    sub $I11, rx796_pos, rx796_off
-    substr $S10, rx796_tgt, $I11, 1
-    ne $S10, ")", rx796_fail
-    add rx796_pos, 1
+    add $I11, rx764_pos, 1
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 1
+    ne $S10, ")", rx764_fail
+    add rx764_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+    (rx764_rep) = rx764_cur."!mark_commit"($I796)
+  rxquantr791_done:
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+.annotate 'line', 356
+  # rx reduce name="regex_declarator" key="open"
+    rx764_cur."!cursor_pos"(rx764_pos)
+    rx764_cur."!reduce"("regex_declarator", "open")
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+.annotate 'line', 357
+  # rx literal  "{"
+    add $I11, rx764_pos, 1
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 1
+    ne $S10, "{", rx764_fail
+    add rx764_pos, 1
+  # rx subrule "LANG" subtype=capture negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx764_fail
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("p6regex")
+    rx764_pos = $P10."pos"()
+  # rx literal  "}"
+    add $I11, rx764_pos, 1
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 1
+    ne $S10, "}", rx764_fail
+    add rx764_pos, 1
+  # rx subrule "ENDSTMT" subtype=zerowidth negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ENDSTMT"()
+    unless $P10, rx764_fail
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+  alt770_end:
+.annotate 'line', 358
+  # rx subrule "ws" subtype=method negate=
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."ws"()
+    unless $P10, rx764_fail
+    rx764_pos = $P10."pos"()
+.annotate 'line', 344
   # rx pass
-    rx796_cur."!cursor_pass"(rx796_pos, "args")
-    rx796_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx796_pos)
-    .return (rx796_cur)
-  rx796_fail:
+    rx764_cur."!cursor_pass"(rx764_pos, "regex_declarator")
+    rx764_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx764_pos)
+    .return (rx764_cur)
+  rx764_fail:
 .annotate 'line', 4
-    (rx796_rep, rx796_pos, $I10, $P10) = rx796_cur."!mark_fail"(0)
-    lt rx796_pos, -1, rx796_done
-    eq rx796_pos, -1, rx796_fail
+    (rx764_rep, rx764_pos, $I10, $P10) = rx764_cur."!mark_fail"(0)
+    lt rx764_pos, -1, rx764_done
+    eq rx764_pos, -1, rx764_fail
     jump $I10
-  rx796_done:
-    rx796_cur."!cursor_fail"()
-    rx796_cur."!cursor_debug"("FAIL  ", "args")
-    .return (rx796_cur)
+  rx764_done:
+    rx764_cur."!cursor_fail"()
+    rx764_cur."!cursor_debug"("FAIL  ", "regex_declarator")
+    .return (rx764_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__args"  :subid("182_1274022894.43745") :method
+.sub "!PREFIX__regex_declarator"  :subid("179_1275811487.95429") :method
 .annotate 'line', 4
-    $P798 = self."!PREFIX__!subrule"("arglist", "(")
-    new $P799, "ResizablePMCArray"
-    push $P799, $P798
-    .return ($P799)
+    $P766 = self."!PREFIX__!subrule"("ws", "")
+    new $P767, "ResizablePMCArray"
+    push $P767, $P766
+    .return ($P767)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "arglist"  :subid("183_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "dotty"  :subid("180_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx802_tgt
     .local int rx802_pos
@@ -9465,11 +9381,13 @@
     .local int rx802_rep
     .local pmc rx802_cur
     (rx802_cur, rx802_pos, rx802_tgt) = self."!cursor_start"()
-    rx802_cur."!cursor_debug"("START ", "arglist")
+    rx802_cur."!cursor_debug"("START ", "dotty")
+    rx802_cur."!cursor_caparray"("args")
     .lex unicode:"$\x{a2}", rx802_cur
     .local pmc match
     .lex "$/", match
     length rx802_eos, rx802_tgt
+    gt rx802_pos, rx802_eos, rx802_done
     set rx802_off, 0
     lt rx802_pos, 2, rx802_start
     sub rx802_off, rx802_pos, 1
@@ -9487,31 +9405,114 @@
     set_addr $I10, rxscan806_loop
     rx802_cur."!mark_push"(0, rx802_pos, $I10)
   rxscan806_done:
-.annotate 'line', 381
-  # rx subrule "ws" subtype=method negate=
-    rx802_cur."!cursor_pos"(rx802_pos)
-    $P10 = rx802_cur."ws"()
-    unless $P10, rx802_fail
-    rx802_pos = $P10."pos"()
+.annotate 'line', 362
+  # rx literal  "."
+    add $I11, rx802_pos, 1
+    gt $I11, rx802_eos, rx802_fail
+    sub $I11, rx802_pos, rx802_off
+    substr $S10, rx802_tgt, $I11, 1
+    ne $S10, ".", rx802_fail
+    add rx802_pos, 1
   alt807_0:
-.annotate 'line', 382
+.annotate 'line', 363
     set_addr $I10, alt807_1
     rx802_cur."!mark_push"(0, rx802_pos, $I10)
-.annotate 'line', 383
-  # rx subrule "EXPR" subtype=capture negate=
+  # rx subrule "identifier" subtype=capture negate=
     rx802_cur."!cursor_pos"(rx802_pos)
-    $P10 = rx802_cur."EXPR"("f=")
+    $P10 = rx802_cur."identifier"()
     unless $P10, rx802_fail
     rx802_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
+    $P10."!cursor_names"("longname=identifier")
     rx802_pos = $P10."pos"()
     goto alt807_end
   alt807_1:
+.annotate 'line', 364
+  # rx enumcharlist negate=0 zerowidth
+    ge rx802_pos, rx802_eos, rx802_fail
+    sub $I10, rx802_pos, rx802_off
+    substr $S10, rx802_tgt, $I10, 1
+    index $I11, "'\"", $S10
+    lt $I11, 0, rx802_fail
+  # rx subrule "quote" subtype=capture negate=
+    rx802_cur."!cursor_pos"(rx802_pos)
+    $P10 = rx802_cur."quote"()
+    unless $P10, rx802_fail
+    rx802_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote")
+    rx802_pos = $P10."pos"()
+  alt808_0:
+.annotate 'line', 365
+    set_addr $I10, alt808_1
+    rx802_cur."!mark_push"(0, rx802_pos, $I10)
+  # rx enumcharlist negate=0 zerowidth
+    ge rx802_pos, rx802_eos, rx802_fail
+    sub $I10, rx802_pos, rx802_off
+    substr $S10, rx802_tgt, $I10, 1
+    index $I11, "(", $S10
+    lt $I11, 0, rx802_fail
+    goto alt808_end
+  alt808_1:
+  # rx subrule "panic" subtype=method negate=
+    rx802_cur."!cursor_pos"(rx802_pos)
+    $P10 = rx802_cur."panic"("Quoted method name requires parenthesized arguments")
+    unless $P10, rx802_fail
+    rx802_pos = $P10."pos"()
+  alt808_end:
   alt807_end:
-.annotate 'line', 380
+.annotate 'line', 371
+  # rx rxquantr809 ** 0..1
+    set_addr $I811, rxquantr809_done
+    rx802_cur."!mark_push"(0, rx802_pos, $I811)
+  rxquantr809_loop:
+  alt810_0:
+.annotate 'line', 368
+    set_addr $I10, alt810_1
+    rx802_cur."!mark_push"(0, rx802_pos, $I10)
+.annotate 'line', 369
+  # rx enumcharlist negate=0 zerowidth
+    ge rx802_pos, rx802_eos, rx802_fail
+    sub $I10, rx802_pos, rx802_off
+    substr $S10, rx802_tgt, $I10, 1
+    index $I11, "(", $S10
+    lt $I11, 0, rx802_fail
+  # rx subrule "args" subtype=capture negate=
+    rx802_cur."!cursor_pos"(rx802_pos)
+    $P10 = rx802_cur."args"()
+    unless $P10, rx802_fail
+    rx802_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("args")
+    rx802_pos = $P10."pos"()
+    goto alt810_end
+  alt810_1:
+.annotate 'line', 370
+  # rx literal  ":"
+    add $I11, rx802_pos, 1
+    gt $I11, rx802_eos, rx802_fail
+    sub $I11, rx802_pos, rx802_off
+    substr $S10, rx802_tgt, $I11, 1
+    ne $S10, ":", rx802_fail
+    add rx802_pos, 1
+  # rx charclass s
+    ge rx802_pos, rx802_eos, rx802_fail
+    sub $I10, rx802_pos, rx802_off
+    is_cclass $I11, 32, rx802_tgt, $I10
+    unless $I11, rx802_fail
+    inc rx802_pos
+  # rx subrule "arglist" subtype=capture negate=
+    rx802_cur."!cursor_pos"(rx802_pos)
+    $P10 = rx802_cur."arglist"()
+    unless $P10, rx802_fail
+    rx802_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("args")
+    rx802_pos = $P10."pos"()
+  alt810_end:
+.annotate 'line', 371
+    (rx802_rep) = rx802_cur."!mark_commit"($I811)
+  rxquantr809_done:
+.annotate 'line', 361
   # rx pass
-    rx802_cur."!cursor_pass"(rx802_pos, "arglist")
-    rx802_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx802_pos)
+    rx802_cur."!cursor_pass"(rx802_pos, "dotty")
+    rx802_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx802_pos)
     .return (rx802_cur)
   rx802_fail:
 .annotate 'line', 4
@@ -9521,178 +9522,132 @@
     jump $I10
   rx802_done:
     rx802_cur."!cursor_fail"()
-    rx802_cur."!cursor_debug"("FAIL  ", "arglist")
+    rx802_cur."!cursor_debug"("FAIL  ", "dotty")
     .return (rx802_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("184_1274022894.43745") :method
+.sub "!PREFIX__dotty"  :subid("181_1275811487.95429") :method
 .annotate 'line', 4
-    $P804 = self."!PREFIX__!subrule"("", "")
+    $P804 = self."!PREFIX__!subrule"("identifier", ".")
     new $P805, "ResizablePMCArray"
+    push $P805, "'"
+    push $P805, "\""
     push $P805, $P804
     .return ($P805)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<value>"  :subid("185_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx809_tgt
-    .local int rx809_pos
-    .local int rx809_off
-    .local int rx809_eos
-    .local int rx809_rep
-    .local pmc rx809_cur
-    (rx809_cur, rx809_pos, rx809_tgt) = self."!cursor_start"()
-    rx809_cur."!cursor_debug"("START ", "term:sym<value>")
-    .lex unicode:"$\x{a2}", rx809_cur
-    .local pmc match
-    .lex "$/", match
-    length rx809_eos, rx809_tgt
-    set rx809_off, 0
-    lt rx809_pos, 2, rx809_start
-    sub rx809_off, rx809_pos, 1
-    substr rx809_tgt, rx809_tgt, rx809_off
-  rx809_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan813_done
-    goto rxscan813_scan
-  rxscan813_loop:
-    ($P10) = rx809_cur."from"()
-    inc $P10
-    set rx809_pos, $P10
-    ge rx809_pos, rx809_eos, rxscan813_done
-  rxscan813_scan:
-    set_addr $I10, rxscan813_loop
-    rx809_cur."!mark_push"(0, rx809_pos, $I10)
-  rxscan813_done:
-.annotate 'line', 389
-  # rx subrule "value" subtype=capture negate=
-    rx809_cur."!cursor_pos"(rx809_pos)
-    $P10 = rx809_cur."value"()
-    unless $P10, rx809_fail
-    rx809_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("value")
-    rx809_pos = $P10."pos"()
-  # rx pass
-    rx809_cur."!cursor_pass"(rx809_pos, "term:sym<value>")
-    rx809_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx809_pos)
-    .return (rx809_cur)
-  rx809_fail:
-.annotate 'line', 4
-    (rx809_rep, rx809_pos, $I10, $P10) = rx809_cur."!mark_fail"(0)
-    lt rx809_pos, -1, rx809_done
-    eq rx809_pos, -1, rx809_fail
-    jump $I10
-  rx809_done:
-    rx809_cur."!cursor_fail"()
-    rx809_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
-    .return (rx809_cur)
-    .return ()
+.sub "term"  :subid("182_1275811487.95429") :method
+.annotate 'line', 375
+    $P813 = self."!protoregex"("term")
+    .return ($P813)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<value>"  :subid("186_1274022894.43745") :method
-.annotate 'line', 4
-    $P811 = self."!PREFIX__!subrule"("value", "")
-    new $P812, "ResizablePMCArray"
-    push $P812, $P811
-    .return ($P812)
+.sub "!PREFIX__term"  :subid("183_1275811487.95429") :method
+.annotate 'line', 375
+    $P815 = self."!PREFIX__!protoregex"("term")
+    .return ($P815)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "value"  :subid("187_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<self>"  :subid("184_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx815_tgt
-    .local int rx815_pos
-    .local int rx815_off
-    .local int rx815_eos
-    .local int rx815_rep
-    .local pmc rx815_cur
-    (rx815_cur, rx815_pos, rx815_tgt) = self."!cursor_start"()
-    rx815_cur."!cursor_debug"("START ", "value")
-    .lex unicode:"$\x{a2}", rx815_cur
+    .local string rx817_tgt
+    .local int rx817_pos
+    .local int rx817_off
+    .local int rx817_eos
+    .local int rx817_rep
+    .local pmc rx817_cur
+    (rx817_cur, rx817_pos, rx817_tgt) = self."!cursor_start"()
+    rx817_cur."!cursor_debug"("START ", "term:sym<self>")
+    .lex unicode:"$\x{a2}", rx817_cur
     .local pmc match
     .lex "$/", match
-    length rx815_eos, rx815_tgt
-    set rx815_off, 0
-    lt rx815_pos, 2, rx815_start
-    sub rx815_off, rx815_pos, 1
-    substr rx815_tgt, rx815_tgt, rx815_off
-  rx815_start:
+    length rx817_eos, rx817_tgt
+    gt rx817_pos, rx817_eos, rx817_done
+    set rx817_off, 0
+    lt rx817_pos, 2, rx817_start
+    sub rx817_off, rx817_pos, 1
+    substr rx817_tgt, rx817_tgt, rx817_off
+  rx817_start:
     $I10 = self.'from'()
     ne $I10, -1, rxscan820_done
     goto rxscan820_scan
   rxscan820_loop:
-    ($P10) = rx815_cur."from"()
+    ($P10) = rx817_cur."from"()
     inc $P10
-    set rx815_pos, $P10
-    ge rx815_pos, rx815_eos, rxscan820_done
+    set rx817_pos, $P10
+    ge rx817_pos, rx817_eos, rxscan820_done
   rxscan820_scan:
     set_addr $I10, rxscan820_loop
-    rx815_cur."!mark_push"(0, rx815_pos, $I10)
+    rx817_cur."!mark_push"(0, rx817_pos, $I10)
   rxscan820_done:
-  alt821_0:
-.annotate 'line', 391
-    set_addr $I10, alt821_1
-    rx815_cur."!mark_push"(0, rx815_pos, $I10)
-.annotate 'line', 392
-  # rx subrule "quote" subtype=capture negate=
-    rx815_cur."!cursor_pos"(rx815_pos)
-    $P10 = rx815_cur."quote"()
-    unless $P10, rx815_fail
-    rx815_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote")
-    rx815_pos = $P10."pos"()
-    goto alt821_end
-  alt821_1:
-.annotate 'line', 393
-  # rx subrule "number" subtype=capture negate=
-    rx815_cur."!cursor_pos"(rx815_pos)
-    $P10 = rx815_cur."number"()
-    unless $P10, rx815_fail
-    rx815_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("number")
-    rx815_pos = $P10."pos"()
-  alt821_end:
-.annotate 'line', 391
+.annotate 'line', 377
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_821_fail
+    rx817_cur."!mark_push"(0, rx817_pos, $I10)
+  # rx literal  "self"
+    add $I11, rx817_pos, 4
+    gt $I11, rx817_eos, rx817_fail
+    sub $I11, rx817_pos, rx817_off
+    substr $S10, rx817_tgt, $I11, 4
+    ne $S10, "self", rx817_fail
+    add rx817_pos, 4
+    set_addr $I10, rxcap_821_fail
+    ($I12, $I11) = rx817_cur."!mark_peek"($I10)
+    rx817_cur."!cursor_pos"($I11)
+    ($P10) = rx817_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx817_pos, "")
+    rx817_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_821_done
+  rxcap_821_fail:
+    goto rx817_fail
+  rxcap_821_done:
+  # rxanchor rwb
+    le rx817_pos, 0, rx817_fail
+    sub $I10, rx817_pos, rx817_off
+    is_cclass $I11, 8192, rx817_tgt, $I10
+    if $I11, rx817_fail
+    dec $I10
+    is_cclass $I11, 8192, rx817_tgt, $I10
+    unless $I11, rx817_fail
   # rx pass
-    rx815_cur."!cursor_pass"(rx815_pos, "value")
-    rx815_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx815_pos)
-    .return (rx815_cur)
-  rx815_fail:
+    rx817_cur."!cursor_pass"(rx817_pos, "term:sym<self>")
+    rx817_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx817_pos)
+    .return (rx817_cur)
+  rx817_fail:
 .annotate 'line', 4
-    (rx815_rep, rx815_pos, $I10, $P10) = rx815_cur."!mark_fail"(0)
-    lt rx815_pos, -1, rx815_done
-    eq rx815_pos, -1, rx815_fail
+    (rx817_rep, rx817_pos, $I10, $P10) = rx817_cur."!mark_fail"(0)
+    lt rx817_pos, -1, rx817_done
+    eq rx817_pos, -1, rx817_fail
     jump $I10
-  rx815_done:
-    rx815_cur."!cursor_fail"()
-    rx815_cur."!cursor_debug"("FAIL  ", "value")
-    .return (rx815_cur)
+  rx817_done:
+    rx817_cur."!cursor_fail"()
+    rx817_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
+    .return (rx817_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__value"  :subid("188_1274022894.43745") :method
+.sub "!PREFIX__term:sym<self>"  :subid("185_1275811487.95429") :method
 .annotate 'line', 4
-    $P817 = self."!PREFIX__!subrule"("number", "")
-    $P818 = self."!PREFIX__!subrule"("quote", "")
     new $P819, "ResizablePMCArray"
-    push $P819, $P817
-    push $P819, $P818
+    push $P819, "self"
     .return ($P819)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "number"  :subid("189_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<identifier>"  :subid("186_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx823_tgt
     .local int rx823_pos
@@ -9701,81 +9656,54 @@
     .local int rx823_rep
     .local pmc rx823_cur
     (rx823_cur, rx823_pos, rx823_tgt) = self."!cursor_start"()
-    rx823_cur."!cursor_debug"("START ", "number")
+    rx823_cur."!cursor_debug"("START ", "term:sym<identifier>")
     .lex unicode:"$\x{a2}", rx823_cur
     .local pmc match
     .lex "$/", match
     length rx823_eos, rx823_tgt
+    gt rx823_pos, rx823_eos, rx823_done
     set rx823_off, 0
     lt rx823_pos, 2, rx823_start
     sub rx823_off, rx823_pos, 1
     substr rx823_tgt, rx823_tgt, rx823_off
   rx823_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan826_done
-    goto rxscan826_scan
-  rxscan826_loop:
+    ne $I10, -1, rxscan827_done
+    goto rxscan827_scan
+  rxscan827_loop:
     ($P10) = rx823_cur."from"()
     inc $P10
     set rx823_pos, $P10
-    ge rx823_pos, rx823_eos, rxscan826_done
-  rxscan826_scan:
-    set_addr $I10, rxscan826_loop
-    rx823_cur."!mark_push"(0, rx823_pos, $I10)
-  rxscan826_done:
-.annotate 'line', 397
-  # rx subcapture "sign"
-    set_addr $I10, rxcap_829_fail
+    ge rx823_pos, rx823_eos, rxscan827_done
+  rxscan827_scan:
+    set_addr $I10, rxscan827_loop
     rx823_cur."!mark_push"(0, rx823_pos, $I10)
-  # rx rxquantr827 ** 0..1
-    set_addr $I828, rxquantr827_done
-    rx823_cur."!mark_push"(0, rx823_pos, $I828)
-  rxquantr827_loop:
-  # rx enumcharlist negate=0 
-    ge rx823_pos, rx823_eos, rx823_fail
-    sub $I10, rx823_pos, rx823_off
-    substr $S10, rx823_tgt, $I10, 1
-    index $I11, "+-", $S10
-    lt $I11, 0, rx823_fail
-    inc rx823_pos
-    (rx823_rep) = rx823_cur."!mark_commit"($I828)
-  rxquantr827_done:
-    set_addr $I10, rxcap_829_fail
-    ($I12, $I11) = rx823_cur."!mark_peek"($I10)
-    rx823_cur."!cursor_pos"($I11)
-    ($P10) = rx823_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx823_pos, "")
-    rx823_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sign")
-    goto rxcap_829_done
-  rxcap_829_fail:
-    goto rx823_fail
-  rxcap_829_done:
-  alt830_0:
-.annotate 'line', 398
-    set_addr $I10, alt830_1
-    rx823_cur."!mark_push"(0, rx823_pos, $I10)
-  # rx subrule "dec_number" subtype=capture negate=
+  rxscan827_done:
+.annotate 'line', 380
+  # rx subrule "identifier" subtype=capture negate=
     rx823_cur."!cursor_pos"(rx823_pos)
-    $P10 = rx823_cur."dec_number"()
+    $P10 = rx823_cur."identifier"()
     unless $P10, rx823_fail
     rx823_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("dec_number")
+    $P10."!cursor_names"("identifier")
     rx823_pos = $P10."pos"()
-    goto alt830_end
-  alt830_1:
-  # rx subrule "integer" subtype=capture negate=
+  # rx enumcharlist negate=0 zerowidth
+    ge rx823_pos, rx823_eos, rx823_fail
+    sub $I10, rx823_pos, rx823_off
+    substr $S10, rx823_tgt, $I10, 1
+    index $I11, "(", $S10
+    lt $I11, 0, rx823_fail
+  # rx subrule "args" subtype=capture negate=
     rx823_cur."!cursor_pos"(rx823_pos)
-    $P10 = rx823_cur."integer"()
+    $P10 = rx823_cur."args"()
     unless $P10, rx823_fail
     rx823_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("integer")
+    $P10."!cursor_names"("args")
     rx823_pos = $P10."pos"()
-  alt830_end:
-.annotate 'line', 396
+.annotate 'line', 379
   # rx pass
-    rx823_cur."!cursor_pass"(rx823_pos, "number")
-    rx823_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx823_pos)
+    rx823_cur."!cursor_pass"(rx823_pos, "term:sym<identifier>")
+    rx823_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx823_pos)
     .return (rx823_cur)
   rx823_fail:
 .annotate 'line', 4
@@ -9785,373 +9713,377 @@
     jump $I10
   rx823_done:
     rx823_cur."!cursor_fail"()
-    rx823_cur."!cursor_debug"("FAIL  ", "number")
+    rx823_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
     .return (rx823_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__number"  :subid("190_1274022894.43745") :method
+.sub "!PREFIX__term:sym<identifier>"  :subid("187_1275811487.95429") :method
 .annotate 'line', 4
-    new $P825, "ResizablePMCArray"
-    push $P825, ""
-    .return ($P825)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "quote"  :subid("191_1274022894.43745") :method
-.annotate 'line', 401
-    $P832 = self."!protoregex"("quote")
-    .return ($P832)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote"  :subid("192_1274022894.43745") :method
-.annotate 'line', 401
-    $P834 = self."!PREFIX__!protoregex"("quote")
-    .return ($P834)
+    $P825 = self."!PREFIX__!subrule"("identifier", "")
+    new $P826, "ResizablePMCArray"
+    push $P826, $P825
+    .return ($P826)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<apos>"  :subid("193_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx836_tgt
-    .local int rx836_pos
-    .local int rx836_off
-    .local int rx836_eos
-    .local int rx836_rep
-    .local pmc rx836_cur
-    (rx836_cur, rx836_pos, rx836_tgt) = self."!cursor_start"()
-    rx836_cur."!cursor_debug"("START ", "quote:sym<apos>")
-    .lex unicode:"$\x{a2}", rx836_cur
-    .local pmc match
-    .lex "$/", match
-    length rx836_eos, rx836_tgt
-    set rx836_off, 0
-    lt rx836_pos, 2, rx836_start
-    sub rx836_off, rx836_pos, 1
-    substr rx836_tgt, rx836_tgt, rx836_off
-  rx836_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan839_done
-    goto rxscan839_scan
-  rxscan839_loop:
-    ($P10) = rx836_cur."from"()
-    inc $P10
-    set rx836_pos, $P10
-    ge rx836_pos, rx836_eos, rxscan839_done
-  rxscan839_scan:
-    set_addr $I10, rxscan839_loop
-    rx836_cur."!mark_push"(0, rx836_pos, $I10)
-  rxscan839_done:
-.annotate 'line', 402
-  # rx enumcharlist negate=0 zerowidth
-    ge rx836_pos, rx836_eos, rx836_fail
-    sub $I10, rx836_pos, rx836_off
-    substr $S10, rx836_tgt, $I10, 1
-    index $I11, "'", $S10
-    lt $I11, 0, rx836_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx836_cur."!cursor_pos"(rx836_pos)
-    $P10 = rx836_cur."quote_EXPR"(":q")
-    unless $P10, rx836_fail
-    rx836_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx836_pos = $P10."pos"()
+.sub "term:sym<name>"  :subid("188_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx829_tgt
+    .local int rx829_pos
+    .local int rx829_off
+    .local int rx829_eos
+    .local int rx829_rep
+    .local pmc rx829_cur
+    (rx829_cur, rx829_pos, rx829_tgt) = self."!cursor_start"()
+    rx829_cur."!cursor_debug"("START ", "term:sym<name>")
+    rx829_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx829_cur
+    .local pmc match
+    .lex "$/", match
+    length rx829_eos, rx829_tgt
+    gt rx829_pos, rx829_eos, rx829_done
+    set rx829_off, 0
+    lt rx829_pos, 2, rx829_start
+    sub rx829_off, rx829_pos, 1
+    substr rx829_tgt, rx829_tgt, rx829_off
+  rx829_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan833_done
+    goto rxscan833_scan
+  rxscan833_loop:
+    ($P10) = rx829_cur."from"()
+    inc $P10
+    set rx829_pos, $P10
+    ge rx829_pos, rx829_eos, rxscan833_done
+  rxscan833_scan:
+    set_addr $I10, rxscan833_loop
+    rx829_cur."!mark_push"(0, rx829_pos, $I10)
+  rxscan833_done:
+.annotate 'line', 384
+  # rx subrule "name" subtype=capture negate=
+    rx829_cur."!cursor_pos"(rx829_pos)
+    $P10 = rx829_cur."name"()
+    unless $P10, rx829_fail
+    rx829_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("name")
+    rx829_pos = $P10."pos"()
+  # rx rxquantr834 ** 0..1
+    set_addr $I835, rxquantr834_done
+    rx829_cur."!mark_push"(0, rx829_pos, $I835)
+  rxquantr834_loop:
+  # rx subrule "args" subtype=capture negate=
+    rx829_cur."!cursor_pos"(rx829_pos)
+    $P10 = rx829_cur."args"()
+    unless $P10, rx829_fail
+    rx829_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("args")
+    rx829_pos = $P10."pos"()
+    (rx829_rep) = rx829_cur."!mark_commit"($I835)
+  rxquantr834_done:
+.annotate 'line', 383
   # rx pass
-    rx836_cur."!cursor_pass"(rx836_pos, "quote:sym<apos>")
-    rx836_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx836_pos)
-    .return (rx836_cur)
-  rx836_fail:
+    rx829_cur."!cursor_pass"(rx829_pos, "term:sym<name>")
+    rx829_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx829_pos)
+    .return (rx829_cur)
+  rx829_fail:
 .annotate 'line', 4
-    (rx836_rep, rx836_pos, $I10, $P10) = rx836_cur."!mark_fail"(0)
-    lt rx836_pos, -1, rx836_done
-    eq rx836_pos, -1, rx836_fail
+    (rx829_rep, rx829_pos, $I10, $P10) = rx829_cur."!mark_fail"(0)
+    lt rx829_pos, -1, rx829_done
+    eq rx829_pos, -1, rx829_fail
     jump $I10
-  rx836_done:
-    rx836_cur."!cursor_fail"()
-    rx836_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
-    .return (rx836_cur)
+  rx829_done:
+    rx829_cur."!cursor_fail"()
+    rx829_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
+    .return (rx829_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<apos>"  :subid("194_1274022894.43745") :method
+.sub "!PREFIX__term:sym<name>"  :subid("189_1275811487.95429") :method
 .annotate 'line', 4
-    new $P838, "ResizablePMCArray"
-    push $P838, "'"
-    .return ($P838)
+    $P831 = self."!PREFIX__!subrule"("name", "")
+    new $P832, "ResizablePMCArray"
+    push $P832, $P831
+    .return ($P832)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<dblq>"  :subid("195_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<pir::op>"  :subid("190_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx841_tgt
-    .local int rx841_pos
-    .local int rx841_off
-    .local int rx841_eos
-    .local int rx841_rep
-    .local pmc rx841_cur
-    (rx841_cur, rx841_pos, rx841_tgt) = self."!cursor_start"()
-    rx841_cur."!cursor_debug"("START ", "quote:sym<dblq>")
-    .lex unicode:"$\x{a2}", rx841_cur
-    .local pmc match
-    .lex "$/", match
-    length rx841_eos, rx841_tgt
-    set rx841_off, 0
-    lt rx841_pos, 2, rx841_start
-    sub rx841_off, rx841_pos, 1
-    substr rx841_tgt, rx841_tgt, rx841_off
-  rx841_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan844_done
-    goto rxscan844_scan
-  rxscan844_loop:
-    ($P10) = rx841_cur."from"()
-    inc $P10
-    set rx841_pos, $P10
-    ge rx841_pos, rx841_eos, rxscan844_done
-  rxscan844_scan:
-    set_addr $I10, rxscan844_loop
-    rx841_cur."!mark_push"(0, rx841_pos, $I10)
-  rxscan844_done:
-.annotate 'line', 403
-  # rx enumcharlist negate=0 zerowidth
-    ge rx841_pos, rx841_eos, rx841_fail
-    sub $I10, rx841_pos, rx841_off
-    substr $S10, rx841_tgt, $I10, 1
-    index $I11, "\"", $S10
-    lt $I11, 0, rx841_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx841_cur."!cursor_pos"(rx841_pos)
-    $P10 = rx841_cur."quote_EXPR"(":qq")
-    unless $P10, rx841_fail
-    rx841_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx841_pos = $P10."pos"()
+    .local string rx837_tgt
+    .local int rx837_pos
+    .local int rx837_off
+    .local int rx837_eos
+    .local int rx837_rep
+    .local pmc rx837_cur
+    (rx837_cur, rx837_pos, rx837_tgt) = self."!cursor_start"()
+    rx837_cur."!cursor_debug"("START ", "term:sym<pir::op>")
+    rx837_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx837_cur
+    .local pmc match
+    .lex "$/", match
+    length rx837_eos, rx837_tgt
+    gt rx837_pos, rx837_eos, rx837_done
+    set rx837_off, 0
+    lt rx837_pos, 2, rx837_start
+    sub rx837_off, rx837_pos, 1
+    substr rx837_tgt, rx837_tgt, rx837_off
+  rx837_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan840_done
+    goto rxscan840_scan
+  rxscan840_loop:
+    ($P10) = rx837_cur."from"()
+    inc $P10
+    set rx837_pos, $P10
+    ge rx837_pos, rx837_eos, rxscan840_done
+  rxscan840_scan:
+    set_addr $I10, rxscan840_loop
+    rx837_cur."!mark_push"(0, rx837_pos, $I10)
+  rxscan840_done:
+.annotate 'line', 388
+  # rx literal  "pir::"
+    add $I11, rx837_pos, 5
+    gt $I11, rx837_eos, rx837_fail
+    sub $I11, rx837_pos, rx837_off
+    substr $S10, rx837_tgt, $I11, 5
+    ne $S10, "pir::", rx837_fail
+    add rx837_pos, 5
+  # rx subcapture "op"
+    set_addr $I10, rxcap_841_fail
+    rx837_cur."!mark_push"(0, rx837_pos, $I10)
+  # rx charclass_q w r 1..-1
+    sub $I10, rx837_pos, rx837_off
+    find_not_cclass $I11, 8192, rx837_tgt, $I10, rx837_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx837_fail
+    add rx837_pos, rx837_off, $I11
+    set_addr $I10, rxcap_841_fail
+    ($I12, $I11) = rx837_cur."!mark_peek"($I10)
+    rx837_cur."!cursor_pos"($I11)
+    ($P10) = rx837_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx837_pos, "")
+    rx837_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("op")
+    goto rxcap_841_done
+  rxcap_841_fail:
+    goto rx837_fail
+  rxcap_841_done:
+  # rx rxquantr842 ** 0..1
+    set_addr $I843, rxquantr842_done
+    rx837_cur."!mark_push"(0, rx837_pos, $I843)
+  rxquantr842_loop:
+  # rx subrule "args" subtype=capture negate=
+    rx837_cur."!cursor_pos"(rx837_pos)
+    $P10 = rx837_cur."args"()
+    unless $P10, rx837_fail
+    rx837_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("args")
+    rx837_pos = $P10."pos"()
+    (rx837_rep) = rx837_cur."!mark_commit"($I843)
+  rxquantr842_done:
+.annotate 'line', 387
   # rx pass
-    rx841_cur."!cursor_pass"(rx841_pos, "quote:sym<dblq>")
-    rx841_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx841_pos)
-    .return (rx841_cur)
-  rx841_fail:
+    rx837_cur."!cursor_pass"(rx837_pos, "term:sym<pir::op>")
+    rx837_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx837_pos)
+    .return (rx837_cur)
+  rx837_fail:
 .annotate 'line', 4
-    (rx841_rep, rx841_pos, $I10, $P10) = rx841_cur."!mark_fail"(0)
-    lt rx841_pos, -1, rx841_done
-    eq rx841_pos, -1, rx841_fail
+    (rx837_rep, rx837_pos, $I10, $P10) = rx837_cur."!mark_fail"(0)
+    lt rx837_pos, -1, rx837_done
+    eq rx837_pos, -1, rx837_fail
     jump $I10
-  rx841_done:
-    rx841_cur."!cursor_fail"()
-    rx841_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
-    .return (rx841_cur)
+  rx837_done:
+    rx837_cur."!cursor_fail"()
+    rx837_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
+    .return (rx837_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<dblq>"  :subid("196_1274022894.43745") :method
+.sub "!PREFIX__term:sym<pir::op>"  :subid("191_1275811487.95429") :method
 .annotate 'line', 4
-    new $P843, "ResizablePMCArray"
-    push $P843, "\""
-    .return ($P843)
+    new $P839, "ResizablePMCArray"
+    push $P839, "pir::"
+    .return ($P839)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<q>"  :subid("197_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "args"  :subid("192_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx846_tgt
-    .local int rx846_pos
-    .local int rx846_off
-    .local int rx846_eos
-    .local int rx846_rep
-    .local pmc rx846_cur
-    (rx846_cur, rx846_pos, rx846_tgt) = self."!cursor_start"()
-    rx846_cur."!cursor_debug"("START ", "quote:sym<q>")
-    .lex unicode:"$\x{a2}", rx846_cur
+    .local string rx845_tgt
+    .local int rx845_pos
+    .local int rx845_off
+    .local int rx845_eos
+    .local int rx845_rep
+    .local pmc rx845_cur
+    (rx845_cur, rx845_pos, rx845_tgt) = self."!cursor_start"()
+    rx845_cur."!cursor_debug"("START ", "args")
+    .lex unicode:"$\x{a2}", rx845_cur
     .local pmc match
     .lex "$/", match
-    length rx846_eos, rx846_tgt
-    set rx846_off, 0
-    lt rx846_pos, 2, rx846_start
-    sub rx846_off, rx846_pos, 1
-    substr rx846_tgt, rx846_tgt, rx846_off
-  rx846_start:
+    length rx845_eos, rx845_tgt
+    gt rx845_pos, rx845_eos, rx845_done
+    set rx845_off, 0
+    lt rx845_pos, 2, rx845_start
+    sub rx845_off, rx845_pos, 1
+    substr rx845_tgt, rx845_tgt, rx845_off
+  rx845_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan850_done
-    goto rxscan850_scan
-  rxscan850_loop:
-    ($P10) = rx846_cur."from"()
+    ne $I10, -1, rxscan849_done
+    goto rxscan849_scan
+  rxscan849_loop:
+    ($P10) = rx845_cur."from"()
     inc $P10
-    set rx846_pos, $P10
-    ge rx846_pos, rx846_eos, rxscan850_done
-  rxscan850_scan:
-    set_addr $I10, rxscan850_loop
-    rx846_cur."!mark_push"(0, rx846_pos, $I10)
-  rxscan850_done:
-.annotate 'line', 404
-  # rx literal  "q"
-    add $I11, rx846_pos, 1
-    gt $I11, rx846_eos, rx846_fail
-    sub $I11, rx846_pos, rx846_off
-    substr $S10, rx846_tgt, $I11, 1
-    ne $S10, "q", rx846_fail
-    add rx846_pos, 1
-  # rxanchor rwb
-    le rx846_pos, 0, rx846_fail
-    sub $I10, rx846_pos, rx846_off
-    is_cclass $I11, 8192, rx846_tgt, $I10
-    if $I11, rx846_fail
-    dec $I10
-    is_cclass $I11, 8192, rx846_tgt, $I10
-    unless $I11, rx846_fail
-  # rx enumcharlist negate=1 zerowidth
-    ge rx846_pos, rx846_eos, rx846_fail
-    sub $I10, rx846_pos, rx846_off
-    substr $S10, rx846_tgt, $I10, 1
-    index $I11, "(", $S10
-    ge $I11, 0, rx846_fail
-  # rx subrule "ws" subtype=method negate=
-    rx846_cur."!cursor_pos"(rx846_pos)
-    $P10 = rx846_cur."ws"()
-    unless $P10, rx846_fail
-    rx846_pos = $P10."pos"()
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx846_cur."!cursor_pos"(rx846_pos)
-    $P10 = rx846_cur."quote_EXPR"(":q")
-    unless $P10, rx846_fail
-    rx846_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx846_pos = $P10."pos"()
+    set rx845_pos, $P10
+    ge rx845_pos, rx845_eos, rxscan849_done
+  rxscan849_scan:
+    set_addr $I10, rxscan849_loop
+    rx845_cur."!mark_push"(0, rx845_pos, $I10)
+  rxscan849_done:
+.annotate 'line', 392
+  # rx literal  "("
+    add $I11, rx845_pos, 1
+    gt $I11, rx845_eos, rx845_fail
+    sub $I11, rx845_pos, rx845_off
+    substr $S10, rx845_tgt, $I11, 1
+    ne $S10, "(", rx845_fail
+    add rx845_pos, 1
+  # rx subrule "arglist" subtype=capture negate=
+    rx845_cur."!cursor_pos"(rx845_pos)
+    $P10 = rx845_cur."arglist"()
+    unless $P10, rx845_fail
+    rx845_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx845_pos = $P10."pos"()
+  # rx literal  ")"
+    add $I11, rx845_pos, 1
+    gt $I11, rx845_eos, rx845_fail
+    sub $I11, rx845_pos, rx845_off
+    substr $S10, rx845_tgt, $I11, 1
+    ne $S10, ")", rx845_fail
+    add rx845_pos, 1
   # rx pass
-    rx846_cur."!cursor_pass"(rx846_pos, "quote:sym<q>")
-    rx846_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx846_pos)
-    .return (rx846_cur)
-  rx846_fail:
+    rx845_cur."!cursor_pass"(rx845_pos, "args")
+    rx845_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx845_pos)
+    .return (rx845_cur)
+  rx845_fail:
 .annotate 'line', 4
-    (rx846_rep, rx846_pos, $I10, $P10) = rx846_cur."!mark_fail"(0)
-    lt rx846_pos, -1, rx846_done
-    eq rx846_pos, -1, rx846_fail
+    (rx845_rep, rx845_pos, $I10, $P10) = rx845_cur."!mark_fail"(0)
+    lt rx845_pos, -1, rx845_done
+    eq rx845_pos, -1, rx845_fail
     jump $I10
-  rx846_done:
-    rx846_cur."!cursor_fail"()
-    rx846_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
-    .return (rx846_cur)
+  rx845_done:
+    rx845_cur."!cursor_fail"()
+    rx845_cur."!cursor_debug"("FAIL  ", "args")
+    .return (rx845_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<q>"  :subid("198_1274022894.43745") :method
+.sub "!PREFIX__args"  :subid("193_1275811487.95429") :method
 .annotate 'line', 4
-    $P848 = self."!PREFIX__!subrule"("", "q")
-    new $P849, "ResizablePMCArray"
-    push $P849, $P848
-    .return ($P849)
+    $P847 = self."!PREFIX__!subrule"("arglist", "(")
+    new $P848, "ResizablePMCArray"
+    push $P848, $P847
+    .return ($P848)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<qq>"  :subid("199_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "arglist"  :subid("194_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx852_tgt
-    .local int rx852_pos
-    .local int rx852_off
-    .local int rx852_eos
-    .local int rx852_rep
-    .local pmc rx852_cur
-    (rx852_cur, rx852_pos, rx852_tgt) = self."!cursor_start"()
-    rx852_cur."!cursor_debug"("START ", "quote:sym<qq>")
-    .lex unicode:"$\x{a2}", rx852_cur
+    .local string rx851_tgt
+    .local int rx851_pos
+    .local int rx851_off
+    .local int rx851_eos
+    .local int rx851_rep
+    .local pmc rx851_cur
+    (rx851_cur, rx851_pos, rx851_tgt) = self."!cursor_start"()
+    rx851_cur."!cursor_debug"("START ", "arglist")
+    .lex unicode:"$\x{a2}", rx851_cur
     .local pmc match
     .lex "$/", match
-    length rx852_eos, rx852_tgt
-    set rx852_off, 0
-    lt rx852_pos, 2, rx852_start
-    sub rx852_off, rx852_pos, 1
-    substr rx852_tgt, rx852_tgt, rx852_off
-  rx852_start:
+    length rx851_eos, rx851_tgt
+    gt rx851_pos, rx851_eos, rx851_done
+    set rx851_off, 0
+    lt rx851_pos, 2, rx851_start
+    sub rx851_off, rx851_pos, 1
+    substr rx851_tgt, rx851_tgt, rx851_off
+  rx851_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan856_done
-    goto rxscan856_scan
-  rxscan856_loop:
-    ($P10) = rx852_cur."from"()
+    ne $I10, -1, rxscan855_done
+    goto rxscan855_scan
+  rxscan855_loop:
+    ($P10) = rx851_cur."from"()
     inc $P10
-    set rx852_pos, $P10
-    ge rx852_pos, rx852_eos, rxscan856_done
-  rxscan856_scan:
-    set_addr $I10, rxscan856_loop
-    rx852_cur."!mark_push"(0, rx852_pos, $I10)
-  rxscan856_done:
-.annotate 'line', 405
-  # rx literal  "qq"
-    add $I11, rx852_pos, 2
-    gt $I11, rx852_eos, rx852_fail
-    sub $I11, rx852_pos, rx852_off
-    substr $S10, rx852_tgt, $I11, 2
-    ne $S10, "qq", rx852_fail
-    add rx852_pos, 2
-  # rxanchor rwb
-    le rx852_pos, 0, rx852_fail
-    sub $I10, rx852_pos, rx852_off
-    is_cclass $I11, 8192, rx852_tgt, $I10
-    if $I11, rx852_fail
-    dec $I10
-    is_cclass $I11, 8192, rx852_tgt, $I10
-    unless $I11, rx852_fail
-  # rx enumcharlist negate=1 zerowidth
-    ge rx852_pos, rx852_eos, rx852_fail
-    sub $I10, rx852_pos, rx852_off
-    substr $S10, rx852_tgt, $I10, 1
-    index $I11, "(", $S10
-    ge $I11, 0, rx852_fail
+    set rx851_pos, $P10
+    ge rx851_pos, rx851_eos, rxscan855_done
+  rxscan855_scan:
+    set_addr $I10, rxscan855_loop
+    rx851_cur."!mark_push"(0, rx851_pos, $I10)
+  rxscan855_done:
+.annotate 'line', 396
   # rx subrule "ws" subtype=method negate=
-    rx852_cur."!cursor_pos"(rx852_pos)
-    $P10 = rx852_cur."ws"()
-    unless $P10, rx852_fail
-    rx852_pos = $P10."pos"()
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx852_cur."!cursor_pos"(rx852_pos)
-    $P10 = rx852_cur."quote_EXPR"(":qq")
-    unless $P10, rx852_fail
-    rx852_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx852_pos = $P10."pos"()
+    rx851_cur."!cursor_pos"(rx851_pos)
+    $P10 = rx851_cur."ws"()
+    unless $P10, rx851_fail
+    rx851_pos = $P10."pos"()
+  alt856_0:
+.annotate 'line', 397
+    set_addr $I10, alt856_1
+    rx851_cur."!mark_push"(0, rx851_pos, $I10)
+.annotate 'line', 398
+  # rx subrule "EXPR" subtype=capture negate=
+    rx851_cur."!cursor_pos"(rx851_pos)
+    $P10 = rx851_cur."EXPR"("f=")
+    unless $P10, rx851_fail
+    rx851_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx851_pos = $P10."pos"()
+    goto alt856_end
+  alt856_1:
+  alt856_end:
+.annotate 'line', 395
   # rx pass
-    rx852_cur."!cursor_pass"(rx852_pos, "quote:sym<qq>")
-    rx852_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx852_pos)
-    .return (rx852_cur)
-  rx852_fail:
+    rx851_cur."!cursor_pass"(rx851_pos, "arglist")
+    rx851_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx851_pos)
+    .return (rx851_cur)
+  rx851_fail:
 .annotate 'line', 4
-    (rx852_rep, rx852_pos, $I10, $P10) = rx852_cur."!mark_fail"(0)
-    lt rx852_pos, -1, rx852_done
-    eq rx852_pos, -1, rx852_fail
+    (rx851_rep, rx851_pos, $I10, $P10) = rx851_cur."!mark_fail"(0)
+    lt rx851_pos, -1, rx851_done
+    eq rx851_pos, -1, rx851_fail
     jump $I10
-  rx852_done:
-    rx852_cur."!cursor_fail"()
-    rx852_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
-    .return (rx852_cur)
+  rx851_done:
+    rx851_cur."!cursor_fail"()
+    rx851_cur."!cursor_debug"("FAIL  ", "arglist")
+    .return (rx851_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<qq>"  :subid("200_1274022894.43745") :method
+.sub "!PREFIX__arglist"  :subid("195_1275811487.95429") :method
 .annotate 'line', 4
-    $P854 = self."!PREFIX__!subrule"("", "qq")
-    new $P855, "ResizablePMCArray"
-    push $P855, $P854
-    .return ($P855)
+    $P853 = self."!PREFIX__!subrule"("ws", "")
+    new $P854, "ResizablePMCArray"
+    push $P854, $P853
+    .return ($P854)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q>"  :subid("201_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "term:sym<value>"  :subid("196_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx858_tgt
     .local int rx858_pos
@@ -10160,11 +10092,12 @@
     .local int rx858_rep
     .local pmc rx858_cur
     (rx858_cur, rx858_pos, rx858_tgt) = self."!cursor_start"()
-    rx858_cur."!cursor_debug"("START ", "quote:sym<Q>")
+    rx858_cur."!cursor_debug"("START ", "term:sym<value>")
     .lex unicode:"$\x{a2}", rx858_cur
     .local pmc match
     .lex "$/", match
     length rx858_eos, rx858_tgt
+    gt rx858_pos, rx858_eos, rx858_done
     set rx858_off, 0
     lt rx858_pos, 2, rx858_start
     sub rx858_off, rx858_pos, 1
@@ -10182,43 +10115,17 @@
     set_addr $I10, rxscan862_loop
     rx858_cur."!mark_push"(0, rx858_pos, $I10)
   rxscan862_done:
-.annotate 'line', 406
-  # rx literal  "Q"
-    add $I11, rx858_pos, 1
-    gt $I11, rx858_eos, rx858_fail
-    sub $I11, rx858_pos, rx858_off
-    substr $S10, rx858_tgt, $I11, 1
-    ne $S10, "Q", rx858_fail
-    add rx858_pos, 1
-  # rxanchor rwb
-    le rx858_pos, 0, rx858_fail
-    sub $I10, rx858_pos, rx858_off
-    is_cclass $I11, 8192, rx858_tgt, $I10
-    if $I11, rx858_fail
-    dec $I10
-    is_cclass $I11, 8192, rx858_tgt, $I10
-    unless $I11, rx858_fail
-  # rx enumcharlist negate=1 zerowidth
-    ge rx858_pos, rx858_eos, rx858_fail
-    sub $I10, rx858_pos, rx858_off
-    substr $S10, rx858_tgt, $I10, 1
-    index $I11, "(", $S10
-    ge $I11, 0, rx858_fail
-  # rx subrule "ws" subtype=method negate=
-    rx858_cur."!cursor_pos"(rx858_pos)
-    $P10 = rx858_cur."ws"()
-    unless $P10, rx858_fail
-    rx858_pos = $P10."pos"()
-  # rx subrule "quote_EXPR" subtype=capture negate=
+.annotate 'line', 404
+  # rx subrule "value" subtype=capture negate=
     rx858_cur."!cursor_pos"(rx858_pos)
-    $P10 = rx858_cur."quote_EXPR"()
+    $P10 = rx858_cur."value"()
     unless $P10, rx858_fail
     rx858_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
+    $P10."!cursor_names"("value")
     rx858_pos = $P10."pos"()
   # rx pass
-    rx858_cur."!cursor_pass"(rx858_pos, "quote:sym<Q>")
-    rx858_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx858_pos)
+    rx858_cur."!cursor_pass"(rx858_pos, "term:sym<value>")
+    rx858_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx858_pos)
     .return (rx858_cur)
   rx858_fail:
 .annotate 'line', 4
@@ -10228,16 +10135,16 @@
     jump $I10
   rx858_done:
     rx858_cur."!cursor_fail"()
-    rx858_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
+    rx858_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
     .return (rx858_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q>"  :subid("202_1274022894.43745") :method
+.sub "!PREFIX__term:sym<value>"  :subid("197_1275811487.95429") :method
 .annotate 'line', 4
-    $P860 = self."!PREFIX__!subrule"("", "Q")
+    $P860 = self."!PREFIX__!subrule"("value", "")
     new $P861, "ResizablePMCArray"
     push $P861, $P860
     .return ($P861)
@@ -10245,7 +10152,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q:PIR>"  :subid("203_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "value"  :subid("198_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx864_tgt
     .local int rx864_pos
@@ -10254,51 +10161,56 @@
     .local int rx864_rep
     .local pmc rx864_cur
     (rx864_cur, rx864_pos, rx864_tgt) = self."!cursor_start"()
-    rx864_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
+    rx864_cur."!cursor_debug"("START ", "value")
     .lex unicode:"$\x{a2}", rx864_cur
     .local pmc match
     .lex "$/", match
     length rx864_eos, rx864_tgt
+    gt rx864_pos, rx864_eos, rx864_done
     set rx864_off, 0
     lt rx864_pos, 2, rx864_start
     sub rx864_off, rx864_pos, 1
     substr rx864_tgt, rx864_tgt, rx864_off
   rx864_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan868_done
-    goto rxscan868_scan
-  rxscan868_loop:
+    ne $I10, -1, rxscan869_done
+    goto rxscan869_scan
+  rxscan869_loop:
     ($P10) = rx864_cur."from"()
     inc $P10
     set rx864_pos, $P10
-    ge rx864_pos, rx864_eos, rxscan868_done
-  rxscan868_scan:
-    set_addr $I10, rxscan868_loop
+    ge rx864_pos, rx864_eos, rxscan869_done
+  rxscan869_scan:
+    set_addr $I10, rxscan869_loop
+    rx864_cur."!mark_push"(0, rx864_pos, $I10)
+  rxscan869_done:
+  alt870_0:
+.annotate 'line', 406
+    set_addr $I10, alt870_1
     rx864_cur."!mark_push"(0, rx864_pos, $I10)
-  rxscan868_done:
 .annotate 'line', 407
-  # rx literal  "Q:PIR"
-    add $I11, rx864_pos, 5
-    gt $I11, rx864_eos, rx864_fail
-    sub $I11, rx864_pos, rx864_off
-    substr $S10, rx864_tgt, $I11, 5
-    ne $S10, "Q:PIR", rx864_fail
-    add rx864_pos, 5
-  # rx subrule "ws" subtype=method negate=
+  # rx subrule "quote" subtype=capture negate=
     rx864_cur."!cursor_pos"(rx864_pos)
-    $P10 = rx864_cur."ws"()
+    $P10 = rx864_cur."quote"()
     unless $P10, rx864_fail
+    rx864_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote")
     rx864_pos = $P10."pos"()
-  # rx subrule "quote_EXPR" subtype=capture negate=
+    goto alt870_end
+  alt870_1:
+.annotate 'line', 408
+  # rx subrule "number" subtype=capture negate=
     rx864_cur."!cursor_pos"(rx864_pos)
-    $P10 = rx864_cur."quote_EXPR"()
+    $P10 = rx864_cur."number"()
     unless $P10, rx864_fail
     rx864_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
+    $P10."!cursor_names"("number")
     rx864_pos = $P10."pos"()
+  alt870_end:
+.annotate 'line', 406
   # rx pass
-    rx864_cur."!cursor_pass"(rx864_pos, "quote:sym<Q:PIR>")
-    rx864_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx864_pos)
+    rx864_cur."!cursor_pass"(rx864_pos, "value")
+    rx864_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx864_pos)
     .return (rx864_cur)
   rx864_fail:
 .annotate 'line', 4
@@ -10308,532 +10220,490 @@
     jump $I10
   rx864_done:
     rx864_cur."!cursor_fail"()
-    rx864_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
+    rx864_cur."!cursor_debug"("FAIL  ", "value")
     .return (rx864_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("204_1274022894.43745") :method
+.sub "!PREFIX__value"  :subid("199_1275811487.95429") :method
 .annotate 'line', 4
-    $P866 = self."!PREFIX__!subrule"("", "Q:PIR")
-    new $P867, "ResizablePMCArray"
-    push $P867, $P866
-    .return ($P867)
+    $P866 = self."!PREFIX__!subrule"("number", "")
+    $P867 = self."!PREFIX__!subrule"("quote", "")
+    new $P868, "ResizablePMCArray"
+    push $P868, $P866
+    push $P868, $P867
+    .return ($P868)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym</ />"  :subid("205_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx870_tgt
-    .local int rx870_pos
-    .local int rx870_off
-    .local int rx870_eos
-    .local int rx870_rep
-    .local pmc rx870_cur
-    (rx870_cur, rx870_pos, rx870_tgt) = self."!cursor_start"()
-    rx870_cur."!cursor_debug"("START ", "quote:sym</ />")
-    .lex unicode:"$\x{a2}", rx870_cur
-    .local pmc match
-    .lex "$/", match
-    length rx870_eos, rx870_tgt
-    set rx870_off, 0
-    lt rx870_pos, 2, rx870_start
-    sub rx870_off, rx870_pos, 1
-    substr rx870_tgt, rx870_tgt, rx870_off
-  rx870_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan874_done
-    goto rxscan874_scan
-  rxscan874_loop:
-    ($P10) = rx870_cur."from"()
-    inc $P10
-    set rx870_pos, $P10
-    ge rx870_pos, rx870_eos, rxscan874_done
-  rxscan874_scan:
-    set_addr $I10, rxscan874_loop
-    rx870_cur."!mark_push"(0, rx870_pos, $I10)
-  rxscan874_done:
-.annotate 'line', 409
-  # rx literal  "/"
-    add $I11, rx870_pos, 1
-    gt $I11, rx870_eos, rx870_fail
-    sub $I11, rx870_pos, rx870_off
-    substr $S10, rx870_tgt, $I11, 1
-    ne $S10, "/", rx870_fail
-    add rx870_pos, 1
-.annotate 'line', 410
-  # rx subrule "newpad" subtype=method negate=
-    rx870_cur."!cursor_pos"(rx870_pos)
-    $P10 = rx870_cur."newpad"()
-    unless $P10, rx870_fail
-    rx870_pos = $P10."pos"()
-.annotate 'line', 411
-  # rx reduce name="quote:sym</ />" key="open"
-    rx870_cur."!cursor_pos"(rx870_pos)
-    rx870_cur."!reduce"("quote:sym</ />", "open")
+.sub "number"  :subid("200_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx872_tgt
+    .local int rx872_pos
+    .local int rx872_off
+    .local int rx872_eos
+    .local int rx872_rep
+    .local pmc rx872_cur
+    (rx872_cur, rx872_pos, rx872_tgt) = self."!cursor_start"()
+    rx872_cur."!cursor_debug"("START ", "number")
+    .lex unicode:"$\x{a2}", rx872_cur
+    .local pmc match
+    .lex "$/", match
+    length rx872_eos, rx872_tgt
+    gt rx872_pos, rx872_eos, rx872_done
+    set rx872_off, 0
+    lt rx872_pos, 2, rx872_start
+    sub rx872_off, rx872_pos, 1
+    substr rx872_tgt, rx872_tgt, rx872_off
+  rx872_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan875_done
+    goto rxscan875_scan
+  rxscan875_loop:
+    ($P10) = rx872_cur."from"()
+    inc $P10
+    set rx872_pos, $P10
+    ge rx872_pos, rx872_eos, rxscan875_done
+  rxscan875_scan:
+    set_addr $I10, rxscan875_loop
+    rx872_cur."!mark_push"(0, rx872_pos, $I10)
+  rxscan875_done:
 .annotate 'line', 412
-  # rx subrule "LANG" subtype=capture negate=
-    rx870_cur."!cursor_pos"(rx870_pos)
-    $P10 = rx870_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx870_fail
-    rx870_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("p6regex")
-    rx870_pos = $P10."pos"()
+  # rx subcapture "sign"
+    set_addr $I10, rxcap_878_fail
+    rx872_cur."!mark_push"(0, rx872_pos, $I10)
+  # rx rxquantr876 ** 0..1
+    set_addr $I877, rxquantr876_done
+    rx872_cur."!mark_push"(0, rx872_pos, $I877)
+  rxquantr876_loop:
+  # rx enumcharlist negate=0 
+    ge rx872_pos, rx872_eos, rx872_fail
+    sub $I10, rx872_pos, rx872_off
+    substr $S10, rx872_tgt, $I10, 1
+    index $I11, "+-", $S10
+    lt $I11, 0, rx872_fail
+    inc rx872_pos
+    (rx872_rep) = rx872_cur."!mark_commit"($I877)
+  rxquantr876_done:
+    set_addr $I10, rxcap_878_fail
+    ($I12, $I11) = rx872_cur."!mark_peek"($I10)
+    rx872_cur."!cursor_pos"($I11)
+    ($P10) = rx872_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx872_pos, "")
+    rx872_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sign")
+    goto rxcap_878_done
+  rxcap_878_fail:
+    goto rx872_fail
+  rxcap_878_done:
+  alt879_0:
 .annotate 'line', 413
-  # rx literal  "/"
-    add $I11, rx870_pos, 1
-    gt $I11, rx870_eos, rx870_fail
-    sub $I11, rx870_pos, rx870_off
-    substr $S10, rx870_tgt, $I11, 1
-    ne $S10, "/", rx870_fail
-    add rx870_pos, 1
-.annotate 'line', 408
+    set_addr $I10, alt879_1
+    rx872_cur."!mark_push"(0, rx872_pos, $I10)
+  # rx subrule "dec_number" subtype=capture negate=
+    rx872_cur."!cursor_pos"(rx872_pos)
+    $P10 = rx872_cur."dec_number"()
+    unless $P10, rx872_fail
+    rx872_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("dec_number")
+    rx872_pos = $P10."pos"()
+    goto alt879_end
+  alt879_1:
+  # rx subrule "integer" subtype=capture negate=
+    rx872_cur."!cursor_pos"(rx872_pos)
+    $P10 = rx872_cur."integer"()
+    unless $P10, rx872_fail
+    rx872_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("integer")
+    rx872_pos = $P10."pos"()
+  alt879_end:
+.annotate 'line', 411
   # rx pass
-    rx870_cur."!cursor_pass"(rx870_pos, "quote:sym</ />")
-    rx870_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx870_pos)
-    .return (rx870_cur)
-  rx870_fail:
+    rx872_cur."!cursor_pass"(rx872_pos, "number")
+    rx872_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx872_pos)
+    .return (rx872_cur)
+  rx872_fail:
 .annotate 'line', 4
-    (rx870_rep, rx870_pos, $I10, $P10) = rx870_cur."!mark_fail"(0)
-    lt rx870_pos, -1, rx870_done
-    eq rx870_pos, -1, rx870_fail
+    (rx872_rep, rx872_pos, $I10, $P10) = rx872_cur."!mark_fail"(0)
+    lt rx872_pos, -1, rx872_done
+    eq rx872_pos, -1, rx872_fail
     jump $I10
-  rx870_done:
-    rx870_cur."!cursor_fail"()
-    rx870_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
-    .return (rx870_cur)
+  rx872_done:
+    rx872_cur."!cursor_fail"()
+    rx872_cur."!cursor_debug"("FAIL  ", "number")
+    .return (rx872_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym</ />"  :subid("206_1274022894.43745") :method
+.sub "!PREFIX__number"  :subid("201_1275811487.95429") :method
 .annotate 'line', 4
-    $P872 = self."!PREFIX__!subrule"("", "/")
-    new $P873, "ResizablePMCArray"
-    push $P873, $P872
-    .return ($P873)
+    new $P874, "ResizablePMCArray"
+    push $P874, ""
+    .return ($P874)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<$>"  :subid("207_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx876_tgt
-    .local int rx876_pos
-    .local int rx876_off
-    .local int rx876_eos
-    .local int rx876_rep
-    .local pmc rx876_cur
-    (rx876_cur, rx876_pos, rx876_tgt) = self."!cursor_start"()
-    rx876_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
-    .lex unicode:"$\x{a2}", rx876_cur
-    .local pmc match
-    .lex "$/", match
-    length rx876_eos, rx876_tgt
-    set rx876_off, 0
-    lt rx876_pos, 2, rx876_start
-    sub rx876_off, rx876_pos, 1
-    substr rx876_tgt, rx876_tgt, rx876_off
-  rx876_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan879_done
-    goto rxscan879_scan
-  rxscan879_loop:
-    ($P10) = rx876_cur."from"()
-    inc $P10
-    set rx876_pos, $P10
-    ge rx876_pos, rx876_eos, rxscan879_done
-  rxscan879_scan:
-    set_addr $I10, rxscan879_loop
-    rx876_cur."!mark_push"(0, rx876_pos, $I10)
-  rxscan879_done:
+.sub "quote"  :subid("202_1275811487.95429") :method
 .annotate 'line', 416
-  # rx enumcharlist negate=0 zerowidth
-    ge rx876_pos, rx876_eos, rx876_fail
-    sub $I10, rx876_pos, rx876_off
-    substr $S10, rx876_tgt, $I10, 1
-    index $I11, "$", $S10
-    lt $I11, 0, rx876_fail
-  # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx876_cur."!cursor_pos"(rx876_pos)
-    $P10 = rx876_cur."quotemod_check"("s")
-    unless $P10, rx876_fail
-  # rx subrule "variable" subtype=capture negate=
-    rx876_cur."!cursor_pos"(rx876_pos)
-    $P10 = rx876_cur."variable"()
-    unless $P10, rx876_fail
-    rx876_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("variable")
-    rx876_pos = $P10."pos"()
-  # rx pass
-    rx876_cur."!cursor_pass"(rx876_pos, "quote_escape:sym<$>")
-    rx876_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx876_pos)
-    .return (rx876_cur)
-  rx876_fail:
-.annotate 'line', 4
-    (rx876_rep, rx876_pos, $I10, $P10) = rx876_cur."!mark_fail"(0)
-    lt rx876_pos, -1, rx876_done
-    eq rx876_pos, -1, rx876_fail
-    jump $I10
-  rx876_done:
-    rx876_cur."!cursor_fail"()
-    rx876_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
-    .return (rx876_cur)
-    .return ()
+    $P881 = self."!protoregex"("quote")
+    .return ($P881)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<$>"  :subid("208_1274022894.43745") :method
-.annotate 'line', 4
-    new $P878, "ResizablePMCArray"
-    push $P878, "$"
-    .return ($P878)
+.sub "!PREFIX__quote"  :subid("203_1275811487.95429") :method
+.annotate 'line', 416
+    $P883 = self."!PREFIX__!protoregex"("quote")
+    .return ($P883)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<{ }>"  :subid("209_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "quote:sym<apos>"  :subid("204_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx881_tgt
-    .local int rx881_pos
-    .local int rx881_off
-    .local int rx881_eos
-    .local int rx881_rep
-    .local pmc rx881_cur
-    (rx881_cur, rx881_pos, rx881_tgt) = self."!cursor_start"()
-    rx881_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx881_cur
-    .local pmc match
-    .lex "$/", match
-    length rx881_eos, rx881_tgt
-    set rx881_off, 0
-    lt rx881_pos, 2, rx881_start
-    sub rx881_off, rx881_pos, 1
-    substr rx881_tgt, rx881_tgt, rx881_off
-  rx881_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan884_done
-    goto rxscan884_scan
-  rxscan884_loop:
-    ($P10) = rx881_cur."from"()
-    inc $P10
-    set rx881_pos, $P10
-    ge rx881_pos, rx881_eos, rxscan884_done
-  rxscan884_scan:
-    set_addr $I10, rxscan884_loop
-    rx881_cur."!mark_push"(0, rx881_pos, $I10)
-  rxscan884_done:
+    .local string rx885_tgt
+    .local int rx885_pos
+    .local int rx885_off
+    .local int rx885_eos
+    .local int rx885_rep
+    .local pmc rx885_cur
+    (rx885_cur, rx885_pos, rx885_tgt) = self."!cursor_start"()
+    rx885_cur."!cursor_debug"("START ", "quote:sym<apos>")
+    .lex unicode:"$\x{a2}", rx885_cur
+    .local pmc match
+    .lex "$/", match
+    length rx885_eos, rx885_tgt
+    gt rx885_pos, rx885_eos, rx885_done
+    set rx885_off, 0
+    lt rx885_pos, 2, rx885_start
+    sub rx885_off, rx885_pos, 1
+    substr rx885_tgt, rx885_tgt, rx885_off
+  rx885_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan888_done
+    goto rxscan888_scan
+  rxscan888_loop:
+    ($P10) = rx885_cur."from"()
+    inc $P10
+    set rx885_pos, $P10
+    ge rx885_pos, rx885_eos, rxscan888_done
+  rxscan888_scan:
+    set_addr $I10, rxscan888_loop
+    rx885_cur."!mark_push"(0, rx885_pos, $I10)
+  rxscan888_done:
 .annotate 'line', 417
   # rx enumcharlist negate=0 zerowidth
-    ge rx881_pos, rx881_eos, rx881_fail
-    sub $I10, rx881_pos, rx881_off
-    substr $S10, rx881_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx881_fail
-  # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx881_cur."!cursor_pos"(rx881_pos)
-    $P10 = rx881_cur."quotemod_check"("c")
-    unless $P10, rx881_fail
-  # rx subrule "block" subtype=capture negate=
-    rx881_cur."!cursor_pos"(rx881_pos)
-    $P10 = rx881_cur."block"()
-    unless $P10, rx881_fail
-    rx881_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("block")
-    rx881_pos = $P10."pos"()
+    ge rx885_pos, rx885_eos, rx885_fail
+    sub $I10, rx885_pos, rx885_off
+    substr $S10, rx885_tgt, $I10, 1
+    index $I11, "'", $S10
+    lt $I11, 0, rx885_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx885_cur."!cursor_pos"(rx885_pos)
+    $P10 = rx885_cur."quote_EXPR"(":q")
+    unless $P10, rx885_fail
+    rx885_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx885_pos = $P10."pos"()
   # rx pass
-    rx881_cur."!cursor_pass"(rx881_pos, "quote_escape:sym<{ }>")
-    rx881_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx881_pos)
-    .return (rx881_cur)
-  rx881_fail:
+    rx885_cur."!cursor_pass"(rx885_pos, "quote:sym<apos>")
+    rx885_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx885_pos)
+    .return (rx885_cur)
+  rx885_fail:
 .annotate 'line', 4
-    (rx881_rep, rx881_pos, $I10, $P10) = rx881_cur."!mark_fail"(0)
-    lt rx881_pos, -1, rx881_done
-    eq rx881_pos, -1, rx881_fail
+    (rx885_rep, rx885_pos, $I10, $P10) = rx885_cur."!mark_fail"(0)
+    lt rx885_pos, -1, rx885_done
+    eq rx885_pos, -1, rx885_fail
     jump $I10
-  rx881_done:
-    rx881_cur."!cursor_fail"()
-    rx881_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
-    .return (rx881_cur)
+  rx885_done:
+    rx885_cur."!cursor_fail"()
+    rx885_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
+    .return (rx885_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("210_1274022894.43745") :method
+.sub "!PREFIX__quote:sym<apos>"  :subid("205_1275811487.95429") :method
 .annotate 'line', 4
-    new $P883, "ResizablePMCArray"
-    push $P883, "{"
-    .return ($P883)
+    new $P887, "ResizablePMCArray"
+    push $P887, "'"
+    .return ($P887)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<esc>"  :subid("211_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "quote:sym<dblq>"  :subid("206_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx886_tgt
-    .local int rx886_pos
-    .local int rx886_off
-    .local int rx886_eos
-    .local int rx886_rep
-    .local pmc rx886_cur
-    (rx886_cur, rx886_pos, rx886_tgt) = self."!cursor_start"()
-    rx886_cur."!cursor_debug"("START ", "quote_escape:sym<esc>")
-    .lex unicode:"$\x{a2}", rx886_cur
-    .local pmc match
-    .lex "$/", match
-    length rx886_eos, rx886_tgt
-    set rx886_off, 0
-    lt rx886_pos, 2, rx886_start
-    sub rx886_off, rx886_pos, 1
-    substr rx886_tgt, rx886_tgt, rx886_off
-  rx886_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan889_done
-    goto rxscan889_scan
-  rxscan889_loop:
-    ($P10) = rx886_cur."from"()
-    inc $P10
-    set rx886_pos, $P10
-    ge rx886_pos, rx886_eos, rxscan889_done
-  rxscan889_scan:
-    set_addr $I10, rxscan889_loop
-    rx886_cur."!mark_push"(0, rx886_pos, $I10)
-  rxscan889_done:
+    .local string rx890_tgt
+    .local int rx890_pos
+    .local int rx890_off
+    .local int rx890_eos
+    .local int rx890_rep
+    .local pmc rx890_cur
+    (rx890_cur, rx890_pos, rx890_tgt) = self."!cursor_start"()
+    rx890_cur."!cursor_debug"("START ", "quote:sym<dblq>")
+    .lex unicode:"$\x{a2}", rx890_cur
+    .local pmc match
+    .lex "$/", match
+    length rx890_eos, rx890_tgt
+    gt rx890_pos, rx890_eos, rx890_done
+    set rx890_off, 0
+    lt rx890_pos, 2, rx890_start
+    sub rx890_off, rx890_pos, 1
+    substr rx890_tgt, rx890_tgt, rx890_off
+  rx890_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan893_done
+    goto rxscan893_scan
+  rxscan893_loop:
+    ($P10) = rx890_cur."from"()
+    inc $P10
+    set rx890_pos, $P10
+    ge rx890_pos, rx890_eos, rxscan893_done
+  rxscan893_scan:
+    set_addr $I10, rxscan893_loop
+    rx890_cur."!mark_push"(0, rx890_pos, $I10)
+  rxscan893_done:
 .annotate 'line', 418
-  # rx literal  "\\e"
-    add $I11, rx886_pos, 2
-    gt $I11, rx886_eos, rx886_fail
-    sub $I11, rx886_pos, rx886_off
-    substr $S10, rx886_tgt, $I11, 2
-    ne $S10, "\\e", rx886_fail
-    add rx886_pos, 2
-  # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx886_cur."!cursor_pos"(rx886_pos)
-    $P10 = rx886_cur."quotemod_check"("b")
-    unless $P10, rx886_fail
+  # rx enumcharlist negate=0 zerowidth
+    ge rx890_pos, rx890_eos, rx890_fail
+    sub $I10, rx890_pos, rx890_off
+    substr $S10, rx890_tgt, $I10, 1
+    index $I11, "\"", $S10
+    lt $I11, 0, rx890_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx890_cur."!cursor_pos"(rx890_pos)
+    $P10 = rx890_cur."quote_EXPR"(":qq")
+    unless $P10, rx890_fail
+    rx890_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx890_pos = $P10."pos"()
   # rx pass
-    rx886_cur."!cursor_pass"(rx886_pos, "quote_escape:sym<esc>")
-    rx886_cur."!cursor_debug"("PASS  ", "quote_escape:sym<esc>", " at pos=", rx886_pos)
-    .return (rx886_cur)
-  rx886_fail:
+    rx890_cur."!cursor_pass"(rx890_pos, "quote:sym<dblq>")
+    rx890_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx890_pos)
+    .return (rx890_cur)
+  rx890_fail:
 .annotate 'line', 4
-    (rx886_rep, rx886_pos, $I10, $P10) = rx886_cur."!mark_fail"(0)
-    lt rx886_pos, -1, rx886_done
-    eq rx886_pos, -1, rx886_fail
+    (rx890_rep, rx890_pos, $I10, $P10) = rx890_cur."!mark_fail"(0)
+    lt rx890_pos, -1, rx890_done
+    eq rx890_pos, -1, rx890_fail
     jump $I10
-  rx886_done:
-    rx886_cur."!cursor_fail"()
-    rx886_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<esc>")
-    .return (rx886_cur)
+  rx890_done:
+    rx890_cur."!cursor_fail"()
+    rx890_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
+    .return (rx890_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<esc>"  :subid("212_1274022894.43745") :method
+.sub "!PREFIX__quote:sym<dblq>"  :subid("207_1275811487.95429") :method
 .annotate 'line', 4
-    new $P888, "ResizablePMCArray"
-    push $P888, "\\e"
-    .return ($P888)
+    new $P892, "ResizablePMCArray"
+    push $P892, "\""
+    .return ($P892)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<( )>"  :subid("213_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "quote:sym<q>"  :subid("208_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx891_tgt
-    .local int rx891_pos
-    .local int rx891_off
-    .local int rx891_eos
-    .local int rx891_rep
-    .local pmc rx891_cur
-    (rx891_cur, rx891_pos, rx891_tgt) = self."!cursor_start"()
-    rx891_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
-    rx891_cur."!cursor_caparray"("EXPR")
-    .lex unicode:"$\x{a2}", rx891_cur
+    .local string rx895_tgt
+    .local int rx895_pos
+    .local int rx895_off
+    .local int rx895_eos
+    .local int rx895_rep
+    .local pmc rx895_cur
+    (rx895_cur, rx895_pos, rx895_tgt) = self."!cursor_start"()
+    rx895_cur."!cursor_debug"("START ", "quote:sym<q>")
+    .lex unicode:"$\x{a2}", rx895_cur
     .local pmc match
     .lex "$/", match
-    length rx891_eos, rx891_tgt
-    set rx891_off, 0
-    lt rx891_pos, 2, rx891_start
-    sub rx891_off, rx891_pos, 1
-    substr rx891_tgt, rx891_tgt, rx891_off
-  rx891_start:
+    length rx895_eos, rx895_tgt
+    gt rx895_pos, rx895_eos, rx895_done
+    set rx895_off, 0
+    lt rx895_pos, 2, rx895_start
+    sub rx895_off, rx895_pos, 1
+    substr rx895_tgt, rx895_tgt, rx895_off
+  rx895_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan895_done
-    goto rxscan895_scan
-  rxscan895_loop:
-    ($P10) = rx891_cur."from"()
+    ne $I10, -1, rxscan899_done
+    goto rxscan899_scan
+  rxscan899_loop:
+    ($P10) = rx895_cur."from"()
     inc $P10
-    set rx891_pos, $P10
-    ge rx891_pos, rx891_eos, rxscan895_done
-  rxscan895_scan:
-    set_addr $I10, rxscan895_loop
-    rx891_cur."!mark_push"(0, rx891_pos, $I10)
-  rxscan895_done:
-.annotate 'line', 420
-  # rx literal  "("
-    add $I11, rx891_pos, 1
-    gt $I11, rx891_eos, rx891_fail
-    sub $I11, rx891_pos, rx891_off
-    substr $S10, rx891_tgt, $I11, 1
-    ne $S10, "(", rx891_fail
-    add rx891_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx891_cur."!cursor_pos"(rx891_pos)
-    $P10 = rx891_cur."ws"()
-    unless $P10, rx891_fail
-    rx891_pos = $P10."pos"()
-  # rx rxquantr896 ** 0..1
-    set_addr $I897, rxquantr896_done
-    rx891_cur."!mark_push"(0, rx891_pos, $I897)
-  rxquantr896_loop:
-  # rx subrule "EXPR" subtype=capture negate=
-    rx891_cur."!cursor_pos"(rx891_pos)
-    $P10 = rx891_cur."EXPR"()
-    unless $P10, rx891_fail
-    rx891_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx891_pos = $P10."pos"()
-    (rx891_rep) = rx891_cur."!mark_commit"($I897)
-  rxquantr896_done:
-  # rx literal  ")"
-    add $I11, rx891_pos, 1
-    gt $I11, rx891_eos, rx891_fail
-    sub $I11, rx891_pos, rx891_off
-    substr $S10, rx891_tgt, $I11, 1
-    ne $S10, ")", rx891_fail
-    add rx891_pos, 1
+    set rx895_pos, $P10
+    ge rx895_pos, rx895_eos, rxscan899_done
+  rxscan899_scan:
+    set_addr $I10, rxscan899_loop
+    rx895_cur."!mark_push"(0, rx895_pos, $I10)
+  rxscan899_done:
+.annotate 'line', 419
+  # rx literal  "q"
+    add $I11, rx895_pos, 1
+    gt $I11, rx895_eos, rx895_fail
+    sub $I11, rx895_pos, rx895_off
+    substr $S10, rx895_tgt, $I11, 1
+    ne $S10, "q", rx895_fail
+    add rx895_pos, 1
+  # rxanchor rwb
+    le rx895_pos, 0, rx895_fail
+    sub $I10, rx895_pos, rx895_off
+    is_cclass $I11, 8192, rx895_tgt, $I10
+    if $I11, rx895_fail
+    dec $I10
+    is_cclass $I11, 8192, rx895_tgt, $I10
+    unless $I11, rx895_fail
+  # rx enumcharlist negate=1 zerowidth
+    ge rx895_pos, rx895_eos, rx895_fail
+    sub $I10, rx895_pos, rx895_off
+    substr $S10, rx895_tgt, $I10, 1
+    index $I11, "(", $S10
+    ge $I11, 0, rx895_fail
+  # rx subrule "ws" subtype=method negate=
+    rx895_cur."!cursor_pos"(rx895_pos)
+    $P10 = rx895_cur."ws"()
+    unless $P10, rx895_fail
+    rx895_pos = $P10."pos"()
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx895_cur."!cursor_pos"(rx895_pos)
+    $P10 = rx895_cur."quote_EXPR"(":q")
+    unless $P10, rx895_fail
+    rx895_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx895_pos = $P10."pos"()
   # rx pass
-    rx891_cur."!cursor_pass"(rx891_pos, "circumfix:sym<( )>")
-    rx891_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx891_pos)
-    .return (rx891_cur)
-  rx891_fail:
+    rx895_cur."!cursor_pass"(rx895_pos, "quote:sym<q>")
+    rx895_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx895_pos)
+    .return (rx895_cur)
+  rx895_fail:
 .annotate 'line', 4
-    (rx891_rep, rx891_pos, $I10, $P10) = rx891_cur."!mark_fail"(0)
-    lt rx891_pos, -1, rx891_done
-    eq rx891_pos, -1, rx891_fail
+    (rx895_rep, rx895_pos, $I10, $P10) = rx895_cur."!mark_fail"(0)
+    lt rx895_pos, -1, rx895_done
+    eq rx895_pos, -1, rx895_fail
     jump $I10
-  rx891_done:
-    rx891_cur."!cursor_fail"()
-    rx891_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
-    .return (rx891_cur)
+  rx895_done:
+    rx895_cur."!cursor_fail"()
+    rx895_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
+    .return (rx895_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<( )>"  :subid("214_1274022894.43745") :method
+.sub "!PREFIX__quote:sym<q>"  :subid("209_1275811487.95429") :method
 .annotate 'line', 4
-    $P893 = self."!PREFIX__!subrule"("", "(")
-    new $P894, "ResizablePMCArray"
-    push $P894, $P893
-    .return ($P894)
+    $P897 = self."!PREFIX__!subrule"("ws", "q")
+    new $P898, "ResizablePMCArray"
+    push $P898, $P897
+    .return ($P898)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<[ ]>"  :subid("215_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "quote:sym<qq>"  :subid("210_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx899_tgt
-    .local int rx899_pos
-    .local int rx899_off
-    .local int rx899_eos
-    .local int rx899_rep
-    .local pmc rx899_cur
-    (rx899_cur, rx899_pos, rx899_tgt) = self."!cursor_start"()
-    rx899_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
-    rx899_cur."!cursor_caparray"("EXPR")
-    .lex unicode:"$\x{a2}", rx899_cur
+    .local string rx901_tgt
+    .local int rx901_pos
+    .local int rx901_off
+    .local int rx901_eos
+    .local int rx901_rep
+    .local pmc rx901_cur
+    (rx901_cur, rx901_pos, rx901_tgt) = self."!cursor_start"()
+    rx901_cur."!cursor_debug"("START ", "quote:sym<qq>")
+    .lex unicode:"$\x{a2}", rx901_cur
     .local pmc match
     .lex "$/", match
-    length rx899_eos, rx899_tgt
-    set rx899_off, 0
-    lt rx899_pos, 2, rx899_start
-    sub rx899_off, rx899_pos, 1
-    substr rx899_tgt, rx899_tgt, rx899_off
-  rx899_start:
+    length rx901_eos, rx901_tgt
+    gt rx901_pos, rx901_eos, rx901_done
+    set rx901_off, 0
+    lt rx901_pos, 2, rx901_start
+    sub rx901_off, rx901_pos, 1
+    substr rx901_tgt, rx901_tgt, rx901_off
+  rx901_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan903_done
-    goto rxscan903_scan
-  rxscan903_loop:
-    ($P10) = rx899_cur."from"()
+    ne $I10, -1, rxscan905_done
+    goto rxscan905_scan
+  rxscan905_loop:
+    ($P10) = rx901_cur."from"()
     inc $P10
-    set rx899_pos, $P10
-    ge rx899_pos, rx899_eos, rxscan903_done
-  rxscan903_scan:
-    set_addr $I10, rxscan903_loop
-    rx899_cur."!mark_push"(0, rx899_pos, $I10)
-  rxscan903_done:
-.annotate 'line', 421
-  # rx literal  "["
-    add $I11, rx899_pos, 1
-    gt $I11, rx899_eos, rx899_fail
-    sub $I11, rx899_pos, rx899_off
-    substr $S10, rx899_tgt, $I11, 1
-    ne $S10, "[", rx899_fail
-    add rx899_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx899_cur."!cursor_pos"(rx899_pos)
-    $P10 = rx899_cur."ws"()
-    unless $P10, rx899_fail
-    rx899_pos = $P10."pos"()
-  # rx rxquantr904 ** 0..1
-    set_addr $I905, rxquantr904_done
-    rx899_cur."!mark_push"(0, rx899_pos, $I905)
-  rxquantr904_loop:
-  # rx subrule "EXPR" subtype=capture negate=
-    rx899_cur."!cursor_pos"(rx899_pos)
-    $P10 = rx899_cur."EXPR"()
-    unless $P10, rx899_fail
-    rx899_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx899_pos = $P10."pos"()
-    (rx899_rep) = rx899_cur."!mark_commit"($I905)
-  rxquantr904_done:
-  # rx literal  "]"
-    add $I11, rx899_pos, 1
-    gt $I11, rx899_eos, rx899_fail
-    sub $I11, rx899_pos, rx899_off
-    substr $S10, rx899_tgt, $I11, 1
-    ne $S10, "]", rx899_fail
-    add rx899_pos, 1
+    set rx901_pos, $P10
+    ge rx901_pos, rx901_eos, rxscan905_done
+  rxscan905_scan:
+    set_addr $I10, rxscan905_loop
+    rx901_cur."!mark_push"(0, rx901_pos, $I10)
+  rxscan905_done:
+.annotate 'line', 420
+  # rx literal  "qq"
+    add $I11, rx901_pos, 2
+    gt $I11, rx901_eos, rx901_fail
+    sub $I11, rx901_pos, rx901_off
+    substr $S10, rx901_tgt, $I11, 2
+    ne $S10, "qq", rx901_fail
+    add rx901_pos, 2
+  # rxanchor rwb
+    le rx901_pos, 0, rx901_fail
+    sub $I10, rx901_pos, rx901_off
+    is_cclass $I11, 8192, rx901_tgt, $I10
+    if $I11, rx901_fail
+    dec $I10
+    is_cclass $I11, 8192, rx901_tgt, $I10
+    unless $I11, rx901_fail
+  # rx enumcharlist negate=1 zerowidth
+    ge rx901_pos, rx901_eos, rx901_fail
+    sub $I10, rx901_pos, rx901_off
+    substr $S10, rx901_tgt, $I10, 1
+    index $I11, "(", $S10
+    ge $I11, 0, rx901_fail
+  # rx subrule "ws" subtype=method negate=
+    rx901_cur."!cursor_pos"(rx901_pos)
+    $P10 = rx901_cur."ws"()
+    unless $P10, rx901_fail
+    rx901_pos = $P10."pos"()
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx901_cur."!cursor_pos"(rx901_pos)
+    $P10 = rx901_cur."quote_EXPR"(":qq")
+    unless $P10, rx901_fail
+    rx901_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx901_pos = $P10."pos"()
   # rx pass
-    rx899_cur."!cursor_pass"(rx899_pos, "circumfix:sym<[ ]>")
-    rx899_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx899_pos)
-    .return (rx899_cur)
-  rx899_fail:
+    rx901_cur."!cursor_pass"(rx901_pos, "quote:sym<qq>")
+    rx901_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx901_pos)
+    .return (rx901_cur)
+  rx901_fail:
 .annotate 'line', 4
-    (rx899_rep, rx899_pos, $I10, $P10) = rx899_cur."!mark_fail"(0)
-    lt rx899_pos, -1, rx899_done
-    eq rx899_pos, -1, rx899_fail
+    (rx901_rep, rx901_pos, $I10, $P10) = rx901_cur."!mark_fail"(0)
+    lt rx901_pos, -1, rx901_done
+    eq rx901_pos, -1, rx901_fail
     jump $I10
-  rx899_done:
-    rx899_cur."!cursor_fail"()
-    rx899_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
-    .return (rx899_cur)
+  rx901_done:
+    rx901_cur."!cursor_fail"()
+    rx901_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
+    .return (rx901_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("216_1274022894.43745") :method
+.sub "!PREFIX__quote:sym<qq>"  :subid("211_1275811487.95429") :method
 .annotate 'line', 4
-    $P901 = self."!PREFIX__!subrule"("", "[")
-    new $P902, "ResizablePMCArray"
-    push $P902, $P901
-    .return ($P902)
+    $P903 = self."!PREFIX__!subrule"("ws", "qq")
+    new $P904, "ResizablePMCArray"
+    push $P904, $P903
+    .return ($P904)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<ang>"  :subid("217_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "quote:sym<Q>"  :subid("212_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx907_tgt
     .local int rx907_pos
@@ -10842,45 +10712,66 @@
     .local int rx907_rep
     .local pmc rx907_cur
     (rx907_cur, rx907_pos, rx907_tgt) = self."!cursor_start"()
-    rx907_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
+    rx907_cur."!cursor_debug"("START ", "quote:sym<Q>")
     .lex unicode:"$\x{a2}", rx907_cur
     .local pmc match
     .lex "$/", match
     length rx907_eos, rx907_tgt
+    gt rx907_pos, rx907_eos, rx907_done
     set rx907_off, 0
     lt rx907_pos, 2, rx907_start
     sub rx907_off, rx907_pos, 1
     substr rx907_tgt, rx907_tgt, rx907_off
   rx907_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan910_done
-    goto rxscan910_scan
-  rxscan910_loop:
+    ne $I10, -1, rxscan911_done
+    goto rxscan911_scan
+  rxscan911_loop:
     ($P10) = rx907_cur."from"()
     inc $P10
     set rx907_pos, $P10
-    ge rx907_pos, rx907_eos, rxscan910_done
-  rxscan910_scan:
-    set_addr $I10, rxscan910_loop
+    ge rx907_pos, rx907_eos, rxscan911_done
+  rxscan911_scan:
+    set_addr $I10, rxscan911_loop
     rx907_cur."!mark_push"(0, rx907_pos, $I10)
-  rxscan910_done:
-.annotate 'line', 422
-  # rx enumcharlist negate=0 zerowidth
+  rxscan911_done:
+.annotate 'line', 421
+  # rx literal  "Q"
+    add $I11, rx907_pos, 1
+    gt $I11, rx907_eos, rx907_fail
+    sub $I11, rx907_pos, rx907_off
+    substr $S10, rx907_tgt, $I11, 1
+    ne $S10, "Q", rx907_fail
+    add rx907_pos, 1
+  # rxanchor rwb
+    le rx907_pos, 0, rx907_fail
+    sub $I10, rx907_pos, rx907_off
+    is_cclass $I11, 8192, rx907_tgt, $I10
+    if $I11, rx907_fail
+    dec $I10
+    is_cclass $I11, 8192, rx907_tgt, $I10
+    unless $I11, rx907_fail
+  # rx enumcharlist negate=1 zerowidth
     ge rx907_pos, rx907_eos, rx907_fail
     sub $I10, rx907_pos, rx907_off
     substr $S10, rx907_tgt, $I10, 1
-    index $I11, "<", $S10
-    lt $I11, 0, rx907_fail
+    index $I11, "(", $S10
+    ge $I11, 0, rx907_fail
+  # rx subrule "ws" subtype=method negate=
+    rx907_cur."!cursor_pos"(rx907_pos)
+    $P10 = rx907_cur."ws"()
+    unless $P10, rx907_fail
+    rx907_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
     rx907_cur."!cursor_pos"(rx907_pos)
-    $P10 = rx907_cur."quote_EXPR"(":q", ":w")
+    $P10 = rx907_cur."quote_EXPR"()
     unless $P10, rx907_fail
     rx907_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
     rx907_pos = $P10."pos"()
   # rx pass
-    rx907_cur."!cursor_pass"(rx907_pos, "circumfix:sym<ang>")
-    rx907_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx907_pos)
+    rx907_cur."!cursor_pass"(rx907_pos, "quote:sym<Q>")
+    rx907_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx907_pos)
     .return (rx907_cur)
   rx907_fail:
 .annotate 'line', 4
@@ -10890,269 +10781,279 @@
     jump $I10
   rx907_done:
     rx907_cur."!cursor_fail"()
-    rx907_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
+    rx907_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
     .return (rx907_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<ang>"  :subid("218_1274022894.43745") :method
+.sub "!PREFIX__quote:sym<Q>"  :subid("213_1275811487.95429") :method
 .annotate 'line', 4
-    new $P909, "ResizablePMCArray"
-    push $P909, "<"
-    .return ($P909)
+    $P909 = self."!PREFIX__!subrule"("ws", "Q")
+    new $P910, "ResizablePMCArray"
+    push $P910, $P909
+    .return ($P910)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("219_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 4
-    .local string rx912_tgt
-    .local int rx912_pos
-    .local int rx912_off
-    .local int rx912_eos
-    .local int rx912_rep
-    .local pmc rx912_cur
-    (rx912_cur, rx912_pos, rx912_tgt) = self."!cursor_start"()
-    rx912_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    .lex unicode:"$\x{a2}", rx912_cur
-    .local pmc match
-    .lex "$/", match
-    length rx912_eos, rx912_tgt
-    set rx912_off, 0
-    lt rx912_pos, 2, rx912_start
-    sub rx912_off, rx912_pos, 1
-    substr rx912_tgt, rx912_tgt, rx912_off
-  rx912_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan915_done
-    goto rxscan915_scan
-  rxscan915_loop:
-    ($P10) = rx912_cur."from"()
-    inc $P10
-    set rx912_pos, $P10
-    ge rx912_pos, rx912_eos, rxscan915_done
-  rxscan915_scan:
-    set_addr $I10, rxscan915_loop
-    rx912_cur."!mark_push"(0, rx912_pos, $I10)
-  rxscan915_done:
-.annotate 'line', 423
-  # rx enumcharlist negate=0 zerowidth
-    ge rx912_pos, rx912_eos, rx912_fail
-    sub $I10, rx912_pos, rx912_off
-    substr $S10, rx912_tgt, $I10, 1
-    index $I11, unicode:"\x{ab}", $S10
-    lt $I11, 0, rx912_fail
+.sub "quote:sym<Q:PIR>"  :subid("214_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx913_tgt
+    .local int rx913_pos
+    .local int rx913_off
+    .local int rx913_eos
+    .local int rx913_rep
+    .local pmc rx913_cur
+    (rx913_cur, rx913_pos, rx913_tgt) = self."!cursor_start"()
+    rx913_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
+    .lex unicode:"$\x{a2}", rx913_cur
+    .local pmc match
+    .lex "$/", match
+    length rx913_eos, rx913_tgt
+    gt rx913_pos, rx913_eos, rx913_done
+    set rx913_off, 0
+    lt rx913_pos, 2, rx913_start
+    sub rx913_off, rx913_pos, 1
+    substr rx913_tgt, rx913_tgt, rx913_off
+  rx913_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan917_done
+    goto rxscan917_scan
+  rxscan917_loop:
+    ($P10) = rx913_cur."from"()
+    inc $P10
+    set rx913_pos, $P10
+    ge rx913_pos, rx913_eos, rxscan917_done
+  rxscan917_scan:
+    set_addr $I10, rxscan917_loop
+    rx913_cur."!mark_push"(0, rx913_pos, $I10)
+  rxscan917_done:
+.annotate 'line', 422
+  # rx literal  "Q:PIR"
+    add $I11, rx913_pos, 5
+    gt $I11, rx913_eos, rx913_fail
+    sub $I11, rx913_pos, rx913_off
+    substr $S10, rx913_tgt, $I11, 5
+    ne $S10, "Q:PIR", rx913_fail
+    add rx913_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx913_cur."!cursor_pos"(rx913_pos)
+    $P10 = rx913_cur."ws"()
+    unless $P10, rx913_fail
+    rx913_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx912_cur."!cursor_pos"(rx912_pos)
-    $P10 = rx912_cur."quote_EXPR"(":qq", ":w")
-    unless $P10, rx912_fail
-    rx912_cur."!mark_push"(0, -1, 0, $P10)
+    rx913_cur."!cursor_pos"(rx913_pos)
+    $P10 = rx913_cur."quote_EXPR"()
+    unless $P10, rx913_fail
+    rx913_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx912_pos = $P10."pos"()
+    rx913_pos = $P10."pos"()
   # rx pass
-    rx912_cur."!cursor_pass"(rx912_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    rx912_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx912_pos)
-    .return (rx912_cur)
-  rx912_fail:
+    rx913_cur."!cursor_pass"(rx913_pos, "quote:sym<Q:PIR>")
+    rx913_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx913_pos)
+    .return (rx913_cur)
+  rx913_fail:
 .annotate 'line', 4
-    (rx912_rep, rx912_pos, $I10, $P10) = rx912_cur."!mark_fail"(0)
-    lt rx912_pos, -1, rx912_done
-    eq rx912_pos, -1, rx912_fail
+    (rx913_rep, rx913_pos, $I10, $P10) = rx913_cur."!mark_fail"(0)
+    lt rx913_pos, -1, rx913_done
+    eq rx913_pos, -1, rx913_fail
     jump $I10
-  rx912_done:
-    rx912_cur."!cursor_fail"()
-    rx912_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    .return (rx912_cur)
+  rx913_done:
+    rx913_cur."!cursor_fail"()
+    rx913_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
+    .return (rx913_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("220_1274022894.43745") :method
+.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("215_1275811487.95429") :method
 .annotate 'line', 4
-    new $P914, "ResizablePMCArray"
-    push $P914, unicode:"\x{ab}"
-    .return ($P914)
+    $P915 = self."!PREFIX__!subrule"("ws", "Q:PIR")
+    new $P916, "ResizablePMCArray"
+    push $P916, $P915
+    .return ($P916)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<{ }>"  :subid("221_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "quote:sym</ />"  :subid("216_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx917_tgt
-    .local int rx917_pos
-    .local int rx917_off
-    .local int rx917_eos
-    .local int rx917_rep
-    .local pmc rx917_cur
-    (rx917_cur, rx917_pos, rx917_tgt) = self."!cursor_start"()
-    rx917_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx917_cur
+    .local string rx919_tgt
+    .local int rx919_pos
+    .local int rx919_off
+    .local int rx919_eos
+    .local int rx919_rep
+    .local pmc rx919_cur
+    (rx919_cur, rx919_pos, rx919_tgt) = self."!cursor_start"()
+    rx919_cur."!cursor_debug"("START ", "quote:sym</ />")
+    .lex unicode:"$\x{a2}", rx919_cur
     .local pmc match
     .lex "$/", match
-    length rx917_eos, rx917_tgt
-    set rx917_off, 0
-    lt rx917_pos, 2, rx917_start
-    sub rx917_off, rx917_pos, 1
-    substr rx917_tgt, rx917_tgt, rx917_off
-  rx917_start:
+    length rx919_eos, rx919_tgt
+    gt rx919_pos, rx919_eos, rx919_done
+    set rx919_off, 0
+    lt rx919_pos, 2, rx919_start
+    sub rx919_off, rx919_pos, 1
+    substr rx919_tgt, rx919_tgt, rx919_off
+  rx919_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan920_done
-    goto rxscan920_scan
-  rxscan920_loop:
-    ($P10) = rx917_cur."from"()
+    ne $I10, -1, rxscan923_done
+    goto rxscan923_scan
+  rxscan923_loop:
+    ($P10) = rx919_cur."from"()
     inc $P10
-    set rx917_pos, $P10
-    ge rx917_pos, rx917_eos, rxscan920_done
-  rxscan920_scan:
-    set_addr $I10, rxscan920_loop
-    rx917_cur."!mark_push"(0, rx917_pos, $I10)
-  rxscan920_done:
+    set rx919_pos, $P10
+    ge rx919_pos, rx919_eos, rxscan923_done
+  rxscan923_scan:
+    set_addr $I10, rxscan923_loop
+    rx919_cur."!mark_push"(0, rx919_pos, $I10)
+  rxscan923_done:
 .annotate 'line', 424
-  # rx enumcharlist negate=0 zerowidth
-    ge rx917_pos, rx917_eos, rx917_fail
-    sub $I10, rx917_pos, rx917_off
-    substr $S10, rx917_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx917_fail
-  # rx subrule "pblock" subtype=capture negate=
-    rx917_cur."!cursor_pos"(rx917_pos)
-    $P10 = rx917_cur."pblock"()
-    unless $P10, rx917_fail
-    rx917_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("pblock")
-    rx917_pos = $P10."pos"()
-  # rx pass
-    rx917_cur."!cursor_pass"(rx917_pos, "circumfix:sym<{ }>")
-    rx917_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx917_pos)
-    .return (rx917_cur)
-  rx917_fail:
-.annotate 'line', 4
-    (rx917_rep, rx917_pos, $I10, $P10) = rx917_cur."!mark_fail"(0)
-    lt rx917_pos, -1, rx917_done
-    eq rx917_pos, -1, rx917_fail
-    jump $I10
-  rx917_done:
-    rx917_cur."!cursor_fail"()
-    rx917_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
-    .return (rx917_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<{ }>"  :subid("222_1274022894.43745") :method
-.annotate 'line', 4
-    new $P919, "ResizablePMCArray"
-    push $P919, "{"
-    .return ($P919)
+  # rx literal  "/"
+    add $I11, rx919_pos, 1
+    gt $I11, rx919_eos, rx919_fail
+    sub $I11, rx919_pos, rx919_off
+    substr $S10, rx919_tgt, $I11, 1
+    ne $S10, "/", rx919_fail
+    add rx919_pos, 1
+.annotate 'line', 425
+  # rx subrule "newpad" subtype=method negate=
+    rx919_cur."!cursor_pos"(rx919_pos)
+    $P10 = rx919_cur."newpad"()
+    unless $P10, rx919_fail
+    rx919_pos = $P10."pos"()
+.annotate 'line', 426
+  # rx reduce name="quote:sym</ />" key="open"
+    rx919_cur."!cursor_pos"(rx919_pos)
+    rx919_cur."!reduce"("quote:sym</ />", "open")
+.annotate 'line', 427
+  # rx subrule "LANG" subtype=capture negate=
+    rx919_cur."!cursor_pos"(rx919_pos)
+    $P10 = rx919_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx919_fail
+    rx919_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("p6regex")
+    rx919_pos = $P10."pos"()
+.annotate 'line', 428
+  # rx literal  "/"
+    add $I11, rx919_pos, 1
+    gt $I11, rx919_eos, rx919_fail
+    sub $I11, rx919_pos, rx919_off
+    substr $S10, rx919_tgt, $I11, 1
+    ne $S10, "/", rx919_fail
+    add rx919_pos, 1
+.annotate 'line', 423
+  # rx pass
+    rx919_cur."!cursor_pass"(rx919_pos, "quote:sym</ />")
+    rx919_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx919_pos)
+    .return (rx919_cur)
+  rx919_fail:
+.annotate 'line', 4
+    (rx919_rep, rx919_pos, $I10, $P10) = rx919_cur."!mark_fail"(0)
+    lt rx919_pos, -1, rx919_done
+    eq rx919_pos, -1, rx919_fail
+    jump $I10
+  rx919_done:
+    rx919_cur."!cursor_fail"()
+    rx919_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
+    .return (rx919_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__quote:sym</ />"  :subid("217_1275811487.95429") :method
+.annotate 'line', 4
+    $P921 = self."!PREFIX__!subrule"("newpad", "/")
+    new $P922, "ResizablePMCArray"
+    push $P922, $P921
+    .return ($P922)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<sigil>"  :subid("223_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "quote_escape:sym<$>"  :subid("218_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
-    .local string rx922_tgt
-    .local int rx922_pos
-    .local int rx922_off
-    .local int rx922_eos
-    .local int rx922_rep
-    .local pmc rx922_cur
-    (rx922_cur, rx922_pos, rx922_tgt) = self."!cursor_start"()
-    rx922_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
-    .lex unicode:"$\x{a2}", rx922_cur
+    .local string rx925_tgt
+    .local int rx925_pos
+    .local int rx925_off
+    .local int rx925_eos
+    .local int rx925_rep
+    .local pmc rx925_cur
+    (rx925_cur, rx925_pos, rx925_tgt) = self."!cursor_start"()
+    rx925_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
+    .lex unicode:"$\x{a2}", rx925_cur
     .local pmc match
     .lex "$/", match
-    length rx922_eos, rx922_tgt
-    set rx922_off, 0
-    lt rx922_pos, 2, rx922_start
-    sub rx922_off, rx922_pos, 1
-    substr rx922_tgt, rx922_tgt, rx922_off
-  rx922_start:
+    length rx925_eos, rx925_tgt
+    gt rx925_pos, rx925_eos, rx925_done
+    set rx925_off, 0
+    lt rx925_pos, 2, rx925_start
+    sub rx925_off, rx925_pos, 1
+    substr rx925_tgt, rx925_tgt, rx925_off
+  rx925_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan926_done
-    goto rxscan926_scan
-  rxscan926_loop:
-    ($P10) = rx922_cur."from"()
+    ne $I10, -1, rxscan928_done
+    goto rxscan928_scan
+  rxscan928_loop:
+    ($P10) = rx925_cur."from"()
     inc $P10
-    set rx922_pos, $P10
-    ge rx922_pos, rx922_eos, rxscan926_done
-  rxscan926_scan:
-    set_addr $I10, rxscan926_loop
-    rx922_cur."!mark_push"(0, rx922_pos, $I10)
-  rxscan926_done:
-.annotate 'line', 425
-  # rx subrule "sigil" subtype=capture negate=
-    rx922_cur."!cursor_pos"(rx922_pos)
-    $P10 = rx922_cur."sigil"()
-    unless $P10, rx922_fail
-    rx922_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sigil")
-    rx922_pos = $P10."pos"()
-  # rx literal  "("
-    add $I11, rx922_pos, 1
-    gt $I11, rx922_eos, rx922_fail
-    sub $I11, rx922_pos, rx922_off
-    substr $S10, rx922_tgt, $I11, 1
-    ne $S10, "(", rx922_fail
-    add rx922_pos, 1
-  # rx subrule "semilist" subtype=capture negate=
-    rx922_cur."!cursor_pos"(rx922_pos)
-    $P10 = rx922_cur."semilist"()
-    unless $P10, rx922_fail
-    rx922_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("semilist")
-    rx922_pos = $P10."pos"()
-  alt927_0:
-    set_addr $I10, alt927_1
-    rx922_cur."!mark_push"(0, rx922_pos, $I10)
-  # rx literal  ")"
-    add $I11, rx922_pos, 1
-    gt $I11, rx922_eos, rx922_fail
-    sub $I11, rx922_pos, rx922_off
-    substr $S10, rx922_tgt, $I11, 1
-    ne $S10, ")", rx922_fail
-    add rx922_pos, 1
-    goto alt927_end
-  alt927_1:
-  # rx subrule "FAILGOAL" subtype=method negate=
-    rx922_cur."!cursor_pos"(rx922_pos)
-    $P10 = rx922_cur."FAILGOAL"("')'")
-    unless $P10, rx922_fail
-    rx922_pos = $P10."pos"()
-  alt927_end:
+    set rx925_pos, $P10
+    ge rx925_pos, rx925_eos, rxscan928_done
+  rxscan928_scan:
+    set_addr $I10, rxscan928_loop
+    rx925_cur."!mark_push"(0, rx925_pos, $I10)
+  rxscan928_done:
+.annotate 'line', 431
+  # rx enumcharlist negate=0 zerowidth
+    ge rx925_pos, rx925_eos, rx925_fail
+    sub $I10, rx925_pos, rx925_off
+    substr $S10, rx925_tgt, $I10, 1
+    index $I11, "$", $S10
+    lt $I11, 0, rx925_fail
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx925_cur."!cursor_pos"(rx925_pos)
+    $P10 = rx925_cur."quotemod_check"("s")
+    unless $P10, rx925_fail
+  # rx subrule "variable" subtype=capture negate=
+    rx925_cur."!cursor_pos"(rx925_pos)
+    $P10 = rx925_cur."variable"()
+    unless $P10, rx925_fail
+    rx925_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("variable")
+    rx925_pos = $P10."pos"()
   # rx pass
-    rx922_cur."!cursor_pass"(rx922_pos, "circumfix:sym<sigil>")
-    rx922_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx922_pos)
-    .return (rx922_cur)
-  rx922_fail:
+    rx925_cur."!cursor_pass"(rx925_pos, "quote_escape:sym<$>")
+    rx925_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx925_pos)
+    .return (rx925_cur)
+  rx925_fail:
 .annotate 'line', 4
-    (rx922_rep, rx922_pos, $I10, $P10) = rx922_cur."!mark_fail"(0)
-    lt rx922_pos, -1, rx922_done
-    eq rx922_pos, -1, rx922_fail
+    (rx925_rep, rx925_pos, $I10, $P10) = rx925_cur."!mark_fail"(0)
+    lt rx925_pos, -1, rx925_done
+    eq rx925_pos, -1, rx925_fail
     jump $I10
-  rx922_done:
-    rx922_cur."!cursor_fail"()
-    rx922_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
-    .return (rx922_cur)
+  rx925_done:
+    rx925_cur."!cursor_fail"()
+    rx925_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
+    .return (rx925_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<sigil>"  :subid("224_1274022894.43745") :method
+.sub "!PREFIX__quote_escape:sym<$>"  :subid("219_1275811487.95429") :method
 .annotate 'line', 4
-    $P924 = self."!PREFIX__!subrule"("sigil", "")
-    new $P925, "ResizablePMCArray"
-    push $P925, $P924
-    .return ($P925)
+    new $P927, "ResizablePMCArray"
+    push $P927, "$"
+    .return ($P927)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "semilist"  :subid("225_1274022894.43745") :method :outer("11_1274022894.43745")
+.sub "quote_escape:sym<{ }>"  :subid("220_1275811487.95429") :method :outer("11_1275811487.95429")
 .annotate 'line', 4
     .local string rx930_tgt
     .local int rx930_pos
@@ -11161,11 +11062,12 @@
     .local int rx930_rep
     .local pmc rx930_cur
     (rx930_cur, rx930_pos, rx930_tgt) = self."!cursor_start"()
-    rx930_cur."!cursor_debug"("START ", "semilist")
+    rx930_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
     .lex unicode:"$\x{a2}", rx930_cur
     .local pmc match
     .lex "$/", match
     length rx930_eos, rx930_tgt
+    gt rx930_pos, rx930_eos, rx930_done
     set rx930_off, 0
     lt rx930_pos, 2, rx930_start
     sub rx930_off, rx930_pos, 1
@@ -11183,27 +11085,27 @@
     set_addr $I10, rxscan933_loop
     rx930_cur."!mark_push"(0, rx930_pos, $I10)
   rxscan933_done:
-.annotate 'line', 427
-  # rx subrule "ws" subtype=method negate=
+.annotate 'line', 432
+  # rx enumcharlist negate=0 zerowidth
+    ge rx930_pos, rx930_eos, rx930_fail
+    sub $I10, rx930_pos, rx930_off
+    substr $S10, rx930_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx930_fail
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx930_cur."!cursor_pos"(rx930_pos)
-    $P10 = rx930_cur."ws"()
+    $P10 = rx930_cur."quotemod_check"("c")
     unless $P10, rx930_fail
-    rx930_pos = $P10."pos"()
-  # rx subrule "statement" subtype=capture negate=
+  # rx subrule "block" subtype=capture negate=
     rx930_cur."!cursor_pos"(rx930_pos)
-    $P10 = rx930_cur."statement"()
+    $P10 = rx930_cur."block"()
     unless $P10, rx930_fail
     rx930_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("statement")
-    rx930_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx930_cur."!cursor_pos"(rx930_pos)
-    $P10 = rx930_cur."ws"()
-    unless $P10, rx930_fail
+    $P10."!cursor_names"("block")
     rx930_pos = $P10."pos"()
   # rx pass
-    rx930_cur."!cursor_pass"(rx930_pos, "semilist")
-    rx930_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx930_pos)
+    rx930_cur."!cursor_pass"(rx930_pos, "quote_escape:sym<{ }>")
+    rx930_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx930_pos)
     .return (rx930_cur)
   rx930_fail:
 .annotate 'line', 4
@@ -11213,871 +11115,825 @@
     jump $I10
   rx930_done:
     rx930_cur."!cursor_fail"()
-    rx930_cur."!cursor_debug"("FAIL  ", "semilist")
+    rx930_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
     .return (rx930_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__semilist"  :subid("226_1274022894.43745") :method
+.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("221_1275811487.95429") :method
 .annotate 'line', 4
     new $P932, "ResizablePMCArray"
-    push $P932, ""
+    push $P932, "{"
     .return ($P932)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixish"  :subid("227_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx937_tgt
-    .local int rx937_pos
-    .local int rx937_off
-    .local int rx937_eos
-    .local int rx937_rep
-    .local pmc rx937_cur
-    (rx937_cur, rx937_pos, rx937_tgt) = self."!cursor_start"()
-    rx937_cur."!cursor_debug"("START ", "infixish")
-    .lex unicode:"$\x{a2}", rx937_cur
-    .local pmc match
-    .lex "$/", match
-    length rx937_eos, rx937_tgt
-    set rx937_off, 0
-    lt rx937_pos, 2, rx937_start
-    sub rx937_off, rx937_pos, 1
-    substr rx937_tgt, rx937_tgt, rx937_off
-  rx937_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan940_done
-    goto rxscan940_scan
-  rxscan940_loop:
-    ($P10) = rx937_cur."from"()
-    inc $P10
-    set rx937_pos, $P10
-    ge rx937_pos, rx937_eos, rxscan940_done
-  rxscan940_scan:
-    set_addr $I10, rxscan940_loop
-    rx937_cur."!mark_push"(0, rx937_pos, $I10)
-  rxscan940_done:
-.annotate 'line', 450
-  # rx subrule "infixstopper" subtype=zerowidth negate=1
-    rx937_cur."!cursor_pos"(rx937_pos)
-    $P10 = rx937_cur."infixstopper"()
-    if $P10, rx937_fail
-  # rx subrule "infix" subtype=capture negate=
-    rx937_cur."!cursor_pos"(rx937_pos)
-    $P10 = rx937_cur."infix"()
-    unless $P10, rx937_fail
-    rx937_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("OPER=infix")
-    rx937_pos = $P10."pos"()
+.sub "quote_escape:sym<esc>"  :subid("222_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx935_tgt
+    .local int rx935_pos
+    .local int rx935_off
+    .local int rx935_eos
+    .local int rx935_rep
+    .local pmc rx935_cur
+    (rx935_cur, rx935_pos, rx935_tgt) = self."!cursor_start"()
+    rx935_cur."!cursor_debug"("START ", "quote_escape:sym<esc>")
+    .lex unicode:"$\x{a2}", rx935_cur
+    .local pmc match
+    .lex "$/", match
+    length rx935_eos, rx935_tgt
+    gt rx935_pos, rx935_eos, rx935_done
+    set rx935_off, 0
+    lt rx935_pos, 2, rx935_start
+    sub rx935_off, rx935_pos, 1
+    substr rx935_tgt, rx935_tgt, rx935_off
+  rx935_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan938_done
+    goto rxscan938_scan
+  rxscan938_loop:
+    ($P10) = rx935_cur."from"()
+    inc $P10
+    set rx935_pos, $P10
+    ge rx935_pos, rx935_eos, rxscan938_done
+  rxscan938_scan:
+    set_addr $I10, rxscan938_loop
+    rx935_cur."!mark_push"(0, rx935_pos, $I10)
+  rxscan938_done:
+.annotate 'line', 433
+  # rx literal  "\\e"
+    add $I11, rx935_pos, 2
+    gt $I11, rx935_eos, rx935_fail
+    sub $I11, rx935_pos, rx935_off
+    substr $S10, rx935_tgt, $I11, 2
+    ne $S10, "\\e", rx935_fail
+    add rx935_pos, 2
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."quotemod_check"("b")
+    unless $P10, rx935_fail
   # rx pass
-    rx937_cur."!cursor_pass"(rx937_pos, "infixish")
-    rx937_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx937_pos)
-    .return (rx937_cur)
-  rx937_fail:
-.annotate 'line', 431
-    (rx937_rep, rx937_pos, $I10, $P10) = rx937_cur."!mark_fail"(0)
-    lt rx937_pos, -1, rx937_done
-    eq rx937_pos, -1, rx937_fail
+    rx935_cur."!cursor_pass"(rx935_pos, "quote_escape:sym<esc>")
+    rx935_cur."!cursor_debug"("PASS  ", "quote_escape:sym<esc>", " at pos=", rx935_pos)
+    .return (rx935_cur)
+  rx935_fail:
+.annotate 'line', 4
+    (rx935_rep, rx935_pos, $I10, $P10) = rx935_cur."!mark_fail"(0)
+    lt rx935_pos, -1, rx935_done
+    eq rx935_pos, -1, rx935_fail
     jump $I10
-  rx937_done:
-    rx937_cur."!cursor_fail"()
-    rx937_cur."!cursor_debug"("FAIL  ", "infixish")
-    .return (rx937_cur)
+  rx935_done:
+    rx935_cur."!cursor_fail"()
+    rx935_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<esc>")
+    .return (rx935_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("228_1274022894.43745") :method
-.annotate 'line', 431
-    new $P939, "ResizablePMCArray"
-    push $P939, ""
-    .return ($P939)
+.sub "!PREFIX__quote_escape:sym<esc>"  :subid("223_1275811487.95429") :method
+.annotate 'line', 4
+    new $P937, "ResizablePMCArray"
+    push $P937, "\\e"
+    .return ($P937)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixstopper"  :subid("229_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx942_tgt
-    .local int rx942_pos
-    .local int rx942_off
-    .local int rx942_eos
-    .local int rx942_rep
-    .local pmc rx942_cur
-    (rx942_cur, rx942_pos, rx942_tgt) = self."!cursor_start"()
-    rx942_cur."!cursor_debug"("START ", "infixstopper")
-    .lex unicode:"$\x{a2}", rx942_cur
-    .local pmc match
-    .lex "$/", match
-    length rx942_eos, rx942_tgt
-    set rx942_off, 0
-    lt rx942_pos, 2, rx942_start
-    sub rx942_off, rx942_pos, 1
-    substr rx942_tgt, rx942_tgt, rx942_off
-  rx942_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan945_done
-    goto rxscan945_scan
-  rxscan945_loop:
-    ($P10) = rx942_cur."from"()
-    inc $P10
-    set rx942_pos, $P10
-    ge rx942_pos, rx942_eos, rxscan945_done
-  rxscan945_scan:
-    set_addr $I10, rxscan945_loop
-    rx942_cur."!mark_push"(0, rx942_pos, $I10)
-  rxscan945_done:
-.annotate 'line', 451
-  # rx subrule "lambda" subtype=zerowidth negate=
-    rx942_cur."!cursor_pos"(rx942_pos)
-    $P10 = rx942_cur."lambda"()
-    unless $P10, rx942_fail
-  # rx pass
-    rx942_cur."!cursor_pass"(rx942_pos, "infixstopper")
-    rx942_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx942_pos)
-    .return (rx942_cur)
-  rx942_fail:
-.annotate 'line', 431
-    (rx942_rep, rx942_pos, $I10, $P10) = rx942_cur."!mark_fail"(0)
-    lt rx942_pos, -1, rx942_done
-    eq rx942_pos, -1, rx942_fail
+.sub "circumfix:sym<( )>"  :subid("224_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx940_tgt
+    .local int rx940_pos
+    .local int rx940_off
+    .local int rx940_eos
+    .local int rx940_rep
+    .local pmc rx940_cur
+    (rx940_cur, rx940_pos, rx940_tgt) = self."!cursor_start"()
+    rx940_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
+    rx940_cur."!cursor_caparray"("EXPR")
+    .lex unicode:"$\x{a2}", rx940_cur
+    .local pmc match
+    .lex "$/", match
+    length rx940_eos, rx940_tgt
+    gt rx940_pos, rx940_eos, rx940_done
+    set rx940_off, 0
+    lt rx940_pos, 2, rx940_start
+    sub rx940_off, rx940_pos, 1
+    substr rx940_tgt, rx940_tgt, rx940_off
+  rx940_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan944_done
+    goto rxscan944_scan
+  rxscan944_loop:
+    ($P10) = rx940_cur."from"()
+    inc $P10
+    set rx940_pos, $P10
+    ge rx940_pos, rx940_eos, rxscan944_done
+  rxscan944_scan:
+    set_addr $I10, rxscan944_loop
+    rx940_cur."!mark_push"(0, rx940_pos, $I10)
+  rxscan944_done:
+.annotate 'line', 435
+  # rx literal  "("
+    add $I11, rx940_pos, 1
+    gt $I11, rx940_eos, rx940_fail
+    sub $I11, rx940_pos, rx940_off
+    substr $S10, rx940_tgt, $I11, 1
+    ne $S10, "(", rx940_fail
+    add rx940_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx940_cur."!cursor_pos"(rx940_pos)
+    $P10 = rx940_cur."ws"()
+    unless $P10, rx940_fail
+    rx940_pos = $P10."pos"()
+  # rx rxquantr945 ** 0..1
+    set_addr $I946, rxquantr945_done
+    rx940_cur."!mark_push"(0, rx940_pos, $I946)
+  rxquantr945_loop:
+  # rx subrule "EXPR" subtype=capture negate=
+    rx940_cur."!cursor_pos"(rx940_pos)
+    $P10 = rx940_cur."EXPR"()
+    unless $P10, rx940_fail
+    rx940_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx940_pos = $P10."pos"()
+    (rx940_rep) = rx940_cur."!mark_commit"($I946)
+  rxquantr945_done:
+  # rx literal  ")"
+    add $I11, rx940_pos, 1
+    gt $I11, rx940_eos, rx940_fail
+    sub $I11, rx940_pos, rx940_off
+    substr $S10, rx940_tgt, $I11, 1
+    ne $S10, ")", rx940_fail
+    add rx940_pos, 1
+  # rx pass
+    rx940_cur."!cursor_pass"(rx940_pos, "circumfix:sym<( )>")
+    rx940_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx940_pos)
+    .return (rx940_cur)
+  rx940_fail:
+.annotate 'line', 4
+    (rx940_rep, rx940_pos, $I10, $P10) = rx940_cur."!mark_fail"(0)
+    lt rx940_pos, -1, rx940_done
+    eq rx940_pos, -1, rx940_fail
     jump $I10
-  rx942_done:
-    rx942_cur."!cursor_fail"()
-    rx942_cur."!cursor_debug"("FAIL  ", "infixstopper")
-    .return (rx942_cur)
+  rx940_done:
+    rx940_cur."!cursor_fail"()
+    rx940_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
+    .return (rx940_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixstopper"  :subid("230_1274022894.43745") :method
-.annotate 'line', 431
-    new $P944, "ResizablePMCArray"
-    push $P944, ""
-    .return ($P944)
+.sub "!PREFIX__circumfix:sym<( )>"  :subid("225_1275811487.95429") :method
+.annotate 'line', 4
+    $P942 = self."!PREFIX__!subrule"("ws", "(")
+    new $P943, "ResizablePMCArray"
+    push $P943, $P942
+    .return ($P943)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<[ ]>"  :subid("231_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx947_tgt
-    .local int rx947_pos
-    .local int rx947_off
-    .local int rx947_eos
-    .local int rx947_rep
-    .local pmc rx947_cur
-    (rx947_cur, rx947_pos, rx947_tgt) = self."!cursor_start"()
-    rx947_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
-    .lex unicode:"$\x{a2}", rx947_cur
-    .local pmc match
-    .lex "$/", match
-    length rx947_eos, rx947_tgt
-    set rx947_off, 0
-    lt rx947_pos, 2, rx947_start
-    sub rx947_off, rx947_pos, 1
-    substr rx947_tgt, rx947_tgt, rx947_off
-  rx947_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan951_done
-    goto rxscan951_scan
-  rxscan951_loop:
-    ($P10) = rx947_cur."from"()
-    inc $P10
-    set rx947_pos, $P10
-    ge rx947_pos, rx947_eos, rxscan951_done
-  rxscan951_scan:
-    set_addr $I10, rxscan951_loop
-    rx947_cur."!mark_push"(0, rx947_pos, $I10)
-  rxscan951_done:
-.annotate 'line', 454
+.sub "circumfix:sym<[ ]>"  :subid("226_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx948_tgt
+    .local int rx948_pos
+    .local int rx948_off
+    .local int rx948_eos
+    .local int rx948_rep
+    .local pmc rx948_cur
+    (rx948_cur, rx948_pos, rx948_tgt) = self."!cursor_start"()
+    rx948_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
+    rx948_cur."!cursor_caparray"("EXPR")
+    .lex unicode:"$\x{a2}", rx948_cur
+    .local pmc match
+    .lex "$/", match
+    length rx948_eos, rx948_tgt
+    gt rx948_pos, rx948_eos, rx948_done
+    set rx948_off, 0
+    lt rx948_pos, 2, rx948_start
+    sub rx948_off, rx948_pos, 1
+    substr rx948_tgt, rx948_tgt, rx948_off
+  rx948_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan952_done
+    goto rxscan952_scan
+  rxscan952_loop:
+    ($P10) = rx948_cur."from"()
+    inc $P10
+    set rx948_pos, $P10
+    ge rx948_pos, rx948_eos, rxscan952_done
+  rxscan952_scan:
+    set_addr $I10, rxscan952_loop
+    rx948_cur."!mark_push"(0, rx948_pos, $I10)
+  rxscan952_done:
+.annotate 'line', 436
   # rx literal  "["
-    add $I11, rx947_pos, 1
-    gt $I11, rx947_eos, rx947_fail
-    sub $I11, rx947_pos, rx947_off
-    substr $S10, rx947_tgt, $I11, 1
-    ne $S10, "[", rx947_fail
-    add rx947_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx947_cur."!cursor_pos"(rx947_pos)
-    $P10 = rx947_cur."ws"()
-    unless $P10, rx947_fail
-    rx947_pos = $P10."pos"()
+    add $I11, rx948_pos, 1
+    gt $I11, rx948_eos, rx948_fail
+    sub $I11, rx948_pos, rx948_off
+    substr $S10, rx948_tgt, $I11, 1
+    ne $S10, "[", rx948_fail
+    add rx948_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx948_cur."!cursor_pos"(rx948_pos)
+    $P10 = rx948_cur."ws"()
+    unless $P10, rx948_fail
+    rx948_pos = $P10."pos"()
+  # rx rxquantr953 ** 0..1
+    set_addr $I954, rxquantr953_done
+    rx948_cur."!mark_push"(0, rx948_pos, $I954)
+  rxquantr953_loop:
   # rx subrule "EXPR" subtype=capture negate=
-    rx947_cur."!cursor_pos"(rx947_pos)
-    $P10 = rx947_cur."EXPR"()
-    unless $P10, rx947_fail
-    rx947_cur."!mark_push"(0, -1, 0, $P10)
+    rx948_cur."!cursor_pos"(rx948_pos)
+    $P10 = rx948_cur."EXPR"()
+    unless $P10, rx948_fail
+    rx948_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx947_pos = $P10."pos"()
+    rx948_pos = $P10."pos"()
+    (rx948_rep) = rx948_cur."!mark_commit"($I954)
+  rxquantr953_done:
   # rx literal  "]"
-    add $I11, rx947_pos, 1
-    gt $I11, rx947_eos, rx947_fail
-    sub $I11, rx947_pos, rx947_off
-    substr $S10, rx947_tgt, $I11, 1
-    ne $S10, "]", rx947_fail
-    add rx947_pos, 1
-.annotate 'line', 455
-  # rx subrule "O" subtype=capture negate=
-    rx947_cur."!cursor_pos"(rx947_pos)
-    $P10 = rx947_cur."O"("%methodop")
-    unless $P10, rx947_fail
-    rx947_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx947_pos = $P10."pos"()
-.annotate 'line', 453
+    add $I11, rx948_pos, 1
+    gt $I11, rx948_eos, rx948_fail
+    sub $I11, rx948_pos, rx948_off
+    substr $S10, rx948_tgt, $I11, 1
+    ne $S10, "]", rx948_fail
+    add rx948_pos, 1
   # rx pass
-    rx947_cur."!cursor_pass"(rx947_pos, "postcircumfix:sym<[ ]>")
-    rx947_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx947_pos)
-    .return (rx947_cur)
-  rx947_fail:
-.annotate 'line', 431
-    (rx947_rep, rx947_pos, $I10, $P10) = rx947_cur."!mark_fail"(0)
-    lt rx947_pos, -1, rx947_done
-    eq rx947_pos, -1, rx947_fail
+    rx948_cur."!cursor_pass"(rx948_pos, "circumfix:sym<[ ]>")
+    rx948_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx948_pos)
+    .return (rx948_cur)
+  rx948_fail:
+.annotate 'line', 4
+    (rx948_rep, rx948_pos, $I10, $P10) = rx948_cur."!mark_fail"(0)
+    lt rx948_pos, -1, rx948_done
+    eq rx948_pos, -1, rx948_fail
     jump $I10
-  rx947_done:
-    rx947_cur."!cursor_fail"()
-    rx947_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
-    .return (rx947_cur)
+  rx948_done:
+    rx948_cur."!cursor_fail"()
+    rx948_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
+    .return (rx948_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("232_1274022894.43745") :method
-.annotate 'line', 431
-    $P949 = self."!PREFIX__!subrule"("", "[")
-    new $P950, "ResizablePMCArray"
-    push $P950, $P949
-    .return ($P950)
+.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("227_1275811487.95429") :method
+.annotate 'line', 4
+    $P950 = self."!PREFIX__!subrule"("ws", "[")
+    new $P951, "ResizablePMCArray"
+    push $P951, $P950
+    .return ($P951)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<{ }>"  :subid("233_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx953_tgt
-    .local int rx953_pos
-    .local int rx953_off
-    .local int rx953_eos
-    .local int rx953_rep
-    .local pmc rx953_cur
-    (rx953_cur, rx953_pos, rx953_tgt) = self."!cursor_start"()
-    rx953_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx953_cur
-    .local pmc match
-    .lex "$/", match
-    length rx953_eos, rx953_tgt
-    set rx953_off, 0
-    lt rx953_pos, 2, rx953_start
-    sub rx953_off, rx953_pos, 1
-    substr rx953_tgt, rx953_tgt, rx953_off
-  rx953_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan957_done
-    goto rxscan957_scan
-  rxscan957_loop:
-    ($P10) = rx953_cur."from"()
-    inc $P10
-    set rx953_pos, $P10
-    ge rx953_pos, rx953_eos, rxscan957_done
-  rxscan957_scan:
-    set_addr $I10, rxscan957_loop
-    rx953_cur."!mark_push"(0, rx953_pos, $I10)
-  rxscan957_done:
-.annotate 'line', 459
-  # rx literal  "{"
-    add $I11, rx953_pos, 1
-    gt $I11, rx953_eos, rx953_fail
-    sub $I11, rx953_pos, rx953_off
-    substr $S10, rx953_tgt, $I11, 1
-    ne $S10, "{", rx953_fail
-    add rx953_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx953_cur."!cursor_pos"(rx953_pos)
-    $P10 = rx953_cur."ws"()
-    unless $P10, rx953_fail
-    rx953_pos = $P10."pos"()
-  # rx subrule "EXPR" subtype=capture negate=
-    rx953_cur."!cursor_pos"(rx953_pos)
-    $P10 = rx953_cur."EXPR"()
-    unless $P10, rx953_fail
-    rx953_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx953_pos = $P10."pos"()
-  # rx literal  "}"
-    add $I11, rx953_pos, 1
-    gt $I11, rx953_eos, rx953_fail
-    sub $I11, rx953_pos, rx953_off
-    substr $S10, rx953_tgt, $I11, 1
-    ne $S10, "}", rx953_fail
-    add rx953_pos, 1
-.annotate 'line', 460
-  # rx subrule "O" subtype=capture negate=
-    rx953_cur."!cursor_pos"(rx953_pos)
-    $P10 = rx953_cur."O"("%methodop")
-    unless $P10, rx953_fail
-    rx953_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx953_pos = $P10."pos"()
-.annotate 'line', 458
+.sub "circumfix:sym<ang>"  :subid("228_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx956_tgt
+    .local int rx956_pos
+    .local int rx956_off
+    .local int rx956_eos
+    .local int rx956_rep
+    .local pmc rx956_cur
+    (rx956_cur, rx956_pos, rx956_tgt) = self."!cursor_start"()
+    rx956_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
+    .lex unicode:"$\x{a2}", rx956_cur
+    .local pmc match
+    .lex "$/", match
+    length rx956_eos, rx956_tgt
+    gt rx956_pos, rx956_eos, rx956_done
+    set rx956_off, 0
+    lt rx956_pos, 2, rx956_start
+    sub rx956_off, rx956_pos, 1
+    substr rx956_tgt, rx956_tgt, rx956_off
+  rx956_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan959_done
+    goto rxscan959_scan
+  rxscan959_loop:
+    ($P10) = rx956_cur."from"()
+    inc $P10
+    set rx956_pos, $P10
+    ge rx956_pos, rx956_eos, rxscan959_done
+  rxscan959_scan:
+    set_addr $I10, rxscan959_loop
+    rx956_cur."!mark_push"(0, rx956_pos, $I10)
+  rxscan959_done:
+.annotate 'line', 437
+  # rx enumcharlist negate=0 zerowidth
+    ge rx956_pos, rx956_eos, rx956_fail
+    sub $I10, rx956_pos, rx956_off
+    substr $S10, rx956_tgt, $I10, 1
+    index $I11, "<", $S10
+    lt $I11, 0, rx956_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx956_cur."!cursor_pos"(rx956_pos)
+    $P10 = rx956_cur."quote_EXPR"(":q", ":w")
+    unless $P10, rx956_fail
+    rx956_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx956_pos = $P10."pos"()
   # rx pass
-    rx953_cur."!cursor_pass"(rx953_pos, "postcircumfix:sym<{ }>")
-    rx953_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx953_pos)
-    .return (rx953_cur)
-  rx953_fail:
-.annotate 'line', 431
-    (rx953_rep, rx953_pos, $I10, $P10) = rx953_cur."!mark_fail"(0)
-    lt rx953_pos, -1, rx953_done
-    eq rx953_pos, -1, rx953_fail
+    rx956_cur."!cursor_pass"(rx956_pos, "circumfix:sym<ang>")
+    rx956_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx956_pos)
+    .return (rx956_cur)
+  rx956_fail:
+.annotate 'line', 4
+    (rx956_rep, rx956_pos, $I10, $P10) = rx956_cur."!mark_fail"(0)
+    lt rx956_pos, -1, rx956_done
+    eq rx956_pos, -1, rx956_fail
     jump $I10
-  rx953_done:
-    rx953_cur."!cursor_fail"()
-    rx953_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
-    .return (rx953_cur)
+  rx956_done:
+    rx956_cur."!cursor_fail"()
+    rx956_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
+    .return (rx956_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("234_1274022894.43745") :method
-.annotate 'line', 431
-    $P955 = self."!PREFIX__!subrule"("", "{")
-    new $P956, "ResizablePMCArray"
-    push $P956, $P955
-    .return ($P956)
+.sub "!PREFIX__circumfix:sym<ang>"  :subid("229_1275811487.95429") :method
+.annotate 'line', 4
+    new $P958, "ResizablePMCArray"
+    push $P958, "<"
+    .return ($P958)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<ang>"  :subid("235_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx959_tgt
-    .local int rx959_pos
-    .local int rx959_off
-    .local int rx959_eos
-    .local int rx959_rep
-    .local pmc rx959_cur
-    (rx959_cur, rx959_pos, rx959_tgt) = self."!cursor_start"()
-    rx959_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
-    .lex unicode:"$\x{a2}", rx959_cur
-    .local pmc match
-    .lex "$/", match
-    length rx959_eos, rx959_tgt
-    set rx959_off, 0
-    lt rx959_pos, 2, rx959_start
-    sub rx959_off, rx959_pos, 1
-    substr rx959_tgt, rx959_tgt, rx959_off
-  rx959_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan962_done
-    goto rxscan962_scan
-  rxscan962_loop:
-    ($P10) = rx959_cur."from"()
-    inc $P10
-    set rx959_pos, $P10
-    ge rx959_pos, rx959_eos, rxscan962_done
-  rxscan962_scan:
-    set_addr $I10, rxscan962_loop
-    rx959_cur."!mark_push"(0, rx959_pos, $I10)
-  rxscan962_done:
-.annotate 'line', 464
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("230_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx961_tgt
+    .local int rx961_pos
+    .local int rx961_off
+    .local int rx961_eos
+    .local int rx961_rep
+    .local pmc rx961_cur
+    (rx961_cur, rx961_pos, rx961_tgt) = self."!cursor_start"()
+    rx961_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    .lex unicode:"$\x{a2}", rx961_cur
+    .local pmc match
+    .lex "$/", match
+    length rx961_eos, rx961_tgt
+    gt rx961_pos, rx961_eos, rx961_done
+    set rx961_off, 0
+    lt rx961_pos, 2, rx961_start
+    sub rx961_off, rx961_pos, 1
+    substr rx961_tgt, rx961_tgt, rx961_off
+  rx961_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan964_done
+    goto rxscan964_scan
+  rxscan964_loop:
+    ($P10) = rx961_cur."from"()
+    inc $P10
+    set rx961_pos, $P10
+    ge rx961_pos, rx961_eos, rxscan964_done
+  rxscan964_scan:
+    set_addr $I10, rxscan964_loop
+    rx961_cur."!mark_push"(0, rx961_pos, $I10)
+  rxscan964_done:
+.annotate 'line', 438
   # rx enumcharlist negate=0 zerowidth
-    ge rx959_pos, rx959_eos, rx959_fail
-    sub $I10, rx959_pos, rx959_off
-    substr $S10, rx959_tgt, $I10, 1
-    index $I11, "<", $S10
-    lt $I11, 0, rx959_fail
+    ge rx961_pos, rx961_eos, rx961_fail
+    sub $I10, rx961_pos, rx961_off
+    substr $S10, rx961_tgt, $I10, 1
+    index $I11, unicode:"\x{ab}", $S10
+    lt $I11, 0, rx961_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx959_cur."!cursor_pos"(rx959_pos)
-    $P10 = rx959_cur."quote_EXPR"(":q")
-    unless $P10, rx959_fail
-    rx959_cur."!mark_push"(0, -1, 0, $P10)
+    rx961_cur."!cursor_pos"(rx961_pos)
+    $P10 = rx961_cur."quote_EXPR"(":qq", ":w")
+    unless $P10, rx961_fail
+    rx961_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx959_pos = $P10."pos"()
-.annotate 'line', 465
-  # rx subrule "O" subtype=capture negate=
-    rx959_cur."!cursor_pos"(rx959_pos)
-    $P10 = rx959_cur."O"("%methodop")
-    unless $P10, rx959_fail
-    rx959_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx959_pos = $P10."pos"()
-.annotate 'line', 463
+    rx961_pos = $P10."pos"()
   # rx pass
-    rx959_cur."!cursor_pass"(rx959_pos, "postcircumfix:sym<ang>")
-    rx959_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx959_pos)
-    .return (rx959_cur)
-  rx959_fail:
-.annotate 'line', 431
-    (rx959_rep, rx959_pos, $I10, $P10) = rx959_cur."!mark_fail"(0)
-    lt rx959_pos, -1, rx959_done
-    eq rx959_pos, -1, rx959_fail
+    rx961_cur."!cursor_pass"(rx961_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    rx961_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx961_pos)
+    .return (rx961_cur)
+  rx961_fail:
+.annotate 'line', 4
+    (rx961_rep, rx961_pos, $I10, $P10) = rx961_cur."!mark_fail"(0)
+    lt rx961_pos, -1, rx961_done
+    eq rx961_pos, -1, rx961_fail
     jump $I10
-  rx959_done:
-    rx959_cur."!cursor_fail"()
-    rx959_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
-    .return (rx959_cur)
+  rx961_done:
+    rx961_cur."!cursor_fail"()
+    rx961_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    .return (rx961_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("236_1274022894.43745") :method
-.annotate 'line', 431
-    new $P961, "ResizablePMCArray"
-    push $P961, "<"
-    .return ($P961)
+.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("231_1275811487.95429") :method
+.annotate 'line', 4
+    new $P963, "ResizablePMCArray"
+    push $P963, unicode:"\x{ab}"
+    .return ($P963)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<( )>"  :subid("237_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx964_tgt
-    .local int rx964_pos
-    .local int rx964_off
-    .local int rx964_eos
-    .local int rx964_rep
-    .local pmc rx964_cur
-    (rx964_cur, rx964_pos, rx964_tgt) = self."!cursor_start"()
-    rx964_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
-    .lex unicode:"$\x{a2}", rx964_cur
-    .local pmc match
-    .lex "$/", match
-    length rx964_eos, rx964_tgt
-    set rx964_off, 0
-    lt rx964_pos, 2, rx964_start
-    sub rx964_off, rx964_pos, 1
-    substr rx964_tgt, rx964_tgt, rx964_off
-  rx964_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan968_done
-    goto rxscan968_scan
-  rxscan968_loop:
-    ($P10) = rx964_cur."from"()
-    inc $P10
-    set rx964_pos, $P10
-    ge rx964_pos, rx964_eos, rxscan968_done
-  rxscan968_scan:
-    set_addr $I10, rxscan968_loop
-    rx964_cur."!mark_push"(0, rx964_pos, $I10)
-  rxscan968_done:
-.annotate 'line', 469
-  # rx literal  "("
-    add $I11, rx964_pos, 1
-    gt $I11, rx964_eos, rx964_fail
-    sub $I11, rx964_pos, rx964_off
-    substr $S10, rx964_tgt, $I11, 1
-    ne $S10, "(", rx964_fail
-    add rx964_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx964_cur."!cursor_pos"(rx964_pos)
-    $P10 = rx964_cur."ws"()
-    unless $P10, rx964_fail
-    rx964_pos = $P10."pos"()
-  # rx subrule "arglist" subtype=capture negate=
-    rx964_cur."!cursor_pos"(rx964_pos)
-    $P10 = rx964_cur."arglist"()
-    unless $P10, rx964_fail
-    rx964_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx964_pos = $P10."pos"()
-  # rx literal  ")"
-    add $I11, rx964_pos, 1
-    gt $I11, rx964_eos, rx964_fail
-    sub $I11, rx964_pos, rx964_off
-    substr $S10, rx964_tgt, $I11, 1
-    ne $S10, ")", rx964_fail
-    add rx964_pos, 1
-.annotate 'line', 470
-  # rx subrule "O" subtype=capture negate=
-    rx964_cur."!cursor_pos"(rx964_pos)
-    $P10 = rx964_cur."O"("%methodop")
-    unless $P10, rx964_fail
-    rx964_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx964_pos = $P10."pos"()
-.annotate 'line', 468
+.sub "circumfix:sym<{ }>"  :subid("232_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx966_tgt
+    .local int rx966_pos
+    .local int rx966_off
+    .local int rx966_eos
+    .local int rx966_rep
+    .local pmc rx966_cur
+    (rx966_cur, rx966_pos, rx966_tgt) = self."!cursor_start"()
+    rx966_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx966_cur
+    .local pmc match
+    .lex "$/", match
+    length rx966_eos, rx966_tgt
+    gt rx966_pos, rx966_eos, rx966_done
+    set rx966_off, 0
+    lt rx966_pos, 2, rx966_start
+    sub rx966_off, rx966_pos, 1
+    substr rx966_tgt, rx966_tgt, rx966_off
+  rx966_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan969_done
+    goto rxscan969_scan
+  rxscan969_loop:
+    ($P10) = rx966_cur."from"()
+    inc $P10
+    set rx966_pos, $P10
+    ge rx966_pos, rx966_eos, rxscan969_done
+  rxscan969_scan:
+    set_addr $I10, rxscan969_loop
+    rx966_cur."!mark_push"(0, rx966_pos, $I10)
+  rxscan969_done:
+.annotate 'line', 439
+  # rx enumcharlist negate=0 zerowidth
+    ge rx966_pos, rx966_eos, rx966_fail
+    sub $I10, rx966_pos, rx966_off
+    substr $S10, rx966_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx966_fail
+  # rx subrule "pblock" subtype=capture negate=
+    rx966_cur."!cursor_pos"(rx966_pos)
+    $P10 = rx966_cur."pblock"()
+    unless $P10, rx966_fail
+    rx966_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("pblock")
+    rx966_pos = $P10."pos"()
   # rx pass
-    rx964_cur."!cursor_pass"(rx964_pos, "postcircumfix:sym<( )>")
-    rx964_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx964_pos)
-    .return (rx964_cur)
-  rx964_fail:
-.annotate 'line', 431
-    (rx964_rep, rx964_pos, $I10, $P10) = rx964_cur."!mark_fail"(0)
-    lt rx964_pos, -1, rx964_done
-    eq rx964_pos, -1, rx964_fail
+    rx966_cur."!cursor_pass"(rx966_pos, "circumfix:sym<{ }>")
+    rx966_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx966_pos)
+    .return (rx966_cur)
+  rx966_fail:
+.annotate 'line', 4
+    (rx966_rep, rx966_pos, $I10, $P10) = rx966_cur."!mark_fail"(0)
+    lt rx966_pos, -1, rx966_done
+    eq rx966_pos, -1, rx966_fail
     jump $I10
-  rx964_done:
-    rx964_cur."!cursor_fail"()
-    rx964_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
-    .return (rx964_cur)
+  rx966_done:
+    rx966_cur."!cursor_fail"()
+    rx966_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
+    .return (rx966_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("238_1274022894.43745") :method
-.annotate 'line', 431
-    $P966 = self."!PREFIX__!subrule"("", "(")
-    new $P967, "ResizablePMCArray"
-    push $P967, $P966
-    .return ($P967)
+.sub "!PREFIX__circumfix:sym<{ }>"  :subid("233_1275811487.95429") :method
+.annotate 'line', 4
+    new $P968, "ResizablePMCArray"
+    push $P968, "{"
+    .return ($P968)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<.>"  :subid("239_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx970_tgt
-    .local int rx970_pos
-    .local int rx970_off
-    .local int rx970_eos
-    .local int rx970_rep
-    .local pmc rx970_cur
-    (rx970_cur, rx970_pos, rx970_tgt) = self."!cursor_start"()
-    rx970_cur."!cursor_debug"("START ", "postfix:sym<.>")
-    .lex unicode:"$\x{a2}", rx970_cur
-    .local pmc match
-    .lex "$/", match
-    length rx970_eos, rx970_tgt
-    set rx970_off, 0
-    lt rx970_pos, 2, rx970_start
-    sub rx970_off, rx970_pos, 1
-    substr rx970_tgt, rx970_tgt, rx970_off
-  rx970_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan974_done
-    goto rxscan974_scan
-  rxscan974_loop:
-    ($P10) = rx970_cur."from"()
-    inc $P10
-    set rx970_pos, $P10
-    ge rx970_pos, rx970_eos, rxscan974_done
-  rxscan974_scan:
-    set_addr $I10, rxscan974_loop
-    rx970_cur."!mark_push"(0, rx970_pos, $I10)
-  rxscan974_done:
-.annotate 'line', 473
-  # rx subrule "dotty" subtype=capture negate=
-    rx970_cur."!cursor_pos"(rx970_pos)
-    $P10 = rx970_cur."dotty"()
-    unless $P10, rx970_fail
-    rx970_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("dotty")
-    rx970_pos = $P10."pos"()
-  # rx subrule "O" subtype=capture negate=
-    rx970_cur."!cursor_pos"(rx970_pos)
-    $P10 = rx970_cur."O"("%methodop")
-    unless $P10, rx970_fail
-    rx970_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx970_pos = $P10."pos"()
+.sub "circumfix:sym<sigil>"  :subid("234_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx971_tgt
+    .local int rx971_pos
+    .local int rx971_off
+    .local int rx971_eos
+    .local int rx971_rep
+    .local pmc rx971_cur
+    (rx971_cur, rx971_pos, rx971_tgt) = self."!cursor_start"()
+    rx971_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
+    .lex unicode:"$\x{a2}", rx971_cur
+    .local pmc match
+    .lex "$/", match
+    length rx971_eos, rx971_tgt
+    gt rx971_pos, rx971_eos, rx971_done
+    set rx971_off, 0
+    lt rx971_pos, 2, rx971_start
+    sub rx971_off, rx971_pos, 1
+    substr rx971_tgt, rx971_tgt, rx971_off
+  rx971_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan975_done
+    goto rxscan975_scan
+  rxscan975_loop:
+    ($P10) = rx971_cur."from"()
+    inc $P10
+    set rx971_pos, $P10
+    ge rx971_pos, rx971_eos, rxscan975_done
+  rxscan975_scan:
+    set_addr $I10, rxscan975_loop
+    rx971_cur."!mark_push"(0, rx971_pos, $I10)
+  rxscan975_done:
+.annotate 'line', 440
+  # rx subrule "sigil" subtype=capture negate=
+    rx971_cur."!cursor_pos"(rx971_pos)
+    $P10 = rx971_cur."sigil"()
+    unless $P10, rx971_fail
+    rx971_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sigil")
+    rx971_pos = $P10."pos"()
+  # rx literal  "("
+    add $I11, rx971_pos, 1
+    gt $I11, rx971_eos, rx971_fail
+    sub $I11, rx971_pos, rx971_off
+    substr $S10, rx971_tgt, $I11, 1
+    ne $S10, "(", rx971_fail
+    add rx971_pos, 1
+  # rx subrule "semilist" subtype=capture negate=
+    rx971_cur."!cursor_pos"(rx971_pos)
+    $P10 = rx971_cur."semilist"()
+    unless $P10, rx971_fail
+    rx971_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("semilist")
+    rx971_pos = $P10."pos"()
+  alt976_0:
+    set_addr $I10, alt976_1
+    rx971_cur."!mark_push"(0, rx971_pos, $I10)
+  # rx literal  ")"
+    add $I11, rx971_pos, 1
+    gt $I11, rx971_eos, rx971_fail
+    sub $I11, rx971_pos, rx971_off
+    substr $S10, rx971_tgt, $I11, 1
+    ne $S10, ")", rx971_fail
+    add rx971_pos, 1
+    goto alt976_end
+  alt976_1:
+  # rx subrule "FAILGOAL" subtype=method negate=
+    rx971_cur."!cursor_pos"(rx971_pos)
+    $P10 = rx971_cur."FAILGOAL"("')'")
+    unless $P10, rx971_fail
+    rx971_pos = $P10."pos"()
+  alt976_end:
   # rx pass
-    rx970_cur."!cursor_pass"(rx970_pos, "postfix:sym<.>")
-    rx970_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx970_pos)
-    .return (rx970_cur)
-  rx970_fail:
-.annotate 'line', 431
-    (rx970_rep, rx970_pos, $I10, $P10) = rx970_cur."!mark_fail"(0)
-    lt rx970_pos, -1, rx970_done
-    eq rx970_pos, -1, rx970_fail
+    rx971_cur."!cursor_pass"(rx971_pos, "circumfix:sym<sigil>")
+    rx971_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx971_pos)
+    .return (rx971_cur)
+  rx971_fail:
+.annotate 'line', 4
+    (rx971_rep, rx971_pos, $I10, $P10) = rx971_cur."!mark_fail"(0)
+    lt rx971_pos, -1, rx971_done
+    eq rx971_pos, -1, rx971_fail
     jump $I10
-  rx970_done:
-    rx970_cur."!cursor_fail"()
-    rx970_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
-    .return (rx970_cur)
+  rx971_done:
+    rx971_cur."!cursor_fail"()
+    rx971_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
+    .return (rx971_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<.>"  :subid("240_1274022894.43745") :method
-.annotate 'line', 431
-    $P972 = self."!PREFIX__!subrule"("dotty", "")
-    new $P973, "ResizablePMCArray"
-    push $P973, $P972
-    .return ($P973)
+.sub "!PREFIX__circumfix:sym<sigil>"  :subid("235_1275811487.95429") :method
+.annotate 'line', 4
+    $P973 = self."!PREFIX__!subrule"("sigil", "")
+    new $P974, "ResizablePMCArray"
+    push $P974, $P973
+    .return ($P974)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<++>"  :subid("241_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx976_tgt
-    .local int rx976_pos
-    .local int rx976_off
-    .local int rx976_eos
-    .local int rx976_rep
-    .local pmc rx976_cur
-    (rx976_cur, rx976_pos, rx976_tgt) = self."!cursor_start"()
-    rx976_cur."!cursor_debug"("START ", "prefix:sym<++>")
-    .lex unicode:"$\x{a2}", rx976_cur
-    .local pmc match
-    .lex "$/", match
-    length rx976_eos, rx976_tgt
-    set rx976_off, 0
-    lt rx976_pos, 2, rx976_start
-    sub rx976_off, rx976_pos, 1
-    substr rx976_tgt, rx976_tgt, rx976_off
-  rx976_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan980_done
-    goto rxscan980_scan
-  rxscan980_loop:
-    ($P10) = rx976_cur."from"()
-    inc $P10
-    set rx976_pos, $P10
-    ge rx976_pos, rx976_eos, rxscan980_done
-  rxscan980_scan:
-    set_addr $I10, rxscan980_loop
-    rx976_cur."!mark_push"(0, rx976_pos, $I10)
-  rxscan980_done:
-.annotate 'line', 475
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_981_fail
-    rx976_cur."!mark_push"(0, rx976_pos, $I10)
-  # rx literal  "++"
-    add $I11, rx976_pos, 2
-    gt $I11, rx976_eos, rx976_fail
-    sub $I11, rx976_pos, rx976_off
-    substr $S10, rx976_tgt, $I11, 2
-    ne $S10, "++", rx976_fail
-    add rx976_pos, 2
-    set_addr $I10, rxcap_981_fail
-    ($I12, $I11) = rx976_cur."!mark_peek"($I10)
-    rx976_cur."!cursor_pos"($I11)
-    ($P10) = rx976_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx976_pos, "")
-    rx976_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_981_done
-  rxcap_981_fail:
-    goto rx976_fail
-  rxcap_981_done:
-  # rx subrule "O" subtype=capture negate=
-    rx976_cur."!cursor_pos"(rx976_pos)
-    $P10 = rx976_cur."O"("%autoincrement, :pirop<inc>")
-    unless $P10, rx976_fail
-    rx976_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx976_pos = $P10."pos"()
+.sub "semilist"  :subid("236_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 4
+    .local string rx979_tgt
+    .local int rx979_pos
+    .local int rx979_off
+    .local int rx979_eos
+    .local int rx979_rep
+    .local pmc rx979_cur
+    (rx979_cur, rx979_pos, rx979_tgt) = self."!cursor_start"()
+    rx979_cur."!cursor_debug"("START ", "semilist")
+    .lex unicode:"$\x{a2}", rx979_cur
+    .local pmc match
+    .lex "$/", match
+    length rx979_eos, rx979_tgt
+    gt rx979_pos, rx979_eos, rx979_done
+    set rx979_off, 0
+    lt rx979_pos, 2, rx979_start
+    sub rx979_off, rx979_pos, 1
+    substr rx979_tgt, rx979_tgt, rx979_off
+  rx979_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan983_done
+    goto rxscan983_scan
+  rxscan983_loop:
+    ($P10) = rx979_cur."from"()
+    inc $P10
+    set rx979_pos, $P10
+    ge rx979_pos, rx979_eos, rxscan983_done
+  rxscan983_scan:
+    set_addr $I10, rxscan983_loop
+    rx979_cur."!mark_push"(0, rx979_pos, $I10)
+  rxscan983_done:
+.annotate 'line', 442
+  # rx subrule "ws" subtype=method negate=
+    rx979_cur."!cursor_pos"(rx979_pos)
+    $P10 = rx979_cur."ws"()
+    unless $P10, rx979_fail
+    rx979_pos = $P10."pos"()
+  # rx subrule "statement" subtype=capture negate=
+    rx979_cur."!cursor_pos"(rx979_pos)
+    $P10 = rx979_cur."statement"()
+    unless $P10, rx979_fail
+    rx979_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("statement")
+    rx979_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx979_cur."!cursor_pos"(rx979_pos)
+    $P10 = rx979_cur."ws"()
+    unless $P10, rx979_fail
+    rx979_pos = $P10."pos"()
   # rx pass
-    rx976_cur."!cursor_pass"(rx976_pos, "prefix:sym<++>")
-    rx976_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx976_pos)
-    .return (rx976_cur)
-  rx976_fail:
-.annotate 'line', 431
-    (rx976_rep, rx976_pos, $I10, $P10) = rx976_cur."!mark_fail"(0)
-    lt rx976_pos, -1, rx976_done
-    eq rx976_pos, -1, rx976_fail
+    rx979_cur."!cursor_pass"(rx979_pos, "semilist")
+    rx979_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx979_pos)
+    .return (rx979_cur)
+  rx979_fail:
+.annotate 'line', 4
+    (rx979_rep, rx979_pos, $I10, $P10) = rx979_cur."!mark_fail"(0)
+    lt rx979_pos, -1, rx979_done
+    eq rx979_pos, -1, rx979_fail
     jump $I10
-  rx976_done:
-    rx976_cur."!cursor_fail"()
-    rx976_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
-    .return (rx976_cur)
+  rx979_done:
+    rx979_cur."!cursor_fail"()
+    rx979_cur."!cursor_debug"("FAIL  ", "semilist")
+    .return (rx979_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<++>"  :subid("242_1274022894.43745") :method
-.annotate 'line', 431
-    $P978 = self."!PREFIX__!subrule"("O", "++")
-    new $P979, "ResizablePMCArray"
-    push $P979, $P978
-    .return ($P979)
+.sub "!PREFIX__semilist"  :subid("237_1275811487.95429") :method
+.annotate 'line', 4
+    $P981 = self."!PREFIX__!subrule"("ws", "")
+    new $P982, "ResizablePMCArray"
+    push $P982, $P981
+    .return ($P982)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<-->"  :subid("243_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx983_tgt
-    .local int rx983_pos
-    .local int rx983_off
-    .local int rx983_eos
-    .local int rx983_rep
-    .local pmc rx983_cur
-    (rx983_cur, rx983_pos, rx983_tgt) = self."!cursor_start"()
-    rx983_cur."!cursor_debug"("START ", "prefix:sym<-->")
-    .lex unicode:"$\x{a2}", rx983_cur
-    .local pmc match
-    .lex "$/", match
-    length rx983_eos, rx983_tgt
-    set rx983_off, 0
-    lt rx983_pos, 2, rx983_start
-    sub rx983_off, rx983_pos, 1
-    substr rx983_tgt, rx983_tgt, rx983_off
-  rx983_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan987_done
-    goto rxscan987_scan
-  rxscan987_loop:
-    ($P10) = rx983_cur."from"()
-    inc $P10
-    set rx983_pos, $P10
-    ge rx983_pos, rx983_eos, rxscan987_done
-  rxscan987_scan:
-    set_addr $I10, rxscan987_loop
-    rx983_cur."!mark_push"(0, rx983_pos, $I10)
-  rxscan987_done:
-.annotate 'line', 476
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_988_fail
-    rx983_cur."!mark_push"(0, rx983_pos, $I10)
-  # rx literal  "--"
-    add $I11, rx983_pos, 2
-    gt $I11, rx983_eos, rx983_fail
-    sub $I11, rx983_pos, rx983_off
-    substr $S10, rx983_tgt, $I11, 2
-    ne $S10, "--", rx983_fail
-    add rx983_pos, 2
-    set_addr $I10, rxcap_988_fail
-    ($I12, $I11) = rx983_cur."!mark_peek"($I10)
-    rx983_cur."!cursor_pos"($I11)
-    ($P10) = rx983_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx983_pos, "")
-    rx983_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_988_done
-  rxcap_988_fail:
-    goto rx983_fail
-  rxcap_988_done:
-  # rx subrule "O" subtype=capture negate=
-    rx983_cur."!cursor_pos"(rx983_pos)
-    $P10 = rx983_cur."O"("%autoincrement, :pirop<dec>")
-    unless $P10, rx983_fail
-    rx983_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx983_pos = $P10."pos"()
+.sub "infixish"  :subid("238_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx987_tgt
+    .local int rx987_pos
+    .local int rx987_off
+    .local int rx987_eos
+    .local int rx987_rep
+    .local pmc rx987_cur
+    (rx987_cur, rx987_pos, rx987_tgt) = self."!cursor_start"()
+    rx987_cur."!cursor_debug"("START ", "infixish")
+    .lex unicode:"$\x{a2}", rx987_cur
+    .local pmc match
+    .lex "$/", match
+    length rx987_eos, rx987_tgt
+    gt rx987_pos, rx987_eos, rx987_done
+    set rx987_off, 0
+    lt rx987_pos, 2, rx987_start
+    sub rx987_off, rx987_pos, 1
+    substr rx987_tgt, rx987_tgt, rx987_off
+  rx987_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan990_done
+    goto rxscan990_scan
+  rxscan990_loop:
+    ($P10) = rx987_cur."from"()
+    inc $P10
+    set rx987_pos, $P10
+    ge rx987_pos, rx987_eos, rxscan990_done
+  rxscan990_scan:
+    set_addr $I10, rxscan990_loop
+    rx987_cur."!mark_push"(0, rx987_pos, $I10)
+  rxscan990_done:
+.annotate 'line', 465
+  # rx subrule "infixstopper" subtype=zerowidth negate=1
+    rx987_cur."!cursor_pos"(rx987_pos)
+    $P10 = rx987_cur."infixstopper"()
+    if $P10, rx987_fail
+  # rx subrule "infix" subtype=capture negate=
+    rx987_cur."!cursor_pos"(rx987_pos)
+    $P10 = rx987_cur."infix"()
+    unless $P10, rx987_fail
+    rx987_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("OPER=infix")
+    rx987_pos = $P10."pos"()
   # rx pass
-    rx983_cur."!cursor_pass"(rx983_pos, "prefix:sym<-->")
-    rx983_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx983_pos)
-    .return (rx983_cur)
-  rx983_fail:
-.annotate 'line', 431
-    (rx983_rep, rx983_pos, $I10, $P10) = rx983_cur."!mark_fail"(0)
-    lt rx983_pos, -1, rx983_done
-    eq rx983_pos, -1, rx983_fail
+    rx987_cur."!cursor_pass"(rx987_pos, "infixish")
+    rx987_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx987_pos)
+    .return (rx987_cur)
+  rx987_fail:
+.annotate 'line', 446
+    (rx987_rep, rx987_pos, $I10, $P10) = rx987_cur."!mark_fail"(0)
+    lt rx987_pos, -1, rx987_done
+    eq rx987_pos, -1, rx987_fail
     jump $I10
-  rx983_done:
-    rx983_cur."!cursor_fail"()
-    rx983_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
-    .return (rx983_cur)
+  rx987_done:
+    rx987_cur."!cursor_fail"()
+    rx987_cur."!cursor_debug"("FAIL  ", "infixish")
+    .return (rx987_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<-->"  :subid("244_1274022894.43745") :method
-.annotate 'line', 431
-    $P985 = self."!PREFIX__!subrule"("O", "--")
-    new $P986, "ResizablePMCArray"
-    push $P986, $P985
-    .return ($P986)
+.sub "!PREFIX__infixish"  :subid("239_1275811487.95429") :method
+.annotate 'line', 446
+    new $P989, "ResizablePMCArray"
+    push $P989, ""
+    .return ($P989)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<++>"  :subid("245_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx990_tgt
-    .local int rx990_pos
-    .local int rx990_off
-    .local int rx990_eos
-    .local int rx990_rep
-    .local pmc rx990_cur
-    (rx990_cur, rx990_pos, rx990_tgt) = self."!cursor_start"()
-    rx990_cur."!cursor_debug"("START ", "postfix:sym<++>")
-    .lex unicode:"$\x{a2}", rx990_cur
-    .local pmc match
-    .lex "$/", match
-    length rx990_eos, rx990_tgt
-    set rx990_off, 0
-    lt rx990_pos, 2, rx990_start
-    sub rx990_off, rx990_pos, 1
-    substr rx990_tgt, rx990_tgt, rx990_off
-  rx990_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan994_done
-    goto rxscan994_scan
-  rxscan994_loop:
-    ($P10) = rx990_cur."from"()
-    inc $P10
-    set rx990_pos, $P10
-    ge rx990_pos, rx990_eos, rxscan994_done
-  rxscan994_scan:
-    set_addr $I10, rxscan994_loop
-    rx990_cur."!mark_push"(0, rx990_pos, $I10)
-  rxscan994_done:
-.annotate 'line', 479
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_995_fail
-    rx990_cur."!mark_push"(0, rx990_pos, $I10)
-  # rx literal  "++"
-    add $I11, rx990_pos, 2
-    gt $I11, rx990_eos, rx990_fail
-    sub $I11, rx990_pos, rx990_off
-    substr $S10, rx990_tgt, $I11, 2
-    ne $S10, "++", rx990_fail
-    add rx990_pos, 2
-    set_addr $I10, rxcap_995_fail
-    ($I12, $I11) = rx990_cur."!mark_peek"($I10)
-    rx990_cur."!cursor_pos"($I11)
-    ($P10) = rx990_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx990_pos, "")
-    rx990_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_995_done
-  rxcap_995_fail:
-    goto rx990_fail
-  rxcap_995_done:
-  # rx subrule "O" subtype=capture negate=
-    rx990_cur."!cursor_pos"(rx990_pos)
-    $P10 = rx990_cur."O"("%autoincrement")
-    unless $P10, rx990_fail
-    rx990_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx990_pos = $P10."pos"()
-  # rx pass
-    rx990_cur."!cursor_pass"(rx990_pos, "postfix:sym<++>")
-    rx990_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx990_pos)
-    .return (rx990_cur)
-  rx990_fail:
-.annotate 'line', 431
-    (rx990_rep, rx990_pos, $I10, $P10) = rx990_cur."!mark_fail"(0)
-    lt rx990_pos, -1, rx990_done
-    eq rx990_pos, -1, rx990_fail
+.sub "infixstopper"  :subid("240_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx992_tgt
+    .local int rx992_pos
+    .local int rx992_off
+    .local int rx992_eos
+    .local int rx992_rep
+    .local pmc rx992_cur
+    (rx992_cur, rx992_pos, rx992_tgt) = self."!cursor_start"()
+    rx992_cur."!cursor_debug"("START ", "infixstopper")
+    .lex unicode:"$\x{a2}", rx992_cur
+    .local pmc match
+    .lex "$/", match
+    length rx992_eos, rx992_tgt
+    gt rx992_pos, rx992_eos, rx992_done
+    set rx992_off, 0
+    lt rx992_pos, 2, rx992_start
+    sub rx992_off, rx992_pos, 1
+    substr rx992_tgt, rx992_tgt, rx992_off
+  rx992_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan995_done
+    goto rxscan995_scan
+  rxscan995_loop:
+    ($P10) = rx992_cur."from"()
+    inc $P10
+    set rx992_pos, $P10
+    ge rx992_pos, rx992_eos, rxscan995_done
+  rxscan995_scan:
+    set_addr $I10, rxscan995_loop
+    rx992_cur."!mark_push"(0, rx992_pos, $I10)
+  rxscan995_done:
+.annotate 'line', 466
+  # rx subrule "lambda" subtype=zerowidth negate=
+    rx992_cur."!cursor_pos"(rx992_pos)
+    $P10 = rx992_cur."lambda"()
+    unless $P10, rx992_fail
+  # rx pass
+    rx992_cur."!cursor_pass"(rx992_pos, "infixstopper")
+    rx992_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx992_pos)
+    .return (rx992_cur)
+  rx992_fail:
+.annotate 'line', 446
+    (rx992_rep, rx992_pos, $I10, $P10) = rx992_cur."!mark_fail"(0)
+    lt rx992_pos, -1, rx992_done
+    eq rx992_pos, -1, rx992_fail
     jump $I10
-  rx990_done:
-    rx990_cur."!cursor_fail"()
-    rx990_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
-    .return (rx990_cur)
+  rx992_done:
+    rx992_cur."!cursor_fail"()
+    rx992_cur."!cursor_debug"("FAIL  ", "infixstopper")
+    .return (rx992_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<++>"  :subid("246_1274022894.43745") :method
-.annotate 'line', 431
-    $P992 = self."!PREFIX__!subrule"("O", "++")
-    new $P993, "ResizablePMCArray"
-    push $P993, $P992
-    .return ($P993)
+.sub "!PREFIX__infixstopper"  :subid("241_1275811487.95429") :method
+.annotate 'line', 446
+    new $P994, "ResizablePMCArray"
+    push $P994, ""
+    .return ($P994)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<-->"  :subid("247_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
+.sub "postcircumfix:sym<[ ]>"  :subid("242_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
     .local string rx997_tgt
     .local int rx997_pos
     .local int rx997_off
@@ -12085,11 +11941,12 @@
     .local int rx997_rep
     .local pmc rx997_cur
     (rx997_cur, rx997_pos, rx997_tgt) = self."!cursor_start"()
-    rx997_cur."!cursor_debug"("START ", "postfix:sym<-->")
+    rx997_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
     .lex unicode:"$\x{a2}", rx997_cur
     .local pmc match
     .lex "$/", match
     length rx997_eos, rx997_tgt
+    gt rx997_pos, rx997_eos, rx997_done
     set rx997_off, 0
     lt rx997_pos, 2, rx997_start
     sub rx997_off, rx997_pos, 1
@@ -12107,57 +11964,64 @@
     set_addr $I10, rxscan1001_loop
     rx997_cur."!mark_push"(0, rx997_pos, $I10)
   rxscan1001_done:
-.annotate 'line', 480
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1002_fail
-    rx997_cur."!mark_push"(0, rx997_pos, $I10)
-  # rx literal  "--"
-    add $I11, rx997_pos, 2
+.annotate 'line', 469
+  # rx literal  "["
+    add $I11, rx997_pos, 1
     gt $I11, rx997_eos, rx997_fail
     sub $I11, rx997_pos, rx997_off
-    substr $S10, rx997_tgt, $I11, 2
-    ne $S10, "--", rx997_fail
-    add rx997_pos, 2
-    set_addr $I10, rxcap_1002_fail
-    ($I12, $I11) = rx997_cur."!mark_peek"($I10)
-    rx997_cur."!cursor_pos"($I11)
-    ($P10) = rx997_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx997_pos, "")
-    rx997_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1002_done
-  rxcap_1002_fail:
-    goto rx997_fail
-  rxcap_1002_done:
-  # rx subrule "O" subtype=capture negate=
+    substr $S10, rx997_tgt, $I11, 1
+    ne $S10, "[", rx997_fail
+    add rx997_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx997_cur."!cursor_pos"(rx997_pos)
+    $P10 = rx997_cur."ws"()
+    unless $P10, rx997_fail
+    rx997_pos = $P10."pos"()
+  # rx subrule "EXPR" subtype=capture negate=
     rx997_cur."!cursor_pos"(rx997_pos)
-    $P10 = rx997_cur."O"("%autoincrement")
+    $P10 = rx997_cur."EXPR"()
     unless $P10, rx997_fail
     rx997_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
+    $P10."!cursor_names"("EXPR")
     rx997_pos = $P10."pos"()
-  # rx pass
-    rx997_cur."!cursor_pass"(rx997_pos, "postfix:sym<-->")
-    rx997_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx997_pos)
-    .return (rx997_cur)
-  rx997_fail:
-.annotate 'line', 431
+  # rx literal  "]"
+    add $I11, rx997_pos, 1
+    gt $I11, rx997_eos, rx997_fail
+    sub $I11, rx997_pos, rx997_off
+    substr $S10, rx997_tgt, $I11, 1
+    ne $S10, "]", rx997_fail
+    add rx997_pos, 1
+.annotate 'line', 470
+  # rx subrule "O" subtype=capture negate=
+    rx997_cur."!cursor_pos"(rx997_pos)
+    $P10 = rx997_cur."O"("%methodop")
+    unless $P10, rx997_fail
+    rx997_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx997_pos = $P10."pos"()
+.annotate 'line', 468
+  # rx pass
+    rx997_cur."!cursor_pass"(rx997_pos, "postcircumfix:sym<[ ]>")
+    rx997_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx997_pos)
+    .return (rx997_cur)
+  rx997_fail:
+.annotate 'line', 446
     (rx997_rep, rx997_pos, $I10, $P10) = rx997_cur."!mark_fail"(0)
     lt rx997_pos, -1, rx997_done
     eq rx997_pos, -1, rx997_fail
     jump $I10
   rx997_done:
     rx997_cur."!cursor_fail"()
-    rx997_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
+    rx997_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
     .return (rx997_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<-->"  :subid("248_1274022894.43745") :method
-.annotate 'line', 431
-    $P999 = self."!PREFIX__!subrule"("O", "--")
+.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("243_1275811487.95429") :method
+.annotate 'line', 446
+    $P999 = self."!PREFIX__!subrule"("ws", "[")
     new $P1000, "ResizablePMCArray"
     push $P1000, $P999
     .return ($P1000)
@@ -12165,4607 +12029,5769 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<**>"  :subid("249_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1004_tgt
-    .local int rx1004_pos
-    .local int rx1004_off
-    .local int rx1004_eos
-    .local int rx1004_rep
-    .local pmc rx1004_cur
-    (rx1004_cur, rx1004_pos, rx1004_tgt) = self."!cursor_start"()
-    rx1004_cur."!cursor_debug"("START ", "infix:sym<**>")
-    .lex unicode:"$\x{a2}", rx1004_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1004_eos, rx1004_tgt
-    set rx1004_off, 0
-    lt rx1004_pos, 2, rx1004_start
-    sub rx1004_off, rx1004_pos, 1
-    substr rx1004_tgt, rx1004_tgt, rx1004_off
-  rx1004_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1008_done
-    goto rxscan1008_scan
-  rxscan1008_loop:
-    ($P10) = rx1004_cur."from"()
-    inc $P10
-    set rx1004_pos, $P10
-    ge rx1004_pos, rx1004_eos, rxscan1008_done
-  rxscan1008_scan:
-    set_addr $I10, rxscan1008_loop
-    rx1004_cur."!mark_push"(0, rx1004_pos, $I10)
-  rxscan1008_done:
-.annotate 'line', 482
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1009_fail
-    rx1004_cur."!mark_push"(0, rx1004_pos, $I10)
-  # rx literal  "**"
-    add $I11, rx1004_pos, 2
-    gt $I11, rx1004_eos, rx1004_fail
-    sub $I11, rx1004_pos, rx1004_off
-    substr $S10, rx1004_tgt, $I11, 2
-    ne $S10, "**", rx1004_fail
-    add rx1004_pos, 2
-    set_addr $I10, rxcap_1009_fail
-    ($I12, $I11) = rx1004_cur."!mark_peek"($I10)
-    rx1004_cur."!cursor_pos"($I11)
-    ($P10) = rx1004_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1004_pos, "")
-    rx1004_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1009_done
-  rxcap_1009_fail:
-    goto rx1004_fail
-  rxcap_1009_done:
+.sub "postcircumfix:sym<{ }>"  :subid("244_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1003_tgt
+    .local int rx1003_pos
+    .local int rx1003_off
+    .local int rx1003_eos
+    .local int rx1003_rep
+    .local pmc rx1003_cur
+    (rx1003_cur, rx1003_pos, rx1003_tgt) = self."!cursor_start"()
+    rx1003_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1003_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1003_eos, rx1003_tgt
+    gt rx1003_pos, rx1003_eos, rx1003_done
+    set rx1003_off, 0
+    lt rx1003_pos, 2, rx1003_start
+    sub rx1003_off, rx1003_pos, 1
+    substr rx1003_tgt, rx1003_tgt, rx1003_off
+  rx1003_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1007_done
+    goto rxscan1007_scan
+  rxscan1007_loop:
+    ($P10) = rx1003_cur."from"()
+    inc $P10
+    set rx1003_pos, $P10
+    ge rx1003_pos, rx1003_eos, rxscan1007_done
+  rxscan1007_scan:
+    set_addr $I10, rxscan1007_loop
+    rx1003_cur."!mark_push"(0, rx1003_pos, $I10)
+  rxscan1007_done:
+.annotate 'line', 474
+  # rx literal  "{"
+    add $I11, rx1003_pos, 1
+    gt $I11, rx1003_eos, rx1003_fail
+    sub $I11, rx1003_pos, rx1003_off
+    substr $S10, rx1003_tgt, $I11, 1
+    ne $S10, "{", rx1003_fail
+    add rx1003_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx1003_cur."!cursor_pos"(rx1003_pos)
+    $P10 = rx1003_cur."ws"()
+    unless $P10, rx1003_fail
+    rx1003_pos = $P10."pos"()
+  # rx subrule "EXPR" subtype=capture negate=
+    rx1003_cur."!cursor_pos"(rx1003_pos)
+    $P10 = rx1003_cur."EXPR"()
+    unless $P10, rx1003_fail
+    rx1003_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx1003_pos = $P10."pos"()
+  # rx literal  "}"
+    add $I11, rx1003_pos, 1
+    gt $I11, rx1003_eos, rx1003_fail
+    sub $I11, rx1003_pos, rx1003_off
+    substr $S10, rx1003_tgt, $I11, 1
+    ne $S10, "}", rx1003_fail
+    add rx1003_pos, 1
+.annotate 'line', 475
   # rx subrule "O" subtype=capture negate=
-    rx1004_cur."!cursor_pos"(rx1004_pos)
-    $P10 = rx1004_cur."O"("%exponentiation, :pirop<pow>")
-    unless $P10, rx1004_fail
-    rx1004_cur."!mark_push"(0, -1, 0, $P10)
+    rx1003_cur."!cursor_pos"(rx1003_pos)
+    $P10 = rx1003_cur."O"("%methodop")
+    unless $P10, rx1003_fail
+    rx1003_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1004_pos = $P10."pos"()
+    rx1003_pos = $P10."pos"()
+.annotate 'line', 473
   # rx pass
-    rx1004_cur."!cursor_pass"(rx1004_pos, "infix:sym<**>")
-    rx1004_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx1004_pos)
-    .return (rx1004_cur)
-  rx1004_fail:
-.annotate 'line', 431
-    (rx1004_rep, rx1004_pos, $I10, $P10) = rx1004_cur."!mark_fail"(0)
-    lt rx1004_pos, -1, rx1004_done
-    eq rx1004_pos, -1, rx1004_fail
+    rx1003_cur."!cursor_pass"(rx1003_pos, "postcircumfix:sym<{ }>")
+    rx1003_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx1003_pos)
+    .return (rx1003_cur)
+  rx1003_fail:
+.annotate 'line', 446
+    (rx1003_rep, rx1003_pos, $I10, $P10) = rx1003_cur."!mark_fail"(0)
+    lt rx1003_pos, -1, rx1003_done
+    eq rx1003_pos, -1, rx1003_fail
     jump $I10
-  rx1004_done:
-    rx1004_cur."!cursor_fail"()
-    rx1004_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
-    .return (rx1004_cur)
+  rx1003_done:
+    rx1003_cur."!cursor_fail"()
+    rx1003_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
+    .return (rx1003_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<**>"  :subid("250_1274022894.43745") :method
-.annotate 'line', 431
-    $P1006 = self."!PREFIX__!subrule"("O", "**")
-    new $P1007, "ResizablePMCArray"
-    push $P1007, $P1006
-    .return ($P1007)
+.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("245_1275811487.95429") :method
+.annotate 'line', 446
+    $P1005 = self."!PREFIX__!subrule"("ws", "{")
+    new $P1006, "ResizablePMCArray"
+    push $P1006, $P1005
+    .return ($P1006)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<+>"  :subid("251_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1011_tgt
-    .local int rx1011_pos
-    .local int rx1011_off
-    .local int rx1011_eos
-    .local int rx1011_rep
-    .local pmc rx1011_cur
-    (rx1011_cur, rx1011_pos, rx1011_tgt) = self."!cursor_start"()
-    rx1011_cur."!cursor_debug"("START ", "prefix:sym<+>")
-    .lex unicode:"$\x{a2}", rx1011_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1011_eos, rx1011_tgt
-    set rx1011_off, 0
-    lt rx1011_pos, 2, rx1011_start
-    sub rx1011_off, rx1011_pos, 1
-    substr rx1011_tgt, rx1011_tgt, rx1011_off
-  rx1011_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1015_done
-    goto rxscan1015_scan
-  rxscan1015_loop:
-    ($P10) = rx1011_cur."from"()
-    inc $P10
-    set rx1011_pos, $P10
-    ge rx1011_pos, rx1011_eos, rxscan1015_done
-  rxscan1015_scan:
-    set_addr $I10, rxscan1015_loop
-    rx1011_cur."!mark_push"(0, rx1011_pos, $I10)
-  rxscan1015_done:
-.annotate 'line', 484
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1016_fail
-    rx1011_cur."!mark_push"(0, rx1011_pos, $I10)
-  # rx literal  "+"
-    add $I11, rx1011_pos, 1
-    gt $I11, rx1011_eos, rx1011_fail
-    sub $I11, rx1011_pos, rx1011_off
-    substr $S10, rx1011_tgt, $I11, 1
-    ne $S10, "+", rx1011_fail
-    add rx1011_pos, 1
-    set_addr $I10, rxcap_1016_fail
-    ($I12, $I11) = rx1011_cur."!mark_peek"($I10)
-    rx1011_cur."!cursor_pos"($I11)
-    ($P10) = rx1011_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1011_pos, "")
-    rx1011_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1016_done
-  rxcap_1016_fail:
-    goto rx1011_fail
-  rxcap_1016_done:
+.sub "postcircumfix:sym<ang>"  :subid("246_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1009_tgt
+    .local int rx1009_pos
+    .local int rx1009_off
+    .local int rx1009_eos
+    .local int rx1009_rep
+    .local pmc rx1009_cur
+    (rx1009_cur, rx1009_pos, rx1009_tgt) = self."!cursor_start"()
+    rx1009_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
+    .lex unicode:"$\x{a2}", rx1009_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1009_eos, rx1009_tgt
+    gt rx1009_pos, rx1009_eos, rx1009_done
+    set rx1009_off, 0
+    lt rx1009_pos, 2, rx1009_start
+    sub rx1009_off, rx1009_pos, 1
+    substr rx1009_tgt, rx1009_tgt, rx1009_off
+  rx1009_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1012_done
+    goto rxscan1012_scan
+  rxscan1012_loop:
+    ($P10) = rx1009_cur."from"()
+    inc $P10
+    set rx1009_pos, $P10
+    ge rx1009_pos, rx1009_eos, rxscan1012_done
+  rxscan1012_scan:
+    set_addr $I10, rxscan1012_loop
+    rx1009_cur."!mark_push"(0, rx1009_pos, $I10)
+  rxscan1012_done:
+.annotate 'line', 479
+  # rx enumcharlist negate=0 zerowidth
+    ge rx1009_pos, rx1009_eos, rx1009_fail
+    sub $I10, rx1009_pos, rx1009_off
+    substr $S10, rx1009_tgt, $I10, 1
+    index $I11, "<", $S10
+    lt $I11, 0, rx1009_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx1009_cur."!cursor_pos"(rx1009_pos)
+    $P10 = rx1009_cur."quote_EXPR"(":q")
+    unless $P10, rx1009_fail
+    rx1009_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx1009_pos = $P10."pos"()
+.annotate 'line', 480
   # rx subrule "O" subtype=capture negate=
-    rx1011_cur."!cursor_pos"(rx1011_pos)
-    $P10 = rx1011_cur."O"("%symbolic_unary, :pirop<set N*>")
-    unless $P10, rx1011_fail
-    rx1011_cur."!mark_push"(0, -1, 0, $P10)
+    rx1009_cur."!cursor_pos"(rx1009_pos)
+    $P10 = rx1009_cur."O"("%methodop")
+    unless $P10, rx1009_fail
+    rx1009_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1011_pos = $P10."pos"()
+    rx1009_pos = $P10."pos"()
+.annotate 'line', 478
   # rx pass
-    rx1011_cur."!cursor_pass"(rx1011_pos, "prefix:sym<+>")
-    rx1011_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx1011_pos)
-    .return (rx1011_cur)
-  rx1011_fail:
-.annotate 'line', 431
-    (rx1011_rep, rx1011_pos, $I10, $P10) = rx1011_cur."!mark_fail"(0)
-    lt rx1011_pos, -1, rx1011_done
-    eq rx1011_pos, -1, rx1011_fail
+    rx1009_cur."!cursor_pass"(rx1009_pos, "postcircumfix:sym<ang>")
+    rx1009_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx1009_pos)
+    .return (rx1009_cur)
+  rx1009_fail:
+.annotate 'line', 446
+    (rx1009_rep, rx1009_pos, $I10, $P10) = rx1009_cur."!mark_fail"(0)
+    lt rx1009_pos, -1, rx1009_done
+    eq rx1009_pos, -1, rx1009_fail
     jump $I10
-  rx1011_done:
-    rx1011_cur."!cursor_fail"()
-    rx1011_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
-    .return (rx1011_cur)
+  rx1009_done:
+    rx1009_cur."!cursor_fail"()
+    rx1009_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
+    .return (rx1009_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<+>"  :subid("252_1274022894.43745") :method
-.annotate 'line', 431
-    $P1013 = self."!PREFIX__!subrule"("O", "+")
-    new $P1014, "ResizablePMCArray"
-    push $P1014, $P1013
-    .return ($P1014)
+.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("247_1275811487.95429") :method
+.annotate 'line', 446
+    new $P1011, "ResizablePMCArray"
+    push $P1011, "<"
+    .return ($P1011)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<~>"  :subid("253_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1018_tgt
-    .local int rx1018_pos
-    .local int rx1018_off
-    .local int rx1018_eos
-    .local int rx1018_rep
-    .local pmc rx1018_cur
-    (rx1018_cur, rx1018_pos, rx1018_tgt) = self."!cursor_start"()
-    rx1018_cur."!cursor_debug"("START ", "prefix:sym<~>")
-    .lex unicode:"$\x{a2}", rx1018_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1018_eos, rx1018_tgt
-    set rx1018_off, 0
-    lt rx1018_pos, 2, rx1018_start
-    sub rx1018_off, rx1018_pos, 1
-    substr rx1018_tgt, rx1018_tgt, rx1018_off
-  rx1018_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1022_done
-    goto rxscan1022_scan
-  rxscan1022_loop:
-    ($P10) = rx1018_cur."from"()
-    inc $P10
-    set rx1018_pos, $P10
-    ge rx1018_pos, rx1018_eos, rxscan1022_done
-  rxscan1022_scan:
-    set_addr $I10, rxscan1022_loop
-    rx1018_cur."!mark_push"(0, rx1018_pos, $I10)
-  rxscan1022_done:
+.sub "postcircumfix:sym<( )>"  :subid("248_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1014_tgt
+    .local int rx1014_pos
+    .local int rx1014_off
+    .local int rx1014_eos
+    .local int rx1014_rep
+    .local pmc rx1014_cur
+    (rx1014_cur, rx1014_pos, rx1014_tgt) = self."!cursor_start"()
+    rx1014_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
+    .lex unicode:"$\x{a2}", rx1014_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1014_eos, rx1014_tgt
+    gt rx1014_pos, rx1014_eos, rx1014_done
+    set rx1014_off, 0
+    lt rx1014_pos, 2, rx1014_start
+    sub rx1014_off, rx1014_pos, 1
+    substr rx1014_tgt, rx1014_tgt, rx1014_off
+  rx1014_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1018_done
+    goto rxscan1018_scan
+  rxscan1018_loop:
+    ($P10) = rx1014_cur."from"()
+    inc $P10
+    set rx1014_pos, $P10
+    ge rx1014_pos, rx1014_eos, rxscan1018_done
+  rxscan1018_scan:
+    set_addr $I10, rxscan1018_loop
+    rx1014_cur."!mark_push"(0, rx1014_pos, $I10)
+  rxscan1018_done:
+.annotate 'line', 484
+  # rx literal  "("
+    add $I11, rx1014_pos, 1
+    gt $I11, rx1014_eos, rx1014_fail
+    sub $I11, rx1014_pos, rx1014_off
+    substr $S10, rx1014_tgt, $I11, 1
+    ne $S10, "(", rx1014_fail
+    add rx1014_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx1014_cur."!cursor_pos"(rx1014_pos)
+    $P10 = rx1014_cur."ws"()
+    unless $P10, rx1014_fail
+    rx1014_pos = $P10."pos"()
+  # rx subrule "arglist" subtype=capture negate=
+    rx1014_cur."!cursor_pos"(rx1014_pos)
+    $P10 = rx1014_cur."arglist"()
+    unless $P10, rx1014_fail
+    rx1014_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx1014_pos = $P10."pos"()
+  # rx literal  ")"
+    add $I11, rx1014_pos, 1
+    gt $I11, rx1014_eos, rx1014_fail
+    sub $I11, rx1014_pos, rx1014_off
+    substr $S10, rx1014_tgt, $I11, 1
+    ne $S10, ")", rx1014_fail
+    add rx1014_pos, 1
 .annotate 'line', 485
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1023_fail
-    rx1018_cur."!mark_push"(0, rx1018_pos, $I10)
-  # rx literal  "~"
-    add $I11, rx1018_pos, 1
-    gt $I11, rx1018_eos, rx1018_fail
-    sub $I11, rx1018_pos, rx1018_off
-    substr $S10, rx1018_tgt, $I11, 1
-    ne $S10, "~", rx1018_fail
-    add rx1018_pos, 1
-    set_addr $I10, rxcap_1023_fail
-    ($I12, $I11) = rx1018_cur."!mark_peek"($I10)
-    rx1018_cur."!cursor_pos"($I11)
-    ($P10) = rx1018_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1018_pos, "")
-    rx1018_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1023_done
-  rxcap_1023_fail:
-    goto rx1018_fail
-  rxcap_1023_done:
   # rx subrule "O" subtype=capture negate=
-    rx1018_cur."!cursor_pos"(rx1018_pos)
-    $P10 = rx1018_cur."O"("%symbolic_unary, :pirop<set S*>")
-    unless $P10, rx1018_fail
-    rx1018_cur."!mark_push"(0, -1, 0, $P10)
+    rx1014_cur."!cursor_pos"(rx1014_pos)
+    $P10 = rx1014_cur."O"("%methodop")
+    unless $P10, rx1014_fail
+    rx1014_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1018_pos = $P10."pos"()
+    rx1014_pos = $P10."pos"()
+.annotate 'line', 483
   # rx pass
-    rx1018_cur."!cursor_pass"(rx1018_pos, "prefix:sym<~>")
-    rx1018_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx1018_pos)
-    .return (rx1018_cur)
-  rx1018_fail:
-.annotate 'line', 431
-    (rx1018_rep, rx1018_pos, $I10, $P10) = rx1018_cur."!mark_fail"(0)
-    lt rx1018_pos, -1, rx1018_done
-    eq rx1018_pos, -1, rx1018_fail
+    rx1014_cur."!cursor_pass"(rx1014_pos, "postcircumfix:sym<( )>")
+    rx1014_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx1014_pos)
+    .return (rx1014_cur)
+  rx1014_fail:
+.annotate 'line', 446
+    (rx1014_rep, rx1014_pos, $I10, $P10) = rx1014_cur."!mark_fail"(0)
+    lt rx1014_pos, -1, rx1014_done
+    eq rx1014_pos, -1, rx1014_fail
     jump $I10
-  rx1018_done:
-    rx1018_cur."!cursor_fail"()
-    rx1018_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
-    .return (rx1018_cur)
+  rx1014_done:
+    rx1014_cur."!cursor_fail"()
+    rx1014_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
+    .return (rx1014_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<~>"  :subid("254_1274022894.43745") :method
-.annotate 'line', 431
-    $P1020 = self."!PREFIX__!subrule"("O", "~")
-    new $P1021, "ResizablePMCArray"
-    push $P1021, $P1020
-    .return ($P1021)
+.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("249_1275811487.95429") :method
+.annotate 'line', 446
+    $P1016 = self."!PREFIX__!subrule"("ws", "(")
+    new $P1017, "ResizablePMCArray"
+    push $P1017, $P1016
+    .return ($P1017)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<->"  :subid("255_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1025_tgt
-    .local int rx1025_pos
-    .local int rx1025_off
-    .local int rx1025_eos
-    .local int rx1025_rep
-    .local pmc rx1025_cur
-    (rx1025_cur, rx1025_pos, rx1025_tgt) = self."!cursor_start"()
-    rx1025_cur."!cursor_debug"("START ", "prefix:sym<->")
-    .lex unicode:"$\x{a2}", rx1025_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1025_eos, rx1025_tgt
-    set rx1025_off, 0
-    lt rx1025_pos, 2, rx1025_start
-    sub rx1025_off, rx1025_pos, 1
-    substr rx1025_tgt, rx1025_tgt, rx1025_off
-  rx1025_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1028_done
-    goto rxscan1028_scan
-  rxscan1028_loop:
-    ($P10) = rx1025_cur."from"()
-    inc $P10
-    set rx1025_pos, $P10
-    ge rx1025_pos, rx1025_eos, rxscan1028_done
-  rxscan1028_scan:
-    set_addr $I10, rxscan1028_loop
-    rx1025_cur."!mark_push"(0, rx1025_pos, $I10)
-  rxscan1028_done:
-.annotate 'line', 486
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1029_fail
-    rx1025_cur."!mark_push"(0, rx1025_pos, $I10)
-  # rx literal  "-"
-    add $I11, rx1025_pos, 1
-    gt $I11, rx1025_eos, rx1025_fail
-    sub $I11, rx1025_pos, rx1025_off
-    substr $S10, rx1025_tgt, $I11, 1
-    ne $S10, "-", rx1025_fail
-    add rx1025_pos, 1
-    set_addr $I10, rxcap_1029_fail
-    ($I12, $I11) = rx1025_cur."!mark_peek"($I10)
-    rx1025_cur."!cursor_pos"($I11)
-    ($P10) = rx1025_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1025_pos, "")
-    rx1025_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1029_done
-  rxcap_1029_fail:
-    goto rx1025_fail
-  rxcap_1029_done:
-  # rx enumcharlist negate=1 zerowidth
-    ge rx1025_pos, rx1025_eos, rx1025_fail
-    sub $I10, rx1025_pos, rx1025_off
-    substr $S10, rx1025_tgt, $I10, 1
-    index $I11, ">", $S10
-    ge $I11, 0, rx1025_fail
-  # rx subrule "number" subtype=zerowidth negate=1
-    rx1025_cur."!cursor_pos"(rx1025_pos)
-    $P10 = rx1025_cur."number"()
-    if $P10, rx1025_fail
+.sub "postfix:sym<.>"  :subid("250_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1020_tgt
+    .local int rx1020_pos
+    .local int rx1020_off
+    .local int rx1020_eos
+    .local int rx1020_rep
+    .local pmc rx1020_cur
+    (rx1020_cur, rx1020_pos, rx1020_tgt) = self."!cursor_start"()
+    rx1020_cur."!cursor_debug"("START ", "postfix:sym<.>")
+    .lex unicode:"$\x{a2}", rx1020_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1020_eos, rx1020_tgt
+    gt rx1020_pos, rx1020_eos, rx1020_done
+    set rx1020_off, 0
+    lt rx1020_pos, 2, rx1020_start
+    sub rx1020_off, rx1020_pos, 1
+    substr rx1020_tgt, rx1020_tgt, rx1020_off
+  rx1020_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1024_done
+    goto rxscan1024_scan
+  rxscan1024_loop:
+    ($P10) = rx1020_cur."from"()
+    inc $P10
+    set rx1020_pos, $P10
+    ge rx1020_pos, rx1020_eos, rxscan1024_done
+  rxscan1024_scan:
+    set_addr $I10, rxscan1024_loop
+    rx1020_cur."!mark_push"(0, rx1020_pos, $I10)
+  rxscan1024_done:
+.annotate 'line', 488
+  # rx subrule "dotty" subtype=capture negate=
+    rx1020_cur."!cursor_pos"(rx1020_pos)
+    $P10 = rx1020_cur."dotty"()
+    unless $P10, rx1020_fail
+    rx1020_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("dotty")
+    rx1020_pos = $P10."pos"()
   # rx subrule "O" subtype=capture negate=
-    rx1025_cur."!cursor_pos"(rx1025_pos)
-    $P10 = rx1025_cur."O"("%symbolic_unary, :pirop<neg>")
-    unless $P10, rx1025_fail
-    rx1025_cur."!mark_push"(0, -1, 0, $P10)
+    rx1020_cur."!cursor_pos"(rx1020_pos)
+    $P10 = rx1020_cur."O"("%methodop")
+    unless $P10, rx1020_fail
+    rx1020_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1025_pos = $P10."pos"()
+    rx1020_pos = $P10."pos"()
   # rx pass
-    rx1025_cur."!cursor_pass"(rx1025_pos, "prefix:sym<->")
-    rx1025_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx1025_pos)
-    .return (rx1025_cur)
-  rx1025_fail:
-.annotate 'line', 431
-    (rx1025_rep, rx1025_pos, $I10, $P10) = rx1025_cur."!mark_fail"(0)
-    lt rx1025_pos, -1, rx1025_done
-    eq rx1025_pos, -1, rx1025_fail
+    rx1020_cur."!cursor_pass"(rx1020_pos, "postfix:sym<.>")
+    rx1020_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx1020_pos)
+    .return (rx1020_cur)
+  rx1020_fail:
+.annotate 'line', 446
+    (rx1020_rep, rx1020_pos, $I10, $P10) = rx1020_cur."!mark_fail"(0)
+    lt rx1020_pos, -1, rx1020_done
+    eq rx1020_pos, -1, rx1020_fail
     jump $I10
-  rx1025_done:
-    rx1025_cur."!cursor_fail"()
-    rx1025_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
-    .return (rx1025_cur)
+  rx1020_done:
+    rx1020_cur."!cursor_fail"()
+    rx1020_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
+    .return (rx1020_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<->"  :subid("256_1274022894.43745") :method
-.annotate 'line', 431
-    new $P1027, "ResizablePMCArray"
-    push $P1027, "-"
-    .return ($P1027)
+.sub "!PREFIX__postfix:sym<.>"  :subid("251_1275811487.95429") :method
+.annotate 'line', 446
+    $P1022 = self."!PREFIX__!subrule"("dotty", "")
+    new $P1023, "ResizablePMCArray"
+    push $P1023, $P1022
+    .return ($P1023)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<?>"  :subid("257_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1031_tgt
-    .local int rx1031_pos
-    .local int rx1031_off
-    .local int rx1031_eos
-    .local int rx1031_rep
-    .local pmc rx1031_cur
-    (rx1031_cur, rx1031_pos, rx1031_tgt) = self."!cursor_start"()
-    rx1031_cur."!cursor_debug"("START ", "prefix:sym<?>")
-    .lex unicode:"$\x{a2}", rx1031_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1031_eos, rx1031_tgt
-    set rx1031_off, 0
-    lt rx1031_pos, 2, rx1031_start
-    sub rx1031_off, rx1031_pos, 1
-    substr rx1031_tgt, rx1031_tgt, rx1031_off
-  rx1031_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1035_done
-    goto rxscan1035_scan
-  rxscan1035_loop:
-    ($P10) = rx1031_cur."from"()
-    inc $P10
-    set rx1031_pos, $P10
-    ge rx1031_pos, rx1031_eos, rxscan1035_done
-  rxscan1035_scan:
-    set_addr $I10, rxscan1035_loop
-    rx1031_cur."!mark_push"(0, rx1031_pos, $I10)
-  rxscan1035_done:
-.annotate 'line', 487
+.sub "prefix:sym<++>"  :subid("252_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1026_tgt
+    .local int rx1026_pos
+    .local int rx1026_off
+    .local int rx1026_eos
+    .local int rx1026_rep
+    .local pmc rx1026_cur
+    (rx1026_cur, rx1026_pos, rx1026_tgt) = self."!cursor_start"()
+    rx1026_cur."!cursor_debug"("START ", "prefix:sym<++>")
+    .lex unicode:"$\x{a2}", rx1026_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1026_eos, rx1026_tgt
+    gt rx1026_pos, rx1026_eos, rx1026_done
+    set rx1026_off, 0
+    lt rx1026_pos, 2, rx1026_start
+    sub rx1026_off, rx1026_pos, 1
+    substr rx1026_tgt, rx1026_tgt, rx1026_off
+  rx1026_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1030_done
+    goto rxscan1030_scan
+  rxscan1030_loop:
+    ($P10) = rx1026_cur."from"()
+    inc $P10
+    set rx1026_pos, $P10
+    ge rx1026_pos, rx1026_eos, rxscan1030_done
+  rxscan1030_scan:
+    set_addr $I10, rxscan1030_loop
+    rx1026_cur."!mark_push"(0, rx1026_pos, $I10)
+  rxscan1030_done:
+.annotate 'line', 490
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1036_fail
-    rx1031_cur."!mark_push"(0, rx1031_pos, $I10)
-  # rx literal  "?"
-    add $I11, rx1031_pos, 1
-    gt $I11, rx1031_eos, rx1031_fail
-    sub $I11, rx1031_pos, rx1031_off
-    substr $S10, rx1031_tgt, $I11, 1
-    ne $S10, "?", rx1031_fail
-    add rx1031_pos, 1
-    set_addr $I10, rxcap_1036_fail
-    ($I12, $I11) = rx1031_cur."!mark_peek"($I10)
-    rx1031_cur."!cursor_pos"($I11)
-    ($P10) = rx1031_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1031_pos, "")
-    rx1031_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1031_fail
+    rx1026_cur."!mark_push"(0, rx1026_pos, $I10)
+  # rx literal  "++"
+    add $I11, rx1026_pos, 2
+    gt $I11, rx1026_eos, rx1026_fail
+    sub $I11, rx1026_pos, rx1026_off
+    substr $S10, rx1026_tgt, $I11, 2
+    ne $S10, "++", rx1026_fail
+    add rx1026_pos, 2
+    set_addr $I10, rxcap_1031_fail
+    ($I12, $I11) = rx1026_cur."!mark_peek"($I10)
+    rx1026_cur."!cursor_pos"($I11)
+    ($P10) = rx1026_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1026_pos, "")
+    rx1026_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1036_done
-  rxcap_1036_fail:
-    goto rx1031_fail
-  rxcap_1036_done:
+    goto rxcap_1031_done
+  rxcap_1031_fail:
+    goto rx1026_fail
+  rxcap_1031_done:
   # rx subrule "O" subtype=capture negate=
-    rx1031_cur."!cursor_pos"(rx1031_pos)
-    $P10 = rx1031_cur."O"("%symbolic_unary, :pirop<istrue>")
-    unless $P10, rx1031_fail
-    rx1031_cur."!mark_push"(0, -1, 0, $P10)
+    rx1026_cur."!cursor_pos"(rx1026_pos)
+    $P10 = rx1026_cur."O"("%autoincrement, :pirop<inc>")
+    unless $P10, rx1026_fail
+    rx1026_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1031_pos = $P10."pos"()
+    rx1026_pos = $P10."pos"()
   # rx pass
-    rx1031_cur."!cursor_pass"(rx1031_pos, "prefix:sym<?>")
-    rx1031_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx1031_pos)
-    .return (rx1031_cur)
-  rx1031_fail:
-.annotate 'line', 431
-    (rx1031_rep, rx1031_pos, $I10, $P10) = rx1031_cur."!mark_fail"(0)
-    lt rx1031_pos, -1, rx1031_done
-    eq rx1031_pos, -1, rx1031_fail
+    rx1026_cur."!cursor_pass"(rx1026_pos, "prefix:sym<++>")
+    rx1026_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx1026_pos)
+    .return (rx1026_cur)
+  rx1026_fail:
+.annotate 'line', 446
+    (rx1026_rep, rx1026_pos, $I10, $P10) = rx1026_cur."!mark_fail"(0)
+    lt rx1026_pos, -1, rx1026_done
+    eq rx1026_pos, -1, rx1026_fail
     jump $I10
-  rx1031_done:
-    rx1031_cur."!cursor_fail"()
-    rx1031_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
-    .return (rx1031_cur)
+  rx1026_done:
+    rx1026_cur."!cursor_fail"()
+    rx1026_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
+    .return (rx1026_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<?>"  :subid("258_1274022894.43745") :method
-.annotate 'line', 431
-    $P1033 = self."!PREFIX__!subrule"("O", "?")
-    new $P1034, "ResizablePMCArray"
-    push $P1034, $P1033
-    .return ($P1034)
+.sub "!PREFIX__prefix:sym<++>"  :subid("253_1275811487.95429") :method
+.annotate 'line', 446
+    $P1028 = self."!PREFIX__!subrule"("O", "++")
+    new $P1029, "ResizablePMCArray"
+    push $P1029, $P1028
+    .return ($P1029)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<!>"  :subid("259_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1038_tgt
-    .local int rx1038_pos
-    .local int rx1038_off
-    .local int rx1038_eos
-    .local int rx1038_rep
-    .local pmc rx1038_cur
-    (rx1038_cur, rx1038_pos, rx1038_tgt) = self."!cursor_start"()
-    rx1038_cur."!cursor_debug"("START ", "prefix:sym<!>")
-    .lex unicode:"$\x{a2}", rx1038_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1038_eos, rx1038_tgt
-    set rx1038_off, 0
-    lt rx1038_pos, 2, rx1038_start
-    sub rx1038_off, rx1038_pos, 1
-    substr rx1038_tgt, rx1038_tgt, rx1038_off
-  rx1038_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1042_done
-    goto rxscan1042_scan
-  rxscan1042_loop:
-    ($P10) = rx1038_cur."from"()
-    inc $P10
-    set rx1038_pos, $P10
-    ge rx1038_pos, rx1038_eos, rxscan1042_done
-  rxscan1042_scan:
-    set_addr $I10, rxscan1042_loop
-    rx1038_cur."!mark_push"(0, rx1038_pos, $I10)
-  rxscan1042_done:
-.annotate 'line', 488
+.sub "prefix:sym<-->"  :subid("254_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1033_tgt
+    .local int rx1033_pos
+    .local int rx1033_off
+    .local int rx1033_eos
+    .local int rx1033_rep
+    .local pmc rx1033_cur
+    (rx1033_cur, rx1033_pos, rx1033_tgt) = self."!cursor_start"()
+    rx1033_cur."!cursor_debug"("START ", "prefix:sym<-->")
+    .lex unicode:"$\x{a2}", rx1033_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1033_eos, rx1033_tgt
+    gt rx1033_pos, rx1033_eos, rx1033_done
+    set rx1033_off, 0
+    lt rx1033_pos, 2, rx1033_start
+    sub rx1033_off, rx1033_pos, 1
+    substr rx1033_tgt, rx1033_tgt, rx1033_off
+  rx1033_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1037_done
+    goto rxscan1037_scan
+  rxscan1037_loop:
+    ($P10) = rx1033_cur."from"()
+    inc $P10
+    set rx1033_pos, $P10
+    ge rx1033_pos, rx1033_eos, rxscan1037_done
+  rxscan1037_scan:
+    set_addr $I10, rxscan1037_loop
+    rx1033_cur."!mark_push"(0, rx1033_pos, $I10)
+  rxscan1037_done:
+.annotate 'line', 491
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1043_fail
-    rx1038_cur."!mark_push"(0, rx1038_pos, $I10)
-  # rx literal  "!"
-    add $I11, rx1038_pos, 1
-    gt $I11, rx1038_eos, rx1038_fail
-    sub $I11, rx1038_pos, rx1038_off
-    substr $S10, rx1038_tgt, $I11, 1
-    ne $S10, "!", rx1038_fail
-    add rx1038_pos, 1
-    set_addr $I10, rxcap_1043_fail
-    ($I12, $I11) = rx1038_cur."!mark_peek"($I10)
-    rx1038_cur."!cursor_pos"($I11)
-    ($P10) = rx1038_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1038_pos, "")
-    rx1038_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1038_fail
+    rx1033_cur."!mark_push"(0, rx1033_pos, $I10)
+  # rx literal  "--"
+    add $I11, rx1033_pos, 2
+    gt $I11, rx1033_eos, rx1033_fail
+    sub $I11, rx1033_pos, rx1033_off
+    substr $S10, rx1033_tgt, $I11, 2
+    ne $S10, "--", rx1033_fail
+    add rx1033_pos, 2
+    set_addr $I10, rxcap_1038_fail
+    ($I12, $I11) = rx1033_cur."!mark_peek"($I10)
+    rx1033_cur."!cursor_pos"($I11)
+    ($P10) = rx1033_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1033_pos, "")
+    rx1033_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1043_done
-  rxcap_1043_fail:
-    goto rx1038_fail
-  rxcap_1043_done:
+    goto rxcap_1038_done
+  rxcap_1038_fail:
+    goto rx1033_fail
+  rxcap_1038_done:
   # rx subrule "O" subtype=capture negate=
-    rx1038_cur."!cursor_pos"(rx1038_pos)
-    $P10 = rx1038_cur."O"("%symbolic_unary, :pirop<isfalse>")
-    unless $P10, rx1038_fail
-    rx1038_cur."!mark_push"(0, -1, 0, $P10)
+    rx1033_cur."!cursor_pos"(rx1033_pos)
+    $P10 = rx1033_cur."O"("%autoincrement, :pirop<dec>")
+    unless $P10, rx1033_fail
+    rx1033_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1038_pos = $P10."pos"()
+    rx1033_pos = $P10."pos"()
   # rx pass
-    rx1038_cur."!cursor_pass"(rx1038_pos, "prefix:sym<!>")
-    rx1038_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1038_pos)
-    .return (rx1038_cur)
-  rx1038_fail:
-.annotate 'line', 431
-    (rx1038_rep, rx1038_pos, $I10, $P10) = rx1038_cur."!mark_fail"(0)
-    lt rx1038_pos, -1, rx1038_done
-    eq rx1038_pos, -1, rx1038_fail
+    rx1033_cur."!cursor_pass"(rx1033_pos, "prefix:sym<-->")
+    rx1033_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx1033_pos)
+    .return (rx1033_cur)
+  rx1033_fail:
+.annotate 'line', 446
+    (rx1033_rep, rx1033_pos, $I10, $P10) = rx1033_cur."!mark_fail"(0)
+    lt rx1033_pos, -1, rx1033_done
+    eq rx1033_pos, -1, rx1033_fail
     jump $I10
-  rx1038_done:
-    rx1038_cur."!cursor_fail"()
-    rx1038_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
-    .return (rx1038_cur)
+  rx1033_done:
+    rx1033_cur."!cursor_fail"()
+    rx1033_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
+    .return (rx1033_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<!>"  :subid("260_1274022894.43745") :method
-.annotate 'line', 431
-    $P1040 = self."!PREFIX__!subrule"("O", "!")
-    new $P1041, "ResizablePMCArray"
-    push $P1041, $P1040
-    .return ($P1041)
+.sub "!PREFIX__prefix:sym<-->"  :subid("255_1275811487.95429") :method
+.annotate 'line', 446
+    $P1035 = self."!PREFIX__!subrule"("O", "--")
+    new $P1036, "ResizablePMCArray"
+    push $P1036, $P1035
+    .return ($P1036)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<|>"  :subid("261_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1045_tgt
-    .local int rx1045_pos
-    .local int rx1045_off
-    .local int rx1045_eos
-    .local int rx1045_rep
-    .local pmc rx1045_cur
-    (rx1045_cur, rx1045_pos, rx1045_tgt) = self."!cursor_start"()
-    rx1045_cur."!cursor_debug"("START ", "prefix:sym<|>")
-    .lex unicode:"$\x{a2}", rx1045_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1045_eos, rx1045_tgt
-    set rx1045_off, 0
-    lt rx1045_pos, 2, rx1045_start
-    sub rx1045_off, rx1045_pos, 1
-    substr rx1045_tgt, rx1045_tgt, rx1045_off
-  rx1045_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1049_done
-    goto rxscan1049_scan
-  rxscan1049_loop:
-    ($P10) = rx1045_cur."from"()
-    inc $P10
-    set rx1045_pos, $P10
-    ge rx1045_pos, rx1045_eos, rxscan1049_done
-  rxscan1049_scan:
-    set_addr $I10, rxscan1049_loop
-    rx1045_cur."!mark_push"(0, rx1045_pos, $I10)
-  rxscan1049_done:
-.annotate 'line', 489
+.sub "postfix:sym<++>"  :subid("256_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1040_tgt
+    .local int rx1040_pos
+    .local int rx1040_off
+    .local int rx1040_eos
+    .local int rx1040_rep
+    .local pmc rx1040_cur
+    (rx1040_cur, rx1040_pos, rx1040_tgt) = self."!cursor_start"()
+    rx1040_cur."!cursor_debug"("START ", "postfix:sym<++>")
+    .lex unicode:"$\x{a2}", rx1040_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1040_eos, rx1040_tgt
+    gt rx1040_pos, rx1040_eos, rx1040_done
+    set rx1040_off, 0
+    lt rx1040_pos, 2, rx1040_start
+    sub rx1040_off, rx1040_pos, 1
+    substr rx1040_tgt, rx1040_tgt, rx1040_off
+  rx1040_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1044_done
+    goto rxscan1044_scan
+  rxscan1044_loop:
+    ($P10) = rx1040_cur."from"()
+    inc $P10
+    set rx1040_pos, $P10
+    ge rx1040_pos, rx1040_eos, rxscan1044_done
+  rxscan1044_scan:
+    set_addr $I10, rxscan1044_loop
+    rx1040_cur."!mark_push"(0, rx1040_pos, $I10)
+  rxscan1044_done:
+.annotate 'line', 494
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1050_fail
-    rx1045_cur."!mark_push"(0, rx1045_pos, $I10)
-  # rx literal  "|"
-    add $I11, rx1045_pos, 1
-    gt $I11, rx1045_eos, rx1045_fail
-    sub $I11, rx1045_pos, rx1045_off
-    substr $S10, rx1045_tgt, $I11, 1
-    ne $S10, "|", rx1045_fail
-    add rx1045_pos, 1
-    set_addr $I10, rxcap_1050_fail
-    ($I12, $I11) = rx1045_cur."!mark_peek"($I10)
-    rx1045_cur."!cursor_pos"($I11)
-    ($P10) = rx1045_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1045_pos, "")
-    rx1045_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1045_fail
+    rx1040_cur."!mark_push"(0, rx1040_pos, $I10)
+  # rx literal  "++"
+    add $I11, rx1040_pos, 2
+    gt $I11, rx1040_eos, rx1040_fail
+    sub $I11, rx1040_pos, rx1040_off
+    substr $S10, rx1040_tgt, $I11, 2
+    ne $S10, "++", rx1040_fail
+    add rx1040_pos, 2
+    set_addr $I10, rxcap_1045_fail
+    ($I12, $I11) = rx1040_cur."!mark_peek"($I10)
+    rx1040_cur."!cursor_pos"($I11)
+    ($P10) = rx1040_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1040_pos, "")
+    rx1040_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1050_done
-  rxcap_1050_fail:
-    goto rx1045_fail
-  rxcap_1050_done:
+    goto rxcap_1045_done
+  rxcap_1045_fail:
+    goto rx1040_fail
+  rxcap_1045_done:
   # rx subrule "O" subtype=capture negate=
-    rx1045_cur."!cursor_pos"(rx1045_pos)
-    $P10 = rx1045_cur."O"("%symbolic_unary")
-    unless $P10, rx1045_fail
-    rx1045_cur."!mark_push"(0, -1, 0, $P10)
+    rx1040_cur."!cursor_pos"(rx1040_pos)
+    $P10 = rx1040_cur."O"("%autoincrement")
+    unless $P10, rx1040_fail
+    rx1040_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1045_pos = $P10."pos"()
+    rx1040_pos = $P10."pos"()
   # rx pass
-    rx1045_cur."!cursor_pass"(rx1045_pos, "prefix:sym<|>")
-    rx1045_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1045_pos)
-    .return (rx1045_cur)
-  rx1045_fail:
-.annotate 'line', 431
-    (rx1045_rep, rx1045_pos, $I10, $P10) = rx1045_cur."!mark_fail"(0)
-    lt rx1045_pos, -1, rx1045_done
-    eq rx1045_pos, -1, rx1045_fail
+    rx1040_cur."!cursor_pass"(rx1040_pos, "postfix:sym<++>")
+    rx1040_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx1040_pos)
+    .return (rx1040_cur)
+  rx1040_fail:
+.annotate 'line', 446
+    (rx1040_rep, rx1040_pos, $I10, $P10) = rx1040_cur."!mark_fail"(0)
+    lt rx1040_pos, -1, rx1040_done
+    eq rx1040_pos, -1, rx1040_fail
     jump $I10
-  rx1045_done:
-    rx1045_cur."!cursor_fail"()
-    rx1045_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
-    .return (rx1045_cur)
+  rx1040_done:
+    rx1040_cur."!cursor_fail"()
+    rx1040_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
+    .return (rx1040_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<|>"  :subid("262_1274022894.43745") :method
-.annotate 'line', 431
-    $P1047 = self."!PREFIX__!subrule"("O", "|")
-    new $P1048, "ResizablePMCArray"
-    push $P1048, $P1047
-    .return ($P1048)
+.sub "!PREFIX__postfix:sym<++>"  :subid("257_1275811487.95429") :method
+.annotate 'line', 446
+    $P1042 = self."!PREFIX__!subrule"("O", "++")
+    new $P1043, "ResizablePMCArray"
+    push $P1043, $P1042
+    .return ($P1043)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<*>"  :subid("263_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1052_tgt
-    .local int rx1052_pos
-    .local int rx1052_off
-    .local int rx1052_eos
-    .local int rx1052_rep
-    .local pmc rx1052_cur
-    (rx1052_cur, rx1052_pos, rx1052_tgt) = self."!cursor_start"()
-    rx1052_cur."!cursor_debug"("START ", "infix:sym<*>")
-    .lex unicode:"$\x{a2}", rx1052_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1052_eos, rx1052_tgt
-    set rx1052_off, 0
-    lt rx1052_pos, 2, rx1052_start
-    sub rx1052_off, rx1052_pos, 1
-    substr rx1052_tgt, rx1052_tgt, rx1052_off
-  rx1052_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1056_done
-    goto rxscan1056_scan
-  rxscan1056_loop:
-    ($P10) = rx1052_cur."from"()
-    inc $P10
-    set rx1052_pos, $P10
-    ge rx1052_pos, rx1052_eos, rxscan1056_done
-  rxscan1056_scan:
-    set_addr $I10, rxscan1056_loop
-    rx1052_cur."!mark_push"(0, rx1052_pos, $I10)
-  rxscan1056_done:
-.annotate 'line', 491
+.sub "postfix:sym<-->"  :subid("258_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1047_tgt
+    .local int rx1047_pos
+    .local int rx1047_off
+    .local int rx1047_eos
+    .local int rx1047_rep
+    .local pmc rx1047_cur
+    (rx1047_cur, rx1047_pos, rx1047_tgt) = self."!cursor_start"()
+    rx1047_cur."!cursor_debug"("START ", "postfix:sym<-->")
+    .lex unicode:"$\x{a2}", rx1047_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1047_eos, rx1047_tgt
+    gt rx1047_pos, rx1047_eos, rx1047_done
+    set rx1047_off, 0
+    lt rx1047_pos, 2, rx1047_start
+    sub rx1047_off, rx1047_pos, 1
+    substr rx1047_tgt, rx1047_tgt, rx1047_off
+  rx1047_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1051_done
+    goto rxscan1051_scan
+  rxscan1051_loop:
+    ($P10) = rx1047_cur."from"()
+    inc $P10
+    set rx1047_pos, $P10
+    ge rx1047_pos, rx1047_eos, rxscan1051_done
+  rxscan1051_scan:
+    set_addr $I10, rxscan1051_loop
+    rx1047_cur."!mark_push"(0, rx1047_pos, $I10)
+  rxscan1051_done:
+.annotate 'line', 495
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1057_fail
-    rx1052_cur."!mark_push"(0, rx1052_pos, $I10)
-  # rx literal  "*"
-    add $I11, rx1052_pos, 1
-    gt $I11, rx1052_eos, rx1052_fail
-    sub $I11, rx1052_pos, rx1052_off
-    substr $S10, rx1052_tgt, $I11, 1
-    ne $S10, "*", rx1052_fail
-    add rx1052_pos, 1
-    set_addr $I10, rxcap_1057_fail
-    ($I12, $I11) = rx1052_cur."!mark_peek"($I10)
-    rx1052_cur."!cursor_pos"($I11)
-    ($P10) = rx1052_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1052_pos, "")
-    rx1052_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1052_fail
+    rx1047_cur."!mark_push"(0, rx1047_pos, $I10)
+  # rx literal  "--"
+    add $I11, rx1047_pos, 2
+    gt $I11, rx1047_eos, rx1047_fail
+    sub $I11, rx1047_pos, rx1047_off
+    substr $S10, rx1047_tgt, $I11, 2
+    ne $S10, "--", rx1047_fail
+    add rx1047_pos, 2
+    set_addr $I10, rxcap_1052_fail
+    ($I12, $I11) = rx1047_cur."!mark_peek"($I10)
+    rx1047_cur."!cursor_pos"($I11)
+    ($P10) = rx1047_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1047_pos, "")
+    rx1047_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1057_done
-  rxcap_1057_fail:
-    goto rx1052_fail
-  rxcap_1057_done:
+    goto rxcap_1052_done
+  rxcap_1052_fail:
+    goto rx1047_fail
+  rxcap_1052_done:
   # rx subrule "O" subtype=capture negate=
-    rx1052_cur."!cursor_pos"(rx1052_pos)
-    $P10 = rx1052_cur."O"("%multiplicative, :pirop<mul>")
-    unless $P10, rx1052_fail
-    rx1052_cur."!mark_push"(0, -1, 0, $P10)
+    rx1047_cur."!cursor_pos"(rx1047_pos)
+    $P10 = rx1047_cur."O"("%autoincrement")
+    unless $P10, rx1047_fail
+    rx1047_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1052_pos = $P10."pos"()
+    rx1047_pos = $P10."pos"()
   # rx pass
-    rx1052_cur."!cursor_pass"(rx1052_pos, "infix:sym<*>")
-    rx1052_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1052_pos)
-    .return (rx1052_cur)
-  rx1052_fail:
-.annotate 'line', 431
-    (rx1052_rep, rx1052_pos, $I10, $P10) = rx1052_cur."!mark_fail"(0)
-    lt rx1052_pos, -1, rx1052_done
-    eq rx1052_pos, -1, rx1052_fail
+    rx1047_cur."!cursor_pass"(rx1047_pos, "postfix:sym<-->")
+    rx1047_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx1047_pos)
+    .return (rx1047_cur)
+  rx1047_fail:
+.annotate 'line', 446
+    (rx1047_rep, rx1047_pos, $I10, $P10) = rx1047_cur."!mark_fail"(0)
+    lt rx1047_pos, -1, rx1047_done
+    eq rx1047_pos, -1, rx1047_fail
     jump $I10
-  rx1052_done:
-    rx1052_cur."!cursor_fail"()
-    rx1052_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
-    .return (rx1052_cur)
+  rx1047_done:
+    rx1047_cur."!cursor_fail"()
+    rx1047_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
+    .return (rx1047_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<*>"  :subid("264_1274022894.43745") :method
-.annotate 'line', 431
-    $P1054 = self."!PREFIX__!subrule"("O", "*")
-    new $P1055, "ResizablePMCArray"
-    push $P1055, $P1054
-    .return ($P1055)
+.sub "!PREFIX__postfix:sym<-->"  :subid("259_1275811487.95429") :method
+.annotate 'line', 446
+    $P1049 = self."!PREFIX__!subrule"("O", "--")
+    new $P1050, "ResizablePMCArray"
+    push $P1050, $P1049
+    .return ($P1050)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym</>"  :subid("265_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1059_tgt
-    .local int rx1059_pos
-    .local int rx1059_off
-    .local int rx1059_eos
-    .local int rx1059_rep
-    .local pmc rx1059_cur
-    (rx1059_cur, rx1059_pos, rx1059_tgt) = self."!cursor_start"()
-    rx1059_cur."!cursor_debug"("START ", "infix:sym</>")
-    .lex unicode:"$\x{a2}", rx1059_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1059_eos, rx1059_tgt
-    set rx1059_off, 0
-    lt rx1059_pos, 2, rx1059_start
-    sub rx1059_off, rx1059_pos, 1
-    substr rx1059_tgt, rx1059_tgt, rx1059_off
-  rx1059_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1063_done
-    goto rxscan1063_scan
-  rxscan1063_loop:
-    ($P10) = rx1059_cur."from"()
-    inc $P10
-    set rx1059_pos, $P10
-    ge rx1059_pos, rx1059_eos, rxscan1063_done
-  rxscan1063_scan:
-    set_addr $I10, rxscan1063_loop
-    rx1059_cur."!mark_push"(0, rx1059_pos, $I10)
-  rxscan1063_done:
-.annotate 'line', 492
+.sub "infix:sym<**>"  :subid("260_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1054_tgt
+    .local int rx1054_pos
+    .local int rx1054_off
+    .local int rx1054_eos
+    .local int rx1054_rep
+    .local pmc rx1054_cur
+    (rx1054_cur, rx1054_pos, rx1054_tgt) = self."!cursor_start"()
+    rx1054_cur."!cursor_debug"("START ", "infix:sym<**>")
+    .lex unicode:"$\x{a2}", rx1054_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1054_eos, rx1054_tgt
+    gt rx1054_pos, rx1054_eos, rx1054_done
+    set rx1054_off, 0
+    lt rx1054_pos, 2, rx1054_start
+    sub rx1054_off, rx1054_pos, 1
+    substr rx1054_tgt, rx1054_tgt, rx1054_off
+  rx1054_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1058_done
+    goto rxscan1058_scan
+  rxscan1058_loop:
+    ($P10) = rx1054_cur."from"()
+    inc $P10
+    set rx1054_pos, $P10
+    ge rx1054_pos, rx1054_eos, rxscan1058_done
+  rxscan1058_scan:
+    set_addr $I10, rxscan1058_loop
+    rx1054_cur."!mark_push"(0, rx1054_pos, $I10)
+  rxscan1058_done:
+.annotate 'line', 497
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1064_fail
-    rx1059_cur."!mark_push"(0, rx1059_pos, $I10)
-  # rx literal  "/"
-    add $I11, rx1059_pos, 1
-    gt $I11, rx1059_eos, rx1059_fail
-    sub $I11, rx1059_pos, rx1059_off
-    substr $S10, rx1059_tgt, $I11, 1
-    ne $S10, "/", rx1059_fail
-    add rx1059_pos, 1
-    set_addr $I10, rxcap_1064_fail
-    ($I12, $I11) = rx1059_cur."!mark_peek"($I10)
-    rx1059_cur."!cursor_pos"($I11)
-    ($P10) = rx1059_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1059_pos, "")
-    rx1059_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1059_fail
+    rx1054_cur."!mark_push"(0, rx1054_pos, $I10)
+  # rx literal  "**"
+    add $I11, rx1054_pos, 2
+    gt $I11, rx1054_eos, rx1054_fail
+    sub $I11, rx1054_pos, rx1054_off
+    substr $S10, rx1054_tgt, $I11, 2
+    ne $S10, "**", rx1054_fail
+    add rx1054_pos, 2
+    set_addr $I10, rxcap_1059_fail
+    ($I12, $I11) = rx1054_cur."!mark_peek"($I10)
+    rx1054_cur."!cursor_pos"($I11)
+    ($P10) = rx1054_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1054_pos, "")
+    rx1054_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1064_done
-  rxcap_1064_fail:
-    goto rx1059_fail
-  rxcap_1064_done:
+    goto rxcap_1059_done
+  rxcap_1059_fail:
+    goto rx1054_fail
+  rxcap_1059_done:
   # rx subrule "O" subtype=capture negate=
-    rx1059_cur."!cursor_pos"(rx1059_pos)
-    $P10 = rx1059_cur."O"("%multiplicative, :pirop<div>")
-    unless $P10, rx1059_fail
-    rx1059_cur."!mark_push"(0, -1, 0, $P10)
+    rx1054_cur."!cursor_pos"(rx1054_pos)
+    $P10 = rx1054_cur."O"("%exponentiation, :pirop<pow>")
+    unless $P10, rx1054_fail
+    rx1054_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1059_pos = $P10."pos"()
+    rx1054_pos = $P10."pos"()
   # rx pass
-    rx1059_cur."!cursor_pass"(rx1059_pos, "infix:sym</>")
-    rx1059_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1059_pos)
-    .return (rx1059_cur)
-  rx1059_fail:
-.annotate 'line', 431
-    (rx1059_rep, rx1059_pos, $I10, $P10) = rx1059_cur."!mark_fail"(0)
-    lt rx1059_pos, -1, rx1059_done
-    eq rx1059_pos, -1, rx1059_fail
+    rx1054_cur."!cursor_pass"(rx1054_pos, "infix:sym<**>")
+    rx1054_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx1054_pos)
+    .return (rx1054_cur)
+  rx1054_fail:
+.annotate 'line', 446
+    (rx1054_rep, rx1054_pos, $I10, $P10) = rx1054_cur."!mark_fail"(0)
+    lt rx1054_pos, -1, rx1054_done
+    eq rx1054_pos, -1, rx1054_fail
     jump $I10
-  rx1059_done:
-    rx1059_cur."!cursor_fail"()
-    rx1059_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
-    .return (rx1059_cur)
+  rx1054_done:
+    rx1054_cur."!cursor_fail"()
+    rx1054_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
+    .return (rx1054_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym</>"  :subid("266_1274022894.43745") :method
-.annotate 'line', 431
-    $P1061 = self."!PREFIX__!subrule"("O", "/")
-    new $P1062, "ResizablePMCArray"
-    push $P1062, $P1061
-    .return ($P1062)
+.sub "!PREFIX__infix:sym<**>"  :subid("261_1275811487.95429") :method
+.annotate 'line', 446
+    $P1056 = self."!PREFIX__!subrule"("O", "**")
+    new $P1057, "ResizablePMCArray"
+    push $P1057, $P1056
+    .return ($P1057)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<%>"  :subid("267_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1066_tgt
-    .local int rx1066_pos
-    .local int rx1066_off
-    .local int rx1066_eos
-    .local int rx1066_rep
-    .local pmc rx1066_cur
-    (rx1066_cur, rx1066_pos, rx1066_tgt) = self."!cursor_start"()
-    rx1066_cur."!cursor_debug"("START ", "infix:sym<%>")
-    .lex unicode:"$\x{a2}", rx1066_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1066_eos, rx1066_tgt
-    set rx1066_off, 0
-    lt rx1066_pos, 2, rx1066_start
-    sub rx1066_off, rx1066_pos, 1
-    substr rx1066_tgt, rx1066_tgt, rx1066_off
-  rx1066_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1070_done
-    goto rxscan1070_scan
-  rxscan1070_loop:
-    ($P10) = rx1066_cur."from"()
-    inc $P10
-    set rx1066_pos, $P10
-    ge rx1066_pos, rx1066_eos, rxscan1070_done
-  rxscan1070_scan:
-    set_addr $I10, rxscan1070_loop
-    rx1066_cur."!mark_push"(0, rx1066_pos, $I10)
-  rxscan1070_done:
-.annotate 'line', 493
+.sub "prefix:sym<+>"  :subid("262_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1061_tgt
+    .local int rx1061_pos
+    .local int rx1061_off
+    .local int rx1061_eos
+    .local int rx1061_rep
+    .local pmc rx1061_cur
+    (rx1061_cur, rx1061_pos, rx1061_tgt) = self."!cursor_start"()
+    rx1061_cur."!cursor_debug"("START ", "prefix:sym<+>")
+    .lex unicode:"$\x{a2}", rx1061_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1061_eos, rx1061_tgt
+    gt rx1061_pos, rx1061_eos, rx1061_done
+    set rx1061_off, 0
+    lt rx1061_pos, 2, rx1061_start
+    sub rx1061_off, rx1061_pos, 1
+    substr rx1061_tgt, rx1061_tgt, rx1061_off
+  rx1061_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1065_done
+    goto rxscan1065_scan
+  rxscan1065_loop:
+    ($P10) = rx1061_cur."from"()
+    inc $P10
+    set rx1061_pos, $P10
+    ge rx1061_pos, rx1061_eos, rxscan1065_done
+  rxscan1065_scan:
+    set_addr $I10, rxscan1065_loop
+    rx1061_cur."!mark_push"(0, rx1061_pos, $I10)
+  rxscan1065_done:
+.annotate 'line', 499
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1071_fail
-    rx1066_cur."!mark_push"(0, rx1066_pos, $I10)
-  # rx literal  "%"
-    add $I11, rx1066_pos, 1
-    gt $I11, rx1066_eos, rx1066_fail
-    sub $I11, rx1066_pos, rx1066_off
-    substr $S10, rx1066_tgt, $I11, 1
-    ne $S10, "%", rx1066_fail
-    add rx1066_pos, 1
-    set_addr $I10, rxcap_1071_fail
-    ($I12, $I11) = rx1066_cur."!mark_peek"($I10)
-    rx1066_cur."!cursor_pos"($I11)
-    ($P10) = rx1066_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1066_pos, "")
-    rx1066_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1066_fail
+    rx1061_cur."!mark_push"(0, rx1061_pos, $I10)
+  # rx literal  "+"
+    add $I11, rx1061_pos, 1
+    gt $I11, rx1061_eos, rx1061_fail
+    sub $I11, rx1061_pos, rx1061_off
+    substr $S10, rx1061_tgt, $I11, 1
+    ne $S10, "+", rx1061_fail
+    add rx1061_pos, 1
+    set_addr $I10, rxcap_1066_fail
+    ($I12, $I11) = rx1061_cur."!mark_peek"($I10)
+    rx1061_cur."!cursor_pos"($I11)
+    ($P10) = rx1061_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1061_pos, "")
+    rx1061_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1071_done
-  rxcap_1071_fail:
-    goto rx1066_fail
-  rxcap_1071_done:
+    goto rxcap_1066_done
+  rxcap_1066_fail:
+    goto rx1061_fail
+  rxcap_1066_done:
   # rx subrule "O" subtype=capture negate=
-    rx1066_cur."!cursor_pos"(rx1066_pos)
-    $P10 = rx1066_cur."O"("%multiplicative, :pirop<mod>")
-    unless $P10, rx1066_fail
-    rx1066_cur."!mark_push"(0, -1, 0, $P10)
+    rx1061_cur."!cursor_pos"(rx1061_pos)
+    $P10 = rx1061_cur."O"("%symbolic_unary, :pirop<set N*>")
+    unless $P10, rx1061_fail
+    rx1061_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1066_pos = $P10."pos"()
+    rx1061_pos = $P10."pos"()
   # rx pass
-    rx1066_cur."!cursor_pass"(rx1066_pos, "infix:sym<%>")
-    rx1066_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1066_pos)
-    .return (rx1066_cur)
-  rx1066_fail:
-.annotate 'line', 431
-    (rx1066_rep, rx1066_pos, $I10, $P10) = rx1066_cur."!mark_fail"(0)
-    lt rx1066_pos, -1, rx1066_done
-    eq rx1066_pos, -1, rx1066_fail
+    rx1061_cur."!cursor_pass"(rx1061_pos, "prefix:sym<+>")
+    rx1061_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx1061_pos)
+    .return (rx1061_cur)
+  rx1061_fail:
+.annotate 'line', 446
+    (rx1061_rep, rx1061_pos, $I10, $P10) = rx1061_cur."!mark_fail"(0)
+    lt rx1061_pos, -1, rx1061_done
+    eq rx1061_pos, -1, rx1061_fail
     jump $I10
-  rx1066_done:
-    rx1066_cur."!cursor_fail"()
-    rx1066_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
-    .return (rx1066_cur)
+  rx1061_done:
+    rx1061_cur."!cursor_fail"()
+    rx1061_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
+    .return (rx1061_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<%>"  :subid("268_1274022894.43745") :method
-.annotate 'line', 431
-    $P1068 = self."!PREFIX__!subrule"("O", "%")
-    new $P1069, "ResizablePMCArray"
-    push $P1069, $P1068
-    .return ($P1069)
+.sub "!PREFIX__prefix:sym<+>"  :subid("263_1275811487.95429") :method
+.annotate 'line', 446
+    $P1063 = self."!PREFIX__!subrule"("O", "+")
+    new $P1064, "ResizablePMCArray"
+    push $P1064, $P1063
+    .return ($P1064)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+>"  :subid("269_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1073_tgt
-    .local int rx1073_pos
-    .local int rx1073_off
-    .local int rx1073_eos
-    .local int rx1073_rep
-    .local pmc rx1073_cur
-    (rx1073_cur, rx1073_pos, rx1073_tgt) = self."!cursor_start"()
-    rx1073_cur."!cursor_debug"("START ", "infix:sym<+>")
-    .lex unicode:"$\x{a2}", rx1073_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1073_eos, rx1073_tgt
-    set rx1073_off, 0
-    lt rx1073_pos, 2, rx1073_start
-    sub rx1073_off, rx1073_pos, 1
-    substr rx1073_tgt, rx1073_tgt, rx1073_off
-  rx1073_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1077_done
-    goto rxscan1077_scan
-  rxscan1077_loop:
-    ($P10) = rx1073_cur."from"()
-    inc $P10
-    set rx1073_pos, $P10
-    ge rx1073_pos, rx1073_eos, rxscan1077_done
-  rxscan1077_scan:
-    set_addr $I10, rxscan1077_loop
-    rx1073_cur."!mark_push"(0, rx1073_pos, $I10)
-  rxscan1077_done:
-.annotate 'line', 495
+.sub "prefix:sym<~>"  :subid("264_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1068_tgt
+    .local int rx1068_pos
+    .local int rx1068_off
+    .local int rx1068_eos
+    .local int rx1068_rep
+    .local pmc rx1068_cur
+    (rx1068_cur, rx1068_pos, rx1068_tgt) = self."!cursor_start"()
+    rx1068_cur."!cursor_debug"("START ", "prefix:sym<~>")
+    .lex unicode:"$\x{a2}", rx1068_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1068_eos, rx1068_tgt
+    gt rx1068_pos, rx1068_eos, rx1068_done
+    set rx1068_off, 0
+    lt rx1068_pos, 2, rx1068_start
+    sub rx1068_off, rx1068_pos, 1
+    substr rx1068_tgt, rx1068_tgt, rx1068_off
+  rx1068_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1072_done
+    goto rxscan1072_scan
+  rxscan1072_loop:
+    ($P10) = rx1068_cur."from"()
+    inc $P10
+    set rx1068_pos, $P10
+    ge rx1068_pos, rx1068_eos, rxscan1072_done
+  rxscan1072_scan:
+    set_addr $I10, rxscan1072_loop
+    rx1068_cur."!mark_push"(0, rx1068_pos, $I10)
+  rxscan1072_done:
+.annotate 'line', 500
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1078_fail
-    rx1073_cur."!mark_push"(0, rx1073_pos, $I10)
-  # rx literal  "+"
-    add $I11, rx1073_pos, 1
-    gt $I11, rx1073_eos, rx1073_fail
-    sub $I11, rx1073_pos, rx1073_off
-    substr $S10, rx1073_tgt, $I11, 1
-    ne $S10, "+", rx1073_fail
-    add rx1073_pos, 1
-    set_addr $I10, rxcap_1078_fail
-    ($I12, $I11) = rx1073_cur."!mark_peek"($I10)
-    rx1073_cur."!cursor_pos"($I11)
-    ($P10) = rx1073_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1073_pos, "")
-    rx1073_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1073_fail
+    rx1068_cur."!mark_push"(0, rx1068_pos, $I10)
+  # rx literal  "~"
+    add $I11, rx1068_pos, 1
+    gt $I11, rx1068_eos, rx1068_fail
+    sub $I11, rx1068_pos, rx1068_off
+    substr $S10, rx1068_tgt, $I11, 1
+    ne $S10, "~", rx1068_fail
+    add rx1068_pos, 1
+    set_addr $I10, rxcap_1073_fail
+    ($I12, $I11) = rx1068_cur."!mark_peek"($I10)
+    rx1068_cur."!cursor_pos"($I11)
+    ($P10) = rx1068_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1068_pos, "")
+    rx1068_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1078_done
-  rxcap_1078_fail:
-    goto rx1073_fail
-  rxcap_1078_done:
+    goto rxcap_1073_done
+  rxcap_1073_fail:
+    goto rx1068_fail
+  rxcap_1073_done:
   # rx subrule "O" subtype=capture negate=
-    rx1073_cur."!cursor_pos"(rx1073_pos)
-    $P10 = rx1073_cur."O"("%additive, :pirop<add>")
-    unless $P10, rx1073_fail
-    rx1073_cur."!mark_push"(0, -1, 0, $P10)
+    rx1068_cur."!cursor_pos"(rx1068_pos)
+    $P10 = rx1068_cur."O"("%symbolic_unary, :pirop<set S*>")
+    unless $P10, rx1068_fail
+    rx1068_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1073_pos = $P10."pos"()
+    rx1068_pos = $P10."pos"()
   # rx pass
-    rx1073_cur."!cursor_pass"(rx1073_pos, "infix:sym<+>")
-    rx1073_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1073_pos)
-    .return (rx1073_cur)
-  rx1073_fail:
-.annotate 'line', 431
-    (rx1073_rep, rx1073_pos, $I10, $P10) = rx1073_cur."!mark_fail"(0)
-    lt rx1073_pos, -1, rx1073_done
-    eq rx1073_pos, -1, rx1073_fail
+    rx1068_cur."!cursor_pass"(rx1068_pos, "prefix:sym<~>")
+    rx1068_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx1068_pos)
+    .return (rx1068_cur)
+  rx1068_fail:
+.annotate 'line', 446
+    (rx1068_rep, rx1068_pos, $I10, $P10) = rx1068_cur."!mark_fail"(0)
+    lt rx1068_pos, -1, rx1068_done
+    eq rx1068_pos, -1, rx1068_fail
     jump $I10
-  rx1073_done:
-    rx1073_cur."!cursor_fail"()
-    rx1073_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
-    .return (rx1073_cur)
+  rx1068_done:
+    rx1068_cur."!cursor_fail"()
+    rx1068_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
+    .return (rx1068_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+>"  :subid("270_1274022894.43745") :method
-.annotate 'line', 431
-    $P1075 = self."!PREFIX__!subrule"("O", "+")
-    new $P1076, "ResizablePMCArray"
-    push $P1076, $P1075
-    .return ($P1076)
+.sub "!PREFIX__prefix:sym<~>"  :subid("265_1275811487.95429") :method
+.annotate 'line', 446
+    $P1070 = self."!PREFIX__!subrule"("O", "~")
+    new $P1071, "ResizablePMCArray"
+    push $P1071, $P1070
+    .return ($P1071)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<->"  :subid("271_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1080_tgt
-    .local int rx1080_pos
-    .local int rx1080_off
-    .local int rx1080_eos
-    .local int rx1080_rep
-    .local pmc rx1080_cur
-    (rx1080_cur, rx1080_pos, rx1080_tgt) = self."!cursor_start"()
-    rx1080_cur."!cursor_debug"("START ", "infix:sym<->")
-    .lex unicode:"$\x{a2}", rx1080_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1080_eos, rx1080_tgt
-    set rx1080_off, 0
-    lt rx1080_pos, 2, rx1080_start
-    sub rx1080_off, rx1080_pos, 1
-    substr rx1080_tgt, rx1080_tgt, rx1080_off
-  rx1080_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1084_done
-    goto rxscan1084_scan
-  rxscan1084_loop:
-    ($P10) = rx1080_cur."from"()
-    inc $P10
-    set rx1080_pos, $P10
-    ge rx1080_pos, rx1080_eos, rxscan1084_done
-  rxscan1084_scan:
-    set_addr $I10, rxscan1084_loop
-    rx1080_cur."!mark_push"(0, rx1080_pos, $I10)
-  rxscan1084_done:
-.annotate 'line', 496
+.sub "prefix:sym<->"  :subid("266_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1075_tgt
+    .local int rx1075_pos
+    .local int rx1075_off
+    .local int rx1075_eos
+    .local int rx1075_rep
+    .local pmc rx1075_cur
+    (rx1075_cur, rx1075_pos, rx1075_tgt) = self."!cursor_start"()
+    rx1075_cur."!cursor_debug"("START ", "prefix:sym<->")
+    .lex unicode:"$\x{a2}", rx1075_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1075_eos, rx1075_tgt
+    gt rx1075_pos, rx1075_eos, rx1075_done
+    set rx1075_off, 0
+    lt rx1075_pos, 2, rx1075_start
+    sub rx1075_off, rx1075_pos, 1
+    substr rx1075_tgt, rx1075_tgt, rx1075_off
+  rx1075_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1078_done
+    goto rxscan1078_scan
+  rxscan1078_loop:
+    ($P10) = rx1075_cur."from"()
+    inc $P10
+    set rx1075_pos, $P10
+    ge rx1075_pos, rx1075_eos, rxscan1078_done
+  rxscan1078_scan:
+    set_addr $I10, rxscan1078_loop
+    rx1075_cur."!mark_push"(0, rx1075_pos, $I10)
+  rxscan1078_done:
+.annotate 'line', 501
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1085_fail
-    rx1080_cur."!mark_push"(0, rx1080_pos, $I10)
+    set_addr $I10, rxcap_1079_fail
+    rx1075_cur."!mark_push"(0, rx1075_pos, $I10)
   # rx literal  "-"
-    add $I11, rx1080_pos, 1
-    gt $I11, rx1080_eos, rx1080_fail
-    sub $I11, rx1080_pos, rx1080_off
-    substr $S10, rx1080_tgt, $I11, 1
-    ne $S10, "-", rx1080_fail
-    add rx1080_pos, 1
-    set_addr $I10, rxcap_1085_fail
-    ($I12, $I11) = rx1080_cur."!mark_peek"($I10)
-    rx1080_cur."!cursor_pos"($I11)
-    ($P10) = rx1080_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1080_pos, "")
-    rx1080_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1075_pos, 1
+    gt $I11, rx1075_eos, rx1075_fail
+    sub $I11, rx1075_pos, rx1075_off
+    substr $S10, rx1075_tgt, $I11, 1
+    ne $S10, "-", rx1075_fail
+    add rx1075_pos, 1
+    set_addr $I10, rxcap_1079_fail
+    ($I12, $I11) = rx1075_cur."!mark_peek"($I10)
+    rx1075_cur."!cursor_pos"($I11)
+    ($P10) = rx1075_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1075_pos, "")
+    rx1075_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1085_done
-  rxcap_1085_fail:
-    goto rx1080_fail
-  rxcap_1085_done:
+    goto rxcap_1079_done
+  rxcap_1079_fail:
+    goto rx1075_fail
+  rxcap_1079_done:
+  # rx enumcharlist negate=1 zerowidth
+    ge rx1075_pos, rx1075_eos, rx1075_fail
+    sub $I10, rx1075_pos, rx1075_off
+    substr $S10, rx1075_tgt, $I10, 1
+    index $I11, ">", $S10
+    ge $I11, 0, rx1075_fail
+  # rx subrule "number" subtype=zerowidth negate=1
+    rx1075_cur."!cursor_pos"(rx1075_pos)
+    $P10 = rx1075_cur."number"()
+    if $P10, rx1075_fail
   # rx subrule "O" subtype=capture negate=
-    rx1080_cur."!cursor_pos"(rx1080_pos)
-    $P10 = rx1080_cur."O"("%additive, :pirop<sub>")
-    unless $P10, rx1080_fail
-    rx1080_cur."!mark_push"(0, -1, 0, $P10)
+    rx1075_cur."!cursor_pos"(rx1075_pos)
+    $P10 = rx1075_cur."O"("%symbolic_unary, :pirop<neg>")
+    unless $P10, rx1075_fail
+    rx1075_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1080_pos = $P10."pos"()
+    rx1075_pos = $P10."pos"()
   # rx pass
-    rx1080_cur."!cursor_pass"(rx1080_pos, "infix:sym<->")
-    rx1080_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1080_pos)
-    .return (rx1080_cur)
-  rx1080_fail:
-.annotate 'line', 431
-    (rx1080_rep, rx1080_pos, $I10, $P10) = rx1080_cur."!mark_fail"(0)
-    lt rx1080_pos, -1, rx1080_done
-    eq rx1080_pos, -1, rx1080_fail
+    rx1075_cur."!cursor_pass"(rx1075_pos, "prefix:sym<->")
+    rx1075_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx1075_pos)
+    .return (rx1075_cur)
+  rx1075_fail:
+.annotate 'line', 446
+    (rx1075_rep, rx1075_pos, $I10, $P10) = rx1075_cur."!mark_fail"(0)
+    lt rx1075_pos, -1, rx1075_done
+    eq rx1075_pos, -1, rx1075_fail
     jump $I10
-  rx1080_done:
-    rx1080_cur."!cursor_fail"()
-    rx1080_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
-    .return (rx1080_cur)
+  rx1075_done:
+    rx1075_cur."!cursor_fail"()
+    rx1075_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
+    .return (rx1075_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<->"  :subid("272_1274022894.43745") :method
-.annotate 'line', 431
-    $P1082 = self."!PREFIX__!subrule"("O", "-")
-    new $P1083, "ResizablePMCArray"
-    push $P1083, $P1082
-    .return ($P1083)
+.sub "!PREFIX__prefix:sym<->"  :subid("267_1275811487.95429") :method
+.annotate 'line', 446
+    new $P1077, "ResizablePMCArray"
+    push $P1077, "-"
+    .return ($P1077)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~>"  :subid("273_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1087_tgt
-    .local int rx1087_pos
-    .local int rx1087_off
-    .local int rx1087_eos
-    .local int rx1087_rep
-    .local pmc rx1087_cur
-    (rx1087_cur, rx1087_pos, rx1087_tgt) = self."!cursor_start"()
-    rx1087_cur."!cursor_debug"("START ", "infix:sym<~>")
-    .lex unicode:"$\x{a2}", rx1087_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1087_eos, rx1087_tgt
-    set rx1087_off, 0
-    lt rx1087_pos, 2, rx1087_start
-    sub rx1087_off, rx1087_pos, 1
-    substr rx1087_tgt, rx1087_tgt, rx1087_off
-  rx1087_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1091_done
-    goto rxscan1091_scan
-  rxscan1091_loop:
-    ($P10) = rx1087_cur."from"()
-    inc $P10
-    set rx1087_pos, $P10
-    ge rx1087_pos, rx1087_eos, rxscan1091_done
-  rxscan1091_scan:
-    set_addr $I10, rxscan1091_loop
-    rx1087_cur."!mark_push"(0, rx1087_pos, $I10)
-  rxscan1091_done:
-.annotate 'line', 498
+.sub "prefix:sym<?>"  :subid("268_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1081_tgt
+    .local int rx1081_pos
+    .local int rx1081_off
+    .local int rx1081_eos
+    .local int rx1081_rep
+    .local pmc rx1081_cur
+    (rx1081_cur, rx1081_pos, rx1081_tgt) = self."!cursor_start"()
+    rx1081_cur."!cursor_debug"("START ", "prefix:sym<?>")
+    .lex unicode:"$\x{a2}", rx1081_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1081_eos, rx1081_tgt
+    gt rx1081_pos, rx1081_eos, rx1081_done
+    set rx1081_off, 0
+    lt rx1081_pos, 2, rx1081_start
+    sub rx1081_off, rx1081_pos, 1
+    substr rx1081_tgt, rx1081_tgt, rx1081_off
+  rx1081_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1085_done
+    goto rxscan1085_scan
+  rxscan1085_loop:
+    ($P10) = rx1081_cur."from"()
+    inc $P10
+    set rx1081_pos, $P10
+    ge rx1081_pos, rx1081_eos, rxscan1085_done
+  rxscan1085_scan:
+    set_addr $I10, rxscan1085_loop
+    rx1081_cur."!mark_push"(0, rx1081_pos, $I10)
+  rxscan1085_done:
+.annotate 'line', 502
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1092_fail
-    rx1087_cur."!mark_push"(0, rx1087_pos, $I10)
-  # rx literal  "~"
-    add $I11, rx1087_pos, 1
-    gt $I11, rx1087_eos, rx1087_fail
-    sub $I11, rx1087_pos, rx1087_off
-    substr $S10, rx1087_tgt, $I11, 1
-    ne $S10, "~", rx1087_fail
-    add rx1087_pos, 1
-    set_addr $I10, rxcap_1092_fail
-    ($I12, $I11) = rx1087_cur."!mark_peek"($I10)
-    rx1087_cur."!cursor_pos"($I11)
-    ($P10) = rx1087_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1087_pos, "")
-    rx1087_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1086_fail
+    rx1081_cur."!mark_push"(0, rx1081_pos, $I10)
+  # rx literal  "?"
+    add $I11, rx1081_pos, 1
+    gt $I11, rx1081_eos, rx1081_fail
+    sub $I11, rx1081_pos, rx1081_off
+    substr $S10, rx1081_tgt, $I11, 1
+    ne $S10, "?", rx1081_fail
+    add rx1081_pos, 1
+    set_addr $I10, rxcap_1086_fail
+    ($I12, $I11) = rx1081_cur."!mark_peek"($I10)
+    rx1081_cur."!cursor_pos"($I11)
+    ($P10) = rx1081_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1081_pos, "")
+    rx1081_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1092_done
-  rxcap_1092_fail:
-    goto rx1087_fail
-  rxcap_1092_done:
+    goto rxcap_1086_done
+  rxcap_1086_fail:
+    goto rx1081_fail
+  rxcap_1086_done:
   # rx subrule "O" subtype=capture negate=
-    rx1087_cur."!cursor_pos"(rx1087_pos)
-    $P10 = rx1087_cur."O"("%concatenation , :pirop<concat>")
-    unless $P10, rx1087_fail
-    rx1087_cur."!mark_push"(0, -1, 0, $P10)
+    rx1081_cur."!cursor_pos"(rx1081_pos)
+    $P10 = rx1081_cur."O"("%symbolic_unary, :pirop<istrue>")
+    unless $P10, rx1081_fail
+    rx1081_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1087_pos = $P10."pos"()
+    rx1081_pos = $P10."pos"()
   # rx pass
-    rx1087_cur."!cursor_pass"(rx1087_pos, "infix:sym<~>")
-    rx1087_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1087_pos)
-    .return (rx1087_cur)
-  rx1087_fail:
-.annotate 'line', 431
-    (rx1087_rep, rx1087_pos, $I10, $P10) = rx1087_cur."!mark_fail"(0)
-    lt rx1087_pos, -1, rx1087_done
-    eq rx1087_pos, -1, rx1087_fail
+    rx1081_cur."!cursor_pass"(rx1081_pos, "prefix:sym<?>")
+    rx1081_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx1081_pos)
+    .return (rx1081_cur)
+  rx1081_fail:
+.annotate 'line', 446
+    (rx1081_rep, rx1081_pos, $I10, $P10) = rx1081_cur."!mark_fail"(0)
+    lt rx1081_pos, -1, rx1081_done
+    eq rx1081_pos, -1, rx1081_fail
     jump $I10
-  rx1087_done:
-    rx1087_cur."!cursor_fail"()
-    rx1087_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
-    .return (rx1087_cur)
+  rx1081_done:
+    rx1081_cur."!cursor_fail"()
+    rx1081_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
+    .return (rx1081_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~>"  :subid("274_1274022894.43745") :method
-.annotate 'line', 431
-    $P1089 = self."!PREFIX__!subrule"("O", "~")
-    new $P1090, "ResizablePMCArray"
-    push $P1090, $P1089
-    .return ($P1090)
+.sub "!PREFIX__prefix:sym<?>"  :subid("269_1275811487.95429") :method
+.annotate 'line', 446
+    $P1083 = self."!PREFIX__!subrule"("O", "?")
+    new $P1084, "ResizablePMCArray"
+    push $P1084, $P1083
+    .return ($P1084)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<==>"  :subid("275_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1094_tgt
-    .local int rx1094_pos
-    .local int rx1094_off
-    .local int rx1094_eos
-    .local int rx1094_rep
-    .local pmc rx1094_cur
-    (rx1094_cur, rx1094_pos, rx1094_tgt) = self."!cursor_start"()
-    rx1094_cur."!cursor_debug"("START ", "infix:sym<==>")
-    .lex unicode:"$\x{a2}", rx1094_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1094_eos, rx1094_tgt
-    set rx1094_off, 0
-    lt rx1094_pos, 2, rx1094_start
-    sub rx1094_off, rx1094_pos, 1
-    substr rx1094_tgt, rx1094_tgt, rx1094_off
-  rx1094_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1098_done
-    goto rxscan1098_scan
-  rxscan1098_loop:
-    ($P10) = rx1094_cur."from"()
-    inc $P10
-    set rx1094_pos, $P10
-    ge rx1094_pos, rx1094_eos, rxscan1098_done
-  rxscan1098_scan:
-    set_addr $I10, rxscan1098_loop
-    rx1094_cur."!mark_push"(0, rx1094_pos, $I10)
-  rxscan1098_done:
-.annotate 'line', 500
+.sub "prefix:sym<!>"  :subid("270_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1088_tgt
+    .local int rx1088_pos
+    .local int rx1088_off
+    .local int rx1088_eos
+    .local int rx1088_rep
+    .local pmc rx1088_cur
+    (rx1088_cur, rx1088_pos, rx1088_tgt) = self."!cursor_start"()
+    rx1088_cur."!cursor_debug"("START ", "prefix:sym<!>")
+    .lex unicode:"$\x{a2}", rx1088_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1088_eos, rx1088_tgt
+    gt rx1088_pos, rx1088_eos, rx1088_done
+    set rx1088_off, 0
+    lt rx1088_pos, 2, rx1088_start
+    sub rx1088_off, rx1088_pos, 1
+    substr rx1088_tgt, rx1088_tgt, rx1088_off
+  rx1088_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1092_done
+    goto rxscan1092_scan
+  rxscan1092_loop:
+    ($P10) = rx1088_cur."from"()
+    inc $P10
+    set rx1088_pos, $P10
+    ge rx1088_pos, rx1088_eos, rxscan1092_done
+  rxscan1092_scan:
+    set_addr $I10, rxscan1092_loop
+    rx1088_cur."!mark_push"(0, rx1088_pos, $I10)
+  rxscan1092_done:
+.annotate 'line', 503
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1099_fail
-    rx1094_cur."!mark_push"(0, rx1094_pos, $I10)
-  # rx literal  "=="
-    add $I11, rx1094_pos, 2
-    gt $I11, rx1094_eos, rx1094_fail
-    sub $I11, rx1094_pos, rx1094_off
-    substr $S10, rx1094_tgt, $I11, 2
-    ne $S10, "==", rx1094_fail
-    add rx1094_pos, 2
-    set_addr $I10, rxcap_1099_fail
-    ($I12, $I11) = rx1094_cur."!mark_peek"($I10)
-    rx1094_cur."!cursor_pos"($I11)
-    ($P10) = rx1094_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1094_pos, "")
-    rx1094_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1093_fail
+    rx1088_cur."!mark_push"(0, rx1088_pos, $I10)
+  # rx literal  "!"
+    add $I11, rx1088_pos, 1
+    gt $I11, rx1088_eos, rx1088_fail
+    sub $I11, rx1088_pos, rx1088_off
+    substr $S10, rx1088_tgt, $I11, 1
+    ne $S10, "!", rx1088_fail
+    add rx1088_pos, 1
+    set_addr $I10, rxcap_1093_fail
+    ($I12, $I11) = rx1088_cur."!mark_peek"($I10)
+    rx1088_cur."!cursor_pos"($I11)
+    ($P10) = rx1088_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1088_pos, "")
+    rx1088_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1099_done
-  rxcap_1099_fail:
-    goto rx1094_fail
-  rxcap_1099_done:
+    goto rxcap_1093_done
+  rxcap_1093_fail:
+    goto rx1088_fail
+  rxcap_1093_done:
   # rx subrule "O" subtype=capture negate=
-    rx1094_cur."!cursor_pos"(rx1094_pos)
-    $P10 = rx1094_cur."O"("%relational, :pirop<iseq INn>")
-    unless $P10, rx1094_fail
-    rx1094_cur."!mark_push"(0, -1, 0, $P10)
+    rx1088_cur."!cursor_pos"(rx1088_pos)
+    $P10 = rx1088_cur."O"("%symbolic_unary, :pirop<isfalse>")
+    unless $P10, rx1088_fail
+    rx1088_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1094_pos = $P10."pos"()
+    rx1088_pos = $P10."pos"()
   # rx pass
-    rx1094_cur."!cursor_pass"(rx1094_pos, "infix:sym<==>")
-    rx1094_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1094_pos)
-    .return (rx1094_cur)
-  rx1094_fail:
-.annotate 'line', 431
-    (rx1094_rep, rx1094_pos, $I10, $P10) = rx1094_cur."!mark_fail"(0)
-    lt rx1094_pos, -1, rx1094_done
-    eq rx1094_pos, -1, rx1094_fail
+    rx1088_cur."!cursor_pass"(rx1088_pos, "prefix:sym<!>")
+    rx1088_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1088_pos)
+    .return (rx1088_cur)
+  rx1088_fail:
+.annotate 'line', 446
+    (rx1088_rep, rx1088_pos, $I10, $P10) = rx1088_cur."!mark_fail"(0)
+    lt rx1088_pos, -1, rx1088_done
+    eq rx1088_pos, -1, rx1088_fail
     jump $I10
-  rx1094_done:
-    rx1094_cur."!cursor_fail"()
-    rx1094_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
-    .return (rx1094_cur)
+  rx1088_done:
+    rx1088_cur."!cursor_fail"()
+    rx1088_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
+    .return (rx1088_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<==>"  :subid("276_1274022894.43745") :method
-.annotate 'line', 431
-    $P1096 = self."!PREFIX__!subrule"("O", "==")
-    new $P1097, "ResizablePMCArray"
-    push $P1097, $P1096
-    .return ($P1097)
+.sub "!PREFIX__prefix:sym<!>"  :subid("271_1275811487.95429") :method
+.annotate 'line', 446
+    $P1090 = self."!PREFIX__!subrule"("O", "!")
+    new $P1091, "ResizablePMCArray"
+    push $P1091, $P1090
+    .return ($P1091)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<!=>"  :subid("277_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1101_tgt
-    .local int rx1101_pos
-    .local int rx1101_off
-    .local int rx1101_eos
-    .local int rx1101_rep
-    .local pmc rx1101_cur
-    (rx1101_cur, rx1101_pos, rx1101_tgt) = self."!cursor_start"()
-    rx1101_cur."!cursor_debug"("START ", "infix:sym<!=>")
-    .lex unicode:"$\x{a2}", rx1101_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1101_eos, rx1101_tgt
-    set rx1101_off, 0
-    lt rx1101_pos, 2, rx1101_start
-    sub rx1101_off, rx1101_pos, 1
-    substr rx1101_tgt, rx1101_tgt, rx1101_off
-  rx1101_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1105_done
-    goto rxscan1105_scan
-  rxscan1105_loop:
-    ($P10) = rx1101_cur."from"()
-    inc $P10
-    set rx1101_pos, $P10
-    ge rx1101_pos, rx1101_eos, rxscan1105_done
-  rxscan1105_scan:
-    set_addr $I10, rxscan1105_loop
-    rx1101_cur."!mark_push"(0, rx1101_pos, $I10)
-  rxscan1105_done:
-.annotate 'line', 501
+.sub "prefix:sym<|>"  :subid("272_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1095_tgt
+    .local int rx1095_pos
+    .local int rx1095_off
+    .local int rx1095_eos
+    .local int rx1095_rep
+    .local pmc rx1095_cur
+    (rx1095_cur, rx1095_pos, rx1095_tgt) = self."!cursor_start"()
+    rx1095_cur."!cursor_debug"("START ", "prefix:sym<|>")
+    .lex unicode:"$\x{a2}", rx1095_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1095_eos, rx1095_tgt
+    gt rx1095_pos, rx1095_eos, rx1095_done
+    set rx1095_off, 0
+    lt rx1095_pos, 2, rx1095_start
+    sub rx1095_off, rx1095_pos, 1
+    substr rx1095_tgt, rx1095_tgt, rx1095_off
+  rx1095_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1099_done
+    goto rxscan1099_scan
+  rxscan1099_loop:
+    ($P10) = rx1095_cur."from"()
+    inc $P10
+    set rx1095_pos, $P10
+    ge rx1095_pos, rx1095_eos, rxscan1099_done
+  rxscan1099_scan:
+    set_addr $I10, rxscan1099_loop
+    rx1095_cur."!mark_push"(0, rx1095_pos, $I10)
+  rxscan1099_done:
+.annotate 'line', 504
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1106_fail
-    rx1101_cur."!mark_push"(0, rx1101_pos, $I10)
-  # rx literal  "!="
-    add $I11, rx1101_pos, 2
-    gt $I11, rx1101_eos, rx1101_fail
-    sub $I11, rx1101_pos, rx1101_off
-    substr $S10, rx1101_tgt, $I11, 2
-    ne $S10, "!=", rx1101_fail
-    add rx1101_pos, 2
-    set_addr $I10, rxcap_1106_fail
-    ($I12, $I11) = rx1101_cur."!mark_peek"($I10)
-    rx1101_cur."!cursor_pos"($I11)
-    ($P10) = rx1101_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1101_pos, "")
-    rx1101_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1100_fail
+    rx1095_cur."!mark_push"(0, rx1095_pos, $I10)
+  # rx literal  "|"
+    add $I11, rx1095_pos, 1
+    gt $I11, rx1095_eos, rx1095_fail
+    sub $I11, rx1095_pos, rx1095_off
+    substr $S10, rx1095_tgt, $I11, 1
+    ne $S10, "|", rx1095_fail
+    add rx1095_pos, 1
+    set_addr $I10, rxcap_1100_fail
+    ($I12, $I11) = rx1095_cur."!mark_peek"($I10)
+    rx1095_cur."!cursor_pos"($I11)
+    ($P10) = rx1095_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1095_pos, "")
+    rx1095_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1106_done
-  rxcap_1106_fail:
-    goto rx1101_fail
-  rxcap_1106_done:
+    goto rxcap_1100_done
+  rxcap_1100_fail:
+    goto rx1095_fail
+  rxcap_1100_done:
   # rx subrule "O" subtype=capture negate=
-    rx1101_cur."!cursor_pos"(rx1101_pos)
-    $P10 = rx1101_cur."O"("%relational, :pirop<isne INn>")
-    unless $P10, rx1101_fail
-    rx1101_cur."!mark_push"(0, -1, 0, $P10)
+    rx1095_cur."!cursor_pos"(rx1095_pos)
+    $P10 = rx1095_cur."O"("%symbolic_unary")
+    unless $P10, rx1095_fail
+    rx1095_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1101_pos = $P10."pos"()
+    rx1095_pos = $P10."pos"()
   # rx pass
-    rx1101_cur."!cursor_pass"(rx1101_pos, "infix:sym<!=>")
-    rx1101_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1101_pos)
-    .return (rx1101_cur)
-  rx1101_fail:
-.annotate 'line', 431
-    (rx1101_rep, rx1101_pos, $I10, $P10) = rx1101_cur."!mark_fail"(0)
-    lt rx1101_pos, -1, rx1101_done
-    eq rx1101_pos, -1, rx1101_fail
+    rx1095_cur."!cursor_pass"(rx1095_pos, "prefix:sym<|>")
+    rx1095_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1095_pos)
+    .return (rx1095_cur)
+  rx1095_fail:
+.annotate 'line', 446
+    (rx1095_rep, rx1095_pos, $I10, $P10) = rx1095_cur."!mark_fail"(0)
+    lt rx1095_pos, -1, rx1095_done
+    eq rx1095_pos, -1, rx1095_fail
     jump $I10
-  rx1101_done:
-    rx1101_cur."!cursor_fail"()
-    rx1101_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
-    .return (rx1101_cur)
+  rx1095_done:
+    rx1095_cur."!cursor_fail"()
+    rx1095_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
+    .return (rx1095_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<!=>"  :subid("278_1274022894.43745") :method
-.annotate 'line', 431
-    $P1103 = self."!PREFIX__!subrule"("O", "!=")
-    new $P1104, "ResizablePMCArray"
-    push $P1104, $P1103
-    .return ($P1104)
+.sub "!PREFIX__prefix:sym<|>"  :subid("273_1275811487.95429") :method
+.annotate 'line', 446
+    $P1097 = self."!PREFIX__!subrule"("O", "|")
+    new $P1098, "ResizablePMCArray"
+    push $P1098, $P1097
+    .return ($P1098)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<=>"  :subid("279_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1108_tgt
-    .local int rx1108_pos
-    .local int rx1108_off
-    .local int rx1108_eos
-    .local int rx1108_rep
-    .local pmc rx1108_cur
-    (rx1108_cur, rx1108_pos, rx1108_tgt) = self."!cursor_start"()
-    rx1108_cur."!cursor_debug"("START ", "infix:sym<<=>")
-    .lex unicode:"$\x{a2}", rx1108_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1108_eos, rx1108_tgt
-    set rx1108_off, 0
-    lt rx1108_pos, 2, rx1108_start
-    sub rx1108_off, rx1108_pos, 1
-    substr rx1108_tgt, rx1108_tgt, rx1108_off
-  rx1108_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1112_done
-    goto rxscan1112_scan
-  rxscan1112_loop:
-    ($P10) = rx1108_cur."from"()
-    inc $P10
-    set rx1108_pos, $P10
-    ge rx1108_pos, rx1108_eos, rxscan1112_done
-  rxscan1112_scan:
-    set_addr $I10, rxscan1112_loop
-    rx1108_cur."!mark_push"(0, rx1108_pos, $I10)
-  rxscan1112_done:
-.annotate 'line', 502
+.sub "infix:sym<*>"  :subid("274_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1102_tgt
+    .local int rx1102_pos
+    .local int rx1102_off
+    .local int rx1102_eos
+    .local int rx1102_rep
+    .local pmc rx1102_cur
+    (rx1102_cur, rx1102_pos, rx1102_tgt) = self."!cursor_start"()
+    rx1102_cur."!cursor_debug"("START ", "infix:sym<*>")
+    .lex unicode:"$\x{a2}", rx1102_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1102_eos, rx1102_tgt
+    gt rx1102_pos, rx1102_eos, rx1102_done
+    set rx1102_off, 0
+    lt rx1102_pos, 2, rx1102_start
+    sub rx1102_off, rx1102_pos, 1
+    substr rx1102_tgt, rx1102_tgt, rx1102_off
+  rx1102_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1106_done
+    goto rxscan1106_scan
+  rxscan1106_loop:
+    ($P10) = rx1102_cur."from"()
+    inc $P10
+    set rx1102_pos, $P10
+    ge rx1102_pos, rx1102_eos, rxscan1106_done
+  rxscan1106_scan:
+    set_addr $I10, rxscan1106_loop
+    rx1102_cur."!mark_push"(0, rx1102_pos, $I10)
+  rxscan1106_done:
+.annotate 'line', 506
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1113_fail
-    rx1108_cur."!mark_push"(0, rx1108_pos, $I10)
-  # rx literal  "<="
-    add $I11, rx1108_pos, 2
-    gt $I11, rx1108_eos, rx1108_fail
-    sub $I11, rx1108_pos, rx1108_off
-    substr $S10, rx1108_tgt, $I11, 2
-    ne $S10, "<=", rx1108_fail
-    add rx1108_pos, 2
-    set_addr $I10, rxcap_1113_fail
-    ($I12, $I11) = rx1108_cur."!mark_peek"($I10)
-    rx1108_cur."!cursor_pos"($I11)
-    ($P10) = rx1108_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1108_pos, "")
-    rx1108_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1107_fail
+    rx1102_cur."!mark_push"(0, rx1102_pos, $I10)
+  # rx literal  "*"
+    add $I11, rx1102_pos, 1
+    gt $I11, rx1102_eos, rx1102_fail
+    sub $I11, rx1102_pos, rx1102_off
+    substr $S10, rx1102_tgt, $I11, 1
+    ne $S10, "*", rx1102_fail
+    add rx1102_pos, 1
+    set_addr $I10, rxcap_1107_fail
+    ($I12, $I11) = rx1102_cur."!mark_peek"($I10)
+    rx1102_cur."!cursor_pos"($I11)
+    ($P10) = rx1102_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1102_pos, "")
+    rx1102_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1113_done
-  rxcap_1113_fail:
-    goto rx1108_fail
-  rxcap_1113_done:
+    goto rxcap_1107_done
+  rxcap_1107_fail:
+    goto rx1102_fail
+  rxcap_1107_done:
   # rx subrule "O" subtype=capture negate=
-    rx1108_cur."!cursor_pos"(rx1108_pos)
-    $P10 = rx1108_cur."O"("%relational, :pirop<isle INn>")
-    unless $P10, rx1108_fail
-    rx1108_cur."!mark_push"(0, -1, 0, $P10)
+    rx1102_cur."!cursor_pos"(rx1102_pos)
+    $P10 = rx1102_cur."O"("%multiplicative, :pirop<mul>")
+    unless $P10, rx1102_fail
+    rx1102_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1108_pos = $P10."pos"()
+    rx1102_pos = $P10."pos"()
   # rx pass
-    rx1108_cur."!cursor_pass"(rx1108_pos, "infix:sym<<=>")
-    rx1108_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1108_pos)
-    .return (rx1108_cur)
-  rx1108_fail:
-.annotate 'line', 431
-    (rx1108_rep, rx1108_pos, $I10, $P10) = rx1108_cur."!mark_fail"(0)
-    lt rx1108_pos, -1, rx1108_done
-    eq rx1108_pos, -1, rx1108_fail
+    rx1102_cur."!cursor_pass"(rx1102_pos, "infix:sym<*>")
+    rx1102_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1102_pos)
+    .return (rx1102_cur)
+  rx1102_fail:
+.annotate 'line', 446
+    (rx1102_rep, rx1102_pos, $I10, $P10) = rx1102_cur."!mark_fail"(0)
+    lt rx1102_pos, -1, rx1102_done
+    eq rx1102_pos, -1, rx1102_fail
     jump $I10
-  rx1108_done:
-    rx1108_cur."!cursor_fail"()
-    rx1108_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
-    .return (rx1108_cur)
+  rx1102_done:
+    rx1102_cur."!cursor_fail"()
+    rx1102_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
+    .return (rx1102_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<=>"  :subid("280_1274022894.43745") :method
-.annotate 'line', 431
-    $P1110 = self."!PREFIX__!subrule"("O", "<=")
-    new $P1111, "ResizablePMCArray"
-    push $P1111, $P1110
-    .return ($P1111)
+.sub "!PREFIX__infix:sym<*>"  :subid("275_1275811487.95429") :method
+.annotate 'line', 446
+    $P1104 = self."!PREFIX__!subrule"("O", "*")
+    new $P1105, "ResizablePMCArray"
+    push $P1105, $P1104
+    .return ($P1105)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>=>"  :subid("281_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1115_tgt
-    .local int rx1115_pos
-    .local int rx1115_off
-    .local int rx1115_eos
-    .local int rx1115_rep
-    .local pmc rx1115_cur
-    (rx1115_cur, rx1115_pos, rx1115_tgt) = self."!cursor_start"()
-    rx1115_cur."!cursor_debug"("START ", "infix:sym<>=>")
-    .lex unicode:"$\x{a2}", rx1115_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1115_eos, rx1115_tgt
-    set rx1115_off, 0
-    lt rx1115_pos, 2, rx1115_start
-    sub rx1115_off, rx1115_pos, 1
-    substr rx1115_tgt, rx1115_tgt, rx1115_off
-  rx1115_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1119_done
-    goto rxscan1119_scan
-  rxscan1119_loop:
-    ($P10) = rx1115_cur."from"()
-    inc $P10
-    set rx1115_pos, $P10
-    ge rx1115_pos, rx1115_eos, rxscan1119_done
-  rxscan1119_scan:
-    set_addr $I10, rxscan1119_loop
-    rx1115_cur."!mark_push"(0, rx1115_pos, $I10)
-  rxscan1119_done:
-.annotate 'line', 503
+.sub "infix:sym</>"  :subid("276_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1109_tgt
+    .local int rx1109_pos
+    .local int rx1109_off
+    .local int rx1109_eos
+    .local int rx1109_rep
+    .local pmc rx1109_cur
+    (rx1109_cur, rx1109_pos, rx1109_tgt) = self."!cursor_start"()
+    rx1109_cur."!cursor_debug"("START ", "infix:sym</>")
+    .lex unicode:"$\x{a2}", rx1109_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1109_eos, rx1109_tgt
+    gt rx1109_pos, rx1109_eos, rx1109_done
+    set rx1109_off, 0
+    lt rx1109_pos, 2, rx1109_start
+    sub rx1109_off, rx1109_pos, 1
+    substr rx1109_tgt, rx1109_tgt, rx1109_off
+  rx1109_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1113_done
+    goto rxscan1113_scan
+  rxscan1113_loop:
+    ($P10) = rx1109_cur."from"()
+    inc $P10
+    set rx1109_pos, $P10
+    ge rx1109_pos, rx1109_eos, rxscan1113_done
+  rxscan1113_scan:
+    set_addr $I10, rxscan1113_loop
+    rx1109_cur."!mark_push"(0, rx1109_pos, $I10)
+  rxscan1113_done:
+.annotate 'line', 507
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1120_fail
-    rx1115_cur."!mark_push"(0, rx1115_pos, $I10)
-  # rx literal  ">="
-    add $I11, rx1115_pos, 2
-    gt $I11, rx1115_eos, rx1115_fail
-    sub $I11, rx1115_pos, rx1115_off
-    substr $S10, rx1115_tgt, $I11, 2
-    ne $S10, ">=", rx1115_fail
-    add rx1115_pos, 2
-    set_addr $I10, rxcap_1120_fail
-    ($I12, $I11) = rx1115_cur."!mark_peek"($I10)
-    rx1115_cur."!cursor_pos"($I11)
-    ($P10) = rx1115_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1115_pos, "")
-    rx1115_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1114_fail
+    rx1109_cur."!mark_push"(0, rx1109_pos, $I10)
+  # rx literal  "/"
+    add $I11, rx1109_pos, 1
+    gt $I11, rx1109_eos, rx1109_fail
+    sub $I11, rx1109_pos, rx1109_off
+    substr $S10, rx1109_tgt, $I11, 1
+    ne $S10, "/", rx1109_fail
+    add rx1109_pos, 1
+    set_addr $I10, rxcap_1114_fail
+    ($I12, $I11) = rx1109_cur."!mark_peek"($I10)
+    rx1109_cur."!cursor_pos"($I11)
+    ($P10) = rx1109_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1109_pos, "")
+    rx1109_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1120_done
-  rxcap_1120_fail:
-    goto rx1115_fail
-  rxcap_1120_done:
+    goto rxcap_1114_done
+  rxcap_1114_fail:
+    goto rx1109_fail
+  rxcap_1114_done:
   # rx subrule "O" subtype=capture negate=
-    rx1115_cur."!cursor_pos"(rx1115_pos)
-    $P10 = rx1115_cur."O"("%relational, :pirop<isge INn>")
-    unless $P10, rx1115_fail
-    rx1115_cur."!mark_push"(0, -1, 0, $P10)
+    rx1109_cur."!cursor_pos"(rx1109_pos)
+    $P10 = rx1109_cur."O"("%multiplicative, :pirop<div>")
+    unless $P10, rx1109_fail
+    rx1109_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1115_pos = $P10."pos"()
+    rx1109_pos = $P10."pos"()
   # rx pass
-    rx1115_cur."!cursor_pass"(rx1115_pos, "infix:sym<>=>")
-    rx1115_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1115_pos)
-    .return (rx1115_cur)
-  rx1115_fail:
-.annotate 'line', 431
-    (rx1115_rep, rx1115_pos, $I10, $P10) = rx1115_cur."!mark_fail"(0)
-    lt rx1115_pos, -1, rx1115_done
-    eq rx1115_pos, -1, rx1115_fail
+    rx1109_cur."!cursor_pass"(rx1109_pos, "infix:sym</>")
+    rx1109_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1109_pos)
+    .return (rx1109_cur)
+  rx1109_fail:
+.annotate 'line', 446
+    (rx1109_rep, rx1109_pos, $I10, $P10) = rx1109_cur."!mark_fail"(0)
+    lt rx1109_pos, -1, rx1109_done
+    eq rx1109_pos, -1, rx1109_fail
     jump $I10
-  rx1115_done:
-    rx1115_cur."!cursor_fail"()
-    rx1115_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
-    .return (rx1115_cur)
+  rx1109_done:
+    rx1109_cur."!cursor_fail"()
+    rx1109_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
+    .return (rx1109_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>=>"  :subid("282_1274022894.43745") :method
-.annotate 'line', 431
-    $P1117 = self."!PREFIX__!subrule"("O", ">=")
-    new $P1118, "ResizablePMCArray"
-    push $P1118, $P1117
-    .return ($P1118)
+.sub "!PREFIX__infix:sym</>"  :subid("277_1275811487.95429") :method
+.annotate 'line', 446
+    $P1111 = self."!PREFIX__!subrule"("O", "/")
+    new $P1112, "ResizablePMCArray"
+    push $P1112, $P1111
+    .return ($P1112)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<>"  :subid("283_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1122_tgt
-    .local int rx1122_pos
-    .local int rx1122_off
-    .local int rx1122_eos
-    .local int rx1122_rep
-    .local pmc rx1122_cur
-    (rx1122_cur, rx1122_pos, rx1122_tgt) = self."!cursor_start"()
-    rx1122_cur."!cursor_debug"("START ", "infix:sym<<>")
-    .lex unicode:"$\x{a2}", rx1122_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1122_eos, rx1122_tgt
-    set rx1122_off, 0
-    lt rx1122_pos, 2, rx1122_start
-    sub rx1122_off, rx1122_pos, 1
-    substr rx1122_tgt, rx1122_tgt, rx1122_off
-  rx1122_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1126_done
-    goto rxscan1126_scan
-  rxscan1126_loop:
-    ($P10) = rx1122_cur."from"()
-    inc $P10
-    set rx1122_pos, $P10
-    ge rx1122_pos, rx1122_eos, rxscan1126_done
-  rxscan1126_scan:
-    set_addr $I10, rxscan1126_loop
-    rx1122_cur."!mark_push"(0, rx1122_pos, $I10)
-  rxscan1126_done:
-.annotate 'line', 504
+.sub "infix:sym<%>"  :subid("278_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1116_tgt
+    .local int rx1116_pos
+    .local int rx1116_off
+    .local int rx1116_eos
+    .local int rx1116_rep
+    .local pmc rx1116_cur
+    (rx1116_cur, rx1116_pos, rx1116_tgt) = self."!cursor_start"()
+    rx1116_cur."!cursor_debug"("START ", "infix:sym<%>")
+    .lex unicode:"$\x{a2}", rx1116_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1116_eos, rx1116_tgt
+    gt rx1116_pos, rx1116_eos, rx1116_done
+    set rx1116_off, 0
+    lt rx1116_pos, 2, rx1116_start
+    sub rx1116_off, rx1116_pos, 1
+    substr rx1116_tgt, rx1116_tgt, rx1116_off
+  rx1116_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1120_done
+    goto rxscan1120_scan
+  rxscan1120_loop:
+    ($P10) = rx1116_cur."from"()
+    inc $P10
+    set rx1116_pos, $P10
+    ge rx1116_pos, rx1116_eos, rxscan1120_done
+  rxscan1120_scan:
+    set_addr $I10, rxscan1120_loop
+    rx1116_cur."!mark_push"(0, rx1116_pos, $I10)
+  rxscan1120_done:
+.annotate 'line', 508
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1127_fail
-    rx1122_cur."!mark_push"(0, rx1122_pos, $I10)
-  # rx literal  "<"
-    add $I11, rx1122_pos, 1
-    gt $I11, rx1122_eos, rx1122_fail
-    sub $I11, rx1122_pos, rx1122_off
-    substr $S10, rx1122_tgt, $I11, 1
-    ne $S10, "<", rx1122_fail
-    add rx1122_pos, 1
-    set_addr $I10, rxcap_1127_fail
-    ($I12, $I11) = rx1122_cur."!mark_peek"($I10)
-    rx1122_cur."!cursor_pos"($I11)
-    ($P10) = rx1122_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1122_pos, "")
-    rx1122_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1121_fail
+    rx1116_cur."!mark_push"(0, rx1116_pos, $I10)
+  # rx literal  "%"
+    add $I11, rx1116_pos, 1
+    gt $I11, rx1116_eos, rx1116_fail
+    sub $I11, rx1116_pos, rx1116_off
+    substr $S10, rx1116_tgt, $I11, 1
+    ne $S10, "%", rx1116_fail
+    add rx1116_pos, 1
+    set_addr $I10, rxcap_1121_fail
+    ($I12, $I11) = rx1116_cur."!mark_peek"($I10)
+    rx1116_cur."!cursor_pos"($I11)
+    ($P10) = rx1116_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1116_pos, "")
+    rx1116_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1127_done
-  rxcap_1127_fail:
-    goto rx1122_fail
-  rxcap_1127_done:
+    goto rxcap_1121_done
+  rxcap_1121_fail:
+    goto rx1116_fail
+  rxcap_1121_done:
   # rx subrule "O" subtype=capture negate=
-    rx1122_cur."!cursor_pos"(rx1122_pos)
-    $P10 = rx1122_cur."O"("%relational, :pirop<islt INn>")
-    unless $P10, rx1122_fail
-    rx1122_cur."!mark_push"(0, -1, 0, $P10)
+    rx1116_cur."!cursor_pos"(rx1116_pos)
+    $P10 = rx1116_cur."O"("%multiplicative, :pirop<mod>")
+    unless $P10, rx1116_fail
+    rx1116_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1122_pos = $P10."pos"()
+    rx1116_pos = $P10."pos"()
   # rx pass
-    rx1122_cur."!cursor_pass"(rx1122_pos, "infix:sym<<>")
-    rx1122_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1122_pos)
-    .return (rx1122_cur)
-  rx1122_fail:
-.annotate 'line', 431
-    (rx1122_rep, rx1122_pos, $I10, $P10) = rx1122_cur."!mark_fail"(0)
-    lt rx1122_pos, -1, rx1122_done
-    eq rx1122_pos, -1, rx1122_fail
+    rx1116_cur."!cursor_pass"(rx1116_pos, "infix:sym<%>")
+    rx1116_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1116_pos)
+    .return (rx1116_cur)
+  rx1116_fail:
+.annotate 'line', 446
+    (rx1116_rep, rx1116_pos, $I10, $P10) = rx1116_cur."!mark_fail"(0)
+    lt rx1116_pos, -1, rx1116_done
+    eq rx1116_pos, -1, rx1116_fail
     jump $I10
-  rx1122_done:
-    rx1122_cur."!cursor_fail"()
-    rx1122_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
-    .return (rx1122_cur)
+  rx1116_done:
+    rx1116_cur."!cursor_fail"()
+    rx1116_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
+    .return (rx1116_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<>"  :subid("284_1274022894.43745") :method
-.annotate 'line', 431
-    $P1124 = self."!PREFIX__!subrule"("O", "<")
-    new $P1125, "ResizablePMCArray"
-    push $P1125, $P1124
-    .return ($P1125)
+.sub "!PREFIX__infix:sym<%>"  :subid("279_1275811487.95429") :method
+.annotate 'line', 446
+    $P1118 = self."!PREFIX__!subrule"("O", "%")
+    new $P1119, "ResizablePMCArray"
+    push $P1119, $P1118
+    .return ($P1119)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>>"  :subid("285_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1129_tgt
-    .local int rx1129_pos
-    .local int rx1129_off
-    .local int rx1129_eos
-    .local int rx1129_rep
-    .local pmc rx1129_cur
-    (rx1129_cur, rx1129_pos, rx1129_tgt) = self."!cursor_start"()
-    rx1129_cur."!cursor_debug"("START ", "infix:sym<>>")
-    .lex unicode:"$\x{a2}", rx1129_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1129_eos, rx1129_tgt
-    set rx1129_off, 0
-    lt rx1129_pos, 2, rx1129_start
-    sub rx1129_off, rx1129_pos, 1
-    substr rx1129_tgt, rx1129_tgt, rx1129_off
-  rx1129_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1133_done
-    goto rxscan1133_scan
-  rxscan1133_loop:
-    ($P10) = rx1129_cur."from"()
-    inc $P10
-    set rx1129_pos, $P10
-    ge rx1129_pos, rx1129_eos, rxscan1133_done
-  rxscan1133_scan:
-    set_addr $I10, rxscan1133_loop
-    rx1129_cur."!mark_push"(0, rx1129_pos, $I10)
-  rxscan1133_done:
-.annotate 'line', 505
+.sub "infix:sym<+>"  :subid("280_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1123_tgt
+    .local int rx1123_pos
+    .local int rx1123_off
+    .local int rx1123_eos
+    .local int rx1123_rep
+    .local pmc rx1123_cur
+    (rx1123_cur, rx1123_pos, rx1123_tgt) = self."!cursor_start"()
+    rx1123_cur."!cursor_debug"("START ", "infix:sym<+>")
+    .lex unicode:"$\x{a2}", rx1123_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1123_eos, rx1123_tgt
+    gt rx1123_pos, rx1123_eos, rx1123_done
+    set rx1123_off, 0
+    lt rx1123_pos, 2, rx1123_start
+    sub rx1123_off, rx1123_pos, 1
+    substr rx1123_tgt, rx1123_tgt, rx1123_off
+  rx1123_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1127_done
+    goto rxscan1127_scan
+  rxscan1127_loop:
+    ($P10) = rx1123_cur."from"()
+    inc $P10
+    set rx1123_pos, $P10
+    ge rx1123_pos, rx1123_eos, rxscan1127_done
+  rxscan1127_scan:
+    set_addr $I10, rxscan1127_loop
+    rx1123_cur."!mark_push"(0, rx1123_pos, $I10)
+  rxscan1127_done:
+.annotate 'line', 510
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1134_fail
-    rx1129_cur."!mark_push"(0, rx1129_pos, $I10)
-  # rx literal  ">"
-    add $I11, rx1129_pos, 1
-    gt $I11, rx1129_eos, rx1129_fail
-    sub $I11, rx1129_pos, rx1129_off
-    substr $S10, rx1129_tgt, $I11, 1
-    ne $S10, ">", rx1129_fail
-    add rx1129_pos, 1
-    set_addr $I10, rxcap_1134_fail
-    ($I12, $I11) = rx1129_cur."!mark_peek"($I10)
-    rx1129_cur."!cursor_pos"($I11)
-    ($P10) = rx1129_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1129_pos, "")
-    rx1129_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1128_fail
+    rx1123_cur."!mark_push"(0, rx1123_pos, $I10)
+  # rx literal  "+"
+    add $I11, rx1123_pos, 1
+    gt $I11, rx1123_eos, rx1123_fail
+    sub $I11, rx1123_pos, rx1123_off
+    substr $S10, rx1123_tgt, $I11, 1
+    ne $S10, "+", rx1123_fail
+    add rx1123_pos, 1
+    set_addr $I10, rxcap_1128_fail
+    ($I12, $I11) = rx1123_cur."!mark_peek"($I10)
+    rx1123_cur."!cursor_pos"($I11)
+    ($P10) = rx1123_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1123_pos, "")
+    rx1123_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1134_done
-  rxcap_1134_fail:
-    goto rx1129_fail
-  rxcap_1134_done:
+    goto rxcap_1128_done
+  rxcap_1128_fail:
+    goto rx1123_fail
+  rxcap_1128_done:
   # rx subrule "O" subtype=capture negate=
-    rx1129_cur."!cursor_pos"(rx1129_pos)
-    $P10 = rx1129_cur."O"("%relational, :pirop<isgt INn>")
-    unless $P10, rx1129_fail
-    rx1129_cur."!mark_push"(0, -1, 0, $P10)
+    rx1123_cur."!cursor_pos"(rx1123_pos)
+    $P10 = rx1123_cur."O"("%additive, :pirop<add>")
+    unless $P10, rx1123_fail
+    rx1123_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1129_pos = $P10."pos"()
+    rx1123_pos = $P10."pos"()
   # rx pass
-    rx1129_cur."!cursor_pass"(rx1129_pos, "infix:sym<>>")
-    rx1129_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1129_pos)
-    .return (rx1129_cur)
-  rx1129_fail:
-.annotate 'line', 431
-    (rx1129_rep, rx1129_pos, $I10, $P10) = rx1129_cur."!mark_fail"(0)
-    lt rx1129_pos, -1, rx1129_done
-    eq rx1129_pos, -1, rx1129_fail
+    rx1123_cur."!cursor_pass"(rx1123_pos, "infix:sym<+>")
+    rx1123_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1123_pos)
+    .return (rx1123_cur)
+  rx1123_fail:
+.annotate 'line', 446
+    (rx1123_rep, rx1123_pos, $I10, $P10) = rx1123_cur."!mark_fail"(0)
+    lt rx1123_pos, -1, rx1123_done
+    eq rx1123_pos, -1, rx1123_fail
     jump $I10
-  rx1129_done:
-    rx1129_cur."!cursor_fail"()
-    rx1129_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
-    .return (rx1129_cur)
+  rx1123_done:
+    rx1123_cur."!cursor_fail"()
+    rx1123_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
+    .return (rx1123_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>>"  :subid("286_1274022894.43745") :method
-.annotate 'line', 431
-    $P1131 = self."!PREFIX__!subrule"("O", ">")
-    new $P1132, "ResizablePMCArray"
-    push $P1132, $P1131
-    .return ($P1132)
+.sub "!PREFIX__infix:sym<+>"  :subid("281_1275811487.95429") :method
+.annotate 'line', 446
+    $P1125 = self."!PREFIX__!subrule"("O", "+")
+    new $P1126, "ResizablePMCArray"
+    push $P1126, $P1125
+    .return ($P1126)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<eq>"  :subid("287_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1136_tgt
-    .local int rx1136_pos
-    .local int rx1136_off
-    .local int rx1136_eos
-    .local int rx1136_rep
-    .local pmc rx1136_cur
-    (rx1136_cur, rx1136_pos, rx1136_tgt) = self."!cursor_start"()
-    rx1136_cur."!cursor_debug"("START ", "infix:sym<eq>")
-    .lex unicode:"$\x{a2}", rx1136_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1136_eos, rx1136_tgt
-    set rx1136_off, 0
-    lt rx1136_pos, 2, rx1136_start
-    sub rx1136_off, rx1136_pos, 1
-    substr rx1136_tgt, rx1136_tgt, rx1136_off
-  rx1136_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1140_done
-    goto rxscan1140_scan
-  rxscan1140_loop:
-    ($P10) = rx1136_cur."from"()
-    inc $P10
-    set rx1136_pos, $P10
-    ge rx1136_pos, rx1136_eos, rxscan1140_done
-  rxscan1140_scan:
-    set_addr $I10, rxscan1140_loop
-    rx1136_cur."!mark_push"(0, rx1136_pos, $I10)
-  rxscan1140_done:
-.annotate 'line', 506
+.sub "infix:sym<->"  :subid("282_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1130_tgt
+    .local int rx1130_pos
+    .local int rx1130_off
+    .local int rx1130_eos
+    .local int rx1130_rep
+    .local pmc rx1130_cur
+    (rx1130_cur, rx1130_pos, rx1130_tgt) = self."!cursor_start"()
+    rx1130_cur."!cursor_debug"("START ", "infix:sym<->")
+    .lex unicode:"$\x{a2}", rx1130_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1130_eos, rx1130_tgt
+    gt rx1130_pos, rx1130_eos, rx1130_done
+    set rx1130_off, 0
+    lt rx1130_pos, 2, rx1130_start
+    sub rx1130_off, rx1130_pos, 1
+    substr rx1130_tgt, rx1130_tgt, rx1130_off
+  rx1130_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1134_done
+    goto rxscan1134_scan
+  rxscan1134_loop:
+    ($P10) = rx1130_cur."from"()
+    inc $P10
+    set rx1130_pos, $P10
+    ge rx1130_pos, rx1130_eos, rxscan1134_done
+  rxscan1134_scan:
+    set_addr $I10, rxscan1134_loop
+    rx1130_cur."!mark_push"(0, rx1130_pos, $I10)
+  rxscan1134_done:
+.annotate 'line', 511
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1141_fail
-    rx1136_cur."!mark_push"(0, rx1136_pos, $I10)
-  # rx literal  "eq"
-    add $I11, rx1136_pos, 2
-    gt $I11, rx1136_eos, rx1136_fail
-    sub $I11, rx1136_pos, rx1136_off
-    substr $S10, rx1136_tgt, $I11, 2
-    ne $S10, "eq", rx1136_fail
-    add rx1136_pos, 2
-    set_addr $I10, rxcap_1141_fail
-    ($I12, $I11) = rx1136_cur."!mark_peek"($I10)
-    rx1136_cur."!cursor_pos"($I11)
-    ($P10) = rx1136_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1136_pos, "")
-    rx1136_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1135_fail
+    rx1130_cur."!mark_push"(0, rx1130_pos, $I10)
+  # rx literal  "-"
+    add $I11, rx1130_pos, 1
+    gt $I11, rx1130_eos, rx1130_fail
+    sub $I11, rx1130_pos, rx1130_off
+    substr $S10, rx1130_tgt, $I11, 1
+    ne $S10, "-", rx1130_fail
+    add rx1130_pos, 1
+    set_addr $I10, rxcap_1135_fail
+    ($I12, $I11) = rx1130_cur."!mark_peek"($I10)
+    rx1130_cur."!cursor_pos"($I11)
+    ($P10) = rx1130_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1130_pos, "")
+    rx1130_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1141_done
-  rxcap_1141_fail:
-    goto rx1136_fail
-  rxcap_1141_done:
+    goto rxcap_1135_done
+  rxcap_1135_fail:
+    goto rx1130_fail
+  rxcap_1135_done:
   # rx subrule "O" subtype=capture negate=
-    rx1136_cur."!cursor_pos"(rx1136_pos)
-    $P10 = rx1136_cur."O"("%relational, :pirop<iseq ISs>")
-    unless $P10, rx1136_fail
-    rx1136_cur."!mark_push"(0, -1, 0, $P10)
+    rx1130_cur."!cursor_pos"(rx1130_pos)
+    $P10 = rx1130_cur."O"("%additive, :pirop<sub>")
+    unless $P10, rx1130_fail
+    rx1130_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1136_pos = $P10."pos"()
+    rx1130_pos = $P10."pos"()
   # rx pass
-    rx1136_cur."!cursor_pass"(rx1136_pos, "infix:sym<eq>")
-    rx1136_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1136_pos)
-    .return (rx1136_cur)
-  rx1136_fail:
-.annotate 'line', 431
-    (rx1136_rep, rx1136_pos, $I10, $P10) = rx1136_cur."!mark_fail"(0)
-    lt rx1136_pos, -1, rx1136_done
-    eq rx1136_pos, -1, rx1136_fail
+    rx1130_cur."!cursor_pass"(rx1130_pos, "infix:sym<->")
+    rx1130_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1130_pos)
+    .return (rx1130_cur)
+  rx1130_fail:
+.annotate 'line', 446
+    (rx1130_rep, rx1130_pos, $I10, $P10) = rx1130_cur."!mark_fail"(0)
+    lt rx1130_pos, -1, rx1130_done
+    eq rx1130_pos, -1, rx1130_fail
     jump $I10
-  rx1136_done:
-    rx1136_cur."!cursor_fail"()
-    rx1136_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
-    .return (rx1136_cur)
+  rx1130_done:
+    rx1130_cur."!cursor_fail"()
+    rx1130_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
+    .return (rx1130_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<eq>"  :subid("288_1274022894.43745") :method
-.annotate 'line', 431
-    $P1138 = self."!PREFIX__!subrule"("O", "eq")
-    new $P1139, "ResizablePMCArray"
-    push $P1139, $P1138
-    .return ($P1139)
+.sub "!PREFIX__infix:sym<->"  :subid("283_1275811487.95429") :method
+.annotate 'line', 446
+    $P1132 = self."!PREFIX__!subrule"("O", "-")
+    new $P1133, "ResizablePMCArray"
+    push $P1133, $P1132
+    .return ($P1133)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ne>"  :subid("289_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1143_tgt
-    .local int rx1143_pos
-    .local int rx1143_off
-    .local int rx1143_eos
-    .local int rx1143_rep
-    .local pmc rx1143_cur
-    (rx1143_cur, rx1143_pos, rx1143_tgt) = self."!cursor_start"()
-    rx1143_cur."!cursor_debug"("START ", "infix:sym<ne>")
-    .lex unicode:"$\x{a2}", rx1143_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1143_eos, rx1143_tgt
-    set rx1143_off, 0
-    lt rx1143_pos, 2, rx1143_start
-    sub rx1143_off, rx1143_pos, 1
-    substr rx1143_tgt, rx1143_tgt, rx1143_off
-  rx1143_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1147_done
-    goto rxscan1147_scan
-  rxscan1147_loop:
-    ($P10) = rx1143_cur."from"()
-    inc $P10
-    set rx1143_pos, $P10
-    ge rx1143_pos, rx1143_eos, rxscan1147_done
-  rxscan1147_scan:
-    set_addr $I10, rxscan1147_loop
-    rx1143_cur."!mark_push"(0, rx1143_pos, $I10)
-  rxscan1147_done:
-.annotate 'line', 507
+.sub "infix:sym<~>"  :subid("284_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1137_tgt
+    .local int rx1137_pos
+    .local int rx1137_off
+    .local int rx1137_eos
+    .local int rx1137_rep
+    .local pmc rx1137_cur
+    (rx1137_cur, rx1137_pos, rx1137_tgt) = self."!cursor_start"()
+    rx1137_cur."!cursor_debug"("START ", "infix:sym<~>")
+    .lex unicode:"$\x{a2}", rx1137_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1137_eos, rx1137_tgt
+    gt rx1137_pos, rx1137_eos, rx1137_done
+    set rx1137_off, 0
+    lt rx1137_pos, 2, rx1137_start
+    sub rx1137_off, rx1137_pos, 1
+    substr rx1137_tgt, rx1137_tgt, rx1137_off
+  rx1137_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1141_done
+    goto rxscan1141_scan
+  rxscan1141_loop:
+    ($P10) = rx1137_cur."from"()
+    inc $P10
+    set rx1137_pos, $P10
+    ge rx1137_pos, rx1137_eos, rxscan1141_done
+  rxscan1141_scan:
+    set_addr $I10, rxscan1141_loop
+    rx1137_cur."!mark_push"(0, rx1137_pos, $I10)
+  rxscan1141_done:
+.annotate 'line', 513
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1148_fail
-    rx1143_cur."!mark_push"(0, rx1143_pos, $I10)
-  # rx literal  "ne"
-    add $I11, rx1143_pos, 2
-    gt $I11, rx1143_eos, rx1143_fail
-    sub $I11, rx1143_pos, rx1143_off
-    substr $S10, rx1143_tgt, $I11, 2
-    ne $S10, "ne", rx1143_fail
-    add rx1143_pos, 2
-    set_addr $I10, rxcap_1148_fail
-    ($I12, $I11) = rx1143_cur."!mark_peek"($I10)
-    rx1143_cur."!cursor_pos"($I11)
-    ($P10) = rx1143_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1143_pos, "")
-    rx1143_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1142_fail
+    rx1137_cur."!mark_push"(0, rx1137_pos, $I10)
+  # rx literal  "~"
+    add $I11, rx1137_pos, 1
+    gt $I11, rx1137_eos, rx1137_fail
+    sub $I11, rx1137_pos, rx1137_off
+    substr $S10, rx1137_tgt, $I11, 1
+    ne $S10, "~", rx1137_fail
+    add rx1137_pos, 1
+    set_addr $I10, rxcap_1142_fail
+    ($I12, $I11) = rx1137_cur."!mark_peek"($I10)
+    rx1137_cur."!cursor_pos"($I11)
+    ($P10) = rx1137_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1137_pos, "")
+    rx1137_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1148_done
-  rxcap_1148_fail:
-    goto rx1143_fail
-  rxcap_1148_done:
+    goto rxcap_1142_done
+  rxcap_1142_fail:
+    goto rx1137_fail
+  rxcap_1142_done:
   # rx subrule "O" subtype=capture negate=
-    rx1143_cur."!cursor_pos"(rx1143_pos)
-    $P10 = rx1143_cur."O"("%relational, :pirop<isne ISs>")
-    unless $P10, rx1143_fail
-    rx1143_cur."!mark_push"(0, -1, 0, $P10)
+    rx1137_cur."!cursor_pos"(rx1137_pos)
+    $P10 = rx1137_cur."O"("%concatenation , :pirop<concat>")
+    unless $P10, rx1137_fail
+    rx1137_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1143_pos = $P10."pos"()
+    rx1137_pos = $P10."pos"()
   # rx pass
-    rx1143_cur."!cursor_pass"(rx1143_pos, "infix:sym<ne>")
-    rx1143_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1143_pos)
-    .return (rx1143_cur)
-  rx1143_fail:
-.annotate 'line', 431
-    (rx1143_rep, rx1143_pos, $I10, $P10) = rx1143_cur."!mark_fail"(0)
-    lt rx1143_pos, -1, rx1143_done
-    eq rx1143_pos, -1, rx1143_fail
+    rx1137_cur."!cursor_pass"(rx1137_pos, "infix:sym<~>")
+    rx1137_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1137_pos)
+    .return (rx1137_cur)
+  rx1137_fail:
+.annotate 'line', 446
+    (rx1137_rep, rx1137_pos, $I10, $P10) = rx1137_cur."!mark_fail"(0)
+    lt rx1137_pos, -1, rx1137_done
+    eq rx1137_pos, -1, rx1137_fail
     jump $I10
-  rx1143_done:
-    rx1143_cur."!cursor_fail"()
-    rx1143_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
-    .return (rx1143_cur)
+  rx1137_done:
+    rx1137_cur."!cursor_fail"()
+    rx1137_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
+    .return (rx1137_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ne>"  :subid("290_1274022894.43745") :method
-.annotate 'line', 431
-    $P1145 = self."!PREFIX__!subrule"("O", "ne")
-    new $P1146, "ResizablePMCArray"
-    push $P1146, $P1145
-    .return ($P1146)
+.sub "!PREFIX__infix:sym<~>"  :subid("285_1275811487.95429") :method
+.annotate 'line', 446
+    $P1139 = self."!PREFIX__!subrule"("O", "~")
+    new $P1140, "ResizablePMCArray"
+    push $P1140, $P1139
+    .return ($P1140)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<le>"  :subid("291_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1150_tgt
-    .local int rx1150_pos
-    .local int rx1150_off
-    .local int rx1150_eos
-    .local int rx1150_rep
-    .local pmc rx1150_cur
-    (rx1150_cur, rx1150_pos, rx1150_tgt) = self."!cursor_start"()
-    rx1150_cur."!cursor_debug"("START ", "infix:sym<le>")
-    .lex unicode:"$\x{a2}", rx1150_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1150_eos, rx1150_tgt
-    set rx1150_off, 0
-    lt rx1150_pos, 2, rx1150_start
-    sub rx1150_off, rx1150_pos, 1
-    substr rx1150_tgt, rx1150_tgt, rx1150_off
-  rx1150_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1154_done
-    goto rxscan1154_scan
-  rxscan1154_loop:
-    ($P10) = rx1150_cur."from"()
-    inc $P10
-    set rx1150_pos, $P10
-    ge rx1150_pos, rx1150_eos, rxscan1154_done
-  rxscan1154_scan:
-    set_addr $I10, rxscan1154_loop
-    rx1150_cur."!mark_push"(0, rx1150_pos, $I10)
-  rxscan1154_done:
-.annotate 'line', 508
+.sub "infix:sym<==>"  :subid("286_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1144_tgt
+    .local int rx1144_pos
+    .local int rx1144_off
+    .local int rx1144_eos
+    .local int rx1144_rep
+    .local pmc rx1144_cur
+    (rx1144_cur, rx1144_pos, rx1144_tgt) = self."!cursor_start"()
+    rx1144_cur."!cursor_debug"("START ", "infix:sym<==>")
+    .lex unicode:"$\x{a2}", rx1144_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1144_eos, rx1144_tgt
+    gt rx1144_pos, rx1144_eos, rx1144_done
+    set rx1144_off, 0
+    lt rx1144_pos, 2, rx1144_start
+    sub rx1144_off, rx1144_pos, 1
+    substr rx1144_tgt, rx1144_tgt, rx1144_off
+  rx1144_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1148_done
+    goto rxscan1148_scan
+  rxscan1148_loop:
+    ($P10) = rx1144_cur."from"()
+    inc $P10
+    set rx1144_pos, $P10
+    ge rx1144_pos, rx1144_eos, rxscan1148_done
+  rxscan1148_scan:
+    set_addr $I10, rxscan1148_loop
+    rx1144_cur."!mark_push"(0, rx1144_pos, $I10)
+  rxscan1148_done:
+.annotate 'line', 515
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1155_fail
-    rx1150_cur."!mark_push"(0, rx1150_pos, $I10)
-  # rx literal  "le"
-    add $I11, rx1150_pos, 2
-    gt $I11, rx1150_eos, rx1150_fail
-    sub $I11, rx1150_pos, rx1150_off
-    substr $S10, rx1150_tgt, $I11, 2
-    ne $S10, "le", rx1150_fail
-    add rx1150_pos, 2
-    set_addr $I10, rxcap_1155_fail
-    ($I12, $I11) = rx1150_cur."!mark_peek"($I10)
-    rx1150_cur."!cursor_pos"($I11)
-    ($P10) = rx1150_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1150_pos, "")
-    rx1150_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1149_fail
+    rx1144_cur."!mark_push"(0, rx1144_pos, $I10)
+  # rx literal  "=="
+    add $I11, rx1144_pos, 2
+    gt $I11, rx1144_eos, rx1144_fail
+    sub $I11, rx1144_pos, rx1144_off
+    substr $S10, rx1144_tgt, $I11, 2
+    ne $S10, "==", rx1144_fail
+    add rx1144_pos, 2
+    set_addr $I10, rxcap_1149_fail
+    ($I12, $I11) = rx1144_cur."!mark_peek"($I10)
+    rx1144_cur."!cursor_pos"($I11)
+    ($P10) = rx1144_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1144_pos, "")
+    rx1144_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1155_done
-  rxcap_1155_fail:
-    goto rx1150_fail
-  rxcap_1155_done:
+    goto rxcap_1149_done
+  rxcap_1149_fail:
+    goto rx1144_fail
+  rxcap_1149_done:
   # rx subrule "O" subtype=capture negate=
-    rx1150_cur."!cursor_pos"(rx1150_pos)
-    $P10 = rx1150_cur."O"("%relational, :pirop<isle ISs>")
-    unless $P10, rx1150_fail
-    rx1150_cur."!mark_push"(0, -1, 0, $P10)
+    rx1144_cur."!cursor_pos"(rx1144_pos)
+    $P10 = rx1144_cur."O"("%relational, :pirop<iseq INn>")
+    unless $P10, rx1144_fail
+    rx1144_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1150_pos = $P10."pos"()
+    rx1144_pos = $P10."pos"()
   # rx pass
-    rx1150_cur."!cursor_pass"(rx1150_pos, "infix:sym<le>")
-    rx1150_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1150_pos)
-    .return (rx1150_cur)
-  rx1150_fail:
-.annotate 'line', 431
-    (rx1150_rep, rx1150_pos, $I10, $P10) = rx1150_cur."!mark_fail"(0)
-    lt rx1150_pos, -1, rx1150_done
-    eq rx1150_pos, -1, rx1150_fail
+    rx1144_cur."!cursor_pass"(rx1144_pos, "infix:sym<==>")
+    rx1144_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1144_pos)
+    .return (rx1144_cur)
+  rx1144_fail:
+.annotate 'line', 446
+    (rx1144_rep, rx1144_pos, $I10, $P10) = rx1144_cur."!mark_fail"(0)
+    lt rx1144_pos, -1, rx1144_done
+    eq rx1144_pos, -1, rx1144_fail
     jump $I10
-  rx1150_done:
-    rx1150_cur."!cursor_fail"()
-    rx1150_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
-    .return (rx1150_cur)
+  rx1144_done:
+    rx1144_cur."!cursor_fail"()
+    rx1144_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
+    .return (rx1144_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<le>"  :subid("292_1274022894.43745") :method
-.annotate 'line', 431
-    $P1152 = self."!PREFIX__!subrule"("O", "le")
-    new $P1153, "ResizablePMCArray"
-    push $P1153, $P1152
-    .return ($P1153)
+.sub "!PREFIX__infix:sym<==>"  :subid("287_1275811487.95429") :method
+.annotate 'line', 446
+    $P1146 = self."!PREFIX__!subrule"("O", "==")
+    new $P1147, "ResizablePMCArray"
+    push $P1147, $P1146
+    .return ($P1147)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ge>"  :subid("293_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1157_tgt
-    .local int rx1157_pos
-    .local int rx1157_off
-    .local int rx1157_eos
-    .local int rx1157_rep
-    .local pmc rx1157_cur
-    (rx1157_cur, rx1157_pos, rx1157_tgt) = self."!cursor_start"()
-    rx1157_cur."!cursor_debug"("START ", "infix:sym<ge>")
-    .lex unicode:"$\x{a2}", rx1157_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1157_eos, rx1157_tgt
-    set rx1157_off, 0
-    lt rx1157_pos, 2, rx1157_start
-    sub rx1157_off, rx1157_pos, 1
-    substr rx1157_tgt, rx1157_tgt, rx1157_off
-  rx1157_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1161_done
-    goto rxscan1161_scan
-  rxscan1161_loop:
-    ($P10) = rx1157_cur."from"()
-    inc $P10
-    set rx1157_pos, $P10
-    ge rx1157_pos, rx1157_eos, rxscan1161_done
-  rxscan1161_scan:
-    set_addr $I10, rxscan1161_loop
-    rx1157_cur."!mark_push"(0, rx1157_pos, $I10)
-  rxscan1161_done:
-.annotate 'line', 509
+.sub "infix:sym<!=>"  :subid("288_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1151_tgt
+    .local int rx1151_pos
+    .local int rx1151_off
+    .local int rx1151_eos
+    .local int rx1151_rep
+    .local pmc rx1151_cur
+    (rx1151_cur, rx1151_pos, rx1151_tgt) = self."!cursor_start"()
+    rx1151_cur."!cursor_debug"("START ", "infix:sym<!=>")
+    .lex unicode:"$\x{a2}", rx1151_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1151_eos, rx1151_tgt
+    gt rx1151_pos, rx1151_eos, rx1151_done
+    set rx1151_off, 0
+    lt rx1151_pos, 2, rx1151_start
+    sub rx1151_off, rx1151_pos, 1
+    substr rx1151_tgt, rx1151_tgt, rx1151_off
+  rx1151_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1155_done
+    goto rxscan1155_scan
+  rxscan1155_loop:
+    ($P10) = rx1151_cur."from"()
+    inc $P10
+    set rx1151_pos, $P10
+    ge rx1151_pos, rx1151_eos, rxscan1155_done
+  rxscan1155_scan:
+    set_addr $I10, rxscan1155_loop
+    rx1151_cur."!mark_push"(0, rx1151_pos, $I10)
+  rxscan1155_done:
+.annotate 'line', 516
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1162_fail
-    rx1157_cur."!mark_push"(0, rx1157_pos, $I10)
-  # rx literal  "ge"
-    add $I11, rx1157_pos, 2
-    gt $I11, rx1157_eos, rx1157_fail
-    sub $I11, rx1157_pos, rx1157_off
-    substr $S10, rx1157_tgt, $I11, 2
-    ne $S10, "ge", rx1157_fail
-    add rx1157_pos, 2
-    set_addr $I10, rxcap_1162_fail
-    ($I12, $I11) = rx1157_cur."!mark_peek"($I10)
-    rx1157_cur."!cursor_pos"($I11)
-    ($P10) = rx1157_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1157_pos, "")
-    rx1157_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1156_fail
+    rx1151_cur."!mark_push"(0, rx1151_pos, $I10)
+  # rx literal  "!="
+    add $I11, rx1151_pos, 2
+    gt $I11, rx1151_eos, rx1151_fail
+    sub $I11, rx1151_pos, rx1151_off
+    substr $S10, rx1151_tgt, $I11, 2
+    ne $S10, "!=", rx1151_fail
+    add rx1151_pos, 2
+    set_addr $I10, rxcap_1156_fail
+    ($I12, $I11) = rx1151_cur."!mark_peek"($I10)
+    rx1151_cur."!cursor_pos"($I11)
+    ($P10) = rx1151_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1151_pos, "")
+    rx1151_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1162_done
-  rxcap_1162_fail:
-    goto rx1157_fail
-  rxcap_1162_done:
+    goto rxcap_1156_done
+  rxcap_1156_fail:
+    goto rx1151_fail
+  rxcap_1156_done:
   # rx subrule "O" subtype=capture negate=
-    rx1157_cur."!cursor_pos"(rx1157_pos)
-    $P10 = rx1157_cur."O"("%relational, :pirop<isge ISs>")
-    unless $P10, rx1157_fail
-    rx1157_cur."!mark_push"(0, -1, 0, $P10)
+    rx1151_cur."!cursor_pos"(rx1151_pos)
+    $P10 = rx1151_cur."O"("%relational, :pirop<isne INn>")
+    unless $P10, rx1151_fail
+    rx1151_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1157_pos = $P10."pos"()
+    rx1151_pos = $P10."pos"()
   # rx pass
-    rx1157_cur."!cursor_pass"(rx1157_pos, "infix:sym<ge>")
-    rx1157_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1157_pos)
-    .return (rx1157_cur)
-  rx1157_fail:
-.annotate 'line', 431
-    (rx1157_rep, rx1157_pos, $I10, $P10) = rx1157_cur."!mark_fail"(0)
-    lt rx1157_pos, -1, rx1157_done
-    eq rx1157_pos, -1, rx1157_fail
+    rx1151_cur."!cursor_pass"(rx1151_pos, "infix:sym<!=>")
+    rx1151_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1151_pos)
+    .return (rx1151_cur)
+  rx1151_fail:
+.annotate 'line', 446
+    (rx1151_rep, rx1151_pos, $I10, $P10) = rx1151_cur."!mark_fail"(0)
+    lt rx1151_pos, -1, rx1151_done
+    eq rx1151_pos, -1, rx1151_fail
     jump $I10
-  rx1157_done:
-    rx1157_cur."!cursor_fail"()
-    rx1157_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
-    .return (rx1157_cur)
+  rx1151_done:
+    rx1151_cur."!cursor_fail"()
+    rx1151_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
+    .return (rx1151_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ge>"  :subid("294_1274022894.43745") :method
-.annotate 'line', 431
-    $P1159 = self."!PREFIX__!subrule"("O", "ge")
-    new $P1160, "ResizablePMCArray"
-    push $P1160, $P1159
-    .return ($P1160)
+.sub "!PREFIX__infix:sym<!=>"  :subid("289_1275811487.95429") :method
+.annotate 'line', 446
+    $P1153 = self."!PREFIX__!subrule"("O", "!=")
+    new $P1154, "ResizablePMCArray"
+    push $P1154, $P1153
+    .return ($P1154)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<lt>"  :subid("295_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1164_tgt
-    .local int rx1164_pos
-    .local int rx1164_off
-    .local int rx1164_eos
-    .local int rx1164_rep
-    .local pmc rx1164_cur
-    (rx1164_cur, rx1164_pos, rx1164_tgt) = self."!cursor_start"()
-    rx1164_cur."!cursor_debug"("START ", "infix:sym<lt>")
-    .lex unicode:"$\x{a2}", rx1164_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1164_eos, rx1164_tgt
-    set rx1164_off, 0
-    lt rx1164_pos, 2, rx1164_start
-    sub rx1164_off, rx1164_pos, 1
-    substr rx1164_tgt, rx1164_tgt, rx1164_off
-  rx1164_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1168_done
-    goto rxscan1168_scan
-  rxscan1168_loop:
-    ($P10) = rx1164_cur."from"()
-    inc $P10
-    set rx1164_pos, $P10
-    ge rx1164_pos, rx1164_eos, rxscan1168_done
-  rxscan1168_scan:
-    set_addr $I10, rxscan1168_loop
-    rx1164_cur."!mark_push"(0, rx1164_pos, $I10)
-  rxscan1168_done:
-.annotate 'line', 510
+.sub "infix:sym<<=>"  :subid("290_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1158_tgt
+    .local int rx1158_pos
+    .local int rx1158_off
+    .local int rx1158_eos
+    .local int rx1158_rep
+    .local pmc rx1158_cur
+    (rx1158_cur, rx1158_pos, rx1158_tgt) = self."!cursor_start"()
+    rx1158_cur."!cursor_debug"("START ", "infix:sym<<=>")
+    .lex unicode:"$\x{a2}", rx1158_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1158_eos, rx1158_tgt
+    gt rx1158_pos, rx1158_eos, rx1158_done
+    set rx1158_off, 0
+    lt rx1158_pos, 2, rx1158_start
+    sub rx1158_off, rx1158_pos, 1
+    substr rx1158_tgt, rx1158_tgt, rx1158_off
+  rx1158_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1162_done
+    goto rxscan1162_scan
+  rxscan1162_loop:
+    ($P10) = rx1158_cur."from"()
+    inc $P10
+    set rx1158_pos, $P10
+    ge rx1158_pos, rx1158_eos, rxscan1162_done
+  rxscan1162_scan:
+    set_addr $I10, rxscan1162_loop
+    rx1158_cur."!mark_push"(0, rx1158_pos, $I10)
+  rxscan1162_done:
+.annotate 'line', 517
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1169_fail
-    rx1164_cur."!mark_push"(0, rx1164_pos, $I10)
-  # rx literal  "lt"
-    add $I11, rx1164_pos, 2
-    gt $I11, rx1164_eos, rx1164_fail
-    sub $I11, rx1164_pos, rx1164_off
-    substr $S10, rx1164_tgt, $I11, 2
-    ne $S10, "lt", rx1164_fail
-    add rx1164_pos, 2
-    set_addr $I10, rxcap_1169_fail
-    ($I12, $I11) = rx1164_cur."!mark_peek"($I10)
-    rx1164_cur."!cursor_pos"($I11)
-    ($P10) = rx1164_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1164_pos, "")
-    rx1164_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1163_fail
+    rx1158_cur."!mark_push"(0, rx1158_pos, $I10)
+  # rx literal  "<="
+    add $I11, rx1158_pos, 2
+    gt $I11, rx1158_eos, rx1158_fail
+    sub $I11, rx1158_pos, rx1158_off
+    substr $S10, rx1158_tgt, $I11, 2
+    ne $S10, "<=", rx1158_fail
+    add rx1158_pos, 2
+    set_addr $I10, rxcap_1163_fail
+    ($I12, $I11) = rx1158_cur."!mark_peek"($I10)
+    rx1158_cur."!cursor_pos"($I11)
+    ($P10) = rx1158_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1158_pos, "")
+    rx1158_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1169_done
-  rxcap_1169_fail:
-    goto rx1164_fail
-  rxcap_1169_done:
+    goto rxcap_1163_done
+  rxcap_1163_fail:
+    goto rx1158_fail
+  rxcap_1163_done:
   # rx subrule "O" subtype=capture negate=
-    rx1164_cur."!cursor_pos"(rx1164_pos)
-    $P10 = rx1164_cur."O"("%relational, :pirop<islt ISs>")
-    unless $P10, rx1164_fail
-    rx1164_cur."!mark_push"(0, -1, 0, $P10)
+    rx1158_cur."!cursor_pos"(rx1158_pos)
+    $P10 = rx1158_cur."O"("%relational, :pirop<isle INn>")
+    unless $P10, rx1158_fail
+    rx1158_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1164_pos = $P10."pos"()
+    rx1158_pos = $P10."pos"()
   # rx pass
-    rx1164_cur."!cursor_pass"(rx1164_pos, "infix:sym<lt>")
-    rx1164_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1164_pos)
-    .return (rx1164_cur)
-  rx1164_fail:
-.annotate 'line', 431
-    (rx1164_rep, rx1164_pos, $I10, $P10) = rx1164_cur."!mark_fail"(0)
-    lt rx1164_pos, -1, rx1164_done
-    eq rx1164_pos, -1, rx1164_fail
+    rx1158_cur."!cursor_pass"(rx1158_pos, "infix:sym<<=>")
+    rx1158_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1158_pos)
+    .return (rx1158_cur)
+  rx1158_fail:
+.annotate 'line', 446
+    (rx1158_rep, rx1158_pos, $I10, $P10) = rx1158_cur."!mark_fail"(0)
+    lt rx1158_pos, -1, rx1158_done
+    eq rx1158_pos, -1, rx1158_fail
     jump $I10
-  rx1164_done:
-    rx1164_cur."!cursor_fail"()
-    rx1164_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
-    .return (rx1164_cur)
+  rx1158_done:
+    rx1158_cur."!cursor_fail"()
+    rx1158_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
+    .return (rx1158_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<lt>"  :subid("296_1274022894.43745") :method
-.annotate 'line', 431
-    $P1166 = self."!PREFIX__!subrule"("O", "lt")
-    new $P1167, "ResizablePMCArray"
-    push $P1167, $P1166
-    .return ($P1167)
+.sub "!PREFIX__infix:sym<<=>"  :subid("291_1275811487.95429") :method
+.annotate 'line', 446
+    $P1160 = self."!PREFIX__!subrule"("O", "<=")
+    new $P1161, "ResizablePMCArray"
+    push $P1161, $P1160
+    .return ($P1161)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<gt>"  :subid("297_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1171_tgt
-    .local int rx1171_pos
-    .local int rx1171_off
-    .local int rx1171_eos
-    .local int rx1171_rep
-    .local pmc rx1171_cur
-    (rx1171_cur, rx1171_pos, rx1171_tgt) = self."!cursor_start"()
-    rx1171_cur."!cursor_debug"("START ", "infix:sym<gt>")
-    .lex unicode:"$\x{a2}", rx1171_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1171_eos, rx1171_tgt
-    set rx1171_off, 0
-    lt rx1171_pos, 2, rx1171_start
-    sub rx1171_off, rx1171_pos, 1
-    substr rx1171_tgt, rx1171_tgt, rx1171_off
-  rx1171_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1175_done
-    goto rxscan1175_scan
-  rxscan1175_loop:
-    ($P10) = rx1171_cur."from"()
-    inc $P10
-    set rx1171_pos, $P10
-    ge rx1171_pos, rx1171_eos, rxscan1175_done
-  rxscan1175_scan:
-    set_addr $I10, rxscan1175_loop
-    rx1171_cur."!mark_push"(0, rx1171_pos, $I10)
-  rxscan1175_done:
-.annotate 'line', 511
+.sub "infix:sym<>=>"  :subid("292_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1165_tgt
+    .local int rx1165_pos
+    .local int rx1165_off
+    .local int rx1165_eos
+    .local int rx1165_rep
+    .local pmc rx1165_cur
+    (rx1165_cur, rx1165_pos, rx1165_tgt) = self."!cursor_start"()
+    rx1165_cur."!cursor_debug"("START ", "infix:sym<>=>")
+    .lex unicode:"$\x{a2}", rx1165_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1165_eos, rx1165_tgt
+    gt rx1165_pos, rx1165_eos, rx1165_done
+    set rx1165_off, 0
+    lt rx1165_pos, 2, rx1165_start
+    sub rx1165_off, rx1165_pos, 1
+    substr rx1165_tgt, rx1165_tgt, rx1165_off
+  rx1165_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1169_done
+    goto rxscan1169_scan
+  rxscan1169_loop:
+    ($P10) = rx1165_cur."from"()
+    inc $P10
+    set rx1165_pos, $P10
+    ge rx1165_pos, rx1165_eos, rxscan1169_done
+  rxscan1169_scan:
+    set_addr $I10, rxscan1169_loop
+    rx1165_cur."!mark_push"(0, rx1165_pos, $I10)
+  rxscan1169_done:
+.annotate 'line', 518
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1176_fail
-    rx1171_cur."!mark_push"(0, rx1171_pos, $I10)
-  # rx literal  "gt"
-    add $I11, rx1171_pos, 2
-    gt $I11, rx1171_eos, rx1171_fail
-    sub $I11, rx1171_pos, rx1171_off
-    substr $S10, rx1171_tgt, $I11, 2
-    ne $S10, "gt", rx1171_fail
-    add rx1171_pos, 2
-    set_addr $I10, rxcap_1176_fail
-    ($I12, $I11) = rx1171_cur."!mark_peek"($I10)
-    rx1171_cur."!cursor_pos"($I11)
-    ($P10) = rx1171_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1171_pos, "")
-    rx1171_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1170_fail
+    rx1165_cur."!mark_push"(0, rx1165_pos, $I10)
+  # rx literal  ">="
+    add $I11, rx1165_pos, 2
+    gt $I11, rx1165_eos, rx1165_fail
+    sub $I11, rx1165_pos, rx1165_off
+    substr $S10, rx1165_tgt, $I11, 2
+    ne $S10, ">=", rx1165_fail
+    add rx1165_pos, 2
+    set_addr $I10, rxcap_1170_fail
+    ($I12, $I11) = rx1165_cur."!mark_peek"($I10)
+    rx1165_cur."!cursor_pos"($I11)
+    ($P10) = rx1165_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1165_pos, "")
+    rx1165_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1176_done
-  rxcap_1176_fail:
-    goto rx1171_fail
-  rxcap_1176_done:
+    goto rxcap_1170_done
+  rxcap_1170_fail:
+    goto rx1165_fail
+  rxcap_1170_done:
   # rx subrule "O" subtype=capture negate=
-    rx1171_cur."!cursor_pos"(rx1171_pos)
-    $P10 = rx1171_cur."O"("%relational, :pirop<isgt ISs>")
-    unless $P10, rx1171_fail
-    rx1171_cur."!mark_push"(0, -1, 0, $P10)
+    rx1165_cur."!cursor_pos"(rx1165_pos)
+    $P10 = rx1165_cur."O"("%relational, :pirop<isge INn>")
+    unless $P10, rx1165_fail
+    rx1165_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1171_pos = $P10."pos"()
+    rx1165_pos = $P10."pos"()
   # rx pass
-    rx1171_cur."!cursor_pass"(rx1171_pos, "infix:sym<gt>")
-    rx1171_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1171_pos)
-    .return (rx1171_cur)
-  rx1171_fail:
-.annotate 'line', 431
-    (rx1171_rep, rx1171_pos, $I10, $P10) = rx1171_cur."!mark_fail"(0)
-    lt rx1171_pos, -1, rx1171_done
-    eq rx1171_pos, -1, rx1171_fail
+    rx1165_cur."!cursor_pass"(rx1165_pos, "infix:sym<>=>")
+    rx1165_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1165_pos)
+    .return (rx1165_cur)
+  rx1165_fail:
+.annotate 'line', 446
+    (rx1165_rep, rx1165_pos, $I10, $P10) = rx1165_cur."!mark_fail"(0)
+    lt rx1165_pos, -1, rx1165_done
+    eq rx1165_pos, -1, rx1165_fail
     jump $I10
-  rx1171_done:
-    rx1171_cur."!cursor_fail"()
-    rx1171_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
-    .return (rx1171_cur)
+  rx1165_done:
+    rx1165_cur."!cursor_fail"()
+    rx1165_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
+    .return (rx1165_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<gt>"  :subid("298_1274022894.43745") :method
-.annotate 'line', 431
-    $P1173 = self."!PREFIX__!subrule"("O", "gt")
-    new $P1174, "ResizablePMCArray"
-    push $P1174, $P1173
-    .return ($P1174)
+.sub "!PREFIX__infix:sym<>=>"  :subid("293_1275811487.95429") :method
+.annotate 'line', 446
+    $P1167 = self."!PREFIX__!subrule"("O", ">=")
+    new $P1168, "ResizablePMCArray"
+    push $P1168, $P1167
+    .return ($P1168)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=:=>"  :subid("299_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1178_tgt
-    .local int rx1178_pos
-    .local int rx1178_off
-    .local int rx1178_eos
-    .local int rx1178_rep
-    .local pmc rx1178_cur
-    (rx1178_cur, rx1178_pos, rx1178_tgt) = self."!cursor_start"()
-    rx1178_cur."!cursor_debug"("START ", "infix:sym<=:=>")
-    .lex unicode:"$\x{a2}", rx1178_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1178_eos, rx1178_tgt
-    set rx1178_off, 0
-    lt rx1178_pos, 2, rx1178_start
-    sub rx1178_off, rx1178_pos, 1
-    substr rx1178_tgt, rx1178_tgt, rx1178_off
-  rx1178_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1182_done
-    goto rxscan1182_scan
-  rxscan1182_loop:
-    ($P10) = rx1178_cur."from"()
-    inc $P10
-    set rx1178_pos, $P10
-    ge rx1178_pos, rx1178_eos, rxscan1182_done
-  rxscan1182_scan:
-    set_addr $I10, rxscan1182_loop
-    rx1178_cur."!mark_push"(0, rx1178_pos, $I10)
-  rxscan1182_done:
-.annotate 'line', 512
+.sub "infix:sym<<>"  :subid("294_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1172_tgt
+    .local int rx1172_pos
+    .local int rx1172_off
+    .local int rx1172_eos
+    .local int rx1172_rep
+    .local pmc rx1172_cur
+    (rx1172_cur, rx1172_pos, rx1172_tgt) = self."!cursor_start"()
+    rx1172_cur."!cursor_debug"("START ", "infix:sym<<>")
+    .lex unicode:"$\x{a2}", rx1172_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1172_eos, rx1172_tgt
+    gt rx1172_pos, rx1172_eos, rx1172_done
+    set rx1172_off, 0
+    lt rx1172_pos, 2, rx1172_start
+    sub rx1172_off, rx1172_pos, 1
+    substr rx1172_tgt, rx1172_tgt, rx1172_off
+  rx1172_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1176_done
+    goto rxscan1176_scan
+  rxscan1176_loop:
+    ($P10) = rx1172_cur."from"()
+    inc $P10
+    set rx1172_pos, $P10
+    ge rx1172_pos, rx1172_eos, rxscan1176_done
+  rxscan1176_scan:
+    set_addr $I10, rxscan1176_loop
+    rx1172_cur."!mark_push"(0, rx1172_pos, $I10)
+  rxscan1176_done:
+.annotate 'line', 519
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1183_fail
-    rx1178_cur."!mark_push"(0, rx1178_pos, $I10)
-  # rx literal  "=:="
-    add $I11, rx1178_pos, 3
-    gt $I11, rx1178_eos, rx1178_fail
-    sub $I11, rx1178_pos, rx1178_off
-    substr $S10, rx1178_tgt, $I11, 3
-    ne $S10, "=:=", rx1178_fail
-    add rx1178_pos, 3
-    set_addr $I10, rxcap_1183_fail
-    ($I12, $I11) = rx1178_cur."!mark_peek"($I10)
-    rx1178_cur."!cursor_pos"($I11)
-    ($P10) = rx1178_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1178_pos, "")
-    rx1178_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1177_fail
+    rx1172_cur."!mark_push"(0, rx1172_pos, $I10)
+  # rx literal  "<"
+    add $I11, rx1172_pos, 1
+    gt $I11, rx1172_eos, rx1172_fail
+    sub $I11, rx1172_pos, rx1172_off
+    substr $S10, rx1172_tgt, $I11, 1
+    ne $S10, "<", rx1172_fail
+    add rx1172_pos, 1
+    set_addr $I10, rxcap_1177_fail
+    ($I12, $I11) = rx1172_cur."!mark_peek"($I10)
+    rx1172_cur."!cursor_pos"($I11)
+    ($P10) = rx1172_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1172_pos, "")
+    rx1172_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1183_done
-  rxcap_1183_fail:
-    goto rx1178_fail
-  rxcap_1183_done:
+    goto rxcap_1177_done
+  rxcap_1177_fail:
+    goto rx1172_fail
+  rxcap_1177_done:
   # rx subrule "O" subtype=capture negate=
-    rx1178_cur."!cursor_pos"(rx1178_pos)
-    $P10 = rx1178_cur."O"("%relational, :pirop<issame>")
-    unless $P10, rx1178_fail
-    rx1178_cur."!mark_push"(0, -1, 0, $P10)
+    rx1172_cur."!cursor_pos"(rx1172_pos)
+    $P10 = rx1172_cur."O"("%relational, :pirop<islt INn>")
+    unless $P10, rx1172_fail
+    rx1172_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1178_pos = $P10."pos"()
+    rx1172_pos = $P10."pos"()
   # rx pass
-    rx1178_cur."!cursor_pass"(rx1178_pos, "infix:sym<=:=>")
-    rx1178_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1178_pos)
-    .return (rx1178_cur)
-  rx1178_fail:
-.annotate 'line', 431
-    (rx1178_rep, rx1178_pos, $I10, $P10) = rx1178_cur."!mark_fail"(0)
-    lt rx1178_pos, -1, rx1178_done
-    eq rx1178_pos, -1, rx1178_fail
+    rx1172_cur."!cursor_pass"(rx1172_pos, "infix:sym<<>")
+    rx1172_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1172_pos)
+    .return (rx1172_cur)
+  rx1172_fail:
+.annotate 'line', 446
+    (rx1172_rep, rx1172_pos, $I10, $P10) = rx1172_cur."!mark_fail"(0)
+    lt rx1172_pos, -1, rx1172_done
+    eq rx1172_pos, -1, rx1172_fail
     jump $I10
-  rx1178_done:
-    rx1178_cur."!cursor_fail"()
-    rx1178_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
-    .return (rx1178_cur)
+  rx1172_done:
+    rx1172_cur."!cursor_fail"()
+    rx1172_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
+    .return (rx1172_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=:=>"  :subid("300_1274022894.43745") :method
-.annotate 'line', 431
-    $P1180 = self."!PREFIX__!subrule"("O", "=:=")
-    new $P1181, "ResizablePMCArray"
-    push $P1181, $P1180
-    .return ($P1181)
+.sub "!PREFIX__infix:sym<<>"  :subid("295_1275811487.95429") :method
+.annotate 'line', 446
+    $P1174 = self."!PREFIX__!subrule"("O", "<")
+    new $P1175, "ResizablePMCArray"
+    push $P1175, $P1174
+    .return ($P1175)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~~>"  :subid("301_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1185_tgt
-    .local int rx1185_pos
-    .local int rx1185_off
-    .local int rx1185_eos
-    .local int rx1185_rep
-    .local pmc rx1185_cur
-    (rx1185_cur, rx1185_pos, rx1185_tgt) = self."!cursor_start"()
-    rx1185_cur."!cursor_debug"("START ", "infix:sym<~~>")
-    .lex unicode:"$\x{a2}", rx1185_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1185_eos, rx1185_tgt
-    set rx1185_off, 0
-    lt rx1185_pos, 2, rx1185_start
-    sub rx1185_off, rx1185_pos, 1
-    substr rx1185_tgt, rx1185_tgt, rx1185_off
-  rx1185_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1189_done
-    goto rxscan1189_scan
-  rxscan1189_loop:
-    ($P10) = rx1185_cur."from"()
-    inc $P10
-    set rx1185_pos, $P10
-    ge rx1185_pos, rx1185_eos, rxscan1189_done
-  rxscan1189_scan:
-    set_addr $I10, rxscan1189_loop
-    rx1185_cur."!mark_push"(0, rx1185_pos, $I10)
-  rxscan1189_done:
-.annotate 'line', 513
+.sub "infix:sym<>>"  :subid("296_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1179_tgt
+    .local int rx1179_pos
+    .local int rx1179_off
+    .local int rx1179_eos
+    .local int rx1179_rep
+    .local pmc rx1179_cur
+    (rx1179_cur, rx1179_pos, rx1179_tgt) = self."!cursor_start"()
+    rx1179_cur."!cursor_debug"("START ", "infix:sym<>>")
+    .lex unicode:"$\x{a2}", rx1179_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1179_eos, rx1179_tgt
+    gt rx1179_pos, rx1179_eos, rx1179_done
+    set rx1179_off, 0
+    lt rx1179_pos, 2, rx1179_start
+    sub rx1179_off, rx1179_pos, 1
+    substr rx1179_tgt, rx1179_tgt, rx1179_off
+  rx1179_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1183_done
+    goto rxscan1183_scan
+  rxscan1183_loop:
+    ($P10) = rx1179_cur."from"()
+    inc $P10
+    set rx1179_pos, $P10
+    ge rx1179_pos, rx1179_eos, rxscan1183_done
+  rxscan1183_scan:
+    set_addr $I10, rxscan1183_loop
+    rx1179_cur."!mark_push"(0, rx1179_pos, $I10)
+  rxscan1183_done:
+.annotate 'line', 520
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1190_fail
-    rx1185_cur."!mark_push"(0, rx1185_pos, $I10)
-  # rx literal  "~~"
-    add $I11, rx1185_pos, 2
-    gt $I11, rx1185_eos, rx1185_fail
-    sub $I11, rx1185_pos, rx1185_off
-    substr $S10, rx1185_tgt, $I11, 2
-    ne $S10, "~~", rx1185_fail
-    add rx1185_pos, 2
-    set_addr $I10, rxcap_1190_fail
-    ($I12, $I11) = rx1185_cur."!mark_peek"($I10)
-    rx1185_cur."!cursor_pos"($I11)
-    ($P10) = rx1185_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1185_pos, "")
-    rx1185_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1184_fail
+    rx1179_cur."!mark_push"(0, rx1179_pos, $I10)
+  # rx literal  ">"
+    add $I11, rx1179_pos, 1
+    gt $I11, rx1179_eos, rx1179_fail
+    sub $I11, rx1179_pos, rx1179_off
+    substr $S10, rx1179_tgt, $I11, 1
+    ne $S10, ">", rx1179_fail
+    add rx1179_pos, 1
+    set_addr $I10, rxcap_1184_fail
+    ($I12, $I11) = rx1179_cur."!mark_peek"($I10)
+    rx1179_cur."!cursor_pos"($I11)
+    ($P10) = rx1179_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1179_pos, "")
+    rx1179_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1190_done
-  rxcap_1190_fail:
-    goto rx1185_fail
-  rxcap_1190_done:
+    goto rxcap_1184_done
+  rxcap_1184_fail:
+    goto rx1179_fail
+  rxcap_1184_done:
   # rx subrule "O" subtype=capture negate=
-    rx1185_cur."!cursor_pos"(rx1185_pos)
-    $P10 = rx1185_cur."O"("%relational, :reducecheck<smartmatch>")
-    unless $P10, rx1185_fail
-    rx1185_cur."!mark_push"(0, -1, 0, $P10)
+    rx1179_cur."!cursor_pos"(rx1179_pos)
+    $P10 = rx1179_cur."O"("%relational, :pirop<isgt INn>")
+    unless $P10, rx1179_fail
+    rx1179_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1185_pos = $P10."pos"()
+    rx1179_pos = $P10."pos"()
   # rx pass
-    rx1185_cur."!cursor_pass"(rx1185_pos, "infix:sym<~~>")
-    rx1185_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1185_pos)
-    .return (rx1185_cur)
-  rx1185_fail:
-.annotate 'line', 431
-    (rx1185_rep, rx1185_pos, $I10, $P10) = rx1185_cur."!mark_fail"(0)
-    lt rx1185_pos, -1, rx1185_done
-    eq rx1185_pos, -1, rx1185_fail
+    rx1179_cur."!cursor_pass"(rx1179_pos, "infix:sym<>>")
+    rx1179_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1179_pos)
+    .return (rx1179_cur)
+  rx1179_fail:
+.annotate 'line', 446
+    (rx1179_rep, rx1179_pos, $I10, $P10) = rx1179_cur."!mark_fail"(0)
+    lt rx1179_pos, -1, rx1179_done
+    eq rx1179_pos, -1, rx1179_fail
     jump $I10
-  rx1185_done:
-    rx1185_cur."!cursor_fail"()
-    rx1185_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
-    .return (rx1185_cur)
+  rx1179_done:
+    rx1179_cur."!cursor_fail"()
+    rx1179_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
+    .return (rx1179_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~~>"  :subid("302_1274022894.43745") :method
-.annotate 'line', 431
-    $P1187 = self."!PREFIX__!subrule"("O", "~~")
-    new $P1188, "ResizablePMCArray"
-    push $P1188, $P1187
-    .return ($P1188)
+.sub "!PREFIX__infix:sym<>>"  :subid("297_1275811487.95429") :method
+.annotate 'line', 446
+    $P1181 = self."!PREFIX__!subrule"("O", ">")
+    new $P1182, "ResizablePMCArray"
+    push $P1182, $P1181
+    .return ($P1182)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<&&>"  :subid("303_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1192_tgt
-    .local int rx1192_pos
-    .local int rx1192_off
-    .local int rx1192_eos
-    .local int rx1192_rep
-    .local pmc rx1192_cur
-    (rx1192_cur, rx1192_pos, rx1192_tgt) = self."!cursor_start"()
-    rx1192_cur."!cursor_debug"("START ", "infix:sym<&&>")
-    .lex unicode:"$\x{a2}", rx1192_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1192_eos, rx1192_tgt
-    set rx1192_off, 0
-    lt rx1192_pos, 2, rx1192_start
-    sub rx1192_off, rx1192_pos, 1
-    substr rx1192_tgt, rx1192_tgt, rx1192_off
-  rx1192_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1196_done
-    goto rxscan1196_scan
-  rxscan1196_loop:
-    ($P10) = rx1192_cur."from"()
-    inc $P10
-    set rx1192_pos, $P10
-    ge rx1192_pos, rx1192_eos, rxscan1196_done
-  rxscan1196_scan:
-    set_addr $I10, rxscan1196_loop
-    rx1192_cur."!mark_push"(0, rx1192_pos, $I10)
-  rxscan1196_done:
-.annotate 'line', 515
+.sub "infix:sym<eq>"  :subid("298_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1186_tgt
+    .local int rx1186_pos
+    .local int rx1186_off
+    .local int rx1186_eos
+    .local int rx1186_rep
+    .local pmc rx1186_cur
+    (rx1186_cur, rx1186_pos, rx1186_tgt) = self."!cursor_start"()
+    rx1186_cur."!cursor_debug"("START ", "infix:sym<eq>")
+    .lex unicode:"$\x{a2}", rx1186_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1186_eos, rx1186_tgt
+    gt rx1186_pos, rx1186_eos, rx1186_done
+    set rx1186_off, 0
+    lt rx1186_pos, 2, rx1186_start
+    sub rx1186_off, rx1186_pos, 1
+    substr rx1186_tgt, rx1186_tgt, rx1186_off
+  rx1186_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1190_done
+    goto rxscan1190_scan
+  rxscan1190_loop:
+    ($P10) = rx1186_cur."from"()
+    inc $P10
+    set rx1186_pos, $P10
+    ge rx1186_pos, rx1186_eos, rxscan1190_done
+  rxscan1190_scan:
+    set_addr $I10, rxscan1190_loop
+    rx1186_cur."!mark_push"(0, rx1186_pos, $I10)
+  rxscan1190_done:
+.annotate 'line', 521
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1197_fail
-    rx1192_cur."!mark_push"(0, rx1192_pos, $I10)
-  # rx literal  "&&"
-    add $I11, rx1192_pos, 2
-    gt $I11, rx1192_eos, rx1192_fail
-    sub $I11, rx1192_pos, rx1192_off
-    substr $S10, rx1192_tgt, $I11, 2
-    ne $S10, "&&", rx1192_fail
-    add rx1192_pos, 2
-    set_addr $I10, rxcap_1197_fail
-    ($I12, $I11) = rx1192_cur."!mark_peek"($I10)
-    rx1192_cur."!cursor_pos"($I11)
-    ($P10) = rx1192_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1192_pos, "")
-    rx1192_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1191_fail
+    rx1186_cur."!mark_push"(0, rx1186_pos, $I10)
+  # rx literal  "eq"
+    add $I11, rx1186_pos, 2
+    gt $I11, rx1186_eos, rx1186_fail
+    sub $I11, rx1186_pos, rx1186_off
+    substr $S10, rx1186_tgt, $I11, 2
+    ne $S10, "eq", rx1186_fail
+    add rx1186_pos, 2
+    set_addr $I10, rxcap_1191_fail
+    ($I12, $I11) = rx1186_cur."!mark_peek"($I10)
+    rx1186_cur."!cursor_pos"($I11)
+    ($P10) = rx1186_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1186_pos, "")
+    rx1186_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1197_done
-  rxcap_1197_fail:
-    goto rx1192_fail
-  rxcap_1197_done:
+    goto rxcap_1191_done
+  rxcap_1191_fail:
+    goto rx1186_fail
+  rxcap_1191_done:
   # rx subrule "O" subtype=capture negate=
-    rx1192_cur."!cursor_pos"(rx1192_pos)
-    $P10 = rx1192_cur."O"("%tight_and, :pasttype<if>")
-    unless $P10, rx1192_fail
-    rx1192_cur."!mark_push"(0, -1, 0, $P10)
+    rx1186_cur."!cursor_pos"(rx1186_pos)
+    $P10 = rx1186_cur."O"("%relational, :pirop<iseq ISs>")
+    unless $P10, rx1186_fail
+    rx1186_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1192_pos = $P10."pos"()
+    rx1186_pos = $P10."pos"()
   # rx pass
-    rx1192_cur."!cursor_pass"(rx1192_pos, "infix:sym<&&>")
-    rx1192_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1192_pos)
-    .return (rx1192_cur)
-  rx1192_fail:
-.annotate 'line', 431
-    (rx1192_rep, rx1192_pos, $I10, $P10) = rx1192_cur."!mark_fail"(0)
-    lt rx1192_pos, -1, rx1192_done
-    eq rx1192_pos, -1, rx1192_fail
+    rx1186_cur."!cursor_pass"(rx1186_pos, "infix:sym<eq>")
+    rx1186_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1186_pos)
+    .return (rx1186_cur)
+  rx1186_fail:
+.annotate 'line', 446
+    (rx1186_rep, rx1186_pos, $I10, $P10) = rx1186_cur."!mark_fail"(0)
+    lt rx1186_pos, -1, rx1186_done
+    eq rx1186_pos, -1, rx1186_fail
     jump $I10
-  rx1192_done:
-    rx1192_cur."!cursor_fail"()
-    rx1192_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
-    .return (rx1192_cur)
+  rx1186_done:
+    rx1186_cur."!cursor_fail"()
+    rx1186_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
+    .return (rx1186_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<&&>"  :subid("304_1274022894.43745") :method
-.annotate 'line', 431
-    $P1194 = self."!PREFIX__!subrule"("O", "&&")
-    new $P1195, "ResizablePMCArray"
-    push $P1195, $P1194
-    .return ($P1195)
+.sub "!PREFIX__infix:sym<eq>"  :subid("299_1275811487.95429") :method
+.annotate 'line', 446
+    $P1188 = self."!PREFIX__!subrule"("O", "eq")
+    new $P1189, "ResizablePMCArray"
+    push $P1189, $P1188
+    .return ($P1189)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<||>"  :subid("305_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1199_tgt
-    .local int rx1199_pos
-    .local int rx1199_off
-    .local int rx1199_eos
-    .local int rx1199_rep
-    .local pmc rx1199_cur
-    (rx1199_cur, rx1199_pos, rx1199_tgt) = self."!cursor_start"()
-    rx1199_cur."!cursor_debug"("START ", "infix:sym<||>")
-    .lex unicode:"$\x{a2}", rx1199_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1199_eos, rx1199_tgt
-    set rx1199_off, 0
-    lt rx1199_pos, 2, rx1199_start
-    sub rx1199_off, rx1199_pos, 1
-    substr rx1199_tgt, rx1199_tgt, rx1199_off
-  rx1199_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1203_done
-    goto rxscan1203_scan
-  rxscan1203_loop:
-    ($P10) = rx1199_cur."from"()
-    inc $P10
-    set rx1199_pos, $P10
-    ge rx1199_pos, rx1199_eos, rxscan1203_done
-  rxscan1203_scan:
-    set_addr $I10, rxscan1203_loop
-    rx1199_cur."!mark_push"(0, rx1199_pos, $I10)
-  rxscan1203_done:
-.annotate 'line', 517
+.sub "infix:sym<ne>"  :subid("300_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1193_tgt
+    .local int rx1193_pos
+    .local int rx1193_off
+    .local int rx1193_eos
+    .local int rx1193_rep
+    .local pmc rx1193_cur
+    (rx1193_cur, rx1193_pos, rx1193_tgt) = self."!cursor_start"()
+    rx1193_cur."!cursor_debug"("START ", "infix:sym<ne>")
+    .lex unicode:"$\x{a2}", rx1193_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1193_eos, rx1193_tgt
+    gt rx1193_pos, rx1193_eos, rx1193_done
+    set rx1193_off, 0
+    lt rx1193_pos, 2, rx1193_start
+    sub rx1193_off, rx1193_pos, 1
+    substr rx1193_tgt, rx1193_tgt, rx1193_off
+  rx1193_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1197_done
+    goto rxscan1197_scan
+  rxscan1197_loop:
+    ($P10) = rx1193_cur."from"()
+    inc $P10
+    set rx1193_pos, $P10
+    ge rx1193_pos, rx1193_eos, rxscan1197_done
+  rxscan1197_scan:
+    set_addr $I10, rxscan1197_loop
+    rx1193_cur."!mark_push"(0, rx1193_pos, $I10)
+  rxscan1197_done:
+.annotate 'line', 522
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1204_fail
-    rx1199_cur."!mark_push"(0, rx1199_pos, $I10)
-  # rx literal  "||"
-    add $I11, rx1199_pos, 2
-    gt $I11, rx1199_eos, rx1199_fail
-    sub $I11, rx1199_pos, rx1199_off
-    substr $S10, rx1199_tgt, $I11, 2
-    ne $S10, "||", rx1199_fail
-    add rx1199_pos, 2
-    set_addr $I10, rxcap_1204_fail
-    ($I12, $I11) = rx1199_cur."!mark_peek"($I10)
-    rx1199_cur."!cursor_pos"($I11)
-    ($P10) = rx1199_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1199_pos, "")
-    rx1199_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1198_fail
+    rx1193_cur."!mark_push"(0, rx1193_pos, $I10)
+  # rx literal  "ne"
+    add $I11, rx1193_pos, 2
+    gt $I11, rx1193_eos, rx1193_fail
+    sub $I11, rx1193_pos, rx1193_off
+    substr $S10, rx1193_tgt, $I11, 2
+    ne $S10, "ne", rx1193_fail
+    add rx1193_pos, 2
+    set_addr $I10, rxcap_1198_fail
+    ($I12, $I11) = rx1193_cur."!mark_peek"($I10)
+    rx1193_cur."!cursor_pos"($I11)
+    ($P10) = rx1193_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1193_pos, "")
+    rx1193_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1204_done
-  rxcap_1204_fail:
-    goto rx1199_fail
-  rxcap_1204_done:
+    goto rxcap_1198_done
+  rxcap_1198_fail:
+    goto rx1193_fail
+  rxcap_1198_done:
   # rx subrule "O" subtype=capture negate=
-    rx1199_cur."!cursor_pos"(rx1199_pos)
-    $P10 = rx1199_cur."O"("%tight_or, :pasttype<unless>")
-    unless $P10, rx1199_fail
-    rx1199_cur."!mark_push"(0, -1, 0, $P10)
+    rx1193_cur."!cursor_pos"(rx1193_pos)
+    $P10 = rx1193_cur."O"("%relational, :pirop<isne ISs>")
+    unless $P10, rx1193_fail
+    rx1193_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1199_pos = $P10."pos"()
+    rx1193_pos = $P10."pos"()
   # rx pass
-    rx1199_cur."!cursor_pass"(rx1199_pos, "infix:sym<||>")
-    rx1199_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1199_pos)
-    .return (rx1199_cur)
-  rx1199_fail:
-.annotate 'line', 431
-    (rx1199_rep, rx1199_pos, $I10, $P10) = rx1199_cur."!mark_fail"(0)
-    lt rx1199_pos, -1, rx1199_done
-    eq rx1199_pos, -1, rx1199_fail
+    rx1193_cur."!cursor_pass"(rx1193_pos, "infix:sym<ne>")
+    rx1193_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1193_pos)
+    .return (rx1193_cur)
+  rx1193_fail:
+.annotate 'line', 446
+    (rx1193_rep, rx1193_pos, $I10, $P10) = rx1193_cur."!mark_fail"(0)
+    lt rx1193_pos, -1, rx1193_done
+    eq rx1193_pos, -1, rx1193_fail
     jump $I10
-  rx1199_done:
-    rx1199_cur."!cursor_fail"()
-    rx1199_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
-    .return (rx1199_cur)
+  rx1193_done:
+    rx1193_cur."!cursor_fail"()
+    rx1193_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
+    .return (rx1193_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<||>"  :subid("306_1274022894.43745") :method
-.annotate 'line', 431
-    $P1201 = self."!PREFIX__!subrule"("O", "||")
-    new $P1202, "ResizablePMCArray"
-    push $P1202, $P1201
-    .return ($P1202)
+.sub "!PREFIX__infix:sym<ne>"  :subid("301_1275811487.95429") :method
+.annotate 'line', 446
+    $P1195 = self."!PREFIX__!subrule"("O", "ne")
+    new $P1196, "ResizablePMCArray"
+    push $P1196, $P1195
+    .return ($P1196)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<//>"  :subid("307_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1206_tgt
-    .local int rx1206_pos
-    .local int rx1206_off
-    .local int rx1206_eos
-    .local int rx1206_rep
-    .local pmc rx1206_cur
-    (rx1206_cur, rx1206_pos, rx1206_tgt) = self."!cursor_start"()
-    rx1206_cur."!cursor_debug"("START ", "infix:sym<//>")
-    .lex unicode:"$\x{a2}", rx1206_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1206_eos, rx1206_tgt
-    set rx1206_off, 0
-    lt rx1206_pos, 2, rx1206_start
-    sub rx1206_off, rx1206_pos, 1
-    substr rx1206_tgt, rx1206_tgt, rx1206_off
-  rx1206_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1210_done
-    goto rxscan1210_scan
-  rxscan1210_loop:
-    ($P10) = rx1206_cur."from"()
-    inc $P10
-    set rx1206_pos, $P10
-    ge rx1206_pos, rx1206_eos, rxscan1210_done
-  rxscan1210_scan:
-    set_addr $I10, rxscan1210_loop
-    rx1206_cur."!mark_push"(0, rx1206_pos, $I10)
-  rxscan1210_done:
-.annotate 'line', 518
+.sub "infix:sym<le>"  :subid("302_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1200_tgt
+    .local int rx1200_pos
+    .local int rx1200_off
+    .local int rx1200_eos
+    .local int rx1200_rep
+    .local pmc rx1200_cur
+    (rx1200_cur, rx1200_pos, rx1200_tgt) = self."!cursor_start"()
+    rx1200_cur."!cursor_debug"("START ", "infix:sym<le>")
+    .lex unicode:"$\x{a2}", rx1200_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1200_eos, rx1200_tgt
+    gt rx1200_pos, rx1200_eos, rx1200_done
+    set rx1200_off, 0
+    lt rx1200_pos, 2, rx1200_start
+    sub rx1200_off, rx1200_pos, 1
+    substr rx1200_tgt, rx1200_tgt, rx1200_off
+  rx1200_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1204_done
+    goto rxscan1204_scan
+  rxscan1204_loop:
+    ($P10) = rx1200_cur."from"()
+    inc $P10
+    set rx1200_pos, $P10
+    ge rx1200_pos, rx1200_eos, rxscan1204_done
+  rxscan1204_scan:
+    set_addr $I10, rxscan1204_loop
+    rx1200_cur."!mark_push"(0, rx1200_pos, $I10)
+  rxscan1204_done:
+.annotate 'line', 523
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1211_fail
-    rx1206_cur."!mark_push"(0, rx1206_pos, $I10)
-  # rx literal  "//"
-    add $I11, rx1206_pos, 2
-    gt $I11, rx1206_eos, rx1206_fail
-    sub $I11, rx1206_pos, rx1206_off
-    substr $S10, rx1206_tgt, $I11, 2
-    ne $S10, "//", rx1206_fail
-    add rx1206_pos, 2
-    set_addr $I10, rxcap_1211_fail
-    ($I12, $I11) = rx1206_cur."!mark_peek"($I10)
-    rx1206_cur."!cursor_pos"($I11)
-    ($P10) = rx1206_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1206_pos, "")
-    rx1206_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1205_fail
+    rx1200_cur."!mark_push"(0, rx1200_pos, $I10)
+  # rx literal  "le"
+    add $I11, rx1200_pos, 2
+    gt $I11, rx1200_eos, rx1200_fail
+    sub $I11, rx1200_pos, rx1200_off
+    substr $S10, rx1200_tgt, $I11, 2
+    ne $S10, "le", rx1200_fail
+    add rx1200_pos, 2
+    set_addr $I10, rxcap_1205_fail
+    ($I12, $I11) = rx1200_cur."!mark_peek"($I10)
+    rx1200_cur."!cursor_pos"($I11)
+    ($P10) = rx1200_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1200_pos, "")
+    rx1200_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1211_done
-  rxcap_1211_fail:
-    goto rx1206_fail
-  rxcap_1211_done:
+    goto rxcap_1205_done
+  rxcap_1205_fail:
+    goto rx1200_fail
+  rxcap_1205_done:
   # rx subrule "O" subtype=capture negate=
-    rx1206_cur."!cursor_pos"(rx1206_pos)
-    $P10 = rx1206_cur."O"("%tight_or, :pasttype<def_or>")
-    unless $P10, rx1206_fail
-    rx1206_cur."!mark_push"(0, -1, 0, $P10)
+    rx1200_cur."!cursor_pos"(rx1200_pos)
+    $P10 = rx1200_cur."O"("%relational, :pirop<isle ISs>")
+    unless $P10, rx1200_fail
+    rx1200_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1206_pos = $P10."pos"()
+    rx1200_pos = $P10."pos"()
   # rx pass
-    rx1206_cur."!cursor_pass"(rx1206_pos, "infix:sym<//>")
-    rx1206_cur."!cursor_debug"("PASS  ", "infix:sym<//>", " at pos=", rx1206_pos)
-    .return (rx1206_cur)
-  rx1206_fail:
-.annotate 'line', 431
-    (rx1206_rep, rx1206_pos, $I10, $P10) = rx1206_cur."!mark_fail"(0)
-    lt rx1206_pos, -1, rx1206_done
-    eq rx1206_pos, -1, rx1206_fail
+    rx1200_cur."!cursor_pass"(rx1200_pos, "infix:sym<le>")
+    rx1200_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1200_pos)
+    .return (rx1200_cur)
+  rx1200_fail:
+.annotate 'line', 446
+    (rx1200_rep, rx1200_pos, $I10, $P10) = rx1200_cur."!mark_fail"(0)
+    lt rx1200_pos, -1, rx1200_done
+    eq rx1200_pos, -1, rx1200_fail
     jump $I10
-  rx1206_done:
-    rx1206_cur."!cursor_fail"()
-    rx1206_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
-    .return (rx1206_cur)
+  rx1200_done:
+    rx1200_cur."!cursor_fail"()
+    rx1200_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
+    .return (rx1200_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<//>"  :subid("308_1274022894.43745") :method
-.annotate 'line', 431
-    $P1208 = self."!PREFIX__!subrule"("O", "//")
-    new $P1209, "ResizablePMCArray"
-    push $P1209, $P1208
-    .return ($P1209)
+.sub "!PREFIX__infix:sym<le>"  :subid("303_1275811487.95429") :method
+.annotate 'line', 446
+    $P1202 = self."!PREFIX__!subrule"("O", "le")
+    new $P1203, "ResizablePMCArray"
+    push $P1203, $P1202
+    .return ($P1203)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<?? !!>"  :subid("309_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1213_tgt
-    .local int rx1213_pos
-    .local int rx1213_off
-    .local int rx1213_eos
-    .local int rx1213_rep
-    .local pmc rx1213_cur
-    (rx1213_cur, rx1213_pos, rx1213_tgt) = self."!cursor_start"()
-    rx1213_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
-    .lex unicode:"$\x{a2}", rx1213_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1213_eos, rx1213_tgt
-    set rx1213_off, 0
-    lt rx1213_pos, 2, rx1213_start
-    sub rx1213_off, rx1213_pos, 1
-    substr rx1213_tgt, rx1213_tgt, rx1213_off
-  rx1213_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1217_done
-    goto rxscan1217_scan
-  rxscan1217_loop:
-    ($P10) = rx1213_cur."from"()
-    inc $P10
-    set rx1213_pos, $P10
-    ge rx1213_pos, rx1213_eos, rxscan1217_done
-  rxscan1217_scan:
-    set_addr $I10, rxscan1217_loop
-    rx1213_cur."!mark_push"(0, rx1213_pos, $I10)
-  rxscan1217_done:
-.annotate 'line', 521
-  # rx literal  "??"
-    add $I11, rx1213_pos, 2
-    gt $I11, rx1213_eos, rx1213_fail
-    sub $I11, rx1213_pos, rx1213_off
-    substr $S10, rx1213_tgt, $I11, 2
-    ne $S10, "??", rx1213_fail
-    add rx1213_pos, 2
-.annotate 'line', 522
-  # rx subrule "ws" subtype=method negate=
-    rx1213_cur."!cursor_pos"(rx1213_pos)
-    $P10 = rx1213_cur."ws"()
-    unless $P10, rx1213_fail
-    rx1213_pos = $P10."pos"()
-.annotate 'line', 523
-  # rx subrule "EXPR" subtype=capture negate=
-    rx1213_cur."!cursor_pos"(rx1213_pos)
-    $P10 = rx1213_cur."EXPR"("i=")
-    unless $P10, rx1213_fail
-    rx1213_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx1213_pos = $P10."pos"()
+.sub "infix:sym<ge>"  :subid("304_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1207_tgt
+    .local int rx1207_pos
+    .local int rx1207_off
+    .local int rx1207_eos
+    .local int rx1207_rep
+    .local pmc rx1207_cur
+    (rx1207_cur, rx1207_pos, rx1207_tgt) = self."!cursor_start"()
+    rx1207_cur."!cursor_debug"("START ", "infix:sym<ge>")
+    .lex unicode:"$\x{a2}", rx1207_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1207_eos, rx1207_tgt
+    gt rx1207_pos, rx1207_eos, rx1207_done
+    set rx1207_off, 0
+    lt rx1207_pos, 2, rx1207_start
+    sub rx1207_off, rx1207_pos, 1
+    substr rx1207_tgt, rx1207_tgt, rx1207_off
+  rx1207_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1211_done
+    goto rxscan1211_scan
+  rxscan1211_loop:
+    ($P10) = rx1207_cur."from"()
+    inc $P10
+    set rx1207_pos, $P10
+    ge rx1207_pos, rx1207_eos, rxscan1211_done
+  rxscan1211_scan:
+    set_addr $I10, rxscan1211_loop
+    rx1207_cur."!mark_push"(0, rx1207_pos, $I10)
+  rxscan1211_done:
 .annotate 'line', 524
-  # rx literal  "!!"
-    add $I11, rx1213_pos, 2
-    gt $I11, rx1213_eos, rx1213_fail
-    sub $I11, rx1213_pos, rx1213_off
-    substr $S10, rx1213_tgt, $I11, 2
-    ne $S10, "!!", rx1213_fail
-    add rx1213_pos, 2
-.annotate 'line', 525
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1212_fail
+    rx1207_cur."!mark_push"(0, rx1207_pos, $I10)
+  # rx literal  "ge"
+    add $I11, rx1207_pos, 2
+    gt $I11, rx1207_eos, rx1207_fail
+    sub $I11, rx1207_pos, rx1207_off
+    substr $S10, rx1207_tgt, $I11, 2
+    ne $S10, "ge", rx1207_fail
+    add rx1207_pos, 2
+    set_addr $I10, rxcap_1212_fail
+    ($I12, $I11) = rx1207_cur."!mark_peek"($I10)
+    rx1207_cur."!cursor_pos"($I11)
+    ($P10) = rx1207_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1207_pos, "")
+    rx1207_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1212_done
+  rxcap_1212_fail:
+    goto rx1207_fail
+  rxcap_1212_done:
   # rx subrule "O" subtype=capture negate=
-    rx1213_cur."!cursor_pos"(rx1213_pos)
-    $P10 = rx1213_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
-    unless $P10, rx1213_fail
-    rx1213_cur."!mark_push"(0, -1, 0, $P10)
+    rx1207_cur."!cursor_pos"(rx1207_pos)
+    $P10 = rx1207_cur."O"("%relational, :pirop<isge ISs>")
+    unless $P10, rx1207_fail
+    rx1207_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1213_pos = $P10."pos"()
-.annotate 'line', 520
+    rx1207_pos = $P10."pos"()
   # rx pass
-    rx1213_cur."!cursor_pass"(rx1213_pos, "infix:sym<?? !!>")
-    rx1213_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1213_pos)
-    .return (rx1213_cur)
-  rx1213_fail:
-.annotate 'line', 431
-    (rx1213_rep, rx1213_pos, $I10, $P10) = rx1213_cur."!mark_fail"(0)
-    lt rx1213_pos, -1, rx1213_done
-    eq rx1213_pos, -1, rx1213_fail
+    rx1207_cur."!cursor_pass"(rx1207_pos, "infix:sym<ge>")
+    rx1207_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1207_pos)
+    .return (rx1207_cur)
+  rx1207_fail:
+.annotate 'line', 446
+    (rx1207_rep, rx1207_pos, $I10, $P10) = rx1207_cur."!mark_fail"(0)
+    lt rx1207_pos, -1, rx1207_done
+    eq rx1207_pos, -1, rx1207_fail
     jump $I10
-  rx1213_done:
-    rx1213_cur."!cursor_fail"()
-    rx1213_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
-    .return (rx1213_cur)
+  rx1207_done:
+    rx1207_cur."!cursor_fail"()
+    rx1207_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
+    .return (rx1207_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<?? !!>"  :subid("310_1274022894.43745") :method
-.annotate 'line', 431
-    $P1215 = self."!PREFIX__!subrule"("", "??")
-    new $P1216, "ResizablePMCArray"
-    push $P1216, $P1215
-    .return ($P1216)
+.sub "!PREFIX__infix:sym<ge>"  :subid("305_1275811487.95429") :method
+.annotate 'line', 446
+    $P1209 = self."!PREFIX__!subrule"("O", "ge")
+    new $P1210, "ResizablePMCArray"
+    push $P1210, $P1209
+    .return ($P1210)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=>"  :subid("311_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1219_tgt
-    .local int rx1219_pos
-    .local int rx1219_off
-    .local int rx1219_eos
-    .local int rx1219_rep
-    .local pmc rx1219_cur
-    (rx1219_cur, rx1219_pos, rx1219_tgt) = self."!cursor_start"()
-    rx1219_cur."!cursor_debug"("START ", "infix:sym<=>")
-    .lex unicode:"$\x{a2}", rx1219_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1219_eos, rx1219_tgt
-    set rx1219_off, 0
-    lt rx1219_pos, 2, rx1219_start
-    sub rx1219_off, rx1219_pos, 1
-    substr rx1219_tgt, rx1219_tgt, rx1219_off
-  rx1219_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1223_done
-    goto rxscan1223_scan
-  rxscan1223_loop:
-    ($P10) = rx1219_cur."from"()
-    inc $P10
-    set rx1219_pos, $P10
-    ge rx1219_pos, rx1219_eos, rxscan1223_done
-  rxscan1223_scan:
-    set_addr $I10, rxscan1223_loop
-    rx1219_cur."!mark_push"(0, rx1219_pos, $I10)
-  rxscan1223_done:
-.annotate 'line', 529
+.sub "infix:sym<lt>"  :subid("306_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1214_tgt
+    .local int rx1214_pos
+    .local int rx1214_off
+    .local int rx1214_eos
+    .local int rx1214_rep
+    .local pmc rx1214_cur
+    (rx1214_cur, rx1214_pos, rx1214_tgt) = self."!cursor_start"()
+    rx1214_cur."!cursor_debug"("START ", "infix:sym<lt>")
+    .lex unicode:"$\x{a2}", rx1214_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1214_eos, rx1214_tgt
+    gt rx1214_pos, rx1214_eos, rx1214_done
+    set rx1214_off, 0
+    lt rx1214_pos, 2, rx1214_start
+    sub rx1214_off, rx1214_pos, 1
+    substr rx1214_tgt, rx1214_tgt, rx1214_off
+  rx1214_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1218_done
+    goto rxscan1218_scan
+  rxscan1218_loop:
+    ($P10) = rx1214_cur."from"()
+    inc $P10
+    set rx1214_pos, $P10
+    ge rx1214_pos, rx1214_eos, rxscan1218_done
+  rxscan1218_scan:
+    set_addr $I10, rxscan1218_loop
+    rx1214_cur."!mark_push"(0, rx1214_pos, $I10)
+  rxscan1218_done:
+.annotate 'line', 525
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1224_fail
-    rx1219_cur."!mark_push"(0, rx1219_pos, $I10)
-  # rx literal  "="
-    add $I11, rx1219_pos, 1
-    gt $I11, rx1219_eos, rx1219_fail
-    sub $I11, rx1219_pos, rx1219_off
-    substr $S10, rx1219_tgt, $I11, 1
-    ne $S10, "=", rx1219_fail
-    add rx1219_pos, 1
-    set_addr $I10, rxcap_1224_fail
-    ($I12, $I11) = rx1219_cur."!mark_peek"($I10)
-    rx1219_cur."!cursor_pos"($I11)
-    ($P10) = rx1219_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1219_pos, "")
-    rx1219_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1219_fail
+    rx1214_cur."!mark_push"(0, rx1214_pos, $I10)
+  # rx literal  "lt"
+    add $I11, rx1214_pos, 2
+    gt $I11, rx1214_eos, rx1214_fail
+    sub $I11, rx1214_pos, rx1214_off
+    substr $S10, rx1214_tgt, $I11, 2
+    ne $S10, "lt", rx1214_fail
+    add rx1214_pos, 2
+    set_addr $I10, rxcap_1219_fail
+    ($I12, $I11) = rx1214_cur."!mark_peek"($I10)
+    rx1214_cur."!cursor_pos"($I11)
+    ($P10) = rx1214_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1214_pos, "")
+    rx1214_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1224_done
-  rxcap_1224_fail:
-    goto rx1219_fail
-  rxcap_1224_done:
-  # rx subrule "panic" subtype=method negate=
-    rx1219_cur."!cursor_pos"(rx1219_pos)
-    $P10 = rx1219_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
-    unless $P10, rx1219_fail
-    rx1219_pos = $P10."pos"()
-.annotate 'line', 528
+    goto rxcap_1219_done
+  rxcap_1219_fail:
+    goto rx1214_fail
+  rxcap_1219_done:
+  # rx subrule "O" subtype=capture negate=
+    rx1214_cur."!cursor_pos"(rx1214_pos)
+    $P10 = rx1214_cur."O"("%relational, :pirop<islt ISs>")
+    unless $P10, rx1214_fail
+    rx1214_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1214_pos = $P10."pos"()
   # rx pass
-    rx1219_cur."!cursor_pass"(rx1219_pos, "infix:sym<=>")
-    rx1219_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1219_pos)
-    .return (rx1219_cur)
-  rx1219_fail:
-.annotate 'line', 431
-    (rx1219_rep, rx1219_pos, $I10, $P10) = rx1219_cur."!mark_fail"(0)
-    lt rx1219_pos, -1, rx1219_done
-    eq rx1219_pos, -1, rx1219_fail
+    rx1214_cur."!cursor_pass"(rx1214_pos, "infix:sym<lt>")
+    rx1214_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1214_pos)
+    .return (rx1214_cur)
+  rx1214_fail:
+.annotate 'line', 446
+    (rx1214_rep, rx1214_pos, $I10, $P10) = rx1214_cur."!mark_fail"(0)
+    lt rx1214_pos, -1, rx1214_done
+    eq rx1214_pos, -1, rx1214_fail
     jump $I10
-  rx1219_done:
-    rx1219_cur."!cursor_fail"()
-    rx1219_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
-    .return (rx1219_cur)
+  rx1214_done:
+    rx1214_cur."!cursor_fail"()
+    rx1214_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
+    .return (rx1214_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=>"  :subid("312_1274022894.43745") :method
-.annotate 'line', 431
-    $P1221 = self."!PREFIX__!subrule"("", "=")
-    new $P1222, "ResizablePMCArray"
-    push $P1222, $P1221
-    .return ($P1222)
+.sub "!PREFIX__infix:sym<lt>"  :subid("307_1275811487.95429") :method
+.annotate 'line', 446
+    $P1216 = self."!PREFIX__!subrule"("O", "lt")
+    new $P1217, "ResizablePMCArray"
+    push $P1217, $P1216
+    .return ($P1217)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<:=>"  :subid("313_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1226_tgt
-    .local int rx1226_pos
-    .local int rx1226_off
-    .local int rx1226_eos
-    .local int rx1226_rep
-    .local pmc rx1226_cur
-    (rx1226_cur, rx1226_pos, rx1226_tgt) = self."!cursor_start"()
-    rx1226_cur."!cursor_debug"("START ", "infix:sym<:=>")
-    .lex unicode:"$\x{a2}", rx1226_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1226_eos, rx1226_tgt
-    set rx1226_off, 0
-    lt rx1226_pos, 2, rx1226_start
-    sub rx1226_off, rx1226_pos, 1
-    substr rx1226_tgt, rx1226_tgt, rx1226_off
-  rx1226_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1230_done
-    goto rxscan1230_scan
-  rxscan1230_loop:
-    ($P10) = rx1226_cur."from"()
-    inc $P10
-    set rx1226_pos, $P10
-    ge rx1226_pos, rx1226_eos, rxscan1230_done
-  rxscan1230_scan:
-    set_addr $I10, rxscan1230_loop
-    rx1226_cur."!mark_push"(0, rx1226_pos, $I10)
-  rxscan1230_done:
-.annotate 'line', 531
+.sub "infix:sym<gt>"  :subid("308_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1221_tgt
+    .local int rx1221_pos
+    .local int rx1221_off
+    .local int rx1221_eos
+    .local int rx1221_rep
+    .local pmc rx1221_cur
+    (rx1221_cur, rx1221_pos, rx1221_tgt) = self."!cursor_start"()
+    rx1221_cur."!cursor_debug"("START ", "infix:sym<gt>")
+    .lex unicode:"$\x{a2}", rx1221_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1221_eos, rx1221_tgt
+    gt rx1221_pos, rx1221_eos, rx1221_done
+    set rx1221_off, 0
+    lt rx1221_pos, 2, rx1221_start
+    sub rx1221_off, rx1221_pos, 1
+    substr rx1221_tgt, rx1221_tgt, rx1221_off
+  rx1221_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1225_done
+    goto rxscan1225_scan
+  rxscan1225_loop:
+    ($P10) = rx1221_cur."from"()
+    inc $P10
+    set rx1221_pos, $P10
+    ge rx1221_pos, rx1221_eos, rxscan1225_done
+  rxscan1225_scan:
+    set_addr $I10, rxscan1225_loop
+    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
+  rxscan1225_done:
+.annotate 'line', 526
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1231_fail
-    rx1226_cur."!mark_push"(0, rx1226_pos, $I10)
-  # rx literal  ":="
-    add $I11, rx1226_pos, 2
-    gt $I11, rx1226_eos, rx1226_fail
-    sub $I11, rx1226_pos, rx1226_off
-    substr $S10, rx1226_tgt, $I11, 2
-    ne $S10, ":=", rx1226_fail
-    add rx1226_pos, 2
-    set_addr $I10, rxcap_1231_fail
-    ($I12, $I11) = rx1226_cur."!mark_peek"($I10)
-    rx1226_cur."!cursor_pos"($I11)
-    ($P10) = rx1226_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1226_pos, "")
-    rx1226_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1226_fail
+    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
+  # rx literal  "gt"
+    add $I11, rx1221_pos, 2
+    gt $I11, rx1221_eos, rx1221_fail
+    sub $I11, rx1221_pos, rx1221_off
+    substr $S10, rx1221_tgt, $I11, 2
+    ne $S10, "gt", rx1221_fail
+    add rx1221_pos, 2
+    set_addr $I10, rxcap_1226_fail
+    ($I12, $I11) = rx1221_cur."!mark_peek"($I10)
+    rx1221_cur."!cursor_pos"($I11)
+    ($P10) = rx1221_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1221_pos, "")
+    rx1221_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1231_done
-  rxcap_1231_fail:
-    goto rx1226_fail
-  rxcap_1231_done:
+    goto rxcap_1226_done
+  rxcap_1226_fail:
+    goto rx1221_fail
+  rxcap_1226_done:
   # rx subrule "O" subtype=capture negate=
-    rx1226_cur."!cursor_pos"(rx1226_pos)
-    $P10 = rx1226_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1226_fail
-    rx1226_cur."!mark_push"(0, -1, 0, $P10)
+    rx1221_cur."!cursor_pos"(rx1221_pos)
+    $P10 = rx1221_cur."O"("%relational, :pirop<isgt ISs>")
+    unless $P10, rx1221_fail
+    rx1221_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1226_pos = $P10."pos"()
+    rx1221_pos = $P10."pos"()
   # rx pass
-    rx1226_cur."!cursor_pass"(rx1226_pos, "infix:sym<:=>")
-    rx1226_cur."!cursor_debug"("PASS  ", "infix:sym<:=>", " at pos=", rx1226_pos)
-    .return (rx1226_cur)
-  rx1226_fail:
-.annotate 'line', 431
-    (rx1226_rep, rx1226_pos, $I10, $P10) = rx1226_cur."!mark_fail"(0)
-    lt rx1226_pos, -1, rx1226_done
-    eq rx1226_pos, -1, rx1226_fail
+    rx1221_cur."!cursor_pass"(rx1221_pos, "infix:sym<gt>")
+    rx1221_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1221_pos)
+    .return (rx1221_cur)
+  rx1221_fail:
+.annotate 'line', 446
+    (rx1221_rep, rx1221_pos, $I10, $P10) = rx1221_cur."!mark_fail"(0)
+    lt rx1221_pos, -1, rx1221_done
+    eq rx1221_pos, -1, rx1221_fail
     jump $I10
-  rx1226_done:
-    rx1226_cur."!cursor_fail"()
-    rx1226_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
-    .return (rx1226_cur)
+  rx1221_done:
+    rx1221_cur."!cursor_fail"()
+    rx1221_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
+    .return (rx1221_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<:=>"  :subid("314_1274022894.43745") :method
-.annotate 'line', 431
-    $P1228 = self."!PREFIX__!subrule"("O", ":=")
-    new $P1229, "ResizablePMCArray"
-    push $P1229, $P1228
-    .return ($P1229)
+.sub "!PREFIX__infix:sym<gt>"  :subid("309_1275811487.95429") :method
+.annotate 'line', 446
+    $P1223 = self."!PREFIX__!subrule"("O", "gt")
+    new $P1224, "ResizablePMCArray"
+    push $P1224, $P1223
+    .return ($P1224)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<::=>"  :subid("315_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1233_tgt
-    .local int rx1233_pos
-    .local int rx1233_off
-    .local int rx1233_eos
-    .local int rx1233_rep
-    .local pmc rx1233_cur
-    (rx1233_cur, rx1233_pos, rx1233_tgt) = self."!cursor_start"()
-    rx1233_cur."!cursor_debug"("START ", "infix:sym<::=>")
-    .lex unicode:"$\x{a2}", rx1233_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1233_eos, rx1233_tgt
-    set rx1233_off, 0
-    lt rx1233_pos, 2, rx1233_start
-    sub rx1233_off, rx1233_pos, 1
-    substr rx1233_tgt, rx1233_tgt, rx1233_off
-  rx1233_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1237_done
-    goto rxscan1237_scan
-  rxscan1237_loop:
-    ($P10) = rx1233_cur."from"()
-    inc $P10
-    set rx1233_pos, $P10
-    ge rx1233_pos, rx1233_eos, rxscan1237_done
-  rxscan1237_scan:
-    set_addr $I10, rxscan1237_loop
-    rx1233_cur."!mark_push"(0, rx1233_pos, $I10)
-  rxscan1237_done:
-.annotate 'line', 532
+.sub "infix:sym<=:=>"  :subid("310_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1228_tgt
+    .local int rx1228_pos
+    .local int rx1228_off
+    .local int rx1228_eos
+    .local int rx1228_rep
+    .local pmc rx1228_cur
+    (rx1228_cur, rx1228_pos, rx1228_tgt) = self."!cursor_start"()
+    rx1228_cur."!cursor_debug"("START ", "infix:sym<=:=>")
+    .lex unicode:"$\x{a2}", rx1228_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1228_eos, rx1228_tgt
+    gt rx1228_pos, rx1228_eos, rx1228_done
+    set rx1228_off, 0
+    lt rx1228_pos, 2, rx1228_start
+    sub rx1228_off, rx1228_pos, 1
+    substr rx1228_tgt, rx1228_tgt, rx1228_off
+  rx1228_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1232_done
+    goto rxscan1232_scan
+  rxscan1232_loop:
+    ($P10) = rx1228_cur."from"()
+    inc $P10
+    set rx1228_pos, $P10
+    ge rx1228_pos, rx1228_eos, rxscan1232_done
+  rxscan1232_scan:
+    set_addr $I10, rxscan1232_loop
+    rx1228_cur."!mark_push"(0, rx1228_pos, $I10)
+  rxscan1232_done:
+.annotate 'line', 527
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1238_fail
-    rx1233_cur."!mark_push"(0, rx1233_pos, $I10)
-  # rx literal  "::="
-    add $I11, rx1233_pos, 3
-    gt $I11, rx1233_eos, rx1233_fail
-    sub $I11, rx1233_pos, rx1233_off
-    substr $S10, rx1233_tgt, $I11, 3
-    ne $S10, "::=", rx1233_fail
-    add rx1233_pos, 3
-    set_addr $I10, rxcap_1238_fail
-    ($I12, $I11) = rx1233_cur."!mark_peek"($I10)
-    rx1233_cur."!cursor_pos"($I11)
-    ($P10) = rx1233_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1233_pos, "")
-    rx1233_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1233_fail
+    rx1228_cur."!mark_push"(0, rx1228_pos, $I10)
+  # rx literal  "=:="
+    add $I11, rx1228_pos, 3
+    gt $I11, rx1228_eos, rx1228_fail
+    sub $I11, rx1228_pos, rx1228_off
+    substr $S10, rx1228_tgt, $I11, 3
+    ne $S10, "=:=", rx1228_fail
+    add rx1228_pos, 3
+    set_addr $I10, rxcap_1233_fail
+    ($I12, $I11) = rx1228_cur."!mark_peek"($I10)
+    rx1228_cur."!cursor_pos"($I11)
+    ($P10) = rx1228_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1228_pos, "")
+    rx1228_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1238_done
-  rxcap_1238_fail:
-    goto rx1233_fail
-  rxcap_1238_done:
+    goto rxcap_1233_done
+  rxcap_1233_fail:
+    goto rx1228_fail
+  rxcap_1233_done:
   # rx subrule "O" subtype=capture negate=
-    rx1233_cur."!cursor_pos"(rx1233_pos)
-    $P10 = rx1233_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1233_fail
-    rx1233_cur."!mark_push"(0, -1, 0, $P10)
+    rx1228_cur."!cursor_pos"(rx1228_pos)
+    $P10 = rx1228_cur."O"("%relational, :pirop<issame>")
+    unless $P10, rx1228_fail
+    rx1228_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1233_pos = $P10."pos"()
+    rx1228_pos = $P10."pos"()
   # rx pass
-    rx1233_cur."!cursor_pass"(rx1233_pos, "infix:sym<::=>")
-    rx1233_cur."!cursor_debug"("PASS  ", "infix:sym<::=>", " at pos=", rx1233_pos)
-    .return (rx1233_cur)
-  rx1233_fail:
-.annotate 'line', 431
-    (rx1233_rep, rx1233_pos, $I10, $P10) = rx1233_cur."!mark_fail"(0)
-    lt rx1233_pos, -1, rx1233_done
-    eq rx1233_pos, -1, rx1233_fail
+    rx1228_cur."!cursor_pass"(rx1228_pos, "infix:sym<=:=>")
+    rx1228_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1228_pos)
+    .return (rx1228_cur)
+  rx1228_fail:
+.annotate 'line', 446
+    (rx1228_rep, rx1228_pos, $I10, $P10) = rx1228_cur."!mark_fail"(0)
+    lt rx1228_pos, -1, rx1228_done
+    eq rx1228_pos, -1, rx1228_fail
     jump $I10
-  rx1233_done:
-    rx1233_cur."!cursor_fail"()
-    rx1233_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
-    .return (rx1233_cur)
+  rx1228_done:
+    rx1228_cur."!cursor_fail"()
+    rx1228_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
+    .return (rx1228_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<::=>"  :subid("316_1274022894.43745") :method
-.annotate 'line', 431
-    $P1235 = self."!PREFIX__!subrule"("O", "::=")
-    new $P1236, "ResizablePMCArray"
-    push $P1236, $P1235
-    .return ($P1236)
+.sub "!PREFIX__infix:sym<=:=>"  :subid("311_1275811487.95429") :method
+.annotate 'line', 446
+    $P1230 = self."!PREFIX__!subrule"("O", "=:=")
+    new $P1231, "ResizablePMCArray"
+    push $P1231, $P1230
+    .return ($P1231)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<,>"  :subid("317_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1240_tgt
-    .local int rx1240_pos
-    .local int rx1240_off
-    .local int rx1240_eos
-    .local int rx1240_rep
-    .local pmc rx1240_cur
-    (rx1240_cur, rx1240_pos, rx1240_tgt) = self."!cursor_start"()
-    rx1240_cur."!cursor_debug"("START ", "infix:sym<,>")
-    .lex unicode:"$\x{a2}", rx1240_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1240_eos, rx1240_tgt
-    set rx1240_off, 0
-    lt rx1240_pos, 2, rx1240_start
-    sub rx1240_off, rx1240_pos, 1
-    substr rx1240_tgt, rx1240_tgt, rx1240_off
-  rx1240_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1244_done
-    goto rxscan1244_scan
-  rxscan1244_loop:
-    ($P10) = rx1240_cur."from"()
-    inc $P10
-    set rx1240_pos, $P10
-    ge rx1240_pos, rx1240_eos, rxscan1244_done
-  rxscan1244_scan:
-    set_addr $I10, rxscan1244_loop
-    rx1240_cur."!mark_push"(0, rx1240_pos, $I10)
-  rxscan1244_done:
-.annotate 'line', 534
+.sub "infix:sym<~~>"  :subid("312_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1235_tgt
+    .local int rx1235_pos
+    .local int rx1235_off
+    .local int rx1235_eos
+    .local int rx1235_rep
+    .local pmc rx1235_cur
+    (rx1235_cur, rx1235_pos, rx1235_tgt) = self."!cursor_start"()
+    rx1235_cur."!cursor_debug"("START ", "infix:sym<~~>")
+    .lex unicode:"$\x{a2}", rx1235_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1235_eos, rx1235_tgt
+    gt rx1235_pos, rx1235_eos, rx1235_done
+    set rx1235_off, 0
+    lt rx1235_pos, 2, rx1235_start
+    sub rx1235_off, rx1235_pos, 1
+    substr rx1235_tgt, rx1235_tgt, rx1235_off
+  rx1235_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1239_done
+    goto rxscan1239_scan
+  rxscan1239_loop:
+    ($P10) = rx1235_cur."from"()
+    inc $P10
+    set rx1235_pos, $P10
+    ge rx1235_pos, rx1235_eos, rxscan1239_done
+  rxscan1239_scan:
+    set_addr $I10, rxscan1239_loop
+    rx1235_cur."!mark_push"(0, rx1235_pos, $I10)
+  rxscan1239_done:
+.annotate 'line', 528
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1245_fail
-    rx1240_cur."!mark_push"(0, rx1240_pos, $I10)
-  # rx literal  ","
-    add $I11, rx1240_pos, 1
-    gt $I11, rx1240_eos, rx1240_fail
-    sub $I11, rx1240_pos, rx1240_off
-    substr $S10, rx1240_tgt, $I11, 1
-    ne $S10, ",", rx1240_fail
-    add rx1240_pos, 1
-    set_addr $I10, rxcap_1245_fail
-    ($I12, $I11) = rx1240_cur."!mark_peek"($I10)
-    rx1240_cur."!cursor_pos"($I11)
-    ($P10) = rx1240_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1240_pos, "")
-    rx1240_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1240_fail
+    rx1235_cur."!mark_push"(0, rx1235_pos, $I10)
+  # rx literal  "~~"
+    add $I11, rx1235_pos, 2
+    gt $I11, rx1235_eos, rx1235_fail
+    sub $I11, rx1235_pos, rx1235_off
+    substr $S10, rx1235_tgt, $I11, 2
+    ne $S10, "~~", rx1235_fail
+    add rx1235_pos, 2
+    set_addr $I10, rxcap_1240_fail
+    ($I12, $I11) = rx1235_cur."!mark_peek"($I10)
+    rx1235_cur."!cursor_pos"($I11)
+    ($P10) = rx1235_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1235_pos, "")
+    rx1235_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1245_done
-  rxcap_1245_fail:
-    goto rx1240_fail
-  rxcap_1245_done:
+    goto rxcap_1240_done
+  rxcap_1240_fail:
+    goto rx1235_fail
+  rxcap_1240_done:
   # rx subrule "O" subtype=capture negate=
-    rx1240_cur."!cursor_pos"(rx1240_pos)
-    $P10 = rx1240_cur."O"("%comma, :pasttype<list>")
-    unless $P10, rx1240_fail
-    rx1240_cur."!mark_push"(0, -1, 0, $P10)
+    rx1235_cur."!cursor_pos"(rx1235_pos)
+    $P10 = rx1235_cur."O"("%relational, :reducecheck<smartmatch>")
+    unless $P10, rx1235_fail
+    rx1235_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1240_pos = $P10."pos"()
+    rx1235_pos = $P10."pos"()
   # rx pass
-    rx1240_cur."!cursor_pass"(rx1240_pos, "infix:sym<,>")
-    rx1240_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1240_pos)
-    .return (rx1240_cur)
-  rx1240_fail:
-.annotate 'line', 431
-    (rx1240_rep, rx1240_pos, $I10, $P10) = rx1240_cur."!mark_fail"(0)
-    lt rx1240_pos, -1, rx1240_done
-    eq rx1240_pos, -1, rx1240_fail
+    rx1235_cur."!cursor_pass"(rx1235_pos, "infix:sym<~~>")
+    rx1235_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1235_pos)
+    .return (rx1235_cur)
+  rx1235_fail:
+.annotate 'line', 446
+    (rx1235_rep, rx1235_pos, $I10, $P10) = rx1235_cur."!mark_fail"(0)
+    lt rx1235_pos, -1, rx1235_done
+    eq rx1235_pos, -1, rx1235_fail
     jump $I10
-  rx1240_done:
-    rx1240_cur."!cursor_fail"()
-    rx1240_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
-    .return (rx1240_cur)
+  rx1235_done:
+    rx1235_cur."!cursor_fail"()
+    rx1235_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
+    .return (rx1235_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<,>"  :subid("318_1274022894.43745") :method
-.annotate 'line', 431
-    $P1242 = self."!PREFIX__!subrule"("O", ",")
-    new $P1243, "ResizablePMCArray"
-    push $P1243, $P1242
-    .return ($P1243)
+.sub "!PREFIX__infix:sym<~~>"  :subid("313_1275811487.95429") :method
+.annotate 'line', 446
+    $P1237 = self."!PREFIX__!subrule"("O", "~~")
+    new $P1238, "ResizablePMCArray"
+    push $P1238, $P1237
+    .return ($P1238)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<return>"  :subid("319_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1247_tgt
-    .local int rx1247_pos
-    .local int rx1247_off
-    .local int rx1247_eos
-    .local int rx1247_rep
-    .local pmc rx1247_cur
-    (rx1247_cur, rx1247_pos, rx1247_tgt) = self."!cursor_start"()
-    rx1247_cur."!cursor_debug"("START ", "prefix:sym<return>")
-    .lex unicode:"$\x{a2}", rx1247_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1247_eos, rx1247_tgt
-    set rx1247_off, 0
-    lt rx1247_pos, 2, rx1247_start
-    sub rx1247_off, rx1247_pos, 1
-    substr rx1247_tgt, rx1247_tgt, rx1247_off
-  rx1247_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1250_done
-    goto rxscan1250_scan
-  rxscan1250_loop:
-    ($P10) = rx1247_cur."from"()
-    inc $P10
-    set rx1247_pos, $P10
-    ge rx1247_pos, rx1247_eos, rxscan1250_done
-  rxscan1250_scan:
-    set_addr $I10, rxscan1250_loop
-    rx1247_cur."!mark_push"(0, rx1247_pos, $I10)
-  rxscan1250_done:
-.annotate 'line', 536
+.sub "infix:sym<&&>"  :subid("314_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1242_tgt
+    .local int rx1242_pos
+    .local int rx1242_off
+    .local int rx1242_eos
+    .local int rx1242_rep
+    .local pmc rx1242_cur
+    (rx1242_cur, rx1242_pos, rx1242_tgt) = self."!cursor_start"()
+    rx1242_cur."!cursor_debug"("START ", "infix:sym<&&>")
+    .lex unicode:"$\x{a2}", rx1242_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1242_eos, rx1242_tgt
+    gt rx1242_pos, rx1242_eos, rx1242_done
+    set rx1242_off, 0
+    lt rx1242_pos, 2, rx1242_start
+    sub rx1242_off, rx1242_pos, 1
+    substr rx1242_tgt, rx1242_tgt, rx1242_off
+  rx1242_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1246_done
+    goto rxscan1246_scan
+  rxscan1246_loop:
+    ($P10) = rx1242_cur."from"()
+    inc $P10
+    set rx1242_pos, $P10
+    ge rx1242_pos, rx1242_eos, rxscan1246_done
+  rxscan1246_scan:
+    set_addr $I10, rxscan1246_loop
+    rx1242_cur."!mark_push"(0, rx1242_pos, $I10)
+  rxscan1246_done:
+.annotate 'line', 530
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1251_fail
-    rx1247_cur."!mark_push"(0, rx1247_pos, $I10)
-  # rx literal  "return"
-    add $I11, rx1247_pos, 6
-    gt $I11, rx1247_eos, rx1247_fail
-    sub $I11, rx1247_pos, rx1247_off
-    substr $S10, rx1247_tgt, $I11, 6
-    ne $S10, "return", rx1247_fail
-    add rx1247_pos, 6
-    set_addr $I10, rxcap_1251_fail
-    ($I12, $I11) = rx1247_cur."!mark_peek"($I10)
-    rx1247_cur."!cursor_pos"($I11)
-    ($P10) = rx1247_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1247_pos, "")
-    rx1247_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1247_fail
+    rx1242_cur."!mark_push"(0, rx1242_pos, $I10)
+  # rx literal  "&&"
+    add $I11, rx1242_pos, 2
+    gt $I11, rx1242_eos, rx1242_fail
+    sub $I11, rx1242_pos, rx1242_off
+    substr $S10, rx1242_tgt, $I11, 2
+    ne $S10, "&&", rx1242_fail
+    add rx1242_pos, 2
+    set_addr $I10, rxcap_1247_fail
+    ($I12, $I11) = rx1242_cur."!mark_peek"($I10)
+    rx1242_cur."!cursor_pos"($I11)
+    ($P10) = rx1242_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1242_pos, "")
+    rx1242_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1251_done
-  rxcap_1251_fail:
-    goto rx1247_fail
-  rxcap_1251_done:
-  # rx charclass s
-    ge rx1247_pos, rx1247_eos, rx1247_fail
-    sub $I10, rx1247_pos, rx1247_off
-    is_cclass $I11, 32, rx1247_tgt, $I10
-    unless $I11, rx1247_fail
-    inc rx1247_pos
+    goto rxcap_1247_done
+  rxcap_1247_fail:
+    goto rx1242_fail
+  rxcap_1247_done:
   # rx subrule "O" subtype=capture negate=
-    rx1247_cur."!cursor_pos"(rx1247_pos)
-    $P10 = rx1247_cur."O"("%list_prefix, :pasttype<return>")
-    unless $P10, rx1247_fail
-    rx1247_cur."!mark_push"(0, -1, 0, $P10)
+    rx1242_cur."!cursor_pos"(rx1242_pos)
+    $P10 = rx1242_cur."O"("%tight_and, :pasttype<if>")
+    unless $P10, rx1242_fail
+    rx1242_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1247_pos = $P10."pos"()
+    rx1242_pos = $P10."pos"()
   # rx pass
-    rx1247_cur."!cursor_pass"(rx1247_pos, "prefix:sym<return>")
-    rx1247_cur."!cursor_debug"("PASS  ", "prefix:sym<return>", " at pos=", rx1247_pos)
-    .return (rx1247_cur)
-  rx1247_fail:
-.annotate 'line', 431
-    (rx1247_rep, rx1247_pos, $I10, $P10) = rx1247_cur."!mark_fail"(0)
-    lt rx1247_pos, -1, rx1247_done
-    eq rx1247_pos, -1, rx1247_fail
+    rx1242_cur."!cursor_pass"(rx1242_pos, "infix:sym<&&>")
+    rx1242_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1242_pos)
+    .return (rx1242_cur)
+  rx1242_fail:
+.annotate 'line', 446
+    (rx1242_rep, rx1242_pos, $I10, $P10) = rx1242_cur."!mark_fail"(0)
+    lt rx1242_pos, -1, rx1242_done
+    eq rx1242_pos, -1, rx1242_fail
     jump $I10
-  rx1247_done:
-    rx1247_cur."!cursor_fail"()
-    rx1247_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
-    .return (rx1247_cur)
+  rx1242_done:
+    rx1242_cur."!cursor_fail"()
+    rx1242_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
+    .return (rx1242_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<return>"  :subid("320_1274022894.43745") :method
-.annotate 'line', 431
-    new $P1249, "ResizablePMCArray"
-    push $P1249, "return"
-    .return ($P1249)
+.sub "!PREFIX__infix:sym<&&>"  :subid("315_1275811487.95429") :method
+.annotate 'line', 446
+    $P1244 = self."!PREFIX__!subrule"("O", "&&")
+    new $P1245, "ResizablePMCArray"
+    push $P1245, $P1244
+    .return ($P1245)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<make>"  :subid("321_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1253_tgt
-    .local int rx1253_pos
-    .local int rx1253_off
-    .local int rx1253_eos
-    .local int rx1253_rep
-    .local pmc rx1253_cur
-    (rx1253_cur, rx1253_pos, rx1253_tgt) = self."!cursor_start"()
-    rx1253_cur."!cursor_debug"("START ", "prefix:sym<make>")
-    .lex unicode:"$\x{a2}", rx1253_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1253_eos, rx1253_tgt
-    set rx1253_off, 0
-    lt rx1253_pos, 2, rx1253_start
-    sub rx1253_off, rx1253_pos, 1
-    substr rx1253_tgt, rx1253_tgt, rx1253_off
-  rx1253_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1256_done
-    goto rxscan1256_scan
-  rxscan1256_loop:
-    ($P10) = rx1253_cur."from"()
-    inc $P10
-    set rx1253_pos, $P10
-    ge rx1253_pos, rx1253_eos, rxscan1256_done
-  rxscan1256_scan:
-    set_addr $I10, rxscan1256_loop
-    rx1253_cur."!mark_push"(0, rx1253_pos, $I10)
-  rxscan1256_done:
-.annotate 'line', 537
+.sub "infix:sym<||>"  :subid("316_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1249_tgt
+    .local int rx1249_pos
+    .local int rx1249_off
+    .local int rx1249_eos
+    .local int rx1249_rep
+    .local pmc rx1249_cur
+    (rx1249_cur, rx1249_pos, rx1249_tgt) = self."!cursor_start"()
+    rx1249_cur."!cursor_debug"("START ", "infix:sym<||>")
+    .lex unicode:"$\x{a2}", rx1249_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1249_eos, rx1249_tgt
+    gt rx1249_pos, rx1249_eos, rx1249_done
+    set rx1249_off, 0
+    lt rx1249_pos, 2, rx1249_start
+    sub rx1249_off, rx1249_pos, 1
+    substr rx1249_tgt, rx1249_tgt, rx1249_off
+  rx1249_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1253_done
+    goto rxscan1253_scan
+  rxscan1253_loop:
+    ($P10) = rx1249_cur."from"()
+    inc $P10
+    set rx1249_pos, $P10
+    ge rx1249_pos, rx1249_eos, rxscan1253_done
+  rxscan1253_scan:
+    set_addr $I10, rxscan1253_loop
+    rx1249_cur."!mark_push"(0, rx1249_pos, $I10)
+  rxscan1253_done:
+.annotate 'line', 532
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1257_fail
-    rx1253_cur."!mark_push"(0, rx1253_pos, $I10)
-  # rx literal  "make"
-    add $I11, rx1253_pos, 4
-    gt $I11, rx1253_eos, rx1253_fail
-    sub $I11, rx1253_pos, rx1253_off
-    substr $S10, rx1253_tgt, $I11, 4
-    ne $S10, "make", rx1253_fail
-    add rx1253_pos, 4
-    set_addr $I10, rxcap_1257_fail
-    ($I12, $I11) = rx1253_cur."!mark_peek"($I10)
-    rx1253_cur."!cursor_pos"($I11)
-    ($P10) = rx1253_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1253_pos, "")
-    rx1253_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1254_fail
+    rx1249_cur."!mark_push"(0, rx1249_pos, $I10)
+  # rx literal  "||"
+    add $I11, rx1249_pos, 2
+    gt $I11, rx1249_eos, rx1249_fail
+    sub $I11, rx1249_pos, rx1249_off
+    substr $S10, rx1249_tgt, $I11, 2
+    ne $S10, "||", rx1249_fail
+    add rx1249_pos, 2
+    set_addr $I10, rxcap_1254_fail
+    ($I12, $I11) = rx1249_cur."!mark_peek"($I10)
+    rx1249_cur."!cursor_pos"($I11)
+    ($P10) = rx1249_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1249_pos, "")
+    rx1249_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1257_done
-  rxcap_1257_fail:
-    goto rx1253_fail
-  rxcap_1257_done:
-  # rx charclass s
-    ge rx1253_pos, rx1253_eos, rx1253_fail
-    sub $I10, rx1253_pos, rx1253_off
-    is_cclass $I11, 32, rx1253_tgt, $I10
-    unless $I11, rx1253_fail
-    inc rx1253_pos
+    goto rxcap_1254_done
+  rxcap_1254_fail:
+    goto rx1249_fail
+  rxcap_1254_done:
   # rx subrule "O" subtype=capture negate=
-    rx1253_cur."!cursor_pos"(rx1253_pos)
-    $P10 = rx1253_cur."O"("%list_prefix")
-    unless $P10, rx1253_fail
-    rx1253_cur."!mark_push"(0, -1, 0, $P10)
+    rx1249_cur."!cursor_pos"(rx1249_pos)
+    $P10 = rx1249_cur."O"("%tight_or, :pasttype<unless>")
+    unless $P10, rx1249_fail
+    rx1249_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1253_pos = $P10."pos"()
+    rx1249_pos = $P10."pos"()
   # rx pass
-    rx1253_cur."!cursor_pass"(rx1253_pos, "prefix:sym<make>")
-    rx1253_cur."!cursor_debug"("PASS  ", "prefix:sym<make>", " at pos=", rx1253_pos)
-    .return (rx1253_cur)
-  rx1253_fail:
-.annotate 'line', 431
-    (rx1253_rep, rx1253_pos, $I10, $P10) = rx1253_cur."!mark_fail"(0)
-    lt rx1253_pos, -1, rx1253_done
-    eq rx1253_pos, -1, rx1253_fail
+    rx1249_cur."!cursor_pass"(rx1249_pos, "infix:sym<||>")
+    rx1249_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1249_pos)
+    .return (rx1249_cur)
+  rx1249_fail:
+.annotate 'line', 446
+    (rx1249_rep, rx1249_pos, $I10, $P10) = rx1249_cur."!mark_fail"(0)
+    lt rx1249_pos, -1, rx1249_done
+    eq rx1249_pos, -1, rx1249_fail
     jump $I10
-  rx1253_done:
-    rx1253_cur."!cursor_fail"()
-    rx1253_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
-    .return (rx1253_cur)
+  rx1249_done:
+    rx1249_cur."!cursor_fail"()
+    rx1249_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
+    .return (rx1249_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<make>"  :subid("322_1274022894.43745") :method
-.annotate 'line', 431
-    new $P1255, "ResizablePMCArray"
-    push $P1255, "make"
-    .return ($P1255)
+.sub "!PREFIX__infix:sym<||>"  :subid("317_1275811487.95429") :method
+.annotate 'line', 446
+    $P1251 = self."!PREFIX__!subrule"("O", "||")
+    new $P1252, "ResizablePMCArray"
+    push $P1252, $P1251
+    .return ($P1252)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<last>"  :subid("323_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1259_tgt
-    .local int rx1259_pos
-    .local int rx1259_off
-    .local int rx1259_eos
-    .local int rx1259_rep
-    .local pmc rx1259_cur
-    (rx1259_cur, rx1259_pos, rx1259_tgt) = self."!cursor_start"()
-    rx1259_cur."!cursor_debug"("START ", "term:sym<last>")
-    .lex unicode:"$\x{a2}", rx1259_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1259_eos, rx1259_tgt
-    set rx1259_off, 0
-    lt rx1259_pos, 2, rx1259_start
-    sub rx1259_off, rx1259_pos, 1
-    substr rx1259_tgt, rx1259_tgt, rx1259_off
-  rx1259_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1262_done
-    goto rxscan1262_scan
-  rxscan1262_loop:
-    ($P10) = rx1259_cur."from"()
-    inc $P10
-    set rx1259_pos, $P10
-    ge rx1259_pos, rx1259_eos, rxscan1262_done
-  rxscan1262_scan:
-    set_addr $I10, rxscan1262_loop
-    rx1259_cur."!mark_push"(0, rx1259_pos, $I10)
-  rxscan1262_done:
-.annotate 'line', 538
+.sub "infix:sym<//>"  :subid("318_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1256_tgt
+    .local int rx1256_pos
+    .local int rx1256_off
+    .local int rx1256_eos
+    .local int rx1256_rep
+    .local pmc rx1256_cur
+    (rx1256_cur, rx1256_pos, rx1256_tgt) = self."!cursor_start"()
+    rx1256_cur."!cursor_debug"("START ", "infix:sym<//>")
+    .lex unicode:"$\x{a2}", rx1256_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1256_eos, rx1256_tgt
+    gt rx1256_pos, rx1256_eos, rx1256_done
+    set rx1256_off, 0
+    lt rx1256_pos, 2, rx1256_start
+    sub rx1256_off, rx1256_pos, 1
+    substr rx1256_tgt, rx1256_tgt, rx1256_off
+  rx1256_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1260_done
+    goto rxscan1260_scan
+  rxscan1260_loop:
+    ($P10) = rx1256_cur."from"()
+    inc $P10
+    set rx1256_pos, $P10
+    ge rx1256_pos, rx1256_eos, rxscan1260_done
+  rxscan1260_scan:
+    set_addr $I10, rxscan1260_loop
+    rx1256_cur."!mark_push"(0, rx1256_pos, $I10)
+  rxscan1260_done:
+.annotate 'line', 533
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1263_fail
-    rx1259_cur."!mark_push"(0, rx1259_pos, $I10)
-  # rx literal  "last"
-    add $I11, rx1259_pos, 4
-    gt $I11, rx1259_eos, rx1259_fail
-    sub $I11, rx1259_pos, rx1259_off
-    substr $S10, rx1259_tgt, $I11, 4
-    ne $S10, "last", rx1259_fail
-    add rx1259_pos, 4
-    set_addr $I10, rxcap_1263_fail
-    ($I12, $I11) = rx1259_cur."!mark_peek"($I10)
-    rx1259_cur."!cursor_pos"($I11)
-    ($P10) = rx1259_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1259_pos, "")
-    rx1259_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1261_fail
+    rx1256_cur."!mark_push"(0, rx1256_pos, $I10)
+  # rx literal  "//"
+    add $I11, rx1256_pos, 2
+    gt $I11, rx1256_eos, rx1256_fail
+    sub $I11, rx1256_pos, rx1256_off
+    substr $S10, rx1256_tgt, $I11, 2
+    ne $S10, "//", rx1256_fail
+    add rx1256_pos, 2
+    set_addr $I10, rxcap_1261_fail
+    ($I12, $I11) = rx1256_cur."!mark_peek"($I10)
+    rx1256_cur."!cursor_pos"($I11)
+    ($P10) = rx1256_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1256_pos, "")
+    rx1256_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1263_done
-  rxcap_1263_fail:
-    goto rx1259_fail
-  rxcap_1263_done:
-  # rx pass
-    rx1259_cur."!cursor_pass"(rx1259_pos, "term:sym<last>")
-    rx1259_cur."!cursor_debug"("PASS  ", "term:sym<last>", " at pos=", rx1259_pos)
-    .return (rx1259_cur)
-  rx1259_fail:
-.annotate 'line', 431
-    (rx1259_rep, rx1259_pos, $I10, $P10) = rx1259_cur."!mark_fail"(0)
-    lt rx1259_pos, -1, rx1259_done
-    eq rx1259_pos, -1, rx1259_fail
+    goto rxcap_1261_done
+  rxcap_1261_fail:
+    goto rx1256_fail
+  rxcap_1261_done:
+  # rx subrule "O" subtype=capture negate=
+    rx1256_cur."!cursor_pos"(rx1256_pos)
+    $P10 = rx1256_cur."O"("%tight_or, :pasttype<def_or>")
+    unless $P10, rx1256_fail
+    rx1256_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1256_pos = $P10."pos"()
+  # rx pass
+    rx1256_cur."!cursor_pass"(rx1256_pos, "infix:sym<//>")
+    rx1256_cur."!cursor_debug"("PASS  ", "infix:sym<//>", " at pos=", rx1256_pos)
+    .return (rx1256_cur)
+  rx1256_fail:
+.annotate 'line', 446
+    (rx1256_rep, rx1256_pos, $I10, $P10) = rx1256_cur."!mark_fail"(0)
+    lt rx1256_pos, -1, rx1256_done
+    eq rx1256_pos, -1, rx1256_fail
     jump $I10
-  rx1259_done:
-    rx1259_cur."!cursor_fail"()
-    rx1259_cur."!cursor_debug"("FAIL  ", "term:sym<last>")
-    .return (rx1259_cur)
+  rx1256_done:
+    rx1256_cur."!cursor_fail"()
+    rx1256_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
+    .return (rx1256_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<last>"  :subid("324_1274022894.43745") :method
-.annotate 'line', 431
-    new $P1261, "ResizablePMCArray"
-    push $P1261, "last"
-    .return ($P1261)
+.sub "!PREFIX__infix:sym<//>"  :subid("319_1275811487.95429") :method
+.annotate 'line', 446
+    $P1258 = self."!PREFIX__!subrule"("O", "//")
+    new $P1259, "ResizablePMCArray"
+    push $P1259, $P1258
+    .return ($P1259)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<next>"  :subid("325_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1265_tgt
-    .local int rx1265_pos
-    .local int rx1265_off
-    .local int rx1265_eos
-    .local int rx1265_rep
-    .local pmc rx1265_cur
-    (rx1265_cur, rx1265_pos, rx1265_tgt) = self."!cursor_start"()
-    rx1265_cur."!cursor_debug"("START ", "term:sym<next>")
-    .lex unicode:"$\x{a2}", rx1265_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1265_eos, rx1265_tgt
-    set rx1265_off, 0
-    lt rx1265_pos, 2, rx1265_start
-    sub rx1265_off, rx1265_pos, 1
-    substr rx1265_tgt, rx1265_tgt, rx1265_off
-  rx1265_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1268_done
-    goto rxscan1268_scan
-  rxscan1268_loop:
-    ($P10) = rx1265_cur."from"()
-    inc $P10
-    set rx1265_pos, $P10
-    ge rx1265_pos, rx1265_eos, rxscan1268_done
-  rxscan1268_scan:
-    set_addr $I10, rxscan1268_loop
-    rx1265_cur."!mark_push"(0, rx1265_pos, $I10)
-  rxscan1268_done:
+.sub "infix:sym<?? !!>"  :subid("320_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1263_tgt
+    .local int rx1263_pos
+    .local int rx1263_off
+    .local int rx1263_eos
+    .local int rx1263_rep
+    .local pmc rx1263_cur
+    (rx1263_cur, rx1263_pos, rx1263_tgt) = self."!cursor_start"()
+    rx1263_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
+    .lex unicode:"$\x{a2}", rx1263_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1263_eos, rx1263_tgt
+    gt rx1263_pos, rx1263_eos, rx1263_done
+    set rx1263_off, 0
+    lt rx1263_pos, 2, rx1263_start
+    sub rx1263_off, rx1263_pos, 1
+    substr rx1263_tgt, rx1263_tgt, rx1263_off
+  rx1263_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1267_done
+    goto rxscan1267_scan
+  rxscan1267_loop:
+    ($P10) = rx1263_cur."from"()
+    inc $P10
+    set rx1263_pos, $P10
+    ge rx1263_pos, rx1263_eos, rxscan1267_done
+  rxscan1267_scan:
+    set_addr $I10, rxscan1267_loop
+    rx1263_cur."!mark_push"(0, rx1263_pos, $I10)
+  rxscan1267_done:
+.annotate 'line', 536
+  # rx literal  "??"
+    add $I11, rx1263_pos, 2
+    gt $I11, rx1263_eos, rx1263_fail
+    sub $I11, rx1263_pos, rx1263_off
+    substr $S10, rx1263_tgt, $I11, 2
+    ne $S10, "??", rx1263_fail
+    add rx1263_pos, 2
+.annotate 'line', 537
+  # rx subrule "ws" subtype=method negate=
+    rx1263_cur."!cursor_pos"(rx1263_pos)
+    $P10 = rx1263_cur."ws"()
+    unless $P10, rx1263_fail
+    rx1263_pos = $P10."pos"()
+.annotate 'line', 538
+  # rx subrule "EXPR" subtype=capture negate=
+    rx1263_cur."!cursor_pos"(rx1263_pos)
+    $P10 = rx1263_cur."EXPR"("i=")
+    unless $P10, rx1263_fail
+    rx1263_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx1263_pos = $P10."pos"()
 .annotate 'line', 539
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1269_fail
-    rx1265_cur."!mark_push"(0, rx1265_pos, $I10)
-  # rx literal  "next"
-    add $I11, rx1265_pos, 4
-    gt $I11, rx1265_eos, rx1265_fail
-    sub $I11, rx1265_pos, rx1265_off
-    substr $S10, rx1265_tgt, $I11, 4
-    ne $S10, "next", rx1265_fail
-    add rx1265_pos, 4
-    set_addr $I10, rxcap_1269_fail
-    ($I12, $I11) = rx1265_cur."!mark_peek"($I10)
-    rx1265_cur."!cursor_pos"($I11)
-    ($P10) = rx1265_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1265_pos, "")
-    rx1265_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1269_done
-  rxcap_1269_fail:
-    goto rx1265_fail
-  rxcap_1269_done:
-  # rx pass
-    rx1265_cur."!cursor_pass"(rx1265_pos, "term:sym<next>")
-    rx1265_cur."!cursor_debug"("PASS  ", "term:sym<next>", " at pos=", rx1265_pos)
-    .return (rx1265_cur)
-  rx1265_fail:
-.annotate 'line', 431
-    (rx1265_rep, rx1265_pos, $I10, $P10) = rx1265_cur."!mark_fail"(0)
-    lt rx1265_pos, -1, rx1265_done
-    eq rx1265_pos, -1, rx1265_fail
+  # rx literal  "!!"
+    add $I11, rx1263_pos, 2
+    gt $I11, rx1263_eos, rx1263_fail
+    sub $I11, rx1263_pos, rx1263_off
+    substr $S10, rx1263_tgt, $I11, 2
+    ne $S10, "!!", rx1263_fail
+    add rx1263_pos, 2
+.annotate 'line', 540
+  # rx subrule "O" subtype=capture negate=
+    rx1263_cur."!cursor_pos"(rx1263_pos)
+    $P10 = rx1263_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
+    unless $P10, rx1263_fail
+    rx1263_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1263_pos = $P10."pos"()
+.annotate 'line', 535
+  # rx pass
+    rx1263_cur."!cursor_pass"(rx1263_pos, "infix:sym<?? !!>")
+    rx1263_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1263_pos)
+    .return (rx1263_cur)
+  rx1263_fail:
+.annotate 'line', 446
+    (rx1263_rep, rx1263_pos, $I10, $P10) = rx1263_cur."!mark_fail"(0)
+    lt rx1263_pos, -1, rx1263_done
+    eq rx1263_pos, -1, rx1263_fail
     jump $I10
-  rx1265_done:
-    rx1265_cur."!cursor_fail"()
-    rx1265_cur."!cursor_debug"("FAIL  ", "term:sym<next>")
-    .return (rx1265_cur)
+  rx1263_done:
+    rx1263_cur."!cursor_fail"()
+    rx1263_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
+    .return (rx1263_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<next>"  :subid("326_1274022894.43745") :method
-.annotate 'line', 431
-    new $P1267, "ResizablePMCArray"
-    push $P1267, "next"
-    .return ($P1267)
+.sub "!PREFIX__infix:sym<?? !!>"  :subid("321_1275811487.95429") :method
+.annotate 'line', 446
+    $P1265 = self."!PREFIX__!subrule"("ws", "??")
+    new $P1266, "ResizablePMCArray"
+    push $P1266, $P1265
+    .return ($P1266)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<redo>"  :subid("327_1274022894.43745") :method :outer("11_1274022894.43745")
-.annotate 'line', 431
-    .local string rx1271_tgt
-    .local int rx1271_pos
-    .local int rx1271_off
-    .local int rx1271_eos
-    .local int rx1271_rep
-    .local pmc rx1271_cur
-    (rx1271_cur, rx1271_pos, rx1271_tgt) = self."!cursor_start"()
-    rx1271_cur."!cursor_debug"("START ", "term:sym<redo>")
-    .lex unicode:"$\x{a2}", rx1271_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1271_eos, rx1271_tgt
-    set rx1271_off, 0
-    lt rx1271_pos, 2, rx1271_start
-    sub rx1271_off, rx1271_pos, 1
-    substr rx1271_tgt, rx1271_tgt, rx1271_off
-  rx1271_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1274_done
-    goto rxscan1274_scan
-  rxscan1274_loop:
-    ($P10) = rx1271_cur."from"()
-    inc $P10
-    set rx1271_pos, $P10
-    ge rx1271_pos, rx1271_eos, rxscan1274_done
-  rxscan1274_scan:
-    set_addr $I10, rxscan1274_loop
-    rx1271_cur."!mark_push"(0, rx1271_pos, $I10)
-  rxscan1274_done:
-.annotate 'line', 540
+.sub "infix:sym<=>"  :subid("322_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1269_tgt
+    .local int rx1269_pos
+    .local int rx1269_off
+    .local int rx1269_eos
+    .local int rx1269_rep
+    .local pmc rx1269_cur
+    (rx1269_cur, rx1269_pos, rx1269_tgt) = self."!cursor_start"()
+    rx1269_cur."!cursor_debug"("START ", "infix:sym<=>")
+    .lex unicode:"$\x{a2}", rx1269_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1269_eos, rx1269_tgt
+    gt rx1269_pos, rx1269_eos, rx1269_done
+    set rx1269_off, 0
+    lt rx1269_pos, 2, rx1269_start
+    sub rx1269_off, rx1269_pos, 1
+    substr rx1269_tgt, rx1269_tgt, rx1269_off
+  rx1269_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1273_done
+    goto rxscan1273_scan
+  rxscan1273_loop:
+    ($P10) = rx1269_cur."from"()
+    inc $P10
+    set rx1269_pos, $P10
+    ge rx1269_pos, rx1269_eos, rxscan1273_done
+  rxscan1273_scan:
+    set_addr $I10, rxscan1273_loop
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
+  rxscan1273_done:
+.annotate 'line', 544
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1275_fail
-    rx1271_cur."!mark_push"(0, rx1271_pos, $I10)
-  # rx literal  "redo"
-    add $I11, rx1271_pos, 4
-    gt $I11, rx1271_eos, rx1271_fail
-    sub $I11, rx1271_pos, rx1271_off
-    substr $S10, rx1271_tgt, $I11, 4
-    ne $S10, "redo", rx1271_fail
-    add rx1271_pos, 4
-    set_addr $I10, rxcap_1275_fail
-    ($I12, $I11) = rx1271_cur."!mark_peek"($I10)
-    rx1271_cur."!cursor_pos"($I11)
-    ($P10) = rx1271_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1271_pos, "")
-    rx1271_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1274_fail
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
+  # rx literal  "="
+    add $I11, rx1269_pos, 1
+    gt $I11, rx1269_eos, rx1269_fail
+    sub $I11, rx1269_pos, rx1269_off
+    substr $S10, rx1269_tgt, $I11, 1
+    ne $S10, "=", rx1269_fail
+    add rx1269_pos, 1
+    set_addr $I10, rxcap_1274_fail
+    ($I12, $I11) = rx1269_cur."!mark_peek"($I10)
+    rx1269_cur."!cursor_pos"($I11)
+    ($P10) = rx1269_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1269_pos, "")
+    rx1269_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1275_done
-  rxcap_1275_fail:
-    goto rx1271_fail
-  rxcap_1275_done:
-  # rx pass
-    rx1271_cur."!cursor_pass"(rx1271_pos, "term:sym<redo>")
-    rx1271_cur."!cursor_debug"("PASS  ", "term:sym<redo>", " at pos=", rx1271_pos)
-    .return (rx1271_cur)
-  rx1271_fail:
-.annotate 'line', 431
-    (rx1271_rep, rx1271_pos, $I10, $P10) = rx1271_cur."!mark_fail"(0)
-    lt rx1271_pos, -1, rx1271_done
-    eq rx1271_pos, -1, rx1271_fail
+    goto rxcap_1274_done
+  rxcap_1274_fail:
+    goto rx1269_fail
+  rxcap_1274_done:
+  # rx subrule "panic" subtype=method negate=
+    rx1269_cur."!cursor_pos"(rx1269_pos)
+    $P10 = rx1269_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
+    unless $P10, rx1269_fail
+    rx1269_pos = $P10."pos"()
+.annotate 'line', 543
+  # rx pass
+    rx1269_cur."!cursor_pass"(rx1269_pos, "infix:sym<=>")
+    rx1269_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1269_pos)
+    .return (rx1269_cur)
+  rx1269_fail:
+.annotate 'line', 446
+    (rx1269_rep, rx1269_pos, $I10, $P10) = rx1269_cur."!mark_fail"(0)
+    lt rx1269_pos, -1, rx1269_done
+    eq rx1269_pos, -1, rx1269_fail
     jump $I10
-  rx1271_done:
-    rx1271_cur."!cursor_fail"()
-    rx1271_cur."!cursor_debug"("FAIL  ", "term:sym<redo>")
-    .return (rx1271_cur)
+  rx1269_done:
+    rx1269_cur."!cursor_fail"()
+    rx1269_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
+    .return (rx1269_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<redo>"  :subid("328_1274022894.43745") :method
-.annotate 'line', 431
-    new $P1273, "ResizablePMCArray"
-    push $P1273, "redo"
-    .return ($P1273)
+.sub "!PREFIX__infix:sym<=>"  :subid("323_1275811487.95429") :method
+.annotate 'line', 446
+    $P1271 = self."!PREFIX__!subrule"("panic", "=")
+    new $P1272, "ResizablePMCArray"
+    push $P1272, $P1271
+    .return ($P1272)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "smartmatch"  :subid("329_1274022894.43745") :method :outer("11_1274022894.43745")
-    .param pmc param_1279
-.annotate 'line', 542
-    new $P1278, 'ExceptionHandler'
-    set_addr $P1278, control_1277
-    $P1278."handle_types"(57)
-    push_eh $P1278
-    .lex "self", self
-    .lex "$/", param_1279
-.annotate 'line', 544
-    new $P1280, "Undef"
-    .lex "$t", $P1280
-    find_lex $P1281, "$/"
-    unless_null $P1281, vivify_357
-    $P1281 = root_new ['parrot';'ResizablePMCArray']
-  vivify_357:
-    set $P1282, $P1281[0]
-    unless_null $P1282, vivify_358
-    new $P1282, "Undef"
-  vivify_358:
-    store_lex "$t", $P1282
-    find_lex $P1283, "$/"
-    unless_null $P1283, vivify_359
-    $P1283 = root_new ['parrot';'ResizablePMCArray']
-  vivify_359:
-    set $P1284, $P1283[1]
-    unless_null $P1284, vivify_360
-    new $P1284, "Undef"
-  vivify_360:
-    find_lex $P1285, "$/"
-    unless_null $P1285, vivify_361
-    $P1285 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1285
-  vivify_361:
-    set $P1285[0], $P1284
-    find_lex $P1286, "$t"
-    find_lex $P1287, "$/"
-    unless_null $P1287, vivify_362
-    $P1287 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1287
-  vivify_362:
-    set $P1287[1], $P1286
-.annotate 'line', 542
-    .return ($P1286)
-  control_1277:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1288, exception, "payload"
-    .return ($P1288)
+.sub "infix:sym<:=>"  :subid("324_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1276_tgt
+    .local int rx1276_pos
+    .local int rx1276_off
+    .local int rx1276_eos
+    .local int rx1276_rep
+    .local pmc rx1276_cur
+    (rx1276_cur, rx1276_pos, rx1276_tgt) = self."!cursor_start"()
+    rx1276_cur."!cursor_debug"("START ", "infix:sym<:=>")
+    .lex unicode:"$\x{a2}", rx1276_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1276_eos, rx1276_tgt
+    gt rx1276_pos, rx1276_eos, rx1276_done
+    set rx1276_off, 0
+    lt rx1276_pos, 2, rx1276_start
+    sub rx1276_off, rx1276_pos, 1
+    substr rx1276_tgt, rx1276_tgt, rx1276_off
+  rx1276_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1280_done
+    goto rxscan1280_scan
+  rxscan1280_loop:
+    ($P10) = rx1276_cur."from"()
+    inc $P10
+    set rx1276_pos, $P10
+    ge rx1276_pos, rx1276_eos, rxscan1280_done
+  rxscan1280_scan:
+    set_addr $I10, rxscan1280_loop
+    rx1276_cur."!mark_push"(0, rx1276_pos, $I10)
+  rxscan1280_done:
+.annotate 'line', 546
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1281_fail
+    rx1276_cur."!mark_push"(0, rx1276_pos, $I10)
+  # rx literal  ":="
+    add $I11, rx1276_pos, 2
+    gt $I11, rx1276_eos, rx1276_fail
+    sub $I11, rx1276_pos, rx1276_off
+    substr $S10, rx1276_tgt, $I11, 2
+    ne $S10, ":=", rx1276_fail
+    add rx1276_pos, 2
+    set_addr $I10, rxcap_1281_fail
+    ($I12, $I11) = rx1276_cur."!mark_peek"($I10)
+    rx1276_cur."!cursor_pos"($I11)
+    ($P10) = rx1276_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1276_pos, "")
+    rx1276_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1281_done
+  rxcap_1281_fail:
+    goto rx1276_fail
+  rxcap_1281_done:
+  # rx subrule "O" subtype=capture negate=
+    rx1276_cur."!cursor_pos"(rx1276_pos)
+    $P10 = rx1276_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1276_fail
+    rx1276_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1276_pos = $P10."pos"()
+  # rx pass
+    rx1276_cur."!cursor_pass"(rx1276_pos, "infix:sym<:=>")
+    rx1276_cur."!cursor_debug"("PASS  ", "infix:sym<:=>", " at pos=", rx1276_pos)
+    .return (rx1276_cur)
+  rx1276_fail:
+.annotate 'line', 446
+    (rx1276_rep, rx1276_pos, $I10, $P10) = rx1276_cur."!mark_fail"(0)
+    lt rx1276_pos, -1, rx1276_done
+    eq rx1276_pos, -1, rx1276_fail
+    jump $I10
+  rx1276_done:
+    rx1276_cur."!cursor_fail"()
+    rx1276_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
+    .return (rx1276_cur)
+    .return ()
 .end
 
 
-.namespace ["NQP";"Regex"]
-.sub "_block1289"  :subid("330_1274022894.43745") :outer("11_1274022894.43745")
-.annotate 'line', 548
-    .const 'Sub' $P1323 = "341_1274022894.43745" 
-    capture_lex $P1323
-    .const 'Sub' $P1310 = "338_1274022894.43745" 
-    capture_lex $P1310
-    .const 'Sub' $P1305 = "336_1274022894.43745" 
-    capture_lex $P1305
-    .const 'Sub' $P1300 = "334_1274022894.43745" 
-    capture_lex $P1300
-    .const 'Sub' $P1291 = "331_1274022894.43745" 
-    capture_lex $P1291
-    .const 'Sub' $P1323 = "341_1274022894.43745" 
-    capture_lex $P1323
-    .return ($P1323)
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__infix:sym<:=>"  :subid("325_1275811487.95429") :method
+.annotate 'line', 446
+    $P1278 = self."!PREFIX__!subrule"("O", ":=")
+    new $P1279, "ResizablePMCArray"
+    push $P1279, $P1278
+    .return ($P1279)
 .end
 
 
-.namespace ["NQP";"Regex"]
-.sub "metachar:sym<:my>"  :subid("331_1274022894.43745") :method :outer("330_1274022894.43745")
-.annotate 'line', 548
-    .const 'Sub' $P1297 = "333_1274022894.43745" 
-    capture_lex $P1297
-    .local string rx1292_tgt
-    .local int rx1292_pos
-    .local int rx1292_off
-    .local int rx1292_eos
-    .local int rx1292_rep
-    .local pmc rx1292_cur
-    (rx1292_cur, rx1292_pos, rx1292_tgt) = self."!cursor_start"()
-    rx1292_cur."!cursor_debug"("START ", "metachar:sym<:my>")
-    .lex unicode:"$\x{a2}", rx1292_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1292_eos, rx1292_tgt
-    set rx1292_off, 0
-    lt rx1292_pos, 2, rx1292_start
-    sub rx1292_off, rx1292_pos, 1
-    substr rx1292_tgt, rx1292_tgt, rx1292_off
-  rx1292_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1295_done
-    goto rxscan1295_scan
-  rxscan1295_loop:
-    ($P10) = rx1292_cur."from"()
-    inc $P10
-    set rx1292_pos, $P10
-    ge rx1292_pos, rx1292_eos, rxscan1295_done
-  rxscan1295_scan:
-    set_addr $I10, rxscan1295_loop
-    rx1292_cur."!mark_push"(0, rx1292_pos, $I10)
-  rxscan1295_done:
-.annotate 'line', 550
-  # rx literal  ":"
-    add $I11, rx1292_pos, 1
-    gt $I11, rx1292_eos, rx1292_fail
-    sub $I11, rx1292_pos, rx1292_off
-    substr $S10, rx1292_tgt, $I11, 1
-    ne $S10, ":", rx1292_fail
-    add rx1292_pos, 1
-  # rx subrule "before" subtype=zerowidth negate=
-    rx1292_cur."!cursor_pos"(rx1292_pos)
-    .const 'Sub' $P1297 = "333_1274022894.43745" 
-    capture_lex $P1297
-    $P10 = rx1292_cur."before"($P1297)
-    unless $P10, rx1292_fail
-  # rx subrule "LANG" subtype=capture negate=
-    rx1292_cur."!cursor_pos"(rx1292_pos)
-    $P10 = rx1292_cur."LANG"("MAIN", "statement")
-    unless $P10, rx1292_fail
-    rx1292_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("statement")
-    rx1292_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx1292_cur."!cursor_pos"(rx1292_pos)
-    $P10 = rx1292_cur."ws"()
-    unless $P10, rx1292_fail
-    rx1292_pos = $P10."pos"()
-  # rx literal  ";"
-    add $I11, rx1292_pos, 1
-    gt $I11, rx1292_eos, rx1292_fail
-    sub $I11, rx1292_pos, rx1292_off
-    substr $S10, rx1292_tgt, $I11, 1
-    ne $S10, ";", rx1292_fail
-    add rx1292_pos, 1
+.namespace ["NQP";"Grammar"]
+.sub "infix:sym<::=>"  :subid("326_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1283_tgt
+    .local int rx1283_pos
+    .local int rx1283_off
+    .local int rx1283_eos
+    .local int rx1283_rep
+    .local pmc rx1283_cur
+    (rx1283_cur, rx1283_pos, rx1283_tgt) = self."!cursor_start"()
+    rx1283_cur."!cursor_debug"("START ", "infix:sym<::=>")
+    .lex unicode:"$\x{a2}", rx1283_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1283_eos, rx1283_tgt
+    gt rx1283_pos, rx1283_eos, rx1283_done
+    set rx1283_off, 0
+    lt rx1283_pos, 2, rx1283_start
+    sub rx1283_off, rx1283_pos, 1
+    substr rx1283_tgt, rx1283_tgt, rx1283_off
+  rx1283_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1287_done
+    goto rxscan1287_scan
+  rxscan1287_loop:
+    ($P10) = rx1283_cur."from"()
+    inc $P10
+    set rx1283_pos, $P10
+    ge rx1283_pos, rx1283_eos, rxscan1287_done
+  rxscan1287_scan:
+    set_addr $I10, rxscan1287_loop
+    rx1283_cur."!mark_push"(0, rx1283_pos, $I10)
+  rxscan1287_done:
+.annotate 'line', 547
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1288_fail
+    rx1283_cur."!mark_push"(0, rx1283_pos, $I10)
+  # rx literal  "::="
+    add $I11, rx1283_pos, 3
+    gt $I11, rx1283_eos, rx1283_fail
+    sub $I11, rx1283_pos, rx1283_off
+    substr $S10, rx1283_tgt, $I11, 3
+    ne $S10, "::=", rx1283_fail
+    add rx1283_pos, 3
+    set_addr $I10, rxcap_1288_fail
+    ($I12, $I11) = rx1283_cur."!mark_peek"($I10)
+    rx1283_cur."!cursor_pos"($I11)
+    ($P10) = rx1283_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1283_pos, "")
+    rx1283_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1288_done
+  rxcap_1288_fail:
+    goto rx1283_fail
+  rxcap_1288_done:
+  # rx subrule "O" subtype=capture negate=
+    rx1283_cur."!cursor_pos"(rx1283_pos)
+    $P10 = rx1283_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1283_fail
+    rx1283_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1283_pos = $P10."pos"()
+  # rx pass
+    rx1283_cur."!cursor_pass"(rx1283_pos, "infix:sym<::=>")
+    rx1283_cur."!cursor_debug"("PASS  ", "infix:sym<::=>", " at pos=", rx1283_pos)
+    .return (rx1283_cur)
+  rx1283_fail:
+.annotate 'line', 446
+    (rx1283_rep, rx1283_pos, $I10, $P10) = rx1283_cur."!mark_fail"(0)
+    lt rx1283_pos, -1, rx1283_done
+    eq rx1283_pos, -1, rx1283_fail
+    jump $I10
+  rx1283_done:
+    rx1283_cur."!cursor_fail"()
+    rx1283_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
+    .return (rx1283_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__infix:sym<::=>"  :subid("327_1275811487.95429") :method
+.annotate 'line', 446
+    $P1285 = self."!PREFIX__!subrule"("O", "::=")
+    new $P1286, "ResizablePMCArray"
+    push $P1286, $P1285
+    .return ($P1286)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "infix:sym<,>"  :subid("328_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1290_tgt
+    .local int rx1290_pos
+    .local int rx1290_off
+    .local int rx1290_eos
+    .local int rx1290_rep
+    .local pmc rx1290_cur
+    (rx1290_cur, rx1290_pos, rx1290_tgt) = self."!cursor_start"()
+    rx1290_cur."!cursor_debug"("START ", "infix:sym<,>")
+    .lex unicode:"$\x{a2}", rx1290_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1290_eos, rx1290_tgt
+    gt rx1290_pos, rx1290_eos, rx1290_done
+    set rx1290_off, 0
+    lt rx1290_pos, 2, rx1290_start
+    sub rx1290_off, rx1290_pos, 1
+    substr rx1290_tgt, rx1290_tgt, rx1290_off
+  rx1290_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1294_done
+    goto rxscan1294_scan
+  rxscan1294_loop:
+    ($P10) = rx1290_cur."from"()
+    inc $P10
+    set rx1290_pos, $P10
+    ge rx1290_pos, rx1290_eos, rxscan1294_done
+  rxscan1294_scan:
+    set_addr $I10, rxscan1294_loop
+    rx1290_cur."!mark_push"(0, rx1290_pos, $I10)
+  rxscan1294_done:
 .annotate 'line', 549
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1295_fail
+    rx1290_cur."!mark_push"(0, rx1290_pos, $I10)
+  # rx literal  ","
+    add $I11, rx1290_pos, 1
+    gt $I11, rx1290_eos, rx1290_fail
+    sub $I11, rx1290_pos, rx1290_off
+    substr $S10, rx1290_tgt, $I11, 1
+    ne $S10, ",", rx1290_fail
+    add rx1290_pos, 1
+    set_addr $I10, rxcap_1295_fail
+    ($I12, $I11) = rx1290_cur."!mark_peek"($I10)
+    rx1290_cur."!cursor_pos"($I11)
+    ($P10) = rx1290_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1290_pos, "")
+    rx1290_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1295_done
+  rxcap_1295_fail:
+    goto rx1290_fail
+  rxcap_1295_done:
+  # rx subrule "O" subtype=capture negate=
+    rx1290_cur."!cursor_pos"(rx1290_pos)
+    $P10 = rx1290_cur."O"("%comma, :pasttype<list>")
+    unless $P10, rx1290_fail
+    rx1290_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1290_pos = $P10."pos"()
   # rx pass
-    rx1292_cur."!cursor_pass"(rx1292_pos, "metachar:sym<:my>")
-    rx1292_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1292_pos)
-    .return (rx1292_cur)
-  rx1292_fail:
-.annotate 'line', 548
-    (rx1292_rep, rx1292_pos, $I10, $P10) = rx1292_cur."!mark_fail"(0)
-    lt rx1292_pos, -1, rx1292_done
-    eq rx1292_pos, -1, rx1292_fail
-    jump $I10
-  rx1292_done:
-    rx1292_cur."!cursor_fail"()
-    rx1292_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
-    .return (rx1292_cur)
+    rx1290_cur."!cursor_pass"(rx1290_pos, "infix:sym<,>")
+    rx1290_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1290_pos)
+    .return (rx1290_cur)
+  rx1290_fail:
+.annotate 'line', 446
+    (rx1290_rep, rx1290_pos, $I10, $P10) = rx1290_cur."!mark_fail"(0)
+    lt rx1290_pos, -1, rx1290_done
+    eq rx1290_pos, -1, rx1290_fail
+    jump $I10
+  rx1290_done:
+    rx1290_cur."!cursor_fail"()
+    rx1290_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
+    .return (rx1290_cur)
     .return ()
 .end
 
 
-.namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<:my>"  :subid("332_1274022894.43745") :method
-.annotate 'line', 548
-    new $P1294, "ResizablePMCArray"
-    push $P1294, ":"
-    .return ($P1294)
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__infix:sym<,>"  :subid("329_1275811487.95429") :method
+.annotate 'line', 446
+    $P1292 = self."!PREFIX__!subrule"("O", ",")
+    new $P1293, "ResizablePMCArray"
+    push $P1293, $P1292
+    .return ($P1293)
 .end
 
 
-.namespace ["NQP";"Regex"]
-.sub "_block1296"  :anon :subid("333_1274022894.43745") :method :outer("331_1274022894.43745")
-.annotate 'line', 550
-    .local string rx1298_tgt
-    .local int rx1298_pos
-    .local int rx1298_off
-    .local int rx1298_eos
-    .local int rx1298_rep
-    .local pmc rx1298_cur
-    (rx1298_cur, rx1298_pos, rx1298_tgt) = self."!cursor_start"()
-    rx1298_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx1298_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1298_eos, rx1298_tgt
-    set rx1298_off, 0
-    lt rx1298_pos, 2, rx1298_start
-    sub rx1298_off, rx1298_pos, 1
-    substr rx1298_tgt, rx1298_tgt, rx1298_off
-  rx1298_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1299_done
-    goto rxscan1299_scan
-  rxscan1299_loop:
-    ($P10) = rx1298_cur."from"()
-    inc $P10
-    set rx1298_pos, $P10
-    ge rx1298_pos, rx1298_eos, rxscan1299_done
-  rxscan1299_scan:
-    set_addr $I10, rxscan1299_loop
-    rx1298_cur."!mark_push"(0, rx1298_pos, $I10)
-  rxscan1299_done:
-  # rx literal  "my"
-    add $I11, rx1298_pos, 2
-    gt $I11, rx1298_eos, rx1298_fail
-    sub $I11, rx1298_pos, rx1298_off
-    substr $S10, rx1298_tgt, $I11, 2
-    ne $S10, "my", rx1298_fail
-    add rx1298_pos, 2
-  # rx pass
-    rx1298_cur."!cursor_pass"(rx1298_pos, "")
-    rx1298_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1298_pos)
-    .return (rx1298_cur)
-  rx1298_fail:
-    (rx1298_rep, rx1298_pos, $I10, $P10) = rx1298_cur."!mark_fail"(0)
-    lt rx1298_pos, -1, rx1298_done
-    eq rx1298_pos, -1, rx1298_fail
-    jump $I10
-  rx1298_done:
-    rx1298_cur."!cursor_fail"()
-    rx1298_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx1298_cur)
+.namespace ["NQP";"Grammar"]
+.sub "prefix:sym<return>"  :subid("330_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1297_tgt
+    .local int rx1297_pos
+    .local int rx1297_off
+    .local int rx1297_eos
+    .local int rx1297_rep
+    .local pmc rx1297_cur
+    (rx1297_cur, rx1297_pos, rx1297_tgt) = self."!cursor_start"()
+    rx1297_cur."!cursor_debug"("START ", "prefix:sym<return>")
+    .lex unicode:"$\x{a2}", rx1297_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1297_eos, rx1297_tgt
+    gt rx1297_pos, rx1297_eos, rx1297_done
+    set rx1297_off, 0
+    lt rx1297_pos, 2, rx1297_start
+    sub rx1297_off, rx1297_pos, 1
+    substr rx1297_tgt, rx1297_tgt, rx1297_off
+  rx1297_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1300_done
+    goto rxscan1300_scan
+  rxscan1300_loop:
+    ($P10) = rx1297_cur."from"()
+    inc $P10
+    set rx1297_pos, $P10
+    ge rx1297_pos, rx1297_eos, rxscan1300_done
+  rxscan1300_scan:
+    set_addr $I10, rxscan1300_loop
+    rx1297_cur."!mark_push"(0, rx1297_pos, $I10)
+  rxscan1300_done:
+.annotate 'line', 551
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1301_fail
+    rx1297_cur."!mark_push"(0, rx1297_pos, $I10)
+  # rx literal  "return"
+    add $I11, rx1297_pos, 6
+    gt $I11, rx1297_eos, rx1297_fail
+    sub $I11, rx1297_pos, rx1297_off
+    substr $S10, rx1297_tgt, $I11, 6
+    ne $S10, "return", rx1297_fail
+    add rx1297_pos, 6
+    set_addr $I10, rxcap_1301_fail
+    ($I12, $I11) = rx1297_cur."!mark_peek"($I10)
+    rx1297_cur."!cursor_pos"($I11)
+    ($P10) = rx1297_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1297_pos, "")
+    rx1297_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1301_done
+  rxcap_1301_fail:
+    goto rx1297_fail
+  rxcap_1301_done:
+  # rx charclass s
+    ge rx1297_pos, rx1297_eos, rx1297_fail
+    sub $I10, rx1297_pos, rx1297_off
+    is_cclass $I11, 32, rx1297_tgt, $I10
+    unless $I11, rx1297_fail
+    inc rx1297_pos
+  # rx subrule "O" subtype=capture negate=
+    rx1297_cur."!cursor_pos"(rx1297_pos)
+    $P10 = rx1297_cur."O"("%list_prefix, :pasttype<return>")
+    unless $P10, rx1297_fail
+    rx1297_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1297_pos = $P10."pos"()
+  # rx pass
+    rx1297_cur."!cursor_pass"(rx1297_pos, "prefix:sym<return>")
+    rx1297_cur."!cursor_debug"("PASS  ", "prefix:sym<return>", " at pos=", rx1297_pos)
+    .return (rx1297_cur)
+  rx1297_fail:
+.annotate 'line', 446
+    (rx1297_rep, rx1297_pos, $I10, $P10) = rx1297_cur."!mark_fail"(0)
+    lt rx1297_pos, -1, rx1297_done
+    eq rx1297_pos, -1, rx1297_fail
+    jump $I10
+  rx1297_done:
+    rx1297_cur."!cursor_fail"()
+    rx1297_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
+    .return (rx1297_cur)
     .return ()
 .end
 
 
-.namespace ["NQP";"Regex"]
-.sub "metachar:sym<{ }>"  :subid("334_1274022894.43745") :method :outer("330_1274022894.43745")
-.annotate 'line', 548
-    .local string rx1301_tgt
-    .local int rx1301_pos
-    .local int rx1301_off
-    .local int rx1301_eos
-    .local int rx1301_rep
-    .local pmc rx1301_cur
-    (rx1301_cur, rx1301_pos, rx1301_tgt) = self."!cursor_start"()
-    rx1301_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx1301_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1301_eos, rx1301_tgt
-    set rx1301_off, 0
-    lt rx1301_pos, 2, rx1301_start
-    sub rx1301_off, rx1301_pos, 1
-    substr rx1301_tgt, rx1301_tgt, rx1301_off
-  rx1301_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1304_done
-    goto rxscan1304_scan
-  rxscan1304_loop:
-    ($P10) = rx1301_cur."from"()
-    inc $P10
-    set rx1301_pos, $P10
-    ge rx1301_pos, rx1301_eos, rxscan1304_done
-  rxscan1304_scan:
-    set_addr $I10, rxscan1304_loop
-    rx1301_cur."!mark_push"(0, rx1301_pos, $I10)
-  rxscan1304_done:
-.annotate 'line', 554
-  # rx enumcharlist negate=0 zerowidth
-    ge rx1301_pos, rx1301_eos, rx1301_fail
-    sub $I10, rx1301_pos, rx1301_off
-    substr $S10, rx1301_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx1301_fail
-  # rx subrule "codeblock" subtype=capture negate=
-    rx1301_cur."!cursor_pos"(rx1301_pos)
-    $P10 = rx1301_cur."codeblock"()
-    unless $P10, rx1301_fail
-    rx1301_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("codeblock")
-    rx1301_pos = $P10."pos"()
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__prefix:sym<return>"  :subid("331_1275811487.95429") :method
+.annotate 'line', 446
+    new $P1299, "ResizablePMCArray"
+    push $P1299, "return"
+    .return ($P1299)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "prefix:sym<make>"  :subid("332_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1303_tgt
+    .local int rx1303_pos
+    .local int rx1303_off
+    .local int rx1303_eos
+    .local int rx1303_rep
+    .local pmc rx1303_cur
+    (rx1303_cur, rx1303_pos, rx1303_tgt) = self."!cursor_start"()
+    rx1303_cur."!cursor_debug"("START ", "prefix:sym<make>")
+    .lex unicode:"$\x{a2}", rx1303_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1303_eos, rx1303_tgt
+    gt rx1303_pos, rx1303_eos, rx1303_done
+    set rx1303_off, 0
+    lt rx1303_pos, 2, rx1303_start
+    sub rx1303_off, rx1303_pos, 1
+    substr rx1303_tgt, rx1303_tgt, rx1303_off
+  rx1303_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1306_done
+    goto rxscan1306_scan
+  rxscan1306_loop:
+    ($P10) = rx1303_cur."from"()
+    inc $P10
+    set rx1303_pos, $P10
+    ge rx1303_pos, rx1303_eos, rxscan1306_done
+  rxscan1306_scan:
+    set_addr $I10, rxscan1306_loop
+    rx1303_cur."!mark_push"(0, rx1303_pos, $I10)
+  rxscan1306_done:
+.annotate 'line', 552
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1307_fail
+    rx1303_cur."!mark_push"(0, rx1303_pos, $I10)
+  # rx literal  "make"
+    add $I11, rx1303_pos, 4
+    gt $I11, rx1303_eos, rx1303_fail
+    sub $I11, rx1303_pos, rx1303_off
+    substr $S10, rx1303_tgt, $I11, 4
+    ne $S10, "make", rx1303_fail
+    add rx1303_pos, 4
+    set_addr $I10, rxcap_1307_fail
+    ($I12, $I11) = rx1303_cur."!mark_peek"($I10)
+    rx1303_cur."!cursor_pos"($I11)
+    ($P10) = rx1303_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1303_pos, "")
+    rx1303_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1307_done
+  rxcap_1307_fail:
+    goto rx1303_fail
+  rxcap_1307_done:
+  # rx charclass s
+    ge rx1303_pos, rx1303_eos, rx1303_fail
+    sub $I10, rx1303_pos, rx1303_off
+    is_cclass $I11, 32, rx1303_tgt, $I10
+    unless $I11, rx1303_fail
+    inc rx1303_pos
+  # rx subrule "O" subtype=capture negate=
+    rx1303_cur."!cursor_pos"(rx1303_pos)
+    $P10 = rx1303_cur."O"("%list_prefix")
+    unless $P10, rx1303_fail
+    rx1303_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1303_pos = $P10."pos"()
+  # rx pass
+    rx1303_cur."!cursor_pass"(rx1303_pos, "prefix:sym<make>")
+    rx1303_cur."!cursor_debug"("PASS  ", "prefix:sym<make>", " at pos=", rx1303_pos)
+    .return (rx1303_cur)
+  rx1303_fail:
+.annotate 'line', 446
+    (rx1303_rep, rx1303_pos, $I10, $P10) = rx1303_cur."!mark_fail"(0)
+    lt rx1303_pos, -1, rx1303_done
+    eq rx1303_pos, -1, rx1303_fail
+    jump $I10
+  rx1303_done:
+    rx1303_cur."!cursor_fail"()
+    rx1303_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
+    .return (rx1303_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__prefix:sym<make>"  :subid("333_1275811487.95429") :method
+.annotate 'line', 446
+    new $P1305, "ResizablePMCArray"
+    push $P1305, "make"
+    .return ($P1305)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "term:sym<last>"  :subid("334_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1309_tgt
+    .local int rx1309_pos
+    .local int rx1309_off
+    .local int rx1309_eos
+    .local int rx1309_rep
+    .local pmc rx1309_cur
+    (rx1309_cur, rx1309_pos, rx1309_tgt) = self."!cursor_start"()
+    rx1309_cur."!cursor_debug"("START ", "term:sym<last>")
+    .lex unicode:"$\x{a2}", rx1309_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1309_eos, rx1309_tgt
+    gt rx1309_pos, rx1309_eos, rx1309_done
+    set rx1309_off, 0
+    lt rx1309_pos, 2, rx1309_start
+    sub rx1309_off, rx1309_pos, 1
+    substr rx1309_tgt, rx1309_tgt, rx1309_off
+  rx1309_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1312_done
+    goto rxscan1312_scan
+  rxscan1312_loop:
+    ($P10) = rx1309_cur."from"()
+    inc $P10
+    set rx1309_pos, $P10
+    ge rx1309_pos, rx1309_eos, rxscan1312_done
+  rxscan1312_scan:
+    set_addr $I10, rxscan1312_loop
+    rx1309_cur."!mark_push"(0, rx1309_pos, $I10)
+  rxscan1312_done:
 .annotate 'line', 553
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1313_fail
+    rx1309_cur."!mark_push"(0, rx1309_pos, $I10)
+  # rx literal  "last"
+    add $I11, rx1309_pos, 4
+    gt $I11, rx1309_eos, rx1309_fail
+    sub $I11, rx1309_pos, rx1309_off
+    substr $S10, rx1309_tgt, $I11, 4
+    ne $S10, "last", rx1309_fail
+    add rx1309_pos, 4
+    set_addr $I10, rxcap_1313_fail
+    ($I12, $I11) = rx1309_cur."!mark_peek"($I10)
+    rx1309_cur."!cursor_pos"($I11)
+    ($P10) = rx1309_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1309_pos, "")
+    rx1309_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1313_done
+  rxcap_1313_fail:
+    goto rx1309_fail
+  rxcap_1313_done:
+  # rx pass
+    rx1309_cur."!cursor_pass"(rx1309_pos, "term:sym<last>")
+    rx1309_cur."!cursor_debug"("PASS  ", "term:sym<last>", " at pos=", rx1309_pos)
+    .return (rx1309_cur)
+  rx1309_fail:
+.annotate 'line', 446
+    (rx1309_rep, rx1309_pos, $I10, $P10) = rx1309_cur."!mark_fail"(0)
+    lt rx1309_pos, -1, rx1309_done
+    eq rx1309_pos, -1, rx1309_fail
+    jump $I10
+  rx1309_done:
+    rx1309_cur."!cursor_fail"()
+    rx1309_cur."!cursor_debug"("FAIL  ", "term:sym<last>")
+    .return (rx1309_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__term:sym<last>"  :subid("335_1275811487.95429") :method
+.annotate 'line', 446
+    new $P1311, "ResizablePMCArray"
+    push $P1311, "last"
+    .return ($P1311)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "term:sym<next>"  :subid("336_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1315_tgt
+    .local int rx1315_pos
+    .local int rx1315_off
+    .local int rx1315_eos
+    .local int rx1315_rep
+    .local pmc rx1315_cur
+    (rx1315_cur, rx1315_pos, rx1315_tgt) = self."!cursor_start"()
+    rx1315_cur."!cursor_debug"("START ", "term:sym<next>")
+    .lex unicode:"$\x{a2}", rx1315_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1315_eos, rx1315_tgt
+    gt rx1315_pos, rx1315_eos, rx1315_done
+    set rx1315_off, 0
+    lt rx1315_pos, 2, rx1315_start
+    sub rx1315_off, rx1315_pos, 1
+    substr rx1315_tgt, rx1315_tgt, rx1315_off
+  rx1315_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1318_done
+    goto rxscan1318_scan
+  rxscan1318_loop:
+    ($P10) = rx1315_cur."from"()
+    inc $P10
+    set rx1315_pos, $P10
+    ge rx1315_pos, rx1315_eos, rxscan1318_done
+  rxscan1318_scan:
+    set_addr $I10, rxscan1318_loop
+    rx1315_cur."!mark_push"(0, rx1315_pos, $I10)
+  rxscan1318_done:
+.annotate 'line', 554
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1319_fail
+    rx1315_cur."!mark_push"(0, rx1315_pos, $I10)
+  # rx literal  "next"
+    add $I11, rx1315_pos, 4
+    gt $I11, rx1315_eos, rx1315_fail
+    sub $I11, rx1315_pos, rx1315_off
+    substr $S10, rx1315_tgt, $I11, 4
+    ne $S10, "next", rx1315_fail
+    add rx1315_pos, 4
+    set_addr $I10, rxcap_1319_fail
+    ($I12, $I11) = rx1315_cur."!mark_peek"($I10)
+    rx1315_cur."!cursor_pos"($I11)
+    ($P10) = rx1315_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1315_pos, "")
+    rx1315_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1319_done
+  rxcap_1319_fail:
+    goto rx1315_fail
+  rxcap_1319_done:
+  # rx pass
+    rx1315_cur."!cursor_pass"(rx1315_pos, "term:sym<next>")
+    rx1315_cur."!cursor_debug"("PASS  ", "term:sym<next>", " at pos=", rx1315_pos)
+    .return (rx1315_cur)
+  rx1315_fail:
+.annotate 'line', 446
+    (rx1315_rep, rx1315_pos, $I10, $P10) = rx1315_cur."!mark_fail"(0)
+    lt rx1315_pos, -1, rx1315_done
+    eq rx1315_pos, -1, rx1315_fail
+    jump $I10
+  rx1315_done:
+    rx1315_cur."!cursor_fail"()
+    rx1315_cur."!cursor_debug"("FAIL  ", "term:sym<next>")
+    .return (rx1315_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__term:sym<next>"  :subid("337_1275811487.95429") :method
+.annotate 'line', 446
+    new $P1317, "ResizablePMCArray"
+    push $P1317, "next"
+    .return ($P1317)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "term:sym<redo>"  :subid("338_1275811487.95429") :method :outer("11_1275811487.95429")
+.annotate 'line', 446
+    .local string rx1321_tgt
+    .local int rx1321_pos
+    .local int rx1321_off
+    .local int rx1321_eos
+    .local int rx1321_rep
+    .local pmc rx1321_cur
+    (rx1321_cur, rx1321_pos, rx1321_tgt) = self."!cursor_start"()
+    rx1321_cur."!cursor_debug"("START ", "term:sym<redo>")
+    .lex unicode:"$\x{a2}", rx1321_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1321_eos, rx1321_tgt
+    gt rx1321_pos, rx1321_eos, rx1321_done
+    set rx1321_off, 0
+    lt rx1321_pos, 2, rx1321_start
+    sub rx1321_off, rx1321_pos, 1
+    substr rx1321_tgt, rx1321_tgt, rx1321_off
+  rx1321_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1324_done
+    goto rxscan1324_scan
+  rxscan1324_loop:
+    ($P10) = rx1321_cur."from"()
+    inc $P10
+    set rx1321_pos, $P10
+    ge rx1321_pos, rx1321_eos, rxscan1324_done
+  rxscan1324_scan:
+    set_addr $I10, rxscan1324_loop
+    rx1321_cur."!mark_push"(0, rx1321_pos, $I10)
+  rxscan1324_done:
+.annotate 'line', 555
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1325_fail
+    rx1321_cur."!mark_push"(0, rx1321_pos, $I10)
+  # rx literal  "redo"
+    add $I11, rx1321_pos, 4
+    gt $I11, rx1321_eos, rx1321_fail
+    sub $I11, rx1321_pos, rx1321_off
+    substr $S10, rx1321_tgt, $I11, 4
+    ne $S10, "redo", rx1321_fail
+    add rx1321_pos, 4
+    set_addr $I10, rxcap_1325_fail
+    ($I12, $I11) = rx1321_cur."!mark_peek"($I10)
+    rx1321_cur."!cursor_pos"($I11)
+    ($P10) = rx1321_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1321_pos, "")
+    rx1321_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1325_done
+  rxcap_1325_fail:
+    goto rx1321_fail
+  rxcap_1325_done:
+  # rx pass
+    rx1321_cur."!cursor_pass"(rx1321_pos, "term:sym<redo>")
+    rx1321_cur."!cursor_debug"("PASS  ", "term:sym<redo>", " at pos=", rx1321_pos)
+    .return (rx1321_cur)
+  rx1321_fail:
+.annotate 'line', 446
+    (rx1321_rep, rx1321_pos, $I10, $P10) = rx1321_cur."!mark_fail"(0)
+    lt rx1321_pos, -1, rx1321_done
+    eq rx1321_pos, -1, rx1321_fail
+    jump $I10
+  rx1321_done:
+    rx1321_cur."!cursor_fail"()
+    rx1321_cur."!cursor_debug"("FAIL  ", "term:sym<redo>")
+    .return (rx1321_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__term:sym<redo>"  :subid("339_1275811487.95429") :method
+.annotate 'line', 446
+    new $P1323, "ResizablePMCArray"
+    push $P1323, "redo"
+    .return ($P1323)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.include "except_types.pasm"
+.sub "smartmatch"  :subid("340_1275811487.95429") :method :outer("11_1275811487.95429")
+    .param pmc param_1329
+.annotate 'line', 557
+    new $P1328, 'ExceptionHandler'
+    set_addr $P1328, control_1327
+    $P1328."handle_types"(.CONTROL_RETURN)
+    push_eh $P1328
+    .lex "self", self
+    .lex "$/", param_1329
+.annotate 'line', 559
+    new $P1330, "Undef"
+    .lex "$t", $P1330
+    find_lex $P1331, "$/"
+    unless_null $P1331, vivify_376
+    $P1331 = root_new ['parrot';'ResizablePMCArray']
+  vivify_376:
+    set $P1332, $P1331[0]
+    unless_null $P1332, vivify_377
+    new $P1332, "Undef"
+  vivify_377:
+    store_lex "$t", $P1332
+    find_lex $P1333, "$/"
+    unless_null $P1333, vivify_378
+    $P1333 = root_new ['parrot';'ResizablePMCArray']
+  vivify_378:
+    set $P1334, $P1333[1]
+    unless_null $P1334, vivify_379
+    new $P1334, "Undef"
+  vivify_379:
+    find_lex $P1335, "$/"
+    unless_null $P1335, vivify_380
+    $P1335 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1335
+  vivify_380:
+    set $P1335[0], $P1334
+    find_lex $P1336, "$t"
+    find_lex $P1337, "$/"
+    unless_null $P1337, vivify_381
+    $P1337 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1337
+  vivify_381:
+    set $P1337[1], $P1336
+.annotate 'line', 557
+    .return ($P1336)
+  control_1327:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1338, exception, "payload"
+    .return ($P1338)
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "_block1339"  :subid("341_1275811487.95429") :outer("11_1275811487.95429")
+.annotate 'line', 563
+    .const 'Sub' $P1397 = "360_1275811487.95429" 
+    capture_lex $P1397
+    .const 'Sub' $P1392 = "358_1275811487.95429" 
+    capture_lex $P1392
+    .const 'Sub' $P1379 = "355_1275811487.95429" 
+    capture_lex $P1379
+    .const 'Sub' $P1369 = "352_1275811487.95429" 
+    capture_lex $P1369
+    .const 'Sub' $P1364 = "350_1275811487.95429" 
+    capture_lex $P1364
+    .const 'Sub' $P1355 = "347_1275811487.95429" 
+    capture_lex $P1355
+    .const 'Sub' $P1350 = "345_1275811487.95429" 
+    capture_lex $P1350
+    .const 'Sub' $P1341 = "342_1275811487.95429" 
+    capture_lex $P1341
+    .const 'Sub' $P1397 = "360_1275811487.95429" 
+    capture_lex $P1397
+    .return ($P1397)
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "metachar:sym<:my>"  :subid("342_1275811487.95429") :method :outer("341_1275811487.95429")
+.annotate 'line', 563
+    .const 'Sub' $P1347 = "344_1275811487.95429" 
+    capture_lex $P1347
+    .local string rx1342_tgt
+    .local int rx1342_pos
+    .local int rx1342_off
+    .local int rx1342_eos
+    .local int rx1342_rep
+    .local pmc rx1342_cur
+    (rx1342_cur, rx1342_pos, rx1342_tgt) = self."!cursor_start"()
+    rx1342_cur."!cursor_debug"("START ", "metachar:sym<:my>")
+    .lex unicode:"$\x{a2}", rx1342_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1342_eos, rx1342_tgt
+    gt rx1342_pos, rx1342_eos, rx1342_done
+    set rx1342_off, 0
+    lt rx1342_pos, 2, rx1342_start
+    sub rx1342_off, rx1342_pos, 1
+    substr rx1342_tgt, rx1342_tgt, rx1342_off
+  rx1342_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1345_done
+    goto rxscan1345_scan
+  rxscan1345_loop:
+    ($P10) = rx1342_cur."from"()
+    inc $P10
+    set rx1342_pos, $P10
+    ge rx1342_pos, rx1342_eos, rxscan1345_done
+  rxscan1345_scan:
+    set_addr $I10, rxscan1345_loop
+    rx1342_cur."!mark_push"(0, rx1342_pos, $I10)
+  rxscan1345_done:
+.annotate 'line', 565
+  # rx literal  ":"
+    add $I11, rx1342_pos, 1
+    gt $I11, rx1342_eos, rx1342_fail
+    sub $I11, rx1342_pos, rx1342_off
+    substr $S10, rx1342_tgt, $I11, 1
+    ne $S10, ":", rx1342_fail
+    add rx1342_pos, 1
+  # rx subrule "before" subtype=zerowidth negate=
+    rx1342_cur."!cursor_pos"(rx1342_pos)
+    .const 'Sub' $P1347 = "344_1275811487.95429" 
+    capture_lex $P1347
+    $P10 = rx1342_cur."before"($P1347)
+    unless $P10, rx1342_fail
+  # rx subrule "LANG" subtype=capture negate=
+    rx1342_cur."!cursor_pos"(rx1342_pos)
+    $P10 = rx1342_cur."LANG"("MAIN", "statement")
+    unless $P10, rx1342_fail
+    rx1342_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("statement")
+    rx1342_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx1342_cur."!cursor_pos"(rx1342_pos)
+    $P10 = rx1342_cur."ws"()
+    unless $P10, rx1342_fail
+    rx1342_pos = $P10."pos"()
+  # rx literal  ";"
+    add $I11, rx1342_pos, 1
+    gt $I11, rx1342_eos, rx1342_fail
+    sub $I11, rx1342_pos, rx1342_off
+    substr $S10, rx1342_tgt, $I11, 1
+    ne $S10, ";", rx1342_fail
+    add rx1342_pos, 1
+.annotate 'line', 564
   # rx pass
-    rx1301_cur."!cursor_pass"(rx1301_pos, "metachar:sym<{ }>")
-    rx1301_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1301_pos)
-    .return (rx1301_cur)
-  rx1301_fail:
-.annotate 'line', 548
-    (rx1301_rep, rx1301_pos, $I10, $P10) = rx1301_cur."!mark_fail"(0)
-    lt rx1301_pos, -1, rx1301_done
-    eq rx1301_pos, -1, rx1301_fail
-    jump $I10
-  rx1301_done:
-    rx1301_cur."!cursor_fail"()
-    rx1301_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
-    .return (rx1301_cur)
+    rx1342_cur."!cursor_pass"(rx1342_pos, "metachar:sym<:my>")
+    rx1342_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1342_pos)
+    .return (rx1342_cur)
+  rx1342_fail:
+.annotate 'line', 563
+    (rx1342_rep, rx1342_pos, $I10, $P10) = rx1342_cur."!mark_fail"(0)
+    lt rx1342_pos, -1, rx1342_done
+    eq rx1342_pos, -1, rx1342_fail
+    jump $I10
+  rx1342_done:
+    rx1342_cur."!cursor_fail"()
+    rx1342_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
+    .return (rx1342_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<{ }>"  :subid("335_1274022894.43745") :method
-.annotate 'line', 548
-    new $P1303, "ResizablePMCArray"
-    push $P1303, "{"
-    .return ($P1303)
+.sub "!PREFIX__metachar:sym<:my>"  :subid("343_1275811487.95429") :method
+.annotate 'line', 563
+    new $P1344, "ResizablePMCArray"
+    push $P1344, ":"
+    .return ($P1344)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<{ }>"  :subid("336_1274022894.43745") :method :outer("330_1274022894.43745")
-.annotate 'line', 548
-    .local string rx1306_tgt
-    .local int rx1306_pos
-    .local int rx1306_off
-    .local int rx1306_eos
-    .local int rx1306_rep
-    .local pmc rx1306_cur
-    (rx1306_cur, rx1306_pos, rx1306_tgt) = self."!cursor_start"()
-    rx1306_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx1306_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1306_eos, rx1306_tgt
-    set rx1306_off, 0
-    lt rx1306_pos, 2, rx1306_start
-    sub rx1306_off, rx1306_pos, 1
-    substr rx1306_tgt, rx1306_tgt, rx1306_off
-  rx1306_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1309_done
-    goto rxscan1309_scan
-  rxscan1309_loop:
-    ($P10) = rx1306_cur."from"()
-    inc $P10
-    set rx1306_pos, $P10
-    ge rx1306_pos, rx1306_eos, rxscan1309_done
-  rxscan1309_scan:
-    set_addr $I10, rxscan1309_loop
-    rx1306_cur."!mark_push"(0, rx1306_pos, $I10)
-  rxscan1309_done:
-.annotate 'line', 558
+.sub "_block1346"  :anon :subid("344_1275811487.95429") :method :outer("342_1275811487.95429")
+.annotate 'line', 565
+    .local string rx1348_tgt
+    .local int rx1348_pos
+    .local int rx1348_off
+    .local int rx1348_eos
+    .local int rx1348_rep
+    .local pmc rx1348_cur
+    (rx1348_cur, rx1348_pos, rx1348_tgt) = self."!cursor_start"()
+    rx1348_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx1348_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1348_eos, rx1348_tgt
+    gt rx1348_pos, rx1348_eos, rx1348_done
+    set rx1348_off, 0
+    lt rx1348_pos, 2, rx1348_start
+    sub rx1348_off, rx1348_pos, 1
+    substr rx1348_tgt, rx1348_tgt, rx1348_off
+  rx1348_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1349_done
+    goto rxscan1349_scan
+  rxscan1349_loop:
+    ($P10) = rx1348_cur."from"()
+    inc $P10
+    set rx1348_pos, $P10
+    ge rx1348_pos, rx1348_eos, rxscan1349_done
+  rxscan1349_scan:
+    set_addr $I10, rxscan1349_loop
+    rx1348_cur."!mark_push"(0, rx1348_pos, $I10)
+  rxscan1349_done:
+  # rx literal  "my"
+    add $I11, rx1348_pos, 2
+    gt $I11, rx1348_eos, rx1348_fail
+    sub $I11, rx1348_pos, rx1348_off
+    substr $S10, rx1348_tgt, $I11, 2
+    ne $S10, "my", rx1348_fail
+    add rx1348_pos, 2
+  # rx pass
+    rx1348_cur."!cursor_pass"(rx1348_pos, "")
+    rx1348_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1348_pos)
+    .return (rx1348_cur)
+  rx1348_fail:
+    (rx1348_rep, rx1348_pos, $I10, $P10) = rx1348_cur."!mark_fail"(0)
+    lt rx1348_pos, -1, rx1348_done
+    eq rx1348_pos, -1, rx1348_fail
+    jump $I10
+  rx1348_done:
+    rx1348_cur."!cursor_fail"()
+    rx1348_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx1348_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "metachar:sym<{ }>"  :subid("345_1275811487.95429") :method :outer("341_1275811487.95429")
+.annotate 'line', 563
+    .local string rx1351_tgt
+    .local int rx1351_pos
+    .local int rx1351_off
+    .local int rx1351_eos
+    .local int rx1351_rep
+    .local pmc rx1351_cur
+    (rx1351_cur, rx1351_pos, rx1351_tgt) = self."!cursor_start"()
+    rx1351_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1351_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1351_eos, rx1351_tgt
+    gt rx1351_pos, rx1351_eos, rx1351_done
+    set rx1351_off, 0
+    lt rx1351_pos, 2, rx1351_start
+    sub rx1351_off, rx1351_pos, 1
+    substr rx1351_tgt, rx1351_tgt, rx1351_off
+  rx1351_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1354_done
+    goto rxscan1354_scan
+  rxscan1354_loop:
+    ($P10) = rx1351_cur."from"()
+    inc $P10
+    set rx1351_pos, $P10
+    ge rx1351_pos, rx1351_eos, rxscan1354_done
+  rxscan1354_scan:
+    set_addr $I10, rxscan1354_loop
+    rx1351_cur."!mark_push"(0, rx1351_pos, $I10)
+  rxscan1354_done:
+.annotate 'line', 569
   # rx enumcharlist negate=0 zerowidth
-    ge rx1306_pos, rx1306_eos, rx1306_fail
-    sub $I10, rx1306_pos, rx1306_off
-    substr $S10, rx1306_tgt, $I10, 1
+    ge rx1351_pos, rx1351_eos, rx1351_fail
+    sub $I10, rx1351_pos, rx1351_off
+    substr $S10, rx1351_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx1306_fail
+    lt $I11, 0, rx1351_fail
   # rx subrule "codeblock" subtype=capture negate=
-    rx1306_cur."!cursor_pos"(rx1306_pos)
-    $P10 = rx1306_cur."codeblock"()
-    unless $P10, rx1306_fail
-    rx1306_cur."!mark_push"(0, -1, 0, $P10)
+    rx1351_cur."!cursor_pos"(rx1351_pos)
+    $P10 = rx1351_cur."codeblock"()
+    unless $P10, rx1351_fail
+    rx1351_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("codeblock")
-    rx1306_pos = $P10."pos"()
-.annotate 'line', 557
+    rx1351_pos = $P10."pos"()
+.annotate 'line', 568
   # rx pass
-    rx1306_cur."!cursor_pass"(rx1306_pos, "assertion:sym<{ }>")
-    rx1306_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1306_pos)
-    .return (rx1306_cur)
-  rx1306_fail:
-.annotate 'line', 548
-    (rx1306_rep, rx1306_pos, $I10, $P10) = rx1306_cur."!mark_fail"(0)
-    lt rx1306_pos, -1, rx1306_done
-    eq rx1306_pos, -1, rx1306_fail
-    jump $I10
-  rx1306_done:
-    rx1306_cur."!cursor_fail"()
-    rx1306_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
-    .return (rx1306_cur)
+    rx1351_cur."!cursor_pass"(rx1351_pos, "metachar:sym<{ }>")
+    rx1351_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1351_pos)
+    .return (rx1351_cur)
+  rx1351_fail:
+.annotate 'line', 563
+    (rx1351_rep, rx1351_pos, $I10, $P10) = rx1351_cur."!mark_fail"(0)
+    lt rx1351_pos, -1, rx1351_done
+    eq rx1351_pos, -1, rx1351_fail
+    jump $I10
+  rx1351_done:
+    rx1351_cur."!cursor_fail"()
+    rx1351_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
+    .return (rx1351_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<{ }>"  :subid("337_1274022894.43745") :method
-.annotate 'line', 548
-    new $P1308, "ResizablePMCArray"
-    push $P1308, "{"
-    .return ($P1308)
+.sub "!PREFIX__metachar:sym<{ }>"  :subid("346_1275811487.95429") :method
+.annotate 'line', 563
+    new $P1353, "ResizablePMCArray"
+    push $P1353, "{"
+    .return ($P1353)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<name>"  :subid("338_1274022894.43745") :method :outer("330_1274022894.43745")
-.annotate 'line', 548
-    .const 'Sub' $P1319 = "340_1274022894.43745" 
-    capture_lex $P1319
-    .local string rx1311_tgt
-    .local int rx1311_pos
-    .local int rx1311_off
-    .local int rx1311_eos
-    .local int rx1311_rep
-    .local pmc rx1311_cur
-    (rx1311_cur, rx1311_pos, rx1311_tgt) = self."!cursor_start"()
-    rx1311_cur."!cursor_debug"("START ", "assertion:sym<name>")
-    rx1311_cur."!cursor_caparray"("arglist", "nibbler", "assertion")
-    .lex unicode:"$\x{a2}", rx1311_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1311_eos, rx1311_tgt
-    set rx1311_off, 0
-    lt rx1311_pos, 2, rx1311_start
-    sub rx1311_off, rx1311_pos, 1
-    substr rx1311_tgt, rx1311_tgt, rx1311_off
-  rx1311_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1314_done
-    goto rxscan1314_scan
-  rxscan1314_loop:
-    ($P10) = rx1311_cur."from"()
-    inc $P10
-    set rx1311_pos, $P10
-    ge rx1311_pos, rx1311_eos, rxscan1314_done
-  rxscan1314_scan:
-    set_addr $I10, rxscan1314_loop
-    rx1311_cur."!mark_push"(0, rx1311_pos, $I10)
-  rxscan1314_done:
-.annotate 'line', 562
-  # rx subcapture "longname"
-    set_addr $I10, rxcap_1315_fail
-    rx1311_cur."!mark_push"(0, rx1311_pos, $I10)
-  # rx charclass_q w r 1..-1
-    sub $I10, rx1311_pos, rx1311_off
-    find_not_cclass $I11, 8192, rx1311_tgt, $I10, rx1311_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx1311_fail
-    add rx1311_pos, rx1311_off, $I11
-    set_addr $I10, rxcap_1315_fail
-    ($I12, $I11) = rx1311_cur."!mark_peek"($I10)
-    rx1311_cur."!cursor_pos"($I11)
-    ($P10) = rx1311_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1311_pos, "")
-    rx1311_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("longname")
-    goto rxcap_1315_done
-  rxcap_1315_fail:
-    goto rx1311_fail
-  rxcap_1315_done:
-.annotate 'line', 569
-  # rx rxquantr1316 ** 0..1
-    set_addr $I1322, rxquantr1316_done
-    rx1311_cur."!mark_push"(0, rx1311_pos, $I1322)
-  rxquantr1316_loop:
-  alt1317_0:
+.sub "metachar:sym<nqpvar>"  :subid("347_1275811487.95429") :method :outer("341_1275811487.95429")
 .annotate 'line', 563
-    set_addr $I10, alt1317_1
-    rx1311_cur."!mark_push"(0, rx1311_pos, $I10)
-.annotate 'line', 564
+    .const 'Sub' $P1361 = "349_1275811487.95429" 
+    capture_lex $P1361
+    .local string rx1356_tgt
+    .local int rx1356_pos
+    .local int rx1356_off
+    .local int rx1356_eos
+    .local int rx1356_rep
+    .local pmc rx1356_cur
+    (rx1356_cur, rx1356_pos, rx1356_tgt) = self."!cursor_start"()
+    rx1356_cur."!cursor_debug"("START ", "metachar:sym<nqpvar>")
+    .lex unicode:"$\x{a2}", rx1356_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1356_eos, rx1356_tgt
+    gt rx1356_pos, rx1356_eos, rx1356_done
+    set rx1356_off, 0
+    lt rx1356_pos, 2, rx1356_start
+    sub rx1356_off, rx1356_pos, 1
+    substr rx1356_tgt, rx1356_tgt, rx1356_off
+  rx1356_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1359_done
+    goto rxscan1359_scan
+  rxscan1359_loop:
+    ($P10) = rx1356_cur."from"()
+    inc $P10
+    set rx1356_pos, $P10
+    ge rx1356_pos, rx1356_eos, rxscan1359_done
+  rxscan1359_scan:
+    set_addr $I10, rxscan1359_loop
+    rx1356_cur."!mark_push"(0, rx1356_pos, $I10)
+  rxscan1359_done:
+.annotate 'line', 573
+  # rx enumcharlist negate=0 zerowidth
+    ge rx1356_pos, rx1356_eos, rx1356_fail
+    sub $I10, rx1356_pos, rx1356_off
+    substr $S10, rx1356_tgt, $I10, 1
+    index $I11, "$@", $S10
+    lt $I11, 0, rx1356_fail
   # rx subrule "before" subtype=zerowidth negate=
-    rx1311_cur."!cursor_pos"(rx1311_pos)
-    .const 'Sub' $P1319 = "340_1274022894.43745" 
-    capture_lex $P1319
-    $P10 = rx1311_cur."before"($P1319)
-    unless $P10, rx1311_fail
-    goto alt1317_end
-  alt1317_1:
-    set_addr $I10, alt1317_2
-    rx1311_cur."!mark_push"(0, rx1311_pos, $I10)
-.annotate 'line', 565
-  # rx literal  "="
-    add $I11, rx1311_pos, 1
-    gt $I11, rx1311_eos, rx1311_fail
-    sub $I11, rx1311_pos, rx1311_off
-    substr $S10, rx1311_tgt, $I11, 1
-    ne $S10, "=", rx1311_fail
-    add rx1311_pos, 1
-  # rx subrule "assertion" subtype=capture negate=
-    rx1311_cur."!cursor_pos"(rx1311_pos)
-    $P10 = rx1311_cur."assertion"()
-    unless $P10, rx1311_fail
-    rx1311_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("assertion")
-    rx1311_pos = $P10."pos"()
-    goto alt1317_end
-  alt1317_2:
-    set_addr $I10, alt1317_3
-    rx1311_cur."!mark_push"(0, rx1311_pos, $I10)
-.annotate 'line', 566
-  # rx literal  ":"
-    add $I11, rx1311_pos, 1
-    gt $I11, rx1311_eos, rx1311_fail
-    sub $I11, rx1311_pos, rx1311_off
-    substr $S10, rx1311_tgt, $I11, 1
-    ne $S10, ":", rx1311_fail
-    add rx1311_pos, 1
-  # rx subrule "arglist" subtype=capture negate=
-    rx1311_cur."!cursor_pos"(rx1311_pos)
-    $P10 = rx1311_cur."arglist"()
-    unless $P10, rx1311_fail
-    rx1311_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx1311_pos = $P10."pos"()
-    goto alt1317_end
-  alt1317_3:
-    set_addr $I10, alt1317_4
-    rx1311_cur."!mark_push"(0, rx1311_pos, $I10)
-.annotate 'line', 567
-  # rx literal  "("
-    add $I11, rx1311_pos, 1
-    gt $I11, rx1311_eos, rx1311_fail
-    sub $I11, rx1311_pos, rx1311_off
-    substr $S10, rx1311_tgt, $I11, 1
-    ne $S10, "(", rx1311_fail
-    add rx1311_pos, 1
+    rx1356_cur."!cursor_pos"(rx1356_pos)
+    .const 'Sub' $P1361 = "349_1275811487.95429" 
+    capture_lex $P1361
+    $P10 = rx1356_cur."before"($P1361)
+    unless $P10, rx1356_fail
   # rx subrule "LANG" subtype=capture negate=
-    rx1311_cur."!cursor_pos"(rx1311_pos)
-    $P10 = rx1311_cur."LANG"("MAIN", "arglist")
-    unless $P10, rx1311_fail
-    rx1311_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx1311_pos = $P10."pos"()
-  # rx literal  ")"
-    add $I11, rx1311_pos, 1
-    gt $I11, rx1311_eos, rx1311_fail
-    sub $I11, rx1311_pos, rx1311_off
-    substr $S10, rx1311_tgt, $I11, 1
-    ne $S10, ")", rx1311_fail
-    add rx1311_pos, 1
-    goto alt1317_end
-  alt1317_4:
-.annotate 'line', 568
-  # rx subrule "normspace" subtype=method negate=
-    rx1311_cur."!cursor_pos"(rx1311_pos)
-    $P10 = rx1311_cur."normspace"()
-    unless $P10, rx1311_fail
-    rx1311_pos = $P10."pos"()
-  # rx subrule "nibbler" subtype=capture negate=
-    rx1311_cur."!cursor_pos"(rx1311_pos)
-    $P10 = rx1311_cur."nibbler"()
-    unless $P10, rx1311_fail
-    rx1311_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("nibbler")
-    rx1311_pos = $P10."pos"()
-  alt1317_end:
-.annotate 'line', 569
-    (rx1311_rep) = rx1311_cur."!mark_commit"($I1322)
-  rxquantr1316_done:
-.annotate 'line', 561
+    rx1356_cur."!cursor_pos"(rx1356_pos)
+    $P10 = rx1356_cur."LANG"("MAIN", "variable")
+    unless $P10, rx1356_fail
+    rx1356_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("var")
+    rx1356_pos = $P10."pos"()
+.annotate 'line', 572
   # rx pass
-    rx1311_cur."!cursor_pass"(rx1311_pos, "assertion:sym<name>")
-    rx1311_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1311_pos)
-    .return (rx1311_cur)
-  rx1311_fail:
-.annotate 'line', 548
-    (rx1311_rep, rx1311_pos, $I10, $P10) = rx1311_cur."!mark_fail"(0)
-    lt rx1311_pos, -1, rx1311_done
-    eq rx1311_pos, -1, rx1311_fail
-    jump $I10
-  rx1311_done:
-    rx1311_cur."!cursor_fail"()
-    rx1311_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
-    .return (rx1311_cur)
+    rx1356_cur."!cursor_pass"(rx1356_pos, "metachar:sym<nqpvar>")
+    rx1356_cur."!cursor_debug"("PASS  ", "metachar:sym<nqpvar>", " at pos=", rx1356_pos)
+    .return (rx1356_cur)
+  rx1356_fail:
+.annotate 'line', 563
+    (rx1356_rep, rx1356_pos, $I10, $P10) = rx1356_cur."!mark_fail"(0)
+    lt rx1356_pos, -1, rx1356_done
+    eq rx1356_pos, -1, rx1356_fail
+    jump $I10
+  rx1356_done:
+    rx1356_cur."!cursor_fail"()
+    rx1356_cur."!cursor_debug"("FAIL  ", "metachar:sym<nqpvar>")
+    .return (rx1356_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("339_1274022894.43745") :method
-.annotate 'line', 548
-    new $P1313, "ResizablePMCArray"
-    push $P1313, ""
-    .return ($P1313)
+.sub "!PREFIX__metachar:sym<nqpvar>"  :subid("348_1275811487.95429") :method
+.annotate 'line', 563
+    new $P1358, "ResizablePMCArray"
+    push $P1358, "$"
+    push $P1358, "@"
+    .return ($P1358)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1318"  :anon :subid("340_1274022894.43745") :method :outer("338_1274022894.43745")
-.annotate 'line', 564
-    .local string rx1320_tgt
-    .local int rx1320_pos
-    .local int rx1320_off
-    .local int rx1320_eos
-    .local int rx1320_rep
-    .local pmc rx1320_cur
-    (rx1320_cur, rx1320_pos, rx1320_tgt) = self."!cursor_start"()
-    rx1320_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx1320_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1320_eos, rx1320_tgt
-    set rx1320_off, 0
-    lt rx1320_pos, 2, rx1320_start
-    sub rx1320_off, rx1320_pos, 1
-    substr rx1320_tgt, rx1320_tgt, rx1320_off
-  rx1320_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1321_done
-    goto rxscan1321_scan
-  rxscan1321_loop:
-    ($P10) = rx1320_cur."from"()
-    inc $P10
-    set rx1320_pos, $P10
-    ge rx1320_pos, rx1320_eos, rxscan1321_done
-  rxscan1321_scan:
-    set_addr $I10, rxscan1321_loop
-    rx1320_cur."!mark_push"(0, rx1320_pos, $I10)
-  rxscan1321_done:
-  # rx literal  ">"
-    add $I11, rx1320_pos, 1
-    gt $I11, rx1320_eos, rx1320_fail
-    sub $I11, rx1320_pos, rx1320_off
-    substr $S10, rx1320_tgt, $I11, 1
-    ne $S10, ">", rx1320_fail
-    add rx1320_pos, 1
-  # rx pass
-    rx1320_cur."!cursor_pass"(rx1320_pos, "")
-    rx1320_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1320_pos)
-    .return (rx1320_cur)
-  rx1320_fail:
-    (rx1320_rep, rx1320_pos, $I10, $P10) = rx1320_cur."!mark_fail"(0)
-    lt rx1320_pos, -1, rx1320_done
-    eq rx1320_pos, -1, rx1320_fail
-    jump $I10
-  rx1320_done:
-    rx1320_cur."!cursor_fail"()
-    rx1320_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx1320_cur)
+.sub "_block1360"  :anon :subid("349_1275811487.95429") :method :outer("347_1275811487.95429")
+.annotate 'line', 573
+    .local string rx1362_tgt
+    .local int rx1362_pos
+    .local int rx1362_off
+    .local int rx1362_eos
+    .local int rx1362_rep
+    .local pmc rx1362_cur
+    (rx1362_cur, rx1362_pos, rx1362_tgt) = self."!cursor_start"()
+    rx1362_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx1362_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1362_eos, rx1362_tgt
+    gt rx1362_pos, rx1362_eos, rx1362_done
+    set rx1362_off, 0
+    lt rx1362_pos, 2, rx1362_start
+    sub rx1362_off, rx1362_pos, 1
+    substr rx1362_tgt, rx1362_tgt, rx1362_off
+  rx1362_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1363_done
+    goto rxscan1363_scan
+  rxscan1363_loop:
+    ($P10) = rx1362_cur."from"()
+    inc $P10
+    set rx1362_pos, $P10
+    ge rx1362_pos, rx1362_eos, rxscan1363_done
+  rxscan1363_scan:
+    set_addr $I10, rxscan1363_loop
+    rx1362_cur."!mark_push"(0, rx1362_pos, $I10)
+  rxscan1363_done:
+  # rx charclass .
+    ge rx1362_pos, rx1362_eos, rx1362_fail
+    inc rx1362_pos
+  # rx charclass w
+    ge rx1362_pos, rx1362_eos, rx1362_fail
+    sub $I10, rx1362_pos, rx1362_off
+    is_cclass $I11, 8192, rx1362_tgt, $I10
+    unless $I11, rx1362_fail
+    inc rx1362_pos
+  # rx pass
+    rx1362_cur."!cursor_pass"(rx1362_pos, "")
+    rx1362_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1362_pos)
+    .return (rx1362_cur)
+  rx1362_fail:
+    (rx1362_rep, rx1362_pos, $I10, $P10) = rx1362_cur."!mark_fail"(0)
+    lt rx1362_pos, -1, rx1362_done
+    eq rx1362_pos, -1, rx1362_fail
+    jump $I10
+  rx1362_done:
+    rx1362_cur."!cursor_fail"()
+    rx1362_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx1362_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "codeblock"  :subid("341_1274022894.43745") :method :outer("330_1274022894.43745")
-.annotate 'line', 548
-    .local string rx1324_tgt
-    .local int rx1324_pos
-    .local int rx1324_off
-    .local int rx1324_eos
-    .local int rx1324_rep
-    .local pmc rx1324_cur
-    (rx1324_cur, rx1324_pos, rx1324_tgt) = self."!cursor_start"()
-    rx1324_cur."!cursor_debug"("START ", "codeblock")
-    .lex unicode:"$\x{a2}", rx1324_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1324_eos, rx1324_tgt
-    set rx1324_off, 0
-    lt rx1324_pos, 2, rx1324_start
-    sub rx1324_off, rx1324_pos, 1
-    substr rx1324_tgt, rx1324_tgt, rx1324_off
-  rx1324_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1328_done
-    goto rxscan1328_scan
-  rxscan1328_loop:
-    ($P10) = rx1324_cur."from"()
-    inc $P10
-    set rx1324_pos, $P10
-    ge rx1324_pos, rx1324_eos, rxscan1328_done
-  rxscan1328_scan:
-    set_addr $I10, rxscan1328_loop
-    rx1324_cur."!mark_push"(0, rx1324_pos, $I10)
-  rxscan1328_done:
-.annotate 'line', 574
-  # rx subrule "LANG" subtype=capture negate=
-    rx1324_cur."!cursor_pos"(rx1324_pos)
-    $P10 = rx1324_cur."LANG"("MAIN", "pblock")
-    unless $P10, rx1324_fail
-    rx1324_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("block")
-    rx1324_pos = $P10."pos"()
-.annotate 'line', 573
+.sub "assertion:sym<{ }>"  :subid("350_1275811487.95429") :method :outer("341_1275811487.95429")
+.annotate 'line', 563
+    .local string rx1365_tgt
+    .local int rx1365_pos
+    .local int rx1365_off
+    .local int rx1365_eos
+    .local int rx1365_rep
+    .local pmc rx1365_cur
+    (rx1365_cur, rx1365_pos, rx1365_tgt) = self."!cursor_start"()
+    rx1365_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1365_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1365_eos, rx1365_tgt
+    gt rx1365_pos, rx1365_eos, rx1365_done
+    set rx1365_off, 0
+    lt rx1365_pos, 2, rx1365_start
+    sub rx1365_off, rx1365_pos, 1
+    substr rx1365_tgt, rx1365_tgt, rx1365_off
+  rx1365_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1368_done
+    goto rxscan1368_scan
+  rxscan1368_loop:
+    ($P10) = rx1365_cur."from"()
+    inc $P10
+    set rx1365_pos, $P10
+    ge rx1365_pos, rx1365_eos, rxscan1368_done
+  rxscan1368_scan:
+    set_addr $I10, rxscan1368_loop
+    rx1365_cur."!mark_push"(0, rx1365_pos, $I10)
+  rxscan1368_done:
+.annotate 'line', 577
+  # rx enumcharlist negate=0 zerowidth
+    ge rx1365_pos, rx1365_eos, rx1365_fail
+    sub $I10, rx1365_pos, rx1365_off
+    substr $S10, rx1365_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx1365_fail
+  # rx subrule "codeblock" subtype=capture negate=
+    rx1365_cur."!cursor_pos"(rx1365_pos)
+    $P10 = rx1365_cur."codeblock"()
+    unless $P10, rx1365_fail
+    rx1365_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("codeblock")
+    rx1365_pos = $P10."pos"()
+.annotate 'line', 576
   # rx pass
-    rx1324_cur."!cursor_pass"(rx1324_pos, "codeblock")
-    rx1324_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1324_pos)
-    .return (rx1324_cur)
-  rx1324_fail:
-.annotate 'line', 548
-    (rx1324_rep, rx1324_pos, $I10, $P10) = rx1324_cur."!mark_fail"(0)
-    lt rx1324_pos, -1, rx1324_done
-    eq rx1324_pos, -1, rx1324_fail
-    jump $I10
-  rx1324_done:
-    rx1324_cur."!cursor_fail"()
-    rx1324_cur."!cursor_debug"("FAIL  ", "codeblock")
-    .return (rx1324_cur)
+    rx1365_cur."!cursor_pass"(rx1365_pos, "assertion:sym<{ }>")
+    rx1365_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1365_pos)
+    .return (rx1365_cur)
+  rx1365_fail:
+.annotate 'line', 563
+    (rx1365_rep, rx1365_pos, $I10, $P10) = rx1365_cur."!mark_fail"(0)
+    lt rx1365_pos, -1, rx1365_done
+    eq rx1365_pos, -1, rx1365_fail
+    jump $I10
+  rx1365_done:
+    rx1365_cur."!cursor_fail"()
+    rx1365_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
+    .return (rx1365_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__codeblock"  :subid("342_1274022894.43745") :method
-.annotate 'line', 548
-    $P1326 = self."!PREFIX__!subrule"("block", "")
-    new $P1327, "ResizablePMCArray"
-    push $P1327, $P1326
-    .return ($P1327)
+.sub "!PREFIX__assertion:sym<{ }>"  :subid("351_1275811487.95429") :method
+.annotate 'line', 563
+    new $P1367, "ResizablePMCArray"
+    push $P1367, "{"
+    .return ($P1367)
 .end
 
 
-.namespace ["NQP";"Grammar"]
-.sub "_block1330" :load :anon :subid("343_1274022894.43745")
-.annotate 'line', 4
-    .const 'Sub' $P1332 = "11_1274022894.43745" 
-    $P1333 = $P1332()
-    .return ($P1333)
+.namespace ["NQP";"Regex"]
+.sub "assertion:sym<?{ }>"  :subid("352_1275811487.95429") :method :outer("341_1275811487.95429")
+.annotate 'line', 563
+    .const 'Sub' $P1375 = "354_1275811487.95429" 
+    capture_lex $P1375
+    .local string rx1370_tgt
+    .local int rx1370_pos
+    .local int rx1370_off
+    .local int rx1370_eos
+    .local int rx1370_rep
+    .local pmc rx1370_cur
+    (rx1370_cur, rx1370_pos, rx1370_tgt) = self."!cursor_start"()
+    rx1370_cur."!cursor_debug"("START ", "assertion:sym<?{ }>")
+    .lex unicode:"$\x{a2}", rx1370_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1370_eos, rx1370_tgt
+    gt rx1370_pos, rx1370_eos, rx1370_done
+    set rx1370_off, 0
+    lt rx1370_pos, 2, rx1370_start
+    sub rx1370_off, rx1370_pos, 1
+    substr rx1370_tgt, rx1370_tgt, rx1370_off
+  rx1370_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1373_done
+    goto rxscan1373_scan
+  rxscan1373_loop:
+    ($P10) = rx1370_cur."from"()
+    inc $P10
+    set rx1370_pos, $P10
+    ge rx1370_pos, rx1370_eos, rxscan1373_done
+  rxscan1373_scan:
+    set_addr $I10, rxscan1373_loop
+    rx1370_cur."!mark_push"(0, rx1370_pos, $I10)
+  rxscan1373_done:
+.annotate 'line', 581
+  # rx subcapture "zw"
+    set_addr $I10, rxcap_1378_fail
+    rx1370_cur."!mark_push"(0, rx1370_pos, $I10)
+  # rx enumcharlist negate=0 
+    ge rx1370_pos, rx1370_eos, rx1370_fail
+    sub $I10, rx1370_pos, rx1370_off
+    substr $S10, rx1370_tgt, $I10, 1
+    index $I11, "?!", $S10
+    lt $I11, 0, rx1370_fail
+    inc rx1370_pos
+  # rx subrule "before" subtype=zerowidth negate=
+    rx1370_cur."!cursor_pos"(rx1370_pos)
+    .const 'Sub' $P1375 = "354_1275811487.95429" 
+    capture_lex $P1375
+    $P10 = rx1370_cur."before"($P1375)
+    unless $P10, rx1370_fail
+    set_addr $I10, rxcap_1378_fail
+    ($I12, $I11) = rx1370_cur."!mark_peek"($I10)
+    rx1370_cur."!cursor_pos"($I11)
+    ($P10) = rx1370_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1370_pos, "")
+    rx1370_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("zw")
+    goto rxcap_1378_done
+  rxcap_1378_fail:
+    goto rx1370_fail
+  rxcap_1378_done:
+  # rx subrule "codeblock" subtype=capture negate=
+    rx1370_cur."!cursor_pos"(rx1370_pos)
+    $P10 = rx1370_cur."codeblock"()
+    unless $P10, rx1370_fail
+    rx1370_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("codeblock")
+    rx1370_pos = $P10."pos"()
+.annotate 'line', 580
+  # rx pass
+    rx1370_cur."!cursor_pass"(rx1370_pos, "assertion:sym<?{ }>")
+    rx1370_cur."!cursor_debug"("PASS  ", "assertion:sym<?{ }>", " at pos=", rx1370_pos)
+    .return (rx1370_cur)
+  rx1370_fail:
+.annotate 'line', 563
+    (rx1370_rep, rx1370_pos, $I10, $P10) = rx1370_cur."!mark_fail"(0)
+    lt rx1370_pos, -1, rx1370_done
+    eq rx1370_pos, -1, rx1370_fail
+    jump $I10
+  rx1370_done:
+    rx1370_cur."!cursor_fail"()
+    rx1370_cur."!cursor_debug"("FAIL  ", "assertion:sym<?{ }>")
+    .return (rx1370_cur)
+    .return ()
 .end
 
 
-.namespace []
-.sub "_block1351" :load :anon :subid("344_1274022894.43745")
-.annotate 'line', 1
-    .const 'Sub' $P1353 = "10_1274022894.43745" 
-    $P1354 = $P1353()
-    .return ($P1354)
+.namespace ["NQP";"Regex"]
+.sub "!PREFIX__assertion:sym<?{ }>"  :subid("353_1275811487.95429") :method
+.annotate 'line', 563
+    new $P1372, "ResizablePMCArray"
+    push $P1372, "!"
+    push $P1372, "?"
+    .return ($P1372)
 .end
 
-### .include 'gen/nqp-actions.pir'
 
-.namespace []
-.sub "_block11"  :anon :subid("10_1274022903.56472")
+.namespace ["NQP";"Regex"]
+.sub "_block1374"  :anon :subid("354_1275811487.95429") :method :outer("352_1275811487.95429")
+.annotate 'line', 581
+    .local string rx1376_tgt
+    .local int rx1376_pos
+    .local int rx1376_off
+    .local int rx1376_eos
+    .local int rx1376_rep
+    .local pmc rx1376_cur
+    (rx1376_cur, rx1376_pos, rx1376_tgt) = self."!cursor_start"()
+    rx1376_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx1376_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1376_eos, rx1376_tgt
+    gt rx1376_pos, rx1376_eos, rx1376_done
+    set rx1376_off, 0
+    lt rx1376_pos, 2, rx1376_start
+    sub rx1376_off, rx1376_pos, 1
+    substr rx1376_tgt, rx1376_tgt, rx1376_off
+  rx1376_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1377_done
+    goto rxscan1377_scan
+  rxscan1377_loop:
+    ($P10) = rx1376_cur."from"()
+    inc $P10
+    set rx1376_pos, $P10
+    ge rx1376_pos, rx1376_eos, rxscan1377_done
+  rxscan1377_scan:
+    set_addr $I10, rxscan1377_loop
+    rx1376_cur."!mark_push"(0, rx1376_pos, $I10)
+  rxscan1377_done:
+  # rx literal  "{"
+    add $I11, rx1376_pos, 1
+    gt $I11, rx1376_eos, rx1376_fail
+    sub $I11, rx1376_pos, rx1376_off
+    substr $S10, rx1376_tgt, $I11, 1
+    ne $S10, "{", rx1376_fail
+    add rx1376_pos, 1
+  # rx pass
+    rx1376_cur."!cursor_pass"(rx1376_pos, "")
+    rx1376_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1376_pos)
+    .return (rx1376_cur)
+  rx1376_fail:
+    (rx1376_rep, rx1376_pos, $I10, $P10) = rx1376_cur."!mark_fail"(0)
+    lt rx1376_pos, -1, rx1376_done
+    eq rx1376_pos, -1, rx1376_fail
+    jump $I10
+  rx1376_done:
+    rx1376_cur."!cursor_fail"()
+    rx1376_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx1376_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "assertion:sym<name>"  :subid("355_1275811487.95429") :method :outer("341_1275811487.95429")
+.annotate 'line', 563
+    .const 'Sub' $P1388 = "357_1275811487.95429" 
+    capture_lex $P1388
+    .local string rx1380_tgt
+    .local int rx1380_pos
+    .local int rx1380_off
+    .local int rx1380_eos
+    .local int rx1380_rep
+    .local pmc rx1380_cur
+    (rx1380_cur, rx1380_pos, rx1380_tgt) = self."!cursor_start"()
+    rx1380_cur."!cursor_debug"("START ", "assertion:sym<name>")
+    rx1380_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    .lex unicode:"$\x{a2}", rx1380_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1380_eos, rx1380_tgt
+    gt rx1380_pos, rx1380_eos, rx1380_done
+    set rx1380_off, 0
+    lt rx1380_pos, 2, rx1380_start
+    sub rx1380_off, rx1380_pos, 1
+    substr rx1380_tgt, rx1380_tgt, rx1380_off
+  rx1380_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1383_done
+    goto rxscan1383_scan
+  rxscan1383_loop:
+    ($P10) = rx1380_cur."from"()
+    inc $P10
+    set rx1380_pos, $P10
+    ge rx1380_pos, rx1380_eos, rxscan1383_done
+  rxscan1383_scan:
+    set_addr $I10, rxscan1383_loop
+    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
+  rxscan1383_done:
+.annotate 'line', 585
+  # rx subcapture "longname"
+    set_addr $I10, rxcap_1384_fail
+    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
+  # rx charclass_q w r 1..-1
+    sub $I10, rx1380_pos, rx1380_off
+    find_not_cclass $I11, 8192, rx1380_tgt, $I10, rx1380_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx1380_fail
+    add rx1380_pos, rx1380_off, $I11
+    set_addr $I10, rxcap_1384_fail
+    ($I12, $I11) = rx1380_cur."!mark_peek"($I10)
+    rx1380_cur."!cursor_pos"($I11)
+    ($P10) = rx1380_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1380_pos, "")
+    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("longname")
+    goto rxcap_1384_done
+  rxcap_1384_fail:
+    goto rx1380_fail
+  rxcap_1384_done:
+.annotate 'line', 592
+  # rx rxquantr1385 ** 0..1
+    set_addr $I1391, rxquantr1385_done
+    rx1380_cur."!mark_push"(0, rx1380_pos, $I1391)
+  rxquantr1385_loop:
+  alt1386_0:
+.annotate 'line', 586
+    set_addr $I10, alt1386_1
+    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
+.annotate 'line', 587
+  # rx subrule "before" subtype=zerowidth negate=
+    rx1380_cur."!cursor_pos"(rx1380_pos)
+    .const 'Sub' $P1388 = "357_1275811487.95429" 
+    capture_lex $P1388
+    $P10 = rx1380_cur."before"($P1388)
+    unless $P10, rx1380_fail
+    goto alt1386_end
+  alt1386_1:
+    set_addr $I10, alt1386_2
+    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
+.annotate 'line', 588
+  # rx literal  "="
+    add $I11, rx1380_pos, 1
+    gt $I11, rx1380_eos, rx1380_fail
+    sub $I11, rx1380_pos, rx1380_off
+    substr $S10, rx1380_tgt, $I11, 1
+    ne $S10, "=", rx1380_fail
+    add rx1380_pos, 1
+  # rx subrule "assertion" subtype=capture negate=
+    rx1380_cur."!cursor_pos"(rx1380_pos)
+    $P10 = rx1380_cur."assertion"()
+    unless $P10, rx1380_fail
+    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("assertion")
+    rx1380_pos = $P10."pos"()
+    goto alt1386_end
+  alt1386_2:
+    set_addr $I10, alt1386_3
+    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
+.annotate 'line', 589
+  # rx literal  ":"
+    add $I11, rx1380_pos, 1
+    gt $I11, rx1380_eos, rx1380_fail
+    sub $I11, rx1380_pos, rx1380_off
+    substr $S10, rx1380_tgt, $I11, 1
+    ne $S10, ":", rx1380_fail
+    add rx1380_pos, 1
+  # rx subrule "arglist" subtype=capture negate=
+    rx1380_cur."!cursor_pos"(rx1380_pos)
+    $P10 = rx1380_cur."arglist"()
+    unless $P10, rx1380_fail
+    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx1380_pos = $P10."pos"()
+    goto alt1386_end
+  alt1386_3:
+    set_addr $I10, alt1386_4
+    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
+.annotate 'line', 590
+  # rx literal  "("
+    add $I11, rx1380_pos, 1
+    gt $I11, rx1380_eos, rx1380_fail
+    sub $I11, rx1380_pos, rx1380_off
+    substr $S10, rx1380_tgt, $I11, 1
+    ne $S10, "(", rx1380_fail
+    add rx1380_pos, 1
+  # rx subrule "LANG" subtype=capture negate=
+    rx1380_cur."!cursor_pos"(rx1380_pos)
+    $P10 = rx1380_cur."LANG"("MAIN", "arglist")
+    unless $P10, rx1380_fail
+    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx1380_pos = $P10."pos"()
+  # rx literal  ")"
+    add $I11, rx1380_pos, 1
+    gt $I11, rx1380_eos, rx1380_fail
+    sub $I11, rx1380_pos, rx1380_off
+    substr $S10, rx1380_tgt, $I11, 1
+    ne $S10, ")", rx1380_fail
+    add rx1380_pos, 1
+    goto alt1386_end
+  alt1386_4:
+.annotate 'line', 591
+  # rx subrule "normspace" subtype=method negate=
+    rx1380_cur."!cursor_pos"(rx1380_pos)
+    $P10 = rx1380_cur."normspace"()
+    unless $P10, rx1380_fail
+    rx1380_pos = $P10."pos"()
+  # rx subrule "nibbler" subtype=capture negate=
+    rx1380_cur."!cursor_pos"(rx1380_pos)
+    $P10 = rx1380_cur."nibbler"()
+    unless $P10, rx1380_fail
+    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("nibbler")
+    rx1380_pos = $P10."pos"()
+  alt1386_end:
+.annotate 'line', 592
+    (rx1380_rep) = rx1380_cur."!mark_commit"($I1391)
+  rxquantr1385_done:
+.annotate 'line', 584
+  # rx pass
+    rx1380_cur."!cursor_pass"(rx1380_pos, "assertion:sym<name>")
+    rx1380_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1380_pos)
+    .return (rx1380_cur)
+  rx1380_fail:
+.annotate 'line', 563
+    (rx1380_rep, rx1380_pos, $I10, $P10) = rx1380_cur."!mark_fail"(0)
+    lt rx1380_pos, -1, rx1380_done
+    eq rx1380_pos, -1, rx1380_fail
+    jump $I10
+  rx1380_done:
+    rx1380_cur."!cursor_fail"()
+    rx1380_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
+    .return (rx1380_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "!PREFIX__assertion:sym<name>"  :subid("356_1275811487.95429") :method
+.annotate 'line', 563
+    new $P1382, "ResizablePMCArray"
+    push $P1382, ""
+    .return ($P1382)
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "_block1387"  :anon :subid("357_1275811487.95429") :method :outer("355_1275811487.95429")
+.annotate 'line', 587
+    .local string rx1389_tgt
+    .local int rx1389_pos
+    .local int rx1389_off
+    .local int rx1389_eos
+    .local int rx1389_rep
+    .local pmc rx1389_cur
+    (rx1389_cur, rx1389_pos, rx1389_tgt) = self."!cursor_start"()
+    rx1389_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx1389_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1389_eos, rx1389_tgt
+    gt rx1389_pos, rx1389_eos, rx1389_done
+    set rx1389_off, 0
+    lt rx1389_pos, 2, rx1389_start
+    sub rx1389_off, rx1389_pos, 1
+    substr rx1389_tgt, rx1389_tgt, rx1389_off
+  rx1389_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1390_done
+    goto rxscan1390_scan
+  rxscan1390_loop:
+    ($P10) = rx1389_cur."from"()
+    inc $P10
+    set rx1389_pos, $P10
+    ge rx1389_pos, rx1389_eos, rxscan1390_done
+  rxscan1390_scan:
+    set_addr $I10, rxscan1390_loop
+    rx1389_cur."!mark_push"(0, rx1389_pos, $I10)
+  rxscan1390_done:
+  # rx literal  ">"
+    add $I11, rx1389_pos, 1
+    gt $I11, rx1389_eos, rx1389_fail
+    sub $I11, rx1389_pos, rx1389_off
+    substr $S10, rx1389_tgt, $I11, 1
+    ne $S10, ">", rx1389_fail
+    add rx1389_pos, 1
+  # rx pass
+    rx1389_cur."!cursor_pass"(rx1389_pos, "")
+    rx1389_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1389_pos)
+    .return (rx1389_cur)
+  rx1389_fail:
+    (rx1389_rep, rx1389_pos, $I10, $P10) = rx1389_cur."!mark_fail"(0)
+    lt rx1389_pos, -1, rx1389_done
+    eq rx1389_pos, -1, rx1389_fail
+    jump $I10
+  rx1389_done:
+    rx1389_cur."!cursor_fail"()
+    rx1389_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx1389_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "assertion:sym<var>"  :subid("358_1275811487.95429") :method :outer("341_1275811487.95429")
+.annotate 'line', 563
+    .local string rx1393_tgt
+    .local int rx1393_pos
+    .local int rx1393_off
+    .local int rx1393_eos
+    .local int rx1393_rep
+    .local pmc rx1393_cur
+    (rx1393_cur, rx1393_pos, rx1393_tgt) = self."!cursor_start"()
+    rx1393_cur."!cursor_debug"("START ", "assertion:sym<var>")
+    .lex unicode:"$\x{a2}", rx1393_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1393_eos, rx1393_tgt
+    gt rx1393_pos, rx1393_eos, rx1393_done
+    set rx1393_off, 0
+    lt rx1393_pos, 2, rx1393_start
+    sub rx1393_off, rx1393_pos, 1
+    substr rx1393_tgt, rx1393_tgt, rx1393_off
+  rx1393_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1396_done
+    goto rxscan1396_scan
+  rxscan1396_loop:
+    ($P10) = rx1393_cur."from"()
+    inc $P10
+    set rx1393_pos, $P10
+    ge rx1393_pos, rx1393_eos, rxscan1396_done
+  rxscan1396_scan:
+    set_addr $I10, rxscan1396_loop
+    rx1393_cur."!mark_push"(0, rx1393_pos, $I10)
+  rxscan1396_done:
+.annotate 'line', 596
+  # rx enumcharlist negate=0 zerowidth
+    ge rx1393_pos, rx1393_eos, rx1393_fail
+    sub $I10, rx1393_pos, rx1393_off
+    substr $S10, rx1393_tgt, $I10, 1
+    index $I11, "$@", $S10
+    lt $I11, 0, rx1393_fail
+  # rx subrule "LANG" subtype=capture negate=
+    rx1393_cur."!cursor_pos"(rx1393_pos)
+    $P10 = rx1393_cur."LANG"("MAIN", "variable")
+    unless $P10, rx1393_fail
+    rx1393_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("var")
+    rx1393_pos = $P10."pos"()
+.annotate 'line', 595
+  # rx pass
+    rx1393_cur."!cursor_pass"(rx1393_pos, "assertion:sym<var>")
+    rx1393_cur."!cursor_debug"("PASS  ", "assertion:sym<var>", " at pos=", rx1393_pos)
+    .return (rx1393_cur)
+  rx1393_fail:
+.annotate 'line', 563
+    (rx1393_rep, rx1393_pos, $I10, $P10) = rx1393_cur."!mark_fail"(0)
+    lt rx1393_pos, -1, rx1393_done
+    eq rx1393_pos, -1, rx1393_fail
+    jump $I10
+  rx1393_done:
+    rx1393_cur."!cursor_fail"()
+    rx1393_cur."!cursor_debug"("FAIL  ", "assertion:sym<var>")
+    .return (rx1393_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "!PREFIX__assertion:sym<var>"  :subid("359_1275811487.95429") :method
+.annotate 'line', 563
+    new $P1395, "ResizablePMCArray"
+    push $P1395, "$"
+    push $P1395, "@"
+    .return ($P1395)
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "codeblock"  :subid("360_1275811487.95429") :method :outer("341_1275811487.95429")
+.annotate 'line', 563
+    .local string rx1398_tgt
+    .local int rx1398_pos
+    .local int rx1398_off
+    .local int rx1398_eos
+    .local int rx1398_rep
+    .local pmc rx1398_cur
+    (rx1398_cur, rx1398_pos, rx1398_tgt) = self."!cursor_start"()
+    rx1398_cur."!cursor_debug"("START ", "codeblock")
+    .lex unicode:"$\x{a2}", rx1398_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1398_eos, rx1398_tgt
+    gt rx1398_pos, rx1398_eos, rx1398_done
+    set rx1398_off, 0
+    lt rx1398_pos, 2, rx1398_start
+    sub rx1398_off, rx1398_pos, 1
+    substr rx1398_tgt, rx1398_tgt, rx1398_off
+  rx1398_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1402_done
+    goto rxscan1402_scan
+  rxscan1402_loop:
+    ($P10) = rx1398_cur."from"()
+    inc $P10
+    set rx1398_pos, $P10
+    ge rx1398_pos, rx1398_eos, rxscan1402_done
+  rxscan1402_scan:
+    set_addr $I10, rxscan1402_loop
+    rx1398_cur."!mark_push"(0, rx1398_pos, $I10)
+  rxscan1402_done:
+.annotate 'line', 600
+  # rx subrule "LANG" subtype=capture negate=
+    rx1398_cur."!cursor_pos"(rx1398_pos)
+    $P10 = rx1398_cur."LANG"("MAIN", "pblock")
+    unless $P10, rx1398_fail
+    rx1398_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("block")
+    rx1398_pos = $P10."pos"()
+.annotate 'line', 599
+  # rx pass
+    rx1398_cur."!cursor_pass"(rx1398_pos, "codeblock")
+    rx1398_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1398_pos)
+    .return (rx1398_cur)
+  rx1398_fail:
+.annotate 'line', 563
+    (rx1398_rep, rx1398_pos, $I10, $P10) = rx1398_cur."!mark_fail"(0)
+    lt rx1398_pos, -1, rx1398_done
+    eq rx1398_pos, -1, rx1398_fail
+    jump $I10
+  rx1398_done:
+    rx1398_cur."!cursor_fail"()
+    rx1398_cur."!cursor_debug"("FAIL  ", "codeblock")
+    .return (rx1398_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "!PREFIX__codeblock"  :subid("361_1275811487.95429") :method
+.annotate 'line', 563
+    $P1400 = self."!PREFIX__!subrule"("LANG", "")
+    new $P1401, "ResizablePMCArray"
+    push $P1401, $P1400
+    .return ($P1401)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "_block1404" :load :anon :subid("362_1275811487.95429")
+.annotate 'line', 4
+    .const 'Sub' $P1406 = "11_1275811487.95429" 
+    $P1407 = $P1406()
+    .return ($P1407)
+.end
+
+
+.namespace []
+.sub "_block1425" :load :anon :subid("363_1275811487.95429")
+.annotate 'line', 1
+    .const 'Sub' $P1427 = "10_1275811487.95429" 
+    $P1428 = $P1427()
+    .return ($P1428)
+.end
+
+### .include 'gen/nqp-actions.pir'
+
+.namespace []
+.sub "_block11"  :anon :subid("10_1275811497.55064")
 .annotate 'line', 0
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
+.annotate 'line', 1
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
 .annotate 'line', 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
-    $P2262 = $P14()
+    $P2424 = $P14()
 .annotate 'line', 1
-    .return ($P2262)
-    .const 'Sub' $P2264 = "133_1274022903.56472" 
-    .return ($P2264)
+    .return ($P2424)
+    .const 'Sub' $P2426 = "143_1275811497.55064" 
+    .return ($P2426)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post134") :outer("10_1274022903.56472")
+.sub "" :load :init :subid("post144") :outer("10_1275811497.55064")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1274022903.56472" 
+    .const 'Sub' $P12 = "10_1275811497.55064" 
     .local pmc block
     set block, $P12
-    $P2267 = get_root_global ["parrot"], "P6metaclass"
-    $P2267."new_class"("NQP::Actions", "HLL::Actions" :named("parent"))
+    $P2429 = get_root_global ["parrot"], "P6metaclass"
+    $P2429."new_class"("NQP::Actions", "HLL::Actions" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block13"  :subid("11_1274022903.56472") :outer("10_1274022903.56472")
+.sub "_block13"  :subid("11_1275811497.55064") :outer("10_1275811497.55064")
 .annotate 'line', 3
-    .const 'Sub' $P2258 = "132_1274022903.56472" 
+    .const 'Sub' $P2420 = "142_1275811497.55064" 
+    capture_lex $P2420
+    get_hll_global $P2303, ["NQP";"RegexActions"], "_block2302" 
+    capture_lex $P2303
+    .const 'Sub' $P2292 = "132_1275811497.55064" 
+    capture_lex $P2292
+    .const 'Sub' $P2285 = "131_1275811497.55064" 
+    capture_lex $P2285
+    .const 'Sub' $P2278 = "130_1275811497.55064" 
+    capture_lex $P2278
+    .const 'Sub' $P2271 = "129_1275811497.55064" 
+    capture_lex $P2271
+    .const 'Sub' $P2258 = "128_1275811497.55064" 
     capture_lex $P2258
-    get_hll_global $P2189, ["NQP";"RegexActions"], "_block2188" 
-    capture_lex $P2189
-    .const 'Sub' $P2178 = "125_1274022903.56472" 
-    capture_lex $P2178
-    .const 'Sub' $P2171 = "124_1274022903.56472" 
-    capture_lex $P2171
-    .const 'Sub' $P2164 = "123_1274022903.56472" 
-    capture_lex $P2164
-    .const 'Sub' $P2157 = "122_1274022903.56472" 
-    capture_lex $P2157
-    .const 'Sub' $P2144 = "121_1274022903.56472" 
-    capture_lex $P2144
-    .const 'Sub' $P2134 = "120_1274022903.56472" 
-    capture_lex $P2134
-    .const 'Sub' $P2124 = "119_1274022903.56472" 
-    capture_lex $P2124
-    .const 'Sub' $P2114 = "118_1274022903.56472" 
-    capture_lex $P2114
-    .const 'Sub' $P2107 = "117_1274022903.56472" 
-    capture_lex $P2107
-    .const 'Sub' $P2093 = "116_1274022903.56472" 
-    capture_lex $P2093
-    .const 'Sub' $P2083 = "115_1274022903.56472" 
-    capture_lex $P2083
-    .const 'Sub' $P2046 = "114_1274022903.56472" 
-    capture_lex $P2046
-    .const 'Sub' $P2032 = "113_1274022903.56472" 
-    capture_lex $P2032
-    .const 'Sub' $P2022 = "112_1274022903.56472" 
-    capture_lex $P2022
-    .const 'Sub' $P2012 = "111_1274022903.56472" 
-    capture_lex $P2012
-    .const 'Sub' $P2002 = "110_1274022903.56472" 
+    .const 'Sub' $P2248 = "127_1275811497.55064" 
+    capture_lex $P2248
+    .const 'Sub' $P2238 = "126_1275811497.55064" 
+    capture_lex $P2238
+    .const 'Sub' $P2228 = "125_1275811497.55064" 
+    capture_lex $P2228
+    .const 'Sub' $P2221 = "124_1275811497.55064" 
+    capture_lex $P2221
+    .const 'Sub' $P2207 = "123_1275811497.55064" 
+    capture_lex $P2207
+    .const 'Sub' $P2197 = "122_1275811497.55064" 
+    capture_lex $P2197
+    .const 'Sub' $P2160 = "121_1275811497.55064" 
+    capture_lex $P2160
+    .const 'Sub' $P2146 = "120_1275811497.55064" 
+    capture_lex $P2146
+    .const 'Sub' $P2136 = "119_1275811497.55064" 
+    capture_lex $P2136
+    .const 'Sub' $P2126 = "118_1275811497.55064" 
+    capture_lex $P2126
+    .const 'Sub' $P2116 = "117_1275811497.55064" 
+    capture_lex $P2116
+    .const 'Sub' $P2106 = "116_1275811497.55064" 
+    capture_lex $P2106
+    .const 'Sub' $P2096 = "115_1275811497.55064" 
+    capture_lex $P2096
+    .const 'Sub' $P2068 = "114_1275811497.55064" 
+    capture_lex $P2068
+    .const 'Sub' $P2051 = "113_1275811497.55064" 
+    capture_lex $P2051
+    .const 'Sub' $P2041 = "112_1275811497.55064" 
+    capture_lex $P2041
+    .const 'Sub' $P2028 = "111_1275811497.55064" 
+    capture_lex $P2028
+    .const 'Sub' $P2015 = "110_1275811497.55064" 
+    capture_lex $P2015
+    .const 'Sub' $P2002 = "109_1275811497.55064" 
     capture_lex $P2002
-    .const 'Sub' $P1992 = "109_1274022903.56472" 
+    .const 'Sub' $P1992 = "108_1275811497.55064" 
     capture_lex $P1992
-    .const 'Sub' $P1982 = "108_1274022903.56472" 
-    capture_lex $P1982
-    .const 'Sub' $P1954 = "107_1274022903.56472" 
-    capture_lex $P1954
-    .const 'Sub' $P1937 = "106_1274022903.56472" 
-    capture_lex $P1937
-    .const 'Sub' $P1927 = "105_1274022903.56472" 
-    capture_lex $P1927
-    .const 'Sub' $P1914 = "104_1274022903.56472" 
-    capture_lex $P1914
-    .const 'Sub' $P1901 = "103_1274022903.56472" 
-    capture_lex $P1901
-    .const 'Sub' $P1888 = "102_1274022903.56472" 
-    capture_lex $P1888
-    .const 'Sub' $P1878 = "101_1274022903.56472" 
-    capture_lex $P1878
-    .const 'Sub' $P1849 = "100_1274022903.56472" 
-    capture_lex $P1849
-    .const 'Sub' $P1825 = "99_1274022903.56472" 
-    capture_lex $P1825
-    .const 'Sub' $P1815 = "98_1274022903.56472" 
-    capture_lex $P1815
-    .const 'Sub' $P1805 = "97_1274022903.56472" 
-    capture_lex $P1805
-    .const 'Sub' $P1778 = "96_1274022903.56472" 
-    capture_lex $P1778
-    .const 'Sub' $P1760 = "95_1274022903.56472" 
+    .const 'Sub' $P1963 = "107_1275811497.55064" 
+    capture_lex $P1963
+    .const 'Sub' $P1939 = "106_1275811497.55064" 
+    capture_lex $P1939
+    .const 'Sub' $P1929 = "105_1275811497.55064" 
+    capture_lex $P1929
+    .const 'Sub' $P1919 = "104_1275811497.55064" 
+    capture_lex $P1919
+    .const 'Sub' $P1892 = "103_1275811497.55064" 
+    capture_lex $P1892
+    .const 'Sub' $P1874 = "102_1275811497.55064" 
+    capture_lex $P1874
+    .const 'Sub' $P1864 = "101_1275811497.55064" 
+    capture_lex $P1864
+    .const 'Sub' $P1760 = "98_1275811497.55064" 
     capture_lex $P1760
-    .const 'Sub' $P1750 = "94_1274022903.56472" 
+    .const 'Sub' $P1750 = "97_1275811497.55064" 
     capture_lex $P1750
-    .const 'Sub' $P1646 = "91_1274022903.56472" 
-    capture_lex $P1646
-    .const 'Sub' $P1636 = "90_1274022903.56472" 
-    capture_lex $P1636
-    .const 'Sub' $P1607 = "89_1274022903.56472" 
-    capture_lex $P1607
-    .const 'Sub' $P1565 = "88_1274022903.56472" 
-    capture_lex $P1565
-    .const 'Sub' $P1549 = "87_1274022903.56472" 
-    capture_lex $P1549
-    .const 'Sub' $P1540 = "86_1274022903.56472" 
-    capture_lex $P1540
-    .const 'Sub' $P1508 = "85_1274022903.56472" 
-    capture_lex $P1508
-    .const 'Sub' $P1409 = "82_1274022903.56472" 
-    capture_lex $P1409
-    .const 'Sub' $P1392 = "81_1274022903.56472" 
-    capture_lex $P1392
-    .const 'Sub' $P1372 = "80_1274022903.56472" 
-    capture_lex $P1372
-    .const 'Sub' $P1288 = "79_1274022903.56472" 
-    capture_lex $P1288
-    .const 'Sub' $P1264 = "77_1274022903.56472" 
-    capture_lex $P1264
-    .const 'Sub' $P1230 = "75_1274022903.56472" 
-    capture_lex $P1230
-    .const 'Sub' $P1180 = "73_1274022903.56472" 
-    capture_lex $P1180
-    .const 'Sub' $P1170 = "72_1274022903.56472" 
-    capture_lex $P1170
-    .const 'Sub' $P1160 = "71_1274022903.56472" 
-    capture_lex $P1160
-    .const 'Sub' $P1089 = "69_1274022903.56472" 
-    capture_lex $P1089
-    .const 'Sub' $P1072 = "68_1274022903.56472" 
-    capture_lex $P1072
-    .const 'Sub' $P1062 = "67_1274022903.56472" 
-    capture_lex $P1062
-    .const 'Sub' $P1052 = "66_1274022903.56472" 
-    capture_lex $P1052
-    .const 'Sub' $P1042 = "65_1274022903.56472" 
-    capture_lex $P1042
-    .const 'Sub' $P1032 = "64_1274022903.56472" 
-    capture_lex $P1032
-    .const 'Sub' $P1008 = "63_1274022903.56472" 
-    capture_lex $P1008
-    .const 'Sub' $P955 = "62_1274022903.56472" 
-    capture_lex $P955
-    .const 'Sub' $P945 = "61_1274022903.56472" 
-    capture_lex $P945
-    .const 'Sub' $P856 = "59_1274022903.56472" 
-    capture_lex $P856
-    .const 'Sub' $P830 = "58_1274022903.56472" 
-    capture_lex $P830
-    .const 'Sub' $P814 = "57_1274022903.56472" 
-    capture_lex $P814
-    .const 'Sub' $P804 = "56_1274022903.56472" 
-    capture_lex $P804
-    .const 'Sub' $P794 = "55_1274022903.56472" 
-    capture_lex $P794
-    .const 'Sub' $P784 = "54_1274022903.56472" 
-    capture_lex $P784
-    .const 'Sub' $P774 = "53_1274022903.56472" 
-    capture_lex $P774
-    .const 'Sub' $P764 = "52_1274022903.56472" 
-    capture_lex $P764
-    .const 'Sub' $P754 = "51_1274022903.56472" 
-    capture_lex $P754
-    .const 'Sub' $P744 = "50_1274022903.56472" 
-    capture_lex $P744
-    .const 'Sub' $P734 = "49_1274022903.56472" 
-    capture_lex $P734
-    .const 'Sub' $P724 = "48_1274022903.56472" 
-    capture_lex $P724
-    .const 'Sub' $P714 = "47_1274022903.56472" 
-    capture_lex $P714
-    .const 'Sub' $P704 = "46_1274022903.56472" 
-    capture_lex $P704
-    .const 'Sub' $P694 = "45_1274022903.56472" 
-    capture_lex $P694
-    .const 'Sub' $P684 = "44_1274022903.56472" 
-    capture_lex $P684
-    .const 'Sub' $P666 = "43_1274022903.56472" 
-    capture_lex $P666
-    .const 'Sub' $P631 = "42_1274022903.56472" 
-    capture_lex $P631
-    .const 'Sub' $P615 = "41_1274022903.56472" 
-    capture_lex $P615
-    .const 'Sub' $P594 = "40_1274022903.56472" 
-    capture_lex $P594
-    .const 'Sub' $P574 = "39_1274022903.56472" 
+    .const 'Sub' $P1721 = "96_1275811497.55064" 
+    capture_lex $P1721
+    .const 'Sub' $P1679 = "95_1275811497.55064" 
+    capture_lex $P1679
+    .const 'Sub' $P1663 = "94_1275811497.55064" 
+    capture_lex $P1663
+    .const 'Sub' $P1654 = "93_1275811497.55064" 
+    capture_lex $P1654
+    .const 'Sub' $P1622 = "92_1275811497.55064" 
+    capture_lex $P1622
+    .const 'Sub' $P1523 = "89_1275811497.55064" 
+    capture_lex $P1523
+    .const 'Sub' $P1506 = "88_1275811497.55064" 
+    capture_lex $P1506
+    .const 'Sub' $P1486 = "87_1275811497.55064" 
+    capture_lex $P1486
+    .const 'Sub' $P1374 = "84_1275811497.55064" 
+    capture_lex $P1374
+    .const 'Sub' $P1317 = "80_1275811497.55064" 
+    capture_lex $P1317
+    .const 'Sub' $P1277 = "78_1275811497.55064" 
+    capture_lex $P1277
+    .const 'Sub' $P1227 = "76_1275811497.55064" 
+    capture_lex $P1227
+    .const 'Sub' $P1217 = "75_1275811497.55064" 
+    capture_lex $P1217
+    .const 'Sub' $P1207 = "74_1275811497.55064" 
+    capture_lex $P1207
+    .const 'Sub' $P1136 = "72_1275811497.55064" 
+    capture_lex $P1136
+    .const 'Sub' $P1126 = "71_1275811497.55064" 
+    capture_lex $P1126
+    .const 'Sub' $P1109 = "70_1275811497.55064" 
+    capture_lex $P1109
+    .const 'Sub' $P1092 = "69_1275811497.55064" 
+    capture_lex $P1092
+    .const 'Sub' $P1075 = "68_1275811497.55064" 
+    capture_lex $P1075
+    .const 'Sub' $P1065 = "67_1275811497.55064" 
+    capture_lex $P1065
+    .const 'Sub' $P1055 = "66_1275811497.55064" 
+    capture_lex $P1055
+    .const 'Sub' $P1045 = "65_1275811497.55064" 
+    capture_lex $P1045
+    .const 'Sub' $P1021 = "64_1275811497.55064" 
+    capture_lex $P1021
+    .const 'Sub' $P968 = "63_1275811497.55064" 
+    capture_lex $P968
+    .const 'Sub' $P958 = "62_1275811497.55064" 
+    capture_lex $P958
+    .const 'Sub' $P869 = "60_1275811497.55064" 
+    capture_lex $P869
+    .const 'Sub' $P843 = "59_1275811497.55064" 
+    capture_lex $P843
+    .const 'Sub' $P827 = "58_1275811497.55064" 
+    capture_lex $P827
+    .const 'Sub' $P817 = "57_1275811497.55064" 
+    capture_lex $P817
+    .const 'Sub' $P807 = "56_1275811497.55064" 
+    capture_lex $P807
+    .const 'Sub' $P797 = "55_1275811497.55064" 
+    capture_lex $P797
+    .const 'Sub' $P787 = "54_1275811497.55064" 
+    capture_lex $P787
+    .const 'Sub' $P777 = "53_1275811497.55064" 
+    capture_lex $P777
+    .const 'Sub' $P767 = "52_1275811497.55064" 
+    capture_lex $P767
+    .const 'Sub' $P757 = "51_1275811497.55064" 
+    capture_lex $P757
+    .const 'Sub' $P747 = "50_1275811497.55064" 
+    capture_lex $P747
+    .const 'Sub' $P737 = "49_1275811497.55064" 
+    capture_lex $P737
+    .const 'Sub' $P727 = "48_1275811497.55064" 
+    capture_lex $P727
+    .const 'Sub' $P717 = "47_1275811497.55064" 
+    capture_lex $P717
+    .const 'Sub' $P707 = "46_1275811497.55064" 
+    capture_lex $P707
+    .const 'Sub' $P697 = "45_1275811497.55064" 
+    capture_lex $P697
+    .const 'Sub' $P679 = "44_1275811497.55064" 
+    capture_lex $P679
+    .const 'Sub' $P644 = "43_1275811497.55064" 
+    capture_lex $P644
+    .const 'Sub' $P628 = "42_1275811497.55064" 
+    capture_lex $P628
+    .const 'Sub' $P607 = "41_1275811497.55064" 
+    capture_lex $P607
+    .const 'Sub' $P587 = "40_1275811497.55064" 
+    capture_lex $P587
+    .const 'Sub' $P574 = "39_1275811497.55064" 
     capture_lex $P574
-    .const 'Sub' $P561 = "38_1274022903.56472" 
-    capture_lex $P561
-    .const 'Sub' $P535 = "37_1274022903.56472" 
-    capture_lex $P535
-    .const 'Sub' $P499 = "36_1274022903.56472" 
-    capture_lex $P499
-    .const 'Sub' $P482 = "35_1274022903.56472" 
-    capture_lex $P482
-    .const 'Sub' $P468 = "34_1274022903.56472" 
-    capture_lex $P468
-    .const 'Sub' $P415 = "32_1274022903.56472" 
-    capture_lex $P415
-    .const 'Sub' $P402 = "31_1274022903.56472" 
-    capture_lex $P402
-    .const 'Sub' $P382 = "30_1274022903.56472" 
-    capture_lex $P382
-    .const 'Sub' $P372 = "29_1274022903.56472" 
-    capture_lex $P372
-    .const 'Sub' $P362 = "28_1274022903.56472" 
-    capture_lex $P362
-    .const 'Sub' $P346 = "27_1274022903.56472" 
-    capture_lex $P346
-    .const 'Sub' $P286 = "25_1274022903.56472" 
-    capture_lex $P286
-    .const 'Sub' $P243 = "23_1274022903.56472" 
-    capture_lex $P243
-    .const 'Sub' $P214 = "22_1274022903.56472" 
-    capture_lex $P214
-    .const 'Sub' $P181 = "21_1274022903.56472" 
-    capture_lex $P181
-    .const 'Sub' $P171 = "20_1274022903.56472" 
-    capture_lex $P171
-    .const 'Sub' $P151 = "19_1274022903.56472" 
+    .const 'Sub' $P548 = "38_1275811497.55064" 
+    capture_lex $P548
+    .const 'Sub' $P512 = "37_1275811497.55064" 
+    capture_lex $P512
+    .const 'Sub' $P495 = "36_1275811497.55064" 
+    capture_lex $P495
+    .const 'Sub' $P481 = "35_1275811497.55064" 
+    capture_lex $P481
+    .const 'Sub' $P428 = "33_1275811497.55064" 
+    capture_lex $P428
+    .const 'Sub' $P417 = "32_1275811497.55064" 
+    capture_lex $P417
+    .const 'Sub' $P404 = "31_1275811497.55064" 
+    capture_lex $P404
+    .const 'Sub' $P384 = "30_1275811497.55064" 
+    capture_lex $P384
+    .const 'Sub' $P374 = "29_1275811497.55064" 
+    capture_lex $P374
+    .const 'Sub' $P364 = "28_1275811497.55064" 
+    capture_lex $P364
+    .const 'Sub' $P348 = "27_1275811497.55064" 
+    capture_lex $P348
+    .const 'Sub' $P288 = "25_1275811497.55064" 
+    capture_lex $P288
+    .const 'Sub' $P245 = "23_1275811497.55064" 
+    capture_lex $P245
+    .const 'Sub' $P213 = "22_1275811497.55064" 
+    capture_lex $P213
+    .const 'Sub' $P180 = "21_1275811497.55064" 
+    capture_lex $P180
+    .const 'Sub' $P170 = "20_1275811497.55064" 
+    capture_lex $P170
+    .const 'Sub' $P151 = "19_1275811497.55064" 
     capture_lex $P151
-    .const 'Sub' $P100 = "18_1274022903.56472" 
+    .const 'Sub' $P100 = "18_1275811497.55064" 
     capture_lex $P100
-    .const 'Sub' $P84 = "17_1274022903.56472" 
+    .const 'Sub' $P84 = "17_1275811497.55064" 
     capture_lex $P84
-    .const 'Sub' $P63 = "16_1274022903.56472" 
+    .const 'Sub' $P63 = "16_1275811497.55064" 
     capture_lex $P63
-    .const 'Sub' $P27 = "13_1274022903.56472" 
+    .const 'Sub' $P27 = "13_1275811497.55064" 
     capture_lex $P27
-    .const 'Sub' $P16 = "12_1274022903.56472" 
+    .const 'Sub' $P16 = "12_1275811497.55064" 
     capture_lex $P16
     get_global $P15, "@BLOCK"
-    unless_null $P15, vivify_137
+    unless_null $P15, vivify_147
     $P15 = root_new ['parrot';'ResizablePMCArray']
     set_global "@BLOCK", $P15
-  vivify_137:
+  vivify_147:
 .annotate 'line', 9
-    .const 'Sub' $P16 = "12_1274022903.56472" 
+    .const 'Sub' $P16 = "12_1275811497.55064" 
     newclosure $P26, $P16
     .lex "xblock_immediate", $P26
 .annotate 'line', 14
-    .const 'Sub' $P27 = "13_1274022903.56472" 
+    .const 'Sub' $P27 = "13_1275811497.55064" 
     newclosure $P62, $P27
     .lex "block_immediate", $P62
 .annotate 'line', 24
-    .const 'Sub' $P63 = "16_1274022903.56472" 
+    .const 'Sub' $P63 = "16_1275811497.55064" 
     newclosure $P83, $P63
     .lex "vivitype", $P83
 .annotate 'line', 43
-    .const 'Sub' $P84 = "17_1274022903.56472" 
+    .const 'Sub' $P84 = "17_1275811497.55064" 
     newclosure $P99, $P84
     .lex "colonpair_str", $P99
-.annotate 'line', 204
-    .const 'Sub' $P100 = "18_1274022903.56472" 
+.annotate 'line', 213
+    .const 'Sub' $P100 = "18_1275811497.55064" 
     newclosure $P150, $P100
     .lex "push_block_handler", $P150
-.annotate 'line', 788
-    .const 'Sub' $P151 = "19_1274022903.56472" 
-    newclosure $P166, $P151
-    .lex "control", $P166
+.annotate 'line', 822
+    .const 'Sub' $P151 = "19_1275811497.55064" 
+    newclosure $P165, $P151
+    .lex "control", $P165
 .annotate 'line', 3
-    get_global $P167, "@BLOCK"
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
+    get_global $P166, "@BLOCK"
 .annotate 'line', 5
-    find_lex $P168, "xblock_immediate"
-    find_lex $P169, "block_immediate"
-    find_lex $P170, "vivitype"
+    find_lex $P167, "xblock_immediate"
+    find_lex $P168, "block_immediate"
+    find_lex $P169, "vivitype"
 .annotate 'line', 35
-    find_lex $P213, "colonpair_str"
-.annotate 'line', 197
-    find_lex $P614, "push_block_handler"
-.annotate 'line', 779
-    find_lex $P2156, "control"
-.annotate 'line', 810
-    get_hll_global $P2189, ["NQP";"RegexActions"], "_block2188" 
-    capture_lex $P2189
-    $P2252 = $P2189()
+    find_lex $P212, "colonpair_str"
+.annotate 'line', 206
+    find_lex $P627, "push_block_handler"
+.annotate 'line', 813
+    find_lex $P2270, "control"
+.annotate 'line', 840
+    get_hll_global $P2303, ["NQP";"RegexActions"], "_block2302" 
+    capture_lex $P2303
+    $P2414 = $P2303()
 .annotate 'line', 3
-    .return ($P2252)
-    .const 'Sub' $P2254 = "131_1274022903.56472" 
-    .return ($P2254)
+    .return ($P2414)
+    .const 'Sub' $P2416 = "141_1275811497.55064" 
+    .return ($P2416)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "" :load :init :subid("post135") :outer("11_1274022903.56472")
+.sub "" :load :init :subid("post145") :outer("11_1275811497.55064")
 .annotate 'line', 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate 'line', 5
-    .const 'Sub' $P2258 = "132_1274022903.56472" 
-    capture_lex $P2258
-    $P2258()
-    $P2261 = get_root_global ["parrot"], "P6metaclass"
-    $P2261."new_class"("NQP::RegexActions", "Regex::P6Regex::Actions" :named("parent"))
+    .const 'Sub' $P2420 = "142_1275811497.55064" 
+    capture_lex $P2420
+    $P2420()
+    $P2423 = get_root_global ["parrot"], "P6metaclass"
+    $P2423."new_class"("NQP::RegexActions", "Regex::P6Regex::Actions" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2257"  :anon :subid("132_1274022903.56472") :outer("11_1274022903.56472")
+.sub "_block2419"  :anon :subid("142_1275811497.55064") :outer("11_1275811497.55064")
 .annotate 'line', 6
-    get_global $P2259, "@BLOCK"
-    unless_null $P2259, vivify_136
-    $P2259 = root_new ['parrot';'ResizablePMCArray']
-    set_global "@BLOCK", $P2259
-  vivify_136:
- $P2260 = new ['ResizablePMCArray'] 
-    set_global "@BLOCK", $P2260
+    get_global $P2421, "@BLOCK"
+    unless_null $P2421, vivify_146
+    $P2421 = root_new ['parrot';'ResizablePMCArray']
+    set_global "@BLOCK", $P2421
+  vivify_146:
+ $P2422 = new ['ResizablePMCArray'] 
+    set_global "@BLOCK", $P2422
 .annotate 'line', 5
-    .return ($P2260)
+    .return ($P2422)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "xblock_immediate"  :subid("12_1274022903.56472") :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "xblock_immediate"  :subid("12_1275811497.55064") :outer("11_1275811497.55064")
     .param pmc param_19
 .annotate 'line', 9
     new $P18, 'ExceptionHandler'
     set_addr $P18, control_17
-    $P18."handle_types"(57)
+    $P18."handle_types"(.CONTROL_RETURN)
     push_eh $P18
     .lex "$xblock", param_19
 .annotate 'line', 10
     find_lex $P20, "$xblock"
-    unless_null $P20, vivify_138
+    unless_null $P20, vivify_148
     $P20 = root_new ['parrot';'ResizablePMCArray']
-  vivify_138:
+  vivify_148:
     set $P21, $P20[1]
-    unless_null $P21, vivify_139
+    unless_null $P21, vivify_149
     new $P21, "Undef"
-  vivify_139:
+  vivify_149:
     $P22 = "block_immediate"($P21)
     find_lex $P23, "$xblock"
-    unless_null $P23, vivify_140
+    unless_null $P23, vivify_150
     $P23 = root_new ['parrot';'ResizablePMCArray']
     store_lex "$xblock", $P23
-  vivify_140:
+  vivify_150:
     set $P23[1], $P22
     find_lex $P24, "$xblock"
 .annotate 'line', 9
@@ -16779,14 +17805,15 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "block_immediate"  :subid("13_1274022903.56472") :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "block_immediate"  :subid("13_1275811497.55064") :outer("11_1275811497.55064")
     .param pmc param_30
 .annotate 'line', 14
-    .const 'Sub' $P40 = "14_1274022903.56472" 
+    .const 'Sub' $P40 = "14_1275811497.55064" 
     capture_lex $P40
     new $P29, 'ExceptionHandler'
     set_addr $P29, control_28
-    $P29."handle_types"(57)
+    $P29."handle_types"(.CONTROL_RETURN)
     push_eh $P29
     .lex "$block", param_30
 .annotate 'line', 15
@@ -16804,7 +17831,7 @@
     set $P33, $P38
   unless_34_end:
     if $P33, unless_32_end
-    .const 'Sub' $P40 = "14_1274022903.56472" 
+    .const 'Sub' $P40 = "14_1275811497.55064" 
     capture_lex $P40
     $P40()
   unless_32_end:
@@ -16820,9 +17847,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block39"  :anon :subid("14_1274022903.56472") :outer("13_1274022903.56472")
+.include "except_types.pasm"
+.sub "_block39"  :anon :subid("14_1275811497.55064") :outer("13_1275811497.55064")
 .annotate 'line', 16
-    .const 'Sub' $P51 = "15_1274022903.56472" 
+    .const 'Sub' $P51 = "15_1275811497.55064" 
     capture_lex $P51
 .annotate 'line', 17
     new $P41, "Undef"
@@ -16835,17 +17863,17 @@
     find_lex $P46, "$block"
     $P47 = $P46."list"()
     defined $I48, $P47
-    unless $I48, for_undef_141
+    unless $I48, for_undef_151
     iter $P45, $P47
     new $P57, 'ExceptionHandler'
     set_addr $P57, loop56_handler
-    $P57."handle_types"(64, 66, 65)
+    $P57."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P57
   loop56_test:
     unless $P45, loop56_done
     shift $P49, $P45
   loop56_redo:
-    .const 'Sub' $P51 = "15_1274022903.56472" 
+    .const 'Sub' $P51 = "15_1275811497.55064" 
     capture_lex $P51
     $P51($P49)
   loop56_next:
@@ -16854,11 +17882,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P58, exception, 'type'
-    eq $P58, 64, loop56_next
-    eq $P58, 66, loop56_redo
+    eq $P58, .CONTROL_LOOP_NEXT, loop56_next
+    eq $P58, .CONTROL_LOOP_REDO, loop56_redo
   loop56_done:
     pop_eh 
-  for_undef_141:
+  for_undef_151:
 .annotate 'line', 19
     find_lex $P59, "$stmts"
     store_lex "$block", $P59
@@ -16868,7 +17896,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block50"  :anon :subid("15_1274022903.56472") :outer("14_1274022903.56472")
+.sub "_block50"  :anon :subid("15_1275811497.55064") :outer("14_1275811497.55064")
     .param pmc param_52
 .annotate 'line', 18
     .lex "$_", param_52
@@ -16880,12 +17908,13 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "vivitype"  :subid("16_1274022903.56472") :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "vivitype"  :subid("16_1275811497.55064") :outer("11_1275811497.55064")
     .param pmc param_66
 .annotate 'line', 24
     new $P65, 'ExceptionHandler'
     set_addr $P65, control_64
-    $P65."handle_types"(57)
+    $P65."handle_types"(.CONTROL_RETURN)
     push_eh $P65
     .lex "$sigil", param_66
 .annotate 'line', 25
@@ -16928,12 +17957,13 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "colonpair_str"  :subid("17_1274022903.56472") :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "colonpair_str"  :subid("17_1275811497.55064") :outer("11_1275811497.55064")
     .param pmc param_87
 .annotate 'line', 43
     new $P86, 'ExceptionHandler'
     set_addr $P86, control_85
-    $P86."handle_types"(57)
+    $P86."handle_types"(.CONTROL_RETURN)
     push_eh $P86
     .lex "$ast", param_87
 .annotate 'line', 44
@@ -16966,113 +17996,114 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "push_block_handler"  :subid("18_1274022903.56472") :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "push_block_handler"  :subid("18_1275811497.55064") :outer("11_1275811497.55064")
     .param pmc param_103
     .param pmc param_104
-.annotate 'line', 204
+.annotate 'line', 213
     new $P102, 'ExceptionHandler'
     set_addr $P102, control_101
-    $P102."handle_types"(57)
+    $P102."handle_types"(.CONTROL_RETURN)
     push_eh $P102
     .lex "$/", param_103
     .lex "$block", param_104
-.annotate 'line', 205
+.annotate 'line', 214
     get_global $P106, "@BLOCK"
-    unless_null $P106, vivify_142
+    unless_null $P106, vivify_152
     $P106 = root_new ['parrot';'ResizablePMCArray']
-  vivify_142:
+  vivify_152:
     set $P107, $P106[0]
-    unless_null $P107, vivify_143
+    unless_null $P107, vivify_153
     new $P107, "Undef"
-  vivify_143:
+  vivify_153:
     $P108 = $P107."handlers"()
     if $P108, unless_105_end
-.annotate 'line', 206
+.annotate 'line', 215
     get_global $P109, "@BLOCK"
-    unless_null $P109, vivify_144
+    unless_null $P109, vivify_154
     $P109 = root_new ['parrot';'ResizablePMCArray']
-  vivify_144:
+  vivify_154:
     set $P110, $P109[0]
-    unless_null $P110, vivify_145
+    unless_null $P110, vivify_155
     new $P110, "Undef"
-  vivify_145:
+  vivify_155:
     new $P111, "ResizablePMCArray"
     $P110."handlers"($P111)
   unless_105_end:
-.annotate 'line', 208
+.annotate 'line', 217
     find_lex $P113, "$block"
     $P114 = $P113."arity"()
     if $P114, unless_112_end
-.annotate 'line', 209
+.annotate 'line', 218
     find_lex $P115, "$block"
-.annotate 'line', 210
+.annotate 'line', 219
     get_hll_global $P116, ["PAST"], "Op"
-.annotate 'line', 211
+.annotate 'line', 220
     get_hll_global $P117, ["PAST"], "Var"
     $P118 = $P117."new"("lexical" :named("scope"), "$!" :named("name"), 1 :named("isdecl"))
-.annotate 'line', 212
+.annotate 'line', 221
     get_hll_global $P119, ["PAST"], "Var"
     $P120 = $P119."new"("lexical" :named("scope"), "$_" :named("name"))
     $P121 = $P116."new"($P118, $P120, "bind" :named("pasttype"))
-.annotate 'line', 210
+.annotate 'line', 219
     $P115."unshift"($P121)
-.annotate 'line', 215
+.annotate 'line', 224
     find_lex $P122, "$block"
     get_hll_global $P123, ["PAST"], "Var"
     $P124 = $P123."new"("$_" :named("name"), "parameter" :named("scope"))
     $P122."unshift"($P124)
-.annotate 'line', 216
+.annotate 'line', 225
     find_lex $P125, "$block"
     $P125."symbol"("$_", "lexical" :named("scope"))
-.annotate 'line', 217
+.annotate 'line', 226
     find_lex $P126, "$block"
     $P126."symbol"("$!", "lexical" :named("scope"))
-.annotate 'line', 218
+.annotate 'line', 227
     find_lex $P127, "$block"
     $P127."arity"(1)
   unless_112_end:
-.annotate 'line', 220
+.annotate 'line', 229
     find_lex $P128, "$block"
     $P128."blocktype"("declaration")
-.annotate 'line', 221
+.annotate 'line', 230
     get_global $P129, "@BLOCK"
-    unless_null $P129, vivify_146
+    unless_null $P129, vivify_156
     $P129 = root_new ['parrot';'ResizablePMCArray']
-  vivify_146:
+  vivify_156:
     set $P130, $P129[0]
-    unless_null $P130, vivify_147
+    unless_null $P130, vivify_157
     new $P130, "Undef"
-  vivify_147:
+  vivify_157:
     $P131 = $P130."handlers"()
-.annotate 'line', 222
+.annotate 'line', 231
     get_hll_global $P132, ["PAST"], "Control"
     find_lex $P133, "$/"
-.annotate 'line', 224
+.annotate 'line', 233
     get_hll_global $P134, ["PAST"], "Stmts"
-.annotate 'line', 225
+.annotate 'line', 234
     get_hll_global $P135, ["PAST"], "Op"
     find_lex $P136, "$block"
-.annotate 'line', 227
+.annotate 'line', 236
     get_hll_global $P137, ["PAST"], "Var"
     $P138 = $P137."new"("register" :named("scope"), "exception" :named("name"))
     $P139 = $P135."new"($P136, $P138, "call" :named("pasttype"))
-.annotate 'line', 229
+.annotate 'line', 238
     get_hll_global $P140, ["PAST"], "Op"
-.annotate 'line', 230
+.annotate 'line', 239
     get_hll_global $P141, ["PAST"], "Var"
-.annotate 'line', 231
+.annotate 'line', 240
     get_hll_global $P142, ["PAST"], "Var"
     $P143 = $P142."new"("register" :named("scope"), "exception" :named("name"))
     $P144 = $P141."new"($P143, "handled", "keyed" :named("scope"))
-.annotate 'line', 230
+.annotate 'line', 239
     $P145 = $P140."new"($P144, 1, "bind" :named("pasttype"))
-.annotate 'line', 229
+.annotate 'line', 238
     $P146 = $P134."new"($P139, $P145)
-.annotate 'line', 224
+.annotate 'line', 233
     $P147 = $P132."new"($P146, $P133 :named("node"))
-.annotate 'line', 222
+.annotate 'line', 231
     $P148 = $P131."unshift"($P147)
-.annotate 'line', 204
+.annotate 'line', 213
     .return ($P148)
   control_101:
     .local pmc exception 
@@ -17083,1212 +18114,1232 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "control"  :subid("19_1274022903.56472") :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "control"  :subid("19_1275811497.55064") :outer("11_1275811497.55064")
     .param pmc param_154
     .param pmc param_155
-.annotate 'line', 788
+.annotate 'line', 822
     new $P153, 'ExceptionHandler'
     set_addr $P153, control_152
-    $P153."handle_types"(57)
+    $P153."handle_types"(.CONTROL_RETURN)
     push_eh $P153
     .lex "$/", param_154
-    .lex "$id", param_155
-.annotate 'line', 789
+    .lex "$type", param_155
+.annotate 'line', 823
     find_lex $P156, "$/"
     get_hll_global $P157, ["PAST"], "Op"
     find_lex $P158, "$/"
-.annotate 'line', 795
-    new $P159, "String"
-    assign $P159, "    %r[\"type\"] = "
-    find_lex $P160, "$id"
-    concat $P161, $P159, $P160
-    new $P162, "ResizablePMCArray"
-    push $P162, ".include \"except_types.pasm\""
-    push $P162, "    %r = new \"Exception\""
-    push $P162, $P161
-    push $P162, "    throw %r"
-    $P163 = $P157."new"($P158 :named("node"), "inline" :named("pasttype"), $P162 :named("inline"))
-.annotate 'line', 789
-    $P164 = $P156."!make"($P163)
-.annotate 'line', 788
-    .return ($P164)
+.annotate 'line', 827
+    get_hll_global $P159, ["PAST"], "Val"
+    find_lex $P160, "$type"
+    $P161 = $P159."new"($P160 :named("value"), "!except_types" :named("returns"))
+    $P162 = $P157."new"(0, $P161, $P158 :named("node"), "die__vii" :named("pirop"))
+.annotate 'line', 823
+    $P163 = $P156."!make"($P162)
+.annotate 'line', 822
+    .return ($P163)
   control_152:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P165, exception, "payload"
-    .return ($P165)
+    getattribute $P164, exception, "payload"
+    .return ($P164)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "TOP"  :subid("20_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_174
+.include "except_types.pasm"
+.sub "TOP"  :subid("20_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_173
 .annotate 'line', 33
-    new $P173, 'ExceptionHandler'
-    set_addr $P173, control_172
-    $P173."handle_types"(57)
-    push_eh $P173
+    new $P172, 'ExceptionHandler'
+    set_addr $P172, control_171
+    $P172."handle_types"(.CONTROL_RETURN)
+    push_eh $P172
     .lex "self", self
-    .lex "$/", param_174
+    .lex "$/", param_173
+    find_lex $P174, "$/"
     find_lex $P175, "$/"
-    find_lex $P176, "$/"
-    unless_null $P176, vivify_148
-    $P176 = root_new ['parrot';'Hash']
-  vivify_148:
-    set $P177, $P176["comp_unit"]
-    unless_null $P177, vivify_149
-    new $P177, "Undef"
-  vivify_149:
-    $P178 = $P177."ast"()
-    $P179 = $P175."!make"($P178)
-    .return ($P179)
-  control_172:
+    unless_null $P175, vivify_158
+    $P175 = root_new ['parrot';'Hash']
+  vivify_158:
+    set $P176, $P175["comp_unit"]
+    unless_null $P176, vivify_159
+    new $P176, "Undef"
+  vivify_159:
+    $P177 = $P176."ast"()
+    $P178 = $P174."!make"($P177)
+    .return ($P178)
+  control_171:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P180, exception, "payload"
-    .return ($P180)
+    getattribute $P179, exception, "payload"
+    .return ($P179)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "deflongname"  :subid("21_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_184
+.include "except_types.pasm"
+.sub "deflongname"  :subid("21_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_183
 .annotate 'line', 35
-    new $P183, 'ExceptionHandler'
-    set_addr $P183, control_182
-    $P183."handle_types"(57)
-    push_eh $P183
+    new $P182, 'ExceptionHandler'
+    set_addr $P182, control_181
+    $P182."handle_types"(.CONTROL_RETURN)
+    push_eh $P182
     .lex "self", self
-    .lex "$/", param_184
+    .lex "$/", param_183
 .annotate 'line', 36
-    find_lex $P185, "$/"
+    find_lex $P184, "$/"
 .annotate 'line', 37
-    find_lex $P188, "$/"
-    unless_null $P188, vivify_150
-    $P188 = root_new ['parrot';'Hash']
-  vivify_150:
-    set $P189, $P188["colonpair"]
-    unless_null $P189, vivify_151
-    new $P189, "Undef"
-  vivify_151:
-    if $P189, if_187
+    find_lex $P187, "$/"
+    unless_null $P187, vivify_160
+    $P187 = root_new ['parrot';'Hash']
+  vivify_160:
+    set $P188, $P187["colonpair"]
+    unless_null $P188, vivify_161
+    new $P188, "Undef"
+  vivify_161:
+    if $P188, if_186
 .annotate 'line', 39
-    find_lex $P209, "$/"
-    set $S210, $P209
-    new $P186, 'String'
-    set $P186, $S210
+    find_lex $P208, "$/"
+    set $S209, $P208
+    new $P185, 'String'
+    set $P185, $S209
 .annotate 'line', 37
-    goto if_187_end
-  if_187:
-    find_lex $P190, "$/"
-    unless_null $P190, vivify_152
-    $P190 = root_new ['parrot';'Hash']
-  vivify_152:
-    set $P191, $P190["identifier"]
-    unless_null $P191, vivify_153
-    new $P191, "Undef"
-  vivify_153:
-    set $S192, $P191
-    new $P193, 'String'
-    set $P193, $S192
-    concat $P194, $P193, ":"
-    find_lex $P195, "$/"
-    unless_null $P195, vivify_154
-    $P195 = root_new ['parrot';'Hash']
-  vivify_154:
-    set $P196, $P195["colonpair"]
-    unless_null $P196, vivify_155
-    $P196 = root_new ['parrot';'ResizablePMCArray']
-  vivify_155:
-    set $P197, $P196[0]
-    unless_null $P197, vivify_156
-    new $P197, "Undef"
-  vivify_156:
-    $P198 = $P197."ast"()
-    $S199 = $P198."named"()
-    concat $P200, $P194, $S199
-    concat $P201, $P200, "<"
+    goto if_186_end
+  if_186:
+    find_lex $P189, "$/"
+    unless_null $P189, vivify_162
+    $P189 = root_new ['parrot';'Hash']
+  vivify_162:
+    set $P190, $P189["identifier"]
+    unless_null $P190, vivify_163
+    new $P190, "Undef"
+  vivify_163:
+    set $S191, $P190
+    new $P192, 'String'
+    set $P192, $S191
+    concat $P193, $P192, ":"
+    find_lex $P194, "$/"
+    unless_null $P194, vivify_164
+    $P194 = root_new ['parrot';'Hash']
+  vivify_164:
+    set $P195, $P194["colonpair"]
+    unless_null $P195, vivify_165
+    $P195 = root_new ['parrot';'ResizablePMCArray']
+  vivify_165:
+    set $P196, $P195[0]
+    unless_null $P196, vivify_166
+    new $P196, "Undef"
+  vivify_166:
+    $P197 = $P196."ast"()
+    $S198 = $P197."named"()
+    concat $P199, $P193, $S198
+    concat $P200, $P199, "<"
 .annotate 'line', 38
-    find_lex $P202, "$/"
-    unless_null $P202, vivify_157
-    $P202 = root_new ['parrot';'Hash']
-  vivify_157:
-    set $P203, $P202["colonpair"]
-    unless_null $P203, vivify_158
-    $P203 = root_new ['parrot';'ResizablePMCArray']
-  vivify_158:
-    set $P204, $P203[0]
-    unless_null $P204, vivify_159
-    new $P204, "Undef"
-  vivify_159:
-    $P205 = $P204."ast"()
-    $S206 = "colonpair_str"($P205)
-    concat $P207, $P201, $S206
-    concat $P208, $P207, ">"
-    set $P186, $P208
-  if_187_end:
+    find_lex $P201, "$/"
+    unless_null $P201, vivify_167
+    $P201 = root_new ['parrot';'Hash']
+  vivify_167:
+    set $P202, $P201["colonpair"]
+    unless_null $P202, vivify_168
+    $P202 = root_new ['parrot';'ResizablePMCArray']
+  vivify_168:
+    set $P203, $P202[0]
+    unless_null $P203, vivify_169
+    new $P203, "Undef"
+  vivify_169:
+    $P204 = $P203."ast"()
+    $S205 = "colonpair_str"($P204)
+    concat $P206, $P200, $S205
+    concat $P207, $P206, ">"
+    set $P185, $P207
+  if_186_end:
 .annotate 'line', 37
-    $P211 = $P185."!make"($P186)
+    $P210 = $P184."!make"($P185)
 .annotate 'line', 35
-    .return ($P211)
-  control_182:
+    .return ($P210)
+  control_181:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P212, exception, "payload"
-    .return ($P212)
+    getattribute $P211, exception, "payload"
+    .return ($P211)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "comp_unit"  :subid("22_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_217
+.include "except_types.pasm"
+.sub "comp_unit"  :subid("22_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_216
 .annotate 'line', 49
-    new $P216, 'ExceptionHandler'
-    set_addr $P216, control_215
-    $P216."handle_types"(57)
-    push_eh $P216
+    new $P215, 'ExceptionHandler'
+    set_addr $P215, control_214
+    $P215."handle_types"(.CONTROL_RETURN)
+    push_eh $P215
     .lex "self", self
-    .lex "$/", param_217
+    .lex "$/", param_216
 .annotate 'line', 50
-    new $P218, "Undef"
-    .lex "$mainline", $P218
+    new $P217, "Undef"
+    .lex "$mainline", $P217
 .annotate 'line', 51
-    new $P219, "Undef"
-    .lex "$unit", $P219
+    new $P218, "Undef"
+    .lex "$unit", $P218
 .annotate 'line', 50
-    find_lex $P220, "$/"
-    unless_null $P220, vivify_160
-    $P220 = root_new ['parrot';'Hash']
-  vivify_160:
-    set $P221, $P220["statementlist"]
-    unless_null $P221, vivify_161
-    new $P221, "Undef"
-  vivify_161:
-    $P222 = $P221."ast"()
-    store_lex "$mainline", $P222
+    find_lex $P219, "$/"
+    unless_null $P219, vivify_170
+    $P219 = root_new ['parrot';'Hash']
+  vivify_170:
+    set $P220, $P219["statementlist"]
+    unless_null $P220, vivify_171
+    new $P220, "Undef"
+  vivify_171:
+    $P221 = $P220."ast"()
+    store_lex "$mainline", $P221
 .annotate 'line', 51
-    get_global $P223, "@BLOCK"
-    $P224 = $P223."shift"()
-    store_lex "$unit", $P224
-.annotate 'line', 56
-    find_lex $P225, "$unit"
-.annotate 'line', 57
-    get_hll_global $P226, ["PAST"], "Op"
-    find_lex $P227, "$mainline"
-    $P228 = $P226."new"($P227, "return" :named("pirop"))
-    $P225."push"($P228)
-.annotate 'line', 62
-    find_lex $P229, "$unit"
-.annotate 'line', 63
-    get_hll_global $P230, ["PAST"], "Block"
-.annotate 'line', 65
-    get_hll_global $P231, ["PAST"], "Op"
-    get_hll_global $P232, ["PAST"], "Val"
-    find_lex $P233, "$unit"
-    $P234 = $P232."new"($P233 :named("value"))
-    $P235 = $P231."new"($P234, "call" :named("pasttype"))
-    $P236 = $P230."new"($P235, ":load" :named("pirflags"), 0 :named("lexical"), "" :named("namespace"))
-.annotate 'line', 63
-    $P229."push"($P236)
-.annotate 'line', 68
-    find_lex $P237, "$unit"
-    find_lex $P238, "$/"
-    $P237."node"($P238)
+    get_global $P222, "@BLOCK"
+    $P223 = $P222."shift"()
+    store_lex "$unit", $P223
+.annotate 'line', 55
+    find_lex $P224, "$unit"
+    find_lex $P225, "self"
+    $P226 = $P225."CTXSAVE"()
+    $P224."push"($P226)
+.annotate 'line', 60
+    find_lex $P227, "$unit"
+.annotate 'line', 61
+    get_hll_global $P228, ["PAST"], "Op"
+    find_lex $P229, "$mainline"
+    $P230 = $P228."new"($P229, "return" :named("pirop"))
+    $P227."push"($P230)
+.annotate 'line', 66
+    find_lex $P231, "$unit"
+.annotate 'line', 67
+    get_hll_global $P232, ["PAST"], "Block"
 .annotate 'line', 69
-    find_lex $P239, "$/"
-    find_lex $P240, "$unit"
-    $P241 = $P239."!make"($P240)
+    get_hll_global $P233, ["PAST"], "Op"
+    get_hll_global $P234, ["PAST"], "Val"
+    find_lex $P235, "$unit"
+    $P236 = $P234."new"($P235 :named("value"))
+    $P237 = $P233."new"($P236, "call" :named("pasttype"))
+    $P238 = $P232."new"($P237, ":load" :named("pirflags"), 0 :named("lexical"), "" :named("namespace"))
+.annotate 'line', 67
+    $P231."push"($P238)
+.annotate 'line', 72
+    find_lex $P239, "$unit"
+    find_lex $P240, "$/"
+    $P239."node"($P240)
+.annotate 'line', 73
+    find_lex $P241, "$/"
+    find_lex $P242, "$unit"
+    $P243 = $P241."!make"($P242)
 .annotate 'line', 49
-    .return ($P241)
-  control_215:
+    .return ($P243)
+  control_214:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P242, exception, "payload"
-    .return ($P242)
+    getattribute $P244, exception, "payload"
+    .return ($P244)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statementlist"  :subid("23_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_246
-.annotate 'line', 72
-    .const 'Sub' $P260 = "24_1274022903.56472" 
-    capture_lex $P260
-    new $P245, 'ExceptionHandler'
-    set_addr $P245, control_244
-    $P245."handle_types"(57)
-    push_eh $P245
+.include "except_types.pasm"
+.sub "statementlist"  :subid("23_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_248
+.annotate 'line', 76
+    .const 'Sub' $P262 = "24_1275811497.55064" 
+    capture_lex $P262
+    new $P247, 'ExceptionHandler'
+    set_addr $P247, control_246
+    $P247."handle_types"(.CONTROL_RETURN)
+    push_eh $P247
     .lex "self", self
-    .lex "$/", param_246
-.annotate 'line', 73
-    new $P247, "Undef"
-    .lex "$past", $P247
-    get_hll_global $P248, ["PAST"], "Stmts"
-    find_lex $P249, "$/"
-    $P250 = $P248."new"($P249 :named("node"))
-    store_lex "$past", $P250
-.annotate 'line', 74
-    find_lex $P252, "$/"
-    unless_null $P252, vivify_162
-    $P252 = root_new ['parrot';'Hash']
-  vivify_162:
-    set $P253, $P252["statement"]
-    unless_null $P253, vivify_163
-    new $P253, "Undef"
-  vivify_163:
-    unless $P253, if_251_end
-.annotate 'line', 75
-    find_lex $P255, "$/"
-    unless_null $P255, vivify_164
-    $P255 = root_new ['parrot';'Hash']
-  vivify_164:
-    set $P256, $P255["statement"]
-    unless_null $P256, vivify_165
-    new $P256, "Undef"
-  vivify_165:
-    defined $I257, $P256
-    unless $I257, for_undef_166
-    iter $P254, $P256
-    new $P280, 'ExceptionHandler'
-    set_addr $P280, loop279_handler
-    $P280."handle_types"(64, 66, 65)
-    push_eh $P280
-  loop279_test:
-    unless $P254, loop279_done
-    shift $P258, $P254
-  loop279_redo:
-    .const 'Sub' $P260 = "24_1274022903.56472" 
-    capture_lex $P260
-    $P260($P258)
-  loop279_next:
-    goto loop279_test
-  loop279_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P281, exception, 'type'
-    eq $P281, 64, loop279_next
-    eq $P281, 66, loop279_redo
-  loop279_done:
+    .lex "$/", param_248
+.annotate 'line', 77
+    new $P249, "Undef"
+    .lex "$past", $P249
+    get_hll_global $P250, ["PAST"], "Stmts"
+    find_lex $P251, "$/"
+    $P252 = $P250."new"($P251 :named("node"))
+    store_lex "$past", $P252
+.annotate 'line', 78
+    find_lex $P254, "$/"
+    unless_null $P254, vivify_172
+    $P254 = root_new ['parrot';'Hash']
+  vivify_172:
+    set $P255, $P254["statement"]
+    unless_null $P255, vivify_173
+    new $P255, "Undef"
+  vivify_173:
+    unless $P255, if_253_end
+.annotate 'line', 79
+    find_lex $P257, "$/"
+    unless_null $P257, vivify_174
+    $P257 = root_new ['parrot';'Hash']
+  vivify_174:
+    set $P258, $P257["statement"]
+    unless_null $P258, vivify_175
+    new $P258, "Undef"
+  vivify_175:
+    defined $I259, $P258
+    unless $I259, for_undef_176
+    iter $P256, $P258
+    new $P282, 'ExceptionHandler'
+    set_addr $P282, loop281_handler
+    $P282."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P282
+  loop281_test:
+    unless $P256, loop281_done
+    shift $P260, $P256
+  loop281_redo:
+    .const 'Sub' $P262 = "24_1275811497.55064" 
+    capture_lex $P262
+    $P262($P260)
+  loop281_next:
+    goto loop281_test
+  loop281_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P283, exception, 'type'
+    eq $P283, .CONTROL_LOOP_NEXT, loop281_next
+    eq $P283, .CONTROL_LOOP_REDO, loop281_redo
+  loop281_done:
     pop_eh 
-  for_undef_166:
-  if_251_end:
-.annotate 'line', 82
-    find_lex $P282, "$/"
-    find_lex $P283, "$past"
-    $P284 = $P282."!make"($P283)
-.annotate 'line', 72
-    .return ($P284)
-  control_244:
+  for_undef_176:
+  if_253_end:
+.annotate 'line', 86
+    find_lex $P284, "$/"
+    find_lex $P285, "$past"
+    $P286 = $P284."!make"($P285)
+.annotate 'line', 76
+    .return ($P286)
+  control_246:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P285, exception, "payload"
-    .return ($P285)
+    getattribute $P287, exception, "payload"
+    .return ($P287)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block259"  :anon :subid("24_1274022903.56472") :outer("23_1274022903.56472")
-    .param pmc param_262
-.annotate 'line', 76
-    new $P261, "Undef"
-    .lex "$ast", $P261
-    .lex "$_", param_262
-    find_lex $P263, "$_"
-    $P264 = $P263."ast"()
-    store_lex "$ast", $P264
-.annotate 'line', 77
-    find_lex $P266, "$ast"
-    unless_null $P266, vivify_167
-    $P266 = root_new ['parrot';'Hash']
-  vivify_167:
-    set $P267, $P266["sink"]
-    unless_null $P267, vivify_168
-    new $P267, "Undef"
-  vivify_168:
-    defined $I268, $P267
-    unless $I268, if_265_end
-    find_lex $P269, "$ast"
-    unless_null $P269, vivify_169
-    $P269 = root_new ['parrot';'Hash']
-  vivify_169:
-    set $P270, $P269["sink"]
-    unless_null $P270, vivify_170
-    new $P270, "Undef"
-  vivify_170:
-    store_lex "$ast", $P270
-  if_265_end:
-.annotate 'line', 78
-    find_lex $P272, "$ast"
-    unless_null $P272, vivify_171
-    $P272 = root_new ['parrot';'Hash']
-  vivify_171:
-    set $P273, $P272["bareblock"]
-    unless_null $P273, vivify_172
-    new $P273, "Undef"
-  vivify_172:
-    unless $P273, if_271_end
+.sub "_block261"  :anon :subid("24_1275811497.55064") :outer("23_1275811497.55064")
+    .param pmc param_264
+.annotate 'line', 80
+    new $P263, "Undef"
+    .lex "$ast", $P263
+    .lex "$_", param_264
+    find_lex $P265, "$_"
+    $P266 = $P265."ast"()
+    store_lex "$ast", $P266
+.annotate 'line', 81
+    find_lex $P268, "$ast"
+    unless_null $P268, vivify_177
+    $P268 = root_new ['parrot';'Hash']
+  vivify_177:
+    set $P269, $P268["sink"]
+    unless_null $P269, vivify_178
+    new $P269, "Undef"
+  vivify_178:
+    defined $I270, $P269
+    unless $I270, if_267_end
+    find_lex $P271, "$ast"
+    unless_null $P271, vivify_179
+    $P271 = root_new ['parrot';'Hash']
+  vivify_179:
+    set $P272, $P271["sink"]
+    unless_null $P272, vivify_180
+    new $P272, "Undef"
+  vivify_180:
+    store_lex "$ast", $P272
+  if_267_end:
+.annotate 'line', 82
     find_lex $P274, "$ast"
-    $P275 = "block_immediate"($P274)
-    store_lex "$ast", $P275
-  if_271_end:
+    unless_null $P274, vivify_181
+    $P274 = root_new ['parrot';'Hash']
+  vivify_181:
+    set $P275, $P274["bareblock"]
+    unless_null $P275, vivify_182
+    new $P275, "Undef"
+  vivify_182:
+    unless $P275, if_273_end
+    find_lex $P276, "$ast"
+    $P277 = "block_immediate"($P276)
+    store_lex "$ast", $P277
+  if_273_end:
+.annotate 'line', 83
+    find_lex $P278, "$past"
+    find_lex $P279, "$ast"
+    $P280 = $P278."push"($P279)
 .annotate 'line', 79
-    find_lex $P276, "$past"
-    find_lex $P277, "$ast"
-    $P278 = $P276."push"($P277)
-.annotate 'line', 75
-    .return ($P278)
+    .return ($P280)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement"  :subid("25_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_289
-    .param pmc param_290 :optional
-    .param int has_param_290 :opt_flag
-.annotate 'line', 85
-    .const 'Sub' $P298 = "26_1274022903.56472" 
-    capture_lex $P298
-    new $P288, 'ExceptionHandler'
-    set_addr $P288, control_287
-    $P288."handle_types"(57)
-    push_eh $P288
-    .lex "self", self
-    .lex "$/", param_289
-    if has_param_290, optparam_173
-    new $P291, "Undef"
-    set param_290, $P291
-  optparam_173:
-    .lex "$key", param_290
-.annotate 'line', 86
-    new $P292, "Undef"
-    .lex "$past", $P292
-.annotate 'line', 85
-    find_lex $P293, "$past"
-.annotate 'line', 87
-    find_lex $P295, "$/"
-    unless_null $P295, vivify_174
-    $P295 = root_new ['parrot';'Hash']
-  vivify_174:
-    set $P296, $P295["EXPR"]
-    unless_null $P296, vivify_175
-    new $P296, "Undef"
-  vivify_175:
-    if $P296, if_294
-.annotate 'line', 98
-    find_lex $P336, "$/"
-    unless_null $P336, vivify_176
-    $P336 = root_new ['parrot';'Hash']
-  vivify_176:
-    set $P337, $P336["statement_control"]
-    unless_null $P337, vivify_177
-    new $P337, "Undef"
-  vivify_177:
-    if $P337, if_335
-.annotate 'line', 99
-    new $P341, "Integer"
-    assign $P341, 0
-    store_lex "$past", $P341
-    goto if_335_end
-  if_335:
-.annotate 'line', 98
+.include "except_types.pasm"
+.sub "statement"  :subid("25_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_291
+    .param pmc param_292 :optional
+    .param int has_param_292 :opt_flag
+.annotate 'line', 89
+    .const 'Sub' $P300 = "26_1275811497.55064" 
+    capture_lex $P300
+    new $P290, 'ExceptionHandler'
+    set_addr $P290, control_289
+    $P290."handle_types"(.CONTROL_RETURN)
+    push_eh $P290
+    .lex "self", self
+    .lex "$/", param_291
+    if has_param_292, optparam_183
+    new $P293, "Undef"
+    set param_292, $P293
+  optparam_183:
+    .lex "$key", param_292
+.annotate 'line', 90
+    new $P294, "Undef"
+    .lex "$past", $P294
+.annotate 'line', 89
+    find_lex $P295, "$past"
+.annotate 'line', 91
+    find_lex $P297, "$/"
+    unless_null $P297, vivify_184
+    $P297 = root_new ['parrot';'Hash']
+  vivify_184:
+    set $P298, $P297["EXPR"]
+    unless_null $P298, vivify_185
+    new $P298, "Undef"
+  vivify_185:
+    if $P298, if_296
+.annotate 'line', 102
     find_lex $P338, "$/"
-    unless_null $P338, vivify_178
+    unless_null $P338, vivify_186
     $P338 = root_new ['parrot';'Hash']
-  vivify_178:
+  vivify_186:
     set $P339, $P338["statement_control"]
-    unless_null $P339, vivify_179
+    unless_null $P339, vivify_187
     new $P339, "Undef"
-  vivify_179:
-    $P340 = $P339."ast"()
-    store_lex "$past", $P340
-  if_335_end:
-    goto if_294_end
-  if_294:
-.annotate 'line', 87
-    .const 'Sub' $P298 = "26_1274022903.56472" 
-    capture_lex $P298
-    $P298()
-  if_294_end:
-.annotate 'line', 100
-    find_lex $P342, "$/"
-    find_lex $P343, "$past"
-    $P344 = $P342."!make"($P343)
-.annotate 'line', 85
-    .return ($P344)
-  control_287:
+  vivify_187:
+    if $P339, if_337
+.annotate 'line', 103
+    new $P343, "Integer"
+    assign $P343, 0
+    store_lex "$past", $P343
+    goto if_337_end
+  if_337:
+.annotate 'line', 102
+    find_lex $P340, "$/"
+    unless_null $P340, vivify_188
+    $P340 = root_new ['parrot';'Hash']
+  vivify_188:
+    set $P341, $P340["statement_control"]
+    unless_null $P341, vivify_189
+    new $P341, "Undef"
+  vivify_189:
+    $P342 = $P341."ast"()
+    store_lex "$past", $P342
+  if_337_end:
+    goto if_296_end
+  if_296:
+.annotate 'line', 91
+    .const 'Sub' $P300 = "26_1275811497.55064" 
+    capture_lex $P300
+    $P300()
+  if_296_end:
+.annotate 'line', 104
+    find_lex $P344, "$/"
+    find_lex $P345, "$past"
+    $P346 = $P344."!make"($P345)
+.annotate 'line', 89
+    .return ($P346)
+  control_289:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P345, exception, "payload"
-    .return ($P345)
+    getattribute $P347, exception, "payload"
+    .return ($P347)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block297"  :anon :subid("26_1274022903.56472") :outer("25_1274022903.56472")
-.annotate 'line', 88
-    new $P299, "Undef"
-    .lex "$mc", $P299
-.annotate 'line', 89
-    new $P300, "Undef"
-    .lex "$ml", $P300
-.annotate 'line', 88
-    find_lex $P301, "$/"
-    unless_null $P301, vivify_180
-    $P301 = root_new ['parrot';'Hash']
-  vivify_180:
-    set $P302, $P301["statement_mod_cond"]
-    unless_null $P302, vivify_181
-    $P302 = root_new ['parrot';'ResizablePMCArray']
-  vivify_181:
-    set $P303, $P302[0]
-    unless_null $P303, vivify_182
-    new $P303, "Undef"
-  vivify_182:
-    store_lex "$mc", $P303
-.annotate 'line', 89
-    find_lex $P304, "$/"
-    unless_null $P304, vivify_183
-    $P304 = root_new ['parrot';'Hash']
-  vivify_183:
-    set $P305, $P304["statement_mod_loop"]
-    unless_null $P305, vivify_184
-    $P305 = root_new ['parrot';'ResizablePMCArray']
-  vivify_184:
-    set $P306, $P305[0]
-    unless_null $P306, vivify_185
-    new $P306, "Undef"
-  vivify_185:
-    store_lex "$ml", $P306
-.annotate 'line', 90
-    find_lex $P307, "$/"
-    unless_null $P307, vivify_186
-    $P307 = root_new ['parrot';'Hash']
-  vivify_186:
-    set $P308, $P307["EXPR"]
-    unless_null $P308, vivify_187
-    new $P308, "Undef"
-  vivify_187:
-    $P309 = $P308."ast"()
-    store_lex "$past", $P309
-.annotate 'line', 91
-    find_lex $P311, "$mc"
-    unless $P311, if_310_end
+.sub "_block299"  :anon :subid("26_1275811497.55064") :outer("25_1275811497.55064")
 .annotate 'line', 92
-    get_hll_global $P312, ["PAST"], "Op"
-    find_lex $P313, "$mc"
-    unless_null $P313, vivify_188
-    $P313 = root_new ['parrot';'Hash']
-  vivify_188:
-    set $P314, $P313["cond"]
-    unless_null $P314, vivify_189
-    new $P314, "Undef"
-  vivify_189:
-    $P315 = $P314."ast"()
-    find_lex $P316, "$past"
-    find_lex $P317, "$mc"
-    unless_null $P317, vivify_190
-    $P317 = root_new ['parrot';'Hash']
+    new $P301, "Undef"
+    .lex "$mc", $P301
+.annotate 'line', 93
+    new $P302, "Undef"
+    .lex "$ml", $P302
+.annotate 'line', 92
+    find_lex $P303, "$/"
+    unless_null $P303, vivify_190
+    $P303 = root_new ['parrot';'Hash']
   vivify_190:
-    set $P318, $P317["sym"]
-    unless_null $P318, vivify_191
-    new $P318, "Undef"
+    set $P304, $P303["statement_mod_cond"]
+    unless_null $P304, vivify_191
+    $P304 = root_new ['parrot';'ResizablePMCArray']
   vivify_191:
-    set $S319, $P318
-    find_lex $P320, "$/"
-    $P321 = $P312."new"($P315, $P316, $S319 :named("pasttype"), $P320 :named("node"))
-    store_lex "$past", $P321
-  if_310_end:
-.annotate 'line', 94
-    find_lex $P324, "$ml"
-    if $P324, if_323
-    set $P322, $P324
-    goto if_323_end
-  if_323:
-.annotate 'line', 95
-    get_hll_global $P325, ["PAST"], "Op"
-    find_lex $P326, "$ml"
-    unless_null $P326, vivify_192
-    $P326 = root_new ['parrot';'Hash']
+    set $P305, $P304[0]
+    unless_null $P305, vivify_192
+    new $P305, "Undef"
   vivify_192:
-    set $P327, $P326["cond"]
-    unless_null $P327, vivify_193
-    new $P327, "Undef"
+    store_lex "$mc", $P305
+.annotate 'line', 93
+    find_lex $P306, "$/"
+    unless_null $P306, vivify_193
+    $P306 = root_new ['parrot';'Hash']
   vivify_193:
-    $P328 = $P327."ast"()
-    find_lex $P329, "$past"
-    find_lex $P330, "$ml"
-    unless_null $P330, vivify_194
-    $P330 = root_new ['parrot';'Hash']
+    set $P307, $P306["statement_mod_loop"]
+    unless_null $P307, vivify_194
+    $P307 = root_new ['parrot';'ResizablePMCArray']
   vivify_194:
-    set $P331, $P330["sym"]
-    unless_null $P331, vivify_195
-    new $P331, "Undef"
+    set $P308, $P307[0]
+    unless_null $P308, vivify_195
+    new $P308, "Undef"
   vivify_195:
-    set $S332, $P331
-    find_lex $P333, "$/"
-    $P334 = $P325."new"($P328, $P329, $S332 :named("pasttype"), $P333 :named("node"))
-    store_lex "$past", $P334
+    store_lex "$ml", $P308
 .annotate 'line', 94
-    set $P322, $P334
-  if_323_end:
-.annotate 'line', 87
-    .return ($P322)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "xblock"  :subid("27_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_349
-.annotate 'line', 103
-    new $P348, 'ExceptionHandler'
-    set_addr $P348, control_347
-    $P348."handle_types"(57)
-    push_eh $P348
-    .lex "self", self
-    .lex "$/", param_349
-.annotate 'line', 104
-    find_lex $P350, "$/"
-    get_hll_global $P351, ["PAST"], "Op"
-    find_lex $P352, "$/"
-    unless_null $P352, vivify_196
-    $P352 = root_new ['parrot';'Hash']
+    find_lex $P309, "$/"
+    unless_null $P309, vivify_196
+    $P309 = root_new ['parrot';'Hash']
   vivify_196:
-    set $P353, $P352["EXPR"]
-    unless_null $P353, vivify_197
-    new $P353, "Undef"
+    set $P310, $P309["EXPR"]
+    unless_null $P310, vivify_197
+    new $P310, "Undef"
   vivify_197:
-    $P354 = $P353."ast"()
-    find_lex $P355, "$/"
-    unless_null $P355, vivify_198
-    $P355 = root_new ['parrot';'Hash']
+    $P311 = $P310."ast"()
+    store_lex "$past", $P311
+.annotate 'line', 95
+    find_lex $P313, "$mc"
+    unless $P313, if_312_end
+.annotate 'line', 96
+    get_hll_global $P314, ["PAST"], "Op"
+    find_lex $P315, "$mc"
+    unless_null $P315, vivify_198
+    $P315 = root_new ['parrot';'Hash']
   vivify_198:
-    set $P356, $P355["pblock"]
-    unless_null $P356, vivify_199
-    new $P356, "Undef"
+    set $P316, $P315["cond"]
+    unless_null $P316, vivify_199
+    new $P316, "Undef"
   vivify_199:
-    $P357 = $P356."ast"()
-    find_lex $P358, "$/"
-    $P359 = $P351."new"($P354, $P357, "if" :named("pasttype"), $P358 :named("node"))
-    $P360 = $P350."!make"($P359)
-.annotate 'line', 103
-    .return ($P360)
-  control_347:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P361, exception, "payload"
-    .return ($P361)
+    $P317 = $P316."ast"()
+    find_lex $P318, "$past"
+    find_lex $P319, "$mc"
+    unless_null $P319, vivify_200
+    $P319 = root_new ['parrot';'Hash']
+  vivify_200:
+    set $P320, $P319["sym"]
+    unless_null $P320, vivify_201
+    new $P320, "Undef"
+  vivify_201:
+    set $S321, $P320
+    find_lex $P322, "$/"
+    $P323 = $P314."new"($P317, $P318, $S321 :named("pasttype"), $P322 :named("node"))
+    store_lex "$past", $P323
+  if_312_end:
+.annotate 'line', 98
+    find_lex $P326, "$ml"
+    if $P326, if_325
+    set $P324, $P326
+    goto if_325_end
+  if_325:
+.annotate 'line', 99
+    get_hll_global $P327, ["PAST"], "Op"
+    find_lex $P328, "$ml"
+    unless_null $P328, vivify_202
+    $P328 = root_new ['parrot';'Hash']
+  vivify_202:
+    set $P329, $P328["cond"]
+    unless_null $P329, vivify_203
+    new $P329, "Undef"
+  vivify_203:
+    $P330 = $P329."ast"()
+    find_lex $P331, "$past"
+    find_lex $P332, "$ml"
+    unless_null $P332, vivify_204
+    $P332 = root_new ['parrot';'Hash']
+  vivify_204:
+    set $P333, $P332["sym"]
+    unless_null $P333, vivify_205
+    new $P333, "Undef"
+  vivify_205:
+    set $S334, $P333
+    find_lex $P335, "$/"
+    $P336 = $P327."new"($P330, $P331, $S334 :named("pasttype"), $P335 :named("node"))
+    store_lex "$past", $P336
+.annotate 'line', 98
+    set $P324, $P336
+  if_325_end:
+.annotate 'line', 91
+    .return ($P324)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "pblock"  :subid("28_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_365
+.include "except_types.pasm"
+.sub "xblock"  :subid("27_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_351
 .annotate 'line', 107
-    new $P364, 'ExceptionHandler'
-    set_addr $P364, control_363
-    $P364."handle_types"(57)
-    push_eh $P364
+    new $P350, 'ExceptionHandler'
+    set_addr $P350, control_349
+    $P350."handle_types"(.CONTROL_RETURN)
+    push_eh $P350
     .lex "self", self
-    .lex "$/", param_365
+    .lex "$/", param_351
 .annotate 'line', 108
-    find_lex $P366, "$/"
-    find_lex $P367, "$/"
-    unless_null $P367, vivify_200
-    $P367 = root_new ['parrot';'Hash']
-  vivify_200:
-    set $P368, $P367["blockoid"]
-    unless_null $P368, vivify_201
-    new $P368, "Undef"
-  vivify_201:
-    $P369 = $P368."ast"()
-    $P370 = $P366."!make"($P369)
+    find_lex $P352, "$/"
+    get_hll_global $P353, ["PAST"], "Op"
+    find_lex $P354, "$/"
+    unless_null $P354, vivify_206
+    $P354 = root_new ['parrot';'Hash']
+  vivify_206:
+    set $P355, $P354["EXPR"]
+    unless_null $P355, vivify_207
+    new $P355, "Undef"
+  vivify_207:
+    $P356 = $P355."ast"()
+    find_lex $P357, "$/"
+    unless_null $P357, vivify_208
+    $P357 = root_new ['parrot';'Hash']
+  vivify_208:
+    set $P358, $P357["pblock"]
+    unless_null $P358, vivify_209
+    new $P358, "Undef"
+  vivify_209:
+    $P359 = $P358."ast"()
+    find_lex $P360, "$/"
+    $P361 = $P353."new"($P356, $P359, "if" :named("pasttype"), $P360 :named("node"))
+    $P362 = $P352."!make"($P361)
 .annotate 'line', 107
-    .return ($P370)
-  control_363:
+    .return ($P362)
+  control_349:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P371, exception, "payload"
-    .return ($P371)
+    getattribute $P363, exception, "payload"
+    .return ($P363)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "block"  :subid("29_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_375
+.include "except_types.pasm"
+.sub "pblock"  :subid("28_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_367
 .annotate 'line', 111
-    new $P374, 'ExceptionHandler'
-    set_addr $P374, control_373
-    $P374."handle_types"(57)
-    push_eh $P374
+    new $P366, 'ExceptionHandler'
+    set_addr $P366, control_365
+    $P366."handle_types"(.CONTROL_RETURN)
+    push_eh $P366
     .lex "self", self
-    .lex "$/", param_375
+    .lex "$/", param_367
 .annotate 'line', 112
-    find_lex $P376, "$/"
-    find_lex $P377, "$/"
-    unless_null $P377, vivify_202
-    $P377 = root_new ['parrot';'Hash']
-  vivify_202:
-    set $P378, $P377["blockoid"]
-    unless_null $P378, vivify_203
-    new $P378, "Undef"
-  vivify_203:
-    $P379 = $P378."ast"()
-    $P380 = $P376."!make"($P379)
+    find_lex $P368, "$/"
+    find_lex $P369, "$/"
+    unless_null $P369, vivify_210
+    $P369 = root_new ['parrot';'Hash']
+  vivify_210:
+    set $P370, $P369["blockoid"]
+    unless_null $P370, vivify_211
+    new $P370, "Undef"
+  vivify_211:
+    $P371 = $P370."ast"()
+    $P372 = $P368."!make"($P371)
 .annotate 'line', 111
-    .return ($P380)
-  control_373:
+    .return ($P372)
+  control_365:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P381, exception, "payload"
-    .return ($P381)
+    getattribute $P373, exception, "payload"
+    .return ($P373)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "blockoid"  :subid("30_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_385
+.include "except_types.pasm"
+.sub "block"  :subid("29_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_377
 .annotate 'line', 115
-    new $P384, 'ExceptionHandler'
-    set_addr $P384, control_383
-    $P384."handle_types"(57)
-    push_eh $P384
+    new $P376, 'ExceptionHandler'
+    set_addr $P376, control_375
+    $P376."handle_types"(.CONTROL_RETURN)
+    push_eh $P376
     .lex "self", self
-    .lex "$/", param_385
-.annotate 'line', 116
-    new $P386, "Undef"
-    .lex "$past", $P386
-.annotate 'line', 117
-    new $P387, "Undef"
-    .lex "$BLOCK", $P387
+    .lex "$/", param_377
 .annotate 'line', 116
-    find_lex $P388, "$/"
-    unless_null $P388, vivify_204
-    $P388 = root_new ['parrot';'Hash']
-  vivify_204:
-    set $P389, $P388["statementlist"]
-    unless_null $P389, vivify_205
-    new $P389, "Undef"
-  vivify_205:
-    $P390 = $P389."ast"()
-    store_lex "$past", $P390
-.annotate 'line', 117
-    get_global $P391, "@BLOCK"
-    $P392 = $P391."shift"()
-    store_lex "$BLOCK", $P392
-.annotate 'line', 118
-    find_lex $P393, "$BLOCK"
-    find_lex $P394, "$past"
-    $P393."push"($P394)
+    find_lex $P378, "$/"
+    find_lex $P379, "$/"
+    unless_null $P379, vivify_212
+    $P379 = root_new ['parrot';'Hash']
+  vivify_212:
+    set $P380, $P379["blockoid"]
+    unless_null $P380, vivify_213
+    new $P380, "Undef"
+  vivify_213:
+    $P381 = $P380."ast"()
+    $P382 = $P378."!make"($P381)
+.annotate 'line', 115
+    .return ($P382)
+  control_375:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P383, exception, "payload"
+    .return ($P383)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "blockoid"  :subid("30_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_387
 .annotate 'line', 119
-    find_lex $P395, "$BLOCK"
-    find_lex $P396, "$/"
-    $P395."node"($P396)
+    new $P386, 'ExceptionHandler'
+    set_addr $P386, control_385
+    $P386."handle_types"(.CONTROL_RETURN)
+    push_eh $P386
+    .lex "self", self
+    .lex "$/", param_387
 .annotate 'line', 120
-    find_lex $P397, "$BLOCK"
-    $P397."closure"(1)
+    new $P388, "Undef"
+    .lex "$past", $P388
+.annotate 'line', 121
+    new $P389, "Undef"
+    .lex "$BLOCK", $P389
+.annotate 'line', 120
+    find_lex $P390, "$/"
+    unless_null $P390, vivify_214
+    $P390 = root_new ['parrot';'Hash']
+  vivify_214:
+    set $P391, $P390["statementlist"]
+    unless_null $P391, vivify_215
+    new $P391, "Undef"
+  vivify_215:
+    $P392 = $P391."ast"()
+    store_lex "$past", $P392
 .annotate 'line', 121
+    get_global $P393, "@BLOCK"
+    $P394 = $P393."shift"()
+    store_lex "$BLOCK", $P394
+.annotate 'line', 122
+    find_lex $P395, "$BLOCK"
+    find_lex $P396, "$past"
+    $P395."push"($P396)
+.annotate 'line', 123
+    find_lex $P397, "$BLOCK"
     find_lex $P398, "$/"
+    $P397."node"($P398)
+.annotate 'line', 124
     find_lex $P399, "$BLOCK"
-    $P400 = $P398."!make"($P399)
-.annotate 'line', 115
-    .return ($P400)
-  control_383:
+    $P399."closure"(1)
+.annotate 'line', 125
+    find_lex $P400, "$/"
+    find_lex $P401, "$BLOCK"
+    $P402 = $P400."!make"($P401)
+.annotate 'line', 119
+    .return ($P402)
+  control_385:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P401, exception, "payload"
-    .return ($P401)
+    getattribute $P403, exception, "payload"
+    .return ($P403)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "newpad"  :subid("31_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_405
-.annotate 'line', 124
-    new $P404, 'ExceptionHandler'
-    set_addr $P404, control_403
-    $P404."handle_types"(57)
-    push_eh $P404
+.include "except_types.pasm"
+.sub "newpad"  :subid("31_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_407
+.annotate 'line', 128
+    new $P406, 'ExceptionHandler'
+    set_addr $P406, control_405
+    $P406."handle_types"(.CONTROL_RETURN)
+    push_eh $P406
     .lex "self", self
-    .lex "$/", param_405
-.annotate 'line', 125
-    get_global $P406, "@BLOCK"
-    unless_null $P406, vivify_206
-    $P406 = root_new ['parrot';'ResizablePMCArray']
-    set_global "@BLOCK", $P406
-  vivify_206:
-.annotate 'line', 124
-    get_global $P407, "@BLOCK"
-.annotate 'line', 126
+    .lex "$/", param_407
+.annotate 'line', 129
     get_global $P408, "@BLOCK"
-    get_hll_global $P409, ["PAST"], "Block"
-    get_hll_global $P410, ["PAST"], "Stmts"
-    $P411 = $P410."new"()
-    $P412 = $P409."new"($P411)
-    $P413 = $P408."unshift"($P412)
-.annotate 'line', 124
-    .return ($P413)
-  control_403:
+    unless_null $P408, vivify_216
+    $P408 = root_new ['parrot';'ResizablePMCArray']
+    set_global "@BLOCK", $P408
+  vivify_216:
+.annotate 'line', 128
+    get_global $P409, "@BLOCK"
+.annotate 'line', 130
+    get_global $P410, "@BLOCK"
+    get_hll_global $P411, ["PAST"], "Block"
+    get_hll_global $P412, ["PAST"], "Stmts"
+    $P413 = $P412."new"()
+    $P414 = $P411."new"($P413)
+    $P415 = $P410."unshift"($P414)
+.annotate 'line', 128
+    .return ($P415)
+  control_405:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P414, exception, "payload"
-    .return ($P414)
+    getattribute $P416, exception, "payload"
+    .return ($P416)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<if>"  :subid("32_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_418
-.annotate 'line', 131
-    .const 'Sub' $P446 = "33_1274022903.56472" 
-    capture_lex $P446
-    new $P417, 'ExceptionHandler'
-    set_addr $P417, control_416
-    $P417."handle_types"(57)
-    push_eh $P417
-    .lex "self", self
-    .lex "$/", param_418
-.annotate 'line', 132
-    new $P419, "Undef"
-    .lex "$count", $P419
-.annotate 'line', 133
-    new $P420, "Undef"
-    .lex "$past", $P420
-.annotate 'line', 132
-    find_lex $P421, "$/"
-    unless_null $P421, vivify_207
-    $P421 = root_new ['parrot';'Hash']
-  vivify_207:
-    set $P422, $P421["xblock"]
-    unless_null $P422, vivify_208
-    new $P422, "Undef"
-  vivify_208:
-    set $N423, $P422
-    new $P424, 'Float'
-    set $P424, $N423
-    sub $P425, $P424, 1
-    store_lex "$count", $P425
+.include "except_types.pasm"
+.sub "outerctx"  :subid("32_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_420
 .annotate 'line', 133
-    find_lex $P426, "$count"
-    set $I427, $P426
-    find_lex $P428, "$/"
-    unless_null $P428, vivify_209
-    $P428 = root_new ['parrot';'Hash']
-  vivify_209:
-    set $P429, $P428["xblock"]
-    unless_null $P429, vivify_210
-    $P429 = root_new ['parrot';'ResizablePMCArray']
-  vivify_210:
-    set $P430, $P429[$I427]
-    unless_null $P430, vivify_211
-    new $P430, "Undef"
-  vivify_211:
-    $P431 = $P430."ast"()
-    $P432 = "xblock_immediate"($P431)
-    store_lex "$past", $P432
+    new $P419, 'ExceptionHandler'
+    set_addr $P419, control_418
+    $P419."handle_types"(.CONTROL_RETURN)
+    push_eh $P419
+    .lex "self", self
+    .lex "$/", param_420
 .annotate 'line', 134
-    find_lex $P434, "$/"
-    unless_null $P434, vivify_212
-    $P434 = root_new ['parrot';'Hash']
-  vivify_212:
-    set $P435, $P434["else"]
-    unless_null $P435, vivify_213
-    new $P435, "Undef"
-  vivify_213:
-    unless $P435, if_433_end
+    get_global $P421, "@BLOCK"
+    unless_null $P421, vivify_217
+    $P421 = root_new ['parrot';'ResizablePMCArray']
+    set_global "@BLOCK", $P421
+  vivify_217:
+.annotate 'line', 133
+    get_global $P422, "@BLOCK"
 .annotate 'line', 135
-    find_lex $P436, "$past"
-    find_lex $P437, "$/"
-    unless_null $P437, vivify_214
-    $P437 = root_new ['parrot';'Hash']
-  vivify_214:
-    set $P438, $P437["else"]
-    unless_null $P438, vivify_215
-    $P438 = root_new ['parrot';'ResizablePMCArray']
-  vivify_215:
-    set $P439, $P438[0]
-    unless_null $P439, vivify_216
-    new $P439, "Undef"
-  vivify_216:
-    $P440 = $P439."ast"()
-    $P441 = "block_immediate"($P440)
-    $P436."push"($P441)
-  if_433_end:
-.annotate 'line', 138
-    new $P462, 'ExceptionHandler'
-    set_addr $P462, loop461_handler
-    $P462."handle_types"(64, 66, 65)
-    push_eh $P462
-  loop461_test:
-    find_lex $P442, "$count"
-    set $N443, $P442
-    isgt $I444, $N443, 0.0
-    unless $I444, loop461_done
-  loop461_redo:
-    .const 'Sub' $P446 = "33_1274022903.56472" 
-    capture_lex $P446
-    $P446()
-  loop461_next:
-    goto loop461_test
-  loop461_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P463, exception, 'type'
-    eq $P463, 64, loop461_next
-    eq $P463, 66, loop461_redo
-  loop461_done:
-    pop_eh 
-.annotate 'line', 144
-    find_lex $P464, "$/"
-    find_lex $P465, "$past"
-    $P466 = $P464."!make"($P465)
-.annotate 'line', 131
-    .return ($P466)
-  control_416:
+    find_lex $P423, "self"
+    get_global $P424, "@BLOCK"
+    unless_null $P424, vivify_218
+    $P424 = root_new ['parrot';'ResizablePMCArray']
+  vivify_218:
+    set $P425, $P424[0]
+    unless_null $P425, vivify_219
+    new $P425, "Undef"
+  vivify_219:
+    $P426 = $P423."SET_BLOCK_OUTER_CTX"($P425)
+.annotate 'line', 133
+    .return ($P426)
+  control_418:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P467, exception, "payload"
-    .return ($P467)
+    getattribute $P427, exception, "payload"
+    .return ($P427)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block445"  :anon :subid("33_1274022903.56472") :outer("32_1274022903.56472")
+.include "except_types.pasm"
+.sub "statement_control:sym<if>"  :subid("33_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_431
 .annotate 'line', 140
-    new $P447, "Undef"
-    .lex "$else", $P447
-.annotate 'line', 138
-    find_lex $P448, "$count"
-    clone $P449, $P448
-    dec $P448
-.annotate 'line', 140
-    find_lex $P450, "$past"
-    store_lex "$else", $P450
+    .const 'Sub' $P459 = "34_1275811497.55064" 
+    capture_lex $P459
+    new $P430, 'ExceptionHandler'
+    set_addr $P430, control_429
+    $P430."handle_types"(.CONTROL_RETURN)
+    push_eh $P430
+    .lex "self", self
+    .lex "$/", param_431
 .annotate 'line', 141
-    find_lex $P451, "$count"
-    set $I452, $P451
-    find_lex $P453, "$/"
-    unless_null $P453, vivify_217
-    $P453 = root_new ['parrot';'Hash']
-  vivify_217:
-    set $P454, $P453["xblock"]
-    unless_null $P454, vivify_218
-    $P454 = root_new ['parrot';'ResizablePMCArray']
-  vivify_218:
-    set $P455, $P454[$I452]
-    unless_null $P455, vivify_219
-    new $P455, "Undef"
-  vivify_219:
-    $P456 = $P455."ast"()
-    $P457 = "xblock_immediate"($P456)
-    store_lex "$past", $P457
+    new $P432, "Undef"
+    .lex "$count", $P432
 .annotate 'line', 142
-    find_lex $P458, "$past"
-    find_lex $P459, "$else"
-    $P460 = $P458."push"($P459)
-.annotate 'line', 138
-    .return ($P460)
+    new $P433, "Undef"
+    .lex "$past", $P433
+.annotate 'line', 141
+    find_lex $P434, "$/"
+    unless_null $P434, vivify_220
+    $P434 = root_new ['parrot';'Hash']
+  vivify_220:
+    set $P435, $P434["xblock"]
+    unless_null $P435, vivify_221
+    new $P435, "Undef"
+  vivify_221:
+    set $N436, $P435
+    new $P437, 'Float'
+    set $P437, $N436
+    sub $P438, $P437, 1
+    store_lex "$count", $P438
+.annotate 'line', 142
+    find_lex $P439, "$count"
+    set $I440, $P439
+    find_lex $P441, "$/"
+    unless_null $P441, vivify_222
+    $P441 = root_new ['parrot';'Hash']
+  vivify_222:
+    set $P442, $P441["xblock"]
+    unless_null $P442, vivify_223
+    $P442 = root_new ['parrot';'ResizablePMCArray']
+  vivify_223:
+    set $P443, $P442[$I440]
+    unless_null $P443, vivify_224
+    new $P443, "Undef"
+  vivify_224:
+    $P444 = $P443."ast"()
+    $P445 = "xblock_immediate"($P444)
+    store_lex "$past", $P445
+.annotate 'line', 143
+    find_lex $P447, "$/"
+    unless_null $P447, vivify_225
+    $P447 = root_new ['parrot';'Hash']
+  vivify_225:
+    set $P448, $P447["else"]
+    unless_null $P448, vivify_226
+    new $P448, "Undef"
+  vivify_226:
+    unless $P448, if_446_end
+.annotate 'line', 144
+    find_lex $P449, "$past"
+    find_lex $P450, "$/"
+    unless_null $P450, vivify_227
+    $P450 = root_new ['parrot';'Hash']
+  vivify_227:
+    set $P451, $P450["else"]
+    unless_null $P451, vivify_228
+    $P451 = root_new ['parrot';'ResizablePMCArray']
+  vivify_228:
+    set $P452, $P451[0]
+    unless_null $P452, vivify_229
+    new $P452, "Undef"
+  vivify_229:
+    $P453 = $P452."ast"()
+    $P454 = "block_immediate"($P453)
+    $P449."push"($P454)
+  if_446_end:
+.annotate 'line', 147
+    new $P475, 'ExceptionHandler'
+    set_addr $P475, loop474_handler
+    $P475."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P475
+  loop474_test:
+    find_lex $P455, "$count"
+    set $N456, $P455
+    isgt $I457, $N456, 0.0
+    unless $I457, loop474_done
+  loop474_redo:
+    .const 'Sub' $P459 = "34_1275811497.55064" 
+    capture_lex $P459
+    $P459()
+  loop474_next:
+    goto loop474_test
+  loop474_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P476, exception, 'type'
+    eq $P476, .CONTROL_LOOP_NEXT, loop474_next
+    eq $P476, .CONTROL_LOOP_REDO, loop474_redo
+  loop474_done:
+    pop_eh 
+.annotate 'line', 153
+    find_lex $P477, "$/"
+    find_lex $P478, "$past"
+    $P479 = $P477."!make"($P478)
+.annotate 'line', 140
+    .return ($P479)
+  control_429:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P480, exception, "payload"
+    .return ($P480)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<unless>"  :subid("34_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_471
+.sub "_block458"  :anon :subid("34_1275811497.55064") :outer("33_1275811497.55064")
+.annotate 'line', 149
+    new $P460, "Undef"
+    .lex "$else", $P460
 .annotate 'line', 147
-    new $P470, 'ExceptionHandler'
-    set_addr $P470, control_469
-    $P470."handle_types"(57)
-    push_eh $P470
-    .lex "self", self
-    .lex "$/", param_471
-.annotate 'line', 148
-    new $P472, "Undef"
-    .lex "$past", $P472
-    find_lex $P473, "$/"
-    unless_null $P473, vivify_220
-    $P473 = root_new ['parrot';'Hash']
-  vivify_220:
-    set $P474, $P473["xblock"]
-    unless_null $P474, vivify_221
-    new $P474, "Undef"
-  vivify_221:
-    $P475 = $P474."ast"()
-    $P476 = "xblock_immediate"($P475)
-    store_lex "$past", $P476
+    find_lex $P461, "$count"
+    clone $P462, $P461
+    dec $P461
 .annotate 'line', 149
-    find_lex $P477, "$past"
-    $P477."pasttype"("unless")
+    find_lex $P463, "$past"
+    store_lex "$else", $P463
 .annotate 'line', 150
-    find_lex $P478, "$/"
-    find_lex $P479, "$past"
-    $P480 = $P478."!make"($P479)
+    find_lex $P464, "$count"
+    set $I465, $P464
+    find_lex $P466, "$/"
+    unless_null $P466, vivify_230
+    $P466 = root_new ['parrot';'Hash']
+  vivify_230:
+    set $P467, $P466["xblock"]
+    unless_null $P467, vivify_231
+    $P467 = root_new ['parrot';'ResizablePMCArray']
+  vivify_231:
+    set $P468, $P467[$I465]
+    unless_null $P468, vivify_232
+    new $P468, "Undef"
+  vivify_232:
+    $P469 = $P468."ast"()
+    $P470 = "xblock_immediate"($P469)
+    store_lex "$past", $P470
+.annotate 'line', 151
+    find_lex $P471, "$past"
+    find_lex $P472, "$else"
+    $P473 = $P471."push"($P472)
 .annotate 'line', 147
-    .return ($P480)
-  control_469:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P481, exception, "payload"
-    .return ($P481)
+    .return ($P473)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<while>"  :subid("35_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_485
-.annotate 'line', 153
-    new $P484, 'ExceptionHandler'
-    set_addr $P484, control_483
-    $P484."handle_types"(57)
-    push_eh $P484
-    .lex "self", self
-    .lex "$/", param_485
-.annotate 'line', 154
-    new $P486, "Undef"
-    .lex "$past", $P486
-    find_lex $P487, "$/"
-    unless_null $P487, vivify_222
-    $P487 = root_new ['parrot';'Hash']
-  vivify_222:
-    set $P488, $P487["xblock"]
-    unless_null $P488, vivify_223
-    new $P488, "Undef"
-  vivify_223:
-    $P489 = $P488."ast"()
-    $P490 = "xblock_immediate"($P489)
-    store_lex "$past", $P490
-.annotate 'line', 155
-    find_lex $P491, "$past"
-    find_lex $P492, "$/"
-    unless_null $P492, vivify_224
-    $P492 = root_new ['parrot';'Hash']
-  vivify_224:
-    set $P493, $P492["sym"]
-    unless_null $P493, vivify_225
-    new $P493, "Undef"
-  vivify_225:
-    set $S494, $P493
-    $P491."pasttype"($S494)
+.include "except_types.pasm"
+.sub "statement_control:sym<unless>"  :subid("35_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_484
 .annotate 'line', 156
-    find_lex $P495, "$/"
-    find_lex $P496, "$past"
-    $P497 = $P495."!make"($P496)
-.annotate 'line', 153
-    .return ($P497)
-  control_483:
+    new $P483, 'ExceptionHandler'
+    set_addr $P483, control_482
+    $P483."handle_types"(.CONTROL_RETURN)
+    push_eh $P483
+    .lex "self", self
+    .lex "$/", param_484
+.annotate 'line', 157
+    new $P485, "Undef"
+    .lex "$past", $P485
+    find_lex $P486, "$/"
+    unless_null $P486, vivify_233
+    $P486 = root_new ['parrot';'Hash']
+  vivify_233:
+    set $P487, $P486["xblock"]
+    unless_null $P487, vivify_234
+    new $P487, "Undef"
+  vivify_234:
+    $P488 = $P487."ast"()
+    $P489 = "xblock_immediate"($P488)
+    store_lex "$past", $P489
+.annotate 'line', 158
+    find_lex $P490, "$past"
+    $P490."pasttype"("unless")
+.annotate 'line', 159
+    find_lex $P491, "$/"
+    find_lex $P492, "$past"
+    $P493 = $P491."!make"($P492)
+.annotate 'line', 156
+    .return ($P493)
+  control_482:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P498, exception, "payload"
-    .return ($P498)
+    getattribute $P494, exception, "payload"
+    .return ($P494)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<repeat>"  :subid("36_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_502
-.annotate 'line', 159
-    new $P501, 'ExceptionHandler'
-    set_addr $P501, control_500
-    $P501."handle_types"(57)
-    push_eh $P501
-    .lex "self", self
-    .lex "$/", param_502
-.annotate 'line', 160
-    new $P503, "Undef"
-    .lex "$pasttype", $P503
-.annotate 'line', 161
-    new $P504, "Undef"
-    .lex "$past", $P504
-.annotate 'line', 160
-    new $P505, "String"
-    assign $P505, "repeat_"
-    find_lex $P506, "$/"
-    unless_null $P506, vivify_226
-    $P506 = root_new ['parrot';'Hash']
-  vivify_226:
-    set $P507, $P506["wu"]
-    unless_null $P507, vivify_227
-    new $P507, "Undef"
-  vivify_227:
-    set $S508, $P507
-    concat $P509, $P505, $S508
-    store_lex "$pasttype", $P509
-    find_lex $P510, "$past"
+.include "except_types.pasm"
+.sub "statement_control:sym<while>"  :subid("36_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_498
 .annotate 'line', 162
-    find_lex $P512, "$/"
-    unless_null $P512, vivify_228
-    $P512 = root_new ['parrot';'Hash']
-  vivify_228:
-    set $P513, $P512["xblock"]
-    unless_null $P513, vivify_229
-    new $P513, "Undef"
-  vivify_229:
-    if $P513, if_511
-.annotate 'line', 167
-    get_hll_global $P520, ["PAST"], "Op"
-    find_lex $P521, "$/"
-    unless_null $P521, vivify_230
-    $P521 = root_new ['parrot';'Hash']
-  vivify_230:
-    set $P522, $P521["EXPR"]
-    unless_null $P522, vivify_231
-    new $P522, "Undef"
-  vivify_231:
-    $P523 = $P522."ast"()
-    find_lex $P524, "$/"
-    unless_null $P524, vivify_232
-    $P524 = root_new ['parrot';'Hash']
-  vivify_232:
-    set $P525, $P524["pblock"]
-    unless_null $P525, vivify_233
-    new $P525, "Undef"
-  vivify_233:
-    $P526 = $P525."ast"()
-    $P527 = "block_immediate"($P526)
-    find_lex $P528, "$pasttype"
-    find_lex $P529, "$/"
-    $P530 = $P520."new"($P523, $P527, $P528 :named("pasttype"), $P529 :named("node"))
-    store_lex "$past", $P530
-.annotate 'line', 166
-    goto if_511_end
-  if_511:
+    new $P497, 'ExceptionHandler'
+    set_addr $P497, control_496
+    $P497."handle_types"(.CONTROL_RETURN)
+    push_eh $P497
+    .lex "self", self
+    .lex "$/", param_498
 .annotate 'line', 163
-    find_lex $P514, "$/"
-    unless_null $P514, vivify_234
-    $P514 = root_new ['parrot';'Hash']
-  vivify_234:
-    set $P515, $P514["xblock"]
-    unless_null $P515, vivify_235
-    new $P515, "Undef"
+    new $P499, "Undef"
+    .lex "$past", $P499
+    find_lex $P500, "$/"
+    unless_null $P500, vivify_235
+    $P500 = root_new ['parrot';'Hash']
   vivify_235:
-    $P516 = $P515."ast"()
-    $P517 = "xblock_immediate"($P516)
-    store_lex "$past", $P517
+    set $P501, $P500["xblock"]
+    unless_null $P501, vivify_236
+    new $P501, "Undef"
+  vivify_236:
+    $P502 = $P501."ast"()
+    $P503 = "xblock_immediate"($P502)
+    store_lex "$past", $P503
 .annotate 'line', 164
-    find_lex $P518, "$past"
-    find_lex $P519, "$pasttype"
-    $P518."pasttype"($P519)
-  if_511_end:
-.annotate 'line', 170
-    find_lex $P531, "$/"
-    find_lex $P532, "$past"
-    $P533 = $P531."!make"($P532)
-.annotate 'line', 159
-    .return ($P533)
-  control_500:
+    find_lex $P504, "$past"
+    find_lex $P505, "$/"
+    unless_null $P505, vivify_237
+    $P505 = root_new ['parrot';'Hash']
+  vivify_237:
+    set $P506, $P505["sym"]
+    unless_null $P506, vivify_238
+    new $P506, "Undef"
+  vivify_238:
+    set $S507, $P506
+    $P504."pasttype"($S507)
+.annotate 'line', 165
+    find_lex $P508, "$/"
+    find_lex $P509, "$past"
+    $P510 = $P508."!make"($P509)
+.annotate 'line', 162
+    .return ($P510)
+  control_496:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P534, exception, "payload"
-    .return ($P534)
+    getattribute $P511, exception, "payload"
+    .return ($P511)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<for>"  :subid("37_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_538
-.annotate 'line', 173
-    new $P537, 'ExceptionHandler'
-    set_addr $P537, control_536
-    $P537."handle_types"(57)
-    push_eh $P537
-    .lex "self", self
-    .lex "$/", param_538
-.annotate 'line', 174
-    new $P539, "Undef"
-    .lex "$past", $P539
-.annotate 'line', 176
-    new $P540, "Undef"
-    .lex "$block", $P540
-.annotate 'line', 174
-    find_lex $P541, "$/"
-    unless_null $P541, vivify_236
-    $P541 = root_new ['parrot';'Hash']
-  vivify_236:
-    set $P542, $P541["xblock"]
-    unless_null $P542, vivify_237
-    new $P542, "Undef"
-  vivify_237:
-    $P543 = $P542."ast"()
-    store_lex "$past", $P543
-.annotate 'line', 175
-    find_lex $P544, "$past"
-    $P544."pasttype"("for")
-.annotate 'line', 176
-    find_lex $P545, "$past"
-    unless_null $P545, vivify_238
-    $P545 = root_new ['parrot';'ResizablePMCArray']
-  vivify_238:
-    set $P546, $P545[1]
-    unless_null $P546, vivify_239
-    new $P546, "Undef"
+.include "except_types.pasm"
+.sub "statement_control:sym<repeat>"  :subid("37_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_515
+.annotate 'line', 168
+    new $P514, 'ExceptionHandler'
+    set_addr $P514, control_513
+    $P514."handle_types"(.CONTROL_RETURN)
+    push_eh $P514
+    .lex "self", self
+    .lex "$/", param_515
+.annotate 'line', 169
+    new $P516, "Undef"
+    .lex "$pasttype", $P516
+.annotate 'line', 170
+    new $P517, "Undef"
+    .lex "$past", $P517
+.annotate 'line', 169
+    new $P518, "String"
+    assign $P518, "repeat_"
+    find_lex $P519, "$/"
+    unless_null $P519, vivify_239
+    $P519 = root_new ['parrot';'Hash']
   vivify_239:
-    store_lex "$block", $P546
-.annotate 'line', 177
-    find_lex $P548, "$block"
-    $P549 = $P548."arity"()
-    if $P549, unless_547_end
-.annotate 'line', 178
-    find_lex $P550, "$block"
-    unless_null $P550, vivify_240
-    $P550 = root_new ['parrot';'ResizablePMCArray']
+    set $P520, $P519["wu"]
+    unless_null $P520, vivify_240
+    new $P520, "Undef"
   vivify_240:
-    set $P551, $P550[0]
-    unless_null $P551, vivify_241
-    new $P551, "Undef"
+    set $S521, $P520
+    concat $P522, $P518, $S521
+    store_lex "$pasttype", $P522
+    find_lex $P523, "$past"
+.annotate 'line', 171
+    find_lex $P525, "$/"
+    unless_null $P525, vivify_241
+    $P525 = root_new ['parrot';'Hash']
   vivify_241:
-    get_hll_global $P552, ["PAST"], "Var"
-    $P553 = $P552."new"("$_" :named("name"), "parameter" :named("scope"))
-    $P551."push"($P553)
-.annotate 'line', 179
-    find_lex $P554, "$block"
-    $P554."symbol"("$_", "lexical" :named("scope"))
-.annotate 'line', 180
-    find_lex $P555, "$block"
-    $P555."arity"(1)
-  unless_547_end:
-.annotate 'line', 182
-    find_lex $P556, "$block"
-    $P556."blocktype"("immediate")
-.annotate 'line', 183
-    find_lex $P557, "$/"
-    find_lex $P558, "$past"
-    $P559 = $P557."!make"($P558)
+    set $P526, $P525["xblock"]
+    unless_null $P526, vivify_242
+    new $P526, "Undef"
+  vivify_242:
+    if $P526, if_524
+.annotate 'line', 176
+    get_hll_global $P533, ["PAST"], "Op"
+    find_lex $P534, "$/"
+    unless_null $P534, vivify_243
+    $P534 = root_new ['parrot';'Hash']
+  vivify_243:
+    set $P535, $P534["EXPR"]
+    unless_null $P535, vivify_244
+    new $P535, "Undef"
+  vivify_244:
+    $P536 = $P535."ast"()
+    find_lex $P537, "$/"
+    unless_null $P537, vivify_245
+    $P537 = root_new ['parrot';'Hash']
+  vivify_245:
+    set $P538, $P537["pblock"]
+    unless_null $P538, vivify_246
+    new $P538, "Undef"
+  vivify_246:
+    $P539 = $P538."ast"()
+    $P540 = "block_immediate"($P539)
+    find_lex $P541, "$pasttype"
+    find_lex $P542, "$/"
+    $P543 = $P533."new"($P536, $P540, $P541 :named("pasttype"), $P542 :named("node"))
+    store_lex "$past", $P543
+.annotate 'line', 175
+    goto if_524_end
+  if_524:
+.annotate 'line', 172
+    find_lex $P527, "$/"
+    unless_null $P527, vivify_247
+    $P527 = root_new ['parrot';'Hash']
+  vivify_247:
+    set $P528, $P527["xblock"]
+    unless_null $P528, vivify_248
+    new $P528, "Undef"
+  vivify_248:
+    $P529 = $P528."ast"()
+    $P530 = "xblock_immediate"($P529)
+    store_lex "$past", $P530
 .annotate 'line', 173
-    .return ($P559)
-  control_536:
+    find_lex $P531, "$past"
+    find_lex $P532, "$pasttype"
+    $P531."pasttype"($P532)
+  if_524_end:
+.annotate 'line', 179
+    find_lex $P544, "$/"
+    find_lex $P545, "$past"
+    $P546 = $P544."!make"($P545)
+.annotate 'line', 168
+    .return ($P546)
+  control_513:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P560, exception, "payload"
-    .return ($P560)
+    getattribute $P547, exception, "payload"
+    .return ($P547)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<return>"  :subid("38_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_564
-.annotate 'line', 186
-    new $P563, 'ExceptionHandler'
-    set_addr $P563, control_562
-    $P563."handle_types"(57)
-    push_eh $P563
+.include "except_types.pasm"
+.sub "statement_control:sym<for>"  :subid("38_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_551
+.annotate 'line', 182
+    new $P550, 'ExceptionHandler'
+    set_addr $P550, control_549
+    $P550."handle_types"(.CONTROL_RETURN)
+    push_eh $P550
     .lex "self", self
-    .lex "$/", param_564
+    .lex "$/", param_551
+.annotate 'line', 183
+    new $P552, "Undef"
+    .lex "$past", $P552
+.annotate 'line', 185
+    new $P553, "Undef"
+    .lex "$block", $P553
+.annotate 'line', 183
+    find_lex $P554, "$/"
+    unless_null $P554, vivify_249
+    $P554 = root_new ['parrot';'Hash']
+  vivify_249:
+    set $P555, $P554["xblock"]
+    unless_null $P555, vivify_250
+    new $P555, "Undef"
+  vivify_250:
+    $P556 = $P555."ast"()
+    store_lex "$past", $P556
+.annotate 'line', 184
+    find_lex $P557, "$past"
+    $P557."pasttype"("for")
+.annotate 'line', 185
+    find_lex $P558, "$past"
+    unless_null $P558, vivify_251
+    $P558 = root_new ['parrot';'ResizablePMCArray']
+  vivify_251:
+    set $P559, $P558[1]
+    unless_null $P559, vivify_252
+    new $P559, "Undef"
+  vivify_252:
+    store_lex "$block", $P559
+.annotate 'line', 186
+    find_lex $P561, "$block"
+    $P562 = $P561."arity"()
+    if $P562, unless_560_end
 .annotate 'line', 187
-    find_lex $P565, "$/"
-    get_hll_global $P566, ["PAST"], "Op"
-    find_lex $P567, "$/"
-    unless_null $P567, vivify_242
-    $P567 = root_new ['parrot';'Hash']
-  vivify_242:
-    set $P568, $P567["EXPR"]
-    unless_null $P568, vivify_243
-    new $P568, "Undef"
-  vivify_243:
-    $P569 = $P568."ast"()
+    find_lex $P563, "$block"
+    unless_null $P563, vivify_253
+    $P563 = root_new ['parrot';'ResizablePMCArray']
+  vivify_253:
+    set $P564, $P563[0]
+    unless_null $P564, vivify_254
+    new $P564, "Undef"
+  vivify_254:
+    get_hll_global $P565, ["PAST"], "Var"
+    $P566 = $P565."new"("$_" :named("name"), "parameter" :named("scope"))
+    $P564."push"($P566)
+.annotate 'line', 188
+    find_lex $P567, "$block"
+    $P567."symbol"("$_", "lexical" :named("scope"))
+.annotate 'line', 189
+    find_lex $P568, "$block"
+    $P568."arity"(1)
+  unless_560_end:
+.annotate 'line', 191
+    find_lex $P569, "$block"
+    $P569."blocktype"("immediate")
+.annotate 'line', 192
     find_lex $P570, "$/"
-    $P571 = $P566."new"($P569, "return" :named("pasttype"), $P570 :named("node"))
-    $P572 = $P565."!make"($P571)
-.annotate 'line', 186
+    find_lex $P571, "$past"
+    $P572 = $P570."!make"($P571)
+.annotate 'line', 182
     .return ($P572)
-  control_562:
+  control_549:
     .local pmc exception 
     .get_results (exception) 
     getattribute $P573, exception, "payload"
@@ -18297,3321 +19348,3501 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<CATCH>"  :subid("39_1274022903.56472") :method :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "statement_control:sym<return>"  :subid("39_1275811497.55064") :method :outer("11_1275811497.55064")
     .param pmc param_577
-.annotate 'line', 190
+.annotate 'line', 195
     new $P576, 'ExceptionHandler'
     set_addr $P576, control_575
-    $P576."handle_types"(57)
+    $P576."handle_types"(.CONTROL_RETURN)
     push_eh $P576
     .lex "self", self
     .lex "$/", param_577
-.annotate 'line', 191
-    new $P578, "Undef"
-    .lex "$block", $P578
-    find_lex $P579, "$/"
-    unless_null $P579, vivify_244
-    $P579 = root_new ['parrot';'Hash']
-  vivify_244:
-    set $P580, $P579["block"]
-    unless_null $P580, vivify_245
-    new $P580, "Undef"
-  vivify_245:
-    $P581 = $P580."ast"()
-    store_lex "$block", $P581
-.annotate 'line', 192
-    find_lex $P582, "$/"
-    find_lex $P583, "$block"
-    "push_block_handler"($P582, $P583)
-.annotate 'line', 193
-    get_global $P584, "@BLOCK"
-    unless_null $P584, vivify_246
-    $P584 = root_new ['parrot';'ResizablePMCArray']
-  vivify_246:
-    set $P585, $P584[0]
-    unless_null $P585, vivify_247
-    new $P585, "Undef"
-  vivify_247:
-    $P586 = $P585."handlers"()
-    set $P587, $P586[0]
-    unless_null $P587, vivify_248
-    new $P587, "Undef"
-  vivify_248:
-    $P587."handle_types_except"("CONTROL")
-.annotate 'line', 194
-    find_lex $P588, "$/"
-    get_hll_global $P589, ["PAST"], "Stmts"
-    find_lex $P590, "$/"
-    $P591 = $P589."new"($P590 :named("node"))
-    $P592 = $P588."!make"($P591)
-.annotate 'line', 190
-    .return ($P592)
+.annotate 'line', 196
+    find_lex $P578, "$/"
+    get_hll_global $P579, ["PAST"], "Op"
+    find_lex $P580, "$/"
+    unless_null $P580, vivify_255
+    $P580 = root_new ['parrot';'Hash']
+  vivify_255:
+    set $P581, $P580["EXPR"]
+    unless_null $P581, vivify_256
+    new $P581, "Undef"
+  vivify_256:
+    $P582 = $P581."ast"()
+    find_lex $P583, "$/"
+    $P584 = $P579."new"($P582, "return" :named("pasttype"), $P583 :named("node"))
+    $P585 = $P578."!make"($P584)
+.annotate 'line', 195
+    .return ($P585)
   control_575:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P593, exception, "payload"
-    .return ($P593)
+    getattribute $P586, exception, "payload"
+    .return ($P586)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<CONTROL>"  :subid("40_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_597
-.annotate 'line', 197
-    new $P596, 'ExceptionHandler'
-    set_addr $P596, control_595
-    $P596."handle_types"(57)
-    push_eh $P596
+.include "except_types.pasm"
+.sub "statement_control:sym<CATCH>"  :subid("40_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_590
+.annotate 'line', 199
+    new $P589, 'ExceptionHandler'
+    set_addr $P589, control_588
+    $P589."handle_types"(.CONTROL_RETURN)
+    push_eh $P589
     .lex "self", self
-    .lex "$/", param_597
-.annotate 'line', 198
+    .lex "$/", param_590
+.annotate 'line', 200
+    new $P591, "Undef"
+    .lex "$block", $P591
+    find_lex $P592, "$/"
+    unless_null $P592, vivify_257
+    $P592 = root_new ['parrot';'Hash']
+  vivify_257:
+    set $P593, $P592["block"]
+    unless_null $P593, vivify_258
+    new $P593, "Undef"
+  vivify_258:
+    $P594 = $P593."ast"()
+    store_lex "$block", $P594
+.annotate 'line', 201
+    find_lex $P595, "$/"
+    find_lex $P596, "$block"
+    "push_block_handler"($P595, $P596)
+.annotate 'line', 202
+    get_global $P597, "@BLOCK"
+    unless_null $P597, vivify_259
+    $P597 = root_new ['parrot';'ResizablePMCArray']
+  vivify_259:
+    set $P598, $P597[0]
+    unless_null $P598, vivify_260
     new $P598, "Undef"
-    .lex "$block", $P598
-    find_lex $P599, "$/"
-    unless_null $P599, vivify_249
-    $P599 = root_new ['parrot';'Hash']
-  vivify_249:
-    set $P600, $P599["block"]
-    unless_null $P600, vivify_250
+  vivify_260:
+    $P599 = $P598."handlers"()
+    set $P600, $P599[0]
+    unless_null $P600, vivify_261
     new $P600, "Undef"
-  vivify_250:
-    $P601 = $P600."ast"()
-    store_lex "$block", $P601
+  vivify_261:
+    $P600."handle_types_except"("CONTROL")
+.annotate 'line', 203
+    find_lex $P601, "$/"
+    get_hll_global $P602, ["PAST"], "Stmts"
+    find_lex $P603, "$/"
+    $P604 = $P602."new"($P603 :named("node"))
+    $P605 = $P601."!make"($P604)
 .annotate 'line', 199
-    find_lex $P602, "$/"
-    find_lex $P603, "$block"
-    "push_block_handler"($P602, $P603)
-.annotate 'line', 200
-    get_global $P604, "@BLOCK"
-    unless_null $P604, vivify_251
-    $P604 = root_new ['parrot';'ResizablePMCArray']
-  vivify_251:
-    set $P605, $P604[0]
-    unless_null $P605, vivify_252
-    new $P605, "Undef"
-  vivify_252:
-    $P606 = $P605."handlers"()
-    set $P607, $P606[0]
-    unless_null $P607, vivify_253
-    new $P607, "Undef"
-  vivify_253:
-    $P607."handle_types"("CONTROL")
-.annotate 'line', 201
-    find_lex $P608, "$/"
-    get_hll_global $P609, ["PAST"], "Stmts"
-    find_lex $P610, "$/"
-    $P611 = $P609."new"($P610 :named("node"))
-    $P612 = $P608."!make"($P611)
-.annotate 'line', 197
-    .return ($P612)
-  control_595:
+    .return ($P605)
+  control_588:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P613, exception, "payload"
-    .return ($P613)
+    getattribute $P606, exception, "payload"
+    .return ($P606)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_prefix:sym<INIT>"  :subid("41_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_618
-.annotate 'line', 241
-    new $P617, 'ExceptionHandler'
-    set_addr $P617, control_616
-    $P617."handle_types"(57)
-    push_eh $P617
-    .lex "self", self
-    .lex "$/", param_618
-.annotate 'line', 242
-    get_global $P619, "@BLOCK"
-    unless_null $P619, vivify_254
-    $P619 = root_new ['parrot';'ResizablePMCArray']
-  vivify_254:
+.include "except_types.pasm"
+.sub "statement_control:sym<CONTROL>"  :subid("41_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_610
+.annotate 'line', 206
+    new $P609, 'ExceptionHandler'
+    set_addr $P609, control_608
+    $P609."handle_types"(.CONTROL_RETURN)
+    push_eh $P609
+    .lex "self", self
+    .lex "$/", param_610
+.annotate 'line', 207
+    new $P611, "Undef"
+    .lex "$block", $P611
+    find_lex $P612, "$/"
+    unless_null $P612, vivify_262
+    $P612 = root_new ['parrot';'Hash']
+  vivify_262:
+    set $P613, $P612["block"]
+    unless_null $P613, vivify_263
+    new $P613, "Undef"
+  vivify_263:
+    $P614 = $P613."ast"()
+    store_lex "$block", $P614
+.annotate 'line', 208
+    find_lex $P615, "$/"
+    find_lex $P616, "$block"
+    "push_block_handler"($P615, $P616)
+.annotate 'line', 209
+    get_global $P617, "@BLOCK"
+    unless_null $P617, vivify_264
+    $P617 = root_new ['parrot';'ResizablePMCArray']
+  vivify_264:
+    set $P618, $P617[0]
+    unless_null $P618, vivify_265
+    new $P618, "Undef"
+  vivify_265:
+    $P619 = $P618."handlers"()
     set $P620, $P619[0]
-    unless_null $P620, vivify_255
+    unless_null $P620, vivify_266
     new $P620, "Undef"
-  vivify_255:
-    $P621 = $P620."loadinit"()
-    find_lex $P622, "$/"
-    unless_null $P622, vivify_256
-    $P622 = root_new ['parrot';'Hash']
-  vivify_256:
-    set $P623, $P622["blorst"]
-    unless_null $P623, vivify_257
-    new $P623, "Undef"
-  vivify_257:
-    $P624 = $P623."ast"()
-    $P621."push"($P624)
-.annotate 'line', 243
-    find_lex $P625, "$/"
-    get_hll_global $P626, ["PAST"], "Stmts"
-    find_lex $P627, "$/"
-    $P628 = $P626."new"($P627 :named("node"))
-    $P629 = $P625."!make"($P628)
-.annotate 'line', 241
-    .return ($P629)
-  control_616:
+  vivify_266:
+    $P620."handle_types"("CONTROL")
+.annotate 'line', 210
+    find_lex $P621, "$/"
+    get_hll_global $P622, ["PAST"], "Stmts"
+    find_lex $P623, "$/"
+    $P624 = $P622."new"($P623 :named("node"))
+    $P625 = $P621."!make"($P624)
+.annotate 'line', 206
+    .return ($P625)
+  control_608:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P630, exception, "payload"
-    .return ($P630)
+    getattribute $P626, exception, "payload"
+    .return ($P626)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_prefix:sym<try>"  :subid("42_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_634
-.annotate 'line', 246
-    new $P633, 'ExceptionHandler'
-    set_addr $P633, control_632
-    $P633."handle_types"(57)
-    push_eh $P633
+.include "except_types.pasm"
+.sub "statement_prefix:sym<INIT>"  :subid("42_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_631
+.annotate 'line', 250
+    new $P630, 'ExceptionHandler'
+    set_addr $P630, control_629
+    $P630."handle_types"(.CONTROL_RETURN)
+    push_eh $P630
     .lex "self", self
-    .lex "$/", param_634
-.annotate 'line', 247
-    new $P635, "Undef"
-    .lex "$past", $P635
-    find_lex $P636, "$/"
-    unless_null $P636, vivify_258
-    $P636 = root_new ['parrot';'Hash']
-  vivify_258:
-    set $P637, $P636["blorst"]
-    unless_null $P637, vivify_259
-    new $P637, "Undef"
-  vivify_259:
-    $P638 = $P637."ast"()
-    store_lex "$past", $P638
-.annotate 'line', 248
-    find_lex $P640, "$past"
-    $S641 = $P640."WHAT"()
-    isne $I642, $S641, "PAST::Block()"
-    unless $I642, if_639_end
-.annotate 'line', 249
-    get_hll_global $P643, ["PAST"], "Block"
-    find_lex $P644, "$past"
-    find_lex $P645, "$/"
-    $P646 = $P643."new"($P644, "immediate" :named("blocktype"), $P645 :named("node"))
-    store_lex "$past", $P646
-  if_639_end:
+    .lex "$/", param_631
 .annotate 'line', 251
-    find_lex $P648, "$past"
-    $P649 = $P648."handlers"()
-    if $P649, unless_647_end
-.annotate 'line', 252
-    find_lex $P650, "$past"
-    get_hll_global $P651, ["PAST"], "Control"
-.annotate 'line', 254
-    get_hll_global $P652, ["PAST"], "Stmts"
-.annotate 'line', 255
-    get_hll_global $P653, ["PAST"], "Op"
-.annotate 'line', 256
-    get_hll_global $P654, ["PAST"], "Var"
-.annotate 'line', 257
-    get_hll_global $P655, ["PAST"], "Var"
-    $P656 = $P655."new"("register" :named("scope"), "exception" :named("name"))
-    $P657 = $P654."new"($P656, "handled", "keyed" :named("scope"))
-.annotate 'line', 256
-    $P658 = $P653."new"($P657, 1, "bind" :named("pasttype"))
-.annotate 'line', 255
-    $P659 = $P652."new"($P658)
-.annotate 'line', 254
-    $P660 = $P651."new"($P659, "CONTROL" :named("handle_types_except"))
+    get_global $P632, "@BLOCK"
+    unless_null $P632, vivify_267
+    $P632 = root_new ['parrot';'ResizablePMCArray']
+  vivify_267:
+    set $P633, $P632[0]
+    unless_null $P633, vivify_268
+    new $P633, "Undef"
+  vivify_268:
+    $P634 = $P633."loadinit"()
+    find_lex $P635, "$/"
+    unless_null $P635, vivify_269
+    $P635 = root_new ['parrot';'Hash']
+  vivify_269:
+    set $P636, $P635["blorst"]
+    unless_null $P636, vivify_270
+    new $P636, "Undef"
+  vivify_270:
+    $P637 = $P636."ast"()
+    $P634."push"($P637)
 .annotate 'line', 252
-    new $P661, "ResizablePMCArray"
-    push $P661, $P660
-    $P650."handlers"($P661)
-  unless_647_end:
-.annotate 'line', 266
-    find_lex $P662, "$/"
-    find_lex $P663, "$past"
-    $P664 = $P662."!make"($P663)
-.annotate 'line', 246
-    .return ($P664)
-  control_632:
+    find_lex $P638, "$/"
+    get_hll_global $P639, ["PAST"], "Stmts"
+    find_lex $P640, "$/"
+    $P641 = $P639."new"($P640 :named("node"))
+    $P642 = $P638."!make"($P641)
+.annotate 'line', 250
+    .return ($P642)
+  control_629:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P665, exception, "payload"
-    .return ($P665)
+    getattribute $P643, exception, "payload"
+    .return ($P643)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "blorst"  :subid("43_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_669
-.annotate 'line', 269
-    new $P668, 'ExceptionHandler'
-    set_addr $P668, control_667
-    $P668."handle_types"(57)
-    push_eh $P668
-    .lex "self", self
-    .lex "$/", param_669
-.annotate 'line', 270
-    find_lex $P670, "$/"
-.annotate 'line', 271
-    find_lex $P673, "$/"
-    unless_null $P673, vivify_260
-    $P673 = root_new ['parrot';'Hash']
-  vivify_260:
-    set $P674, $P673["block"]
-    unless_null $P674, vivify_261
-    new $P674, "Undef"
-  vivify_261:
-    if $P674, if_672
-.annotate 'line', 272
-    find_lex $P679, "$/"
-    unless_null $P679, vivify_262
-    $P679 = root_new ['parrot';'Hash']
-  vivify_262:
-    set $P680, $P679["statement"]
-    unless_null $P680, vivify_263
-    new $P680, "Undef"
-  vivify_263:
-    $P681 = $P680."ast"()
-    set $P671, $P681
-.annotate 'line', 271
-    goto if_672_end
-  if_672:
+.include "except_types.pasm"
+.sub "statement_prefix:sym<try>"  :subid("43_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_647
+.annotate 'line', 255
+    new $P646, 'ExceptionHandler'
+    set_addr $P646, control_645
+    $P646."handle_types"(.CONTROL_RETURN)
+    push_eh $P646
+    .lex "self", self
+    .lex "$/", param_647
+.annotate 'line', 256
+    new $P648, "Undef"
+    .lex "$past", $P648
+    find_lex $P649, "$/"
+    unless_null $P649, vivify_271
+    $P649 = root_new ['parrot';'Hash']
+  vivify_271:
+    set $P650, $P649["blorst"]
+    unless_null $P650, vivify_272
+    new $P650, "Undef"
+  vivify_272:
+    $P651 = $P650."ast"()
+    store_lex "$past", $P651
+.annotate 'line', 257
+    find_lex $P653, "$past"
+    $S654 = $P653."WHAT"()
+    isne $I655, $S654, "PAST::Block()"
+    unless $I655, if_652_end
+.annotate 'line', 258
+    get_hll_global $P656, ["PAST"], "Block"
+    find_lex $P657, "$past"
+    find_lex $P658, "$/"
+    $P659 = $P656."new"($P657, "immediate" :named("blocktype"), $P658 :named("node"))
+    store_lex "$past", $P659
+  if_652_end:
+.annotate 'line', 260
+    find_lex $P661, "$past"
+    $P662 = $P661."handlers"()
+    if $P662, unless_660_end
+.annotate 'line', 261
+    find_lex $P663, "$past"
+    get_hll_global $P664, ["PAST"], "Control"
+.annotate 'line', 263
+    get_hll_global $P665, ["PAST"], "Stmts"
+.annotate 'line', 264
+    get_hll_global $P666, ["PAST"], "Op"
+.annotate 'line', 265
+    get_hll_global $P667, ["PAST"], "Var"
+.annotate 'line', 266
+    get_hll_global $P668, ["PAST"], "Var"
+    $P669 = $P668."new"("register" :named("scope"), "exception" :named("name"))
+    $P670 = $P667."new"($P669, "handled", "keyed" :named("scope"))
+.annotate 'line', 265
+    $P671 = $P666."new"($P670, 1, "bind" :named("pasttype"))
+.annotate 'line', 264
+    $P672 = $P665."new"($P671)
+.annotate 'line', 263
+    $P673 = $P664."new"($P672, "CONTROL" :named("handle_types_except"))
+.annotate 'line', 261
+    new $P674, "ResizablePMCArray"
+    push $P674, $P673
+    $P663."handlers"($P674)
+  unless_660_end:
+.annotate 'line', 275
     find_lex $P675, "$/"
-    unless_null $P675, vivify_264
-    $P675 = root_new ['parrot';'Hash']
-  vivify_264:
-    set $P676, $P675["block"]
-    unless_null $P676, vivify_265
-    new $P676, "Undef"
-  vivify_265:
-    $P677 = $P676."ast"()
-    $P678 = "block_immediate"($P677)
-    set $P671, $P678
-  if_672_end:
-    $P682 = $P670."!make"($P671)
-.annotate 'line', 269
-    .return ($P682)
-  control_667:
+    find_lex $P676, "$past"
+    $P677 = $P675."!make"($P676)
+.annotate 'line', 255
+    .return ($P677)
+  control_645:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P683, exception, "payload"
-    .return ($P683)
+    getattribute $P678, exception, "payload"
+    .return ($P678)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_cond:sym<if>"  :subid("44_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_687
-.annotate 'line', 277
-    new $P686, 'ExceptionHandler'
-    set_addr $P686, control_685
-    $P686."handle_types"(57)
-    push_eh $P686
-    .lex "self", self
-    .lex "$/", param_687
+.include "except_types.pasm"
+.sub "blorst"  :subid("44_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_682
+.annotate 'line', 278
+    new $P681, 'ExceptionHandler'
+    set_addr $P681, control_680
+    $P681."handle_types"(.CONTROL_RETURN)
+    push_eh $P681
+    .lex "self", self
+    .lex "$/", param_682
+.annotate 'line', 279
+    find_lex $P683, "$/"
+.annotate 'line', 280
+    find_lex $P686, "$/"
+    unless_null $P686, vivify_273
+    $P686 = root_new ['parrot';'Hash']
+  vivify_273:
+    set $P687, $P686["block"]
+    unless_null $P687, vivify_274
+    new $P687, "Undef"
+  vivify_274:
+    if $P687, if_685
+.annotate 'line', 281
+    find_lex $P692, "$/"
+    unless_null $P692, vivify_275
+    $P692 = root_new ['parrot';'Hash']
+  vivify_275:
+    set $P693, $P692["statement"]
+    unless_null $P693, vivify_276
+    new $P693, "Undef"
+  vivify_276:
+    $P694 = $P693."ast"()
+    set $P684, $P694
+.annotate 'line', 280
+    goto if_685_end
+  if_685:
     find_lex $P688, "$/"
-    find_lex $P689, "$/"
-    unless_null $P689, vivify_266
-    $P689 = root_new ['parrot';'Hash']
-  vivify_266:
-    set $P690, $P689["cond"]
-    unless_null $P690, vivify_267
-    new $P690, "Undef"
-  vivify_267:
-    $P691 = $P690."ast"()
-    $P692 = $P688."!make"($P691)
-    .return ($P692)
-  control_685:
+    unless_null $P688, vivify_277
+    $P688 = root_new ['parrot';'Hash']
+  vivify_277:
+    set $P689, $P688["block"]
+    unless_null $P689, vivify_278
+    new $P689, "Undef"
+  vivify_278:
+    $P690 = $P689."ast"()
+    $P691 = "block_immediate"($P690)
+    set $P684, $P691
+  if_685_end:
+    $P695 = $P683."!make"($P684)
+.annotate 'line', 278
+    .return ($P695)
+  control_680:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P693, exception, "payload"
-    .return ($P693)
+    getattribute $P696, exception, "payload"
+    .return ($P696)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_cond:sym<unless>"  :subid("45_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_697
-.annotate 'line', 278
-    new $P696, 'ExceptionHandler'
-    set_addr $P696, control_695
-    $P696."handle_types"(57)
-    push_eh $P696
-    .lex "self", self
-    .lex "$/", param_697
-    find_lex $P698, "$/"
-    find_lex $P699, "$/"
-    unless_null $P699, vivify_268
-    $P699 = root_new ['parrot';'Hash']
-  vivify_268:
-    set $P700, $P699["cond"]
-    unless_null $P700, vivify_269
-    new $P700, "Undef"
-  vivify_269:
-    $P701 = $P700."ast"()
-    $P702 = $P698."!make"($P701)
-    .return ($P702)
-  control_695:
+.include "except_types.pasm"
+.sub "statement_mod_cond:sym<if>"  :subid("45_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_700
+.annotate 'line', 286
+    new $P699, 'ExceptionHandler'
+    set_addr $P699, control_698
+    $P699."handle_types"(.CONTROL_RETURN)
+    push_eh $P699
+    .lex "self", self
+    .lex "$/", param_700
+    find_lex $P701, "$/"
+    find_lex $P702, "$/"
+    unless_null $P702, vivify_279
+    $P702 = root_new ['parrot';'Hash']
+  vivify_279:
+    set $P703, $P702["cond"]
+    unless_null $P703, vivify_280
+    new $P703, "Undef"
+  vivify_280:
+    $P704 = $P703."ast"()
+    $P705 = $P701."!make"($P704)
+    .return ($P705)
+  control_698:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P703, exception, "payload"
-    .return ($P703)
+    getattribute $P706, exception, "payload"
+    .return ($P706)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_loop:sym<while>"  :subid("46_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_707
-.annotate 'line', 280
-    new $P706, 'ExceptionHandler'
-    set_addr $P706, control_705
-    $P706."handle_types"(57)
-    push_eh $P706
-    .lex "self", self
-    .lex "$/", param_707
-    find_lex $P708, "$/"
-    find_lex $P709, "$/"
-    unless_null $P709, vivify_270
-    $P709 = root_new ['parrot';'Hash']
-  vivify_270:
-    set $P710, $P709["cond"]
-    unless_null $P710, vivify_271
-    new $P710, "Undef"
-  vivify_271:
-    $P711 = $P710."ast"()
-    $P712 = $P708."!make"($P711)
-    .return ($P712)
-  control_705:
+.include "except_types.pasm"
+.sub "statement_mod_cond:sym<unless>"  :subid("46_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_710
+.annotate 'line', 287
+    new $P709, 'ExceptionHandler'
+    set_addr $P709, control_708
+    $P709."handle_types"(.CONTROL_RETURN)
+    push_eh $P709
+    .lex "self", self
+    .lex "$/", param_710
+    find_lex $P711, "$/"
+    find_lex $P712, "$/"
+    unless_null $P712, vivify_281
+    $P712 = root_new ['parrot';'Hash']
+  vivify_281:
+    set $P713, $P712["cond"]
+    unless_null $P713, vivify_282
+    new $P713, "Undef"
+  vivify_282:
+    $P714 = $P713."ast"()
+    $P715 = $P711."!make"($P714)
+    .return ($P715)
+  control_708:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P713, exception, "payload"
-    .return ($P713)
+    getattribute $P716, exception, "payload"
+    .return ($P716)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_loop:sym<until>"  :subid("47_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_717
-.annotate 'line', 281
-    new $P716, 'ExceptionHandler'
-    set_addr $P716, control_715
-    $P716."handle_types"(57)
-    push_eh $P716
-    .lex "self", self
-    .lex "$/", param_717
-    find_lex $P718, "$/"
-    find_lex $P719, "$/"
-    unless_null $P719, vivify_272
-    $P719 = root_new ['parrot';'Hash']
-  vivify_272:
-    set $P720, $P719["cond"]
-    unless_null $P720, vivify_273
-    new $P720, "Undef"
-  vivify_273:
-    $P721 = $P720."ast"()
-    $P722 = $P718."!make"($P721)
-    .return ($P722)
-  control_715:
+.include "except_types.pasm"
+.sub "statement_mod_loop:sym<while>"  :subid("47_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_720
+.annotate 'line', 289
+    new $P719, 'ExceptionHandler'
+    set_addr $P719, control_718
+    $P719."handle_types"(.CONTROL_RETURN)
+    push_eh $P719
+    .lex "self", self
+    .lex "$/", param_720
+    find_lex $P721, "$/"
+    find_lex $P722, "$/"
+    unless_null $P722, vivify_283
+    $P722 = root_new ['parrot';'Hash']
+  vivify_283:
+    set $P723, $P722["cond"]
+    unless_null $P723, vivify_284
+    new $P723, "Undef"
+  vivify_284:
+    $P724 = $P723."ast"()
+    $P725 = $P721."!make"($P724)
+    .return ($P725)
+  control_718:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P723, exception, "payload"
-    .return ($P723)
+    getattribute $P726, exception, "payload"
+    .return ($P726)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<fatarrow>"  :subid("48_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_727
-.annotate 'line', 285
-    new $P726, 'ExceptionHandler'
-    set_addr $P726, control_725
-    $P726."handle_types"(57)
-    push_eh $P726
-    .lex "self", self
-    .lex "$/", param_727
-    find_lex $P728, "$/"
-    find_lex $P729, "$/"
-    unless_null $P729, vivify_274
-    $P729 = root_new ['parrot';'Hash']
-  vivify_274:
-    set $P730, $P729["fatarrow"]
-    unless_null $P730, vivify_275
-    new $P730, "Undef"
-  vivify_275:
-    $P731 = $P730."ast"()
-    $P732 = $P728."!make"($P731)
-    .return ($P732)
-  control_725:
+.include "except_types.pasm"
+.sub "statement_mod_loop:sym<until>"  :subid("48_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_730
+.annotate 'line', 290
+    new $P729, 'ExceptionHandler'
+    set_addr $P729, control_728
+    $P729."handle_types"(.CONTROL_RETURN)
+    push_eh $P729
+    .lex "self", self
+    .lex "$/", param_730
+    find_lex $P731, "$/"
+    find_lex $P732, "$/"
+    unless_null $P732, vivify_285
+    $P732 = root_new ['parrot';'Hash']
+  vivify_285:
+    set $P733, $P732["cond"]
+    unless_null $P733, vivify_286
+    new $P733, "Undef"
+  vivify_286:
+    $P734 = $P733."ast"()
+    $P735 = $P731."!make"($P734)
+    .return ($P735)
+  control_728:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P733, exception, "payload"
-    .return ($P733)
+    getattribute $P736, exception, "payload"
+    .return ($P736)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<colonpair>"  :subid("49_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_737
-.annotate 'line', 286
-    new $P736, 'ExceptionHandler'
-    set_addr $P736, control_735
-    $P736."handle_types"(57)
-    push_eh $P736
-    .lex "self", self
-    .lex "$/", param_737
-    find_lex $P738, "$/"
-    find_lex $P739, "$/"
-    unless_null $P739, vivify_276
-    $P739 = root_new ['parrot';'Hash']
-  vivify_276:
-    set $P740, $P739["colonpair"]
-    unless_null $P740, vivify_277
-    new $P740, "Undef"
-  vivify_277:
-    $P741 = $P740."ast"()
-    $P742 = $P738."!make"($P741)
-    .return ($P742)
-  control_735:
+.include "except_types.pasm"
+.sub "term:sym<fatarrow>"  :subid("49_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_740
+.annotate 'line', 294
+    new $P739, 'ExceptionHandler'
+    set_addr $P739, control_738
+    $P739."handle_types"(.CONTROL_RETURN)
+    push_eh $P739
+    .lex "self", self
+    .lex "$/", param_740
+    find_lex $P741, "$/"
+    find_lex $P742, "$/"
+    unless_null $P742, vivify_287
+    $P742 = root_new ['parrot';'Hash']
+  vivify_287:
+    set $P743, $P742["fatarrow"]
+    unless_null $P743, vivify_288
+    new $P743, "Undef"
+  vivify_288:
+    $P744 = $P743."ast"()
+    $P745 = $P741."!make"($P744)
+    .return ($P745)
+  control_738:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P743, exception, "payload"
-    .return ($P743)
+    getattribute $P746, exception, "payload"
+    .return ($P746)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<variable>"  :subid("50_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_747
-.annotate 'line', 287
-    new $P746, 'ExceptionHandler'
-    set_addr $P746, control_745
-    $P746."handle_types"(57)
-    push_eh $P746
-    .lex "self", self
-    .lex "$/", param_747
-    find_lex $P748, "$/"
-    find_lex $P749, "$/"
-    unless_null $P749, vivify_278
-    $P749 = root_new ['parrot';'Hash']
-  vivify_278:
-    set $P750, $P749["variable"]
-    unless_null $P750, vivify_279
-    new $P750, "Undef"
-  vivify_279:
-    $P751 = $P750."ast"()
-    $P752 = $P748."!make"($P751)
-    .return ($P752)
-  control_745:
+.include "except_types.pasm"
+.sub "term:sym<colonpair>"  :subid("50_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_750
+.annotate 'line', 295
+    new $P749, 'ExceptionHandler'
+    set_addr $P749, control_748
+    $P749."handle_types"(.CONTROL_RETURN)
+    push_eh $P749
+    .lex "self", self
+    .lex "$/", param_750
+    find_lex $P751, "$/"
+    find_lex $P752, "$/"
+    unless_null $P752, vivify_289
+    $P752 = root_new ['parrot';'Hash']
+  vivify_289:
+    set $P753, $P752["colonpair"]
+    unless_null $P753, vivify_290
+    new $P753, "Undef"
+  vivify_290:
+    $P754 = $P753."ast"()
+    $P755 = $P751."!make"($P754)
+    .return ($P755)
+  control_748:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P753, exception, "payload"
-    .return ($P753)
+    getattribute $P756, exception, "payload"
+    .return ($P756)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<package_declarator>"  :subid("51_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_757
-.annotate 'line', 288
-    new $P756, 'ExceptionHandler'
-    set_addr $P756, control_755
-    $P756."handle_types"(57)
-    push_eh $P756
-    .lex "self", self
-    .lex "$/", param_757
-    find_lex $P758, "$/"
-    find_lex $P759, "$/"
-    unless_null $P759, vivify_280
-    $P759 = root_new ['parrot';'Hash']
-  vivify_280:
-    set $P760, $P759["package_declarator"]
-    unless_null $P760, vivify_281
-    new $P760, "Undef"
-  vivify_281:
-    $P761 = $P760."ast"()
-    $P762 = $P758."!make"($P761)
-    .return ($P762)
-  control_755:
+.include "except_types.pasm"
+.sub "term:sym<variable>"  :subid("51_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_760
+.annotate 'line', 296
+    new $P759, 'ExceptionHandler'
+    set_addr $P759, control_758
+    $P759."handle_types"(.CONTROL_RETURN)
+    push_eh $P759
+    .lex "self", self
+    .lex "$/", param_760
+    find_lex $P761, "$/"
+    find_lex $P762, "$/"
+    unless_null $P762, vivify_291
+    $P762 = root_new ['parrot';'Hash']
+  vivify_291:
+    set $P763, $P762["variable"]
+    unless_null $P763, vivify_292
+    new $P763, "Undef"
+  vivify_292:
+    $P764 = $P763."ast"()
+    $P765 = $P761."!make"($P764)
+    .return ($P765)
+  control_758:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P763, exception, "payload"
-    .return ($P763)
+    getattribute $P766, exception, "payload"
+    .return ($P766)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<scope_declarator>"  :subid("52_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_767
-.annotate 'line', 289
-    new $P766, 'ExceptionHandler'
-    set_addr $P766, control_765
-    $P766."handle_types"(57)
-    push_eh $P766
-    .lex "self", self
-    .lex "$/", param_767
-    find_lex $P768, "$/"
-    find_lex $P769, "$/"
-    unless_null $P769, vivify_282
-    $P769 = root_new ['parrot';'Hash']
-  vivify_282:
-    set $P770, $P769["scope_declarator"]
-    unless_null $P770, vivify_283
-    new $P770, "Undef"
-  vivify_283:
-    $P771 = $P770."ast"()
-    $P772 = $P768."!make"($P771)
-    .return ($P772)
-  control_765:
+.include "except_types.pasm"
+.sub "term:sym<package_declarator>"  :subid("52_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_770
+.annotate 'line', 297
+    new $P769, 'ExceptionHandler'
+    set_addr $P769, control_768
+    $P769."handle_types"(.CONTROL_RETURN)
+    push_eh $P769
+    .lex "self", self
+    .lex "$/", param_770
+    find_lex $P771, "$/"
+    find_lex $P772, "$/"
+    unless_null $P772, vivify_293
+    $P772 = root_new ['parrot';'Hash']
+  vivify_293:
+    set $P773, $P772["package_declarator"]
+    unless_null $P773, vivify_294
+    new $P773, "Undef"
+  vivify_294:
+    $P774 = $P773."ast"()
+    $P775 = $P771."!make"($P774)
+    .return ($P775)
+  control_768:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P773, exception, "payload"
-    .return ($P773)
+    getattribute $P776, exception, "payload"
+    .return ($P776)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<routine_declarator>"  :subid("53_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_777
-.annotate 'line', 290
-    new $P776, 'ExceptionHandler'
-    set_addr $P776, control_775
-    $P776."handle_types"(57)
-    push_eh $P776
-    .lex "self", self
-    .lex "$/", param_777
-    find_lex $P778, "$/"
-    find_lex $P779, "$/"
-    unless_null $P779, vivify_284
-    $P779 = root_new ['parrot';'Hash']
-  vivify_284:
-    set $P780, $P779["routine_declarator"]
-    unless_null $P780, vivify_285
-    new $P780, "Undef"
-  vivify_285:
-    $P781 = $P780."ast"()
-    $P782 = $P778."!make"($P781)
-    .return ($P782)
-  control_775:
+.include "except_types.pasm"
+.sub "term:sym<scope_declarator>"  :subid("53_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_780
+.annotate 'line', 298
+    new $P779, 'ExceptionHandler'
+    set_addr $P779, control_778
+    $P779."handle_types"(.CONTROL_RETURN)
+    push_eh $P779
+    .lex "self", self
+    .lex "$/", param_780
+    find_lex $P781, "$/"
+    find_lex $P782, "$/"
+    unless_null $P782, vivify_295
+    $P782 = root_new ['parrot';'Hash']
+  vivify_295:
+    set $P783, $P782["scope_declarator"]
+    unless_null $P783, vivify_296
+    new $P783, "Undef"
+  vivify_296:
+    $P784 = $P783."ast"()
+    $P785 = $P781."!make"($P784)
+    .return ($P785)
+  control_778:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P783, exception, "payload"
-    .return ($P783)
+    getattribute $P786, exception, "payload"
+    .return ($P786)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<regex_declarator>"  :subid("54_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_787
-.annotate 'line', 291
-    new $P786, 'ExceptionHandler'
-    set_addr $P786, control_785
-    $P786."handle_types"(57)
-    push_eh $P786
-    .lex "self", self
-    .lex "$/", param_787
-    find_lex $P788, "$/"
-    find_lex $P789, "$/"
-    unless_null $P789, vivify_286
-    $P789 = root_new ['parrot';'Hash']
-  vivify_286:
-    set $P790, $P789["regex_declarator"]
-    unless_null $P790, vivify_287
-    new $P790, "Undef"
-  vivify_287:
-    $P791 = $P790."ast"()
-    $P792 = $P788."!make"($P791)
-    .return ($P792)
-  control_785:
+.include "except_types.pasm"
+.sub "term:sym<routine_declarator>"  :subid("54_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_790
+.annotate 'line', 299
+    new $P789, 'ExceptionHandler'
+    set_addr $P789, control_788
+    $P789."handle_types"(.CONTROL_RETURN)
+    push_eh $P789
+    .lex "self", self
+    .lex "$/", param_790
+    find_lex $P791, "$/"
+    find_lex $P792, "$/"
+    unless_null $P792, vivify_297
+    $P792 = root_new ['parrot';'Hash']
+  vivify_297:
+    set $P793, $P792["routine_declarator"]
+    unless_null $P793, vivify_298
+    new $P793, "Undef"
+  vivify_298:
+    $P794 = $P793."ast"()
+    $P795 = $P791."!make"($P794)
+    .return ($P795)
+  control_788:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P793, exception, "payload"
-    .return ($P793)
+    getattribute $P796, exception, "payload"
+    .return ($P796)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<statement_prefix>"  :subid("55_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_797
-.annotate 'line', 292
-    new $P796, 'ExceptionHandler'
-    set_addr $P796, control_795
-    $P796."handle_types"(57)
-    push_eh $P796
-    .lex "self", self
-    .lex "$/", param_797
-    find_lex $P798, "$/"
-    find_lex $P799, "$/"
-    unless_null $P799, vivify_288
-    $P799 = root_new ['parrot';'Hash']
-  vivify_288:
-    set $P800, $P799["statement_prefix"]
-    unless_null $P800, vivify_289
-    new $P800, "Undef"
-  vivify_289:
-    $P801 = $P800."ast"()
-    $P802 = $P798."!make"($P801)
-    .return ($P802)
-  control_795:
+.include "except_types.pasm"
+.sub "term:sym<regex_declarator>"  :subid("55_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_800
+.annotate 'line', 300
+    new $P799, 'ExceptionHandler'
+    set_addr $P799, control_798
+    $P799."handle_types"(.CONTROL_RETURN)
+    push_eh $P799
+    .lex "self", self
+    .lex "$/", param_800
+    find_lex $P801, "$/"
+    find_lex $P802, "$/"
+    unless_null $P802, vivify_299
+    $P802 = root_new ['parrot';'Hash']
+  vivify_299:
+    set $P803, $P802["regex_declarator"]
+    unless_null $P803, vivify_300
+    new $P803, "Undef"
+  vivify_300:
+    $P804 = $P803."ast"()
+    $P805 = $P801."!make"($P804)
+    .return ($P805)
+  control_798:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P803, exception, "payload"
-    .return ($P803)
+    getattribute $P806, exception, "payload"
+    .return ($P806)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<lambda>"  :subid("56_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_807
-.annotate 'line', 293
-    new $P806, 'ExceptionHandler'
-    set_addr $P806, control_805
-    $P806."handle_types"(57)
-    push_eh $P806
-    .lex "self", self
-    .lex "$/", param_807
-    find_lex $P808, "$/"
-    find_lex $P809, "$/"
-    unless_null $P809, vivify_290
-    $P809 = root_new ['parrot';'Hash']
-  vivify_290:
-    set $P810, $P809["pblock"]
-    unless_null $P810, vivify_291
-    new $P810, "Undef"
-  vivify_291:
-    $P811 = $P810."ast"()
-    $P812 = $P808."!make"($P811)
-    .return ($P812)
-  control_805:
+.include "except_types.pasm"
+.sub "term:sym<statement_prefix>"  :subid("56_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_810
+.annotate 'line', 301
+    new $P809, 'ExceptionHandler'
+    set_addr $P809, control_808
+    $P809."handle_types"(.CONTROL_RETURN)
+    push_eh $P809
+    .lex "self", self
+    .lex "$/", param_810
+    find_lex $P811, "$/"
+    find_lex $P812, "$/"
+    unless_null $P812, vivify_301
+    $P812 = root_new ['parrot';'Hash']
+  vivify_301:
+    set $P813, $P812["statement_prefix"]
+    unless_null $P813, vivify_302
+    new $P813, "Undef"
+  vivify_302:
+    $P814 = $P813."ast"()
+    $P815 = $P811."!make"($P814)
+    .return ($P815)
+  control_808:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P813, exception, "payload"
-    .return ($P813)
+    getattribute $P816, exception, "payload"
+    .return ($P816)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "fatarrow"  :subid("57_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_817
-.annotate 'line', 295
-    new $P816, 'ExceptionHandler'
-    set_addr $P816, control_815
-    $P816."handle_types"(57)
-    push_eh $P816
-    .lex "self", self
-    .lex "$/", param_817
-.annotate 'line', 296
-    new $P818, "Undef"
-    .lex "$past", $P818
-    find_lex $P819, "$/"
-    unless_null $P819, vivify_292
-    $P819 = root_new ['parrot';'Hash']
-  vivify_292:
-    set $P820, $P819["val"]
-    unless_null $P820, vivify_293
-    new $P820, "Undef"
-  vivify_293:
-    $P821 = $P820."ast"()
-    store_lex "$past", $P821
-.annotate 'line', 297
-    find_lex $P822, "$past"
-    find_lex $P823, "$/"
-    unless_null $P823, vivify_294
-    $P823 = root_new ['parrot';'Hash']
-  vivify_294:
-    set $P824, $P823["key"]
-    unless_null $P824, vivify_295
-    new $P824, "Undef"
-  vivify_295:
-    $P825 = $P824."Str"()
-    $P822."named"($P825)
-.annotate 'line', 298
-    find_lex $P826, "$/"
-    find_lex $P827, "$past"
-    $P828 = $P826."!make"($P827)
-.annotate 'line', 295
-    .return ($P828)
-  control_815:
+.include "except_types.pasm"
+.sub "term:sym<lambda>"  :subid("57_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_820
+.annotate 'line', 302
+    new $P819, 'ExceptionHandler'
+    set_addr $P819, control_818
+    $P819."handle_types"(.CONTROL_RETURN)
+    push_eh $P819
+    .lex "self", self
+    .lex "$/", param_820
+    find_lex $P821, "$/"
+    find_lex $P822, "$/"
+    unless_null $P822, vivify_303
+    $P822 = root_new ['parrot';'Hash']
+  vivify_303:
+    set $P823, $P822["pblock"]
+    unless_null $P823, vivify_304
+    new $P823, "Undef"
+  vivify_304:
+    $P824 = $P823."ast"()
+    $P825 = $P821."!make"($P824)
+    .return ($P825)
+  control_818:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P829, exception, "payload"
-    .return ($P829)
+    getattribute $P826, exception, "payload"
+    .return ($P826)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "colonpair"  :subid("58_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_833
-.annotate 'line', 301
-    new $P832, 'ExceptionHandler'
-    set_addr $P832, control_831
-    $P832."handle_types"(57)
-    push_eh $P832
-    .lex "self", self
-    .lex "$/", param_833
-.annotate 'line', 302
-    new $P834, "Undef"
-    .lex "$past", $P834
-.annotate 'line', 303
-    find_lex $P837, "$/"
-    unless_null $P837, vivify_296
-    $P837 = root_new ['parrot';'Hash']
-  vivify_296:
-    set $P838, $P837["circumfix"]
-    unless_null $P838, vivify_297
-    new $P838, "Undef"
-  vivify_297:
-    if $P838, if_836
+.include "except_types.pasm"
+.sub "fatarrow"  :subid("58_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_830
 .annotate 'line', 304
-    get_hll_global $P843, ["PAST"], "Val"
-    find_lex $P844, "$/"
-    unless_null $P844, vivify_298
-    $P844 = root_new ['parrot';'Hash']
-  vivify_298:
-    set $P845, $P844["not"]
-    unless_null $P845, vivify_299
-    new $P845, "Undef"
-  vivify_299:
-    isfalse $I846, $P845
-    $P847 = $P843."new"($I846 :named("value"))
-    set $P835, $P847
-.annotate 'line', 303
-    goto if_836_end
-  if_836:
-    find_lex $P839, "$/"
-    unless_null $P839, vivify_300
-    $P839 = root_new ['parrot';'Hash']
-  vivify_300:
-    set $P840, $P839["circumfix"]
-    unless_null $P840, vivify_301
-    $P840 = root_new ['parrot';'ResizablePMCArray']
-  vivify_301:
-    set $P841, $P840[0]
-    unless_null $P841, vivify_302
-    new $P841, "Undef"
-  vivify_302:
-    $P842 = $P841."ast"()
-    set $P835, $P842
-  if_836_end:
-    store_lex "$past", $P835
+    new $P829, 'ExceptionHandler'
+    set_addr $P829, control_828
+    $P829."handle_types"(.CONTROL_RETURN)
+    push_eh $P829
+    .lex "self", self
+    .lex "$/", param_830
 .annotate 'line', 305
-    find_lex $P848, "$past"
-    find_lex $P849, "$/"
-    unless_null $P849, vivify_303
-    $P849 = root_new ['parrot';'Hash']
-  vivify_303:
-    set $P850, $P849["identifier"]
-    unless_null $P850, vivify_304
-    new $P850, "Undef"
-  vivify_304:
-    set $S851, $P850
-    $P848."named"($S851)
+    new $P831, "Undef"
+    .lex "$past", $P831
+    find_lex $P832, "$/"
+    unless_null $P832, vivify_305
+    $P832 = root_new ['parrot';'Hash']
+  vivify_305:
+    set $P833, $P832["val"]
+    unless_null $P833, vivify_306
+    new $P833, "Undef"
+  vivify_306:
+    $P834 = $P833."ast"()
+    store_lex "$past", $P834
 .annotate 'line', 306
-    find_lex $P852, "$/"
-    find_lex $P853, "$past"
-    $P854 = $P852."!make"($P853)
-.annotate 'line', 301
-    .return ($P854)
-  control_831:
+    find_lex $P835, "$past"
+    find_lex $P836, "$/"
+    unless_null $P836, vivify_307
+    $P836 = root_new ['parrot';'Hash']
+  vivify_307:
+    set $P837, $P836["key"]
+    unless_null $P837, vivify_308
+    new $P837, "Undef"
+  vivify_308:
+    $P838 = $P837."Str"()
+    $P835."named"($P838)
+.annotate 'line', 307
+    find_lex $P839, "$/"
+    find_lex $P840, "$past"
+    $P841 = $P839."!make"($P840)
+.annotate 'line', 304
+    .return ($P841)
+  control_828:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P855, exception, "payload"
-    .return ($P855)
+    getattribute $P842, exception, "payload"
+    .return ($P842)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "variable"  :subid("59_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_859
-.annotate 'line', 309
-    .const 'Sub' $P872 = "60_1274022903.56472" 
-    capture_lex $P872
-    new $P858, 'ExceptionHandler'
-    set_addr $P858, control_857
-    $P858."handle_types"(57)
-    push_eh $P858
-    .lex "self", self
-    .lex "$/", param_859
+.include "except_types.pasm"
+.sub "colonpair"  :subid("59_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_846
 .annotate 'line', 310
-    new $P860, "Undef"
-    .lex "$past", $P860
-.annotate 'line', 309
-    find_lex $P861, "$past"
+    new $P845, 'ExceptionHandler'
+    set_addr $P845, control_844
+    $P845."handle_types"(.CONTROL_RETURN)
+    push_eh $P845
+    .lex "self", self
+    .lex "$/", param_846
 .annotate 'line', 311
-    find_lex $P863, "$/"
-    unless_null $P863, vivify_305
-    $P863 = root_new ['parrot';'Hash']
-  vivify_305:
-    set $P864, $P863["postcircumfix"]
-    unless_null $P864, vivify_306
-    new $P864, "Undef"
-  vivify_306:
-    if $P864, if_862
-.annotate 'line', 315
-    .const 'Sub' $P872 = "60_1274022903.56472" 
-    capture_lex $P872
-    $P872()
-    goto if_862_end
-  if_862:
+    new $P847, "Undef"
+    .lex "$past", $P847
 .annotate 'line', 312
-    find_lex $P865, "$/"
-    unless_null $P865, vivify_323
-    $P865 = root_new ['parrot';'Hash']
-  vivify_323:
-    set $P866, $P865["postcircumfix"]
-    unless_null $P866, vivify_324
-    new $P866, "Undef"
-  vivify_324:
-    $P867 = $P866."ast"()
-    store_lex "$past", $P867
+    find_lex $P850, "$/"
+    unless_null $P850, vivify_309
+    $P850 = root_new ['parrot';'Hash']
+  vivify_309:
+    set $P851, $P850["circumfix"]
+    unless_null $P851, vivify_310
+    new $P851, "Undef"
+  vivify_310:
+    if $P851, if_849
 .annotate 'line', 313
-    find_lex $P868, "$past"
-    get_hll_global $P869, ["PAST"], "Var"
-    $P870 = $P869."new"("$/" :named("name"))
-    $P868."unshift"($P870)
-  if_862_end:
-.annotate 'line', 344
-    find_lex $P941, "$/"
-    find_lex $P942, "$past"
-    $P943 = $P941."!make"($P942)
-.annotate 'line', 309
-    .return ($P943)
-  control_857:
+    get_hll_global $P856, ["PAST"], "Val"
+    find_lex $P857, "$/"
+    unless_null $P857, vivify_311
+    $P857 = root_new ['parrot';'Hash']
+  vivify_311:
+    set $P858, $P857["not"]
+    unless_null $P858, vivify_312
+    new $P858, "Undef"
+  vivify_312:
+    isfalse $I859, $P858
+    $P860 = $P856."new"($I859 :named("value"))
+    set $P848, $P860
+.annotate 'line', 312
+    goto if_849_end
+  if_849:
+    find_lex $P852, "$/"
+    unless_null $P852, vivify_313
+    $P852 = root_new ['parrot';'Hash']
+  vivify_313:
+    set $P853, $P852["circumfix"]
+    unless_null $P853, vivify_314
+    $P853 = root_new ['parrot';'ResizablePMCArray']
+  vivify_314:
+    set $P854, $P853[0]
+    unless_null $P854, vivify_315
+    new $P854, "Undef"
+  vivify_315:
+    $P855 = $P854."ast"()
+    set $P848, $P855
+  if_849_end:
+    store_lex "$past", $P848
+.annotate 'line', 314
+    find_lex $P861, "$past"
+    find_lex $P862, "$/"
+    unless_null $P862, vivify_316
+    $P862 = root_new ['parrot';'Hash']
+  vivify_316:
+    set $P863, $P862["identifier"]
+    unless_null $P863, vivify_317
+    new $P863, "Undef"
+  vivify_317:
+    set $S864, $P863
+    $P861."named"($S864)
+.annotate 'line', 315
+    find_lex $P865, "$/"
+    find_lex $P866, "$past"
+    $P867 = $P865."!make"($P866)
+.annotate 'line', 310
+    .return ($P867)
+  control_844:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P944, exception, "payload"
-    .return ($P944)
+    getattribute $P868, exception, "payload"
+    .return ($P868)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block871"  :anon :subid("60_1274022903.56472") :outer("59_1274022903.56472")
-.annotate 'line', 316
-    $P873 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@name", $P873
-    get_hll_global $P874, ["NQP"], "Compiler"
-    find_lex $P875, "$/"
-    set $S876, $P875
-    $P877 = $P874."parse_name"($S876)
-    store_lex "@name", $P877
-.annotate 'line', 317
-    get_hll_global $P878, ["PAST"], "Var"
-    find_lex $P879, "@name"
-    $P880 = $P879."pop"()
-    set $S881, $P880
-    $P882 = $P878."new"($S881 :named("name"))
-    store_lex "$past", $P882
+.include "except_types.pasm"
+.sub "variable"  :subid("60_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_872
 .annotate 'line', 318
-    find_lex $P884, "@name"
-    unless $P884, if_883_end
+    .const 'Sub' $P885 = "61_1275811497.55064" 
+    capture_lex $P885
+    new $P871, 'ExceptionHandler'
+    set_addr $P871, control_870
+    $P871."handle_types"(.CONTROL_RETURN)
+    push_eh $P871
+    .lex "self", self
+    .lex "$/", param_872
 .annotate 'line', 319
-    find_lex $P886, "@name"
-    unless_null $P886, vivify_307
-    $P886 = root_new ['parrot';'ResizablePMCArray']
-  vivify_307:
-    set $P887, $P886[0]
-    unless_null $P887, vivify_308
-    new $P887, "Undef"
-  vivify_308:
-    set $S888, $P887
-    iseq $I889, $S888, "GLOBAL"
-    unless $I889, if_885_end
-    find_lex $P890, "@name"
-    $P890."shift"()
-  if_885_end:
+    new $P873, "Undef"
+    .lex "$past", $P873
+.annotate 'line', 318
+    find_lex $P874, "$past"
 .annotate 'line', 320
-    find_lex $P891, "$past"
-    find_lex $P892, "@name"
-    $P891."namespace"($P892)
+    find_lex $P876, "$/"
+    unless_null $P876, vivify_318
+    $P876 = root_new ['parrot';'Hash']
+  vivify_318:
+    set $P877, $P876["postcircumfix"]
+    unless_null $P877, vivify_319
+    new $P877, "Undef"
+  vivify_319:
+    if $P877, if_875
+.annotate 'line', 324
+    .const 'Sub' $P885 = "61_1275811497.55064" 
+    capture_lex $P885
+    $P885()
+    goto if_875_end
+  if_875:
 .annotate 'line', 321
-    find_lex $P893, "$past"
-    $P893."scope"("package")
+    find_lex $P878, "$/"
+    unless_null $P878, vivify_336
+    $P878 = root_new ['parrot';'Hash']
+  vivify_336:
+    set $P879, $P878["postcircumfix"]
+    unless_null $P879, vivify_337
+    new $P879, "Undef"
+  vivify_337:
+    $P880 = $P879."ast"()
+    store_lex "$past", $P880
 .annotate 'line', 322
-    find_lex $P894, "$past"
-    find_lex $P895, "$/"
-    unless_null $P895, vivify_309
-    $P895 = root_new ['parrot';'Hash']
-  vivify_309:
-    set $P896, $P895["sigil"]
-    unless_null $P896, vivify_310
-    new $P896, "Undef"
-  vivify_310:
-    $P897 = "vivitype"($P896)
-    $P894."viviself"($P897)
-.annotate 'line', 323
-    find_lex $P898, "$past"
-    $P898."lvalue"(1)
-  if_883_end:
-.annotate 'line', 325
-    find_lex $P901, "$/"
-    unless_null $P901, vivify_311
-    $P901 = root_new ['parrot';'Hash']
-  vivify_311:
-    set $P902, $P901["twigil"]
-    unless_null $P902, vivify_312
-    $P902 = root_new ['parrot';'ResizablePMCArray']
-  vivify_312:
-    set $P903, $P902[0]
-    unless_null $P903, vivify_313
-    new $P903, "Undef"
-  vivify_313:
-    set $S904, $P903
-    iseq $I905, $S904, "*"
-    if $I905, if_900
-.annotate 'line', 338
-    find_lex $P927, "$/"
-    unless_null $P927, vivify_314
-    $P927 = root_new ['parrot';'Hash']
-  vivify_314:
-    set $P928, $P927["twigil"]
-    unless_null $P928, vivify_315
-    $P928 = root_new ['parrot';'ResizablePMCArray']
-  vivify_315:
-    set $P929, $P928[0]
-    unless_null $P929, vivify_316
-    new $P929, "Undef"
-  vivify_316:
-    set $S930, $P929
-    iseq $I931, $S930, "!"
-    if $I931, if_926
-    new $P925, 'Integer'
-    set $P925, $I931
-    goto if_926_end
-  if_926:
-.annotate 'line', 339
-    find_lex $P932, "$past"
-    get_hll_global $P933, ["PAST"], "Var"
-    $P934 = $P933."new"("self" :named("name"))
-    $P932."push"($P934)
-.annotate 'line', 340
-    find_lex $P935, "$past"
-    $P935."scope"("attribute")
-.annotate 'line', 341
-    find_lex $P936, "$past"
-    find_lex $P937, "$/"
-    unless_null $P937, vivify_317
-    $P937 = root_new ['parrot';'Hash']
-  vivify_317:
-    set $P938, $P937["sigil"]
-    unless_null $P938, vivify_318
-    new $P938, "Undef"
-  vivify_318:
-    $P939 = "vivitype"($P938)
-    $P940 = $P936."viviself"($P939)
-.annotate 'line', 338
-    set $P925, $P940
-  if_926_end:
-    set $P899, $P925
+    find_lex $P881, "$past"
+    get_hll_global $P882, ["PAST"], "Var"
+    $P883 = $P882."new"("$/" :named("name"))
+    $P881."unshift"($P883)
+  if_875_end:
+.annotate 'line', 353
+    find_lex $P954, "$/"
+    find_lex $P955, "$past"
+    $P956 = $P954."!make"($P955)
+.annotate 'line', 318
+    .return ($P956)
+  control_870:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P957, exception, "payload"
+    .return ($P957)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.sub "_block884"  :anon :subid("61_1275811497.55064") :outer("60_1275811497.55064")
 .annotate 'line', 325
-    goto if_900_end
-  if_900:
+    $P886 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@name", $P886
+    get_hll_global $P887, ["NQP"], "Compiler"
+    find_lex $P888, "$/"
+    set $S889, $P888
+    $P890 = $P887."parse_name"($S889)
+    store_lex "@name", $P890
 .annotate 'line', 326
-    find_lex $P906, "$past"
-    $P906."scope"("contextual")
+    get_hll_global $P891, ["PAST"], "Var"
+    find_lex $P892, "@name"
+    $P893 = $P892."pop"()
+    set $S894, $P893
+    $P895 = $P891."new"($S894 :named("name"))
+    store_lex "$past", $P895
 .annotate 'line', 327
-    find_lex $P907, "$past"
+    find_lex $P897, "@name"
+    unless $P897, if_896_end
 .annotate 'line', 328
-    get_hll_global $P908, ["PAST"], "Var"
-.annotate 'line', 330
-    find_lex $P909, "$/"
-    unless_null $P909, vivify_319
-    $P909 = root_new ['parrot';'Hash']
-  vivify_319:
-    set $P910, $P909["sigil"]
-    unless_null $P910, vivify_320
-    new $P910, "Undef"
+    find_lex $P899, "@name"
+    unless_null $P899, vivify_320
+    $P899 = root_new ['parrot';'ResizablePMCArray']
   vivify_320:
-    set $S911, $P910
-    new $P912, 'String'
-    set $P912, $S911
-    find_lex $P913, "$/"
-    unless_null $P913, vivify_321
-    $P913 = root_new ['parrot';'Hash']
+    set $P900, $P899[0]
+    unless_null $P900, vivify_321
+    new $P900, "Undef"
   vivify_321:
-    set $P914, $P913["desigilname"]
-    unless_null $P914, vivify_322
-    new $P914, "Undef"
+    set $S901, $P900
+    iseq $I902, $S901, "GLOBAL"
+    unless $I902, if_898_end
+    find_lex $P903, "@name"
+    $P903."shift"()
+  if_898_end:
+.annotate 'line', 329
+    find_lex $P904, "$past"
+    find_lex $P905, "@name"
+    $P904."namespace"($P905)
+.annotate 'line', 330
+    find_lex $P906, "$past"
+    $P906."scope"("package")
+.annotate 'line', 331
+    find_lex $P907, "$past"
+    find_lex $P908, "$/"
+    unless_null $P908, vivify_322
+    $P908 = root_new ['parrot';'Hash']
   vivify_322:
-    concat $P915, $P912, $P914
+    set $P909, $P908["sigil"]
+    unless_null $P909, vivify_323
+    new $P909, "Undef"
+  vivify_323:
+    $P910 = "vivitype"($P909)
+    $P907."viviself"($P910)
 .annotate 'line', 332
-    get_hll_global $P916, ["PAST"], "Op"
-    new $P917, "String"
-    assign $P917, "Contextual "
-    find_lex $P918, "$/"
-    set $S919, $P918
-    concat $P920, $P917, $S919
-    concat $P921, $P920, " not found"
-    $P922 = $P916."new"($P921, "die" :named("pirop"))
-    $P923 = $P908."new"("package" :named("scope"), "" :named("namespace"), $P915 :named("name"), $P922 :named("viviself"))
-.annotate 'line', 328
-    $P924 = $P907."viviself"($P923)
-.annotate 'line', 325
-    set $P899, $P924
-  if_900_end:
-.annotate 'line', 315
-    .return ($P899)
+    find_lex $P911, "$past"
+    $P911."lvalue"(1)
+  if_896_end:
+.annotate 'line', 334
+    find_lex $P914, "$/"
+    unless_null $P914, vivify_324
+    $P914 = root_new ['parrot';'Hash']
+  vivify_324:
+    set $P915, $P914["twigil"]
+    unless_null $P915, vivify_325
+    $P915 = root_new ['parrot';'ResizablePMCArray']
+  vivify_325:
+    set $P916, $P915[0]
+    unless_null $P916, vivify_326
+    new $P916, "Undef"
+  vivify_326:
+    set $S917, $P916
+    iseq $I918, $S917, "*"
+    if $I918, if_913
+.annotate 'line', 347
+    find_lex $P940, "$/"
+    unless_null $P940, vivify_327
+    $P940 = root_new ['parrot';'Hash']
+  vivify_327:
+    set $P941, $P940["twigil"]
+    unless_null $P941, vivify_328
+    $P941 = root_new ['parrot';'ResizablePMCArray']
+  vivify_328:
+    set $P942, $P941[0]
+    unless_null $P942, vivify_329
+    new $P942, "Undef"
+  vivify_329:
+    set $S943, $P942
+    iseq $I944, $S943, "!"
+    if $I944, if_939
+    new $P938, 'Integer'
+    set $P938, $I944
+    goto if_939_end
+  if_939:
+.annotate 'line', 348
+    find_lex $P945, "$past"
+    get_hll_global $P946, ["PAST"], "Var"
+    $P947 = $P946."new"("self" :named("name"))
+    $P945."push"($P947)
+.annotate 'line', 349
+    find_lex $P948, "$past"
+    $P948."scope"("attribute")
+.annotate 'line', 350
+    find_lex $P949, "$past"
+    find_lex $P950, "$/"
+    unless_null $P950, vivify_330
+    $P950 = root_new ['parrot';'Hash']
+  vivify_330:
+    set $P951, $P950["sigil"]
+    unless_null $P951, vivify_331
+    new $P951, "Undef"
+  vivify_331:
+    $P952 = "vivitype"($P951)
+    $P953 = $P949."viviself"($P952)
+.annotate 'line', 347
+    set $P938, $P953
+  if_939_end:
+    set $P912, $P938
+.annotate 'line', 334
+    goto if_913_end
+  if_913:
+.annotate 'line', 335
+    find_lex $P919, "$past"
+    $P919."scope"("contextual")
+.annotate 'line', 336
+    find_lex $P920, "$past"
+.annotate 'line', 337
+    get_hll_global $P921, ["PAST"], "Var"
+.annotate 'line', 339
+    find_lex $P922, "$/"
+    unless_null $P922, vivify_332
+    $P922 = root_new ['parrot';'Hash']
+  vivify_332:
+    set $P923, $P922["sigil"]
+    unless_null $P923, vivify_333
+    new $P923, "Undef"
+  vivify_333:
+    set $S924, $P923
+    new $P925, 'String'
+    set $P925, $S924
+    find_lex $P926, "$/"
+    unless_null $P926, vivify_334
+    $P926 = root_new ['parrot';'Hash']
+  vivify_334:
+    set $P927, $P926["desigilname"]
+    unless_null $P927, vivify_335
+    new $P927, "Undef"
+  vivify_335:
+    concat $P928, $P925, $P927
+.annotate 'line', 341
+    get_hll_global $P929, ["PAST"], "Op"
+    new $P930, "String"
+    assign $P930, "Contextual "
+    find_lex $P931, "$/"
+    set $S932, $P931
+    concat $P933, $P930, $S932
+    concat $P934, $P933, " not found"
+    $P935 = $P929."new"($P934, "die" :named("pirop"))
+    $P936 = $P921."new"("package" :named("scope"), "" :named("namespace"), $P928 :named("name"), $P935 :named("viviself"))
+.annotate 'line', 337
+    $P937 = $P920."viviself"($P936)
+.annotate 'line', 334
+    set $P912, $P937
+  if_913_end:
+.annotate 'line', 324
+    .return ($P912)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_declarator:sym<module>"  :subid("61_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_948
-.annotate 'line', 347
-    new $P947, 'ExceptionHandler'
-    set_addr $P947, control_946
-    $P947."handle_types"(57)
-    push_eh $P947
+.include "except_types.pasm"
+.sub "package_declarator:sym<module>"  :subid("62_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_961
+.annotate 'line', 356
+    new $P960, 'ExceptionHandler'
+    set_addr $P960, control_959
+    $P960."handle_types"(.CONTROL_RETURN)
+    push_eh $P960
     .lex "self", self
-    .lex "$/", param_948
-    find_lex $P949, "$/"
-    find_lex $P950, "$/"
-    unless_null $P950, vivify_325
-    $P950 = root_new ['parrot';'Hash']
-  vivify_325:
-    set $P951, $P950["package_def"]
-    unless_null $P951, vivify_326
-    new $P951, "Undef"
-  vivify_326:
-    $P952 = $P951."ast"()
-    $P953 = $P949."!make"($P952)
-    .return ($P953)
-  control_946:
+    .lex "$/", param_961
+    find_lex $P962, "$/"
+    find_lex $P963, "$/"
+    unless_null $P963, vivify_338
+    $P963 = root_new ['parrot';'Hash']
+  vivify_338:
+    set $P964, $P963["package_def"]
+    unless_null $P964, vivify_339
+    new $P964, "Undef"
+  vivify_339:
+    $P965 = $P964."ast"()
+    $P966 = $P962."!make"($P965)
+    .return ($P966)
+  control_959:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P954, exception, "payload"
-    .return ($P954)
+    getattribute $P967, exception, "payload"
+    .return ($P967)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_declarator:sym<class>"  :subid("62_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_958
-.annotate 'line', 348
-    new $P957, 'ExceptionHandler'
-    set_addr $P957, control_956
-    $P957."handle_types"(57)
-    push_eh $P957
-    .lex "self", self
-    .lex "$/", param_958
-.annotate 'line', 349
-    new $P959, "Undef"
-    .lex "$past", $P959
-.annotate 'line', 350
-    new $P960, "Undef"
-    .lex "$classinit", $P960
-.annotate 'line', 359
-    new $P961, "Undef"
-    .lex "$parent", $P961
-.annotate 'line', 349
-    find_lex $P962, "$/"
-    unless_null $P962, vivify_327
-    $P962 = root_new ['parrot';'Hash']
-  vivify_327:
-    set $P963, $P962["package_def"]
-    unless_null $P963, vivify_328
-    new $P963, "Undef"
-  vivify_328:
-    $P964 = $P963."ast"()
-    store_lex "$past", $P964
-.annotate 'line', 351
-    get_hll_global $P965, ["PAST"], "Op"
-.annotate 'line', 352
-    get_hll_global $P966, ["PAST"], "Op"
-    $P967 = $P966."new"("    %r = get_root_global [\"parrot\"], \"P6metaclass\"" :named("inline"))
-.annotate 'line', 355
-    find_lex $P968, "$/"
-    unless_null $P968, vivify_329
-    $P968 = root_new ['parrot';'Hash']
-  vivify_329:
-    set $P969, $P968["package_def"]
-    unless_null $P969, vivify_330
-    $P969 = root_new ['parrot';'Hash']
-  vivify_330:
-    set $P970, $P969["name"]
-    unless_null $P970, vivify_331
-    new $P970, "Undef"
-  vivify_331:
-    set $S971, $P970
-    $P972 = $P965."new"($P967, $S971, "new_class" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 351
-    store_lex "$classinit", $P972
+.include "except_types.pasm"
+.sub "package_declarator:sym<class>"  :subid("63_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_971
+.annotate 'line', 357
+    new $P970, 'ExceptionHandler'
+    set_addr $P970, control_969
+    $P970."handle_types"(.CONTROL_RETURN)
+    push_eh $P970
+    .lex "self", self
+    .lex "$/", param_971
+.annotate 'line', 358
+    new $P972, "Undef"
+    .lex "$past", $P972
 .annotate 'line', 359
+    new $P973, "Undef"
+    .lex "$classinit", $P973
+.annotate 'line', 368
+    new $P974, "Undef"
+    .lex "$parent", $P974
+.annotate 'line', 358
     find_lex $P975, "$/"
-    unless_null $P975, vivify_332
+    unless_null $P975, vivify_340
     $P975 = root_new ['parrot';'Hash']
-  vivify_332:
+  vivify_340:
     set $P976, $P975["package_def"]
-    unless_null $P976, vivify_333
-    $P976 = root_new ['parrot';'Hash']
-  vivify_333:
-    set $P977, $P976["parent"]
-    unless_null $P977, vivify_334
-    $P977 = root_new ['parrot';'ResizablePMCArray']
-  vivify_334:
-    set $P978, $P977[0]
-    unless_null $P978, vivify_335
-    new $P978, "Undef"
-  vivify_335:
-    set $S979, $P978
-    unless $S979, unless_974
-    new $P973, 'String'
-    set $P973, $S979
-    goto unless_974_end
-  unless_974:
+    unless_null $P976, vivify_341
+    new $P976, "Undef"
+  vivify_341:
+    $P977 = $P976."ast"()
+    store_lex "$past", $P977
 .annotate 'line', 360
-    find_lex $P982, "$/"
-    unless_null $P982, vivify_336
-    $P982 = root_new ['parrot';'Hash']
-  vivify_336:
-    set $P983, $P982["sym"]
-    unless_null $P983, vivify_337
-    new $P983, "Undef"
-  vivify_337:
-    set $S984, $P983
-    iseq $I985, $S984, "grammar"
-    if $I985, if_981
-    new $P987, "String"
-    assign $P987, ""
-    set $P980, $P987
-    goto if_981_end
-  if_981:
-    new $P986, "String"
-    assign $P986, "Regex::Cursor"
-    set $P980, $P986
-  if_981_end:
-    set $P973, $P980
-  unless_974_end:
-    store_lex "$parent", $P973
+    get_hll_global $P978, ["PAST"], "Op"
 .annotate 'line', 361
-    find_lex $P989, "$parent"
-    unless $P989, if_988_end
-.annotate 'line', 362
-    find_lex $P990, "$classinit"
-    get_hll_global $P991, ["PAST"], "Val"
-    find_lex $P992, "$parent"
-    $P993 = $P991."new"($P992 :named("value"), "parent" :named("named"))
-    $P990."push"($P993)
-  if_988_end:
+    get_hll_global $P979, ["PAST"], "Op"
+    $P980 = $P979."new"("    %r = get_root_global [\"parrot\"], \"P6metaclass\"" :named("inline"))
 .annotate 'line', 364
-    find_lex $P995, "$past"
-    unless_null $P995, vivify_338
-    $P995 = root_new ['parrot';'Hash']
-  vivify_338:
-    set $P996, $P995["attributes"]
-    unless_null $P996, vivify_339
-    new $P996, "Undef"
-  vivify_339:
-    unless $P996, if_994_end
-.annotate 'line', 365
-    find_lex $P997, "$classinit"
-    find_lex $P998, "$past"
-    unless_null $P998, vivify_340
-    $P998 = root_new ['parrot';'Hash']
-  vivify_340:
-    set $P999, $P998["attributes"]
-    unless_null $P999, vivify_341
-    new $P999, "Undef"
-  vivify_341:
-    $P997."push"($P999)
-  if_994_end:
-.annotate 'line', 367
-    get_global $P1000, "@BLOCK"
-    unless_null $P1000, vivify_342
-    $P1000 = root_new ['parrot';'ResizablePMCArray']
+    find_lex $P981, "$/"
+    unless_null $P981, vivify_342
+    $P981 = root_new ['parrot';'Hash']
   vivify_342:
-    set $P1001, $P1000[0]
-    unless_null $P1001, vivify_343
-    new $P1001, "Undef"
+    set $P982, $P981["package_def"]
+    unless_null $P982, vivify_343
+    $P982 = root_new ['parrot';'Hash']
   vivify_343:
-    $P1002 = $P1001."loadinit"()
-    find_lex $P1003, "$classinit"
-    $P1002."push"($P1003)
-.annotate 'line', 368
-    find_lex $P1004, "$/"
-    find_lex $P1005, "$past"
-    $P1006 = $P1004."!make"($P1005)
-.annotate 'line', 348
-    .return ($P1006)
-  control_956:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1007, exception, "payload"
-    .return ($P1007)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "package_def"  :subid("63_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1011
-.annotate 'line', 371
-    new $P1010, 'ExceptionHandler'
-    set_addr $P1010, control_1009
-    $P1010."handle_types"(57)
-    push_eh $P1010
-    .lex "self", self
-    .lex "$/", param_1011
-.annotate 'line', 372
-    new $P1012, "Undef"
-    .lex "$past", $P1012
-    find_lex $P1015, "$/"
-    unless_null $P1015, vivify_344
-    $P1015 = root_new ['parrot';'Hash']
+    set $P983, $P982["name"]
+    unless_null $P983, vivify_344
+    new $P983, "Undef"
   vivify_344:
-    set $P1016, $P1015["block"]
-    unless_null $P1016, vivify_345
-    new $P1016, "Undef"
+    set $S984, $P983
+    $P985 = $P978."new"($P980, $S984, "new_class" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 360
+    store_lex "$classinit", $P985
+.annotate 'line', 368
+    find_lex $P988, "$/"
+    unless_null $P988, vivify_345
+    $P988 = root_new ['parrot';'Hash']
   vivify_345:
-    if $P1016, if_1014
-    find_lex $P1020, "$/"
-    unless_null $P1020, vivify_346
-    $P1020 = root_new ['parrot';'Hash']
+    set $P989, $P988["package_def"]
+    unless_null $P989, vivify_346
+    $P989 = root_new ['parrot';'Hash']
   vivify_346:
-    set $P1021, $P1020["comp_unit"]
-    unless_null $P1021, vivify_347
-    new $P1021, "Undef"
+    set $P990, $P989["parent"]
+    unless_null $P990, vivify_347
+    $P990 = root_new ['parrot';'ResizablePMCArray']
   vivify_347:
-    $P1022 = $P1021."ast"()
-    set $P1013, $P1022
-    goto if_1014_end
-  if_1014:
-    find_lex $P1017, "$/"
-    unless_null $P1017, vivify_348
-    $P1017 = root_new ['parrot';'Hash']
+    set $P991, $P990[0]
+    unless_null $P991, vivify_348
+    new $P991, "Undef"
   vivify_348:
-    set $P1018, $P1017["block"]
-    unless_null $P1018, vivify_349
-    new $P1018, "Undef"
+    set $S992, $P991
+    unless $S992, unless_987
+    new $P986, 'String'
+    set $P986, $S992
+    goto unless_987_end
+  unless_987:
+.annotate 'line', 369
+    find_lex $P995, "$/"
+    unless_null $P995, vivify_349
+    $P995 = root_new ['parrot';'Hash']
   vivify_349:
-    $P1019 = $P1018."ast"()
-    set $P1013, $P1019
-  if_1014_end:
-    store_lex "$past", $P1013
-.annotate 'line', 373
-    find_lex $P1023, "$past"
-    find_lex $P1024, "$/"
-    unless_null $P1024, vivify_350
-    $P1024 = root_new ['parrot';'Hash']
+    set $P996, $P995["sym"]
+    unless_null $P996, vivify_350
+    new $P996, "Undef"
   vivify_350:
-    set $P1025, $P1024["name"]
-    unless_null $P1025, vivify_351
-    $P1025 = root_new ['parrot';'Hash']
+    set $S997, $P996
+    iseq $I998, $S997, "grammar"
+    if $I998, if_994
+    new $P1000, "String"
+    assign $P1000, ""
+    set $P993, $P1000
+    goto if_994_end
+  if_994:
+    new $P999, "String"
+    assign $P999, "Regex::Cursor"
+    set $P993, $P999
+  if_994_end:
+    set $P986, $P993
+  unless_987_end:
+    store_lex "$parent", $P986
+.annotate 'line', 370
+    find_lex $P1002, "$parent"
+    unless $P1002, if_1001_end
+.annotate 'line', 371
+    find_lex $P1003, "$classinit"
+    get_hll_global $P1004, ["PAST"], "Val"
+    find_lex $P1005, "$parent"
+    $P1006 = $P1004."new"($P1005 :named("value"), "parent" :named("named"))
+    $P1003."push"($P1006)
+  if_1001_end:
+.annotate 'line', 373
+    find_lex $P1008, "$past"
+    unless_null $P1008, vivify_351
+    $P1008 = root_new ['parrot';'Hash']
   vivify_351:
-    set $P1026, $P1025["identifier"]
-    unless_null $P1026, vivify_352
-    new $P1026, "Undef"
+    set $P1009, $P1008["attributes"]
+    unless_null $P1009, vivify_352
+    new $P1009, "Undef"
   vivify_352:
-    $P1023."namespace"($P1026)
+    unless $P1009, if_1007_end
 .annotate 'line', 374
-    find_lex $P1027, "$past"
-    $P1027."blocktype"("immediate")
-.annotate 'line', 375
-    find_lex $P1028, "$/"
-    find_lex $P1029, "$past"
-    $P1030 = $P1028."!make"($P1029)
-.annotate 'line', 371
-    .return ($P1030)
-  control_1009:
+    find_lex $P1010, "$classinit"
+    find_lex $P1011, "$past"
+    unless_null $P1011, vivify_353
+    $P1011 = root_new ['parrot';'Hash']
+  vivify_353:
+    set $P1012, $P1011["attributes"]
+    unless_null $P1012, vivify_354
+    new $P1012, "Undef"
+  vivify_354:
+    $P1010."push"($P1012)
+  if_1007_end:
+.annotate 'line', 376
+    get_global $P1013, "@BLOCK"
+    unless_null $P1013, vivify_355
+    $P1013 = root_new ['parrot';'ResizablePMCArray']
+  vivify_355:
+    set $P1014, $P1013[0]
+    unless_null $P1014, vivify_356
+    new $P1014, "Undef"
+  vivify_356:
+    $P1015 = $P1014."loadinit"()
+    find_lex $P1016, "$classinit"
+    $P1015."push"($P1016)
+.annotate 'line', 377
+    find_lex $P1017, "$/"
+    find_lex $P1018, "$past"
+    $P1019 = $P1017."!make"($P1018)
+.annotate 'line', 357
+    .return ($P1019)
+  control_969:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1031, exception, "payload"
-    .return ($P1031)
+    getattribute $P1020, exception, "payload"
+    .return ($P1020)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<my>"  :subid("64_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1035
-.annotate 'line', 378
-    new $P1034, 'ExceptionHandler'
-    set_addr $P1034, control_1033
-    $P1034."handle_types"(57)
-    push_eh $P1034
+.include "except_types.pasm"
+.sub "package_def"  :subid("64_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1024
+.annotate 'line', 380
+    new $P1023, 'ExceptionHandler'
+    set_addr $P1023, control_1022
+    $P1023."handle_types"(.CONTROL_RETURN)
+    push_eh $P1023
     .lex "self", self
-    .lex "$/", param_1035
-    find_lex $P1036, "$/"
+    .lex "$/", param_1024
+.annotate 'line', 381
+    new $P1025, "Undef"
+    .lex "$past", $P1025
+    find_lex $P1028, "$/"
+    unless_null $P1028, vivify_357
+    $P1028 = root_new ['parrot';'Hash']
+  vivify_357:
+    set $P1029, $P1028["block"]
+    unless_null $P1029, vivify_358
+    new $P1029, "Undef"
+  vivify_358:
+    if $P1029, if_1027
+    find_lex $P1033, "$/"
+    unless_null $P1033, vivify_359
+    $P1033 = root_new ['parrot';'Hash']
+  vivify_359:
+    set $P1034, $P1033["comp_unit"]
+    unless_null $P1034, vivify_360
+    new $P1034, "Undef"
+  vivify_360:
+    $P1035 = $P1034."ast"()
+    set $P1026, $P1035
+    goto if_1027_end
+  if_1027:
+    find_lex $P1030, "$/"
+    unless_null $P1030, vivify_361
+    $P1030 = root_new ['parrot';'Hash']
+  vivify_361:
+    set $P1031, $P1030["block"]
+    unless_null $P1031, vivify_362
+    new $P1031, "Undef"
+  vivify_362:
+    $P1032 = $P1031."ast"()
+    set $P1026, $P1032
+  if_1027_end:
+    store_lex "$past", $P1026
+.annotate 'line', 382
+    find_lex $P1036, "$past"
     find_lex $P1037, "$/"
-    unless_null $P1037, vivify_353
+    unless_null $P1037, vivify_363
     $P1037 = root_new ['parrot';'Hash']
-  vivify_353:
-    set $P1038, $P1037["scoped"]
-    unless_null $P1038, vivify_354
-    new $P1038, "Undef"
-  vivify_354:
-    $P1039 = $P1038."ast"()
-    $P1040 = $P1036."!make"($P1039)
-    .return ($P1040)
-  control_1033:
+  vivify_363:
+    set $P1038, $P1037["name"]
+    unless_null $P1038, vivify_364
+    $P1038 = root_new ['parrot';'Hash']
+  vivify_364:
+    set $P1039, $P1038["identifier"]
+    unless_null $P1039, vivify_365
+    new $P1039, "Undef"
+  vivify_365:
+    $P1036."namespace"($P1039)
+.annotate 'line', 383
+    find_lex $P1040, "$past"
+    $P1040."blocktype"("immediate")
+.annotate 'line', 384
+    find_lex $P1041, "$/"
+    find_lex $P1042, "$past"
+    $P1043 = $P1041."!make"($P1042)
+.annotate 'line', 380
+    .return ($P1043)
+  control_1022:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1041, exception, "payload"
-    .return ($P1041)
+    getattribute $P1044, exception, "payload"
+    .return ($P1044)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<our>"  :subid("65_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1045
-.annotate 'line', 379
-    new $P1044, 'ExceptionHandler'
-    set_addr $P1044, control_1043
-    $P1044."handle_types"(57)
-    push_eh $P1044
-    .lex "self", self
-    .lex "$/", param_1045
-    find_lex $P1046, "$/"
-    find_lex $P1047, "$/"
-    unless_null $P1047, vivify_355
-    $P1047 = root_new ['parrot';'Hash']
-  vivify_355:
-    set $P1048, $P1047["scoped"]
-    unless_null $P1048, vivify_356
-    new $P1048, "Undef"
-  vivify_356:
-    $P1049 = $P1048."ast"()
-    $P1050 = $P1046."!make"($P1049)
-    .return ($P1050)
-  control_1043:
+.include "except_types.pasm"
+.sub "scope_declarator:sym<my>"  :subid("65_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1048
+.annotate 'line', 387
+    new $P1047, 'ExceptionHandler'
+    set_addr $P1047, control_1046
+    $P1047."handle_types"(.CONTROL_RETURN)
+    push_eh $P1047
+    .lex "self", self
+    .lex "$/", param_1048
+    find_lex $P1049, "$/"
+    find_lex $P1050, "$/"
+    unless_null $P1050, vivify_366
+    $P1050 = root_new ['parrot';'Hash']
+  vivify_366:
+    set $P1051, $P1050["scoped"]
+    unless_null $P1051, vivify_367
+    new $P1051, "Undef"
+  vivify_367:
+    $P1052 = $P1051."ast"()
+    $P1053 = $P1049."!make"($P1052)
+    .return ($P1053)
+  control_1046:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1051, exception, "payload"
-    .return ($P1051)
+    getattribute $P1054, exception, "payload"
+    .return ($P1054)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<has>"  :subid("66_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1055
-.annotate 'line', 380
-    new $P1054, 'ExceptionHandler'
-    set_addr $P1054, control_1053
-    $P1054."handle_types"(57)
-    push_eh $P1054
-    .lex "self", self
-    .lex "$/", param_1055
-    find_lex $P1056, "$/"
-    find_lex $P1057, "$/"
-    unless_null $P1057, vivify_357
-    $P1057 = root_new ['parrot';'Hash']
-  vivify_357:
-    set $P1058, $P1057["scoped"]
-    unless_null $P1058, vivify_358
-    new $P1058, "Undef"
-  vivify_358:
-    $P1059 = $P1058."ast"()
-    $P1060 = $P1056."!make"($P1059)
-    .return ($P1060)
-  control_1053:
+.include "except_types.pasm"
+.sub "scope_declarator:sym<our>"  :subid("66_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1058
+.annotate 'line', 388
+    new $P1057, 'ExceptionHandler'
+    set_addr $P1057, control_1056
+    $P1057."handle_types"(.CONTROL_RETURN)
+    push_eh $P1057
+    .lex "self", self
+    .lex "$/", param_1058
+    find_lex $P1059, "$/"
+    find_lex $P1060, "$/"
+    unless_null $P1060, vivify_368
+    $P1060 = root_new ['parrot';'Hash']
+  vivify_368:
+    set $P1061, $P1060["scoped"]
+    unless_null $P1061, vivify_369
+    new $P1061, "Undef"
+  vivify_369:
+    $P1062 = $P1061."ast"()
+    $P1063 = $P1059."!make"($P1062)
+    .return ($P1063)
+  control_1056:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1061, exception, "payload"
-    .return ($P1061)
+    getattribute $P1064, exception, "payload"
+    .return ($P1064)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "scoped"  :subid("67_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1065
-.annotate 'line', 382
-    new $P1064, 'ExceptionHandler'
-    set_addr $P1064, control_1063
-    $P1064."handle_types"(57)
-    push_eh $P1064
-    .lex "self", self
-    .lex "$/", param_1065
-.annotate 'line', 383
-    find_lex $P1066, "$/"
-    find_lex $P1067, "$/"
-    unless_null $P1067, vivify_359
-    $P1067 = root_new ['parrot';'Hash']
-  vivify_359:
-    set $P1068, $P1067["declarator"]
-    unless_null $P1068, vivify_360
-    new $P1068, "Undef"
-  vivify_360:
-    $P1069 = $P1068."ast"()
-    $P1070 = $P1066."!make"($P1069)
-.annotate 'line', 382
-    .return ($P1070)
-  control_1063:
+.include "except_types.pasm"
+.sub "scope_declarator:sym<has>"  :subid("67_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1068
+.annotate 'line', 389
+    new $P1067, 'ExceptionHandler'
+    set_addr $P1067, control_1066
+    $P1067."handle_types"(.CONTROL_RETURN)
+    push_eh $P1067
+    .lex "self", self
+    .lex "$/", param_1068
+    find_lex $P1069, "$/"
+    find_lex $P1070, "$/"
+    unless_null $P1070, vivify_370
+    $P1070 = root_new ['parrot';'Hash']
+  vivify_370:
+    set $P1071, $P1070["scoped"]
+    unless_null $P1071, vivify_371
+    new $P1071, "Undef"
+  vivify_371:
+    $P1072 = $P1071."ast"()
+    $P1073 = $P1069."!make"($P1072)
+    .return ($P1073)
+  control_1066:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1071, exception, "payload"
-    .return ($P1071)
+    getattribute $P1074, exception, "payload"
+    .return ($P1074)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "declarator"  :subid("68_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1075
-.annotate 'line', 386
-    new $P1074, 'ExceptionHandler'
-    set_addr $P1074, control_1073
-    $P1074."handle_types"(57)
-    push_eh $P1074
+.include "except_types.pasm"
+.sub "scoped"  :subid("68_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1078
+.annotate 'line', 391
+    new $P1077, 'ExceptionHandler'
+    set_addr $P1077, control_1076
+    $P1077."handle_types"(.CONTROL_RETURN)
+    push_eh $P1077
     .lex "self", self
-    .lex "$/", param_1075
-.annotate 'line', 387
-    find_lex $P1076, "$/"
-.annotate 'line', 388
+    .lex "$/", param_1078
+.annotate 'line', 392
     find_lex $P1079, "$/"
-    unless_null $P1079, vivify_361
-    $P1079 = root_new ['parrot';'Hash']
-  vivify_361:
-    set $P1080, $P1079["routine_declarator"]
-    unless_null $P1080, vivify_362
-    new $P1080, "Undef"
-  vivify_362:
-    if $P1080, if_1078
-.annotate 'line', 389
+.annotate 'line', 393
+    find_lex $P1082, "$/"
+    unless_null $P1082, vivify_372
+    $P1082 = root_new ['parrot';'Hash']
+  vivify_372:
+    set $P1083, $P1082["declarator"]
+    unless_null $P1083, vivify_373
+    new $P1083, "Undef"
+  vivify_373:
+    if $P1083, if_1081
+.annotate 'line', 394
+    find_lex $P1087, "$/"
+    unless_null $P1087, vivify_374
+    $P1087 = root_new ['parrot';'Hash']
+  vivify_374:
+    set $P1088, $P1087["multi_declarator"]
+    unless_null $P1088, vivify_375
+    new $P1088, "Undef"
+  vivify_375:
+    $P1089 = $P1088."ast"()
+    set $P1080, $P1089
+.annotate 'line', 393
+    goto if_1081_end
+  if_1081:
     find_lex $P1084, "$/"
-    unless_null $P1084, vivify_363
+    unless_null $P1084, vivify_376
     $P1084 = root_new ['parrot';'Hash']
-  vivify_363:
-    set $P1085, $P1084["variable_declarator"]
-    unless_null $P1085, vivify_364
+  vivify_376:
+    set $P1085, $P1084["declarator"]
+    unless_null $P1085, vivify_377
     new $P1085, "Undef"
-  vivify_364:
+  vivify_377:
     $P1086 = $P1085."ast"()
-    set $P1077, $P1086
-.annotate 'line', 388
-    goto if_1078_end
-  if_1078:
-    find_lex $P1081, "$/"
-    unless_null $P1081, vivify_365
-    $P1081 = root_new ['parrot';'Hash']
-  vivify_365:
-    set $P1082, $P1081["routine_declarator"]
-    unless_null $P1082, vivify_366
-    new $P1082, "Undef"
-  vivify_366:
-    $P1083 = $P1082."ast"()
-    set $P1077, $P1083
-  if_1078_end:
-    $P1087 = $P1076."!make"($P1077)
-.annotate 'line', 386
-    .return ($P1087)
-  control_1073:
+    set $P1080, $P1086
+  if_1081_end:
+    $P1090 = $P1079."!make"($P1080)
+.annotate 'line', 391
+    .return ($P1090)
+  control_1076:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1088, exception, "payload"
-    .return ($P1088)
+    getattribute $P1091, exception, "payload"
+    .return ($P1091)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "variable_declarator"  :subid("69_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1092
-.annotate 'line', 392
-    .const 'Sub' $P1132 = "70_1274022903.56472" 
-    capture_lex $P1132
-    new $P1091, 'ExceptionHandler'
-    set_addr $P1091, control_1090
-    $P1091."handle_types"(57)
-    push_eh $P1091
-    .lex "self", self
-    .lex "$/", param_1092
-.annotate 'line', 393
-    new $P1093, "Undef"
-    .lex "$past", $P1093
-.annotate 'line', 394
-    new $P1094, "Undef"
-    .lex "$sigil", $P1094
-.annotate 'line', 395
-    new $P1095, "Undef"
-    .lex "$name", $P1095
-.annotate 'line', 396
-    new $P1096, "Undef"
-    .lex "$BLOCK", $P1096
-.annotate 'line', 393
-    find_lex $P1097, "$/"
-    unless_null $P1097, vivify_367
-    $P1097 = root_new ['parrot';'Hash']
-  vivify_367:
-    set $P1098, $P1097["variable"]
-    unless_null $P1098, vivify_368
-    new $P1098, "Undef"
-  vivify_368:
-    $P1099 = $P1098."ast"()
-    store_lex "$past", $P1099
-.annotate 'line', 394
-    find_lex $P1100, "$/"
-    unless_null $P1100, vivify_369
-    $P1100 = root_new ['parrot';'Hash']
-  vivify_369:
-    set $P1101, $P1100["variable"]
-    unless_null $P1101, vivify_370
-    $P1101 = root_new ['parrot';'Hash']
-  vivify_370:
-    set $P1102, $P1101["sigil"]
-    unless_null $P1102, vivify_371
-    new $P1102, "Undef"
-  vivify_371:
-    store_lex "$sigil", $P1102
-.annotate 'line', 395
-    find_lex $P1103, "$past"
-    $P1104 = $P1103."name"()
-    store_lex "$name", $P1104
-.annotate 'line', 396
-    get_global $P1105, "@BLOCK"
-    unless_null $P1105, vivify_372
-    $P1105 = root_new ['parrot';'ResizablePMCArray']
-  vivify_372:
-    set $P1106, $P1105[0]
-    unless_null $P1106, vivify_373
-    new $P1106, "Undef"
-  vivify_373:
-    store_lex "$BLOCK", $P1106
+.include "except_types.pasm"
+.sub "declarator"  :subid("69_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1095
 .annotate 'line', 397
-    find_lex $P1108, "$BLOCK"
-    find_lex $P1109, "$name"
-    $P1110 = $P1108."symbol"($P1109)
-    unless $P1110, if_1107_end
+    new $P1094, 'ExceptionHandler'
+    set_addr $P1094, control_1093
+    $P1094."handle_types"(.CONTROL_RETURN)
+    push_eh $P1094
+    .lex "self", self
+    .lex "$/", param_1095
 .annotate 'line', 398
-    find_lex $P1111, "$/"
-    $P1112 = $P1111."CURSOR"()
-    find_lex $P1113, "$name"
-    $P1112."panic"("Redeclaration of symbol ", $P1113)
-  if_1107_end:
+    find_lex $P1096, "$/"
+.annotate 'line', 399
+    find_lex $P1099, "$/"
+    unless_null $P1099, vivify_378
+    $P1099 = root_new ['parrot';'Hash']
+  vivify_378:
+    set $P1100, $P1099["routine_declarator"]
+    unless_null $P1100, vivify_379
+    new $P1100, "Undef"
+  vivify_379:
+    if $P1100, if_1098
 .annotate 'line', 400
-    find_dynamic_lex $P1115, "$*SCOPE"
-    unless_null $P1115, vivify_374
-    get_hll_global $P1115, "$SCOPE"
-    unless_null $P1115, vivify_375
-    die "Contextual $*SCOPE not found"
-  vivify_375:
-  vivify_374:
-    set $S1116, $P1115
-    iseq $I1117, $S1116, "has"
-    if $I1117, if_1114
-.annotate 'line', 409
-    .const 'Sub' $P1132 = "70_1274022903.56472" 
-    capture_lex $P1132
-    $P1132()
-    goto if_1114_end
-  if_1114:
-.annotate 'line', 401
-    find_lex $P1118, "$BLOCK"
-    find_lex $P1119, "$name"
-    $P1118."symbol"($P1119, "attribute" :named("scope"))
-.annotate 'line', 402
-    find_lex $P1121, "$BLOCK"
-    unless_null $P1121, vivify_380
-    $P1121 = root_new ['parrot';'Hash']
+    find_lex $P1104, "$/"
+    unless_null $P1104, vivify_380
+    $P1104 = root_new ['parrot';'Hash']
   vivify_380:
-    set $P1122, $P1121["attributes"]
-    unless_null $P1122, vivify_381
-    new $P1122, "Undef"
+    set $P1105, $P1104["variable_declarator"]
+    unless_null $P1105, vivify_381
+    new $P1105, "Undef"
   vivify_381:
-    if $P1122, unless_1120_end
-.annotate 'line', 404
-    get_hll_global $P1123, ["PAST"], "Op"
-    $P1124 = $P1123."new"("list" :named("pasttype"), "attr" :named("named"))
-    find_lex $P1125, "$BLOCK"
-    unless_null $P1125, vivify_382
-    $P1125 = root_new ['parrot';'Hash']
-    store_lex "$BLOCK", $P1125
+    $P1106 = $P1105."ast"()
+    set $P1097, $P1106
+.annotate 'line', 399
+    goto if_1098_end
+  if_1098:
+    find_lex $P1101, "$/"
+    unless_null $P1101, vivify_382
+    $P1101 = root_new ['parrot';'Hash']
   vivify_382:
-    set $P1125["attributes"], $P1124
-  unless_1120_end:
-.annotate 'line', 406
-    find_lex $P1126, "$BLOCK"
-    unless_null $P1126, vivify_383
-    $P1126 = root_new ['parrot';'Hash']
+    set $P1102, $P1101["routine_declarator"]
+    unless_null $P1102, vivify_383
+    new $P1102, "Undef"
   vivify_383:
-    set $P1127, $P1126["attributes"]
-    unless_null $P1127, vivify_384
-    new $P1127, "Undef"
-  vivify_384:
-    find_lex $P1128, "$name"
-    $P1127."push"($P1128)
-.annotate 'line', 407
-    get_hll_global $P1129, ["PAST"], "Stmts"
-    $P1130 = $P1129."new"()
-    store_lex "$past", $P1130
-  if_1114_end:
-.annotate 'line', 417
-    find_lex $P1156, "$/"
-    find_lex $P1157, "$past"
-    $P1158 = $P1156."!make"($P1157)
-.annotate 'line', 392
-    .return ($P1158)
-  control_1090:
+    $P1103 = $P1102."ast"()
+    set $P1097, $P1103
+  if_1098_end:
+    $P1107 = $P1096."!make"($P1097)
+.annotate 'line', 397
+    .return ($P1107)
+  control_1093:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1159, exception, "payload"
-    .return ($P1159)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "_block1131"  :anon :subid("70_1274022903.56472") :outer("69_1274022903.56472")
-.annotate 'line', 410
-    new $P1133, "Undef"
-    .lex "$scope", $P1133
-.annotate 'line', 411
-    new $P1134, "Undef"
-    .lex "$decl", $P1134
-.annotate 'line', 410
-    find_dynamic_lex $P1137, "$*SCOPE"
-    unless_null $P1137, vivify_376
-    get_hll_global $P1137, "$SCOPE"
-    unless_null $P1137, vivify_377
-    die "Contextual $*SCOPE not found"
-  vivify_377:
-  vivify_376:
-    set $S1138, $P1137
-    iseq $I1139, $S1138, "our"
-    if $I1139, if_1136
-    new $P1141, "String"
-    assign $P1141, "lexical"
-    set $P1135, $P1141
-    goto if_1136_end
-  if_1136:
-    new $P1140, "String"
-    assign $P1140, "package"
-    set $P1135, $P1140
-  if_1136_end:
-    store_lex "$scope", $P1135
-.annotate 'line', 411
-    get_hll_global $P1142, ["PAST"], "Var"
-    find_lex $P1143, "$name"
-    find_lex $P1144, "$scope"
-.annotate 'line', 412
-    find_lex $P1145, "$sigil"
-    $P1146 = "vivitype"($P1145)
-    find_lex $P1147, "$/"
-    $P1148 = $P1142."new"($P1143 :named("name"), $P1144 :named("scope"), 1 :named("isdecl"), 1 :named("lvalue"), $P1146 :named("viviself"), $P1147 :named("node"))
-.annotate 'line', 411
-    store_lex "$decl", $P1148
-.annotate 'line', 414
-    find_lex $P1149, "$BLOCK"
-    find_lex $P1150, "$name"
-    find_lex $P1151, "$scope"
-    $P1149."symbol"($P1150, $P1151 :named("scope"))
-.annotate 'line', 415
-    find_lex $P1152, "$BLOCK"
-    unless_null $P1152, vivify_378
-    $P1152 = root_new ['parrot';'ResizablePMCArray']
-  vivify_378:
-    set $P1153, $P1152[0]
-    unless_null $P1153, vivify_379
-    new $P1153, "Undef"
-  vivify_379:
-    find_lex $P1154, "$decl"
-    $P1155 = $P1153."push"($P1154)
-.annotate 'line', 409
-    .return ($P1155)
+    getattribute $P1108, exception, "payload"
+    .return ($P1108)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_declarator:sym<sub>"  :subid("71_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1163
-.annotate 'line', 420
-    new $P1162, 'ExceptionHandler'
-    set_addr $P1162, control_1161
-    $P1162."handle_types"(57)
-    push_eh $P1162
-    .lex "self", self
-    .lex "$/", param_1163
-    find_lex $P1164, "$/"
-    find_lex $P1165, "$/"
-    unless_null $P1165, vivify_385
-    $P1165 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "multi_declarator:sym<multi>"  :subid("70_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1112
+.annotate 'line', 403
+    new $P1111, 'ExceptionHandler'
+    set_addr $P1111, control_1110
+    $P1111."handle_types"(.CONTROL_RETURN)
+    push_eh $P1111
+    .lex "self", self
+    .lex "$/", param_1112
+    find_lex $P1113, "$/"
+    find_lex $P1116, "$/"
+    unless_null $P1116, vivify_384
+    $P1116 = root_new ['parrot';'Hash']
+  vivify_384:
+    set $P1117, $P1116["declarator"]
+    unless_null $P1117, vivify_385
+    new $P1117, "Undef"
   vivify_385:
-    set $P1166, $P1165["routine_def"]
-    unless_null $P1166, vivify_386
-    new $P1166, "Undef"
+    if $P1117, if_1115
+    find_lex $P1121, "$/"
+    unless_null $P1121, vivify_386
+    $P1121 = root_new ['parrot';'Hash']
   vivify_386:
-    $P1167 = $P1166."ast"()
-    $P1168 = $P1164."!make"($P1167)
-    .return ($P1168)
-  control_1161:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1169, exception, "payload"
-    .return ($P1169)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "routine_declarator:sym<method>"  :subid("72_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1173
-.annotate 'line', 421
-    new $P1172, 'ExceptionHandler'
-    set_addr $P1172, control_1171
-    $P1172."handle_types"(57)
-    push_eh $P1172
-    .lex "self", self
-    .lex "$/", param_1173
-    find_lex $P1174, "$/"
-    find_lex $P1175, "$/"
-    unless_null $P1175, vivify_387
-    $P1175 = root_new ['parrot';'Hash']
+    set $P1122, $P1121["routine_def"]
+    unless_null $P1122, vivify_387
+    new $P1122, "Undef"
   vivify_387:
-    set $P1176, $P1175["method_def"]
-    unless_null $P1176, vivify_388
-    new $P1176, "Undef"
+    $P1123 = $P1122."ast"()
+    set $P1114, $P1123
+    goto if_1115_end
+  if_1115:
+    find_lex $P1118, "$/"
+    unless_null $P1118, vivify_388
+    $P1118 = root_new ['parrot';'Hash']
   vivify_388:
-    $P1177 = $P1176."ast"()
-    $P1178 = $P1174."!make"($P1177)
-    .return ($P1178)
-  control_1171:
+    set $P1119, $P1118["declarator"]
+    unless_null $P1119, vivify_389
+    new $P1119, "Undef"
+  vivify_389:
+    $P1120 = $P1119."ast"()
+    set $P1114, $P1120
+  if_1115_end:
+    $P1124 = $P1113."!make"($P1114)
+    .return ($P1124)
+  control_1110:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1179, exception, "payload"
-    .return ($P1179)
+    getattribute $P1125, exception, "payload"
+    .return ($P1125)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_def"  :subid("73_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1183
-.annotate 'line', 423
-    .const 'Sub' $P1194 = "74_1274022903.56472" 
-    capture_lex $P1194
-    new $P1182, 'ExceptionHandler'
-    set_addr $P1182, control_1181
-    $P1182."handle_types"(57)
-    push_eh $P1182
-    .lex "self", self
-    .lex "$/", param_1183
-.annotate 'line', 424
-    new $P1184, "Undef"
-    .lex "$past", $P1184
-    find_lex $P1185, "$/"
-    unless_null $P1185, vivify_389
-    $P1185 = root_new ['parrot';'Hash']
-  vivify_389:
-    set $P1186, $P1185["blockoid"]
-    unless_null $P1186, vivify_390
-    new $P1186, "Undef"
+.include "except_types.pasm"
+.sub "multi_declarator:sym<null>"  :subid("71_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1129
+.annotate 'line', 404
+    new $P1128, 'ExceptionHandler'
+    set_addr $P1128, control_1127
+    $P1128."handle_types"(.CONTROL_RETURN)
+    push_eh $P1128
+    .lex "self", self
+    .lex "$/", param_1129
+    find_lex $P1130, "$/"
+    find_lex $P1131, "$/"
+    unless_null $P1131, vivify_390
+    $P1131 = root_new ['parrot';'Hash']
   vivify_390:
-    $P1187 = $P1186."ast"()
-    store_lex "$past", $P1187
-.annotate 'line', 425
-    find_lex $P1188, "$past"
-    $P1188."blocktype"("declaration")
-.annotate 'line', 426
-    find_lex $P1189, "$past"
-    $P1189."control"("return_pir")
-.annotate 'line', 427
-    find_lex $P1191, "$/"
-    unless_null $P1191, vivify_391
-    $P1191 = root_new ['parrot';'Hash']
+    set $P1132, $P1131["declarator"]
+    unless_null $P1132, vivify_391
+    new $P1132, "Undef"
   vivify_391:
-    set $P1192, $P1191["deflongname"]
-    unless_null $P1192, vivify_392
-    new $P1192, "Undef"
-  vivify_392:
-    unless $P1192, if_1190_end
-    .const 'Sub' $P1194 = "74_1274022903.56472" 
-    capture_lex $P1194
-    $P1194()
-  if_1190_end:
-.annotate 'line', 437
-    find_lex $P1226, "$/"
-    find_lex $P1227, "$past"
-    $P1228 = $P1226."!make"($P1227)
-.annotate 'line', 423
-    .return ($P1228)
-  control_1181:
+    $P1133 = $P1132."ast"()
+    $P1134 = $P1130."!make"($P1133)
+    .return ($P1134)
+  control_1127:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1229, exception, "payload"
-    .return ($P1229)
+    getattribute $P1135, exception, "payload"
+    .return ($P1135)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1193"  :anon :subid("74_1274022903.56472") :outer("73_1274022903.56472")
-.annotate 'line', 428
-    new $P1195, "Undef"
-    .lex "$name", $P1195
-    find_lex $P1196, "$/"
-    unless_null $P1196, vivify_393
-    $P1196 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "variable_declarator"  :subid("72_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1139
+.annotate 'line', 407
+    .const 'Sub' $P1179 = "73_1275811497.55064" 
+    capture_lex $P1179
+    new $P1138, 'ExceptionHandler'
+    set_addr $P1138, control_1137
+    $P1138."handle_types"(.CONTROL_RETURN)
+    push_eh $P1138
+    .lex "self", self
+    .lex "$/", param_1139
+.annotate 'line', 408
+    new $P1140, "Undef"
+    .lex "$past", $P1140
+.annotate 'line', 409
+    new $P1141, "Undef"
+    .lex "$sigil", $P1141
+.annotate 'line', 410
+    new $P1142, "Undef"
+    .lex "$name", $P1142
+.annotate 'line', 411
+    new $P1143, "Undef"
+    .lex "$BLOCK", $P1143
+.annotate 'line', 408
+    find_lex $P1144, "$/"
+    unless_null $P1144, vivify_392
+    $P1144 = root_new ['parrot';'Hash']
+  vivify_392:
+    set $P1145, $P1144["variable"]
+    unless_null $P1145, vivify_393
+    new $P1145, "Undef"
   vivify_393:
-    set $P1197, $P1196["sigil"]
-    unless_null $P1197, vivify_394
-    $P1197 = root_new ['parrot';'ResizablePMCArray']
+    $P1146 = $P1145."ast"()
+    store_lex "$past", $P1146
+.annotate 'line', 409
+    find_lex $P1147, "$/"
+    unless_null $P1147, vivify_394
+    $P1147 = root_new ['parrot';'Hash']
   vivify_394:
-    set $P1198, $P1197[0]
-    unless_null $P1198, vivify_395
-    new $P1198, "Undef"
+    set $P1148, $P1147["variable"]
+    unless_null $P1148, vivify_395
+    $P1148 = root_new ['parrot';'Hash']
   vivify_395:
-    set $S1199, $P1198
-    new $P1200, 'String'
-    set $P1200, $S1199
-    find_lex $P1201, "$/"
-    unless_null $P1201, vivify_396
-    $P1201 = root_new ['parrot';'Hash']
+    set $P1149, $P1148["sigil"]
+    unless_null $P1149, vivify_396
+    new $P1149, "Undef"
   vivify_396:
-    set $P1202, $P1201["deflongname"]
-    unless_null $P1202, vivify_397
-    $P1202 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$sigil", $P1149
+.annotate 'line', 410
+    find_lex $P1150, "$past"
+    $P1151 = $P1150."name"()
+    store_lex "$name", $P1151
+.annotate 'line', 411
+    get_global $P1152, "@BLOCK"
+    unless_null $P1152, vivify_397
+    $P1152 = root_new ['parrot';'ResizablePMCArray']
   vivify_397:
-    set $P1203, $P1202[0]
-    unless_null $P1203, vivify_398
-    new $P1203, "Undef"
+    set $P1153, $P1152[0]
+    unless_null $P1153, vivify_398
+    new $P1153, "Undef"
   vivify_398:
-    $S1204 = $P1203."ast"()
-    concat $P1205, $P1200, $S1204
-    store_lex "$name", $P1205
-.annotate 'line', 429
-    find_lex $P1206, "$past"
-    find_lex $P1207, "$name"
-    $P1206."name"($P1207)
-.annotate 'line', 430
-    find_dynamic_lex $P1210, "$*SCOPE"
-    unless_null $P1210, vivify_399
-    get_hll_global $P1210, "$SCOPE"
-    unless_null $P1210, vivify_400
+    store_lex "$BLOCK", $P1153
+.annotate 'line', 412
+    find_lex $P1155, "$BLOCK"
+    find_lex $P1156, "$name"
+    $P1157 = $P1155."symbol"($P1156)
+    unless $P1157, if_1154_end
+.annotate 'line', 413
+    find_lex $P1158, "$/"
+    $P1159 = $P1158."CURSOR"()
+    find_lex $P1160, "$name"
+    $P1159."panic"("Redeclaration of symbol ", $P1160)
+  if_1154_end:
+.annotate 'line', 415
+    find_dynamic_lex $P1162, "$*SCOPE"
+    unless_null $P1162, vivify_399
+    get_hll_global $P1162, "$SCOPE"
+    unless_null $P1162, vivify_400
     die "Contextual $*SCOPE not found"
   vivify_400:
   vivify_399:
-    set $S1211, $P1210
-    isne $I1212, $S1211, "our"
-    if $I1212, if_1209
-    new $P1208, 'Integer'
-    set $P1208, $I1212
-    goto if_1209_end
-  if_1209:
-.annotate 'line', 431
-    get_global $P1213, "@BLOCK"
-    unless_null $P1213, vivify_401
-    $P1213 = root_new ['parrot';'ResizablePMCArray']
-  vivify_401:
-    set $P1214, $P1213[0]
-    unless_null $P1214, vivify_402
-    $P1214 = root_new ['parrot';'ResizablePMCArray']
+    set $S1163, $P1162
+    iseq $I1164, $S1163, "has"
+    if $I1164, if_1161
+.annotate 'line', 424
+    .const 'Sub' $P1179 = "73_1275811497.55064" 
+    capture_lex $P1179
+    $P1179()
+    goto if_1161_end
+  if_1161:
+.annotate 'line', 416
+    find_lex $P1165, "$BLOCK"
+    find_lex $P1166, "$name"
+    $P1165."symbol"($P1166, "attribute" :named("scope"))
+.annotate 'line', 417
+    find_lex $P1168, "$BLOCK"
+    unless_null $P1168, vivify_405
+    $P1168 = root_new ['parrot';'Hash']
+  vivify_405:
+    set $P1169, $P1168["attributes"]
+    unless_null $P1169, vivify_406
+    new $P1169, "Undef"
+  vivify_406:
+    if $P1169, unless_1167_end
+.annotate 'line', 419
+    get_hll_global $P1170, ["PAST"], "Op"
+    $P1171 = $P1170."new"("list" :named("pasttype"), "attr" :named("named"))
+    find_lex $P1172, "$BLOCK"
+    unless_null $P1172, vivify_407
+    $P1172 = root_new ['parrot';'Hash']
+    store_lex "$BLOCK", $P1172
+  vivify_407:
+    set $P1172["attributes"], $P1171
+  unless_1167_end:
+.annotate 'line', 421
+    find_lex $P1173, "$BLOCK"
+    unless_null $P1173, vivify_408
+    $P1173 = root_new ['parrot';'Hash']
+  vivify_408:
+    set $P1174, $P1173["attributes"]
+    unless_null $P1174, vivify_409
+    new $P1174, "Undef"
+  vivify_409:
+    find_lex $P1175, "$name"
+    $P1174."push"($P1175)
+.annotate 'line', 422
+    get_hll_global $P1176, ["PAST"], "Stmts"
+    $P1177 = $P1176."new"()
+    store_lex "$past", $P1177
+  if_1161_end:
+.annotate 'line', 432
+    find_lex $P1203, "$/"
+    find_lex $P1204, "$past"
+    $P1205 = $P1203."!make"($P1204)
+.annotate 'line', 407
+    .return ($P1205)
+  control_1137:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1206, exception, "payload"
+    .return ($P1206)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.sub "_block1178"  :anon :subid("73_1275811497.55064") :outer("72_1275811497.55064")
+.annotate 'line', 425
+    new $P1180, "Undef"
+    .lex "$scope", $P1180
+.annotate 'line', 426
+    new $P1181, "Undef"
+    .lex "$decl", $P1181
+.annotate 'line', 425
+    find_dynamic_lex $P1184, "$*SCOPE"
+    unless_null $P1184, vivify_401
+    get_hll_global $P1184, "$SCOPE"
+    unless_null $P1184, vivify_402
+    die "Contextual $*SCOPE not found"
   vivify_402:
-    set $P1215, $P1214[0]
-    unless_null $P1215, vivify_403
-    new $P1215, "Undef"
+  vivify_401:
+    set $S1185, $P1184
+    iseq $I1186, $S1185, "our"
+    if $I1186, if_1183
+    new $P1188, "String"
+    assign $P1188, "lexical"
+    set $P1182, $P1188
+    goto if_1183_end
+  if_1183:
+    new $P1187, "String"
+    assign $P1187, "package"
+    set $P1182, $P1187
+  if_1183_end:
+    store_lex "$scope", $P1182
+.annotate 'line', 426
+    get_hll_global $P1189, ["PAST"], "Var"
+    find_lex $P1190, "$name"
+    find_lex $P1191, "$scope"
+.annotate 'line', 427
+    find_lex $P1192, "$sigil"
+    $P1193 = "vivitype"($P1192)
+    find_lex $P1194, "$/"
+    $P1195 = $P1189."new"($P1190 :named("name"), $P1191 :named("scope"), 1 :named("isdecl"), 1 :named("lvalue"), $P1193 :named("viviself"), $P1194 :named("node"))
+.annotate 'line', 426
+    store_lex "$decl", $P1195
+.annotate 'line', 429
+    find_lex $P1196, "$BLOCK"
+    find_lex $P1197, "$name"
+    find_lex $P1198, "$scope"
+    $P1196."symbol"($P1197, $P1198 :named("scope"))
+.annotate 'line', 430
+    find_lex $P1199, "$BLOCK"
+    unless_null $P1199, vivify_403
+    $P1199 = root_new ['parrot';'ResizablePMCArray']
   vivify_403:
-    get_hll_global $P1216, ["PAST"], "Var"
-    find_lex $P1217, "$name"
-    find_lex $P1218, "$past"
-    $P1219 = $P1216."new"($P1217 :named("name"), 1 :named("isdecl"), $P1218 :named("viviself"), "lexical" :named("scope"))
-    $P1215."push"($P1219)
-.annotate 'line', 433
-    get_global $P1220, "@BLOCK"
-    unless_null $P1220, vivify_404
-    $P1220 = root_new ['parrot';'ResizablePMCArray']
+    set $P1200, $P1199[0]
+    unless_null $P1200, vivify_404
+    new $P1200, "Undef"
   vivify_404:
-    set $P1221, $P1220[0]
-    unless_null $P1221, vivify_405
-    new $P1221, "Undef"
-  vivify_405:
-    find_lex $P1222, "$name"
-    $P1221."symbol"($P1222, "lexical" :named("scope"))
-.annotate 'line', 434
-    get_hll_global $P1223, ["PAST"], "Var"
-    find_lex $P1224, "$name"
-    $P1225 = $P1223."new"($P1224 :named("name"))
-    store_lex "$past", $P1225
-.annotate 'line', 430
-    set $P1208, $P1225
-  if_1209_end:
-.annotate 'line', 427
-    .return ($P1208)
+    find_lex $P1201, "$decl"
+    $P1202 = $P1200."push"($P1201)
+.annotate 'line', 424
+    .return ($P1202)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "method_def"  :subid("75_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1233
-.annotate 'line', 441
-    .const 'Sub' $P1249 = "76_1274022903.56472" 
-    capture_lex $P1249
-    new $P1232, 'ExceptionHandler'
-    set_addr $P1232, control_1231
-    $P1232."handle_types"(57)
-    push_eh $P1232
-    .lex "self", self
-    .lex "$/", param_1233
-.annotate 'line', 442
-    new $P1234, "Undef"
-    .lex "$past", $P1234
-    find_lex $P1235, "$/"
-    unless_null $P1235, vivify_406
-    $P1235 = root_new ['parrot';'Hash']
-  vivify_406:
-    set $P1236, $P1235["blockoid"]
-    unless_null $P1236, vivify_407
-    new $P1236, "Undef"
-  vivify_407:
-    $P1237 = $P1236."ast"()
-    store_lex "$past", $P1237
-.annotate 'line', 443
-    find_lex $P1238, "$past"
-    $P1238."blocktype"("method")
-.annotate 'line', 444
-    find_lex $P1239, "$past"
-    $P1239."control"("return_pir")
-.annotate 'line', 445
-    find_lex $P1240, "$past"
-    unless_null $P1240, vivify_408
-    $P1240 = root_new ['parrot';'ResizablePMCArray']
-  vivify_408:
-    set $P1241, $P1240[0]
-    unless_null $P1241, vivify_409
-    new $P1241, "Undef"
-  vivify_409:
-    get_hll_global $P1242, ["PAST"], "Op"
-    $P1243 = $P1242."new"("    .lex \"self\", self" :named("inline"))
-    $P1241."unshift"($P1243)
-.annotate 'line', 446
-    find_lex $P1244, "$past"
-    $P1244."symbol"("self", "lexical" :named("scope"))
-.annotate 'line', 447
-    find_lex $P1246, "$/"
-    unless_null $P1246, vivify_410
-    $P1246 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "routine_declarator:sym<sub>"  :subid("74_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1210
+.annotate 'line', 435
+    new $P1209, 'ExceptionHandler'
+    set_addr $P1209, control_1208
+    $P1209."handle_types"(.CONTROL_RETURN)
+    push_eh $P1209
+    .lex "self", self
+    .lex "$/", param_1210
+    find_lex $P1211, "$/"
+    find_lex $P1212, "$/"
+    unless_null $P1212, vivify_410
+    $P1212 = root_new ['parrot';'Hash']
   vivify_410:
-    set $P1247, $P1246["deflongname"]
-    unless_null $P1247, vivify_411
-    new $P1247, "Undef"
+    set $P1213, $P1212["routine_def"]
+    unless_null $P1213, vivify_411
+    new $P1213, "Undef"
   vivify_411:
-    unless $P1247, if_1245_end
-    .const 'Sub' $P1249 = "76_1274022903.56472" 
-    capture_lex $P1249
-    $P1249()
-  if_1245_end:
-.annotate 'line', 451
-    find_lex $P1260, "$/"
-    find_lex $P1261, "$past"
-    $P1262 = $P1260."!make"($P1261)
-.annotate 'line', 441
-    .return ($P1262)
-  control_1231:
+    $P1214 = $P1213."ast"()
+    $P1215 = $P1211."!make"($P1214)
+    .return ($P1215)
+  control_1208:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1263, exception, "payload"
-    .return ($P1263)
+    getattribute $P1216, exception, "payload"
+    .return ($P1216)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1248"  :anon :subid("76_1274022903.56472") :outer("75_1274022903.56472")
-.annotate 'line', 448
-    new $P1250, "Undef"
-    .lex "$name", $P1250
-    find_lex $P1251, "$/"
-    unless_null $P1251, vivify_412
-    $P1251 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "routine_declarator:sym<method>"  :subid("75_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1220
+.annotate 'line', 436
+    new $P1219, 'ExceptionHandler'
+    set_addr $P1219, control_1218
+    $P1219."handle_types"(.CONTROL_RETURN)
+    push_eh $P1219
+    .lex "self", self
+    .lex "$/", param_1220
+    find_lex $P1221, "$/"
+    find_lex $P1222, "$/"
+    unless_null $P1222, vivify_412
+    $P1222 = root_new ['parrot';'Hash']
   vivify_412:
-    set $P1252, $P1251["deflongname"]
-    unless_null $P1252, vivify_413
-    $P1252 = root_new ['parrot';'ResizablePMCArray']
+    set $P1223, $P1222["method_def"]
+    unless_null $P1223, vivify_413
+    new $P1223, "Undef"
   vivify_413:
-    set $P1253, $P1252[0]
-    unless_null $P1253, vivify_414
-    new $P1253, "Undef"
-  vivify_414:
-    $P1254 = $P1253."ast"()
-    set $S1255, $P1254
-    new $P1256, 'String'
-    set $P1256, $S1255
-    store_lex "$name", $P1256
-.annotate 'line', 449
-    find_lex $P1257, "$past"
-    find_lex $P1258, "$name"
-    $P1259 = $P1257."name"($P1258)
-.annotate 'line', 447
-    .return ($P1259)
+    $P1224 = $P1223."ast"()
+    $P1225 = $P1221."!make"($P1224)
+    .return ($P1225)
+  control_1218:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1226, exception, "payload"
+    .return ($P1226)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "signature"  :subid("77_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1267
-.annotate 'line', 455
-    .const 'Sub' $P1278 = "78_1274022903.56472" 
-    capture_lex $P1278
-    new $P1266, 'ExceptionHandler'
-    set_addr $P1266, control_1265
-    $P1266."handle_types"(57)
-    push_eh $P1266
+.include "except_types.pasm"
+.sub "routine_def"  :subid("76_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1230
+.annotate 'line', 438
+    .const 'Sub' $P1241 = "77_1275811497.55064" 
+    capture_lex $P1241
+    new $P1229, 'ExceptionHandler'
+    set_addr $P1229, control_1228
+    $P1229."handle_types"(.CONTROL_RETURN)
+    push_eh $P1229
     .lex "self", self
-    .lex "$/", param_1267
-.annotate 'line', 456
-    new $P1268, "Undef"
-    .lex "$BLOCKINIT", $P1268
-    get_global $P1269, "@BLOCK"
-    unless_null $P1269, vivify_415
-    $P1269 = root_new ['parrot';'ResizablePMCArray']
+    .lex "$/", param_1230
+.annotate 'line', 439
+    new $P1231, "Undef"
+    .lex "$past", $P1231
+    find_lex $P1232, "$/"
+    unless_null $P1232, vivify_414
+    $P1232 = root_new ['parrot';'Hash']
+  vivify_414:
+    set $P1233, $P1232["blockoid"]
+    unless_null $P1233, vivify_415
+    new $P1233, "Undef"
   vivify_415:
-    set $P1270, $P1269[0]
-    unless_null $P1270, vivify_416
-    $P1270 = root_new ['parrot';'ResizablePMCArray']
+    $P1234 = $P1233."ast"()
+    store_lex "$past", $P1234
+.annotate 'line', 440
+    find_lex $P1235, "$past"
+    $P1235."blocktype"("declaration")
+.annotate 'line', 441
+    find_lex $P1236, "$past"
+    $P1236."control"("return_pir")
+.annotate 'line', 442
+    find_lex $P1238, "$/"
+    unless_null $P1238, vivify_416
+    $P1238 = root_new ['parrot';'Hash']
   vivify_416:
-    set $P1271, $P1270[0]
-    unless_null $P1271, vivify_417
-    new $P1271, "Undef"
+    set $P1239, $P1238["deflongname"]
+    unless_null $P1239, vivify_417
+    new $P1239, "Undef"
   vivify_417:
-    store_lex "$BLOCKINIT", $P1271
-.annotate 'line', 457
+    unless $P1239, if_1237_end
+    .const 'Sub' $P1241 = "77_1275811497.55064" 
+    capture_lex $P1241
+    $P1241()
+  if_1237_end:
+.annotate 'line', 452
     find_lex $P1273, "$/"
-    unless_null $P1273, vivify_418
-    $P1273 = root_new ['parrot';'Hash']
-  vivify_418:
-    set $P1274, $P1273["parameter"]
-    unless_null $P1274, vivify_419
-    new $P1274, "Undef"
-  vivify_419:
-    defined $I1275, $P1274
-    unless $I1275, for_undef_420
-    iter $P1272, $P1274
-    new $P1285, 'ExceptionHandler'
-    set_addr $P1285, loop1284_handler
-    $P1285."handle_types"(64, 66, 65)
-    push_eh $P1285
-  loop1284_test:
-    unless $P1272, loop1284_done
-    shift $P1276, $P1272
-  loop1284_redo:
-    .const 'Sub' $P1278 = "78_1274022903.56472" 
-    capture_lex $P1278
-    $P1278($P1276)
-  loop1284_next:
-    goto loop1284_test
-  loop1284_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1286, exception, 'type'
-    eq $P1286, 64, loop1284_next
-    eq $P1286, 66, loop1284_redo
-  loop1284_done:
-    pop_eh 
-  for_undef_420:
-.annotate 'line', 455
-    .return ($P1272)
-  control_1265:
+    find_lex $P1274, "$past"
+    $P1275 = $P1273."!make"($P1274)
+.annotate 'line', 438
+    .return ($P1275)
+  control_1228:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1287, exception, "payload"
-    .return ($P1287)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "_block1277"  :anon :subid("78_1274022903.56472") :outer("77_1274022903.56472")
-    .param pmc param_1279
-.annotate 'line', 457
-    .lex "$_", param_1279
-    find_lex $P1280, "$BLOCKINIT"
-    find_lex $P1281, "$_"
-    $P1282 = $P1281."ast"()
-    $P1283 = $P1280."push"($P1282)
-    .return ($P1283)
+    getattribute $P1276, exception, "payload"
+    .return ($P1276)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "parameter"  :subid("79_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1291
-.annotate 'line', 460
-    new $P1290, 'ExceptionHandler'
-    set_addr $P1290, control_1289
-    $P1290."handle_types"(57)
-    push_eh $P1290
-    .lex "self", self
-    .lex "$/", param_1291
-.annotate 'line', 461
-    new $P1292, "Undef"
-    .lex "$quant", $P1292
-.annotate 'line', 462
-    new $P1293, "Undef"
-    .lex "$past", $P1293
-.annotate 'line', 461
-    find_lex $P1294, "$/"
-    unless_null $P1294, vivify_421
-    $P1294 = root_new ['parrot';'Hash']
+.sub "_block1240"  :anon :subid("77_1275811497.55064") :outer("76_1275811497.55064")
+.annotate 'line', 443
+    new $P1242, "Undef"
+    .lex "$name", $P1242
+    find_lex $P1243, "$/"
+    unless_null $P1243, vivify_418
+    $P1243 = root_new ['parrot';'Hash']
+  vivify_418:
+    set $P1244, $P1243["sigil"]
+    unless_null $P1244, vivify_419
+    $P1244 = root_new ['parrot';'ResizablePMCArray']
+  vivify_419:
+    set $P1245, $P1244[0]
+    unless_null $P1245, vivify_420
+    new $P1245, "Undef"
+  vivify_420:
+    set $S1246, $P1245
+    new $P1247, 'String'
+    set $P1247, $S1246
+    find_lex $P1248, "$/"
+    unless_null $P1248, vivify_421
+    $P1248 = root_new ['parrot';'Hash']
   vivify_421:
-    set $P1295, $P1294["quant"]
-    unless_null $P1295, vivify_422
-    new $P1295, "Undef"
+    set $P1249, $P1248["deflongname"]
+    unless_null $P1249, vivify_422
+    $P1249 = root_new ['parrot';'ResizablePMCArray']
   vivify_422:
-    store_lex "$quant", $P1295
-    find_lex $P1296, "$past"
-.annotate 'line', 463
-    find_lex $P1298, "$/"
-    unless_null $P1298, vivify_423
-    $P1298 = root_new ['parrot';'Hash']
+    set $P1250, $P1249[0]
+    unless_null $P1250, vivify_423
+    new $P1250, "Undef"
   vivify_423:
-    set $P1299, $P1298["named_param"]
-    unless_null $P1299, vivify_424
-    new $P1299, "Undef"
-  vivify_424:
-    if $P1299, if_1297
-.annotate 'line', 470
-    find_lex $P1313, "$/"
-    unless_null $P1313, vivify_425
-    $P1313 = root_new ['parrot';'Hash']
+    $S1251 = $P1250."ast"()
+    concat $P1252, $P1247, $S1251
+    store_lex "$name", $P1252
+.annotate 'line', 444
+    find_lex $P1253, "$past"
+    find_lex $P1254, "$name"
+    $P1253."name"($P1254)
+.annotate 'line', 445
+    find_dynamic_lex $P1257, "$*SCOPE"
+    unless_null $P1257, vivify_424
+    get_hll_global $P1257, "$SCOPE"
+    unless_null $P1257, vivify_425
+    die "Contextual $*SCOPE not found"
   vivify_425:
-    set $P1314, $P1313["param_var"]
-    unless_null $P1314, vivify_426
-    new $P1314, "Undef"
+  vivify_424:
+    set $S1258, $P1257
+    isne $I1259, $S1258, "our"
+    if $I1259, if_1256
+    new $P1255, 'Integer'
+    set $P1255, $I1259
+    goto if_1256_end
+  if_1256:
+.annotate 'line', 446
+    get_global $P1260, "@BLOCK"
+    unless_null $P1260, vivify_426
+    $P1260 = root_new ['parrot';'ResizablePMCArray']
   vivify_426:
-    $P1315 = $P1314."ast"()
-    store_lex "$past", $P1315
-.annotate 'line', 471
-    find_lex $P1317, "$quant"
-    set $S1318, $P1317
-    iseq $I1319, $S1318, "*"
-    if $I1319, if_1316
-.annotate 'line', 475
-    find_lex $P1328, "$quant"
-    set $S1329, $P1328
-    iseq $I1330, $S1329, "?"
-    unless $I1330, if_1327_end
-.annotate 'line', 476
-    find_lex $P1331, "$past"
-    find_lex $P1332, "$/"
-    unless_null $P1332, vivify_427
-    $P1332 = root_new ['parrot';'Hash']
+    set $P1261, $P1260[0]
+    unless_null $P1261, vivify_427
+    $P1261 = root_new ['parrot';'ResizablePMCArray']
   vivify_427:
-    set $P1333, $P1332["param_var"]
-    unless_null $P1333, vivify_428
-    $P1333 = root_new ['parrot';'Hash']
+    set $P1262, $P1261[0]
+    unless_null $P1262, vivify_428
+    new $P1262, "Undef"
   vivify_428:
-    set $P1334, $P1333["sigil"]
-    unless_null $P1334, vivify_429
-    new $P1334, "Undef"
+    get_hll_global $P1263, ["PAST"], "Var"
+    find_lex $P1264, "$name"
+    find_lex $P1265, "$past"
+    $P1266 = $P1263."new"($P1264 :named("name"), 1 :named("isdecl"), $P1265 :named("viviself"), "lexical" :named("scope"))
+    $P1262."push"($P1266)
+.annotate 'line', 448
+    get_global $P1267, "@BLOCK"
+    unless_null $P1267, vivify_429
+    $P1267 = root_new ['parrot';'ResizablePMCArray']
   vivify_429:
-    $P1335 = "vivitype"($P1334)
-    $P1331."viviself"($P1335)
-  if_1327_end:
-.annotate 'line', 475
-    goto if_1316_end
-  if_1316:
-.annotate 'line', 472
-    find_lex $P1320, "$past"
-    $P1320."slurpy"(1)
-.annotate 'line', 473
-    find_lex $P1321, "$past"
-    find_lex $P1322, "$/"
-    unless_null $P1322, vivify_430
-    $P1322 = root_new ['parrot';'Hash']
+    set $P1268, $P1267[0]
+    unless_null $P1268, vivify_430
+    new $P1268, "Undef"
   vivify_430:
-    set $P1323, $P1322["param_var"]
-    unless_null $P1323, vivify_431
-    $P1323 = root_new ['parrot';'Hash']
-  vivify_431:
-    set $P1324, $P1323["sigil"]
-    unless_null $P1324, vivify_432
-    new $P1324, "Undef"
-  vivify_432:
-    set $S1325, $P1324
-    iseq $I1326, $S1325, "%"
-    $P1321."named"($I1326)
-  if_1316_end:
-.annotate 'line', 469
-    goto if_1297_end
-  if_1297:
-.annotate 'line', 464
-    find_lex $P1300, "$/"
-    unless_null $P1300, vivify_433
-    $P1300 = root_new ['parrot';'Hash']
+    find_lex $P1269, "$name"
+    $P1268."symbol"($P1269, "lexical" :named("scope"))
+.annotate 'line', 449
+    get_hll_global $P1270, ["PAST"], "Var"
+    find_lex $P1271, "$name"
+    $P1272 = $P1270."new"($P1271 :named("name"))
+    store_lex "$past", $P1272
+.annotate 'line', 445
+    set $P1255, $P1272
+  if_1256_end:
+.annotate 'line', 442
+    .return ($P1255)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "method_def"  :subid("78_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1280
+.annotate 'line', 456
+    .const 'Sub' $P1296 = "79_1275811497.55064" 
+    capture_lex $P1296
+    new $P1279, 'ExceptionHandler'
+    set_addr $P1279, control_1278
+    $P1279."handle_types"(.CONTROL_RETURN)
+    push_eh $P1279
+    .lex "self", self
+    .lex "$/", param_1280
+.annotate 'line', 457
+    new $P1281, "Undef"
+    .lex "$past", $P1281
+    find_lex $P1282, "$/"
+    unless_null $P1282, vivify_431
+    $P1282 = root_new ['parrot';'Hash']
+  vivify_431:
+    set $P1283, $P1282["blockoid"]
+    unless_null $P1283, vivify_432
+    new $P1283, "Undef"
+  vivify_432:
+    $P1284 = $P1283."ast"()
+    store_lex "$past", $P1284
+.annotate 'line', 458
+    find_lex $P1285, "$past"
+    $P1285."blocktype"("method")
+.annotate 'line', 459
+    find_lex $P1286, "$past"
+    $P1286."control"("return_pir")
+.annotate 'line', 460
+    find_lex $P1287, "$past"
+    unless_null $P1287, vivify_433
+    $P1287 = root_new ['parrot';'ResizablePMCArray']
   vivify_433:
-    set $P1301, $P1300["named_param"]
-    unless_null $P1301, vivify_434
-    new $P1301, "Undef"
+    set $P1288, $P1287[0]
+    unless_null $P1288, vivify_434
+    new $P1288, "Undef"
   vivify_434:
-    $P1302 = $P1301."ast"()
-    store_lex "$past", $P1302
-.annotate 'line', 465
-    find_lex $P1304, "$quant"
-    set $S1305, $P1304
-    isne $I1306, $S1305, "!"
-    unless $I1306, if_1303_end
-.annotate 'line', 466
-    find_lex $P1307, "$past"
-    find_lex $P1308, "$/"
-    unless_null $P1308, vivify_435
-    $P1308 = root_new ['parrot';'Hash']
+    get_hll_global $P1289, ["PAST"], "Op"
+    $P1290 = $P1289."new"("    .lex \"self\", self" :named("inline"))
+    $P1288."unshift"($P1290)
+.annotate 'line', 461
+    find_lex $P1291, "$past"
+    $P1291."symbol"("self", "lexical" :named("scope"))
+.annotate 'line', 462
+    find_lex $P1293, "$/"
+    unless_null $P1293, vivify_435
+    $P1293 = root_new ['parrot';'Hash']
   vivify_435:
-    set $P1309, $P1308["named_param"]
-    unless_null $P1309, vivify_436
-    $P1309 = root_new ['parrot';'Hash']
+    set $P1294, $P1293["deflongname"]
+    unless_null $P1294, vivify_436
+    new $P1294, "Undef"
   vivify_436:
-    set $P1310, $P1309["param_var"]
-    unless_null $P1310, vivify_437
-    $P1310 = root_new ['parrot';'Hash']
+    unless $P1294, if_1292_end
+    .const 'Sub' $P1296 = "79_1275811497.55064" 
+    capture_lex $P1296
+    $P1296()
+  if_1292_end:
+.annotate 'line', 466
+    find_dynamic_lex $P1308, "$*MULTINESS"
+    unless_null $P1308, vivify_440
+    get_hll_global $P1308, "$MULTINESS"
+    unless_null $P1308, vivify_441
+    die "Contextual $*MULTINESS not found"
+  vivify_441:
+  vivify_440:
+    set $S1309, $P1308
+    iseq $I1310, $S1309, "multi"
+    unless $I1310, if_1307_end
+    find_lex $P1311, "$past"
+    $P1312 = $P1311."multi"()
+    $P1312."unshift"("_")
+  if_1307_end:
+.annotate 'line', 467
+    find_lex $P1313, "$/"
+    find_lex $P1314, "$past"
+    $P1315 = $P1313."!make"($P1314)
+.annotate 'line', 456
+    .return ($P1315)
+  control_1278:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1316, exception, "payload"
+    .return ($P1316)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.sub "_block1295"  :anon :subid("79_1275811497.55064") :outer("78_1275811497.55064")
+.annotate 'line', 463
+    new $P1297, "Undef"
+    .lex "$name", $P1297
+    find_lex $P1298, "$/"
+    unless_null $P1298, vivify_437
+    $P1298 = root_new ['parrot';'Hash']
   vivify_437:
-    set $P1311, $P1310["sigil"]
-    unless_null $P1311, vivify_438
-    new $P1311, "Undef"
+    set $P1299, $P1298["deflongname"]
+    unless_null $P1299, vivify_438
+    $P1299 = root_new ['parrot';'ResizablePMCArray']
   vivify_438:
-    $P1312 = "vivitype"($P1311)
-    $P1307."viviself"($P1312)
-  if_1303_end:
-  if_1297_end:
-.annotate 'line', 479
-    find_lex $P1337, "$/"
-    unless_null $P1337, vivify_439
-    $P1337 = root_new ['parrot';'Hash']
+    set $P1300, $P1299[0]
+    unless_null $P1300, vivify_439
+    new $P1300, "Undef"
   vivify_439:
-    set $P1338, $P1337["default_value"]
-    unless_null $P1338, vivify_440
-    new $P1338, "Undef"
-  vivify_440:
-    unless $P1338, if_1336_end
-.annotate 'line', 480
-    find_lex $P1340, "$quant"
-    set $S1341, $P1340
-    iseq $I1342, $S1341, "*"
-    unless $I1342, if_1339_end
-.annotate 'line', 481
-    find_lex $P1343, "$/"
-    $P1344 = $P1343."CURSOR"()
-    $P1344."panic"("Can't put default on slurpy parameter")
-  if_1339_end:
-.annotate 'line', 483
-    find_lex $P1346, "$quant"
-    set $S1347, $P1346
-    iseq $I1348, $S1347, "!"
-    unless $I1348, if_1345_end
-.annotate 'line', 484
-    find_lex $P1349, "$/"
-    $P1350 = $P1349."CURSOR"()
-    $P1350."panic"("Can't put default on required parameter")
-  if_1345_end:
-.annotate 'line', 486
-    find_lex $P1351, "$past"
-    find_lex $P1352, "$/"
-    unless_null $P1352, vivify_441
-    $P1352 = root_new ['parrot';'Hash']
-  vivify_441:
-    set $P1353, $P1352["default_value"]
-    unless_null $P1353, vivify_442
-    $P1353 = root_new ['parrot';'ResizablePMCArray']
+    $P1301 = $P1300."ast"()
+    set $S1302, $P1301
+    new $P1303, 'String'
+    set $P1303, $S1302
+    store_lex "$name", $P1303
+.annotate 'line', 464
+    find_lex $P1304, "$past"
+    find_lex $P1305, "$name"
+    $P1306 = $P1304."name"($P1305)
+.annotate 'line', 462
+    .return ($P1306)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "signature"  :subid("80_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1320
+.annotate 'line', 471
+    .const 'Sub' $P1346 = "82_1275811497.55064" 
+    capture_lex $P1346
+    .const 'Sub' $P1331 = "81_1275811497.55064" 
+    capture_lex $P1331
+    new $P1319, 'ExceptionHandler'
+    set_addr $P1319, control_1318
+    $P1319."handle_types"(.CONTROL_RETURN)
+    push_eh $P1319
+    .lex "self", self
+    .lex "$/", param_1320
+.annotate 'line', 472
+    new $P1321, "Undef"
+    .lex "$BLOCKINIT", $P1321
+    get_global $P1322, "@BLOCK"
+    unless_null $P1322, vivify_442
+    $P1322 = root_new ['parrot';'ResizablePMCArray']
   vivify_442:
-    set $P1354, $P1353[0]
-    unless_null $P1354, vivify_443
-    $P1354 = root_new ['parrot';'Hash']
+    set $P1323, $P1322[0]
+    unless_null $P1323, vivify_443
+    $P1323 = root_new ['parrot';'ResizablePMCArray']
   vivify_443:
-    set $P1355, $P1354["EXPR"]
-    unless_null $P1355, vivify_444
-    new $P1355, "Undef"
+    set $P1324, $P1323[0]
+    unless_null $P1324, vivify_444
+    new $P1324, "Undef"
   vivify_444:
-    $P1356 = $P1355."ast"()
-    $P1351."viviself"($P1356)
-  if_1336_end:
-.annotate 'line', 488
-    find_lex $P1358, "$past"
-    $P1359 = $P1358."viviself"()
-    if $P1359, unless_1357_end
-    get_global $P1360, "@BLOCK"
-    unless_null $P1360, vivify_445
-    $P1360 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$BLOCKINIT", $P1324
+.annotate 'line', 474
+    find_lex $P1326, "$/"
+    unless_null $P1326, vivify_445
+    $P1326 = root_new ['parrot';'Hash']
   vivify_445:
-    set $P1361, $P1360[0]
-    unless_null $P1361, vivify_446
-    new $P1361, "Undef"
+    set $P1327, $P1326["parameter"]
+    unless_null $P1327, vivify_446
+    new $P1327, "Undef"
   vivify_446:
-    get_global $P1362, "@BLOCK"
-    unless_null $P1362, vivify_447
-    $P1362 = root_new ['parrot';'ResizablePMCArray']
-  vivify_447:
-    set $P1363, $P1362[0]
-    unless_null $P1363, vivify_448
-    new $P1363, "Undef"
+    defined $I1328, $P1327
+    unless $I1328, for_undef_447
+    iter $P1325, $P1327
+    new $P1338, 'ExceptionHandler'
+    set_addr $P1338, loop1337_handler
+    $P1338."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1338
+  loop1337_test:
+    unless $P1325, loop1337_done
+    shift $P1329, $P1325
+  loop1337_redo:
+    .const 'Sub' $P1331 = "81_1275811497.55064" 
+    capture_lex $P1331
+    $P1331($P1329)
+  loop1337_next:
+    goto loop1337_test
+  loop1337_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1339, exception, 'type'
+    eq $P1339, .CONTROL_LOOP_NEXT, loop1337_next
+    eq $P1339, .CONTROL_LOOP_REDO, loop1337_redo
+  loop1337_done:
+    pop_eh 
+  for_undef_447:
+.annotate 'line', 477
+    find_dynamic_lex $P1342, "$*MULTINESS"
+    unless_null $P1342, vivify_448
+    get_hll_global $P1342, "$MULTINESS"
+    unless_null $P1342, vivify_449
+    die "Contextual $*MULTINESS not found"
+  vivify_449:
   vivify_448:
-    $P1364 = $P1363."arity"()
-    set $N1365, $P1364
-    new $P1366, 'Float'
-    set $P1366, $N1365
-    add $P1367, $P1366, 1
-    $P1361."arity"($P1367)
-  unless_1357_end:
-.annotate 'line', 489
-    find_lex $P1368, "$/"
-    find_lex $P1369, "$past"
-    $P1370 = $P1368."!make"($P1369)
-.annotate 'line', 460
-    .return ($P1370)
-  control_1289:
+    set $S1343, $P1342
+    iseq $I1344, $S1343, "multi"
+    if $I1344, if_1341
+    new $P1340, 'Integer'
+    set $P1340, $I1344
+    goto if_1341_end
+  if_1341:
+    .const 'Sub' $P1346 = "82_1275811497.55064" 
+    capture_lex $P1346
+    $P1372 = $P1346()
+    set $P1340, $P1372
+  if_1341_end:
+.annotate 'line', 471
+    .return ($P1340)
+  control_1318:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1371, exception, "payload"
-    .return ($P1371)
+    getattribute $P1373, exception, "payload"
+    .return ($P1373)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "param_var"  :subid("80_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1375
-.annotate 'line', 492
-    new $P1374, 'ExceptionHandler'
-    set_addr $P1374, control_1373
-    $P1374."handle_types"(57)
-    push_eh $P1374
-    .lex "self", self
-    .lex "$/", param_1375
-.annotate 'line', 493
-    new $P1376, "Undef"
-    .lex "$name", $P1376
-.annotate 'line', 494
-    new $P1377, "Undef"
-    .lex "$past", $P1377
-.annotate 'line', 493
-    find_lex $P1378, "$/"
-    set $S1379, $P1378
-    new $P1380, 'String'
-    set $P1380, $S1379
-    store_lex "$name", $P1380
-.annotate 'line', 494
-    get_hll_global $P1381, ["PAST"], "Var"
-    find_lex $P1382, "$name"
-    find_lex $P1383, "$/"
-    $P1384 = $P1381."new"($P1382 :named("name"), "parameter" :named("scope"), 1 :named("isdecl"), $P1383 :named("node"))
-    store_lex "$past", $P1384
-.annotate 'line', 496
-    get_global $P1385, "@BLOCK"
-    unless_null $P1385, vivify_449
-    $P1385 = root_new ['parrot';'ResizablePMCArray']
-  vivify_449:
-    set $P1386, $P1385[0]
-    unless_null $P1386, vivify_450
-    new $P1386, "Undef"
-  vivify_450:
-    find_lex $P1387, "$name"
-    $P1386."symbol"($P1387, "lexical" :named("scope"))
-.annotate 'line', 497
-    find_lex $P1388, "$/"
-    find_lex $P1389, "$past"
-    $P1390 = $P1388."!make"($P1389)
-.annotate 'line', 492
-    .return ($P1390)
-  control_1373:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1391, exception, "payload"
-    .return ($P1391)
+.sub "_block1330"  :anon :subid("81_1275811497.55064") :outer("80_1275811497.55064")
+    .param pmc param_1332
+.annotate 'line', 474
+    .lex "$_", param_1332
+    find_lex $P1333, "$BLOCKINIT"
+    find_lex $P1334, "$_"
+    $P1335 = $P1334."ast"()
+    $P1336 = $P1333."push"($P1335)
+    .return ($P1336)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "named_param"  :subid("81_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1395
-.annotate 'line', 500
-    new $P1394, 'ExceptionHandler'
-    set_addr $P1394, control_1393
-    $P1394."handle_types"(57)
-    push_eh $P1394
-    .lex "self", self
-    .lex "$/", param_1395
-.annotate 'line', 501
-    new $P1396, "Undef"
-    .lex "$past", $P1396
-    find_lex $P1397, "$/"
-    unless_null $P1397, vivify_451
-    $P1397 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "_block1345"  :anon :subid("82_1275811497.55064") :outer("80_1275811497.55064")
+.annotate 'line', 477
+    .const 'Sub' $P1355 = "83_1275811497.55064" 
+    capture_lex $P1355
+.annotate 'line', 478
+    $P1347 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@params", $P1347
+.annotate 'line', 477
+    find_lex $P1348, "@params"
+.annotate 'line', 479
+    find_lex $P1350, "$BLOCKINIT"
+    $P1351 = $P1350."list"()
+    defined $I1352, $P1351
+    unless $I1352, for_undef_450
+    iter $P1349, $P1351
+    new $P1366, 'ExceptionHandler'
+    set_addr $P1366, loop1365_handler
+    $P1366."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1366
+  loop1365_test:
+    unless $P1349, loop1365_done
+    shift $P1353, $P1349
+  loop1365_redo:
+    .const 'Sub' $P1355 = "83_1275811497.55064" 
+    capture_lex $P1355
+    $P1355($P1353)
+  loop1365_next:
+    goto loop1365_test
+  loop1365_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1367, exception, 'type'
+    eq $P1367, .CONTROL_LOOP_NEXT, loop1365_next
+    eq $P1367, .CONTROL_LOOP_REDO, loop1365_redo
+  loop1365_done:
+    pop_eh 
+  for_undef_450:
+.annotate 'line', 482
+    get_global $P1368, "@BLOCK"
+    unless_null $P1368, vivify_451
+    $P1368 = root_new ['parrot';'ResizablePMCArray']
   vivify_451:
-    set $P1398, $P1397["param_var"]
-    unless_null $P1398, vivify_452
-    new $P1398, "Undef"
+    set $P1369, $P1368[0]
+    unless_null $P1369, vivify_452
+    new $P1369, "Undef"
   vivify_452:
-    $P1399 = $P1398."ast"()
-    store_lex "$past", $P1399
-.annotate 'line', 502
-    find_lex $P1400, "$past"
-    find_lex $P1401, "$/"
-    unless_null $P1401, vivify_453
-    $P1401 = root_new ['parrot';'Hash']
-  vivify_453:
-    set $P1402, $P1401["param_var"]
-    unless_null $P1402, vivify_454
-    $P1402 = root_new ['parrot';'Hash']
-  vivify_454:
-    set $P1403, $P1402["name"]
-    unless_null $P1403, vivify_455
-    new $P1403, "Undef"
-  vivify_455:
-    set $S1404, $P1403
-    $P1400."named"($S1404)
-.annotate 'line', 503
-    find_lex $P1405, "$/"
-    find_lex $P1406, "$past"
-    $P1407 = $P1405."!make"($P1406)
-.annotate 'line', 500
-    .return ($P1407)
-  control_1393:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1408, exception, "payload"
-    .return ($P1408)
+    find_lex $P1370, "@params"
+    $P1371 = $P1369."multi"($P1370)
+.annotate 'line', 477
+    .return ($P1371)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "regex_declarator"  :subid("82_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1412
-    .param pmc param_1413 :optional
-    .param int has_param_1413 :opt_flag
-.annotate 'line', 506
-    .const 'Sub' $P1483 = "84_1274022903.56472" 
-    capture_lex $P1483
-    .const 'Sub' $P1455 = "83_1274022903.56472" 
-    capture_lex $P1455
-    new $P1411, 'ExceptionHandler'
-    set_addr $P1411, control_1410
-    $P1411."handle_types"(57)
-    push_eh $P1411
-    .lex "self", self
-    .lex "$/", param_1412
-    if has_param_1413, optparam_456
-    new $P1414, "Undef"
-    set param_1413, $P1414
-  optparam_456:
-    .lex "$key", param_1413
-.annotate 'line', 507
-    $P1415 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@MODIFIERS", $P1415
-.annotate 'line', 510
-    new $P1416, "Undef"
-    .lex "$name", $P1416
-.annotate 'line', 511
-    new $P1417, "Undef"
-    .lex "$past", $P1417
-.annotate 'line', 507
+.sub "_block1354"  :anon :subid("83_1275811497.55064") :outer("82_1275811497.55064")
+    .param pmc param_1356
+.annotate 'line', 479
+    .lex "$_", param_1356
+.annotate 'line', 480
+    find_lex $P1357, "@params"
+    find_lex $P1359, "$_"
+    $P1360 = $P1359."multitype"()
+    set $P1358, $P1360
+    defined $I1362, $P1358
+    if $I1362, default_1361
+    new $P1363, "String"
+    assign $P1363, "_"
+    set $P1358, $P1363
+  default_1361:
+    $P1364 = $P1357."push"($P1358)
+.annotate 'line', 479
+    .return ($P1364)
+.end
 
-        $P1418 = get_hll_global ['Regex';'P6Regex';'Actions'], '@MODIFIERS'
-    
-    store_lex "@MODIFIERS", $P1418
-.annotate 'line', 510
-    find_lex $P1419, "$/"
-    unless_null $P1419, vivify_457
-    $P1419 = root_new ['parrot';'Hash']
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "parameter"  :subid("84_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1377
+.annotate 'line', 486
+    .const 'Sub' $P1458 = "85_1275811497.55064" 
+    capture_lex $P1458
+    new $P1376, 'ExceptionHandler'
+    set_addr $P1376, control_1375
+    $P1376."handle_types"(.CONTROL_RETURN)
+    push_eh $P1376
+    .lex "self", self
+    .lex "$/", param_1377
+.annotate 'line', 487
+    new $P1378, "Undef"
+    .lex "$quant", $P1378
+.annotate 'line', 488
+    new $P1379, "Undef"
+    .lex "$past", $P1379
+.annotate 'line', 487
+    find_lex $P1380, "$/"
+    unless_null $P1380, vivify_453
+    $P1380 = root_new ['parrot';'Hash']
+  vivify_453:
+    set $P1381, $P1380["quant"]
+    unless_null $P1381, vivify_454
+    new $P1381, "Undef"
+  vivify_454:
+    store_lex "$quant", $P1381
+    find_lex $P1382, "$past"
+.annotate 'line', 489
+    find_lex $P1384, "$/"
+    unless_null $P1384, vivify_455
+    $P1384 = root_new ['parrot';'Hash']
+  vivify_455:
+    set $P1385, $P1384["named_param"]
+    unless_null $P1385, vivify_456
+    new $P1385, "Undef"
+  vivify_456:
+    if $P1385, if_1383
+.annotate 'line', 496
+    find_lex $P1399, "$/"
+    unless_null $P1399, vivify_457
+    $P1399 = root_new ['parrot';'Hash']
   vivify_457:
-    set $P1420, $P1419["deflongname"]
-    unless_null $P1420, vivify_458
-    new $P1420, "Undef"
+    set $P1400, $P1399["param_var"]
+    unless_null $P1400, vivify_458
+    new $P1400, "Undef"
   vivify_458:
-    $P1421 = $P1420."ast"()
-    set $S1422, $P1421
-    new $P1423, 'String'
-    set $P1423, $S1422
-    store_lex "$name", $P1423
-    find_lex $P1424, "$past"
-.annotate 'line', 512
-    find_lex $P1426, "$/"
-    unless_null $P1426, vivify_459
-    $P1426 = root_new ['parrot';'Hash']
+    $P1401 = $P1400."ast"()
+    store_lex "$past", $P1401
+.annotate 'line', 497
+    find_lex $P1403, "$quant"
+    set $S1404, $P1403
+    iseq $I1405, $S1404, "*"
+    if $I1405, if_1402
+.annotate 'line', 501
+    find_lex $P1414, "$quant"
+    set $S1415, $P1414
+    iseq $I1416, $S1415, "?"
+    unless $I1416, if_1413_end
+.annotate 'line', 502
+    find_lex $P1417, "$past"
+    find_lex $P1418, "$/"
+    unless_null $P1418, vivify_459
+    $P1418 = root_new ['parrot';'Hash']
   vivify_459:
-    set $P1427, $P1426["proto"]
-    unless_null $P1427, vivify_460
-    new $P1427, "Undef"
+    set $P1419, $P1418["param_var"]
+    unless_null $P1419, vivify_460
+    $P1419 = root_new ['parrot';'Hash']
   vivify_460:
-    if $P1427, if_1425
-.annotate 'line', 539
-    find_lex $P1451, "$key"
-    set $S1452, $P1451
-    iseq $I1453, $S1452, "open"
-    if $I1453, if_1450
-.annotate 'line', 552
-    .const 'Sub' $P1483 = "84_1274022903.56472" 
-    capture_lex $P1483
-    $P1483()
-    goto if_1450_end
-  if_1450:
-.annotate 'line', 539
-    .const 'Sub' $P1455 = "83_1274022903.56472" 
-    capture_lex $P1455
-    $P1455()
-  if_1450_end:
-    goto if_1425_end
-  if_1425:
-.annotate 'line', 514
-    get_hll_global $P1428, ["PAST"], "Stmts"
-.annotate 'line', 515
-    get_hll_global $P1429, ["PAST"], "Block"
-    find_lex $P1430, "$name"
-.annotate 'line', 516
-    get_hll_global $P1431, ["PAST"], "Op"
-.annotate 'line', 517
-    get_hll_global $P1432, ["PAST"], "Var"
-    $P1433 = $P1432."new"("self" :named("name"), "register" :named("scope"))
-    find_lex $P1434, "$name"
-    $P1435 = $P1431."new"($P1433, $P1434, "!protoregex" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 516
-    find_lex $P1436, "$/"
-    $P1437 = $P1429."new"($P1435, $P1430 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1436 :named("node"))
-.annotate 'line', 526
-    get_hll_global $P1438, ["PAST"], "Block"
-    new $P1439, "String"
-    assign $P1439, "!PREFIX__"
-    find_lex $P1440, "$name"
-    concat $P1441, $P1439, $P1440
-.annotate 'line', 527
-    get_hll_global $P1442, ["PAST"], "Op"
-.annotate 'line', 528
-    get_hll_global $P1443, ["PAST"], "Var"
-    $P1444 = $P1443."new"("self" :named("name"), "register" :named("scope"))
-    find_lex $P1445, "$name"
-    $P1446 = $P1442."new"($P1444, $P1445, "!PREFIX__!protoregex" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 527
-    find_lex $P1447, "$/"
-    $P1448 = $P1438."new"($P1446, $P1441 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1447 :named("node"))
-.annotate 'line', 526
-    $P1449 = $P1428."new"($P1437, $P1448)
-.annotate 'line', 514
-    store_lex "$past", $P1449
-  if_1425_end:
-.annotate 'line', 566
-    find_lex $P1504, "$/"
-    find_lex $P1505, "$past"
-    $P1506 = $P1504."!make"($P1505)
-.annotate 'line', 506
-    .return ($P1506)
-  control_1410:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1507, exception, "payload"
-    .return ($P1507)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "_block1482"  :anon :subid("84_1274022903.56472") :outer("82_1274022903.56472")
-.annotate 'line', 553
-    new $P1484, "Undef"
-    .lex "$regex", $P1484
-.annotate 'line', 554
-    get_hll_global $P1485, ["Regex";"P6Regex";"Actions"], "buildsub"
-    find_lex $P1486, "$/"
-    unless_null $P1486, vivify_461
-    $P1486 = root_new ['parrot';'Hash']
+    set $P1420, $P1419["sigil"]
+    unless_null $P1420, vivify_461
+    new $P1420, "Undef"
   vivify_461:
-    set $P1487, $P1486["p6regex"]
-    unless_null $P1487, vivify_462
-    new $P1487, "Undef"
+    $P1421 = "vivitype"($P1420)
+    $P1417."viviself"($P1421)
+  if_1413_end:
+.annotate 'line', 501
+    goto if_1402_end
+  if_1402:
+.annotate 'line', 498
+    find_lex $P1406, "$past"
+    $P1406."slurpy"(1)
+.annotate 'line', 499
+    find_lex $P1407, "$past"
+    find_lex $P1408, "$/"
+    unless_null $P1408, vivify_462
+    $P1408 = root_new ['parrot';'Hash']
   vivify_462:
-    $P1488 = $P1487."ast"()
-    get_global $P1489, "@BLOCK"
-    $P1490 = $P1489."shift"()
-    $P1491 = $P1485($P1488, $P1490)
-    store_lex "$regex", $P1491
-.annotate 'line', 555
-    find_lex $P1492, "$regex"
-    find_lex $P1493, "$name"
-    $P1492."name"($P1493)
-.annotate 'line', 557
-    get_hll_global $P1494, ["PAST"], "Op"
-.annotate 'line', 559
-    get_hll_global $P1495, ["PAST"], "Var"
-    new $P1496, "ResizablePMCArray"
-    push $P1496, "Regex"
-    $P1497 = $P1495."new"("Method" :named("name"), $P1496 :named("namespace"), "package" :named("scope"))
-    find_lex $P1498, "$regex"
-    $P1499 = $P1494."new"($P1497, $P1498, "callmethod" :named("pasttype"), "new" :named("name"))
-.annotate 'line', 557
-    store_lex "$past", $P1499
-.annotate 'line', 563
-    find_lex $P1500, "$regex"
-    find_lex $P1501, "$past"
-    unless_null $P1501, vivify_463
-    $P1501 = root_new ['parrot';'Hash']
-    store_lex "$past", $P1501
+    set $P1409, $P1408["param_var"]
+    unless_null $P1409, vivify_463
+    $P1409 = root_new ['parrot';'Hash']
   vivify_463:
-    set $P1501["sink"], $P1500
-.annotate 'line', 564
-    find_lex $P1502, "@MODIFIERS"
-    $P1503 = $P1502."shift"()
-.annotate 'line', 552
-    .return ($P1503)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "_block1454"  :anon :subid("83_1274022903.56472") :outer("82_1274022903.56472")
-.annotate 'line', 540
-    $P1456 = root_new ['parrot';'Hash']
-    .lex "%h", $P1456
-.annotate 'line', 539
-    find_lex $P1457, "%h"
-.annotate 'line', 541
-    find_lex $P1459, "$/"
-    unless_null $P1459, vivify_464
-    $P1459 = root_new ['parrot';'Hash']
+    set $P1410, $P1409["sigil"]
+    unless_null $P1410, vivify_464
+    new $P1410, "Undef"
   vivify_464:
-    set $P1460, $P1459["sym"]
-    unless_null $P1460, vivify_465
-    new $P1460, "Undef"
+    set $S1411, $P1410
+    iseq $I1412, $S1411, "%"
+    $P1407."named"($I1412)
+  if_1402_end:
+.annotate 'line', 495
+    goto if_1383_end
+  if_1383:
+.annotate 'line', 490
+    find_lex $P1386, "$/"
+    unless_null $P1386, vivify_465
+    $P1386 = root_new ['parrot';'Hash']
   vivify_465:
-    set $S1461, $P1460
-    iseq $I1462, $S1461, "token"
-    unless $I1462, if_1458_end
-    new $P1463, "Integer"
-    assign $P1463, 1
-    find_lex $P1464, "%h"
-    unless_null $P1464, vivify_466
-    $P1464 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1464
+    set $P1387, $P1386["named_param"]
+    unless_null $P1387, vivify_466
+    new $P1387, "Undef"
   vivify_466:
-    set $P1464["r"], $P1463
-  if_1458_end:
-.annotate 'line', 542
-    find_lex $P1466, "$/"
-    unless_null $P1466, vivify_467
-    $P1466 = root_new ['parrot';'Hash']
+    $P1388 = $P1387."ast"()
+    store_lex "$past", $P1388
+.annotate 'line', 491
+    find_lex $P1390, "$quant"
+    set $S1391, $P1390
+    isne $I1392, $S1391, "!"
+    unless $I1392, if_1389_end
+.annotate 'line', 492
+    find_lex $P1393, "$past"
+    find_lex $P1394, "$/"
+    unless_null $P1394, vivify_467
+    $P1394 = root_new ['parrot';'Hash']
   vivify_467:
-    set $P1467, $P1466["sym"]
-    unless_null $P1467, vivify_468
-    new $P1467, "Undef"
+    set $P1395, $P1394["named_param"]
+    unless_null $P1395, vivify_468
+    $P1395 = root_new ['parrot';'Hash']
   vivify_468:
-    set $S1468, $P1467
-    iseq $I1469, $S1468, "rule"
-    unless $I1469, if_1465_end
-    new $P1470, "Integer"
-    assign $P1470, 1
-    find_lex $P1471, "%h"
-    unless_null $P1471, vivify_469
-    $P1471 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1471
+    set $P1396, $P1395["param_var"]
+    unless_null $P1396, vivify_469
+    $P1396 = root_new ['parrot';'Hash']
   vivify_469:
-    set $P1471["r"], $P1470
-    new $P1472, "Integer"
-    assign $P1472, 1
-    find_lex $P1473, "%h"
-    unless_null $P1473, vivify_470
-    $P1473 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1473
+    set $P1397, $P1396["sigil"]
+    unless_null $P1397, vivify_470
+    new $P1397, "Undef"
   vivify_470:
-    set $P1473["s"], $P1472
-  if_1465_end:
-.annotate 'line', 543
-    find_lex $P1474, "@MODIFIERS"
-    find_lex $P1475, "%h"
-    $P1474."unshift"($P1475)
-.annotate 'line', 544
-
-            $P0 = find_lex '$name'
-            set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
-        
-.annotate 'line', 548
-    get_global $P1476, "@BLOCK"
-    unless_null $P1476, vivify_471
-    $P1476 = root_new ['parrot';'ResizablePMCArray']
+    $P1398 = "vivitype"($P1397)
+    $P1393."viviself"($P1398)
+  if_1389_end:
+  if_1383_end:
+.annotate 'line', 505
+    find_lex $P1423, "$/"
+    unless_null $P1423, vivify_471
+    $P1423 = root_new ['parrot';'Hash']
   vivify_471:
-    set $P1477, $P1476[0]
-    unless_null $P1477, vivify_472
-    new $P1477, "Undef"
+    set $P1424, $P1423["default_value"]
+    unless_null $P1424, vivify_472
+    new $P1424, "Undef"
   vivify_472:
-    $P1477."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
-.annotate 'line', 549
-    get_global $P1478, "@BLOCK"
-    unless_null $P1478, vivify_473
-    $P1478 = root_new ['parrot';'ResizablePMCArray']
+    unless $P1424, if_1422_end
+.annotate 'line', 506
+    find_lex $P1426, "$quant"
+    set $S1427, $P1426
+    iseq $I1428, $S1427, "*"
+    unless $I1428, if_1425_end
+.annotate 'line', 507
+    find_lex $P1429, "$/"
+    $P1430 = $P1429."CURSOR"()
+    $P1430."panic"("Can't put default on slurpy parameter")
+  if_1425_end:
+.annotate 'line', 509
+    find_lex $P1432, "$quant"
+    set $S1433, $P1432
+    iseq $I1434, $S1433, "!"
+    unless $I1434, if_1431_end
+.annotate 'line', 510
+    find_lex $P1435, "$/"
+    $P1436 = $P1435."CURSOR"()
+    $P1436."panic"("Can't put default on required parameter")
+  if_1431_end:
+.annotate 'line', 512
+    find_lex $P1437, "$past"
+    find_lex $P1438, "$/"
+    unless_null $P1438, vivify_473
+    $P1438 = root_new ['parrot';'Hash']
   vivify_473:
-    set $P1479, $P1478[0]
-    unless_null $P1479, vivify_474
-    new $P1479, "Undef"
+    set $P1439, $P1438["default_value"]
+    unless_null $P1439, vivify_474
+    $P1439 = root_new ['parrot';'ResizablePMCArray']
   vivify_474:
-    $P1479."symbol"("$/", "lexical" :named("scope"))
-.annotate 'line', 550
-    new $P1480, "Exception"
-    set $P1480['type'], 57
-    new $P1481, "Integer"
-    assign $P1481, 0
-    setattribute $P1480, 'payload', $P1481
-    throw $P1480
-.annotate 'line', 539
-    .return ()
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "dotty"  :subid("85_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1511
-.annotate 'line', 570
-    new $P1510, 'ExceptionHandler'
-    set_addr $P1510, control_1509
-    $P1510."handle_types"(57)
-    push_eh $P1510
-    .lex "self", self
-    .lex "$/", param_1511
-.annotate 'line', 571
-    new $P1512, "Undef"
-    .lex "$past", $P1512
-    find_lex $P1515, "$/"
-    unless_null $P1515, vivify_475
-    $P1515 = root_new ['parrot';'Hash']
+    set $P1440, $P1439[0]
+    unless_null $P1440, vivify_475
+    $P1440 = root_new ['parrot';'Hash']
   vivify_475:
-    set $P1516, $P1515["args"]
-    unless_null $P1516, vivify_476
-    new $P1516, "Undef"
+    set $P1441, $P1440["EXPR"]
+    unless_null $P1441, vivify_476
+    new $P1441, "Undef"
   vivify_476:
-    if $P1516, if_1514
-    get_hll_global $P1521, ["PAST"], "Op"
-    find_lex $P1522, "$/"
-    $P1523 = $P1521."new"($P1522 :named("node"))
-    set $P1513, $P1523
-    goto if_1514_end
-  if_1514:
-    find_lex $P1517, "$/"
-    unless_null $P1517, vivify_477
-    $P1517 = root_new ['parrot';'Hash']
+    $P1442 = $P1441."ast"()
+    $P1437."viviself"($P1442)
+  if_1422_end:
+.annotate 'line', 514
+    find_lex $P1444, "$past"
+    $P1445 = $P1444."viviself"()
+    if $P1445, unless_1443_end
+    get_global $P1446, "@BLOCK"
+    unless_null $P1446, vivify_477
+    $P1446 = root_new ['parrot';'ResizablePMCArray']
   vivify_477:
-    set $P1518, $P1517["args"]
-    unless_null $P1518, vivify_478
-    $P1518 = root_new ['parrot';'ResizablePMCArray']
+    set $P1447, $P1446[0]
+    unless_null $P1447, vivify_478
+    new $P1447, "Undef"
   vivify_478:
-    set $P1519, $P1518[0]
-    unless_null $P1519, vivify_479
-    new $P1519, "Undef"
+    get_global $P1448, "@BLOCK"
+    unless_null $P1448, vivify_479
+    $P1448 = root_new ['parrot';'ResizablePMCArray']
   vivify_479:
-    $P1520 = $P1519."ast"()
-    set $P1513, $P1520
-  if_1514_end:
-    store_lex "$past", $P1513
-.annotate 'line', 572
-    find_lex $P1524, "$past"
-    find_lex $P1527, "$/"
-    unless_null $P1527, vivify_480
-    $P1527 = root_new ['parrot';'Hash']
+    set $P1449, $P1448[0]
+    unless_null $P1449, vivify_480
+    new $P1449, "Undef"
   vivify_480:
-    set $P1528, $P1527["quote"]
-    unless_null $P1528, vivify_481
-    new $P1528, "Undef"
+    $P1450 = $P1449."arity"()
+    set $N1451, $P1450
+    new $P1452, 'Float'
+    set $P1452, $N1451
+    add $P1453, $P1452, 1
+    $P1447."arity"($P1453)
+  unless_1443_end:
+.annotate 'line', 517
+    find_lex $P1455, "$/"
+    unless_null $P1455, vivify_481
+    $P1455 = root_new ['parrot';'Hash']
   vivify_481:
-    if $P1528, if_1526
-    find_lex $P1532, "$/"
-    unless_null $P1532, vivify_482
-    $P1532 = root_new ['parrot';'Hash']
+    set $P1456, $P1455["typename"]
+    unless_null $P1456, vivify_482
+    new $P1456, "Undef"
   vivify_482:
-    set $P1533, $P1532["longname"]
-    unless_null $P1533, vivify_483
-    new $P1533, "Undef"
+    unless $P1456, if_1454_end
+    .const 'Sub' $P1458 = "85_1275811497.55064" 
+    capture_lex $P1458
+    $P1458()
+  if_1454_end:
+.annotate 'line', 523
+    find_lex $P1482, "$/"
+    find_lex $P1483, "$past"
+    $P1484 = $P1482."!make"($P1483)
+.annotate 'line', 486
+    .return ($P1484)
+  control_1375:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1485, exception, "payload"
+    .return ($P1485)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "_block1457"  :anon :subid("85_1275811497.55064") :outer("84_1275811497.55064")
+.annotate 'line', 517
+    .const 'Sub' $P1470 = "86_1275811497.55064" 
+    capture_lex $P1470
+.annotate 'line', 518
+    $P1459 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@multitype", $P1459
+.annotate 'line', 517
+    find_lex $P1460, "@multitype"
+.annotate 'line', 519
+    find_lex $P1462, "$/"
+    unless_null $P1462, vivify_483
+    $P1462 = root_new ['parrot';'Hash']
   vivify_483:
-    set $S1534, $P1533
-    new $P1525, 'String'
-    set $P1525, $S1534
-    goto if_1526_end
-  if_1526:
-    find_lex $P1529, "$/"
-    unless_null $P1529, vivify_484
-    $P1529 = root_new ['parrot';'Hash']
+    set $P1463, $P1462["typename"]
+    unless_null $P1463, vivify_484
+    $P1463 = root_new ['parrot';'ResizablePMCArray']
   vivify_484:
-    set $P1530, $P1529["quote"]
-    unless_null $P1530, vivify_485
-    new $P1530, "Undef"
+    set $P1464, $P1463[0]
+    unless_null $P1464, vivify_485
+    $P1464 = root_new ['parrot';'Hash']
   vivify_485:
-    $P1531 = $P1530."ast"()
-    set $P1525, $P1531
-  if_1526_end:
-    $P1524."name"($P1525)
-.annotate 'line', 573
-    find_lex $P1535, "$past"
-    $P1535."pasttype"("callmethod")
-.annotate 'line', 574
-    find_lex $P1536, "$/"
-    find_lex $P1537, "$past"
-    $P1538 = $P1536."!make"($P1537)
-.annotate 'line', 570
-    .return ($P1538)
-  control_1509:
+    set $P1465, $P1464["name"]
+    unless_null $P1465, vivify_486
+    $P1465 = root_new ['parrot';'Hash']
+  vivify_486:
+    set $P1466, $P1465["identifier"]
+    unless_null $P1466, vivify_487
+    new $P1466, "Undef"
+  vivify_487:
+    defined $I1467, $P1466
+    unless $I1467, for_undef_488
+    iter $P1461, $P1466
+    new $P1477, 'ExceptionHandler'
+    set_addr $P1477, loop1476_handler
+    $P1477."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1477
+  loop1476_test:
+    unless $P1461, loop1476_done
+    shift $P1468, $P1461
+  loop1476_redo:
+    .const 'Sub' $P1470 = "86_1275811497.55064" 
+    capture_lex $P1470
+    $P1470($P1468)
+  loop1476_next:
+    goto loop1476_test
+  loop1476_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1478, exception, 'type'
+    eq $P1478, .CONTROL_LOOP_NEXT, loop1476_next
+    eq $P1478, .CONTROL_LOOP_REDO, loop1476_redo
+  loop1476_done:
+    pop_eh 
+  for_undef_488:
+.annotate 'line', 520
+    find_lex $P1479, "$past"
+    find_lex $P1480, "@multitype"
+    $P1481 = $P1479."multitype"($P1480)
+.annotate 'line', 517
+    .return ($P1481)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.sub "_block1469"  :anon :subid("86_1275811497.55064") :outer("85_1275811497.55064")
+    .param pmc param_1471
+.annotate 'line', 519
+    .lex "$_", param_1471
+    find_lex $P1472, "@multitype"
+    find_lex $P1473, "$_"
+    set $S1474, $P1473
+    $P1475 = $P1472."push"($S1474)
+    .return ($P1475)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "param_var"  :subid("87_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1489
+.annotate 'line', 526
+    new $P1488, 'ExceptionHandler'
+    set_addr $P1488, control_1487
+    $P1488."handle_types"(.CONTROL_RETURN)
+    push_eh $P1488
+    .lex "self", self
+    .lex "$/", param_1489
+.annotate 'line', 527
+    new $P1490, "Undef"
+    .lex "$name", $P1490
+.annotate 'line', 528
+    new $P1491, "Undef"
+    .lex "$past", $P1491
+.annotate 'line', 527
+    find_lex $P1492, "$/"
+    set $S1493, $P1492
+    new $P1494, 'String'
+    set $P1494, $S1493
+    store_lex "$name", $P1494
+.annotate 'line', 528
+    get_hll_global $P1495, ["PAST"], "Var"
+    find_lex $P1496, "$name"
+    find_lex $P1497, "$/"
+    $P1498 = $P1495."new"($P1496 :named("name"), "parameter" :named("scope"), 1 :named("isdecl"), $P1497 :named("node"))
+    store_lex "$past", $P1498
+.annotate 'line', 530
+    get_global $P1499, "@BLOCK"
+    unless_null $P1499, vivify_489
+    $P1499 = root_new ['parrot';'ResizablePMCArray']
+  vivify_489:
+    set $P1500, $P1499[0]
+    unless_null $P1500, vivify_490
+    new $P1500, "Undef"
+  vivify_490:
+    find_lex $P1501, "$name"
+    $P1500."symbol"($P1501, "lexical" :named("scope"))
+.annotate 'line', 531
+    find_lex $P1502, "$/"
+    find_lex $P1503, "$past"
+    $P1504 = $P1502."!make"($P1503)
+.annotate 'line', 526
+    .return ($P1504)
+  control_1487:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1539, exception, "payload"
-    .return ($P1539)
+    getattribute $P1505, exception, "payload"
+    .return ($P1505)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<self>"  :subid("86_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1543
-.annotate 'line', 579
-    new $P1542, 'ExceptionHandler'
-    set_addr $P1542, control_1541
-    $P1542."handle_types"(57)
-    push_eh $P1542
-    .lex "self", self
-    .lex "$/", param_1543
-.annotate 'line', 580
-    find_lex $P1544, "$/"
-    get_hll_global $P1545, ["PAST"], "Var"
-    $P1546 = $P1545."new"("self" :named("name"))
-    $P1547 = $P1544."!make"($P1546)
-.annotate 'line', 579
-    .return ($P1547)
-  control_1541:
+.include "except_types.pasm"
+.sub "named_param"  :subid("88_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1509
+.annotate 'line', 534
+    new $P1508, 'ExceptionHandler'
+    set_addr $P1508, control_1507
+    $P1508."handle_types"(.CONTROL_RETURN)
+    push_eh $P1508
+    .lex "self", self
+    .lex "$/", param_1509
+.annotate 'line', 535
+    new $P1510, "Undef"
+    .lex "$past", $P1510
+    find_lex $P1511, "$/"
+    unless_null $P1511, vivify_491
+    $P1511 = root_new ['parrot';'Hash']
+  vivify_491:
+    set $P1512, $P1511["param_var"]
+    unless_null $P1512, vivify_492
+    new $P1512, "Undef"
+  vivify_492:
+    $P1513 = $P1512."ast"()
+    store_lex "$past", $P1513
+.annotate 'line', 536
+    find_lex $P1514, "$past"
+    find_lex $P1515, "$/"
+    unless_null $P1515, vivify_493
+    $P1515 = root_new ['parrot';'Hash']
+  vivify_493:
+    set $P1516, $P1515["param_var"]
+    unless_null $P1516, vivify_494
+    $P1516 = root_new ['parrot';'Hash']
+  vivify_494:
+    set $P1517, $P1516["name"]
+    unless_null $P1517, vivify_495
+    new $P1517, "Undef"
+  vivify_495:
+    set $S1518, $P1517
+    $P1514."named"($S1518)
+.annotate 'line', 537
+    find_lex $P1519, "$/"
+    find_lex $P1520, "$past"
+    $P1521 = $P1519."!make"($P1520)
+.annotate 'line', 534
+    .return ($P1521)
+  control_1507:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1548, exception, "payload"
-    .return ($P1548)
+    getattribute $P1522, exception, "payload"
+    .return ($P1522)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<identifier>"  :subid("87_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1552
-.annotate 'line', 583
-    new $P1551, 'ExceptionHandler'
-    set_addr $P1551, control_1550
-    $P1551."handle_types"(57)
-    push_eh $P1551
+.include "except_types.pasm"
+.sub "regex_declarator"  :subid("89_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1526
+    .param pmc param_1527 :optional
+    .param int has_param_1527 :opt_flag
+.annotate 'line', 540
+    .const 'Sub' $P1597 = "91_1275811497.55064" 
+    capture_lex $P1597
+    .const 'Sub' $P1569 = "90_1275811497.55064" 
+    capture_lex $P1569
+    new $P1525, 'ExceptionHandler'
+    set_addr $P1525, control_1524
+    $P1525."handle_types"(.CONTROL_RETURN)
+    push_eh $P1525
     .lex "self", self
-    .lex "$/", param_1552
-.annotate 'line', 584
-    new $P1553, "Undef"
-    .lex "$past", $P1553
-    find_lex $P1554, "$/"
-    unless_null $P1554, vivify_486
-    $P1554 = root_new ['parrot';'Hash']
-  vivify_486:
-    set $P1555, $P1554["args"]
-    unless_null $P1555, vivify_487
-    new $P1555, "Undef"
-  vivify_487:
-    $P1556 = $P1555."ast"()
-    store_lex "$past", $P1556
-.annotate 'line', 585
-    find_lex $P1557, "$past"
-    find_lex $P1558, "$/"
-    unless_null $P1558, vivify_488
-    $P1558 = root_new ['parrot';'Hash']
-  vivify_488:
-    set $P1559, $P1558["identifier"]
-    unless_null $P1559, vivify_489
-    new $P1559, "Undef"
-  vivify_489:
-    set $S1560, $P1559
-    $P1557."name"($S1560)
+    .lex "$/", param_1526
+    if has_param_1527, optparam_496
+    new $P1528, "Undef"
+    set param_1527, $P1528
+  optparam_496:
+    .lex "$key", param_1527
+.annotate 'line', 541
+    $P1529 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@MODIFIERS", $P1529
+.annotate 'line', 544
+    new $P1530, "Undef"
+    .lex "$name", $P1530
+.annotate 'line', 545
+    new $P1531, "Undef"
+    .lex "$past", $P1531
+.annotate 'line', 541
+
+        $P1532 = get_hll_global ['Regex';'P6Regex';'Actions'], '@MODIFIERS'
+    
+    store_lex "@MODIFIERS", $P1532
+.annotate 'line', 544
+    find_lex $P1533, "$/"
+    unless_null $P1533, vivify_497
+    $P1533 = root_new ['parrot';'Hash']
+  vivify_497:
+    set $P1534, $P1533["deflongname"]
+    unless_null $P1534, vivify_498
+    new $P1534, "Undef"
+  vivify_498:
+    $P1535 = $P1534."ast"()
+    set $S1536, $P1535
+    new $P1537, 'String'
+    set $P1537, $S1536
+    store_lex "$name", $P1537
+    find_lex $P1538, "$past"
+.annotate 'line', 546
+    find_lex $P1540, "$/"
+    unless_null $P1540, vivify_499
+    $P1540 = root_new ['parrot';'Hash']
+  vivify_499:
+    set $P1541, $P1540["proto"]
+    unless_null $P1541, vivify_500
+    new $P1541, "Undef"
+  vivify_500:
+    if $P1541, if_1539
+.annotate 'line', 573
+    find_lex $P1565, "$key"
+    set $S1566, $P1565
+    iseq $I1567, $S1566, "open"
+    if $I1567, if_1564
 .annotate 'line', 586
+    .const 'Sub' $P1597 = "91_1275811497.55064" 
+    capture_lex $P1597
+    $P1597()
+    goto if_1564_end
+  if_1564:
+.annotate 'line', 573
+    .const 'Sub' $P1569 = "90_1275811497.55064" 
+    capture_lex $P1569
+    $P1569()
+  if_1564_end:
+    goto if_1539_end
+  if_1539:
+.annotate 'line', 548
+    get_hll_global $P1542, ["PAST"], "Stmts"
+.annotate 'line', 549
+    get_hll_global $P1543, ["PAST"], "Block"
+    find_lex $P1544, "$name"
+.annotate 'line', 550
+    get_hll_global $P1545, ["PAST"], "Op"
+.annotate 'line', 551
+    get_hll_global $P1546, ["PAST"], "Var"
+    $P1547 = $P1546."new"("self" :named("name"), "register" :named("scope"))
+    find_lex $P1548, "$name"
+    $P1549 = $P1545."new"($P1547, $P1548, "!protoregex" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 550
+    find_lex $P1550, "$/"
+    $P1551 = $P1543."new"($P1549, $P1544 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1550 :named("node"))
+.annotate 'line', 560
+    get_hll_global $P1552, ["PAST"], "Block"
+    new $P1553, "String"
+    assign $P1553, "!PREFIX__"
+    find_lex $P1554, "$name"
+    concat $P1555, $P1553, $P1554
+.annotate 'line', 561
+    get_hll_global $P1556, ["PAST"], "Op"
+.annotate 'line', 562
+    get_hll_global $P1557, ["PAST"], "Var"
+    $P1558 = $P1557."new"("self" :named("name"), "register" :named("scope"))
+    find_lex $P1559, "$name"
+    $P1560 = $P1556."new"($P1558, $P1559, "!PREFIX__!protoregex" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 561
     find_lex $P1561, "$/"
-    find_lex $P1562, "$past"
-    $P1563 = $P1561."!make"($P1562)
-.annotate 'line', 583
-    .return ($P1563)
-  control_1550:
+    $P1562 = $P1552."new"($P1560, $P1555 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1561 :named("node"))
+.annotate 'line', 560
+    $P1563 = $P1542."new"($P1551, $P1562)
+.annotate 'line', 548
+    store_lex "$past", $P1563
+  if_1539_end:
+.annotate 'line', 600
+    find_lex $P1618, "$/"
+    find_lex $P1619, "$past"
+    $P1620 = $P1618."!make"($P1619)
+.annotate 'line', 540
+    .return ($P1620)
+  control_1524:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1564, exception, "payload"
-    .return ($P1564)
+    getattribute $P1621, exception, "payload"
+    .return ($P1621)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<name>"  :subid("88_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1568
+.sub "_block1596"  :anon :subid("91_1275811497.55064") :outer("89_1275811497.55064")
+.annotate 'line', 587
+    new $P1598, "Undef"
+    .lex "$regex", $P1598
+.annotate 'line', 588
+    get_hll_global $P1599, ["Regex";"P6Regex";"Actions"], "buildsub"
+    find_lex $P1600, "$/"
+    unless_null $P1600, vivify_501
+    $P1600 = root_new ['parrot';'Hash']
+  vivify_501:
+    set $P1601, $P1600["p6regex"]
+    unless_null $P1601, vivify_502
+    new $P1601, "Undef"
+  vivify_502:
+    $P1602 = $P1601."ast"()
+    get_global $P1603, "@BLOCK"
+    $P1604 = $P1603."shift"()
+    $P1605 = $P1599($P1602, $P1604)
+    store_lex "$regex", $P1605
 .annotate 'line', 589
-    new $P1567, 'ExceptionHandler'
-    set_addr $P1567, control_1566
-    $P1567."handle_types"(57)
-    push_eh $P1567
-    .lex "self", self
-    .lex "$/", param_1568
-.annotate 'line', 590
-    $P1569 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@ns", $P1569
+    find_lex $P1606, "$regex"
+    find_lex $P1607, "$name"
+    $P1606."name"($P1607)
 .annotate 'line', 591
-    new $P1570, "Undef"
-    .lex "$name", $P1570
+    get_hll_global $P1608, ["PAST"], "Op"
 .annotate 'line', 593
-    new $P1571, "Undef"
-    .lex "$var", $P1571
-.annotate 'line', 595
-    new $P1572, "Undef"
-    .lex "$past", $P1572
-.annotate 'line', 590
-    find_lex $P1573, "$/"
-    unless_null $P1573, vivify_490
-    $P1573 = root_new ['parrot';'Hash']
-  vivify_490:
-    set $P1574, $P1573["name"]
-    unless_null $P1574, vivify_491
-    $P1574 = root_new ['parrot';'Hash']
-  vivify_491:
-    set $P1575, $P1574["identifier"]
-    unless_null $P1575, vivify_492
-    new $P1575, "Undef"
-  vivify_492:
-    clone $P1576, $P1575
-    store_lex "@ns", $P1576
+    get_hll_global $P1609, ["PAST"], "Var"
+    new $P1610, "ResizablePMCArray"
+    push $P1610, "Regex"
+    $P1611 = $P1609."new"("Method" :named("name"), $P1610 :named("namespace"), "package" :named("scope"))
+    find_lex $P1612, "$regex"
+    $P1613 = $P1608."new"($P1611, $P1612, "callmethod" :named("pasttype"), "new" :named("name"))
 .annotate 'line', 591
-    find_lex $P1577, "@ns"
-    $P1578 = $P1577."pop"()
-    store_lex "$name", $P1578
-.annotate 'line', 592
-    find_lex $P1582, "@ns"
-    if $P1582, if_1581
-    set $P1580, $P1582
-    goto if_1581_end
-  if_1581:
-    find_lex $P1583, "@ns"
-    unless_null $P1583, vivify_493
-    $P1583 = root_new ['parrot';'ResizablePMCArray']
-  vivify_493:
-    set $P1584, $P1583[0]
-    unless_null $P1584, vivify_494
-    new $P1584, "Undef"
-  vivify_494:
-    set $S1585, $P1584
-    iseq $I1586, $S1585, "GLOBAL"
-    new $P1580, 'Integer'
-    set $P1580, $I1586
-  if_1581_end:
-    unless $P1580, if_1579_end
-    find_lex $P1587, "@ns"
-    $P1587."shift"()
-  if_1579_end:
-.annotate 'line', 594
-    get_hll_global $P1588, ["PAST"], "Var"
-    find_lex $P1589, "$name"
-    set $S1590, $P1589
-    find_lex $P1591, "@ns"
-    $P1592 = $P1588."new"($S1590 :named("name"), $P1591 :named("namespace"), "package" :named("scope"))
-    store_lex "$var", $P1592
-.annotate 'line', 595
-    find_lex $P1593, "$var"
-    store_lex "$past", $P1593
-.annotate 'line', 596
-    find_lex $P1595, "$/"
-    unless_null $P1595, vivify_495
-    $P1595 = root_new ['parrot';'Hash']
-  vivify_495:
-    set $P1596, $P1595["args"]
-    unless_null $P1596, vivify_496
-    new $P1596, "Undef"
-  vivify_496:
-    unless $P1596, if_1594_end
+    store_lex "$past", $P1613
 .annotate 'line', 597
-    find_lex $P1597, "$/"
-    unless_null $P1597, vivify_497
-    $P1597 = root_new ['parrot';'Hash']
-  vivify_497:
-    set $P1598, $P1597["args"]
-    unless_null $P1598, vivify_498
-    $P1598 = root_new ['parrot';'ResizablePMCArray']
-  vivify_498:
-    set $P1599, $P1598[0]
-    unless_null $P1599, vivify_499
-    new $P1599, "Undef"
-  vivify_499:
-    $P1600 = $P1599."ast"()
-    store_lex "$past", $P1600
+    find_lex $P1614, "$regex"
+    find_lex $P1615, "$past"
+    unless_null $P1615, vivify_503
+    $P1615 = root_new ['parrot';'Hash']
+    store_lex "$past", $P1615
+  vivify_503:
+    set $P1615["sink"], $P1614
 .annotate 'line', 598
-    find_lex $P1601, "$past"
-    find_lex $P1602, "$var"
-    $P1601."unshift"($P1602)
-  if_1594_end:
-.annotate 'line', 600
-    find_lex $P1603, "$/"
-    find_lex $P1604, "$past"
-    $P1605 = $P1603."!make"($P1604)
-.annotate 'line', 589
-    .return ($P1605)
-  control_1566:
+    find_lex $P1616, "@MODIFIERS"
+    $P1617 = $P1616."shift"()
+.annotate 'line', 586
+    .return ($P1617)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "_block1568"  :anon :subid("90_1275811497.55064") :outer("89_1275811497.55064")
+.annotate 'line', 574
+    $P1570 = root_new ['parrot';'Hash']
+    .lex "%h", $P1570
+.annotate 'line', 573
+    find_lex $P1571, "%h"
+.annotate 'line', 575
+    find_lex $P1573, "$/"
+    unless_null $P1573, vivify_504
+    $P1573 = root_new ['parrot';'Hash']
+  vivify_504:
+    set $P1574, $P1573["sym"]
+    unless_null $P1574, vivify_505
+    new $P1574, "Undef"
+  vivify_505:
+    set $S1575, $P1574
+    iseq $I1576, $S1575, "token"
+    unless $I1576, if_1572_end
+    new $P1577, "Integer"
+    assign $P1577, 1
+    find_lex $P1578, "%h"
+    unless_null $P1578, vivify_506
+    $P1578 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1578
+  vivify_506:
+    set $P1578["r"], $P1577
+  if_1572_end:
+.annotate 'line', 576
+    find_lex $P1580, "$/"
+    unless_null $P1580, vivify_507
+    $P1580 = root_new ['parrot';'Hash']
+  vivify_507:
+    set $P1581, $P1580["sym"]
+    unless_null $P1581, vivify_508
+    new $P1581, "Undef"
+  vivify_508:
+    set $S1582, $P1581
+    iseq $I1583, $S1582, "rule"
+    unless $I1583, if_1579_end
+    new $P1584, "Integer"
+    assign $P1584, 1
+    find_lex $P1585, "%h"
+    unless_null $P1585, vivify_509
+    $P1585 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1585
+  vivify_509:
+    set $P1585["r"], $P1584
+    new $P1586, "Integer"
+    assign $P1586, 1
+    find_lex $P1587, "%h"
+    unless_null $P1587, vivify_510
+    $P1587 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1587
+  vivify_510:
+    set $P1587["s"], $P1586
+  if_1579_end:
+.annotate 'line', 577
+    find_lex $P1588, "@MODIFIERS"
+    find_lex $P1589, "%h"
+    $P1588."unshift"($P1589)
+.annotate 'line', 578
+
+            $P0 = find_lex '$name'
+            set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
+        
+.annotate 'line', 582
+    get_global $P1590, "@BLOCK"
+    unless_null $P1590, vivify_511
+    $P1590 = root_new ['parrot';'ResizablePMCArray']
+  vivify_511:
+    set $P1591, $P1590[0]
+    unless_null $P1591, vivify_512
+    new $P1591, "Undef"
+  vivify_512:
+    $P1591."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
+.annotate 'line', 583
+    get_global $P1592, "@BLOCK"
+    unless_null $P1592, vivify_513
+    $P1592 = root_new ['parrot';'ResizablePMCArray']
+  vivify_513:
+    set $P1593, $P1592[0]
+    unless_null $P1593, vivify_514
+    new $P1593, "Undef"
+  vivify_514:
+    $P1593."symbol"("$/", "lexical" :named("scope"))
+.annotate 'line', 584
+    new $P1594, "Exception"
+    set $P1594['type'], .CONTROL_RETURN
+    new $P1595, "Integer"
+    assign $P1595, 0
+    setattribute $P1594, 'payload', $P1595
+    throw $P1594
+.annotate 'line', 573
+    .return ()
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "dotty"  :subid("92_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1625
+.annotate 'line', 604
+    new $P1624, 'ExceptionHandler'
+    set_addr $P1624, control_1623
+    $P1624."handle_types"(.CONTROL_RETURN)
+    push_eh $P1624
+    .lex "self", self
+    .lex "$/", param_1625
+.annotate 'line', 605
+    new $P1626, "Undef"
+    .lex "$past", $P1626
+    find_lex $P1629, "$/"
+    unless_null $P1629, vivify_515
+    $P1629 = root_new ['parrot';'Hash']
+  vivify_515:
+    set $P1630, $P1629["args"]
+    unless_null $P1630, vivify_516
+    new $P1630, "Undef"
+  vivify_516:
+    if $P1630, if_1628
+    get_hll_global $P1635, ["PAST"], "Op"
+    find_lex $P1636, "$/"
+    $P1637 = $P1635."new"($P1636 :named("node"))
+    set $P1627, $P1637
+    goto if_1628_end
+  if_1628:
+    find_lex $P1631, "$/"
+    unless_null $P1631, vivify_517
+    $P1631 = root_new ['parrot';'Hash']
+  vivify_517:
+    set $P1632, $P1631["args"]
+    unless_null $P1632, vivify_518
+    $P1632 = root_new ['parrot';'ResizablePMCArray']
+  vivify_518:
+    set $P1633, $P1632[0]
+    unless_null $P1633, vivify_519
+    new $P1633, "Undef"
+  vivify_519:
+    $P1634 = $P1633."ast"()
+    set $P1627, $P1634
+  if_1628_end:
+    store_lex "$past", $P1627
+.annotate 'line', 606
+    find_lex $P1638, "$past"
+    find_lex $P1641, "$/"
+    unless_null $P1641, vivify_520
+    $P1641 = root_new ['parrot';'Hash']
+  vivify_520:
+    set $P1642, $P1641["quote"]
+    unless_null $P1642, vivify_521
+    new $P1642, "Undef"
+  vivify_521:
+    if $P1642, if_1640
+    find_lex $P1646, "$/"
+    unless_null $P1646, vivify_522
+    $P1646 = root_new ['parrot';'Hash']
+  vivify_522:
+    set $P1647, $P1646["longname"]
+    unless_null $P1647, vivify_523
+    new $P1647, "Undef"
+  vivify_523:
+    set $S1648, $P1647
+    new $P1639, 'String'
+    set $P1639, $S1648
+    goto if_1640_end
+  if_1640:
+    find_lex $P1643, "$/"
+    unless_null $P1643, vivify_524
+    $P1643 = root_new ['parrot';'Hash']
+  vivify_524:
+    set $P1644, $P1643["quote"]
+    unless_null $P1644, vivify_525
+    new $P1644, "Undef"
+  vivify_525:
+    $P1645 = $P1644."ast"()
+    set $P1639, $P1645
+  if_1640_end:
+    $P1638."name"($P1639)
+.annotate 'line', 607
+    find_lex $P1649, "$past"
+    $P1649."pasttype"("callmethod")
+.annotate 'line', 608
+    find_lex $P1650, "$/"
+    find_lex $P1651, "$past"
+    $P1652 = $P1650."!make"($P1651)
+.annotate 'line', 604
+    .return ($P1652)
+  control_1623:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1606, exception, "payload"
-    .return ($P1606)
+    getattribute $P1653, exception, "payload"
+    .return ($P1653)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<pir::op>"  :subid("89_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1610
-.annotate 'line', 603
-    new $P1609, 'ExceptionHandler'
-    set_addr $P1609, control_1608
-    $P1609."handle_types"(57)
-    push_eh $P1609
-    .lex "self", self
-    .lex "$/", param_1610
-.annotate 'line', 604
-    new $P1611, "Undef"
-    .lex "$past", $P1611
-.annotate 'line', 605
-    new $P1612, "Undef"
-    .lex "$pirop", $P1612
-.annotate 'line', 604
-    find_lex $P1615, "$/"
-    unless_null $P1615, vivify_500
-    $P1615 = root_new ['parrot';'Hash']
-  vivify_500:
-    set $P1616, $P1615["args"]
-    unless_null $P1616, vivify_501
-    new $P1616, "Undef"
-  vivify_501:
-    if $P1616, if_1614
-    get_hll_global $P1621, ["PAST"], "Op"
-    find_lex $P1622, "$/"
-    $P1623 = $P1621."new"($P1622 :named("node"))
-    set $P1613, $P1623
-    goto if_1614_end
-  if_1614:
-    find_lex $P1617, "$/"
-    unless_null $P1617, vivify_502
-    $P1617 = root_new ['parrot';'Hash']
-  vivify_502:
-    set $P1618, $P1617["args"]
-    unless_null $P1618, vivify_503
-    $P1618 = root_new ['parrot';'ResizablePMCArray']
-  vivify_503:
-    set $P1619, $P1618[0]
-    unless_null $P1619, vivify_504
-    new $P1619, "Undef"
-  vivify_504:
-    $P1620 = $P1619."ast"()
-    set $P1613, $P1620
-  if_1614_end:
-    store_lex "$past", $P1613
-.annotate 'line', 605
-    find_lex $P1624, "$/"
-    unless_null $P1624, vivify_505
-    $P1624 = root_new ['parrot';'Hash']
-  vivify_505:
-    set $P1625, $P1624["op"]
-    unless_null $P1625, vivify_506
-    new $P1625, "Undef"
-  vivify_506:
-    set $S1626, $P1625
-    new $P1627, 'String'
-    set $P1627, $S1626
-    store_lex "$pirop", $P1627
-.annotate 'line', 606
-
-        $P0 = find_lex '$pirop'
-        $S0 = $P0
-        $P0 = split '__', $S0
-        $S0 = join ' ', $P0
-        $P1628 = box $S0
-    
-    store_lex "$pirop", $P1628
+.include "except_types.pasm"
+.sub "term:sym<self>"  :subid("93_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1657
 .annotate 'line', 613
-    find_lex $P1629, "$past"
-    find_lex $P1630, "$pirop"
-    $P1629."pirop"($P1630)
+    new $P1656, 'ExceptionHandler'
+    set_addr $P1656, control_1655
+    $P1656."handle_types"(.CONTROL_RETURN)
+    push_eh $P1656
+    .lex "self", self
+    .lex "$/", param_1657
 .annotate 'line', 614
-    find_lex $P1631, "$past"
-    $P1631."pasttype"("pirop")
-.annotate 'line', 615
-    find_lex $P1632, "$/"
-    find_lex $P1633, "$past"
-    $P1634 = $P1632."!make"($P1633)
-.annotate 'line', 603
-    .return ($P1634)
-  control_1608:
+    find_lex $P1658, "$/"
+    get_hll_global $P1659, ["PAST"], "Var"
+    $P1660 = $P1659."new"("self" :named("name"))
+    $P1661 = $P1658."!make"($P1660)
+.annotate 'line', 613
+    .return ($P1661)
+  control_1655:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1635, exception, "payload"
-    .return ($P1635)
+    getattribute $P1662, exception, "payload"
+    .return ($P1662)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "args"  :subid("90_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1639
-.annotate 'line', 618
-    new $P1638, 'ExceptionHandler'
-    set_addr $P1638, control_1637
-    $P1638."handle_types"(57)
-    push_eh $P1638
+.include "except_types.pasm"
+.sub "term:sym<identifier>"  :subid("94_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1666
+.annotate 'line', 617
+    new $P1665, 'ExceptionHandler'
+    set_addr $P1665, control_1664
+    $P1665."handle_types"(.CONTROL_RETURN)
+    push_eh $P1665
     .lex "self", self
-    .lex "$/", param_1639
-    find_lex $P1640, "$/"
-    find_lex $P1641, "$/"
-    unless_null $P1641, vivify_507
-    $P1641 = root_new ['parrot';'Hash']
-  vivify_507:
-    set $P1642, $P1641["arglist"]
-    unless_null $P1642, vivify_508
-    new $P1642, "Undef"
-  vivify_508:
-    $P1643 = $P1642."ast"()
-    $P1644 = $P1640."!make"($P1643)
-    .return ($P1644)
-  control_1637:
+    .lex "$/", param_1666
+.annotate 'line', 618
+    new $P1667, "Undef"
+    .lex "$past", $P1667
+    find_lex $P1668, "$/"
+    unless_null $P1668, vivify_526
+    $P1668 = root_new ['parrot';'Hash']
+  vivify_526:
+    set $P1669, $P1668["args"]
+    unless_null $P1669, vivify_527
+    new $P1669, "Undef"
+  vivify_527:
+    $P1670 = $P1669."ast"()
+    store_lex "$past", $P1670
+.annotate 'line', 619
+    find_lex $P1671, "$past"
+    find_lex $P1672, "$/"
+    unless_null $P1672, vivify_528
+    $P1672 = root_new ['parrot';'Hash']
+  vivify_528:
+    set $P1673, $P1672["identifier"]
+    unless_null $P1673, vivify_529
+    new $P1673, "Undef"
+  vivify_529:
+    set $S1674, $P1673
+    $P1671."name"($S1674)
+.annotate 'line', 620
+    find_lex $P1675, "$/"
+    find_lex $P1676, "$past"
+    $P1677 = $P1675."!make"($P1676)
+.annotate 'line', 617
+    .return ($P1677)
+  control_1664:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1645, exception, "payload"
-    .return ($P1645)
+    getattribute $P1678, exception, "payload"
+    .return ($P1678)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "arglist"  :subid("91_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1649
-.annotate 'line', 620
-    .const 'Sub' $P1660 = "92_1274022903.56472" 
-    capture_lex $P1660
-    new $P1648, 'ExceptionHandler'
-    set_addr $P1648, control_1647
-    $P1648."handle_types"(57)
-    push_eh $P1648
-    .lex "self", self
-    .lex "$/", param_1649
-.annotate 'line', 621
-    new $P1650, "Undef"
-    .lex "$past", $P1650
+.include "except_types.pasm"
+.sub "term:sym<name>"  :subid("95_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1682
+.annotate 'line', 623
+    new $P1681, 'ExceptionHandler'
+    set_addr $P1681, control_1680
+    $P1681."handle_types"(.CONTROL_RETURN)
+    push_eh $P1681
+    .lex "self", self
+    .lex "$/", param_1682
+.annotate 'line', 624
+    $P1683 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@ns", $P1683
+.annotate 'line', 625
+    new $P1684, "Undef"
+    .lex "$name", $P1684
+.annotate 'line', 627
+    new $P1685, "Undef"
+    .lex "$var", $P1685
 .annotate 'line', 629
-    new $P1651, "Undef"
-    .lex "$i", $P1651
-.annotate 'line', 630
-    new $P1652, "Undef"
-    .lex "$n", $P1652
-.annotate 'line', 621
-    get_hll_global $P1653, ["PAST"], "Op"
-    find_lex $P1654, "$/"
-    $P1655 = $P1653."new"("call" :named("pasttype"), $P1654 :named("node"))
-    store_lex "$past", $P1655
-.annotate 'line', 622
-    find_lex $P1657, "$/"
-    unless_null $P1657, vivify_509
-    $P1657 = root_new ['parrot';'Hash']
-  vivify_509:
-    set $P1658, $P1657["EXPR"]
-    unless_null $P1658, vivify_510
-    new $P1658, "Undef"
-  vivify_510:
-    unless $P1658, if_1656_end
-    .const 'Sub' $P1660 = "92_1274022903.56472" 
-    capture_lex $P1660
-    $P1660()
-  if_1656_end:
+    new $P1686, "Undef"
+    .lex "$past", $P1686
+.annotate 'line', 624
+    find_lex $P1687, "$/"
+    unless_null $P1687, vivify_530
+    $P1687 = root_new ['parrot';'Hash']
+  vivify_530:
+    set $P1688, $P1687["name"]
+    unless_null $P1688, vivify_531
+    $P1688 = root_new ['parrot';'Hash']
+  vivify_531:
+    set $P1689, $P1688["identifier"]
+    unless_null $P1689, vivify_532
+    new $P1689, "Undef"
+  vivify_532:
+    clone $P1690, $P1689
+    store_lex "@ns", $P1690
+.annotate 'line', 625
+    find_lex $P1691, "@ns"
+    $P1692 = $P1691."pop"()
+    store_lex "$name", $P1692
+.annotate 'line', 626
+    find_lex $P1696, "@ns"
+    if $P1696, if_1695
+    set $P1694, $P1696
+    goto if_1695_end
+  if_1695:
+    find_lex $P1697, "@ns"
+    unless_null $P1697, vivify_533
+    $P1697 = root_new ['parrot';'ResizablePMCArray']
+  vivify_533:
+    set $P1698, $P1697[0]
+    unless_null $P1698, vivify_534
+    new $P1698, "Undef"
+  vivify_534:
+    set $S1699, $P1698
+    iseq $I1700, $S1699, "GLOBAL"
+    new $P1694, 'Integer'
+    set $P1694, $I1700
+  if_1695_end:
+    unless $P1694, if_1693_end
+    find_lex $P1701, "@ns"
+    $P1701."shift"()
+  if_1693_end:
+.annotate 'line', 628
+    get_hll_global $P1702, ["PAST"], "Var"
+    find_lex $P1703, "$name"
+    set $S1704, $P1703
+    find_lex $P1705, "@ns"
+    $P1706 = $P1702."new"($S1704 :named("name"), $P1705 :named("namespace"), "package" :named("scope"))
+    store_lex "$var", $P1706
 .annotate 'line', 629
-    new $P1692, "Integer"
-    assign $P1692, 0
-    store_lex "$i", $P1692
+    find_lex $P1707, "$var"
+    store_lex "$past", $P1707
 .annotate 'line', 630
-    find_lex $P1693, "$past"
-    $P1694 = $P1693."list"()
-    set $N1695, $P1694
-    new $P1696, 'Float'
-    set $P1696, $N1695
-    store_lex "$n", $P1696
+    find_lex $P1709, "$/"
+    unless_null $P1709, vivify_535
+    $P1709 = root_new ['parrot';'Hash']
+  vivify_535:
+    set $P1710, $P1709["args"]
+    unless_null $P1710, vivify_536
+    new $P1710, "Undef"
+  vivify_536:
+    unless $P1710, if_1708_end
 .annotate 'line', 631
-    new $P1744, 'ExceptionHandler'
-    set_addr $P1744, loop1743_handler
-    $P1744."handle_types"(64, 66, 65)
-    push_eh $P1744
-  loop1743_test:
-    find_lex $P1697, "$i"
-    set $N1698, $P1697
-    find_lex $P1699, "$n"
-    set $N1700, $P1699
-    islt $I1701, $N1698, $N1700
-    unless $I1701, loop1743_done
-  loop1743_redo:
-.annotate 'line', 632
-    find_lex $P1703, "$i"
-    set $I1704, $P1703
-    find_lex $P1705, "$past"
-    unless_null $P1705, vivify_514
-    $P1705 = root_new ['parrot';'ResizablePMCArray']
-  vivify_514:
-    set $P1706, $P1705[$I1704]
-    unless_null $P1706, vivify_515
-    new $P1706, "Undef"
-  vivify_515:
-    $S1707 = $P1706."name"()
-    iseq $I1708, $S1707, "&prefix:<|>"
-    unless $I1708, if_1702_end
-.annotate 'line', 633
-    find_lex $P1709, "$i"
-    set $I1710, $P1709
-    find_lex $P1711, "$past"
-    unless_null $P1711, vivify_516
-    $P1711 = root_new ['parrot';'ResizablePMCArray']
-  vivify_516:
-    set $P1712, $P1711[$I1710]
-    unless_null $P1712, vivify_517
+    find_lex $P1711, "$/"
+    unless_null $P1711, vivify_537
+    $P1711 = root_new ['parrot';'Hash']
+  vivify_537:
+    set $P1712, $P1711["args"]
+    unless_null $P1712, vivify_538
     $P1712 = root_new ['parrot';'ResizablePMCArray']
-  vivify_517:
+  vivify_538:
     set $P1713, $P1712[0]
-    unless_null $P1713, vivify_518
+    unless_null $P1713, vivify_539
     new $P1713, "Undef"
-  vivify_518:
-    find_lex $P1714, "$i"
-    set $I1715, $P1714
-    find_lex $P1716, "$past"
-    unless_null $P1716, vivify_519
-    $P1716 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$past", $P1716
-  vivify_519:
-    set $P1716[$I1715], $P1713
-.annotate 'line', 634
-    find_lex $P1717, "$i"
-    set $I1718, $P1717
-    find_lex $P1719, "$past"
-    unless_null $P1719, vivify_520
-    $P1719 = root_new ['parrot';'ResizablePMCArray']
-  vivify_520:
-    set $P1720, $P1719[$I1718]
-    unless_null $P1720, vivify_521
-    new $P1720, "Undef"
-  vivify_521:
-    $P1720."flat"(1)
-.annotate 'line', 635
-    find_lex $P1724, "$i"
-    set $I1725, $P1724
-    find_lex $P1726, "$past"
-    unless_null $P1726, vivify_522
-    $P1726 = root_new ['parrot';'ResizablePMCArray']
-  vivify_522:
-    set $P1727, $P1726[$I1725]
-    unless_null $P1727, vivify_523
-    new $P1727, "Undef"
-  vivify_523:
-    get_hll_global $P1728, ["PAST"], "Val"
-    $P1729 = $P1727."isa"($P1728)
-    if $P1729, if_1723
-    set $P1722, $P1729
-    goto if_1723_end
-  if_1723:
-.annotate 'line', 636
-    find_lex $P1730, "$i"
-    set $I1731, $P1730
-    find_lex $P1732, "$past"
-    unless_null $P1732, vivify_524
-    $P1732 = root_new ['parrot';'ResizablePMCArray']
-  vivify_524:
-    set $P1733, $P1732[$I1731]
-    unless_null $P1733, vivify_525
-    new $P1733, "Undef"
-  vivify_525:
-    $S1734 = $P1733."name"()
-    substr $S1735, $S1734, 0, 1
-    iseq $I1736, $S1735, "%"
-    new $P1722, 'Integer'
-    set $P1722, $I1736
-  if_1723_end:
-    unless $P1722, if_1721_end
-.annotate 'line', 637
-    find_lex $P1737, "$i"
-    set $I1738, $P1737
-    find_lex $P1739, "$past"
-    unless_null $P1739, vivify_526
-    $P1739 = root_new ['parrot';'ResizablePMCArray']
-  vivify_526:
-    set $P1740, $P1739[$I1738]
-    unless_null $P1740, vivify_527
-    new $P1740, "Undef"
-  vivify_527:
-    $P1740."named"(1)
-  if_1721_end:
-  if_1702_end:
+  vivify_539:
+    $P1714 = $P1713."ast"()
+    store_lex "$past", $P1714
 .annotate 'line', 632
-    find_lex $P1741, "$i"
-    clone $P1742, $P1741
-    inc $P1741
-  loop1743_next:
-.annotate 'line', 631
-    goto loop1743_test
-  loop1743_handler:
+    find_lex $P1715, "$past"
+    find_lex $P1716, "$var"
+    $P1715."unshift"($P1716)
+  if_1708_end:
+.annotate 'line', 634
+    find_lex $P1717, "$/"
+    find_lex $P1718, "$past"
+    $P1719 = $P1717."!make"($P1718)
+.annotate 'line', 623
+    .return ($P1719)
+  control_1680:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1745, exception, 'type'
-    eq $P1745, 64, loop1743_next
-    eq $P1745, 66, loop1743_redo
-  loop1743_done:
-    pop_eh 
-.annotate 'line', 642
+    getattribute $P1720, exception, "payload"
+    .return ($P1720)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "term:sym<pir::op>"  :subid("96_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1724
+.annotate 'line', 637
+    new $P1723, 'ExceptionHandler'
+    set_addr $P1723, control_1722
+    $P1723."handle_types"(.CONTROL_RETURN)
+    push_eh $P1723
+    .lex "self", self
+    .lex "$/", param_1724
+.annotate 'line', 638
+    new $P1725, "Undef"
+    .lex "$past", $P1725
+.annotate 'line', 639
+    new $P1726, "Undef"
+    .lex "$pirop", $P1726
+.annotate 'line', 638
+    find_lex $P1729, "$/"
+    unless_null $P1729, vivify_540
+    $P1729 = root_new ['parrot';'Hash']
+  vivify_540:
+    set $P1730, $P1729["args"]
+    unless_null $P1730, vivify_541
+    new $P1730, "Undef"
+  vivify_541:
+    if $P1730, if_1728
+    get_hll_global $P1735, ["PAST"], "Op"
+    find_lex $P1736, "$/"
+    $P1737 = $P1735."new"($P1736 :named("node"))
+    set $P1727, $P1737
+    goto if_1728_end
+  if_1728:
+    find_lex $P1731, "$/"
+    unless_null $P1731, vivify_542
+    $P1731 = root_new ['parrot';'Hash']
+  vivify_542:
+    set $P1732, $P1731["args"]
+    unless_null $P1732, vivify_543
+    $P1732 = root_new ['parrot';'ResizablePMCArray']
+  vivify_543:
+    set $P1733, $P1732[0]
+    unless_null $P1733, vivify_544
+    new $P1733, "Undef"
+  vivify_544:
+    $P1734 = $P1733."ast"()
+    set $P1727, $P1734
+  if_1728_end:
+    store_lex "$past", $P1727
+.annotate 'line', 639
+    find_lex $P1738, "$/"
+    unless_null $P1738, vivify_545
+    $P1738 = root_new ['parrot';'Hash']
+  vivify_545:
+    set $P1739, $P1738["op"]
+    unless_null $P1739, vivify_546
+    new $P1739, "Undef"
+  vivify_546:
+    set $S1740, $P1739
+    new $P1741, 'String'
+    set $P1741, $S1740
+    store_lex "$pirop", $P1741
+.annotate 'line', 640
+
+        $P0 = find_lex '$pirop'
+        $S0 = $P0
+        $P0 = split '__', $S0
+        $S0 = join ' ', $P0
+        $P1742 = box $S0
+    
+    store_lex "$pirop", $P1742
+.annotate 'line', 647
+    find_lex $P1743, "$past"
+    find_lex $P1744, "$pirop"
+    $P1743."pirop"($P1744)
+.annotate 'line', 648
+    find_lex $P1745, "$past"
+    $P1745."pasttype"("pirop")
+.annotate 'line', 649
     find_lex $P1746, "$/"
     find_lex $P1747, "$past"
     $P1748 = $P1746."!make"($P1747)
-.annotate 'line', 620
+.annotate 'line', 637
     .return ($P1748)
-  control_1647:
+  control_1722:
     .local pmc exception 
     .get_results (exception) 
     getattribute $P1749, exception, "payload"
@@ -21620,114 +22851,25 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1659"  :anon :subid("92_1274022903.56472") :outer("91_1274022903.56472")
-.annotate 'line', 622
-    .const 'Sub' $P1681 = "93_1274022903.56472" 
-    capture_lex $P1681
-.annotate 'line', 623
-    new $P1661, "Undef"
-    .lex "$expr", $P1661
-    find_lex $P1662, "$/"
-    unless_null $P1662, vivify_511
-    $P1662 = root_new ['parrot';'Hash']
-  vivify_511:
-    set $P1663, $P1662["EXPR"]
-    unless_null $P1663, vivify_512
-    new $P1663, "Undef"
-  vivify_512:
-    $P1664 = $P1663."ast"()
-    store_lex "$expr", $P1664
-.annotate 'line', 624
-    find_lex $P1669, "$expr"
-    $S1670 = $P1669."name"()
-    iseq $I1671, $S1670, "&infix:<,>"
-    if $I1671, if_1668
-    new $P1667, 'Integer'
-    set $P1667, $I1671
-    goto if_1668_end
-  if_1668:
-    find_lex $P1672, "$expr"
-    $P1673 = $P1672."named"()
-    isfalse $I1674, $P1673
-    new $P1667, 'Integer'
-    set $P1667, $I1674
-  if_1668_end:
-    if $P1667, if_1666
-.annotate 'line', 627
-    find_lex $P1689, "$past"
-    find_lex $P1690, "$expr"
-    $P1691 = $P1689."push"($P1690)
-    set $P1665, $P1691
-.annotate 'line', 624
-    goto if_1666_end
-  if_1666:
-.annotate 'line', 625
-    find_lex $P1676, "$expr"
-    $P1677 = $P1676."list"()
-    defined $I1678, $P1677
-    unless $I1678, for_undef_513
-    iter $P1675, $P1677
-    new $P1687, 'ExceptionHandler'
-    set_addr $P1687, loop1686_handler
-    $P1687."handle_types"(64, 66, 65)
-    push_eh $P1687
-  loop1686_test:
-    unless $P1675, loop1686_done
-    shift $P1679, $P1675
-  loop1686_redo:
-    .const 'Sub' $P1681 = "93_1274022903.56472" 
-    capture_lex $P1681
-    $P1681($P1679)
-  loop1686_next:
-    goto loop1686_test
-  loop1686_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1688, exception, 'type'
-    eq $P1688, 64, loop1686_next
-    eq $P1688, 66, loop1686_redo
-  loop1686_done:
-    pop_eh 
-  for_undef_513:
-.annotate 'line', 624
-    set $P1665, $P1675
-  if_1666_end:
-.annotate 'line', 622
-    .return ($P1665)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "_block1680"  :anon :subid("93_1274022903.56472") :outer("92_1274022903.56472")
-    .param pmc param_1682
-.annotate 'line', 625
-    .lex "$_", param_1682
-    find_lex $P1683, "$past"
-    find_lex $P1684, "$_"
-    $P1685 = $P1683."push"($P1684)
-    .return ($P1685)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "term:sym<value>"  :subid("94_1274022903.56472") :method :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "args"  :subid("97_1275811497.55064") :method :outer("11_1275811497.55064")
     .param pmc param_1753
-.annotate 'line', 646
+.annotate 'line', 652
     new $P1752, 'ExceptionHandler'
     set_addr $P1752, control_1751
-    $P1752."handle_types"(57)
+    $P1752."handle_types"(.CONTROL_RETURN)
     push_eh $P1752
     .lex "self", self
     .lex "$/", param_1753
     find_lex $P1754, "$/"
     find_lex $P1755, "$/"
-    unless_null $P1755, vivify_528
+    unless_null $P1755, vivify_547
     $P1755 = root_new ['parrot';'Hash']
-  vivify_528:
-    set $P1756, $P1755["value"]
-    unless_null $P1756, vivify_529
+  vivify_547:
+    set $P1756, $P1755["arglist"]
+    unless_null $P1756, vivify_548
     new $P1756, "Undef"
-  vivify_529:
+  vivify_548:
     $P1757 = $P1756."ast"()
     $P1758 = $P1754."!make"($P1757)
     .return ($P1758)
@@ -21740,683 +22882,667 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<( )>"  :subid("95_1274022903.56472") :method :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "arglist"  :subid("98_1275811497.55064") :method :outer("11_1275811497.55064")
     .param pmc param_1763
-.annotate 'line', 648
+.annotate 'line', 654
+    .const 'Sub' $P1774 = "99_1275811497.55064" 
+    capture_lex $P1774
     new $P1762, 'ExceptionHandler'
     set_addr $P1762, control_1761
-    $P1762."handle_types"(57)
+    $P1762."handle_types"(.CONTROL_RETURN)
     push_eh $P1762
     .lex "self", self
     .lex "$/", param_1763
-.annotate 'line', 649
-    find_lex $P1764, "$/"
-.annotate 'line', 650
-    find_lex $P1767, "$/"
-    unless_null $P1767, vivify_530
-    $P1767 = root_new ['parrot';'Hash']
-  vivify_530:
-    set $P1768, $P1767["EXPR"]
-    unless_null $P1768, vivify_531
-    new $P1768, "Undef"
-  vivify_531:
-    if $P1768, if_1766
-.annotate 'line', 651
-    get_hll_global $P1773, ["PAST"], "Op"
-    find_lex $P1774, "$/"
-    $P1775 = $P1773."new"("list" :named("pasttype"), $P1774 :named("node"))
-    set $P1765, $P1775
-.annotate 'line', 650
-    goto if_1766_end
-  if_1766:
-    find_lex $P1769, "$/"
-    unless_null $P1769, vivify_532
-    $P1769 = root_new ['parrot';'Hash']
-  vivify_532:
-    set $P1770, $P1769["EXPR"]
-    unless_null $P1770, vivify_533
-    $P1770 = root_new ['parrot';'ResizablePMCArray']
-  vivify_533:
-    set $P1771, $P1770[0]
-    unless_null $P1771, vivify_534
-    new $P1771, "Undef"
-  vivify_534:
-    $P1772 = $P1771."ast"()
-    set $P1765, $P1772
-  if_1766_end:
-    $P1776 = $P1764."!make"($P1765)
-.annotate 'line', 648
-    .return ($P1776)
-  control_1761:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1777, exception, "payload"
-    .return ($P1777)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "circumfix:sym<[ ]>"  :subid("96_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1781
-.annotate 'line', 654
-    new $P1780, 'ExceptionHandler'
-    set_addr $P1780, control_1779
-    $P1780."handle_types"(57)
-    push_eh $P1780
-    .lex "self", self
-    .lex "$/", param_1781
 .annotate 'line', 655
-    new $P1782, "Undef"
-    .lex "$past", $P1782
-.annotate 'line', 654
-    find_lex $P1783, "$past"
+    new $P1764, "Undef"
+    .lex "$past", $P1764
+.annotate 'line', 663
+    new $P1765, "Undef"
+    .lex "$i", $P1765
+.annotate 'line', 664
+    new $P1766, "Undef"
+    .lex "$n", $P1766
+.annotate 'line', 655
+    get_hll_global $P1767, ["PAST"], "Op"
+    find_lex $P1768, "$/"
+    $P1769 = $P1767."new"("call" :named("pasttype"), $P1768 :named("node"))
+    store_lex "$past", $P1769
 .annotate 'line', 656
-    find_lex $P1785, "$/"
-    unless_null $P1785, vivify_535
-    $P1785 = root_new ['parrot';'Hash']
-  vivify_535:
-    set $P1786, $P1785["EXPR"]
-    unless_null $P1786, vivify_536
-    new $P1786, "Undef"
-  vivify_536:
-    if $P1786, if_1784
+    find_lex $P1771, "$/"
+    unless_null $P1771, vivify_549
+    $P1771 = root_new ['parrot';'Hash']
+  vivify_549:
+    set $P1772, $P1771["EXPR"]
+    unless_null $P1772, vivify_550
+    new $P1772, "Undef"
+  vivify_550:
+    unless $P1772, if_1770_end
+    .const 'Sub' $P1774 = "99_1275811497.55064" 
+    capture_lex $P1774
+    $P1774()
+  if_1770_end:
 .annotate 'line', 663
-    get_hll_global $P1798, ["PAST"], "Op"
-    $P1799 = $P1798."new"("list" :named("pasttype"))
-    store_lex "$past", $P1799
-.annotate 'line', 662
-    goto if_1784_end
-  if_1784:
-.annotate 'line', 657
-    find_lex $P1787, "$/"
-    unless_null $P1787, vivify_537
-    $P1787 = root_new ['parrot';'Hash']
-  vivify_537:
-    set $P1788, $P1787["EXPR"]
-    unless_null $P1788, vivify_538
-    $P1788 = root_new ['parrot';'ResizablePMCArray']
-  vivify_538:
-    set $P1789, $P1788[0]
-    unless_null $P1789, vivify_539
-    new $P1789, "Undef"
-  vivify_539:
-    $P1790 = $P1789."ast"()
-    store_lex "$past", $P1790
-.annotate 'line', 658
-    find_lex $P1792, "$past"
-    $S1793 = $P1792."name"()
-    isne $I1794, $S1793, "&infix:<,>"
-    unless $I1794, if_1791_end
-.annotate 'line', 659
-    get_hll_global $P1795, ["PAST"], "Op"
-    find_lex $P1796, "$past"
-    $P1797 = $P1795."new"($P1796, "list" :named("pasttype"))
-    store_lex "$past", $P1797
-  if_1791_end:
-  if_1784_end:
+    new $P1806, "Integer"
+    assign $P1806, 0
+    store_lex "$i", $P1806
+.annotate 'line', 664
+    find_lex $P1807, "$past"
+    $P1808 = $P1807."list"()
+    set $N1809, $P1808
+    new $P1810, 'Float'
+    set $P1810, $N1809
+    store_lex "$n", $P1810
 .annotate 'line', 665
-    find_lex $P1800, "$past"
-    $P1800."name"("&circumfix:<[ ]>")
+    new $P1858, 'ExceptionHandler'
+    set_addr $P1858, loop1857_handler
+    $P1858."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1858
+  loop1857_test:
+    find_lex $P1811, "$i"
+    set $N1812, $P1811
+    find_lex $P1813, "$n"
+    set $N1814, $P1813
+    islt $I1815, $N1812, $N1814
+    unless $I1815, loop1857_done
+  loop1857_redo:
 .annotate 'line', 666
-    find_lex $P1801, "$/"
-    find_lex $P1802, "$past"
-    $P1803 = $P1801."!make"($P1802)
-.annotate 'line', 654
-    .return ($P1803)
-  control_1779:
+    find_lex $P1817, "$i"
+    set $I1818, $P1817
+    find_lex $P1819, "$past"
+    unless_null $P1819, vivify_554
+    $P1819 = root_new ['parrot';'ResizablePMCArray']
+  vivify_554:
+    set $P1820, $P1819[$I1818]
+    unless_null $P1820, vivify_555
+    new $P1820, "Undef"
+  vivify_555:
+    $S1821 = $P1820."name"()
+    iseq $I1822, $S1821, "&prefix:<|>"
+    unless $I1822, if_1816_end
+.annotate 'line', 667
+    find_lex $P1823, "$i"
+    set $I1824, $P1823
+    find_lex $P1825, "$past"
+    unless_null $P1825, vivify_556
+    $P1825 = root_new ['parrot';'ResizablePMCArray']
+  vivify_556:
+    set $P1826, $P1825[$I1824]
+    unless_null $P1826, vivify_557
+    $P1826 = root_new ['parrot';'ResizablePMCArray']
+  vivify_557:
+    set $P1827, $P1826[0]
+    unless_null $P1827, vivify_558
+    new $P1827, "Undef"
+  vivify_558:
+    find_lex $P1828, "$i"
+    set $I1829, $P1828
+    find_lex $P1830, "$past"
+    unless_null $P1830, vivify_559
+    $P1830 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$past", $P1830
+  vivify_559:
+    set $P1830[$I1829], $P1827
+.annotate 'line', 668
+    find_lex $P1831, "$i"
+    set $I1832, $P1831
+    find_lex $P1833, "$past"
+    unless_null $P1833, vivify_560
+    $P1833 = root_new ['parrot';'ResizablePMCArray']
+  vivify_560:
+    set $P1834, $P1833[$I1832]
+    unless_null $P1834, vivify_561
+    new $P1834, "Undef"
+  vivify_561:
+    $P1834."flat"(1)
+.annotate 'line', 669
+    find_lex $P1838, "$i"
+    set $I1839, $P1838
+    find_lex $P1840, "$past"
+    unless_null $P1840, vivify_562
+    $P1840 = root_new ['parrot';'ResizablePMCArray']
+  vivify_562:
+    set $P1841, $P1840[$I1839]
+    unless_null $P1841, vivify_563
+    new $P1841, "Undef"
+  vivify_563:
+    get_hll_global $P1842, ["PAST"], "Val"
+    $P1843 = $P1841."isa"($P1842)
+    if $P1843, if_1837
+    set $P1836, $P1843
+    goto if_1837_end
+  if_1837:
+.annotate 'line', 670
+    find_lex $P1844, "$i"
+    set $I1845, $P1844
+    find_lex $P1846, "$past"
+    unless_null $P1846, vivify_564
+    $P1846 = root_new ['parrot';'ResizablePMCArray']
+  vivify_564:
+    set $P1847, $P1846[$I1845]
+    unless_null $P1847, vivify_565
+    new $P1847, "Undef"
+  vivify_565:
+    $S1848 = $P1847."name"()
+    substr $S1849, $S1848, 0, 1
+    iseq $I1850, $S1849, "%"
+    new $P1836, 'Integer'
+    set $P1836, $I1850
+  if_1837_end:
+    unless $P1836, if_1835_end
+.annotate 'line', 671
+    find_lex $P1851, "$i"
+    set $I1852, $P1851
+    find_lex $P1853, "$past"
+    unless_null $P1853, vivify_566
+    $P1853 = root_new ['parrot';'ResizablePMCArray']
+  vivify_566:
+    set $P1854, $P1853[$I1852]
+    unless_null $P1854, vivify_567
+    new $P1854, "Undef"
+  vivify_567:
+    $P1854."named"(1)
+  if_1835_end:
+  if_1816_end:
+.annotate 'line', 666
+    find_lex $P1855, "$i"
+    clone $P1856, $P1855
+    inc $P1855
+  loop1857_next:
+.annotate 'line', 665
+    goto loop1857_test
+  loop1857_handler:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1804, exception, "payload"
-    .return ($P1804)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "circumfix:sym<ang>"  :subid("97_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1808
-.annotate 'line', 669
-    new $P1807, 'ExceptionHandler'
-    set_addr $P1807, control_1806
-    $P1807."handle_types"(57)
-    push_eh $P1807
-    .lex "self", self
-    .lex "$/", param_1808
-    find_lex $P1809, "$/"
-    find_lex $P1810, "$/"
-    unless_null $P1810, vivify_540
-    $P1810 = root_new ['parrot';'Hash']
-  vivify_540:
-    set $P1811, $P1810["quote_EXPR"]
-    unless_null $P1811, vivify_541
-    new $P1811, "Undef"
-  vivify_541:
-    $P1812 = $P1811."ast"()
-    $P1813 = $P1809."!make"($P1812)
-    .return ($P1813)
-  control_1806:
+    getattribute $P1859, exception, 'type'
+    eq $P1859, .CONTROL_LOOP_NEXT, loop1857_next
+    eq $P1859, .CONTROL_LOOP_REDO, loop1857_redo
+  loop1857_done:
+    pop_eh 
+.annotate 'line', 676
+    find_lex $P1860, "$/"
+    find_lex $P1861, "$past"
+    $P1862 = $P1860."!make"($P1861)
+.annotate 'line', 654
+    .return ($P1862)
+  control_1761:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1814, exception, "payload"
-    .return ($P1814)
+    getattribute $P1863, exception, "payload"
+    .return ($P1863)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("98_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1818
-.annotate 'line', 670
-    new $P1817, 'ExceptionHandler'
-    set_addr $P1817, control_1816
-    $P1817."handle_types"(57)
-    push_eh $P1817
-    .lex "self", self
-    .lex "$/", param_1818
-    find_lex $P1819, "$/"
-    find_lex $P1820, "$/"
-    unless_null $P1820, vivify_542
-    $P1820 = root_new ['parrot';'Hash']
-  vivify_542:
-    set $P1821, $P1820["quote_EXPR"]
-    unless_null $P1821, vivify_543
-    new $P1821, "Undef"
-  vivify_543:
-    $P1822 = $P1821."ast"()
-    $P1823 = $P1819."!make"($P1822)
-    .return ($P1823)
-  control_1816:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1824, exception, "payload"
-    .return ($P1824)
+.include "except_types.pasm"
+.sub "_block1773"  :anon :subid("99_1275811497.55064") :outer("98_1275811497.55064")
+.annotate 'line', 656
+    .const 'Sub' $P1795 = "100_1275811497.55064" 
+    capture_lex $P1795
+.annotate 'line', 657
+    new $P1775, "Undef"
+    .lex "$expr", $P1775
+    find_lex $P1776, "$/"
+    unless_null $P1776, vivify_551
+    $P1776 = root_new ['parrot';'Hash']
+  vivify_551:
+    set $P1777, $P1776["EXPR"]
+    unless_null $P1777, vivify_552
+    new $P1777, "Undef"
+  vivify_552:
+    $P1778 = $P1777."ast"()
+    store_lex "$expr", $P1778
+.annotate 'line', 658
+    find_lex $P1783, "$expr"
+    $S1784 = $P1783."name"()
+    iseq $I1785, $S1784, "&infix:<,>"
+    if $I1785, if_1782
+    new $P1781, 'Integer'
+    set $P1781, $I1785
+    goto if_1782_end
+  if_1782:
+    find_lex $P1786, "$expr"
+    $P1787 = $P1786."named"()
+    isfalse $I1788, $P1787
+    new $P1781, 'Integer'
+    set $P1781, $I1788
+  if_1782_end:
+    if $P1781, if_1780
+.annotate 'line', 661
+    find_lex $P1803, "$past"
+    find_lex $P1804, "$expr"
+    $P1805 = $P1803."push"($P1804)
+    set $P1779, $P1805
+.annotate 'line', 658
+    goto if_1780_end
+  if_1780:
+.annotate 'line', 659
+    find_lex $P1790, "$expr"
+    $P1791 = $P1790."list"()
+    defined $I1792, $P1791
+    unless $I1792, for_undef_553
+    iter $P1789, $P1791
+    new $P1801, 'ExceptionHandler'
+    set_addr $P1801, loop1800_handler
+    $P1801."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1801
+  loop1800_test:
+    unless $P1789, loop1800_done
+    shift $P1793, $P1789
+  loop1800_redo:
+    .const 'Sub' $P1795 = "100_1275811497.55064" 
+    capture_lex $P1795
+    $P1795($P1793)
+  loop1800_next:
+    goto loop1800_test
+  loop1800_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1802, exception, 'type'
+    eq $P1802, .CONTROL_LOOP_NEXT, loop1800_next
+    eq $P1802, .CONTROL_LOOP_REDO, loop1800_redo
+  loop1800_done:
+    pop_eh 
+  for_undef_553:
+.annotate 'line', 658
+    set $P1779, $P1789
+  if_1780_end:
+.annotate 'line', 656
+    .return ($P1779)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<{ }>"  :subid("99_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1828
-.annotate 'line', 672
-    new $P1827, 'ExceptionHandler'
-    set_addr $P1827, control_1826
-    $P1827."handle_types"(57)
-    push_eh $P1827
-    .lex "self", self
-    .lex "$/", param_1828
-.annotate 'line', 673
-    new $P1829, "Undef"
-    .lex "$past", $P1829
-    find_lex $P1832, "$/"
-    unless_null $P1832, vivify_544
-    $P1832 = root_new ['parrot';'Hash']
-  vivify_544:
-    set $P1833, $P1832["pblock"]
-    unless_null $P1833, vivify_545
-    $P1833 = root_new ['parrot';'Hash']
-  vivify_545:
-    set $P1834, $P1833["blockoid"]
-    unless_null $P1834, vivify_546
-    $P1834 = root_new ['parrot';'Hash']
-  vivify_546:
-    set $P1835, $P1834["statementlist"]
-    unless_null $P1835, vivify_547
-    $P1835 = root_new ['parrot';'Hash']
-  vivify_547:
-    set $P1836, $P1835["statement"]
-    unless_null $P1836, vivify_548
-    new $P1836, "Undef"
-  vivify_548:
-    set $N1837, $P1836
-    isgt $I1838, $N1837, 0.0
-    if $I1838, if_1831
-.annotate 'line', 675
-    $P1842 = "vivitype"("%")
-    set $P1830, $P1842
-.annotate 'line', 673
-    goto if_1831_end
-  if_1831:
-.annotate 'line', 674
-    find_lex $P1839, "$/"
-    unless_null $P1839, vivify_549
-    $P1839 = root_new ['parrot';'Hash']
-  vivify_549:
-    set $P1840, $P1839["pblock"]
-    unless_null $P1840, vivify_550
-    new $P1840, "Undef"
-  vivify_550:
-    $P1841 = $P1840."ast"()
-    set $P1830, $P1841
-  if_1831_end:
-    store_lex "$past", $P1830
-.annotate 'line', 676
-    new $P1843, "Integer"
-    assign $P1843, 1
-    find_lex $P1844, "$past"
-    unless_null $P1844, vivify_551
-    $P1844 = root_new ['parrot';'Hash']
-    store_lex "$past", $P1844
-  vivify_551:
-    set $P1844["bareblock"], $P1843
-.annotate 'line', 677
-    find_lex $P1845, "$/"
-    find_lex $P1846, "$past"
-    $P1847 = $P1845."!make"($P1846)
-.annotate 'line', 672
-    .return ($P1847)
-  control_1826:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1848, exception, "payload"
-    .return ($P1848)
+.sub "_block1794"  :anon :subid("100_1275811497.55064") :outer("99_1275811497.55064")
+    .param pmc param_1796
+.annotate 'line', 659
+    .lex "$_", param_1796
+    find_lex $P1797, "$past"
+    find_lex $P1798, "$_"
+    $P1799 = $P1797."push"($P1798)
+    .return ($P1799)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<sigil>"  :subid("100_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1852
+.include "except_types.pasm"
+.sub "term:sym<value>"  :subid("101_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1867
 .annotate 'line', 680
-    new $P1851, 'ExceptionHandler'
-    set_addr $P1851, control_1850
-    $P1851."handle_types"(57)
-    push_eh $P1851
-    .lex "self", self
-    .lex "$/", param_1852
-.annotate 'line', 681
-    new $P1853, "Undef"
-    .lex "$name", $P1853
-    find_lex $P1856, "$/"
-    unless_null $P1856, vivify_552
-    $P1856 = root_new ['parrot';'Hash']
-  vivify_552:
-    set $P1857, $P1856["sigil"]
-    unless_null $P1857, vivify_553
-    new $P1857, "Undef"
-  vivify_553:
-    set $S1858, $P1857
-    iseq $I1859, $S1858, "@"
-    if $I1859, if_1855
-.annotate 'line', 682
-    find_lex $P1863, "$/"
-    unless_null $P1863, vivify_554
-    $P1863 = root_new ['parrot';'Hash']
-  vivify_554:
-    set $P1864, $P1863["sigil"]
-    unless_null $P1864, vivify_555
-    new $P1864, "Undef"
-  vivify_555:
-    set $S1865, $P1864
-    iseq $I1866, $S1865, "%"
-    if $I1866, if_1862
-    new $P1868, "String"
-    assign $P1868, "item"
-    set $P1861, $P1868
-    goto if_1862_end
-  if_1862:
-    new $P1867, "String"
-    assign $P1867, "hash"
-    set $P1861, $P1867
-  if_1862_end:
-    set $P1854, $P1861
-.annotate 'line', 681
-    goto if_1855_end
-  if_1855:
-    new $P1860, "String"
-    assign $P1860, "list"
-    set $P1854, $P1860
-  if_1855_end:
-    store_lex "$name", $P1854
-.annotate 'line', 684
+    new $P1866, 'ExceptionHandler'
+    set_addr $P1866, control_1865
+    $P1866."handle_types"(.CONTROL_RETURN)
+    push_eh $P1866
+    .lex "self", self
+    .lex "$/", param_1867
+    find_lex $P1868, "$/"
     find_lex $P1869, "$/"
-    get_hll_global $P1870, ["PAST"], "Op"
-    find_lex $P1871, "$name"
-    find_lex $P1872, "$/"
-    unless_null $P1872, vivify_556
-    $P1872 = root_new ['parrot';'Hash']
-  vivify_556:
-    set $P1873, $P1872["semilist"]
-    unless_null $P1873, vivify_557
-    new $P1873, "Undef"
-  vivify_557:
-    $P1874 = $P1873."ast"()
-    $P1875 = $P1870."new"($P1874, "callmethod" :named("pasttype"), $P1871 :named("name"))
-    $P1876 = $P1869."!make"($P1875)
-.annotate 'line', 680
-    .return ($P1876)
-  control_1850:
+    unless_null $P1869, vivify_568
+    $P1869 = root_new ['parrot';'Hash']
+  vivify_568:
+    set $P1870, $P1869["value"]
+    unless_null $P1870, vivify_569
+    new $P1870, "Undef"
+  vivify_569:
+    $P1871 = $P1870."ast"()
+    $P1872 = $P1868."!make"($P1871)
+    .return ($P1872)
+  control_1865:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1877, exception, "payload"
-    .return ($P1877)
+    getattribute $P1873, exception, "payload"
+    .return ($P1873)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "semilist"  :subid("101_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1881
-.annotate 'line', 687
-    new $P1880, 'ExceptionHandler'
-    set_addr $P1880, control_1879
-    $P1880."handle_types"(57)
-    push_eh $P1880
-    .lex "self", self
-    .lex "$/", param_1881
-    find_lex $P1882, "$/"
+.include "except_types.pasm"
+.sub "circumfix:sym<( )>"  :subid("102_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1877
+.annotate 'line', 682
+    new $P1876, 'ExceptionHandler'
+    set_addr $P1876, control_1875
+    $P1876."handle_types"(.CONTROL_RETURN)
+    push_eh $P1876
+    .lex "self", self
+    .lex "$/", param_1877
+.annotate 'line', 683
+    find_lex $P1878, "$/"
+.annotate 'line', 684
+    find_lex $P1881, "$/"
+    unless_null $P1881, vivify_570
+    $P1881 = root_new ['parrot';'Hash']
+  vivify_570:
+    set $P1882, $P1881["EXPR"]
+    unless_null $P1882, vivify_571
+    new $P1882, "Undef"
+  vivify_571:
+    if $P1882, if_1880
+.annotate 'line', 685
+    get_hll_global $P1887, ["PAST"], "Op"
+    find_lex $P1888, "$/"
+    $P1889 = $P1887."new"("list" :named("pasttype"), $P1888 :named("node"))
+    set $P1879, $P1889
+.annotate 'line', 684
+    goto if_1880_end
+  if_1880:
     find_lex $P1883, "$/"
-    unless_null $P1883, vivify_558
+    unless_null $P1883, vivify_572
     $P1883 = root_new ['parrot';'Hash']
-  vivify_558:
-    set $P1884, $P1883["statement"]
-    unless_null $P1884, vivify_559
-    new $P1884, "Undef"
-  vivify_559:
-    $P1885 = $P1884."ast"()
-    $P1886 = $P1882."!make"($P1885)
-    .return ($P1886)
-  control_1879:
+  vivify_572:
+    set $P1884, $P1883["EXPR"]
+    unless_null $P1884, vivify_573
+    $P1884 = root_new ['parrot';'ResizablePMCArray']
+  vivify_573:
+    set $P1885, $P1884[0]
+    unless_null $P1885, vivify_574
+    new $P1885, "Undef"
+  vivify_574:
+    $P1886 = $P1885."ast"()
+    set $P1879, $P1886
+  if_1880_end:
+    $P1890 = $P1878."!make"($P1879)
+.annotate 'line', 682
+    .return ($P1890)
+  control_1875:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1887, exception, "payload"
-    .return ($P1887)
+    getattribute $P1891, exception, "payload"
+    .return ($P1891)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<[ ]>"  :subid("102_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1891
-.annotate 'line', 689
-    new $P1890, 'ExceptionHandler'
-    set_addr $P1890, control_1889
-    $P1890."handle_types"(57)
-    push_eh $P1890
+.include "except_types.pasm"
+.sub "circumfix:sym<[ ]>"  :subid("103_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1895
+.annotate 'line', 688
+    new $P1894, 'ExceptionHandler'
+    set_addr $P1894, control_1893
+    $P1894."handle_types"(.CONTROL_RETURN)
+    push_eh $P1894
     .lex "self", self
-    .lex "$/", param_1891
+    .lex "$/", param_1895
+.annotate 'line', 689
+    new $P1896, "Undef"
+    .lex "$past", $P1896
+.annotate 'line', 688
+    find_lex $P1897, "$past"
 .annotate 'line', 690
-    find_lex $P1892, "$/"
-    get_hll_global $P1893, ["PAST"], "Var"
-    find_lex $P1894, "$/"
-    unless_null $P1894, vivify_560
-    $P1894 = root_new ['parrot';'Hash']
-  vivify_560:
-    set $P1895, $P1894["EXPR"]
-    unless_null $P1895, vivify_561
-    new $P1895, "Undef"
-  vivify_561:
-    $P1896 = $P1895."ast"()
+    find_lex $P1899, "$/"
+    unless_null $P1899, vivify_575
+    $P1899 = root_new ['parrot';'Hash']
+  vivify_575:
+    set $P1900, $P1899["EXPR"]
+    unless_null $P1900, vivify_576
+    new $P1900, "Undef"
+  vivify_576:
+    if $P1900, if_1898
+.annotate 'line', 697
+    get_hll_global $P1912, ["PAST"], "Op"
+    $P1913 = $P1912."new"("list" :named("pasttype"))
+    store_lex "$past", $P1913
+.annotate 'line', 696
+    goto if_1898_end
+  if_1898:
+.annotate 'line', 691
+    find_lex $P1901, "$/"
+    unless_null $P1901, vivify_577
+    $P1901 = root_new ['parrot';'Hash']
+  vivify_577:
+    set $P1902, $P1901["EXPR"]
+    unless_null $P1902, vivify_578
+    $P1902 = root_new ['parrot';'ResizablePMCArray']
+  vivify_578:
+    set $P1903, $P1902[0]
+    unless_null $P1903, vivify_579
+    new $P1903, "Undef"
+  vivify_579:
+    $P1904 = $P1903."ast"()
+    store_lex "$past", $P1904
 .annotate 'line', 692
-    $P1897 = "vivitype"("@")
-    $P1898 = $P1893."new"($P1896, "keyed_int" :named("scope"), "Undef" :named("viviself"), $P1897 :named("vivibase"))
-.annotate 'line', 690
-    $P1899 = $P1892."!make"($P1898)
-.annotate 'line', 689
-    .return ($P1899)
-  control_1889:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1900, exception, "payload"
-    .return ($P1900)
+    find_lex $P1906, "$past"
+    $S1907 = $P1906."name"()
+    isne $I1908, $S1907, "&infix:<,>"
+    unless $I1908, if_1905_end
+.annotate 'line', 693
+    get_hll_global $P1909, ["PAST"], "Op"
+    find_lex $P1910, "$past"
+    $P1911 = $P1909."new"($P1910, "list" :named("pasttype"))
+    store_lex "$past", $P1911
+  if_1905_end:
+  if_1898_end:
+.annotate 'line', 699
+    find_lex $P1914, "$past"
+    $P1914."name"("&circumfix:<[ ]>")
+.annotate 'line', 700
+    find_lex $P1915, "$/"
+    find_lex $P1916, "$past"
+    $P1917 = $P1915."!make"($P1916)
+.annotate 'line', 688
+    .return ($P1917)
+  control_1893:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1918, exception, "payload"
+    .return ($P1918)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<{ }>"  :subid("103_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1904
-.annotate 'line', 695
-    new $P1903, 'ExceptionHandler'
-    set_addr $P1903, control_1902
-    $P1903."handle_types"(57)
-    push_eh $P1903
-    .lex "self", self
-    .lex "$/", param_1904
-.annotate 'line', 696
-    find_lex $P1905, "$/"
-    get_hll_global $P1906, ["PAST"], "Var"
-    find_lex $P1907, "$/"
-    unless_null $P1907, vivify_562
-    $P1907 = root_new ['parrot';'Hash']
-  vivify_562:
-    set $P1908, $P1907["EXPR"]
-    unless_null $P1908, vivify_563
-    new $P1908, "Undef"
-  vivify_563:
-    $P1909 = $P1908."ast"()
-.annotate 'line', 698
-    $P1910 = "vivitype"("%")
-    $P1911 = $P1906."new"($P1909, "keyed" :named("scope"), "Undef" :named("viviself"), $P1910 :named("vivibase"))
-.annotate 'line', 696
-    $P1912 = $P1905."!make"($P1911)
-.annotate 'line', 695
-    .return ($P1912)
-  control_1902:
+.include "except_types.pasm"
+.sub "circumfix:sym<ang>"  :subid("104_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1922
+.annotate 'line', 703
+    new $P1921, 'ExceptionHandler'
+    set_addr $P1921, control_1920
+    $P1921."handle_types"(.CONTROL_RETURN)
+    push_eh $P1921
+    .lex "self", self
+    .lex "$/", param_1922
+    find_lex $P1923, "$/"
+    find_lex $P1924, "$/"
+    unless_null $P1924, vivify_580
+    $P1924 = root_new ['parrot';'Hash']
+  vivify_580:
+    set $P1925, $P1924["quote_EXPR"]
+    unless_null $P1925, vivify_581
+    new $P1925, "Undef"
+  vivify_581:
+    $P1926 = $P1925."ast"()
+    $P1927 = $P1923."!make"($P1926)
+    .return ($P1927)
+  control_1920:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1913, exception, "payload"
-    .return ($P1913)
+    getattribute $P1928, exception, "payload"
+    .return ($P1928)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<ang>"  :subid("104_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1917
-.annotate 'line', 701
-    new $P1916, 'ExceptionHandler'
-    set_addr $P1916, control_1915
-    $P1916."handle_types"(57)
-    push_eh $P1916
-    .lex "self", self
-    .lex "$/", param_1917
-.annotate 'line', 702
-    find_lex $P1918, "$/"
-    get_hll_global $P1919, ["PAST"], "Var"
-    find_lex $P1920, "$/"
-    unless_null $P1920, vivify_564
-    $P1920 = root_new ['parrot';'Hash']
-  vivify_564:
-    set $P1921, $P1920["quote_EXPR"]
-    unless_null $P1921, vivify_565
-    new $P1921, "Undef"
-  vivify_565:
-    $P1922 = $P1921."ast"()
+.include "except_types.pasm"
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("105_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1932
 .annotate 'line', 704
-    $P1923 = "vivitype"("%")
-    $P1924 = $P1919."new"($P1922, "keyed" :named("scope"), "Undef" :named("viviself"), $P1923 :named("vivibase"))
-.annotate 'line', 702
-    $P1925 = $P1918."!make"($P1924)
-.annotate 'line', 701
-    .return ($P1925)
-  control_1915:
+    new $P1931, 'ExceptionHandler'
+    set_addr $P1931, control_1930
+    $P1931."handle_types"(.CONTROL_RETURN)
+    push_eh $P1931
+    .lex "self", self
+    .lex "$/", param_1932
+    find_lex $P1933, "$/"
+    find_lex $P1934, "$/"
+    unless_null $P1934, vivify_582
+    $P1934 = root_new ['parrot';'Hash']
+  vivify_582:
+    set $P1935, $P1934["quote_EXPR"]
+    unless_null $P1935, vivify_583
+    new $P1935, "Undef"
+  vivify_583:
+    $P1936 = $P1935."ast"()
+    $P1937 = $P1933."!make"($P1936)
+    .return ($P1937)
+  control_1930:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1926, exception, "payload"
-    .return ($P1926)
+    getattribute $P1938, exception, "payload"
+    .return ($P1938)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<( )>"  :subid("105_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1930
-.annotate 'line', 707
-    new $P1929, 'ExceptionHandler'
-    set_addr $P1929, control_1928
-    $P1929."handle_types"(57)
-    push_eh $P1929
+.include "except_types.pasm"
+.sub "circumfix:sym<{ }>"  :subid("106_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1942
+.annotate 'line', 706
+    new $P1941, 'ExceptionHandler'
+    set_addr $P1941, control_1940
+    $P1941."handle_types"(.CONTROL_RETURN)
+    push_eh $P1941
     .lex "self", self
-    .lex "$/", param_1930
-.annotate 'line', 708
-    find_lex $P1931, "$/"
-    find_lex $P1932, "$/"
-    unless_null $P1932, vivify_566
-    $P1932 = root_new ['parrot';'Hash']
-  vivify_566:
-    set $P1933, $P1932["arglist"]
-    unless_null $P1933, vivify_567
-    new $P1933, "Undef"
-  vivify_567:
-    $P1934 = $P1933."ast"()
-    $P1935 = $P1931."!make"($P1934)
+    .lex "$/", param_1942
 .annotate 'line', 707
-    .return ($P1935)
-  control_1928:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1936, exception, "payload"
-    .return ($P1936)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "value"  :subid("106_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1940
-.annotate 'line', 711
-    new $P1939, 'ExceptionHandler'
-    set_addr $P1939, control_1938
-    $P1939."handle_types"(57)
-    push_eh $P1939
-    .lex "self", self
-    .lex "$/", param_1940
-.annotate 'line', 712
-    find_lex $P1941, "$/"
-    find_lex $P1944, "$/"
-    unless_null $P1944, vivify_568
-    $P1944 = root_new ['parrot';'Hash']
-  vivify_568:
-    set $P1945, $P1944["quote"]
-    unless_null $P1945, vivify_569
-    new $P1945, "Undef"
-  vivify_569:
-    if $P1945, if_1943
-    find_lex $P1949, "$/"
-    unless_null $P1949, vivify_570
-    $P1949 = root_new ['parrot';'Hash']
-  vivify_570:
-    set $P1950, $P1949["number"]
-    unless_null $P1950, vivify_571
-    new $P1950, "Undef"
-  vivify_571:
-    $P1951 = $P1950."ast"()
-    set $P1942, $P1951
-    goto if_1943_end
-  if_1943:
+    new $P1943, "Undef"
+    .lex "$past", $P1943
     find_lex $P1946, "$/"
-    unless_null $P1946, vivify_572
+    unless_null $P1946, vivify_584
     $P1946 = root_new ['parrot';'Hash']
-  vivify_572:
-    set $P1947, $P1946["quote"]
-    unless_null $P1947, vivify_573
-    new $P1947, "Undef"
-  vivify_573:
-    $P1948 = $P1947."ast"()
-    set $P1942, $P1948
-  if_1943_end:
-    $P1952 = $P1941."!make"($P1942)
+  vivify_584:
+    set $P1947, $P1946["pblock"]
+    unless_null $P1947, vivify_585
+    $P1947 = root_new ['parrot';'Hash']
+  vivify_585:
+    set $P1948, $P1947["blockoid"]
+    unless_null $P1948, vivify_586
+    $P1948 = root_new ['parrot';'Hash']
+  vivify_586:
+    set $P1949, $P1948["statementlist"]
+    unless_null $P1949, vivify_587
+    $P1949 = root_new ['parrot';'Hash']
+  vivify_587:
+    set $P1950, $P1949["statement"]
+    unless_null $P1950, vivify_588
+    new $P1950, "Undef"
+  vivify_588:
+    set $N1951, $P1950
+    isgt $I1952, $N1951, 0.0
+    if $I1952, if_1945
+.annotate 'line', 709
+    $P1956 = "vivitype"("%")
+    set $P1944, $P1956
+.annotate 'line', 707
+    goto if_1945_end
+  if_1945:
+.annotate 'line', 708
+    find_lex $P1953, "$/"
+    unless_null $P1953, vivify_589
+    $P1953 = root_new ['parrot';'Hash']
+  vivify_589:
+    set $P1954, $P1953["pblock"]
+    unless_null $P1954, vivify_590
+    new $P1954, "Undef"
+  vivify_590:
+    $P1955 = $P1954."ast"()
+    set $P1944, $P1955
+  if_1945_end:
+    store_lex "$past", $P1944
+.annotate 'line', 710
+    new $P1957, "Integer"
+    assign $P1957, 1
+    find_lex $P1958, "$past"
+    unless_null $P1958, vivify_591
+    $P1958 = root_new ['parrot';'Hash']
+    store_lex "$past", $P1958
+  vivify_591:
+    set $P1958["bareblock"], $P1957
 .annotate 'line', 711
-    .return ($P1952)
-  control_1938:
+    find_lex $P1959, "$/"
+    find_lex $P1960, "$past"
+    $P1961 = $P1959."!make"($P1960)
+.annotate 'line', 706
+    .return ($P1961)
+  control_1940:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1953, exception, "payload"
-    .return ($P1953)
+    getattribute $P1962, exception, "payload"
+    .return ($P1962)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "number"  :subid("107_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1957
-.annotate 'line', 715
-    new $P1956, 'ExceptionHandler'
-    set_addr $P1956, control_1955
-    $P1956."handle_types"(57)
-    push_eh $P1956
+.include "except_types.pasm"
+.sub "circumfix:sym<sigil>"  :subid("107_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_1966
+.annotate 'line', 714
+    new $P1965, 'ExceptionHandler'
+    set_addr $P1965, control_1964
+    $P1965."handle_types"(.CONTROL_RETURN)
+    push_eh $P1965
     .lex "self", self
-    .lex "$/", param_1957
-.annotate 'line', 716
-    new $P1958, "Undef"
-    .lex "$value", $P1958
-    find_lex $P1961, "$/"
-    unless_null $P1961, vivify_574
-    $P1961 = root_new ['parrot';'Hash']
-  vivify_574:
-    set $P1962, $P1961["dec_number"]
-    unless_null $P1962, vivify_575
-    new $P1962, "Undef"
-  vivify_575:
-    if $P1962, if_1960
-    find_lex $P1966, "$/"
-    unless_null $P1966, vivify_576
-    $P1966 = root_new ['parrot';'Hash']
-  vivify_576:
-    set $P1967, $P1966["integer"]
-    unless_null $P1967, vivify_577
+    .lex "$/", param_1966
+.annotate 'line', 715
     new $P1967, "Undef"
-  vivify_577:
-    $P1968 = $P1967."ast"()
-    set $P1959, $P1968
-    goto if_1960_end
-  if_1960:
-    find_lex $P1963, "$/"
-    unless_null $P1963, vivify_578
-    $P1963 = root_new ['parrot';'Hash']
-  vivify_578:
-    set $P1964, $P1963["dec_number"]
-    unless_null $P1964, vivify_579
-    new $P1964, "Undef"
-  vivify_579:
-    $P1965 = $P1964."ast"()
-    set $P1959, $P1965
-  if_1960_end:
-    store_lex "$value", $P1959
-.annotate 'line', 717
+    .lex "$name", $P1967
     find_lex $P1970, "$/"
-    unless_null $P1970, vivify_580
+    unless_null $P1970, vivify_592
     $P1970 = root_new ['parrot';'Hash']
-  vivify_580:
-    set $P1971, $P1970["sign"]
-    unless_null $P1971, vivify_581
+  vivify_592:
+    set $P1971, $P1970["sigil"]
+    unless_null $P1971, vivify_593
     new $P1971, "Undef"
-  vivify_581:
+  vivify_593:
     set $S1972, $P1971
-    iseq $I1973, $S1972, "-"
-    unless $I1973, if_1969_end
-    find_lex $P1974, "$value"
-    neg $P1975, $P1974
-    store_lex "$value", $P1975
+    iseq $I1973, $S1972, "@"
+    if $I1973, if_1969
+.annotate 'line', 716
+    find_lex $P1977, "$/"
+    unless_null $P1977, vivify_594
+    $P1977 = root_new ['parrot';'Hash']
+  vivify_594:
+    set $P1978, $P1977["sigil"]
+    unless_null $P1978, vivify_595
+    new $P1978, "Undef"
+  vivify_595:
+    set $S1979, $P1978
+    iseq $I1980, $S1979, "%"
+    if $I1980, if_1976
+    new $P1982, "String"
+    assign $P1982, "item"
+    set $P1975, $P1982
+    goto if_1976_end
+  if_1976:
+    new $P1981, "String"
+    assign $P1981, "hash"
+    set $P1975, $P1981
+  if_1976_end:
+    set $P1968, $P1975
+.annotate 'line', 715
+    goto if_1969_end
+  if_1969:
+    new $P1974, "String"
+    assign $P1974, "list"
+    set $P1968, $P1974
   if_1969_end:
+    store_lex "$name", $P1968
 .annotate 'line', 718
-    find_lex $P1976, "$/"
-    get_hll_global $P1977, ["PAST"], "Val"
-    find_lex $P1978, "$value"
-    $P1979 = $P1977."new"($P1978 :named("value"))
-    $P1980 = $P1976."!make"($P1979)
-.annotate 'line', 715
-    .return ($P1980)
-  control_1955:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1981, exception, "payload"
-    .return ($P1981)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "quote:sym<apos>"  :subid("108_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_1985
-.annotate 'line', 721
-    new $P1984, 'ExceptionHandler'
-    set_addr $P1984, control_1983
-    $P1984."handle_types"(57)
-    push_eh $P1984
-    .lex "self", self
-    .lex "$/", param_1985
+    find_lex $P1983, "$/"
+    get_hll_global $P1984, ["PAST"], "Op"
+    find_lex $P1985, "$name"
     find_lex $P1986, "$/"
-    find_lex $P1987, "$/"
-    unless_null $P1987, vivify_582
-    $P1987 = root_new ['parrot';'Hash']
-  vivify_582:
-    set $P1988, $P1987["quote_EXPR"]
-    unless_null $P1988, vivify_583
-    new $P1988, "Undef"
-  vivify_583:
-    $P1989 = $P1988."ast"()
-    $P1990 = $P1986."!make"($P1989)
+    unless_null $P1986, vivify_596
+    $P1986 = root_new ['parrot';'Hash']
+  vivify_596:
+    set $P1987, $P1986["semilist"]
+    unless_null $P1987, vivify_597
+    new $P1987, "Undef"
+  vivify_597:
+    $P1988 = $P1987."ast"()
+    $P1989 = $P1984."new"($P1988, "callmethod" :named("pasttype"), $P1985 :named("name"))
+    $P1990 = $P1983."!make"($P1989)
+.annotate 'line', 714
     .return ($P1990)
-  control_1983:
+  control_1964:
     .local pmc exception 
     .get_results (exception) 
     getattribute $P1991, exception, "payload"
@@ -22425,24 +23551,25 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<dblq>"  :subid("109_1274022903.56472") :method :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "semilist"  :subid("108_1275811497.55064") :method :outer("11_1275811497.55064")
     .param pmc param_1995
-.annotate 'line', 722
+.annotate 'line', 721
     new $P1994, 'ExceptionHandler'
     set_addr $P1994, control_1993
-    $P1994."handle_types"(57)
+    $P1994."handle_types"(.CONTROL_RETURN)
     push_eh $P1994
     .lex "self", self
     .lex "$/", param_1995
     find_lex $P1996, "$/"
     find_lex $P1997, "$/"
-    unless_null $P1997, vivify_584
+    unless_null $P1997, vivify_598
     $P1997 = root_new ['parrot';'Hash']
-  vivify_584:
-    set $P1998, $P1997["quote_EXPR"]
-    unless_null $P1998, vivify_585
+  vivify_598:
+    set $P1998, $P1997["statement"]
+    unless_null $P1998, vivify_599
     new $P1998, "Undef"
-  vivify_585:
+  vivify_599:
     $P1999 = $P1998."ast"()
     $P2000 = $P1996."!make"($P1999)
     .return ($P2000)
@@ -22455,739 +23582,1236 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<qq>"  :subid("110_1274022903.56472") :method :outer("11_1274022903.56472")
+.include "except_types.pasm"
+.sub "postcircumfix:sym<[ ]>"  :subid("109_1275811497.55064") :method :outer("11_1275811497.55064")
     .param pmc param_2005
 .annotate 'line', 723
     new $P2004, 'ExceptionHandler'
     set_addr $P2004, control_2003
-    $P2004."handle_types"(57)
+    $P2004."handle_types"(.CONTROL_RETURN)
     push_eh $P2004
     .lex "self", self
     .lex "$/", param_2005
+.annotate 'line', 724
     find_lex $P2006, "$/"
-    find_lex $P2007, "$/"
-    unless_null $P2007, vivify_586
-    $P2007 = root_new ['parrot';'Hash']
-  vivify_586:
-    set $P2008, $P2007["quote_EXPR"]
-    unless_null $P2008, vivify_587
-    new $P2008, "Undef"
-  vivify_587:
-    $P2009 = $P2008."ast"()
-    $P2010 = $P2006."!make"($P2009)
-    .return ($P2010)
+    get_hll_global $P2007, ["PAST"], "Var"
+    find_lex $P2008, "$/"
+    unless_null $P2008, vivify_600
+    $P2008 = root_new ['parrot';'Hash']
+  vivify_600:
+    set $P2009, $P2008["EXPR"]
+    unless_null $P2009, vivify_601
+    new $P2009, "Undef"
+  vivify_601:
+    $P2010 = $P2009."ast"()
+.annotate 'line', 726
+    $P2011 = "vivitype"("@")
+    $P2012 = $P2007."new"($P2010, "keyed_int" :named("scope"), "Undef" :named("viviself"), $P2011 :named("vivibase"))
+.annotate 'line', 724
+    $P2013 = $P2006."!make"($P2012)
+.annotate 'line', 723
+    .return ($P2013)
   control_2003:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2011, exception, "payload"
-    .return ($P2011)
+    getattribute $P2014, exception, "payload"
+    .return ($P2014)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<q>"  :subid("111_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2015
-.annotate 'line', 724
-    new $P2014, 'ExceptionHandler'
-    set_addr $P2014, control_2013
-    $P2014."handle_types"(57)
-    push_eh $P2014
-    .lex "self", self
-    .lex "$/", param_2015
-    find_lex $P2016, "$/"
-    find_lex $P2017, "$/"
-    unless_null $P2017, vivify_588
-    $P2017 = root_new ['parrot';'Hash']
-  vivify_588:
-    set $P2018, $P2017["quote_EXPR"]
-    unless_null $P2018, vivify_589
-    new $P2018, "Undef"
-  vivify_589:
-    $P2019 = $P2018."ast"()
-    $P2020 = $P2016."!make"($P2019)
-    .return ($P2020)
-  control_2013:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P2021, exception, "payload"
-    .return ($P2021)
+.include "except_types.pasm"
+.sub "postcircumfix:sym<{ }>"  :subid("110_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2018
+.annotate 'line', 729
+    new $P2017, 'ExceptionHandler'
+    set_addr $P2017, control_2016
+    $P2017."handle_types"(.CONTROL_RETURN)
+    push_eh $P2017
+    .lex "self", self
+    .lex "$/", param_2018
+.annotate 'line', 730
+    find_lex $P2019, "$/"
+    get_hll_global $P2020, ["PAST"], "Var"
+    find_lex $P2021, "$/"
+    unless_null $P2021, vivify_602
+    $P2021 = root_new ['parrot';'Hash']
+  vivify_602:
+    set $P2022, $P2021["EXPR"]
+    unless_null $P2022, vivify_603
+    new $P2022, "Undef"
+  vivify_603:
+    $P2023 = $P2022."ast"()
+.annotate 'line', 732
+    $P2024 = "vivitype"("%")
+    $P2025 = $P2020."new"($P2023, "keyed" :named("scope"), "Undef" :named("viviself"), $P2024 :named("vivibase"))
+.annotate 'line', 730
+    $P2026 = $P2019."!make"($P2025)
+.annotate 'line', 729
+    .return ($P2026)
+  control_2016:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2027, exception, "payload"
+    .return ($P2027)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<Q>"  :subid("112_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2025
-.annotate 'line', 725
-    new $P2024, 'ExceptionHandler'
-    set_addr $P2024, control_2023
-    $P2024."handle_types"(57)
-    push_eh $P2024
-    .lex "self", self
-    .lex "$/", param_2025
-    find_lex $P2026, "$/"
-    find_lex $P2027, "$/"
-    unless_null $P2027, vivify_590
-    $P2027 = root_new ['parrot';'Hash']
-  vivify_590:
-    set $P2028, $P2027["quote_EXPR"]
-    unless_null $P2028, vivify_591
-    new $P2028, "Undef"
-  vivify_591:
-    $P2029 = $P2028."ast"()
-    $P2030 = $P2026."!make"($P2029)
-    .return ($P2030)
-  control_2023:
+.include "except_types.pasm"
+.sub "postcircumfix:sym<ang>"  :subid("111_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2031
+.annotate 'line', 735
+    new $P2030, 'ExceptionHandler'
+    set_addr $P2030, control_2029
+    $P2030."handle_types"(.CONTROL_RETURN)
+    push_eh $P2030
+    .lex "self", self
+    .lex "$/", param_2031
+.annotate 'line', 736
+    find_lex $P2032, "$/"
+    get_hll_global $P2033, ["PAST"], "Var"
+    find_lex $P2034, "$/"
+    unless_null $P2034, vivify_604
+    $P2034 = root_new ['parrot';'Hash']
+  vivify_604:
+    set $P2035, $P2034["quote_EXPR"]
+    unless_null $P2035, vivify_605
+    new $P2035, "Undef"
+  vivify_605:
+    $P2036 = $P2035."ast"()
+.annotate 'line', 738
+    $P2037 = "vivitype"("%")
+    $P2038 = $P2033."new"($P2036, "keyed" :named("scope"), "Undef" :named("viviself"), $P2037 :named("vivibase"))
+.annotate 'line', 736
+    $P2039 = $P2032."!make"($P2038)
+.annotate 'line', 735
+    .return ($P2039)
+  control_2029:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2031, exception, "payload"
-    .return ($P2031)
+    getattribute $P2040, exception, "payload"
+    .return ($P2040)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<Q:PIR>"  :subid("113_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2035
-.annotate 'line', 726
-    new $P2034, 'ExceptionHandler'
-    set_addr $P2034, control_2033
-    $P2034."handle_types"(57)
-    push_eh $P2034
-    .lex "self", self
-    .lex "$/", param_2035
-.annotate 'line', 727
-    find_lex $P2036, "$/"
-    get_hll_global $P2037, ["PAST"], "Op"
-    find_lex $P2038, "$/"
-    unless_null $P2038, vivify_592
-    $P2038 = root_new ['parrot';'Hash']
-  vivify_592:
-    set $P2039, $P2038["quote_EXPR"]
-    unless_null $P2039, vivify_593
-    new $P2039, "Undef"
-  vivify_593:
-    $P2040 = $P2039."ast"()
-    $P2041 = $P2040."value"()
-    find_lex $P2042, "$/"
-    $P2043 = $P2037."new"($P2041 :named("inline"), "inline" :named("pasttype"), $P2042 :named("node"))
-    $P2044 = $P2036."!make"($P2043)
-.annotate 'line', 726
-    .return ($P2044)
-  control_2033:
+.include "except_types.pasm"
+.sub "postcircumfix:sym<( )>"  :subid("112_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2044
+.annotate 'line', 741
+    new $P2043, 'ExceptionHandler'
+    set_addr $P2043, control_2042
+    $P2043."handle_types"(.CONTROL_RETURN)
+    push_eh $P2043
+    .lex "self", self
+    .lex "$/", param_2044
+.annotate 'line', 742
+    find_lex $P2045, "$/"
+    find_lex $P2046, "$/"
+    unless_null $P2046, vivify_606
+    $P2046 = root_new ['parrot';'Hash']
+  vivify_606:
+    set $P2047, $P2046["arglist"]
+    unless_null $P2047, vivify_607
+    new $P2047, "Undef"
+  vivify_607:
+    $P2048 = $P2047."ast"()
+    $P2049 = $P2045."!make"($P2048)
+.annotate 'line', 741
+    .return ($P2049)
+  control_2042:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2045, exception, "payload"
-    .return ($P2045)
+    getattribute $P2050, exception, "payload"
+    .return ($P2050)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym</ />"  :subid("114_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2049
-    .param pmc param_2050 :optional
-    .param int has_param_2050 :opt_flag
-.annotate 'line', 732
-    new $P2048, 'ExceptionHandler'
-    set_addr $P2048, control_2047
-    $P2048."handle_types"(57)
-    push_eh $P2048
-    .lex "self", self
-    .lex "$/", param_2049
-    if has_param_2050, optparam_594
-    new $P2051, "Undef"
-    set param_2050, $P2051
-  optparam_594:
-    .lex "$key", param_2050
-.annotate 'line', 742
-    new $P2052, "Undef"
-    .lex "$regex", $P2052
-.annotate 'line', 744
-    new $P2053, "Undef"
-    .lex "$past", $P2053
-.annotate 'line', 733
-    find_lex $P2055, "$key"
-    set $S2056, $P2055
-    iseq $I2057, $S2056, "open"
-    unless $I2057, if_2054_end
-.annotate 'line', 734
-
-            null $P0
-            set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
-        
-.annotate 'line', 738
-    get_global $P2058, "@BLOCK"
-    unless_null $P2058, vivify_595
-    $P2058 = root_new ['parrot';'ResizablePMCArray']
-  vivify_595:
-    set $P2059, $P2058[0]
-    unless_null $P2059, vivify_596
+.include "except_types.pasm"
+.sub "value"  :subid("113_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2054
+.annotate 'line', 745
+    new $P2053, 'ExceptionHandler'
+    set_addr $P2053, control_2052
+    $P2053."handle_types"(.CONTROL_RETURN)
+    push_eh $P2053
+    .lex "self", self
+    .lex "$/", param_2054
+.annotate 'line', 746
+    find_lex $P2055, "$/"
+    find_lex $P2058, "$/"
+    unless_null $P2058, vivify_608
+    $P2058 = root_new ['parrot';'Hash']
+  vivify_608:
+    set $P2059, $P2058["quote"]
+    unless_null $P2059, vivify_609
     new $P2059, "Undef"
-  vivify_596:
-    $P2059."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
-.annotate 'line', 739
-    get_global $P2060, "@BLOCK"
-    unless_null $P2060, vivify_597
-    $P2060 = root_new ['parrot';'ResizablePMCArray']
-  vivify_597:
-    set $P2061, $P2060[0]
-    unless_null $P2061, vivify_598
+  vivify_609:
+    if $P2059, if_2057
+    find_lex $P2063, "$/"
+    unless_null $P2063, vivify_610
+    $P2063 = root_new ['parrot';'Hash']
+  vivify_610:
+    set $P2064, $P2063["number"]
+    unless_null $P2064, vivify_611
+    new $P2064, "Undef"
+  vivify_611:
+    $P2065 = $P2064."ast"()
+    set $P2056, $P2065
+    goto if_2057_end
+  if_2057:
+    find_lex $P2060, "$/"
+    unless_null $P2060, vivify_612
+    $P2060 = root_new ['parrot';'Hash']
+  vivify_612:
+    set $P2061, $P2060["quote"]
+    unless_null $P2061, vivify_613
     new $P2061, "Undef"
-  vivify_598:
-    $P2061."symbol"("$/", "lexical" :named("scope"))
-.annotate 'line', 740
-    new $P2062, "Exception"
-    set $P2062['type'], 57
-    new $P2063, "Integer"
-    assign $P2063, 0
-    setattribute $P2062, 'payload', $P2063
-    throw $P2062
-  if_2054_end:
-.annotate 'line', 743
-    get_hll_global $P2064, ["Regex";"P6Regex";"Actions"], "buildsub"
-    find_lex $P2065, "$/"
-    unless_null $P2065, vivify_599
-    $P2065 = root_new ['parrot';'Hash']
-  vivify_599:
-    set $P2066, $P2065["p6regex"]
-    unless_null $P2066, vivify_600
-    new $P2066, "Undef"
-  vivify_600:
-    $P2067 = $P2066."ast"()
-    get_global $P2068, "@BLOCK"
-    $P2069 = $P2068."shift"()
-    $P2070 = $P2064($P2067, $P2069)
-    store_lex "$regex", $P2070
-.annotate 'line', 745
-    get_hll_global $P2071, ["PAST"], "Op"
-.annotate 'line', 747
-    get_hll_global $P2072, ["PAST"], "Var"
-    new $P2073, "ResizablePMCArray"
-    push $P2073, "Regex"
-    $P2074 = $P2072."new"("Regex" :named("name"), $P2073 :named("namespace"), "package" :named("scope"))
-    find_lex $P2075, "$regex"
-    $P2076 = $P2071."new"($P2074, $P2075, "callmethod" :named("pasttype"), "new" :named("name"))
+  vivify_613:
+    $P2062 = $P2061."ast"()
+    set $P2056, $P2062
+  if_2057_end:
+    $P2066 = $P2055."!make"($P2056)
 .annotate 'line', 745
-    store_lex "$past", $P2076
+    .return ($P2066)
+  control_2052:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2067, exception, "payload"
+    .return ($P2067)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "number"  :subid("114_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2071
+.annotate 'line', 749
+    new $P2070, 'ExceptionHandler'
+    set_addr $P2070, control_2069
+    $P2070."handle_types"(.CONTROL_RETURN)
+    push_eh $P2070
+    .lex "self", self
+    .lex "$/", param_2071
+.annotate 'line', 750
+    new $P2072, "Undef"
+    .lex "$value", $P2072
+    find_lex $P2075, "$/"
+    unless_null $P2075, vivify_614
+    $P2075 = root_new ['parrot';'Hash']
+  vivify_614:
+    set $P2076, $P2075["dec_number"]
+    unless_null $P2076, vivify_615
+    new $P2076, "Undef"
+  vivify_615:
+    if $P2076, if_2074
+    find_lex $P2080, "$/"
+    unless_null $P2080, vivify_616
+    $P2080 = root_new ['parrot';'Hash']
+  vivify_616:
+    set $P2081, $P2080["integer"]
+    unless_null $P2081, vivify_617
+    new $P2081, "Undef"
+  vivify_617:
+    $P2082 = $P2081."ast"()
+    set $P2073, $P2082
+    goto if_2074_end
+  if_2074:
+    find_lex $P2077, "$/"
+    unless_null $P2077, vivify_618
+    $P2077 = root_new ['parrot';'Hash']
+  vivify_618:
+    set $P2078, $P2077["dec_number"]
+    unless_null $P2078, vivify_619
+    new $P2078, "Undef"
+  vivify_619:
+    $P2079 = $P2078."ast"()
+    set $P2073, $P2079
+  if_2074_end:
+    store_lex "$value", $P2073
 .annotate 'line', 751
-    find_lex $P2077, "$regex"
-    find_lex $P2078, "$past"
-    unless_null $P2078, vivify_601
-    $P2078 = root_new ['parrot';'Hash']
-    store_lex "$past", $P2078
-  vivify_601:
-    set $P2078["sink"], $P2077
+    find_lex $P2084, "$/"
+    unless_null $P2084, vivify_620
+    $P2084 = root_new ['parrot';'Hash']
+  vivify_620:
+    set $P2085, $P2084["sign"]
+    unless_null $P2085, vivify_621
+    new $P2085, "Undef"
+  vivify_621:
+    set $S2086, $P2085
+    iseq $I2087, $S2086, "-"
+    unless $I2087, if_2083_end
+    find_lex $P2088, "$value"
+    neg $P2089, $P2088
+    store_lex "$value", $P2089
+  if_2083_end:
 .annotate 'line', 752
-    find_lex $P2079, "$/"
-    find_lex $P2080, "$past"
-    $P2081 = $P2079."!make"($P2080)
-.annotate 'line', 732
-    .return ($P2081)
-  control_2047:
+    find_lex $P2090, "$/"
+    get_hll_global $P2091, ["PAST"], "Val"
+    find_lex $P2092, "$value"
+    $P2093 = $P2091."new"($P2092 :named("value"))
+    $P2094 = $P2090."!make"($P2093)
+.annotate 'line', 749
+    .return ($P2094)
+  control_2069:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2082, exception, "payload"
-    .return ($P2082)
+    getattribute $P2095, exception, "payload"
+    .return ($P2095)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<$>"  :subid("115_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2086
+.include "except_types.pasm"
+.sub "quote:sym<apos>"  :subid("115_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2099
 .annotate 'line', 755
-    new $P2085, 'ExceptionHandler'
-    set_addr $P2085, control_2084
-    $P2085."handle_types"(57)
-    push_eh $P2085
-    .lex "self", self
-    .lex "$/", param_2086
-    find_lex $P2087, "$/"
-    find_lex $P2088, "$/"
-    unless_null $P2088, vivify_602
-    $P2088 = root_new ['parrot';'Hash']
-  vivify_602:
-    set $P2089, $P2088["variable"]
-    unless_null $P2089, vivify_603
-    new $P2089, "Undef"
-  vivify_603:
-    $P2090 = $P2089."ast"()
-    $P2091 = $P2087."!make"($P2090)
-    .return ($P2091)
-  control_2084:
+    new $P2098, 'ExceptionHandler'
+    set_addr $P2098, control_2097
+    $P2098."handle_types"(.CONTROL_RETURN)
+    push_eh $P2098
+    .lex "self", self
+    .lex "$/", param_2099
+    find_lex $P2100, "$/"
+    find_lex $P2101, "$/"
+    unless_null $P2101, vivify_622
+    $P2101 = root_new ['parrot';'Hash']
+  vivify_622:
+    set $P2102, $P2101["quote_EXPR"]
+    unless_null $P2102, vivify_623
+    new $P2102, "Undef"
+  vivify_623:
+    $P2103 = $P2102."ast"()
+    $P2104 = $P2100."!make"($P2103)
+    .return ($P2104)
+  control_2097:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2092, exception, "payload"
-    .return ($P2092)
+    getattribute $P2105, exception, "payload"
+    .return ($P2105)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<{ }>"  :subid("116_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2096
+.include "except_types.pasm"
+.sub "quote:sym<dblq>"  :subid("116_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2109
 .annotate 'line', 756
-    new $P2095, 'ExceptionHandler'
-    set_addr $P2095, control_2094
-    $P2095."handle_types"(57)
-    push_eh $P2095
+    new $P2108, 'ExceptionHandler'
+    set_addr $P2108, control_2107
+    $P2108."handle_types"(.CONTROL_RETURN)
+    push_eh $P2108
     .lex "self", self
-    .lex "$/", param_2096
-.annotate 'line', 757
-    find_lex $P2097, "$/"
-    get_hll_global $P2098, ["PAST"], "Op"
-.annotate 'line', 758
-    find_lex $P2099, "$/"
-    unless_null $P2099, vivify_604
-    $P2099 = root_new ['parrot';'Hash']
-  vivify_604:
-    set $P2100, $P2099["block"]
-    unless_null $P2100, vivify_605
-    new $P2100, "Undef"
-  vivify_605:
-    $P2101 = $P2100."ast"()
-    $P2102 = "block_immediate"($P2101)
-    find_lex $P2103, "$/"
-    $P2104 = $P2098."new"($P2102, "set S*" :named("pirop"), $P2103 :named("node"))
-.annotate 'line', 757
-    $P2105 = $P2097."!make"($P2104)
-.annotate 'line', 756
-    .return ($P2105)
-  control_2094:
+    .lex "$/", param_2109
+    find_lex $P2110, "$/"
+    find_lex $P2111, "$/"
+    unless_null $P2111, vivify_624
+    $P2111 = root_new ['parrot';'Hash']
+  vivify_624:
+    set $P2112, $P2111["quote_EXPR"]
+    unless_null $P2112, vivify_625
+    new $P2112, "Undef"
+  vivify_625:
+    $P2113 = $P2112."ast"()
+    $P2114 = $P2110."!make"($P2113)
+    .return ($P2114)
+  control_2107:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2106, exception, "payload"
-    .return ($P2106)
+    getattribute $P2115, exception, "payload"
+    .return ($P2115)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "quote:sym<qq>"  :subid("117_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2119
+.annotate 'line', 757
+    new $P2118, 'ExceptionHandler'
+    set_addr $P2118, control_2117
+    $P2118."handle_types"(.CONTROL_RETURN)
+    push_eh $P2118
+    .lex "self", self
+    .lex "$/", param_2119
+    find_lex $P2120, "$/"
+    find_lex $P2121, "$/"
+    unless_null $P2121, vivify_626
+    $P2121 = root_new ['parrot';'Hash']
+  vivify_626:
+    set $P2122, $P2121["quote_EXPR"]
+    unless_null $P2122, vivify_627
+    new $P2122, "Undef"
+  vivify_627:
+    $P2123 = $P2122."ast"()
+    $P2124 = $P2120."!make"($P2123)
+    .return ($P2124)
+  control_2117:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2125, exception, "payload"
+    .return ($P2125)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<esc>"  :subid("117_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2110
+.include "except_types.pasm"
+.sub "quote:sym<q>"  :subid("118_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2129
+.annotate 'line', 758
+    new $P2128, 'ExceptionHandler'
+    set_addr $P2128, control_2127
+    $P2128."handle_types"(.CONTROL_RETURN)
+    push_eh $P2128
+    .lex "self", self
+    .lex "$/", param_2129
+    find_lex $P2130, "$/"
+    find_lex $P2131, "$/"
+    unless_null $P2131, vivify_628
+    $P2131 = root_new ['parrot';'Hash']
+  vivify_628:
+    set $P2132, $P2131["quote_EXPR"]
+    unless_null $P2132, vivify_629
+    new $P2132, "Undef"
+  vivify_629:
+    $P2133 = $P2132."ast"()
+    $P2134 = $P2130."!make"($P2133)
+    .return ($P2134)
+  control_2127:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2135, exception, "payload"
+    .return ($P2135)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "quote:sym<Q>"  :subid("119_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2139
+.annotate 'line', 759
+    new $P2138, 'ExceptionHandler'
+    set_addr $P2138, control_2137
+    $P2138."handle_types"(.CONTROL_RETURN)
+    push_eh $P2138
+    .lex "self", self
+    .lex "$/", param_2139
+    find_lex $P2140, "$/"
+    find_lex $P2141, "$/"
+    unless_null $P2141, vivify_630
+    $P2141 = root_new ['parrot';'Hash']
+  vivify_630:
+    set $P2142, $P2141["quote_EXPR"]
+    unless_null $P2142, vivify_631
+    new $P2142, "Undef"
+  vivify_631:
+    $P2143 = $P2142."ast"()
+    $P2144 = $P2140."!make"($P2143)
+    .return ($P2144)
+  control_2137:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2145, exception, "payload"
+    .return ($P2145)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "quote:sym<Q:PIR>"  :subid("120_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2149
+.annotate 'line', 760
+    new $P2148, 'ExceptionHandler'
+    set_addr $P2148, control_2147
+    $P2148."handle_types"(.CONTROL_RETURN)
+    push_eh $P2148
+    .lex "self", self
+    .lex "$/", param_2149
 .annotate 'line', 761
-    new $P2109, 'ExceptionHandler'
-    set_addr $P2109, control_2108
-    $P2109."handle_types"(57)
-    push_eh $P2109
+    find_lex $P2150, "$/"
+    get_hll_global $P2151, ["PAST"], "Op"
+    find_lex $P2152, "$/"
+    unless_null $P2152, vivify_632
+    $P2152 = root_new ['parrot';'Hash']
+  vivify_632:
+    set $P2153, $P2152["quote_EXPR"]
+    unless_null $P2153, vivify_633
+    new $P2153, "Undef"
+  vivify_633:
+    $P2154 = $P2153."ast"()
+    $P2155 = $P2154."value"()
+    find_lex $P2156, "$/"
+    $P2157 = $P2151."new"($P2155 :named("inline"), "inline" :named("pasttype"), $P2156 :named("node"))
+    $P2158 = $P2150."!make"($P2157)
+.annotate 'line', 760
+    .return ($P2158)
+  control_2147:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2159, exception, "payload"
+    .return ($P2159)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "quote:sym</ />"  :subid("121_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2163
+    .param pmc param_2164 :optional
+    .param int has_param_2164 :opt_flag
+.annotate 'line', 766
+    new $P2162, 'ExceptionHandler'
+    set_addr $P2162, control_2161
+    $P2162."handle_types"(.CONTROL_RETURN)
+    push_eh $P2162
+    .lex "self", self
+    .lex "$/", param_2163
+    if has_param_2164, optparam_634
+    new $P2165, "Undef"
+    set param_2164, $P2165
+  optparam_634:
+    .lex "$key", param_2164
+.annotate 'line', 776
+    new $P2166, "Undef"
+    .lex "$regex", $P2166
+.annotate 'line', 778
+    new $P2167, "Undef"
+    .lex "$past", $P2167
+.annotate 'line', 767
+    find_lex $P2169, "$key"
+    set $S2170, $P2169
+    iseq $I2171, $S2170, "open"
+    unless $I2171, if_2168_end
+.annotate 'line', 768
+
+            null $P0
+            set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
+        
+.annotate 'line', 772
+    get_global $P2172, "@BLOCK"
+    unless_null $P2172, vivify_635
+    $P2172 = root_new ['parrot';'ResizablePMCArray']
+  vivify_635:
+    set $P2173, $P2172[0]
+    unless_null $P2173, vivify_636
+    new $P2173, "Undef"
+  vivify_636:
+    $P2173."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
+.annotate 'line', 773
+    get_global $P2174, "@BLOCK"
+    unless_null $P2174, vivify_637
+    $P2174 = root_new ['parrot';'ResizablePMCArray']
+  vivify_637:
+    set $P2175, $P2174[0]
+    unless_null $P2175, vivify_638
+    new $P2175, "Undef"
+  vivify_638:
+    $P2175."symbol"("$/", "lexical" :named("scope"))
+.annotate 'line', 774
+    new $P2176, "Exception"
+    set $P2176['type'], .CONTROL_RETURN
+    new $P2177, "Integer"
+    assign $P2177, 0
+    setattribute $P2176, 'payload', $P2177
+    throw $P2176
+  if_2168_end:
+.annotate 'line', 777
+    get_hll_global $P2178, ["Regex";"P6Regex";"Actions"], "buildsub"
+    find_lex $P2179, "$/"
+    unless_null $P2179, vivify_639
+    $P2179 = root_new ['parrot';'Hash']
+  vivify_639:
+    set $P2180, $P2179["p6regex"]
+    unless_null $P2180, vivify_640
+    new $P2180, "Undef"
+  vivify_640:
+    $P2181 = $P2180."ast"()
+    get_global $P2182, "@BLOCK"
+    $P2183 = $P2182."shift"()
+    $P2184 = $P2178($P2181, $P2183)
+    store_lex "$regex", $P2184
+.annotate 'line', 779
+    get_hll_global $P2185, ["PAST"], "Op"
+.annotate 'line', 781
+    get_hll_global $P2186, ["PAST"], "Var"
+    new $P2187, "ResizablePMCArray"
+    push $P2187, "Regex"
+    $P2188 = $P2186."new"("Regex" :named("name"), $P2187 :named("namespace"), "package" :named("scope"))
+    find_lex $P2189, "$regex"
+    $P2190 = $P2185."new"($P2188, $P2189, "callmethod" :named("pasttype"), "new" :named("name"))
+.annotate 'line', 779
+    store_lex "$past", $P2190
+.annotate 'line', 785
+    find_lex $P2191, "$regex"
+    find_lex $P2192, "$past"
+    unless_null $P2192, vivify_641
+    $P2192 = root_new ['parrot';'Hash']
+    store_lex "$past", $P2192
+  vivify_641:
+    set $P2192["sink"], $P2191
+.annotate 'line', 786
+    find_lex $P2193, "$/"
+    find_lex $P2194, "$past"
+    $P2195 = $P2193."!make"($P2194)
+.annotate 'line', 766
+    .return ($P2195)
+  control_2161:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2196, exception, "payload"
+    .return ($P2196)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "quote_escape:sym<$>"  :subid("122_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2200
+.annotate 'line', 789
+    new $P2199, 'ExceptionHandler'
+    set_addr $P2199, control_2198
+    $P2199."handle_types"(.CONTROL_RETURN)
+    push_eh $P2199
+    .lex "self", self
+    .lex "$/", param_2200
+    find_lex $P2201, "$/"
+    find_lex $P2202, "$/"
+    unless_null $P2202, vivify_642
+    $P2202 = root_new ['parrot';'Hash']
+  vivify_642:
+    set $P2203, $P2202["variable"]
+    unless_null $P2203, vivify_643
+    new $P2203, "Undef"
+  vivify_643:
+    $P2204 = $P2203."ast"()
+    $P2205 = $P2201."!make"($P2204)
+    .return ($P2205)
+  control_2198:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2206, exception, "payload"
+    .return ($P2206)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "quote_escape:sym<{ }>"  :subid("123_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2210
+.annotate 'line', 790
+    new $P2209, 'ExceptionHandler'
+    set_addr $P2209, control_2208
+    $P2209."handle_types"(.CONTROL_RETURN)
+    push_eh $P2209
+    .lex "self", self
+    .lex "$/", param_2210
+.annotate 'line', 791
+    find_lex $P2211, "$/"
+    get_hll_global $P2212, ["PAST"], "Op"
+.annotate 'line', 792
+    find_lex $P2213, "$/"
+    unless_null $P2213, vivify_644
+    $P2213 = root_new ['parrot';'Hash']
+  vivify_644:
+    set $P2214, $P2213["block"]
+    unless_null $P2214, vivify_645
+    new $P2214, "Undef"
+  vivify_645:
+    $P2215 = $P2214."ast"()
+    $P2216 = "block_immediate"($P2215)
+    find_lex $P2217, "$/"
+    $P2218 = $P2212."new"($P2216, "set S*" :named("pirop"), $P2217 :named("node"))
+.annotate 'line', 791
+    $P2219 = $P2211."!make"($P2218)
+.annotate 'line', 790
+    .return ($P2219)
+  control_2208:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2220, exception, "payload"
+    .return ($P2220)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "quote_escape:sym<esc>"  :subid("124_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2224
+.annotate 'line', 795
+    new $P2223, 'ExceptionHandler'
+    set_addr $P2223, control_2222
+    $P2223."handle_types"(.CONTROL_RETURN)
+    push_eh $P2223
     .lex "self", self
-    .lex "$/", param_2110
-    find_lex $P2111, "$/"
-    $P2112 = $P2111."!make"("\e")
-    .return ($P2112)
-  control_2108:
+    .lex "$/", param_2224
+    find_lex $P2225, "$/"
+    $P2226 = $P2225."!make"("\e")
+    .return ($P2226)
+  control_2222:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2113, exception, "payload"
-    .return ($P2113)
+    getattribute $P2227, exception, "payload"
+    .return ($P2227)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<.>"  :subid("118_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2117
-.annotate 'line', 765
-    new $P2116, 'ExceptionHandler'
-    set_addr $P2116, control_2115
-    $P2116."handle_types"(57)
-    push_eh $P2116
+.include "except_types.pasm"
+.sub "postfix:sym<.>"  :subid("125_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2231
+.annotate 'line', 799
+    new $P2230, 'ExceptionHandler'
+    set_addr $P2230, control_2229
+    $P2230."handle_types"(.CONTROL_RETURN)
+    push_eh $P2230
     .lex "self", self
-    .lex "$/", param_2117
-    find_lex $P2118, "$/"
-    find_lex $P2119, "$/"
-    unless_null $P2119, vivify_606
-    $P2119 = root_new ['parrot';'Hash']
-  vivify_606:
-    set $P2120, $P2119["dotty"]
-    unless_null $P2120, vivify_607
-    new $P2120, "Undef"
-  vivify_607:
-    $P2121 = $P2120."ast"()
-    $P2122 = $P2118."!make"($P2121)
-    .return ($P2122)
-  control_2115:
+    .lex "$/", param_2231
+    find_lex $P2232, "$/"
+    find_lex $P2233, "$/"
+    unless_null $P2233, vivify_646
+    $P2233 = root_new ['parrot';'Hash']
+  vivify_646:
+    set $P2234, $P2233["dotty"]
+    unless_null $P2234, vivify_647
+    new $P2234, "Undef"
+  vivify_647:
+    $P2235 = $P2234."ast"()
+    $P2236 = $P2232."!make"($P2235)
+    .return ($P2236)
+  control_2229:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2123, exception, "payload"
-    .return ($P2123)
+    getattribute $P2237, exception, "payload"
+    .return ($P2237)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<++>"  :subid("119_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2127
-.annotate 'line', 767
-    new $P2126, 'ExceptionHandler'
-    set_addr $P2126, control_2125
-    $P2126."handle_types"(57)
-    push_eh $P2126
+.include "except_types.pasm"
+.sub "postfix:sym<++>"  :subid("126_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2241
+.annotate 'line', 801
+    new $P2240, 'ExceptionHandler'
+    set_addr $P2240, control_2239
+    $P2240."handle_types"(.CONTROL_RETURN)
+    push_eh $P2240
     .lex "self", self
-    .lex "$/", param_2127
-.annotate 'line', 768
-    find_lex $P2128, "$/"
-    get_hll_global $P2129, ["PAST"], "Op"
-.annotate 'line', 769
-    new $P2130, "ResizablePMCArray"
-    push $P2130, "    clone %r, %0"
-    push $P2130, "    inc %0"
-    $P2131 = $P2129."new"("postfix:<++>" :named("name"), $P2130 :named("inline"), "inline" :named("pasttype"))
-.annotate 'line', 768
-    $P2132 = $P2128."!make"($P2131)
-.annotate 'line', 767
-    .return ($P2132)
-  control_2125:
+    .lex "$/", param_2241
+.annotate 'line', 802
+    find_lex $P2242, "$/"
+    get_hll_global $P2243, ["PAST"], "Op"
+.annotate 'line', 803
+    new $P2244, "ResizablePMCArray"
+    push $P2244, "    clone %r, %0"
+    push $P2244, "    inc %0"
+    $P2245 = $P2243."new"("postfix:<++>" :named("name"), $P2244 :named("inline"), "inline" :named("pasttype"))
+.annotate 'line', 802
+    $P2246 = $P2242."!make"($P2245)
+.annotate 'line', 801
+    .return ($P2246)
+  control_2239:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2133, exception, "payload"
-    .return ($P2133)
+    getattribute $P2247, exception, "payload"
+    .return ($P2247)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<-->"  :subid("120_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2137
-.annotate 'line', 773
-    new $P2136, 'ExceptionHandler'
-    set_addr $P2136, control_2135
-    $P2136."handle_types"(57)
-    push_eh $P2136
-    .lex "self", self
-    .lex "$/", param_2137
-.annotate 'line', 774
-    find_lex $P2138, "$/"
-    get_hll_global $P2139, ["PAST"], "Op"
-.annotate 'line', 775
-    new $P2140, "ResizablePMCArray"
-    push $P2140, "    clone %r, %0"
-    push $P2140, "    dec %0"
-    $P2141 = $P2139."new"("postfix:<-->" :named("name"), $P2140 :named("inline"), "inline" :named("pasttype"))
-.annotate 'line', 774
-    $P2142 = $P2138."!make"($P2141)
-.annotate 'line', 773
-    .return ($P2142)
-  control_2135:
+.include "except_types.pasm"
+.sub "postfix:sym<-->"  :subid("127_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2251
+.annotate 'line', 807
+    new $P2250, 'ExceptionHandler'
+    set_addr $P2250, control_2249
+    $P2250."handle_types"(.CONTROL_RETURN)
+    push_eh $P2250
+    .lex "self", self
+    .lex "$/", param_2251
+.annotate 'line', 808
+    find_lex $P2252, "$/"
+    get_hll_global $P2253, ["PAST"], "Op"
+.annotate 'line', 809
+    new $P2254, "ResizablePMCArray"
+    push $P2254, "    clone %r, %0"
+    push $P2254, "    dec %0"
+    $P2255 = $P2253."new"("postfix:<-->" :named("name"), $P2254 :named("inline"), "inline" :named("pasttype"))
+.annotate 'line', 808
+    $P2256 = $P2252."!make"($P2255)
+.annotate 'line', 807
+    .return ($P2256)
+  control_2249:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2143, exception, "payload"
-    .return ($P2143)
+    getattribute $P2257, exception, "payload"
+    .return ($P2257)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "prefix:sym<make>"  :subid("121_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2147
-.annotate 'line', 779
-    new $P2146, 'ExceptionHandler'
-    set_addr $P2146, control_2145
-    $P2146."handle_types"(57)
-    push_eh $P2146
-    .lex "self", self
-    .lex "$/", param_2147
-.annotate 'line', 780
-    find_lex $P2148, "$/"
-    get_hll_global $P2149, ["PAST"], "Op"
-.annotate 'line', 781
-    get_hll_global $P2150, ["PAST"], "Var"
-    $P2151 = $P2150."new"("$/" :named("name"), "contextual" :named("scope"))
-    find_lex $P2152, "$/"
-    $P2153 = $P2149."new"($P2151, "callmethod" :named("pasttype"), "!make" :named("name"), $P2152 :named("node"))
-.annotate 'line', 780
-    $P2154 = $P2148."!make"($P2153)
-.annotate 'line', 779
-    .return ($P2154)
-  control_2145:
+.include "except_types.pasm"
+.sub "prefix:sym<make>"  :subid("128_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2261
+.annotate 'line', 813
+    new $P2260, 'ExceptionHandler'
+    set_addr $P2260, control_2259
+    $P2260."handle_types"(.CONTROL_RETURN)
+    push_eh $P2260
+    .lex "self", self
+    .lex "$/", param_2261
+.annotate 'line', 814
+    find_lex $P2262, "$/"
+    get_hll_global $P2263, ["PAST"], "Op"
+.annotate 'line', 815
+    get_hll_global $P2264, ["PAST"], "Var"
+    $P2265 = $P2264."new"("$/" :named("name"), "contextual" :named("scope"))
+    find_lex $P2266, "$/"
+    $P2267 = $P2263."new"($P2265, "callmethod" :named("pasttype"), "!make" :named("name"), $P2266 :named("node"))
+.annotate 'line', 814
+    $P2268 = $P2262."!make"($P2267)
+.annotate 'line', 813
+    .return ($P2268)
+  control_2259:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2155, exception, "payload"
-    .return ($P2155)
+    getattribute $P2269, exception, "payload"
+    .return ($P2269)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<next>"  :subid("122_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2160
-.annotate 'line', 801
-    new $P2159, 'ExceptionHandler'
-    set_addr $P2159, control_2158
-    $P2159."handle_types"(57)
-    push_eh $P2159
+.include "except_types.pasm"
+.sub "term:sym<next>"  :subid("129_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2274
+.annotate 'line', 831
+    new $P2273, 'ExceptionHandler'
+    set_addr $P2273, control_2272
+    $P2273."handle_types"(.CONTROL_RETURN)
+    push_eh $P2273
     .lex "self", self
-    .lex "$/", param_2160
-    find_lex $P2161, "$/"
-    $P2162 = "control"($P2161, ".CONTROL_LOOP_NEXT")
-    .return ($P2162)
-  control_2158:
+    .lex "$/", param_2274
+    find_lex $P2275, "$/"
+    $P2276 = "control"($P2275, "CONTROL_LOOP_NEXT")
+    .return ($P2276)
+  control_2272:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2163, exception, "payload"
-    .return ($P2163)
+    getattribute $P2277, exception, "payload"
+    .return ($P2277)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<last>"  :subid("123_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2167
-.annotate 'line', 802
-    new $P2166, 'ExceptionHandler'
-    set_addr $P2166, control_2165
-    $P2166."handle_types"(57)
-    push_eh $P2166
+.include "except_types.pasm"
+.sub "term:sym<last>"  :subid("130_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2281
+.annotate 'line', 832
+    new $P2280, 'ExceptionHandler'
+    set_addr $P2280, control_2279
+    $P2280."handle_types"(.CONTROL_RETURN)
+    push_eh $P2280
     .lex "self", self
-    .lex "$/", param_2167
-    find_lex $P2168, "$/"
-    $P2169 = "control"($P2168, ".CONTROL_LOOP_LAST")
-    .return ($P2169)
-  control_2165:
+    .lex "$/", param_2281
+    find_lex $P2282, "$/"
+    $P2283 = "control"($P2282, "CONTROL_LOOP_LAST")
+    .return ($P2283)
+  control_2279:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2170, exception, "payload"
-    .return ($P2170)
+    getattribute $P2284, exception, "payload"
+    .return ($P2284)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<redo>"  :subid("124_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2174
-.annotate 'line', 803
-    new $P2173, 'ExceptionHandler'
-    set_addr $P2173, control_2172
-    $P2173."handle_types"(57)
-    push_eh $P2173
-    .lex "self", self
-    .lex "$/", param_2174
-    find_lex $P2175, "$/"
-    $P2176 = "control"($P2175, ".CONTROL_LOOP_REDO")
-    .return ($P2176)
-  control_2172:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P2177, exception, "payload"
-    .return ($P2177)
+.include "except_types.pasm"
+.sub "term:sym<redo>"  :subid("131_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2288
+.annotate 'line', 833
+    new $P2287, 'ExceptionHandler'
+    set_addr $P2287, control_2286
+    $P2287."handle_types"(.CONTROL_RETURN)
+    push_eh $P2287
+    .lex "self", self
+    .lex "$/", param_2288
+    find_lex $P2289, "$/"
+    $P2290 = "control"($P2289, "CONTROL_LOOP_REDO")
+    .return ($P2290)
+  control_2286:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2291, exception, "payload"
+    .return ($P2291)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "infix:sym<~~>"  :subid("125_1274022903.56472") :method :outer("11_1274022903.56472")
-    .param pmc param_2181
-.annotate 'line', 805
-    new $P2180, 'ExceptionHandler'
-    set_addr $P2180, control_2179
-    $P2180."handle_types"(57)
-    push_eh $P2180
-    .lex "self", self
-    .lex "$/", param_2181
-.annotate 'line', 806
-    find_lex $P2182, "$/"
-    get_hll_global $P2183, ["PAST"], "Op"
-    find_lex $P2184, "$/"
-    $P2185 = $P2183."new"("callmethod" :named("pasttype"), "ACCEPTS" :named("name"), $P2184 :named("node"))
-    $P2186 = $P2182."!make"($P2185)
-.annotate 'line', 805
-    .return ($P2186)
-  control_2179:
+.include "except_types.pasm"
+.sub "infix:sym<~~>"  :subid("132_1275811497.55064") :method :outer("11_1275811497.55064")
+    .param pmc param_2295
+.annotate 'line', 835
+    new $P2294, 'ExceptionHandler'
+    set_addr $P2294, control_2293
+    $P2294."handle_types"(.CONTROL_RETURN)
+    push_eh $P2294
+    .lex "self", self
+    .lex "$/", param_2295
+.annotate 'line', 836
+    find_lex $P2296, "$/"
+    get_hll_global $P2297, ["PAST"], "Op"
+    find_lex $P2298, "$/"
+    $P2299 = $P2297."new"("callmethod" :named("pasttype"), "ACCEPTS" :named("name"), $P2298 :named("node"))
+    $P2300 = $P2296."!make"($P2299)
+.annotate 'line', 835
+    .return ($P2300)
+  control_2293:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2187, exception, "payload"
-    .return ($P2187)
+    getattribute $P2301, exception, "payload"
+    .return ($P2301)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "_block2188"  :subid("126_1274022903.56472") :outer("11_1274022903.56472")
-.annotate 'line', 810
-    .const 'Sub' $P2224 = "130_1274022903.56472" 
-    capture_lex $P2224
-    .const 'Sub' $P2214 = "129_1274022903.56472" 
-    capture_lex $P2214
-    .const 'Sub' $P2204 = "128_1274022903.56472" 
-    capture_lex $P2204
-    .const 'Sub' $P2190 = "127_1274022903.56472" 
-    capture_lex $P2190
-.annotate 'line', 821
-    .const 'Sub' $P2224 = "130_1274022903.56472" 
-    newclosure $P2251, $P2224
-.annotate 'line', 810
-    .return ($P2251)
+.sub "_block2302"  :subid("133_1275811497.55064") :outer("11_1275811497.55064")
+.annotate 'line', 840
+    .const 'Sub' $P2388 = "140_1275811497.55064" 
+    capture_lex $P2388
+    .const 'Sub' $P2375 = "139_1275811497.55064" 
+    capture_lex $P2375
+    .const 'Sub' $P2358 = "138_1275811497.55064" 
+    capture_lex $P2358
+    .const 'Sub' $P2345 = "137_1275811497.55064" 
+    capture_lex $P2345
+    .const 'Sub' $P2332 = "136_1275811497.55064" 
+    capture_lex $P2332
+    .const 'Sub' $P2319 = "135_1275811497.55064" 
+    capture_lex $P2319
+    .const 'Sub' $P2304 = "134_1275811497.55064" 
+    capture_lex $P2304
+.annotate 'line', 874
+    .const 'Sub' $P2388 = "140_1275811497.55064" 
+    newclosure $P2413, $P2388
+.annotate 'line', 840
+    .return ($P2413)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "metachar:sym<:my>"  :subid("127_1274022903.56472") :method :outer("126_1274022903.56472")
-    .param pmc param_2193
-.annotate 'line', 812
-    new $P2192, 'ExceptionHandler'
-    set_addr $P2192, control_2191
-    $P2192."handle_types"(57)
-    push_eh $P2192
-    .lex "self", self
-    .lex "$/", param_2193
-.annotate 'line', 813
-    new $P2194, "Undef"
-    .lex "$past", $P2194
-    find_lex $P2195, "$/"
-    unless_null $P2195, vivify_608
-    $P2195 = root_new ['parrot';'Hash']
-  vivify_608:
-    set $P2196, $P2195["statement"]
-    unless_null $P2196, vivify_609
-    new $P2196, "Undef"
-  vivify_609:
-    $P2197 = $P2196."ast"()
-    store_lex "$past", $P2197
-.annotate 'line', 814
-    find_lex $P2198, "$/"
-    get_hll_global $P2199, ["PAST"], "Regex"
-    find_lex $P2200, "$past"
-    $P2201 = $P2199."new"($P2200, "pastnode" :named("pasttype"))
-    $P2202 = $P2198."!make"($P2201)
-.annotate 'line', 812
-    .return ($P2202)
-  control_2191:
+.include "except_types.pasm"
+.sub "metachar:sym<:my>"  :subid("134_1275811497.55064") :method :outer("133_1275811497.55064")
+    .param pmc param_2307
+.annotate 'line', 842
+    new $P2306, 'ExceptionHandler'
+    set_addr $P2306, control_2305
+    $P2306."handle_types"(.CONTROL_RETURN)
+    push_eh $P2306
+    .lex "self", self
+    .lex "$/", param_2307
+.annotate 'line', 843
+    new $P2308, "Undef"
+    .lex "$past", $P2308
+    find_lex $P2309, "$/"
+    unless_null $P2309, vivify_648
+    $P2309 = root_new ['parrot';'Hash']
+  vivify_648:
+    set $P2310, $P2309["statement"]
+    unless_null $P2310, vivify_649
+    new $P2310, "Undef"
+  vivify_649:
+    $P2311 = $P2310."ast"()
+    store_lex "$past", $P2311
+.annotate 'line', 844
+    find_lex $P2312, "$/"
+    get_hll_global $P2313, ["PAST"], "Regex"
+    find_lex $P2314, "$past"
+    find_lex $P2315, "$/"
+    $P2316 = $P2313."new"($P2314, "pastnode" :named("pasttype"), "declarative" :named("subtype"), $P2315 :named("node"))
+    $P2317 = $P2312."!make"($P2316)
+.annotate 'line', 842
+    .return ($P2317)
+  control_2305:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2203, exception, "payload"
-    .return ($P2203)
+    getattribute $P2318, exception, "payload"
+    .return ($P2318)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "metachar:sym<{ }>"  :subid("128_1274022903.56472") :method :outer("126_1274022903.56472")
-    .param pmc param_2207
-.annotate 'line', 817
-    new $P2206, 'ExceptionHandler'
-    set_addr $P2206, control_2205
-    $P2206."handle_types"(57)
-    push_eh $P2206
-    .lex "self", self
-    .lex "$/", param_2207
-    find_lex $P2208, "$/"
-    find_lex $P2209, "$/"
-    unless_null $P2209, vivify_610
-    $P2209 = root_new ['parrot';'Hash']
-  vivify_610:
-    set $P2210, $P2209["codeblock"]
-    unless_null $P2210, vivify_611
-    new $P2210, "Undef"
-  vivify_611:
-    $P2211 = $P2210."ast"()
-    $P2212 = $P2208."!make"($P2211)
-    .return ($P2212)
-  control_2205:
+.include "except_types.pasm"
+.sub "metachar:sym<{ }>"  :subid("135_1275811497.55064") :method :outer("133_1275811497.55064")
+    .param pmc param_2322
+.annotate 'line', 848
+    new $P2321, 'ExceptionHandler'
+    set_addr $P2321, control_2320
+    $P2321."handle_types"(.CONTROL_RETURN)
+    push_eh $P2321
+    .lex "self", self
+    .lex "$/", param_2322
+.annotate 'line', 849
+    find_lex $P2323, "$/"
+    get_hll_global $P2324, ["PAST"], "Regex"
+    find_lex $P2325, "$/"
+    unless_null $P2325, vivify_650
+    $P2325 = root_new ['parrot';'Hash']
+  vivify_650:
+    set $P2326, $P2325["codeblock"]
+    unless_null $P2326, vivify_651
+    new $P2326, "Undef"
+  vivify_651:
+    $P2327 = $P2326."ast"()
+    find_lex $P2328, "$/"
+    $P2329 = $P2324."new"($P2327, "pastnode" :named("pasttype"), $P2328 :named("node"))
+    $P2330 = $P2323."!make"($P2329)
+.annotate 'line', 848
+    .return ($P2330)
+  control_2320:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2213, exception, "payload"
-    .return ($P2213)
+    getattribute $P2331, exception, "payload"
+    .return ($P2331)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "assertion:sym<{ }>"  :subid("129_1274022903.56472") :method :outer("126_1274022903.56472")
-    .param pmc param_2217
-.annotate 'line', 819
-    new $P2216, 'ExceptionHandler'
-    set_addr $P2216, control_2215
-    $P2216."handle_types"(57)
-    push_eh $P2216
-    .lex "self", self
-    .lex "$/", param_2217
-    find_lex $P2218, "$/"
-    find_lex $P2219, "$/"
-    unless_null $P2219, vivify_612
-    $P2219 = root_new ['parrot';'Hash']
-  vivify_612:
-    set $P2220, $P2219["codeblock"]
-    unless_null $P2220, vivify_613
-    new $P2220, "Undef"
-  vivify_613:
-    $P2221 = $P2220."ast"()
-    $P2222 = $P2218."!make"($P2221)
-    .return ($P2222)
-  control_2215:
+.include "except_types.pasm"
+.sub "metachar:sym<nqpvar>"  :subid("136_1275811497.55064") :method :outer("133_1275811497.55064")
+    .param pmc param_2335
+.annotate 'line', 853
+    new $P2334, 'ExceptionHandler'
+    set_addr $P2334, control_2333
+    $P2334."handle_types"(.CONTROL_RETURN)
+    push_eh $P2334
+    .lex "self", self
+    .lex "$/", param_2335
+.annotate 'line', 854
+    find_lex $P2336, "$/"
+    get_hll_global $P2337, ["PAST"], "Regex"
+    find_lex $P2338, "$/"
+    unless_null $P2338, vivify_652
+    $P2338 = root_new ['parrot';'Hash']
+  vivify_652:
+    set $P2339, $P2338["var"]
+    unless_null $P2339, vivify_653
+    new $P2339, "Undef"
+  vivify_653:
+    $P2340 = $P2339."ast"()
+    find_lex $P2341, "$/"
+    $P2342 = $P2337."new"("!INTERPOLATE", $P2340, "subrule" :named("pasttype"), "method" :named("subtype"), $P2341 :named("node"))
+    $P2343 = $P2336."!make"($P2342)
+.annotate 'line', 853
+    .return ($P2343)
+  control_2333:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2223, exception, "payload"
-    .return ($P2223)
+    getattribute $P2344, exception, "payload"
+    .return ($P2344)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "codeblock"  :subid("130_1274022903.56472") :method :outer("126_1274022903.56472")
-    .param pmc param_2227
-.annotate 'line', 821
-    new $P2226, 'ExceptionHandler'
-    set_addr $P2226, control_2225
-    $P2226."handle_types"(57)
-    push_eh $P2226
-    .lex "self", self
-    .lex "$/", param_2227
-.annotate 'line', 822
-    new $P2228, "Undef"
-    .lex "$block", $P2228
-.annotate 'line', 824
-    new $P2229, "Undef"
-    .lex "$past", $P2229
-.annotate 'line', 822
-    find_lex $P2230, "$/"
-    unless_null $P2230, vivify_614
-    $P2230 = root_new ['parrot';'Hash']
-  vivify_614:
-    set $P2231, $P2230["block"]
-    unless_null $P2231, vivify_615
-    new $P2231, "Undef"
-  vivify_615:
-    $P2232 = $P2231."ast"()
-    store_lex "$block", $P2232
-.annotate 'line', 823
-    find_lex $P2233, "$block"
-    $P2233."blocktype"("immediate")
-.annotate 'line', 825
-    get_hll_global $P2234, ["PAST"], "Regex"
-.annotate 'line', 826
-    get_hll_global $P2235, ["PAST"], "Stmts"
-.annotate 'line', 827
-    get_hll_global $P2236, ["PAST"], "Op"
-.annotate 'line', 828
-    get_hll_global $P2237, ["PAST"], "Var"
-    $P2238 = $P2237."new"("$/" :named("name"))
-.annotate 'line', 829
-    get_hll_global $P2239, ["PAST"], "Op"
-.annotate 'line', 830
-    get_hll_global $P2240, ["PAST"], "Var"
-    $P2241 = $P2240."new"(unicode:"$\x{a2}" :named("name"))
-    $P2242 = $P2239."new"($P2241, "MATCH" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 829
-    $P2243 = $P2236."new"($P2238, $P2242, "bind" :named("pasttype"))
-.annotate 'line', 827
-    find_lex $P2244, "$block"
-    $P2245 = $P2235."new"($P2243, $P2244)
-.annotate 'line', 826
-    $P2246 = $P2234."new"($P2245, "pastnode" :named("pasttype"))
-.annotate 'line', 825
-    store_lex "$past", $P2246
-.annotate 'line', 840
-    find_lex $P2247, "$/"
-    find_lex $P2248, "$past"
-    $P2249 = $P2247."!make"($P2248)
-.annotate 'line', 821
-    .return ($P2249)
-  control_2225:
+.include "except_types.pasm"
+.sub "assertion:sym<{ }>"  :subid("137_1275811497.55064") :method :outer("133_1275811497.55064")
+    .param pmc param_2348
+.annotate 'line', 858
+    new $P2347, 'ExceptionHandler'
+    set_addr $P2347, control_2346
+    $P2347."handle_types"(.CONTROL_RETURN)
+    push_eh $P2347
+    .lex "self", self
+    .lex "$/", param_2348
+.annotate 'line', 859
+    find_lex $P2349, "$/"
+    get_hll_global $P2350, ["PAST"], "Regex"
+    find_lex $P2351, "$/"
+    unless_null $P2351, vivify_654
+    $P2351 = root_new ['parrot';'Hash']
+  vivify_654:
+    set $P2352, $P2351["codeblock"]
+    unless_null $P2352, vivify_655
+    new $P2352, "Undef"
+  vivify_655:
+    $P2353 = $P2352."ast"()
+    find_lex $P2354, "$/"
+    $P2355 = $P2350."new"("!INTERPOLATE_REGEX", $P2353, "subrule" :named("pasttype"), "method" :named("subtype"), $P2354 :named("node"))
+    $P2356 = $P2349."!make"($P2355)
+.annotate 'line', 858
+    .return ($P2356)
+  control_2346:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2357, exception, "payload"
+    .return ($P2357)
+.end
+
+
+.namespace ["NQP";"RegexActions"]
+.include "except_types.pasm"
+.sub "assertion:sym<?{ }>"  :subid("138_1275811497.55064") :method :outer("133_1275811497.55064")
+    .param pmc param_2361
+.annotate 'line', 863
+    new $P2360, 'ExceptionHandler'
+    set_addr $P2360, control_2359
+    $P2360."handle_types"(.CONTROL_RETURN)
+    push_eh $P2360
+    .lex "self", self
+    .lex "$/", param_2361
+.annotate 'line', 864
+    find_lex $P2362, "$/"
+    get_hll_global $P2363, ["PAST"], "Regex"
+    find_lex $P2364, "$/"
+    unless_null $P2364, vivify_656
+    $P2364 = root_new ['parrot';'Hash']
+  vivify_656:
+    set $P2365, $P2364["codeblock"]
+    unless_null $P2365, vivify_657
+    new $P2365, "Undef"
+  vivify_657:
+    $P2366 = $P2365."ast"()
+.annotate 'line', 865
+    find_lex $P2367, "$/"
+    unless_null $P2367, vivify_658
+    $P2367 = root_new ['parrot';'Hash']
+  vivify_658:
+    set $P2368, $P2367["zw"]
+    unless_null $P2368, vivify_659
+    new $P2368, "Undef"
+  vivify_659:
+    set $S2369, $P2368
+    iseq $I2370, $S2369, "!"
+    find_lex $P2371, "$/"
+    $P2372 = $P2363."new"($P2366, "zerowidth" :named("subtype"), $I2370 :named("negate"), "pastnode" :named("pasttype"), $P2371 :named("node"))
+.annotate 'line', 864
+    $P2373 = $P2362."!make"($P2372)
+.annotate 'line', 863
+    .return ($P2373)
+  control_2359:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2374, exception, "payload"
+    .return ($P2374)
+.end
+
+
+.namespace ["NQP";"RegexActions"]
+.include "except_types.pasm"
+.sub "assertion:sym<var>"  :subid("139_1275811497.55064") :method :outer("133_1275811497.55064")
+    .param pmc param_2378
+.annotate 'line', 869
+    new $P2377, 'ExceptionHandler'
+    set_addr $P2377, control_2376
+    $P2377."handle_types"(.CONTROL_RETURN)
+    push_eh $P2377
+    .lex "self", self
+    .lex "$/", param_2378
+.annotate 'line', 870
+    find_lex $P2379, "$/"
+    get_hll_global $P2380, ["PAST"], "Regex"
+    find_lex $P2381, "$/"
+    unless_null $P2381, vivify_660
+    $P2381 = root_new ['parrot';'Hash']
+  vivify_660:
+    set $P2382, $P2381["var"]
+    unless_null $P2382, vivify_661
+    new $P2382, "Undef"
+  vivify_661:
+    $P2383 = $P2382."ast"()
+    find_lex $P2384, "$/"
+    $P2385 = $P2380."new"("!INTERPOLATE_REGEX", $P2383, "subrule" :named("pasttype"), "method" :named("subtype"), $P2384 :named("node"))
+    $P2386 = $P2379."!make"($P2385)
+.annotate 'line', 869
+    .return ($P2386)
+  control_2376:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2387, exception, "payload"
+    .return ($P2387)
+.end
+
+
+.namespace ["NQP";"RegexActions"]
+.include "except_types.pasm"
+.sub "codeblock"  :subid("140_1275811497.55064") :method :outer("133_1275811497.55064")
+    .param pmc param_2391
+.annotate 'line', 874
+    new $P2390, 'ExceptionHandler'
+    set_addr $P2390, control_2389
+    $P2390."handle_types"(.CONTROL_RETURN)
+    push_eh $P2390
+    .lex "self", self
+    .lex "$/", param_2391
+.annotate 'line', 875
+    new $P2392, "Undef"
+    .lex "$block", $P2392
+.annotate 'line', 877
+    new $P2393, "Undef"
+    .lex "$past", $P2393
+.annotate 'line', 875
+    find_lex $P2394, "$/"
+    unless_null $P2394, vivify_662
+    $P2394 = root_new ['parrot';'Hash']
+  vivify_662:
+    set $P2395, $P2394["block"]
+    unless_null $P2395, vivify_663
+    new $P2395, "Undef"
+  vivify_663:
+    $P2396 = $P2395."ast"()
+    store_lex "$block", $P2396
+.annotate 'line', 876
+    find_lex $P2397, "$block"
+    $P2397."blocktype"("immediate")
+.annotate 'line', 878
+    get_hll_global $P2398, ["PAST"], "Stmts"
+.annotate 'line', 879
+    get_hll_global $P2399, ["PAST"], "Op"
+.annotate 'line', 880
+    get_hll_global $P2400, ["PAST"], "Var"
+    $P2401 = $P2400."new"("$/" :named("name"))
+.annotate 'line', 881
+    get_hll_global $P2402, ["PAST"], "Op"
+.annotate 'line', 882
+    get_hll_global $P2403, ["PAST"], "Var"
+    $P2404 = $P2403."new"(unicode:"$\x{a2}" :named("name"))
+    $P2405 = $P2402."new"($P2404, "MATCH" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 881
+    $P2406 = $P2399."new"($P2401, $P2405, "bind" :named("pasttype"))
+.annotate 'line', 879
+    find_lex $P2407, "$block"
+    $P2408 = $P2398."new"($P2406, $P2407)
+.annotate 'line', 878
+    store_lex "$past", $P2408
+.annotate 'line', 890
+    find_lex $P2409, "$/"
+    find_lex $P2410, "$past"
+    $P2411 = $P2409."!make"($P2410)
+.annotate 'line', 874
+    .return ($P2411)
+  control_2389:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2250, exception, "payload"
-    .return ($P2250)
+    getattribute $P2412, exception, "payload"
+    .return ($P2412)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2253" :load :anon :subid("131_1274022903.56472")
+.sub "_block2415" :load :anon :subid("141_1275811497.55064")
 .annotate 'line', 3
-    .const 'Sub' $P2255 = "11_1274022903.56472" 
-    $P2256 = $P2255()
-    .return ($P2256)
+    .const 'Sub' $P2417 = "11_1275811497.55064" 
+    $P2418 = $P2417()
+    .return ($P2418)
 .end
 
 
 .namespace []
-.sub "_block2263" :load :anon :subid("133_1274022903.56472")
+.sub "_block2425" :load :anon :subid("143_1275811497.55064")
 .annotate 'line', 1
-    .const 'Sub' $P2265 = "10_1274022903.56472" 
-    $P2266 = $P2265()
-    .return ($P2266)
+    .const 'Sub' $P2427 = "10_1275811497.55064" 
+    $P2428 = $P2427()
+    .return ($P2428)
 .end
 
 ### .include 'src/cheats/nqp-builtins.pir'

Modified: branches/gsoc_threads/ext/nqp-rx/src/stage0/P6Regex-s0.pir
==============================================================================
--- branches/gsoc_threads/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -16,169 +16,183 @@
 ### .include 'gen/p6regex-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1274022883.50471")
+.sub "_block11"  :anon :subid("10_1275811476.7961")
 .annotate 'line', 0
     get_hll_global $P14, ["Regex";"P6Regex";"Grammar"], "_block13" 
     capture_lex $P14
+.annotate 'line', 1
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
 .annotate 'line', 3
     get_hll_global $P14, ["Regex";"P6Regex";"Grammar"], "_block13" 
     capture_lex $P14
-    $P583 = $P14()
+    $P588 = $P14()
 .annotate 'line', 1
-    .return ($P583)
-    .const 'Sub' $P585 = "159_1274022883.50471" 
-    .return ($P585)
+    .return ($P588)
+    .const 'Sub' $P590 = "159_1275811476.7961" 
+    .return ($P590)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post160") :outer("10_1274022883.50471")
+.sub "" :load :init :subid("post160") :outer("10_1275811476.7961")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1274022883.50471" 
+    .const 'Sub' $P12 = "10_1275811476.7961" 
     .local pmc block
     set block, $P12
-    $P588 = get_root_global ["parrot"], "P6metaclass"
-    $P588."new_class"("Regex::P6Regex::Grammar", "HLL::Grammar" :named("parent"))
+    $P593 = get_root_global ["parrot"], "P6metaclass"
+    $P593."new_class"("Regex::P6Regex::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block13"  :subid("11_1274022883.50471") :outer("10_1274022883.50471")
+.sub "_block13"  :subid("11_1275811476.7961") :outer("10_1275811476.7961")
 .annotate 'line', 3
-    .const 'Sub' $P571 = "156_1274022883.50471" 
-    capture_lex $P571
-    .const 'Sub' $P563 = "154_1274022883.50471" 
-    capture_lex $P563
-    .const 'Sub' $P555 = "152_1274022883.50471" 
-    capture_lex $P555
-    .const 'Sub' $P534 = "147_1274022883.50471" 
-    capture_lex $P534
-    .const 'Sub' $P499 = "141_1274022883.50471" 
-    capture_lex $P499
-    .const 'Sub' $P487 = "138_1274022883.50471" 
-    capture_lex $P487
-    .const 'Sub' $P474 = "135_1274022883.50471" 
-    capture_lex $P474
-    .const 'Sub' $P468 = "133_1274022883.50471" 
-    capture_lex $P468
-    .const 'Sub' $P457 = "130_1274022883.50471" 
-    capture_lex $P457
-    .const 'Sub' $P446 = "127_1274022883.50471" 
-    capture_lex $P446
-    .const 'Sub' $P437 = "123_1274022883.50471" 
-    capture_lex $P437
-    .const 'Sub' $P431 = "121_1274022883.50471" 
-    capture_lex $P431
-    .const 'Sub' $P425 = "119_1274022883.50471" 
-    capture_lex $P425
-    .const 'Sub' $P419 = "117_1274022883.50471" 
-    capture_lex $P419
-    .const 'Sub' $P413 = "115_1274022883.50471" 
-    capture_lex $P413
-    .const 'Sub' $P405 = "113_1274022883.50471" 
-    capture_lex $P405
-    .const 'Sub' $P394 = "111_1274022883.50471" 
-    capture_lex $P394
-    .const 'Sub' $P383 = "109_1274022883.50471" 
-    capture_lex $P383
-    .const 'Sub' $P377 = "107_1274022883.50471" 
-    capture_lex $P377
-    .const 'Sub' $P371 = "105_1274022883.50471" 
-    capture_lex $P371
-    .const 'Sub' $P365 = "103_1274022883.50471" 
-    capture_lex $P365
-    .const 'Sub' $P359 = "101_1274022883.50471" 
-    capture_lex $P359
-    .const 'Sub' $P353 = "99_1274022883.50471" 
-    capture_lex $P353
-    .const 'Sub' $P347 = "97_1274022883.50471" 
-    capture_lex $P347
-    .const 'Sub' $P341 = "95_1274022883.50471" 
-    capture_lex $P341
-    .const 'Sub' $P335 = "93_1274022883.50471" 
-    capture_lex $P335
-    .const 'Sub' $P323 = "89_1274022883.50471" 
-    capture_lex $P323
-    .const 'Sub' $P311 = "87_1274022883.50471" 
-    capture_lex $P311
-    .const 'Sub' $P304 = "85_1274022883.50471" 
-    capture_lex $P304
-    .const 'Sub' $P287 = "83_1274022883.50471" 
-    capture_lex $P287
-    .const 'Sub' $P280 = "81_1274022883.50471" 
-    capture_lex $P280
-    .const 'Sub' $P274 = "79_1274022883.50471" 
-    capture_lex $P274
-    .const 'Sub' $P268 = "77_1274022883.50471" 
-    capture_lex $P268
-    .const 'Sub' $P261 = "75_1274022883.50471" 
-    capture_lex $P261
-    .const 'Sub' $P254 = "73_1274022883.50471" 
-    capture_lex $P254
-    .const 'Sub' $P247 = "71_1274022883.50471" 
-    capture_lex $P247
-    .const 'Sub' $P240 = "69_1274022883.50471" 
-    capture_lex $P240
-    .const 'Sub' $P234 = "67_1274022883.50471" 
-    capture_lex $P234
-    .const 'Sub' $P228 = "65_1274022883.50471" 
-    capture_lex $P228
-    .const 'Sub' $P222 = "63_1274022883.50471" 
-    capture_lex $P222
-    .const 'Sub' $P216 = "61_1274022883.50471" 
-    capture_lex $P216
-    .const 'Sub' $P210 = "59_1274022883.50471" 
+    .const 'Sub' $P576 = "156_1275811476.7961" 
+    capture_lex $P576
+    .const 'Sub' $P568 = "154_1275811476.7961" 
+    capture_lex $P568
+    .const 'Sub' $P560 = "152_1275811476.7961" 
+    capture_lex $P560
+    .const 'Sub' $P539 = "147_1275811476.7961" 
+    capture_lex $P539
+    .const 'Sub' $P504 = "141_1275811476.7961" 
+    capture_lex $P504
+    .const 'Sub' $P492 = "138_1275811476.7961" 
+    capture_lex $P492
+    .const 'Sub' $P479 = "135_1275811476.7961" 
+    capture_lex $P479
+    .const 'Sub' $P473 = "133_1275811476.7961" 
+    capture_lex $P473
+    .const 'Sub' $P462 = "130_1275811476.7961" 
+    capture_lex $P462
+    .const 'Sub' $P451 = "127_1275811476.7961" 
+    capture_lex $P451
+    .const 'Sub' $P442 = "123_1275811476.7961" 
+    capture_lex $P442
+    .const 'Sub' $P436 = "121_1275811476.7961" 
+    capture_lex $P436
+    .const 'Sub' $P430 = "119_1275811476.7961" 
+    capture_lex $P430
+    .const 'Sub' $P424 = "117_1275811476.7961" 
+    capture_lex $P424
+    .const 'Sub' $P418 = "115_1275811476.7961" 
+    capture_lex $P418
+    .const 'Sub' $P410 = "113_1275811476.7961" 
+    capture_lex $P410
+    .const 'Sub' $P399 = "111_1275811476.7961" 
+    capture_lex $P399
+    .const 'Sub' $P388 = "109_1275811476.7961" 
+    capture_lex $P388
+    .const 'Sub' $P382 = "107_1275811476.7961" 
+    capture_lex $P382
+    .const 'Sub' $P376 = "105_1275811476.7961" 
+    capture_lex $P376
+    .const 'Sub' $P370 = "103_1275811476.7961" 
+    capture_lex $P370
+    .const 'Sub' $P364 = "101_1275811476.7961" 
+    capture_lex $P364
+    .const 'Sub' $P358 = "99_1275811476.7961" 
+    capture_lex $P358
+    .const 'Sub' $P352 = "97_1275811476.7961" 
+    capture_lex $P352
+    .const 'Sub' $P346 = "95_1275811476.7961" 
+    capture_lex $P346
+    .const 'Sub' $P340 = "93_1275811476.7961" 
+    capture_lex $P340
+    .const 'Sub' $P328 = "89_1275811476.7961" 
+    capture_lex $P328
+    .const 'Sub' $P316 = "87_1275811476.7961" 
+    capture_lex $P316
+    .const 'Sub' $P309 = "85_1275811476.7961" 
+    capture_lex $P309
+    .const 'Sub' $P292 = "83_1275811476.7961" 
+    capture_lex $P292
+    .const 'Sub' $P285 = "81_1275811476.7961" 
+    capture_lex $P285
+    .const 'Sub' $P279 = "79_1275811476.7961" 
+    capture_lex $P279
+    .const 'Sub' $P273 = "77_1275811476.7961" 
+    capture_lex $P273
+    .const 'Sub' $P266 = "75_1275811476.7961" 
+    capture_lex $P266
+    .const 'Sub' $P259 = "73_1275811476.7961" 
+    capture_lex $P259
+    .const 'Sub' $P252 = "71_1275811476.7961" 
+    capture_lex $P252
+    .const 'Sub' $P245 = "69_1275811476.7961" 
+    capture_lex $P245
+    .const 'Sub' $P239 = "67_1275811476.7961" 
+    capture_lex $P239
+    .const 'Sub' $P233 = "65_1275811476.7961" 
+    capture_lex $P233
+    .const 'Sub' $P227 = "63_1275811476.7961" 
+    capture_lex $P227
+    .const 'Sub' $P221 = "61_1275811476.7961" 
+    capture_lex $P221
+    .const 'Sub' $P215 = "59_1275811476.7961" 
+    capture_lex $P215
+    .const 'Sub' $P210 = "57_1275811476.7961" 
     capture_lex $P210
-    .const 'Sub' $P205 = "57_1274022883.50471" 
+    .const 'Sub' $P205 = "55_1275811476.7961" 
     capture_lex $P205
-    .const 'Sub' $P200 = "55_1274022883.50471" 
-    capture_lex $P200
-    .const 'Sub' $P194 = "53_1274022883.50471" 
-    capture_lex $P194
-    .const 'Sub' $P188 = "51_1274022883.50471" 
-    capture_lex $P188
-    .const 'Sub' $P182 = "49_1274022883.50471" 
-    capture_lex $P182
-    .const 'Sub' $P166 = "44_1274022883.50471" 
-    capture_lex $P166
-    .const 'Sub' $P154 = "42_1274022883.50471" 
-    capture_lex $P154
-    .const 'Sub' $P147 = "40_1274022883.50471" 
-    capture_lex $P147
-    .const 'Sub' $P140 = "38_1274022883.50471" 
-    capture_lex $P140
-    .const 'Sub' $P133 = "36_1274022883.50471" 
-    capture_lex $P133
-    .const 'Sub' $P114 = "31_1274022883.50471" 
-    capture_lex $P114
-    .const 'Sub' $P101 = "28_1274022883.50471" 
-    capture_lex $P101
-    .const 'Sub' $P94 = "26_1274022883.50471" 
-    capture_lex $P94
-    .const 'Sub' $P82 = "24_1274022883.50471" 
-    capture_lex $P82
-    .const 'Sub' $P75 = "22_1274022883.50471" 
-    capture_lex $P75
-    .const 'Sub' $P63 = "20_1274022883.50471" 
+    .const 'Sub' $P199 = "53_1275811476.7961" 
+    capture_lex $P199
+    .const 'Sub' $P193 = "51_1275811476.7961" 
+    capture_lex $P193
+    .const 'Sub' $P187 = "49_1275811476.7961" 
+    capture_lex $P187
+    .const 'Sub' $P171 = "44_1275811476.7961" 
+    capture_lex $P171
+    .const 'Sub' $P155 = "42_1275811476.7961" 
+    capture_lex $P155
+    .const 'Sub' $P148 = "40_1275811476.7961" 
+    capture_lex $P148
+    .const 'Sub' $P141 = "38_1275811476.7961" 
+    capture_lex $P141
+    .const 'Sub' $P134 = "36_1275811476.7961" 
+    capture_lex $P134
+    .const 'Sub' $P115 = "31_1275811476.7961" 
+    capture_lex $P115
+    .const 'Sub' $P102 = "28_1275811476.7961" 
+    capture_lex $P102
+    .const 'Sub' $P95 = "26_1275811476.7961" 
+    capture_lex $P95
+    .const 'Sub' $P83 = "24_1275811476.7961" 
+    capture_lex $P83
+    .const 'Sub' $P76 = "22_1275811476.7961" 
+    capture_lex $P76
+    .const 'Sub' $P63 = "20_1275811476.7961" 
     capture_lex $P63
-    .const 'Sub' $P56 = "18_1274022883.50471" 
+    .const 'Sub' $P56 = "18_1275811476.7961" 
     capture_lex $P56
-    .const 'Sub' $P46 = "15_1274022883.50471" 
+    .const 'Sub' $P46 = "15_1275811476.7961" 
     capture_lex $P46
-    .const 'Sub' $P38 = "13_1274022883.50471" 
+    .const 'Sub' $P38 = "13_1275811476.7961" 
     capture_lex $P38
-    .const 'Sub' $P15 = "12_1274022883.50471" 
+    .const 'Sub' $P15 = "12_1275811476.7961" 
     capture_lex $P15
-    .const 'Sub' $P571 = "156_1274022883.50471" 
-    capture_lex $P571
-    .return ($P571)
-    .const 'Sub' $P580 = "158_1274022883.50471" 
-    .return ($P580)
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
+    .const 'Sub' $P576 = "156_1275811476.7961" 
+    capture_lex $P576
+    .return ($P576)
+    .const 'Sub' $P585 = "158_1275811476.7961" 
+    .return ($P585)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "obs"  :subid("12_1274022883.50471") :method :outer("11_1274022883.50471")
+.include "except_types.pasm"
+.sub "obs"  :subid("12_1275811476.7961") :method :outer("11_1275811476.7961")
     .param pmc param_18
     .param pmc param_19
     .param pmc param_20 :optional
@@ -186,7 +200,7 @@
 .annotate 'line', 3
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
-    $P17."handle_types"(57)
+    $P17."handle_types"(.CONTROL_RETURN)
     push_eh $P17
     .lex "self", self
     .lex "$old", param_18
@@ -226,7 +240,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "ws"  :subid("13_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "ws"  :subid("13_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
     .local string rx39_tgt
     .local int rx39_pos
@@ -240,6 +254,7 @@
     .local pmc match
     .lex "$/", match
     length rx39_eos, rx39_tgt
+    gt rx39_pos, rx39_eos, rx39_done
     set rx39_off, 0
     lt rx39_pos, 2, rx39_start
     sub rx39_off, rx39_pos, 1
@@ -308,7 +323,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__ws"  :subid("14_1274022883.50471") :method
+.sub "!PREFIX__ws"  :subid("14_1275811476.7961") :method
 .annotate 'line', 3
     new $P41, "ResizablePMCArray"
     push $P41, ""
@@ -317,9 +332,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "normspace"  :subid("15_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "normspace"  :subid("15_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .const 'Sub' $P52 = "17_1274022883.50471" 
+    .const 'Sub' $P52 = "17_1275811476.7961" 
     capture_lex $P52
     .local string rx47_tgt
     .local int rx47_pos
@@ -333,6 +348,7 @@
     .local pmc match
     .lex "$/", match
     length rx47_eos, rx47_tgt
+    gt rx47_pos, rx47_eos, rx47_done
     set rx47_off, 0
     lt rx47_pos, 2, rx47_start
     sub rx47_off, rx47_pos, 1
@@ -353,7 +369,7 @@
 .annotate 'line', 10
   # rx subrule "before" subtype=zerowidth negate=
     rx47_cur."!cursor_pos"(rx47_pos)
-    .const 'Sub' $P52 = "17_1274022883.50471" 
+    .const 'Sub' $P52 = "17_1275811476.7961" 
     capture_lex $P52
     $P10 = rx47_cur."before"($P52)
     unless $P10, rx47_fail
@@ -381,7 +397,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__normspace"  :subid("16_1274022883.50471") :method
+.sub "!PREFIX__normspace"  :subid("16_1275811476.7961") :method
 .annotate 'line', 3
     new $P49, "ResizablePMCArray"
     push $P49, ""
@@ -390,7 +406,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block51"  :anon :subid("17_1274022883.50471") :method :outer("15_1274022883.50471")
+.sub "_block51"  :anon :subid("17_1275811476.7961") :method :outer("15_1275811476.7961")
 .annotate 'line', 10
     .local string rx53_tgt
     .local int rx53_pos
@@ -404,6 +420,7 @@
     .local pmc match
     .lex "$/", match
     length rx53_eos, rx53_tgt
+    gt rx53_pos, rx53_eos, rx53_done
     set rx53_off, 0
     lt rx53_pos, 2, rx53_start
     sub rx53_off, rx53_pos, 1
@@ -458,7 +475,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "arg"  :subid("18_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "arg"  :subid("18_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
     .local string rx57_tgt
     .local int rx57_pos
@@ -472,6 +489,7 @@
     .local pmc match
     .lex "$/", match
     length rx57_eos, rx57_tgt
+    gt rx57_pos, rx57_eos, rx57_done
     set rx57_off, 0
     lt rx57_pos, 2, rx57_start
     sub rx57_off, rx57_pos, 1
@@ -569,7 +587,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__arg"  :subid("19_1274022883.50471") :method
+.sub "!PREFIX__arg"  :subid("19_1275811476.7961") :method
 .annotate 'line', 3
     new $P59, "ResizablePMCArray"
     push $P59, ""
@@ -580,7 +598,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "arglist"  :subid("20_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "arglist"  :subid("20_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
     .local string rx64_tgt
     .local int rx64_pos
@@ -595,23 +613,24 @@
     .local pmc match
     .lex "$/", match
     length rx64_eos, rx64_tgt
+    gt rx64_pos, rx64_eos, rx64_done
     set rx64_off, 0
     lt rx64_pos, 2, rx64_start
     sub rx64_off, rx64_pos, 1
     substr rx64_tgt, rx64_tgt, rx64_off
   rx64_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan67_done
-    goto rxscan67_scan
-  rxscan67_loop:
+    ne $I10, -1, rxscan68_done
+    goto rxscan68_scan
+  rxscan68_loop:
     ($P10) = rx64_cur."from"()
     inc $P10
     set rx64_pos, $P10
-    ge rx64_pos, rx64_eos, rxscan67_done
-  rxscan67_scan:
-    set_addr $I10, rxscan67_loop
+    ge rx64_pos, rx64_eos, rxscan68_done
+  rxscan68_scan:
+    set_addr $I10, rxscan68_loop
     rx64_cur."!mark_push"(0, rx64_pos, $I10)
-  rxscan67_done:
+  rxscan68_done:
 .annotate 'line', 20
   # rx subrule "ws" subtype=method negate=
     rx64_cur."!cursor_pos"(rx64_pos)
@@ -630,10 +649,10 @@
     $P10 = rx64_cur."ws"()
     unless $P10, rx64_fail
     rx64_pos = $P10."pos"()
-  # rx rxquantr70 ** 0..*
-    set_addr $I73, rxquantr70_done
-    rx64_cur."!mark_push"(0, rx64_pos, $I73)
-  rxquantr70_loop:
+  # rx rxquantr71 ** 0..*
+    set_addr $I74, rxquantr71_done
+    rx64_cur."!mark_push"(0, rx64_pos, $I74)
+  rxquantr71_loop:
   # rx subrule "ws" subtype=method negate=
     rx64_cur."!cursor_pos"(rx64_pos)
     $P10 = rx64_cur."ws"()
@@ -658,10 +677,10 @@
     rx64_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arg")
     rx64_pos = $P10."pos"()
-    (rx64_rep) = rx64_cur."!mark_commit"($I73)
-    rx64_cur."!mark_push"(rx64_rep, rx64_pos, $I73)
-    goto rxquantr70_loop
-  rxquantr70_done:
+    (rx64_rep) = rx64_cur."!mark_commit"($I74)
+    rx64_cur."!mark_push"(rx64_rep, rx64_pos, $I74)
+    goto rxquantr71_loop
+  rxquantr71_done:
   # rx subrule "ws" subtype=method negate=
     rx64_cur."!cursor_pos"(rx64_pos)
     $P10 = rx64_cur."ws"()
@@ -686,1648 +705,1610 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("21_1274022883.50471") :method
+.sub "!PREFIX__arglist"  :subid("21_1275811476.7961") :method
 .annotate 'line', 3
-    new $P66, "ResizablePMCArray"
-    push $P66, ""
-    .return ($P66)
+    $P66 = self."!PREFIX__!subrule"("ws", "")
+    new $P67, "ResizablePMCArray"
+    push $P67, $P66
+    .return ($P67)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "TOP"  :subid("22_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .local string rx76_tgt
-    .local int rx76_pos
-    .local int rx76_off
-    .local int rx76_eos
-    .local int rx76_rep
-    .local pmc rx76_cur
-    (rx76_cur, rx76_pos, rx76_tgt) = self."!cursor_start"()
-    rx76_cur."!cursor_debug"("START ", "TOP")
-    .lex unicode:"$\x{a2}", rx76_cur
-    .local pmc match
-    .lex "$/", match
-    length rx76_eos, rx76_tgt
-    set rx76_off, 0
-    lt rx76_pos, 2, rx76_start
-    sub rx76_off, rx76_pos, 1
-    substr rx76_tgt, rx76_tgt, rx76_off
-  rx76_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan80_done
-    goto rxscan80_scan
-  rxscan80_loop:
-    ($P10) = rx76_cur."from"()
-    inc $P10
-    set rx76_pos, $P10
-    ge rx76_pos, rx76_eos, rxscan80_done
-  rxscan80_scan:
-    set_addr $I10, rxscan80_loop
-    rx76_cur."!mark_push"(0, rx76_pos, $I10)
-  rxscan80_done:
+.sub "TOP"  :subid("22_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .local string rx77_tgt
+    .local int rx77_pos
+    .local int rx77_off
+    .local int rx77_eos
+    .local int rx77_rep
+    .local pmc rx77_cur
+    (rx77_cur, rx77_pos, rx77_tgt) = self."!cursor_start"()
+    rx77_cur."!cursor_debug"("START ", "TOP")
+    .lex unicode:"$\x{a2}", rx77_cur
+    .local pmc match
+    .lex "$/", match
+    length rx77_eos, rx77_tgt
+    gt rx77_pos, rx77_eos, rx77_done
+    set rx77_off, 0
+    lt rx77_pos, 2, rx77_start
+    sub rx77_off, rx77_pos, 1
+    substr rx77_tgt, rx77_tgt, rx77_off
+  rx77_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan81_done
+    goto rxscan81_scan
+  rxscan81_loop:
+    ($P10) = rx77_cur."from"()
+    inc $P10
+    set rx77_pos, $P10
+    ge rx77_pos, rx77_eos, rxscan81_done
+  rxscan81_scan:
+    set_addr $I10, rxscan81_loop
+    rx77_cur."!mark_push"(0, rx77_pos, $I10)
+  rxscan81_done:
 .annotate 'line', 23
   # rx subrule "nibbler" subtype=capture negate=
-    rx76_cur."!cursor_pos"(rx76_pos)
-    $P10 = rx76_cur."nibbler"()
-    unless $P10, rx76_fail
-    rx76_cur."!mark_push"(0, -1, 0, $P10)
+    rx77_cur."!cursor_pos"(rx77_pos)
+    $P10 = rx77_cur."nibbler"()
+    unless $P10, rx77_fail
+    rx77_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("nibbler")
-    rx76_pos = $P10."pos"()
-  alt81_0:
+    rx77_pos = $P10."pos"()
+  alt82_0:
 .annotate 'line', 24
-    set_addr $I10, alt81_1
-    rx76_cur."!mark_push"(0, rx76_pos, $I10)
+    set_addr $I10, alt82_1
+    rx77_cur."!mark_push"(0, rx77_pos, $I10)
   # rxanchor eos
-    ne rx76_pos, rx76_eos, rx76_fail
-    goto alt81_end
-  alt81_1:
+    ne rx77_pos, rx77_eos, rx77_fail
+    goto alt82_end
+  alt82_1:
   # rx subrule "panic" subtype=method negate=
-    rx76_cur."!cursor_pos"(rx76_pos)
-    $P10 = rx76_cur."panic"("Confused")
-    unless $P10, rx76_fail
-    rx76_pos = $P10."pos"()
-  alt81_end:
+    rx77_cur."!cursor_pos"(rx77_pos)
+    $P10 = rx77_cur."panic"("Confused")
+    unless $P10, rx77_fail
+    rx77_pos = $P10."pos"()
+  alt82_end:
 .annotate 'line', 22
   # rx pass
-    rx76_cur."!cursor_pass"(rx76_pos, "TOP")
-    rx76_cur."!cursor_debug"("PASS  ", "TOP", " at pos=", rx76_pos)
-    .return (rx76_cur)
-  rx76_fail:
+    rx77_cur."!cursor_pass"(rx77_pos, "TOP")
+    rx77_cur."!cursor_debug"("PASS  ", "TOP", " at pos=", rx77_pos)
+    .return (rx77_cur)
+  rx77_fail:
 .annotate 'line', 3
-    (rx76_rep, rx76_pos, $I10, $P10) = rx76_cur."!mark_fail"(0)
-    lt rx76_pos, -1, rx76_done
-    eq rx76_pos, -1, rx76_fail
+    (rx77_rep, rx77_pos, $I10, $P10) = rx77_cur."!mark_fail"(0)
+    lt rx77_pos, -1, rx77_done
+    eq rx77_pos, -1, rx77_fail
     jump $I10
-  rx76_done:
-    rx76_cur."!cursor_fail"()
-    rx76_cur."!cursor_debug"("FAIL  ", "TOP")
-    .return (rx76_cur)
+  rx77_done:
+    rx77_cur."!cursor_fail"()
+    rx77_cur."!cursor_debug"("FAIL  ", "TOP")
+    .return (rx77_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__TOP"  :subid("23_1274022883.50471") :method
+.sub "!PREFIX__TOP"  :subid("23_1275811476.7961") :method
 .annotate 'line', 3
-    $P78 = self."!PREFIX__!subrule"("nibbler", "")
-    new $P79, "ResizablePMCArray"
-    push $P79, $P78
-    .return ($P79)
+    $P79 = self."!PREFIX__!subrule"("nibbler", "")
+    new $P80, "ResizablePMCArray"
+    push $P80, $P79
+    .return ($P80)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "nibbler"  :subid("24_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "nibbler"  :subid("24_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx83_tgt
-    .local int rx83_pos
-    .local int rx83_off
-    .local int rx83_eos
-    .local int rx83_rep
-    .local pmc rx83_cur
-    (rx83_cur, rx83_pos, rx83_tgt) = self."!cursor_start"()
-    rx83_cur."!cursor_debug"("START ", "nibbler")
-    rx83_cur."!cursor_caparray"("termish")
-    .lex unicode:"$\x{a2}", rx83_cur
+    .local string rx84_tgt
+    .local int rx84_pos
+    .local int rx84_off
+    .local int rx84_eos
+    .local int rx84_rep
+    .local pmc rx84_cur
+    (rx84_cur, rx84_pos, rx84_tgt) = self."!cursor_start"()
+    rx84_cur."!cursor_debug"("START ", "nibbler")
+    rx84_cur."!cursor_caparray"("termish")
+    .lex unicode:"$\x{a2}", rx84_cur
     .local pmc match
     .lex "$/", match
-    length rx83_eos, rx83_tgt
-    set rx83_off, 0
-    lt rx83_pos, 2, rx83_start
-    sub rx83_off, rx83_pos, 1
-    substr rx83_tgt, rx83_tgt, rx83_off
-  rx83_start:
+    length rx84_eos, rx84_tgt
+    gt rx84_pos, rx84_eos, rx84_done
+    set rx84_off, 0
+    lt rx84_pos, 2, rx84_start
+    sub rx84_off, rx84_pos, 1
+    substr rx84_tgt, rx84_tgt, rx84_off
+  rx84_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan86_done
-    goto rxscan86_scan
-  rxscan86_loop:
-    ($P10) = rx83_cur."from"()
+    ne $I10, -1, rxscan87_done
+    goto rxscan87_scan
+  rxscan87_loop:
+    ($P10) = rx84_cur."from"()
     inc $P10
-    set rx83_pos, $P10
-    ge rx83_pos, rx83_eos, rxscan86_done
-  rxscan86_scan:
-    set_addr $I10, rxscan86_loop
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
-  rxscan86_done:
+    set rx84_pos, $P10
+    ge rx84_pos, rx84_eos, rxscan87_done
+  rxscan87_scan:
+    set_addr $I10, rxscan87_loop
+    rx84_cur."!mark_push"(0, rx84_pos, $I10)
+  rxscan87_done:
 .annotate 'line', 28
   # rx reduce name="nibbler" key="open"
-    rx83_cur."!cursor_pos"(rx83_pos)
-    rx83_cur."!reduce"("nibbler", "open")
+    rx84_cur."!cursor_pos"(rx84_pos)
+    rx84_cur."!reduce"("nibbler", "open")
 .annotate 'line', 29
-  # rx rxquantr87 ** 0..1
-    set_addr $I89, rxquantr87_done
-    rx83_cur."!mark_push"(0, rx83_pos, $I89)
-  rxquantr87_loop:
+  # rx rxquantr88 ** 0..1
+    set_addr $I90, rxquantr88_done
+    rx84_cur."!mark_push"(0, rx84_pos, $I90)
+  rxquantr88_loop:
   # rx subrule "ws" subtype=method negate=
-    rx83_cur."!cursor_pos"(rx83_pos)
-    $P10 = rx83_cur."ws"()
-    unless $P10, rx83_fail
-    rx83_pos = $P10."pos"()
-  alt88_0:
-    set_addr $I10, alt88_1
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
+    rx84_cur."!cursor_pos"(rx84_pos)
+    $P10 = rx84_cur."ws"()
+    unless $P10, rx84_fail
+    rx84_pos = $P10."pos"()
+  alt89_0:
+    set_addr $I10, alt89_1
+    rx84_cur."!mark_push"(0, rx84_pos, $I10)
   # rx literal  "||"
-    add $I11, rx83_pos, 2
-    gt $I11, rx83_eos, rx83_fail
-    sub $I11, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I11, 2
-    ne $S10, "||", rx83_fail
-    add rx83_pos, 2
-    goto alt88_end
-  alt88_1:
-    set_addr $I10, alt88_2
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
+    add $I11, rx84_pos, 2
+    gt $I11, rx84_eos, rx84_fail
+    sub $I11, rx84_pos, rx84_off
+    substr $S10, rx84_tgt, $I11, 2
+    ne $S10, "||", rx84_fail
+    add rx84_pos, 2
+    goto alt89_end
+  alt89_1:
+    set_addr $I10, alt89_2
+    rx84_cur."!mark_push"(0, rx84_pos, $I10)
   # rx literal  "|"
-    add $I11, rx83_pos, 1
-    gt $I11, rx83_eos, rx83_fail
-    sub $I11, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I11, 1
-    ne $S10, "|", rx83_fail
-    add rx83_pos, 1
-    goto alt88_end
-  alt88_2:
-    set_addr $I10, alt88_3
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
+    add $I11, rx84_pos, 1
+    gt $I11, rx84_eos, rx84_fail
+    sub $I11, rx84_pos, rx84_off
+    substr $S10, rx84_tgt, $I11, 1
+    ne $S10, "|", rx84_fail
+    add rx84_pos, 1
+    goto alt89_end
+  alt89_2:
+    set_addr $I10, alt89_3
+    rx84_cur."!mark_push"(0, rx84_pos, $I10)
   # rx literal  "&&"
-    add $I11, rx83_pos, 2
-    gt $I11, rx83_eos, rx83_fail
-    sub $I11, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I11, 2
-    ne $S10, "&&", rx83_fail
-    add rx83_pos, 2
-    goto alt88_end
-  alt88_3:
+    add $I11, rx84_pos, 2
+    gt $I11, rx84_eos, rx84_fail
+    sub $I11, rx84_pos, rx84_off
+    substr $S10, rx84_tgt, $I11, 2
+    ne $S10, "&&", rx84_fail
+    add rx84_pos, 2
+    goto alt89_end
+  alt89_3:
   # rx literal  "&"
-    add $I11, rx83_pos, 1
-    gt $I11, rx83_eos, rx83_fail
-    sub $I11, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I11, 1
-    ne $S10, "&", rx83_fail
-    add rx83_pos, 1
-  alt88_end:
-    (rx83_rep) = rx83_cur."!mark_commit"($I89)
-  rxquantr87_done:
+    add $I11, rx84_pos, 1
+    gt $I11, rx84_eos, rx84_fail
+    sub $I11, rx84_pos, rx84_off
+    substr $S10, rx84_tgt, $I11, 1
+    ne $S10, "&", rx84_fail
+    add rx84_pos, 1
+  alt89_end:
+    (rx84_rep) = rx84_cur."!mark_commit"($I90)
+  rxquantr88_done:
 .annotate 'line', 30
   # rx subrule "termish" subtype=capture negate=
-    rx83_cur."!cursor_pos"(rx83_pos)
-    $P10 = rx83_cur."termish"()
-    unless $P10, rx83_fail
-    rx83_cur."!mark_push"(0, -1, 0, $P10)
+    rx84_cur."!cursor_pos"(rx84_pos)
+    $P10 = rx84_cur."termish"()
+    unless $P10, rx84_fail
+    rx84_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("termish")
-    rx83_pos = $P10."pos"()
+    rx84_pos = $P10."pos"()
 .annotate 'line', 33
-  # rx rxquantr90 ** 0..*
-    set_addr $I93, rxquantr90_done
-    rx83_cur."!mark_push"(0, rx83_pos, $I93)
-  rxquantr90_loop:
-  alt91_0:
+  # rx rxquantr91 ** 0..*
+    set_addr $I94, rxquantr91_done
+    rx84_cur."!mark_push"(0, rx84_pos, $I94)
+  rxquantr91_loop:
+  alt92_0:
 .annotate 'line', 31
-    set_addr $I10, alt91_1
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
+    set_addr $I10, alt92_1
+    rx84_cur."!mark_push"(0, rx84_pos, $I10)
   # rx literal  "||"
-    add $I11, rx83_pos, 2
-    gt $I11, rx83_eos, rx83_fail
-    sub $I11, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I11, 2
-    ne $S10, "||", rx83_fail
-    add rx83_pos, 2
-    goto alt91_end
-  alt91_1:
+    add $I11, rx84_pos, 2
+    gt $I11, rx84_eos, rx84_fail
+    sub $I11, rx84_pos, rx84_off
+    substr $S10, rx84_tgt, $I11, 2
+    ne $S10, "||", rx84_fail
+    add rx84_pos, 2
+    goto alt92_end
+  alt92_1:
   # rx literal  "|"
-    add $I11, rx83_pos, 1
-    gt $I11, rx83_eos, rx83_fail
-    sub $I11, rx83_pos, rx83_off
-    substr $S10, rx83_tgt, $I11, 1
-    ne $S10, "|", rx83_fail
-    add rx83_pos, 1
-  alt91_end:
-  alt92_0:
+    add $I11, rx84_pos, 1
+    gt $I11, rx84_eos, rx84_fail
+    sub $I11, rx84_pos, rx84_off
+    substr $S10, rx84_tgt, $I11, 1
+    ne $S10, "|", rx84_fail
+    add rx84_pos, 1
+  alt92_end:
+  alt93_0:
 .annotate 'line', 32
-    set_addr $I10, alt92_1
-    rx83_cur."!mark_push"(0, rx83_pos, $I10)
+    set_addr $I10, alt93_1
+    rx84_cur."!mark_push"(0, rx84_pos, $I10)
   # rx subrule "termish" subtype=capture negate=
-    rx83_cur."!cursor_pos"(rx83_pos)
-    $P10 = rx83_cur."termish"()
-    unless $P10, rx83_fail
-    rx83_cur."!mark_push"(0, -1, 0, $P10)
+    rx84_cur."!cursor_pos"(rx84_pos)
+    $P10 = rx84_cur."termish"()
+    unless $P10, rx84_fail
+    rx84_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("termish")
-    rx83_pos = $P10."pos"()
-    goto alt92_end
-  alt92_1:
+    rx84_pos = $P10."pos"()
+    goto alt93_end
+  alt93_1:
   # rx subrule "panic" subtype=method negate=
-    rx83_cur."!cursor_pos"(rx83_pos)
-    $P10 = rx83_cur."panic"("Null pattern not allowed")
-    unless $P10, rx83_fail
-    rx83_pos = $P10."pos"()
-  alt92_end:
+    rx84_cur."!cursor_pos"(rx84_pos)
+    $P10 = rx84_cur."panic"("Null pattern not allowed")
+    unless $P10, rx84_fail
+    rx84_pos = $P10."pos"()
+  alt93_end:
 .annotate 'line', 33
-    (rx83_rep) = rx83_cur."!mark_commit"($I93)
-    rx83_cur."!mark_push"(rx83_rep, rx83_pos, $I93)
-    goto rxquantr90_loop
-  rxquantr90_done:
+    (rx84_rep) = rx84_cur."!mark_commit"($I94)
+    rx84_cur."!mark_push"(rx84_rep, rx84_pos, $I94)
+    goto rxquantr91_loop
+  rxquantr91_done:
 .annotate 'line', 27
   # rx pass
-    rx83_cur."!cursor_pass"(rx83_pos, "nibbler")
-    rx83_cur."!cursor_debug"("PASS  ", "nibbler", " at pos=", rx83_pos)
-    .return (rx83_cur)
-  rx83_fail:
+    rx84_cur."!cursor_pass"(rx84_pos, "nibbler")
+    rx84_cur."!cursor_debug"("PASS  ", "nibbler", " at pos=", rx84_pos)
+    .return (rx84_cur)
+  rx84_fail:
 .annotate 'line', 3
-    (rx83_rep, rx83_pos, $I10, $P10) = rx83_cur."!mark_fail"(0)
-    lt rx83_pos, -1, rx83_done
-    eq rx83_pos, -1, rx83_fail
+    (rx84_rep, rx84_pos, $I10, $P10) = rx84_cur."!mark_fail"(0)
+    lt rx84_pos, -1, rx84_done
+    eq rx84_pos, -1, rx84_fail
     jump $I10
-  rx83_done:
-    rx83_cur."!cursor_fail"()
-    rx83_cur."!cursor_debug"("FAIL  ", "nibbler")
-    .return (rx83_cur)
+  rx84_done:
+    rx84_cur."!cursor_fail"()
+    rx84_cur."!cursor_debug"("FAIL  ", "nibbler")
+    .return (rx84_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__nibbler"  :subid("25_1274022883.50471") :method
+.sub "!PREFIX__nibbler"  :subid("25_1275811476.7961") :method
 .annotate 'line', 3
-    new $P85, "ResizablePMCArray"
-    push $P85, ""
-    .return ($P85)
+    new $P86, "ResizablePMCArray"
+    push $P86, ""
+    .return ($P86)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "termish"  :subid("26_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "termish"  :subid("26_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx95_tgt
-    .local int rx95_pos
-    .local int rx95_off
-    .local int rx95_eos
-    .local int rx95_rep
-    .local pmc rx95_cur
-    (rx95_cur, rx95_pos, rx95_tgt) = self."!cursor_start"()
-    rx95_cur."!cursor_debug"("START ", "termish")
-    rx95_cur."!cursor_caparray"("noun")
-    .lex unicode:"$\x{a2}", rx95_cur
+    .local string rx96_tgt
+    .local int rx96_pos
+    .local int rx96_off
+    .local int rx96_eos
+    .local int rx96_rep
+    .local pmc rx96_cur
+    (rx96_cur, rx96_pos, rx96_tgt) = self."!cursor_start"()
+    rx96_cur."!cursor_debug"("START ", "termish")
+    rx96_cur."!cursor_caparray"("noun")
+    .lex unicode:"$\x{a2}", rx96_cur
     .local pmc match
     .lex "$/", match
-    length rx95_eos, rx95_tgt
-    set rx95_off, 0
-    lt rx95_pos, 2, rx95_start
-    sub rx95_off, rx95_pos, 1
-    substr rx95_tgt, rx95_tgt, rx95_off
-  rx95_start:
+    length rx96_eos, rx96_tgt
+    gt rx96_pos, rx96_eos, rx96_done
+    set rx96_off, 0
+    lt rx96_pos, 2, rx96_start
+    sub rx96_off, rx96_pos, 1
+    substr rx96_tgt, rx96_tgt, rx96_off
+  rx96_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan98_done
-    goto rxscan98_scan
-  rxscan98_loop:
-    ($P10) = rx95_cur."from"()
+    ne $I10, -1, rxscan99_done
+    goto rxscan99_scan
+  rxscan99_loop:
+    ($P10) = rx96_cur."from"()
     inc $P10
-    set rx95_pos, $P10
-    ge rx95_pos, rx95_eos, rxscan98_done
-  rxscan98_scan:
-    set_addr $I10, rxscan98_loop
-    rx95_cur."!mark_push"(0, rx95_pos, $I10)
-  rxscan98_done:
+    set rx96_pos, $P10
+    ge rx96_pos, rx96_eos, rxscan99_done
+  rxscan99_scan:
+    set_addr $I10, rxscan99_loop
+    rx96_cur."!mark_push"(0, rx96_pos, $I10)
+  rxscan99_done:
 .annotate 'line', 37
-  # rx rxquantr99 ** 1..*
-    set_addr $I100, rxquantr99_done
-    rx95_cur."!mark_push"(0, -1, $I100)
-  rxquantr99_loop:
+  # rx rxquantr100 ** 1..*
+    set_addr $I101, rxquantr100_done
+    rx96_cur."!mark_push"(0, -1, $I101)
+  rxquantr100_loop:
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx95_cur."!cursor_pos"(rx95_pos)
-    $P10 = rx95_cur."quantified_atom"()
-    unless $P10, rx95_fail
-    rx95_cur."!mark_push"(0, -1, 0, $P10)
+    rx96_cur."!cursor_pos"(rx96_pos)
+    $P10 = rx96_cur."quantified_atom"()
+    unless $P10, rx96_fail
+    rx96_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("noun")
-    rx95_pos = $P10."pos"()
-    (rx95_rep) = rx95_cur."!mark_commit"($I100)
-    rx95_cur."!mark_push"(rx95_rep, rx95_pos, $I100)
-    goto rxquantr99_loop
-  rxquantr99_done:
+    rx96_pos = $P10."pos"()
+    (rx96_rep) = rx96_cur."!mark_commit"($I101)
+    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I101)
+    goto rxquantr100_loop
+  rxquantr100_done:
 .annotate 'line', 36
   # rx pass
-    rx95_cur."!cursor_pass"(rx95_pos, "termish")
-    rx95_cur."!cursor_debug"("PASS  ", "termish", " at pos=", rx95_pos)
-    .return (rx95_cur)
-  rx95_fail:
+    rx96_cur."!cursor_pass"(rx96_pos, "termish")
+    rx96_cur."!cursor_debug"("PASS  ", "termish", " at pos=", rx96_pos)
+    .return (rx96_cur)
+  rx96_fail:
 .annotate 'line', 3
-    (rx95_rep, rx95_pos, $I10, $P10) = rx95_cur."!mark_fail"(0)
-    lt rx95_pos, -1, rx95_done
-    eq rx95_pos, -1, rx95_fail
+    (rx96_rep, rx96_pos, $I10, $P10) = rx96_cur."!mark_fail"(0)
+    lt rx96_pos, -1, rx96_done
+    eq rx96_pos, -1, rx96_fail
     jump $I10
-  rx95_done:
-    rx95_cur."!cursor_fail"()
-    rx95_cur."!cursor_debug"("FAIL  ", "termish")
-    .return (rx95_cur)
+  rx96_done:
+    rx96_cur."!cursor_fail"()
+    rx96_cur."!cursor_debug"("FAIL  ", "termish")
+    .return (rx96_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__termish"  :subid("27_1274022883.50471") :method
+.sub "!PREFIX__termish"  :subid("27_1275811476.7961") :method
 .annotate 'line', 3
-    new $P97, "ResizablePMCArray"
-    push $P97, ""
-    .return ($P97)
+    new $P98, "ResizablePMCArray"
+    push $P98, ""
+    .return ($P98)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantified_atom"  :subid("28_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "quantified_atom"  :subid("28_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .const 'Sub' $P110 = "30_1274022883.50471" 
-    capture_lex $P110
-    .local string rx102_tgt
-    .local int rx102_pos
-    .local int rx102_off
-    .local int rx102_eos
-    .local int rx102_rep
-    .local pmc rx102_cur
-    (rx102_cur, rx102_pos, rx102_tgt) = self."!cursor_start"()
-    rx102_cur."!cursor_debug"("START ", "quantified_atom")
-    rx102_cur."!cursor_caparray"("quantifier", "backmod")
-    .lex unicode:"$\x{a2}", rx102_cur
+    .const 'Sub' $P111 = "30_1275811476.7961" 
+    capture_lex $P111
+    .local string rx103_tgt
+    .local int rx103_pos
+    .local int rx103_off
+    .local int rx103_eos
+    .local int rx103_rep
+    .local pmc rx103_cur
+    (rx103_cur, rx103_pos, rx103_tgt) = self."!cursor_start"()
+    rx103_cur."!cursor_debug"("START ", "quantified_atom")
+    rx103_cur."!cursor_caparray"("quantifier", "backmod")
+    .lex unicode:"$\x{a2}", rx103_cur
     .local pmc match
     .lex "$/", match
-    length rx102_eos, rx102_tgt
-    set rx102_off, 0
-    lt rx102_pos, 2, rx102_start
-    sub rx102_off, rx102_pos, 1
-    substr rx102_tgt, rx102_tgt, rx102_off
-  rx102_start:
+    length rx103_eos, rx103_tgt
+    gt rx103_pos, rx103_eos, rx103_done
+    set rx103_off, 0
+    lt rx103_pos, 2, rx103_start
+    sub rx103_off, rx103_pos, 1
+    substr rx103_tgt, rx103_tgt, rx103_off
+  rx103_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan106_done
-    goto rxscan106_scan
-  rxscan106_loop:
-    ($P10) = rx102_cur."from"()
+    ne $I10, -1, rxscan107_done
+    goto rxscan107_scan
+  rxscan107_loop:
+    ($P10) = rx103_cur."from"()
     inc $P10
-    set rx102_pos, $P10
-    ge rx102_pos, rx102_eos, rxscan106_done
-  rxscan106_scan:
-    set_addr $I10, rxscan106_loop
-    rx102_cur."!mark_push"(0, rx102_pos, $I10)
-  rxscan106_done:
+    set rx103_pos, $P10
+    ge rx103_pos, rx103_eos, rxscan107_done
+  rxscan107_scan:
+    set_addr $I10, rxscan107_loop
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
+  rxscan107_done:
 .annotate 'line', 41
   # rx subrule "atom" subtype=capture negate=
-    rx102_cur."!cursor_pos"(rx102_pos)
-    $P10 = rx102_cur."atom"()
-    unless $P10, rx102_fail
-    rx102_cur."!mark_push"(0, -1, 0, $P10)
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."atom"()
+    unless $P10, rx103_fail
+    rx103_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("atom")
-    rx102_pos = $P10."pos"()
-  # rx rxquantr107 ** 0..1
-    set_addr $I113, rxquantr107_done
-    rx102_cur."!mark_push"(0, rx102_pos, $I113)
-  rxquantr107_loop:
+    rx103_pos = $P10."pos"()
+  # rx rxquantr108 ** 0..1
+    set_addr $I114, rxquantr108_done
+    rx103_cur."!mark_push"(0, rx103_pos, $I114)
+  rxquantr108_loop:
   # rx subrule "ws" subtype=method negate=
-    rx102_cur."!cursor_pos"(rx102_pos)
-    $P10 = rx102_cur."ws"()
-    unless $P10, rx102_fail
-    rx102_pos = $P10."pos"()
-  alt108_0:
-    set_addr $I10, alt108_1
-    rx102_cur."!mark_push"(0, rx102_pos, $I10)
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."ws"()
+    unless $P10, rx103_fail
+    rx103_pos = $P10."pos"()
+  alt109_0:
+    set_addr $I10, alt109_1
+    rx103_cur."!mark_push"(0, rx103_pos, $I10)
   # rx subrule "quantifier" subtype=capture negate=
-    rx102_cur."!cursor_pos"(rx102_pos)
-    $P10 = rx102_cur."quantifier"()
-    unless $P10, rx102_fail
-    rx102_cur."!mark_push"(0, -1, 0, $P10)
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."quantifier"()
+    unless $P10, rx103_fail
+    rx103_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quantifier")
-    rx102_pos = $P10."pos"()
-    goto alt108_end
-  alt108_1:
+    rx103_pos = $P10."pos"()
+    goto alt109_end
+  alt109_1:
   # rx subrule "before" subtype=zerowidth negate=
-    rx102_cur."!cursor_pos"(rx102_pos)
-    .const 'Sub' $P110 = "30_1274022883.50471" 
-    capture_lex $P110
-    $P10 = rx102_cur."before"($P110)
-    unless $P10, rx102_fail
+    rx103_cur."!cursor_pos"(rx103_pos)
+    .const 'Sub' $P111 = "30_1275811476.7961" 
+    capture_lex $P111
+    $P10 = rx103_cur."before"($P111)
+    unless $P10, rx103_fail
   # rx subrule "backmod" subtype=capture negate=
-    rx102_cur."!cursor_pos"(rx102_pos)
-    $P10 = rx102_cur."backmod"()
-    unless $P10, rx102_fail
-    rx102_cur."!mark_push"(0, -1, 0, $P10)
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."backmod"()
+    unless $P10, rx103_fail
+    rx103_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx102_pos = $P10."pos"()
+    rx103_pos = $P10."pos"()
   # rx subrule "alpha" subtype=zerowidth negate=1
-    rx102_cur."!cursor_pos"(rx102_pos)
-    $P10 = rx102_cur."alpha"()
-    if $P10, rx102_fail
-  alt108_end:
-    (rx102_rep) = rx102_cur."!mark_commit"($I113)
-  rxquantr107_done:
+    rx103_cur."!cursor_pos"(rx103_pos)
+    $P10 = rx103_cur."alpha"()
+    if $P10, rx103_fail
+  alt109_end:
+    (rx103_rep) = rx103_cur."!mark_commit"($I114)
+  rxquantr108_done:
 .annotate 'line', 40
   # rx pass
-    rx102_cur."!cursor_pass"(rx102_pos, "quantified_atom")
-    rx102_cur."!cursor_debug"("PASS  ", "quantified_atom", " at pos=", rx102_pos)
-    .return (rx102_cur)
-  rx102_fail:
+    rx103_cur."!cursor_pass"(rx103_pos, "quantified_atom")
+    rx103_cur."!cursor_debug"("PASS  ", "quantified_atom", " at pos=", rx103_pos)
+    .return (rx103_cur)
+  rx103_fail:
 .annotate 'line', 3
-    (rx102_rep, rx102_pos, $I10, $P10) = rx102_cur."!mark_fail"(0)
-    lt rx102_pos, -1, rx102_done
-    eq rx102_pos, -1, rx102_fail
+    (rx103_rep, rx103_pos, $I10, $P10) = rx103_cur."!mark_fail"(0)
+    lt rx103_pos, -1, rx103_done
+    eq rx103_pos, -1, rx103_fail
     jump $I10
-  rx102_done:
-    rx102_cur."!cursor_fail"()
-    rx102_cur."!cursor_debug"("FAIL  ", "quantified_atom")
-    .return (rx102_cur)
+  rx103_done:
+    rx103_cur."!cursor_fail"()
+    rx103_cur."!cursor_debug"("FAIL  ", "quantified_atom")
+    .return (rx103_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantified_atom"  :subid("29_1274022883.50471") :method
+.sub "!PREFIX__quantified_atom"  :subid("29_1275811476.7961") :method
 .annotate 'line', 3
-    $P104 = self."!PREFIX__!subrule"("atom", "")
-    new $P105, "ResizablePMCArray"
-    push $P105, $P104
-    .return ($P105)
+    $P105 = self."!PREFIX__!subrule"("atom", "")
+    new $P106, "ResizablePMCArray"
+    push $P106, $P105
+    .return ($P106)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block109"  :anon :subid("30_1274022883.50471") :method :outer("28_1274022883.50471")
+.sub "_block110"  :anon :subid("30_1275811476.7961") :method :outer("28_1275811476.7961")
 .annotate 'line', 41
-    .local string rx111_tgt
-    .local int rx111_pos
-    .local int rx111_off
-    .local int rx111_eos
-    .local int rx111_rep
-    .local pmc rx111_cur
-    (rx111_cur, rx111_pos, rx111_tgt) = self."!cursor_start"()
-    rx111_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx111_cur
-    .local pmc match
-    .lex "$/", match
-    length rx111_eos, rx111_tgt
-    set rx111_off, 0
-    lt rx111_pos, 2, rx111_start
-    sub rx111_off, rx111_pos, 1
-    substr rx111_tgt, rx111_tgt, rx111_off
-  rx111_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan112_done
-    goto rxscan112_scan
-  rxscan112_loop:
-    ($P10) = rx111_cur."from"()
-    inc $P10
-    set rx111_pos, $P10
-    ge rx111_pos, rx111_eos, rxscan112_done
-  rxscan112_scan:
-    set_addr $I10, rxscan112_loop
-    rx111_cur."!mark_push"(0, rx111_pos, $I10)
-  rxscan112_done:
+    .local string rx112_tgt
+    .local int rx112_pos
+    .local int rx112_off
+    .local int rx112_eos
+    .local int rx112_rep
+    .local pmc rx112_cur
+    (rx112_cur, rx112_pos, rx112_tgt) = self."!cursor_start"()
+    rx112_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx112_cur
+    .local pmc match
+    .lex "$/", match
+    length rx112_eos, rx112_tgt
+    gt rx112_pos, rx112_eos, rx112_done
+    set rx112_off, 0
+    lt rx112_pos, 2, rx112_start
+    sub rx112_off, rx112_pos, 1
+    substr rx112_tgt, rx112_tgt, rx112_off
+  rx112_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan113_done
+    goto rxscan113_scan
+  rxscan113_loop:
+    ($P10) = rx112_cur."from"()
+    inc $P10
+    set rx112_pos, $P10
+    ge rx112_pos, rx112_eos, rxscan113_done
+  rxscan113_scan:
+    set_addr $I10, rxscan113_loop
+    rx112_cur."!mark_push"(0, rx112_pos, $I10)
+  rxscan113_done:
   # rx literal  ":"
-    add $I11, rx111_pos, 1
-    gt $I11, rx111_eos, rx111_fail
-    sub $I11, rx111_pos, rx111_off
-    substr $S10, rx111_tgt, $I11, 1
-    ne $S10, ":", rx111_fail
-    add rx111_pos, 1
-  # rx pass
-    rx111_cur."!cursor_pass"(rx111_pos, "")
-    rx111_cur."!cursor_debug"("PASS  ", "", " at pos=", rx111_pos)
-    .return (rx111_cur)
-  rx111_fail:
-    (rx111_rep, rx111_pos, $I10, $P10) = rx111_cur."!mark_fail"(0)
-    lt rx111_pos, -1, rx111_done
-    eq rx111_pos, -1, rx111_fail
-    jump $I10
-  rx111_done:
-    rx111_cur."!cursor_fail"()
-    rx111_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx111_cur)
+    add $I11, rx112_pos, 1
+    gt $I11, rx112_eos, rx112_fail
+    sub $I11, rx112_pos, rx112_off
+    substr $S10, rx112_tgt, $I11, 1
+    ne $S10, ":", rx112_fail
+    add rx112_pos, 1
+  # rx pass
+    rx112_cur."!cursor_pass"(rx112_pos, "")
+    rx112_cur."!cursor_debug"("PASS  ", "", " at pos=", rx112_pos)
+    .return (rx112_cur)
+  rx112_fail:
+    (rx112_rep, rx112_pos, $I10, $P10) = rx112_cur."!mark_fail"(0)
+    lt rx112_pos, -1, rx112_done
+    eq rx112_pos, -1, rx112_fail
+    jump $I10
+  rx112_done:
+    rx112_cur."!cursor_fail"()
+    rx112_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx112_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "atom"  :subid("31_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .const 'Sub' $P125 = "33_1274022883.50471" 
-    capture_lex $P125
-    .local string rx115_tgt
-    .local int rx115_pos
-    .local int rx115_off
-    .local int rx115_eos
-    .local int rx115_rep
-    .local pmc rx115_cur
-    (rx115_cur, rx115_pos, rx115_tgt) = self."!cursor_start"()
-    rx115_cur."!cursor_debug"("START ", "atom")
-    .lex unicode:"$\x{a2}", rx115_cur
-    .local pmc match
-    .lex "$/", match
-    length rx115_eos, rx115_tgt
-    set rx115_off, 0
-    lt rx115_pos, 2, rx115_start
-    sub rx115_off, rx115_pos, 1
-    substr rx115_tgt, rx115_tgt, rx115_off
-  rx115_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan119_done
-    goto rxscan119_scan
-  rxscan119_loop:
-    ($P10) = rx115_cur."from"()
-    inc $P10
-    set rx115_pos, $P10
-    ge rx115_pos, rx115_eos, rxscan119_done
-  rxscan119_scan:
-    set_addr $I10, rxscan119_loop
-    rx115_cur."!mark_push"(0, rx115_pos, $I10)
-  rxscan119_done:
-  alt120_0:
+.sub "atom"  :subid("31_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .const 'Sub' $P126 = "33_1275811476.7961" 
+    capture_lex $P126
+    .local string rx116_tgt
+    .local int rx116_pos
+    .local int rx116_off
+    .local int rx116_eos
+    .local int rx116_rep
+    .local pmc rx116_cur
+    (rx116_cur, rx116_pos, rx116_tgt) = self."!cursor_start"()
+    rx116_cur."!cursor_debug"("START ", "atom")
+    .lex unicode:"$\x{a2}", rx116_cur
+    .local pmc match
+    .lex "$/", match
+    length rx116_eos, rx116_tgt
+    gt rx116_pos, rx116_eos, rx116_done
+    set rx116_off, 0
+    lt rx116_pos, 2, rx116_start
+    sub rx116_off, rx116_pos, 1
+    substr rx116_tgt, rx116_tgt, rx116_off
+  rx116_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan120_done
+    goto rxscan120_scan
+  rxscan120_loop:
+    ($P10) = rx116_cur."from"()
+    inc $P10
+    set rx116_pos, $P10
+    ge rx116_pos, rx116_eos, rxscan120_done
+  rxscan120_scan:
+    set_addr $I10, rxscan120_loop
+    rx116_cur."!mark_push"(0, rx116_pos, $I10)
+  rxscan120_done:
+  alt121_0:
 .annotate 'line', 46
-    set_addr $I10, alt120_1
-    rx115_cur."!mark_push"(0, rx115_pos, $I10)
+    set_addr $I10, alt121_1
+    rx116_cur."!mark_push"(0, rx116_pos, $I10)
 .annotate 'line', 47
   # rx charclass w
-    ge rx115_pos, rx115_eos, rx115_fail
-    sub $I10, rx115_pos, rx115_off
-    is_cclass $I11, 8192, rx115_tgt, $I10
-    unless $I11, rx115_fail
-    inc rx115_pos
-  # rx rxquantr121 ** 0..1
-    set_addr $I128, rxquantr121_done
-    rx115_cur."!mark_push"(0, rx115_pos, $I128)
-  rxquantr121_loop:
-  # rx rxquantg122 ** 1..*
-    set_addr $I123, rxquantg122_done
-  rxquantg122_loop:
+    ge rx116_pos, rx116_eos, rx116_fail
+    sub $I10, rx116_pos, rx116_off
+    is_cclass $I11, 8192, rx116_tgt, $I10
+    unless $I11, rx116_fail
+    inc rx116_pos
+  # rx rxquantr122 ** 0..1
+    set_addr $I129, rxquantr122_done
+    rx116_cur."!mark_push"(0, rx116_pos, $I129)
+  rxquantr122_loop:
+  # rx rxquantg123 ** 1..*
+    set_addr $I124, rxquantg123_done
+  rxquantg123_loop:
   # rx charclass w
-    ge rx115_pos, rx115_eos, rx115_fail
-    sub $I10, rx115_pos, rx115_off
-    is_cclass $I11, 8192, rx115_tgt, $I10
-    unless $I11, rx115_fail
-    inc rx115_pos
-    rx115_cur."!mark_push"(rx115_rep, rx115_pos, $I123)
-    goto rxquantg122_loop
-  rxquantg122_done:
+    ge rx116_pos, rx116_eos, rx116_fail
+    sub $I10, rx116_pos, rx116_off
+    is_cclass $I11, 8192, rx116_tgt, $I10
+    unless $I11, rx116_fail
+    inc rx116_pos
+    rx116_cur."!mark_push"(rx116_rep, rx116_pos, $I124)
+    goto rxquantg123_loop
+  rxquantg123_done:
   # rx subrule "before" subtype=zerowidth negate=
-    rx115_cur."!cursor_pos"(rx115_pos)
-    .const 'Sub' $P125 = "33_1274022883.50471" 
-    capture_lex $P125
-    $P10 = rx115_cur."before"($P125)
-    unless $P10, rx115_fail
-    (rx115_rep) = rx115_cur."!mark_commit"($I128)
-  rxquantr121_done:
-    goto alt120_end
-  alt120_1:
+    rx116_cur."!cursor_pos"(rx116_pos)
+    .const 'Sub' $P126 = "33_1275811476.7961" 
+    capture_lex $P126
+    $P10 = rx116_cur."before"($P126)
+    unless $P10, rx116_fail
+    (rx116_rep) = rx116_cur."!mark_commit"($I129)
+  rxquantr122_done:
+    goto alt121_end
+  alt121_1:
 .annotate 'line', 48
   # rx subrule "metachar" subtype=capture negate=
-    rx115_cur."!cursor_pos"(rx115_pos)
-    $P10 = rx115_cur."metachar"()
-    unless $P10, rx115_fail
-    rx115_cur."!mark_push"(0, -1, 0, $P10)
+    rx116_cur."!cursor_pos"(rx116_pos)
+    $P10 = rx116_cur."metachar"()
+    unless $P10, rx116_fail
+    rx116_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("metachar")
-    rx115_pos = $P10."pos"()
-  alt120_end:
+    rx116_pos = $P10."pos"()
+  alt121_end:
 .annotate 'line', 44
   # rx pass
-    rx115_cur."!cursor_pass"(rx115_pos, "atom")
-    rx115_cur."!cursor_debug"("PASS  ", "atom", " at pos=", rx115_pos)
-    .return (rx115_cur)
-  rx115_fail:
+    rx116_cur."!cursor_pass"(rx116_pos, "atom")
+    rx116_cur."!cursor_debug"("PASS  ", "atom", " at pos=", rx116_pos)
+    .return (rx116_cur)
+  rx116_fail:
 .annotate 'line', 3
-    (rx115_rep, rx115_pos, $I10, $P10) = rx115_cur."!mark_fail"(0)
-    lt rx115_pos, -1, rx115_done
-    eq rx115_pos, -1, rx115_fail
+    (rx116_rep, rx116_pos, $I10, $P10) = rx116_cur."!mark_fail"(0)
+    lt rx116_pos, -1, rx116_done
+    eq rx116_pos, -1, rx116_fail
     jump $I10
-  rx115_done:
-    rx115_cur."!cursor_fail"()
-    rx115_cur."!cursor_debug"("FAIL  ", "atom")
-    .return (rx115_cur)
+  rx116_done:
+    rx116_cur."!cursor_fail"()
+    rx116_cur."!cursor_debug"("FAIL  ", "atom")
+    .return (rx116_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__atom"  :subid("32_1274022883.50471") :method
+.sub "!PREFIX__atom"  :subid("32_1275811476.7961") :method
 .annotate 'line', 3
-    $P117 = self."!PREFIX__!subrule"("metachar", "")
-    new $P118, "ResizablePMCArray"
-    push $P118, $P117
-    push $P118, ""
-    .return ($P118)
+    $P118 = self."!PREFIX__!subrule"("metachar", "")
+    new $P119, "ResizablePMCArray"
+    push $P119, $P118
+    push $P119, ""
+    .return ($P119)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block124"  :anon :subid("33_1274022883.50471") :method :outer("31_1274022883.50471")
+.sub "_block125"  :anon :subid("33_1275811476.7961") :method :outer("31_1275811476.7961")
 .annotate 'line', 47
-    .local string rx126_tgt
-    .local int rx126_pos
-    .local int rx126_off
-    .local int rx126_eos
-    .local int rx126_rep
-    .local pmc rx126_cur
-    (rx126_cur, rx126_pos, rx126_tgt) = self."!cursor_start"()
-    rx126_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx126_cur
-    .local pmc match
-    .lex "$/", match
-    length rx126_eos, rx126_tgt
-    set rx126_off, 0
-    lt rx126_pos, 2, rx126_start
-    sub rx126_off, rx126_pos, 1
-    substr rx126_tgt, rx126_tgt, rx126_off
-  rx126_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan127_done
-    goto rxscan127_scan
-  rxscan127_loop:
-    ($P10) = rx126_cur."from"()
-    inc $P10
-    set rx126_pos, $P10
-    ge rx126_pos, rx126_eos, rxscan127_done
-  rxscan127_scan:
-    set_addr $I10, rxscan127_loop
-    rx126_cur."!mark_push"(0, rx126_pos, $I10)
-  rxscan127_done:
+    .local string rx127_tgt
+    .local int rx127_pos
+    .local int rx127_off
+    .local int rx127_eos
+    .local int rx127_rep
+    .local pmc rx127_cur
+    (rx127_cur, rx127_pos, rx127_tgt) = self."!cursor_start"()
+    rx127_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx127_cur
+    .local pmc match
+    .lex "$/", match
+    length rx127_eos, rx127_tgt
+    gt rx127_pos, rx127_eos, rx127_done
+    set rx127_off, 0
+    lt rx127_pos, 2, rx127_start
+    sub rx127_off, rx127_pos, 1
+    substr rx127_tgt, rx127_tgt, rx127_off
+  rx127_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan128_done
+    goto rxscan128_scan
+  rxscan128_loop:
+    ($P10) = rx127_cur."from"()
+    inc $P10
+    set rx127_pos, $P10
+    ge rx127_pos, rx127_eos, rxscan128_done
+  rxscan128_scan:
+    set_addr $I10, rxscan128_loop
+    rx127_cur."!mark_push"(0, rx127_pos, $I10)
+  rxscan128_done:
   # rx charclass w
-    ge rx126_pos, rx126_eos, rx126_fail
-    sub $I10, rx126_pos, rx126_off
-    is_cclass $I11, 8192, rx126_tgt, $I10
-    unless $I11, rx126_fail
-    inc rx126_pos
+    ge rx127_pos, rx127_eos, rx127_fail
+    sub $I10, rx127_pos, rx127_off
+    is_cclass $I11, 8192, rx127_tgt, $I10
+    unless $I11, rx127_fail
+    inc rx127_pos
   # rx pass
-    rx126_cur."!cursor_pass"(rx126_pos, "")
-    rx126_cur."!cursor_debug"("PASS  ", "", " at pos=", rx126_pos)
-    .return (rx126_cur)
-  rx126_fail:
-    (rx126_rep, rx126_pos, $I10, $P10) = rx126_cur."!mark_fail"(0)
-    lt rx126_pos, -1, rx126_done
-    eq rx126_pos, -1, rx126_fail
+    rx127_cur."!cursor_pass"(rx127_pos, "")
+    rx127_cur."!cursor_debug"("PASS  ", "", " at pos=", rx127_pos)
+    .return (rx127_cur)
+  rx127_fail:
+    (rx127_rep, rx127_pos, $I10, $P10) = rx127_cur."!mark_fail"(0)
+    lt rx127_pos, -1, rx127_done
+    eq rx127_pos, -1, rx127_fail
     jump $I10
-  rx126_done:
-    rx126_cur."!cursor_fail"()
-    rx126_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx126_cur)
+  rx127_done:
+    rx127_cur."!cursor_fail"()
+    rx127_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx127_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier"  :subid("34_1274022883.50471") :method
+.sub "quantifier"  :subid("34_1275811476.7961") :method
 .annotate 'line', 52
-    $P130 = self."!protoregex"("quantifier")
-    .return ($P130)
+    $P131 = self."!protoregex"("quantifier")
+    .return ($P131)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier"  :subid("35_1274022883.50471") :method
+.sub "!PREFIX__quantifier"  :subid("35_1275811476.7961") :method
 .annotate 'line', 52
-    $P132 = self."!PREFIX__!protoregex"("quantifier")
-    .return ($P132)
+    $P133 = self."!PREFIX__!protoregex"("quantifier")
+    .return ($P133)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<*>"  :subid("36_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "quantifier:sym<*>"  :subid("36_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx134_tgt
-    .local int rx134_pos
-    .local int rx134_off
-    .local int rx134_eos
-    .local int rx134_rep
-    .local pmc rx134_cur
-    (rx134_cur, rx134_pos, rx134_tgt) = self."!cursor_start"()
-    rx134_cur."!cursor_debug"("START ", "quantifier:sym<*>")
-    .lex unicode:"$\x{a2}", rx134_cur
-    .local pmc match
-    .lex "$/", match
-    length rx134_eos, rx134_tgt
-    set rx134_off, 0
-    lt rx134_pos, 2, rx134_start
-    sub rx134_off, rx134_pos, 1
-    substr rx134_tgt, rx134_tgt, rx134_off
-  rx134_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan138_done
-    goto rxscan138_scan
-  rxscan138_loop:
-    ($P10) = rx134_cur."from"()
-    inc $P10
-    set rx134_pos, $P10
-    ge rx134_pos, rx134_eos, rxscan138_done
-  rxscan138_scan:
-    set_addr $I10, rxscan138_loop
-    rx134_cur."!mark_push"(0, rx134_pos, $I10)
-  rxscan138_done:
+    .local string rx135_tgt
+    .local int rx135_pos
+    .local int rx135_off
+    .local int rx135_eos
+    .local int rx135_rep
+    .local pmc rx135_cur
+    (rx135_cur, rx135_pos, rx135_tgt) = self."!cursor_start"()
+    rx135_cur."!cursor_debug"("START ", "quantifier:sym<*>")
+    .lex unicode:"$\x{a2}", rx135_cur
+    .local pmc match
+    .lex "$/", match
+    length rx135_eos, rx135_tgt
+    gt rx135_pos, rx135_eos, rx135_done
+    set rx135_off, 0
+    lt rx135_pos, 2, rx135_start
+    sub rx135_off, rx135_pos, 1
+    substr rx135_tgt, rx135_tgt, rx135_off
+  rx135_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan139_done
+    goto rxscan139_scan
+  rxscan139_loop:
+    ($P10) = rx135_cur."from"()
+    inc $P10
+    set rx135_pos, $P10
+    ge rx135_pos, rx135_eos, rxscan139_done
+  rxscan139_scan:
+    set_addr $I10, rxscan139_loop
+    rx135_cur."!mark_push"(0, rx135_pos, $I10)
+  rxscan139_done:
 .annotate 'line', 53
   # rx subcapture "sym"
-    set_addr $I10, rxcap_139_fail
-    rx134_cur."!mark_push"(0, rx134_pos, $I10)
+    set_addr $I10, rxcap_140_fail
+    rx135_cur."!mark_push"(0, rx135_pos, $I10)
   # rx literal  "*"
-    add $I11, rx134_pos, 1
-    gt $I11, rx134_eos, rx134_fail
-    sub $I11, rx134_pos, rx134_off
-    substr $S10, rx134_tgt, $I11, 1
-    ne $S10, "*", rx134_fail
-    add rx134_pos, 1
-    set_addr $I10, rxcap_139_fail
-    ($I12, $I11) = rx134_cur."!mark_peek"($I10)
-    rx134_cur."!cursor_pos"($I11)
-    ($P10) = rx134_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx134_pos, "")
-    rx134_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx135_pos, 1
+    gt $I11, rx135_eos, rx135_fail
+    sub $I11, rx135_pos, rx135_off
+    substr $S10, rx135_tgt, $I11, 1
+    ne $S10, "*", rx135_fail
+    add rx135_pos, 1
+    set_addr $I10, rxcap_140_fail
+    ($I12, $I11) = rx135_cur."!mark_peek"($I10)
+    rx135_cur."!cursor_pos"($I11)
+    ($P10) = rx135_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx135_pos, "")
+    rx135_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_139_done
-  rxcap_139_fail:
-    goto rx134_fail
-  rxcap_139_done:
+    goto rxcap_140_done
+  rxcap_140_fail:
+    goto rx135_fail
+  rxcap_140_done:
   # rx subrule "backmod" subtype=capture negate=
-    rx134_cur."!cursor_pos"(rx134_pos)
-    $P10 = rx134_cur."backmod"()
-    unless $P10, rx134_fail
-    rx134_cur."!mark_push"(0, -1, 0, $P10)
+    rx135_cur."!cursor_pos"(rx135_pos)
+    $P10 = rx135_cur."backmod"()
+    unless $P10, rx135_fail
+    rx135_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx134_pos = $P10."pos"()
+    rx135_pos = $P10."pos"()
   # rx pass
-    rx134_cur."!cursor_pass"(rx134_pos, "quantifier:sym<*>")
-    rx134_cur."!cursor_debug"("PASS  ", "quantifier:sym<*>", " at pos=", rx134_pos)
-    .return (rx134_cur)
-  rx134_fail:
+    rx135_cur."!cursor_pass"(rx135_pos, "quantifier:sym<*>")
+    rx135_cur."!cursor_debug"("PASS  ", "quantifier:sym<*>", " at pos=", rx135_pos)
+    .return (rx135_cur)
+  rx135_fail:
 .annotate 'line', 3
-    (rx134_rep, rx134_pos, $I10, $P10) = rx134_cur."!mark_fail"(0)
-    lt rx134_pos, -1, rx134_done
-    eq rx134_pos, -1, rx134_fail
+    (rx135_rep, rx135_pos, $I10, $P10) = rx135_cur."!mark_fail"(0)
+    lt rx135_pos, -1, rx135_done
+    eq rx135_pos, -1, rx135_fail
     jump $I10
-  rx134_done:
-    rx134_cur."!cursor_fail"()
-    rx134_cur."!cursor_debug"("FAIL  ", "quantifier:sym<*>")
-    .return (rx134_cur)
+  rx135_done:
+    rx135_cur."!cursor_fail"()
+    rx135_cur."!cursor_debug"("FAIL  ", "quantifier:sym<*>")
+    .return (rx135_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<*>"  :subid("37_1274022883.50471") :method
+.sub "!PREFIX__quantifier:sym<*>"  :subid("37_1275811476.7961") :method
 .annotate 'line', 3
-    $P136 = self."!PREFIX__!subrule"("backmod", "*")
-    new $P137, "ResizablePMCArray"
-    push $P137, $P136
-    .return ($P137)
+    $P137 = self."!PREFIX__!subrule"("backmod", "*")
+    new $P138, "ResizablePMCArray"
+    push $P138, $P137
+    .return ($P138)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<+>"  :subid("38_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "quantifier:sym<+>"  :subid("38_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx141_tgt
-    .local int rx141_pos
-    .local int rx141_off
-    .local int rx141_eos
-    .local int rx141_rep
-    .local pmc rx141_cur
-    (rx141_cur, rx141_pos, rx141_tgt) = self."!cursor_start"()
-    rx141_cur."!cursor_debug"("START ", "quantifier:sym<+>")
-    .lex unicode:"$\x{a2}", rx141_cur
+    .local string rx142_tgt
+    .local int rx142_pos
+    .local int rx142_off
+    .local int rx142_eos
+    .local int rx142_rep
+    .local pmc rx142_cur
+    (rx142_cur, rx142_pos, rx142_tgt) = self."!cursor_start"()
+    rx142_cur."!cursor_debug"("START ", "quantifier:sym<+>")
+    .lex unicode:"$\x{a2}", rx142_cur
     .local pmc match
     .lex "$/", match
-    length rx141_eos, rx141_tgt
-    set rx141_off, 0
-    lt rx141_pos, 2, rx141_start
-    sub rx141_off, rx141_pos, 1
-    substr rx141_tgt, rx141_tgt, rx141_off
-  rx141_start:
+    length rx142_eos, rx142_tgt
+    gt rx142_pos, rx142_eos, rx142_done
+    set rx142_off, 0
+    lt rx142_pos, 2, rx142_start
+    sub rx142_off, rx142_pos, 1
+    substr rx142_tgt, rx142_tgt, rx142_off
+  rx142_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan145_done
-    goto rxscan145_scan
-  rxscan145_loop:
-    ($P10) = rx141_cur."from"()
+    ne $I10, -1, rxscan146_done
+    goto rxscan146_scan
+  rxscan146_loop:
+    ($P10) = rx142_cur."from"()
     inc $P10
-    set rx141_pos, $P10
-    ge rx141_pos, rx141_eos, rxscan145_done
-  rxscan145_scan:
-    set_addr $I10, rxscan145_loop
-    rx141_cur."!mark_push"(0, rx141_pos, $I10)
-  rxscan145_done:
+    set rx142_pos, $P10
+    ge rx142_pos, rx142_eos, rxscan146_done
+  rxscan146_scan:
+    set_addr $I10, rxscan146_loop
+    rx142_cur."!mark_push"(0, rx142_pos, $I10)
+  rxscan146_done:
 .annotate 'line', 54
   # rx subcapture "sym"
-    set_addr $I10, rxcap_146_fail
-    rx141_cur."!mark_push"(0, rx141_pos, $I10)
+    set_addr $I10, rxcap_147_fail
+    rx142_cur."!mark_push"(0, rx142_pos, $I10)
   # rx literal  "+"
-    add $I11, rx141_pos, 1
-    gt $I11, rx141_eos, rx141_fail
-    sub $I11, rx141_pos, rx141_off
-    substr $S10, rx141_tgt, $I11, 1
-    ne $S10, "+", rx141_fail
-    add rx141_pos, 1
-    set_addr $I10, rxcap_146_fail
-    ($I12, $I11) = rx141_cur."!mark_peek"($I10)
-    rx141_cur."!cursor_pos"($I11)
-    ($P10) = rx141_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx141_pos, "")
-    rx141_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx142_pos, 1
+    gt $I11, rx142_eos, rx142_fail
+    sub $I11, rx142_pos, rx142_off
+    substr $S10, rx142_tgt, $I11, 1
+    ne $S10, "+", rx142_fail
+    add rx142_pos, 1
+    set_addr $I10, rxcap_147_fail
+    ($I12, $I11) = rx142_cur."!mark_peek"($I10)
+    rx142_cur."!cursor_pos"($I11)
+    ($P10) = rx142_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx142_pos, "")
+    rx142_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_146_done
-  rxcap_146_fail:
-    goto rx141_fail
-  rxcap_146_done:
+    goto rxcap_147_done
+  rxcap_147_fail:
+    goto rx142_fail
+  rxcap_147_done:
   # rx subrule "backmod" subtype=capture negate=
-    rx141_cur."!cursor_pos"(rx141_pos)
-    $P10 = rx141_cur."backmod"()
-    unless $P10, rx141_fail
-    rx141_cur."!mark_push"(0, -1, 0, $P10)
+    rx142_cur."!cursor_pos"(rx142_pos)
+    $P10 = rx142_cur."backmod"()
+    unless $P10, rx142_fail
+    rx142_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx141_pos = $P10."pos"()
+    rx142_pos = $P10."pos"()
   # rx pass
-    rx141_cur."!cursor_pass"(rx141_pos, "quantifier:sym<+>")
-    rx141_cur."!cursor_debug"("PASS  ", "quantifier:sym<+>", " at pos=", rx141_pos)
-    .return (rx141_cur)
-  rx141_fail:
+    rx142_cur."!cursor_pass"(rx142_pos, "quantifier:sym<+>")
+    rx142_cur."!cursor_debug"("PASS  ", "quantifier:sym<+>", " at pos=", rx142_pos)
+    .return (rx142_cur)
+  rx142_fail:
 .annotate 'line', 3
-    (rx141_rep, rx141_pos, $I10, $P10) = rx141_cur."!mark_fail"(0)
-    lt rx141_pos, -1, rx141_done
-    eq rx141_pos, -1, rx141_fail
+    (rx142_rep, rx142_pos, $I10, $P10) = rx142_cur."!mark_fail"(0)
+    lt rx142_pos, -1, rx142_done
+    eq rx142_pos, -1, rx142_fail
     jump $I10
-  rx141_done:
-    rx141_cur."!cursor_fail"()
-    rx141_cur."!cursor_debug"("FAIL  ", "quantifier:sym<+>")
-    .return (rx141_cur)
+  rx142_done:
+    rx142_cur."!cursor_fail"()
+    rx142_cur."!cursor_debug"("FAIL  ", "quantifier:sym<+>")
+    .return (rx142_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<+>"  :subid("39_1274022883.50471") :method
+.sub "!PREFIX__quantifier:sym<+>"  :subid("39_1275811476.7961") :method
 .annotate 'line', 3
-    $P143 = self."!PREFIX__!subrule"("backmod", "+")
-    new $P144, "ResizablePMCArray"
-    push $P144, $P143
-    .return ($P144)
+    $P144 = self."!PREFIX__!subrule"("backmod", "+")
+    new $P145, "ResizablePMCArray"
+    push $P145, $P144
+    .return ($P145)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<?>"  :subid("40_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "quantifier:sym<?>"  :subid("40_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx148_tgt
-    .local int rx148_pos
-    .local int rx148_off
-    .local int rx148_eos
-    .local int rx148_rep
-    .local pmc rx148_cur
-    (rx148_cur, rx148_pos, rx148_tgt) = self."!cursor_start"()
-    rx148_cur."!cursor_debug"("START ", "quantifier:sym<?>")
-    .lex unicode:"$\x{a2}", rx148_cur
+    .local string rx149_tgt
+    .local int rx149_pos
+    .local int rx149_off
+    .local int rx149_eos
+    .local int rx149_rep
+    .local pmc rx149_cur
+    (rx149_cur, rx149_pos, rx149_tgt) = self."!cursor_start"()
+    rx149_cur."!cursor_debug"("START ", "quantifier:sym<?>")
+    .lex unicode:"$\x{a2}", rx149_cur
     .local pmc match
     .lex "$/", match
-    length rx148_eos, rx148_tgt
-    set rx148_off, 0
-    lt rx148_pos, 2, rx148_start
-    sub rx148_off, rx148_pos, 1
-    substr rx148_tgt, rx148_tgt, rx148_off
-  rx148_start:
+    length rx149_eos, rx149_tgt
+    gt rx149_pos, rx149_eos, rx149_done
+    set rx149_off, 0
+    lt rx149_pos, 2, rx149_start
+    sub rx149_off, rx149_pos, 1
+    substr rx149_tgt, rx149_tgt, rx149_off
+  rx149_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan152_done
-    goto rxscan152_scan
-  rxscan152_loop:
-    ($P10) = rx148_cur."from"()
+    ne $I10, -1, rxscan153_done
+    goto rxscan153_scan
+  rxscan153_loop:
+    ($P10) = rx149_cur."from"()
     inc $P10
-    set rx148_pos, $P10
-    ge rx148_pos, rx148_eos, rxscan152_done
-  rxscan152_scan:
-    set_addr $I10, rxscan152_loop
-    rx148_cur."!mark_push"(0, rx148_pos, $I10)
-  rxscan152_done:
+    set rx149_pos, $P10
+    ge rx149_pos, rx149_eos, rxscan153_done
+  rxscan153_scan:
+    set_addr $I10, rxscan153_loop
+    rx149_cur."!mark_push"(0, rx149_pos, $I10)
+  rxscan153_done:
 .annotate 'line', 55
   # rx subcapture "sym"
-    set_addr $I10, rxcap_153_fail
-    rx148_cur."!mark_push"(0, rx148_pos, $I10)
+    set_addr $I10, rxcap_154_fail
+    rx149_cur."!mark_push"(0, rx149_pos, $I10)
   # rx literal  "?"
-    add $I11, rx148_pos, 1
-    gt $I11, rx148_eos, rx148_fail
-    sub $I11, rx148_pos, rx148_off
-    substr $S10, rx148_tgt, $I11, 1
-    ne $S10, "?", rx148_fail
-    add rx148_pos, 1
-    set_addr $I10, rxcap_153_fail
-    ($I12, $I11) = rx148_cur."!mark_peek"($I10)
-    rx148_cur."!cursor_pos"($I11)
-    ($P10) = rx148_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx148_pos, "")
-    rx148_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx149_pos, 1
+    gt $I11, rx149_eos, rx149_fail
+    sub $I11, rx149_pos, rx149_off
+    substr $S10, rx149_tgt, $I11, 1
+    ne $S10, "?", rx149_fail
+    add rx149_pos, 1
+    set_addr $I10, rxcap_154_fail
+    ($I12, $I11) = rx149_cur."!mark_peek"($I10)
+    rx149_cur."!cursor_pos"($I11)
+    ($P10) = rx149_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx149_pos, "")
+    rx149_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_153_done
-  rxcap_153_fail:
-    goto rx148_fail
-  rxcap_153_done:
+    goto rxcap_154_done
+  rxcap_154_fail:
+    goto rx149_fail
+  rxcap_154_done:
   # rx subrule "backmod" subtype=capture negate=
-    rx148_cur."!cursor_pos"(rx148_pos)
-    $P10 = rx148_cur."backmod"()
-    unless $P10, rx148_fail
-    rx148_cur."!mark_push"(0, -1, 0, $P10)
+    rx149_cur."!cursor_pos"(rx149_pos)
+    $P10 = rx149_cur."backmod"()
+    unless $P10, rx149_fail
+    rx149_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx148_pos = $P10."pos"()
+    rx149_pos = $P10."pos"()
   # rx pass
-    rx148_cur."!cursor_pass"(rx148_pos, "quantifier:sym<?>")
-    rx148_cur."!cursor_debug"("PASS  ", "quantifier:sym<?>", " at pos=", rx148_pos)
-    .return (rx148_cur)
-  rx148_fail:
+    rx149_cur."!cursor_pass"(rx149_pos, "quantifier:sym<?>")
+    rx149_cur."!cursor_debug"("PASS  ", "quantifier:sym<?>", " at pos=", rx149_pos)
+    .return (rx149_cur)
+  rx149_fail:
 .annotate 'line', 3
-    (rx148_rep, rx148_pos, $I10, $P10) = rx148_cur."!mark_fail"(0)
-    lt rx148_pos, -1, rx148_done
-    eq rx148_pos, -1, rx148_fail
+    (rx149_rep, rx149_pos, $I10, $P10) = rx149_cur."!mark_fail"(0)
+    lt rx149_pos, -1, rx149_done
+    eq rx149_pos, -1, rx149_fail
     jump $I10
-  rx148_done:
-    rx148_cur."!cursor_fail"()
-    rx148_cur."!cursor_debug"("FAIL  ", "quantifier:sym<?>")
-    .return (rx148_cur)
+  rx149_done:
+    rx149_cur."!cursor_fail"()
+    rx149_cur."!cursor_debug"("FAIL  ", "quantifier:sym<?>")
+    .return (rx149_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<?>"  :subid("41_1274022883.50471") :method
+.sub "!PREFIX__quantifier:sym<?>"  :subid("41_1275811476.7961") :method
 .annotate 'line', 3
-    $P150 = self."!PREFIX__!subrule"("backmod", "?")
-    new $P151, "ResizablePMCArray"
-    push $P151, $P150
-    .return ($P151)
+    $P151 = self."!PREFIX__!subrule"("backmod", "?")
+    new $P152, "ResizablePMCArray"
+    push $P152, $P151
+    .return ($P152)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<**>"  :subid("42_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "quantifier:sym<**>"  :subid("42_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx155_tgt
-    .local int rx155_pos
-    .local int rx155_off
-    .local int rx155_eos
-    .local int rx155_rep
-    .local pmc rx155_cur
-    (rx155_cur, rx155_pos, rx155_tgt) = self."!cursor_start"()
-    rx155_cur."!cursor_debug"("START ", "quantifier:sym<**>")
-    rx155_cur."!cursor_caparray"("max")
-    .lex unicode:"$\x{a2}", rx155_cur
+    .local string rx156_tgt
+    .local int rx156_pos
+    .local int rx156_off
+    .local int rx156_eos
+    .local int rx156_rep
+    .local pmc rx156_cur
+    (rx156_cur, rx156_pos, rx156_tgt) = self."!cursor_start"()
+    rx156_cur."!cursor_debug"("START ", "quantifier:sym<**>")
+    rx156_cur."!cursor_caparray"("max", "normspace")
+    .lex unicode:"$\x{a2}", rx156_cur
     .local pmc match
     .lex "$/", match
-    length rx155_eos, rx155_tgt
-    set rx155_off, 0
-    lt rx155_pos, 2, rx155_start
-    sub rx155_off, rx155_pos, 1
-    substr rx155_tgt, rx155_tgt, rx155_off
-  rx155_start:
+    length rx156_eos, rx156_tgt
+    gt rx156_pos, rx156_eos, rx156_done
+    set rx156_off, 0
+    lt rx156_pos, 2, rx156_start
+    sub rx156_off, rx156_pos, 1
+    substr rx156_tgt, rx156_tgt, rx156_off
+  rx156_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan158_done
-    goto rxscan158_scan
-  rxscan158_loop:
-    ($P10) = rx155_cur."from"()
+    ne $I10, -1, rxscan159_done
+    goto rxscan159_scan
+  rxscan159_loop:
+    ($P10) = rx156_cur."from"()
     inc $P10
-    set rx155_pos, $P10
-    ge rx155_pos, rx155_eos, rxscan158_done
-  rxscan158_scan:
-    set_addr $I10, rxscan158_loop
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-  rxscan158_done:
+    set rx156_pos, $P10
+    ge rx156_pos, rx156_eos, rxscan159_done
+  rxscan159_scan:
+    set_addr $I10, rxscan159_loop
+    rx156_cur."!mark_push"(0, rx156_pos, $I10)
+  rxscan159_done:
 .annotate 'line', 57
   # rx subcapture "sym"
-    set_addr $I10, rxcap_159_fail
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
+    set_addr $I10, rxcap_160_fail
+    rx156_cur."!mark_push"(0, rx156_pos, $I10)
   # rx literal  "**"
-    add $I11, rx155_pos, 2
-    gt $I11, rx155_eos, rx155_fail
-    sub $I11, rx155_pos, rx155_off
-    substr $S10, rx155_tgt, $I11, 2
-    ne $S10, "**", rx155_fail
-    add rx155_pos, 2
-    set_addr $I10, rxcap_159_fail
-    ($I12, $I11) = rx155_cur."!mark_peek"($I10)
-    rx155_cur."!cursor_pos"($I11)
-    ($P10) = rx155_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx155_pos, "")
-    rx155_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx156_pos, 2
+    gt $I11, rx156_eos, rx156_fail
+    sub $I11, rx156_pos, rx156_off
+    substr $S10, rx156_tgt, $I11, 2
+    ne $S10, "**", rx156_fail
+    add rx156_pos, 2
+    set_addr $I10, rxcap_160_fail
+    ($I12, $I11) = rx156_cur."!mark_peek"($I10)
+    rx156_cur."!cursor_pos"($I11)
+    ($P10) = rx156_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx156_pos, "")
+    rx156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_159_done
-  rxcap_159_fail:
-    goto rx155_fail
-  rxcap_159_done:
-  # rx charclass_q s r 0..-1
-    sub $I10, rx155_pos, rx155_off
-    find_not_cclass $I11, 32, rx155_tgt, $I10, rx155_eos
-    add rx155_pos, rx155_off, $I11
+    goto rxcap_160_done
+  rxcap_160_fail:
+    goto rx156_fail
+  rxcap_160_done:
+  # rx rxquantr161 ** 0..1
+    set_addr $I162, rxquantr161_done
+    rx156_cur."!mark_push"(0, rx156_pos, $I162)
+  rxquantr161_loop:
+  # rx subrule "normspace" subtype=capture negate=
+    rx156_cur."!cursor_pos"(rx156_pos)
+    $P10 = rx156_cur."normspace"()
+    unless $P10, rx156_fail
+    rx156_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("normspace")
+    rx156_pos = $P10."pos"()
+    (rx156_rep) = rx156_cur."!mark_commit"($I162)
+  rxquantr161_done:
   # rx subrule "backmod" subtype=capture negate=
-    rx155_cur."!cursor_pos"(rx155_pos)
-    $P10 = rx155_cur."backmod"()
-    unless $P10, rx155_fail
-    rx155_cur."!mark_push"(0, -1, 0, $P10)
+    rx156_cur."!cursor_pos"(rx156_pos)
+    $P10 = rx156_cur."backmod"()
+    unless $P10, rx156_fail
+    rx156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx155_pos = $P10."pos"()
-  # rx charclass_q s r 0..-1
-    sub $I10, rx155_pos, rx155_off
-    find_not_cclass $I11, 32, rx155_tgt, $I10, rx155_eos
-    add rx155_pos, rx155_off, $I11
-  alt160_0:
+    rx156_pos = $P10."pos"()
+  # rx rxquantr163 ** 0..1
+    set_addr $I164, rxquantr163_done
+    rx156_cur."!mark_push"(0, rx156_pos, $I164)
+  rxquantr163_loop:
+  # rx subrule "normspace" subtype=capture negate=
+    rx156_cur."!cursor_pos"(rx156_pos)
+    $P10 = rx156_cur."normspace"()
+    unless $P10, rx156_fail
+    rx156_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("normspace")
+    rx156_pos = $P10."pos"()
+    (rx156_rep) = rx156_cur."!mark_commit"($I164)
+  rxquantr163_done:
+  alt165_0:
 .annotate 'line', 58
-    set_addr $I10, alt160_1
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
+    set_addr $I10, alt165_1
+    rx156_cur."!mark_push"(0, rx156_pos, $I10)
 .annotate 'line', 59
   # rx subcapture "min"
-    set_addr $I10, rxcap_161_fail
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
+    set_addr $I10, rxcap_166_fail
+    rx156_cur."!mark_push"(0, rx156_pos, $I10)
   # rx charclass_q d r 1..-1
-    sub $I10, rx155_pos, rx155_off
-    find_not_cclass $I11, 8, rx155_tgt, $I10, rx155_eos
+    sub $I10, rx156_pos, rx156_off
+    find_not_cclass $I11, 8, rx156_tgt, $I10, rx156_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx155_fail
-    add rx155_pos, rx155_off, $I11
-    set_addr $I10, rxcap_161_fail
-    ($I12, $I11) = rx155_cur."!mark_peek"($I10)
-    rx155_cur."!cursor_pos"($I11)
-    ($P10) = rx155_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx155_pos, "")
-    rx155_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx156_fail
+    add rx156_pos, rx156_off, $I11
+    set_addr $I10, rxcap_166_fail
+    ($I12, $I11) = rx156_cur."!mark_peek"($I10)
+    rx156_cur."!cursor_pos"($I11)
+    ($P10) = rx156_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx156_pos, "")
+    rx156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("min")
-    goto rxcap_161_done
-  rxcap_161_fail:
-    goto rx155_fail
-  rxcap_161_done:
+    goto rxcap_166_done
+  rxcap_166_fail:
+    goto rx156_fail
+  rxcap_166_done:
 .annotate 'line', 66
-  # rx rxquantr162 ** 0..1
-    set_addr $I165, rxquantr162_done
-    rx155_cur."!mark_push"(0, rx155_pos, $I165)
-  rxquantr162_loop:
+  # rx rxquantr167 ** 0..1
+    set_addr $I170, rxquantr167_done
+    rx156_cur."!mark_push"(0, rx156_pos, $I170)
+  rxquantr167_loop:
 .annotate 'line', 60
   # rx literal  ".."
-    add $I11, rx155_pos, 2
-    gt $I11, rx155_eos, rx155_fail
-    sub $I11, rx155_pos, rx155_off
-    substr $S10, rx155_tgt, $I11, 2
-    ne $S10, "..", rx155_fail
-    add rx155_pos, 2
+    add $I11, rx156_pos, 2
+    gt $I11, rx156_eos, rx156_fail
+    sub $I11, rx156_pos, rx156_off
+    substr $S10, rx156_tgt, $I11, 2
+    ne $S10, "..", rx156_fail
+    add rx156_pos, 2
 .annotate 'line', 61
   # rx subcapture "max"
-    set_addr $I10, rxcap_164_fail
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-  alt163_0:
-    set_addr $I10, alt163_1
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
+    set_addr $I10, rxcap_169_fail
+    rx156_cur."!mark_push"(0, rx156_pos, $I10)
+  alt168_0:
+    set_addr $I10, alt168_1
+    rx156_cur."!mark_push"(0, rx156_pos, $I10)
 .annotate 'line', 62
   # rx charclass_q d r 1..-1
-    sub $I10, rx155_pos, rx155_off
-    find_not_cclass $I11, 8, rx155_tgt, $I10, rx155_eos
+    sub $I10, rx156_pos, rx156_off
+    find_not_cclass $I11, 8, rx156_tgt, $I10, rx156_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx155_fail
-    add rx155_pos, rx155_off, $I11
-    goto alt163_end
-  alt163_1:
-    set_addr $I10, alt163_2
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
+    lt $I11, $I12, rx156_fail
+    add rx156_pos, rx156_off, $I11
+    goto alt168_end
+  alt168_1:
+    set_addr $I10, alt168_2
+    rx156_cur."!mark_push"(0, rx156_pos, $I10)
 .annotate 'line', 63
   # rx literal  "*"
-    add $I11, rx155_pos, 1
-    gt $I11, rx155_eos, rx155_fail
-    sub $I11, rx155_pos, rx155_off
-    substr $S10, rx155_tgt, $I11, 1
-    ne $S10, "*", rx155_fail
-    add rx155_pos, 1
-    goto alt163_end
-  alt163_2:
+    add $I11, rx156_pos, 1
+    gt $I11, rx156_eos, rx156_fail
+    sub $I11, rx156_pos, rx156_off
+    substr $S10, rx156_tgt, $I11, 1
+    ne $S10, "*", rx156_fail
+    add rx156_pos, 1
+    goto alt168_end
+  alt168_2:
 .annotate 'line', 64
   # rx subrule "panic" subtype=method negate=
-    rx155_cur."!cursor_pos"(rx155_pos)
-    $P10 = rx155_cur."panic"("Only integers or '*' allowed as range quantifier endpoint")
-    unless $P10, rx155_fail
-    rx155_pos = $P10."pos"()
-  alt163_end:
+    rx156_cur."!cursor_pos"(rx156_pos)
+    $P10 = rx156_cur."panic"("Only integers or '*' allowed as range quantifier endpoint")
+    unless $P10, rx156_fail
+    rx156_pos = $P10."pos"()
+  alt168_end:
 .annotate 'line', 61
-    set_addr $I10, rxcap_164_fail
-    ($I12, $I11) = rx155_cur."!mark_peek"($I10)
-    rx155_cur."!cursor_pos"($I11)
-    ($P10) = rx155_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx155_pos, "")
-    rx155_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_169_fail
+    ($I12, $I11) = rx156_cur."!mark_peek"($I10)
+    rx156_cur."!cursor_pos"($I11)
+    ($P10) = rx156_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx156_pos, "")
+    rx156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("max")
-    goto rxcap_164_done
-  rxcap_164_fail:
-    goto rx155_fail
-  rxcap_164_done:
+    goto rxcap_169_done
+  rxcap_169_fail:
+    goto rx156_fail
+  rxcap_169_done:
 .annotate 'line', 66
-    (rx155_rep) = rx155_cur."!mark_commit"($I165)
-  rxquantr162_done:
+    (rx156_rep) = rx156_cur."!mark_commit"($I170)
+  rxquantr167_done:
 .annotate 'line', 59
-    goto alt160_end
-  alt160_1:
+    goto alt165_end
+  alt165_1:
 .annotate 'line', 67
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx155_cur."!cursor_pos"(rx155_pos)
-    $P10 = rx155_cur."quantified_atom"()
-    unless $P10, rx155_fail
-    rx155_cur."!mark_push"(0, -1, 0, $P10)
+    rx156_cur."!cursor_pos"(rx156_pos)
+    $P10 = rx156_cur."quantified_atom"()
+    unless $P10, rx156_fail
+    rx156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quantified_atom")
-    rx155_pos = $P10."pos"()
-  alt160_end:
+    rx156_pos = $P10."pos"()
+  alt165_end:
 .annotate 'line', 56
   # rx pass
-    rx155_cur."!cursor_pass"(rx155_pos, "quantifier:sym<**>")
-    rx155_cur."!cursor_debug"("PASS  ", "quantifier:sym<**>", " at pos=", rx155_pos)
-    .return (rx155_cur)
-  rx155_fail:
+    rx156_cur."!cursor_pass"(rx156_pos, "quantifier:sym<**>")
+    rx156_cur."!cursor_debug"("PASS  ", "quantifier:sym<**>", " at pos=", rx156_pos)
+    .return (rx156_cur)
+  rx156_fail:
 .annotate 'line', 3
-    (rx155_rep, rx155_pos, $I10, $P10) = rx155_cur."!mark_fail"(0)
-    lt rx155_pos, -1, rx155_done
-    eq rx155_pos, -1, rx155_fail
+    (rx156_rep, rx156_pos, $I10, $P10) = rx156_cur."!mark_fail"(0)
+    lt rx156_pos, -1, rx156_done
+    eq rx156_pos, -1, rx156_fail
     jump $I10
-  rx155_done:
-    rx155_cur."!cursor_fail"()
-    rx155_cur."!cursor_debug"("FAIL  ", "quantifier:sym<**>")
-    .return (rx155_cur)
+  rx156_done:
+    rx156_cur."!cursor_fail"()
+    rx156_cur."!cursor_debug"("FAIL  ", "quantifier:sym<**>")
+    .return (rx156_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<**>"  :subid("43_1274022883.50471") :method
+.sub "!PREFIX__quantifier:sym<**>"  :subid("43_1275811476.7961") :method
 .annotate 'line', 3
-    new $P157, "ResizablePMCArray"
-    push $P157, "**"
-    .return ($P157)
+    new $P158, "ResizablePMCArray"
+    push $P158, "**"
+    .return ($P158)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backmod"  :subid("44_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backmod"  :subid("44_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .const 'Sub' $P175 = "46_1274022883.50471" 
-    capture_lex $P175
-    .local string rx167_tgt
-    .local int rx167_pos
-    .local int rx167_off
-    .local int rx167_eos
-    .local int rx167_rep
-    .local pmc rx167_cur
-    (rx167_cur, rx167_pos, rx167_tgt) = self."!cursor_start"()
-    rx167_cur."!cursor_debug"("START ", "backmod")
-    .lex unicode:"$\x{a2}", rx167_cur
+    .const 'Sub' $P180 = "46_1275811476.7961" 
+    capture_lex $P180
+    .local string rx172_tgt
+    .local int rx172_pos
+    .local int rx172_off
+    .local int rx172_eos
+    .local int rx172_rep
+    .local pmc rx172_cur
+    (rx172_cur, rx172_pos, rx172_tgt) = self."!cursor_start"()
+    rx172_cur."!cursor_debug"("START ", "backmod")
+    .lex unicode:"$\x{a2}", rx172_cur
     .local pmc match
     .lex "$/", match
-    length rx167_eos, rx167_tgt
-    set rx167_off, 0
-    lt rx167_pos, 2, rx167_start
-    sub rx167_off, rx167_pos, 1
-    substr rx167_tgt, rx167_tgt, rx167_off
-  rx167_start:
+    length rx172_eos, rx172_tgt
+    gt rx172_pos, rx172_eos, rx172_done
+    set rx172_off, 0
+    lt rx172_pos, 2, rx172_start
+    sub rx172_off, rx172_pos, 1
+    substr rx172_tgt, rx172_tgt, rx172_off
+  rx172_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan170_done
-    goto rxscan170_scan
-  rxscan170_loop:
-    ($P10) = rx167_cur."from"()
+    ne $I10, -1, rxscan175_done
+    goto rxscan175_scan
+  rxscan175_loop:
+    ($P10) = rx172_cur."from"()
     inc $P10
-    set rx167_pos, $P10
-    ge rx167_pos, rx167_eos, rxscan170_done
-  rxscan170_scan:
-    set_addr $I10, rxscan170_loop
-    rx167_cur."!mark_push"(0, rx167_pos, $I10)
-  rxscan170_done:
+    set rx172_pos, $P10
+    ge rx172_pos, rx172_eos, rxscan175_done
+  rxscan175_scan:
+    set_addr $I10, rxscan175_loop
+    rx172_cur."!mark_push"(0, rx172_pos, $I10)
+  rxscan175_done:
 .annotate 'line', 71
-  # rx rxquantr171 ** 0..1
-    set_addr $I172, rxquantr171_done
-    rx167_cur."!mark_push"(0, rx167_pos, $I172)
-  rxquantr171_loop:
+  # rx rxquantr176 ** 0..1
+    set_addr $I177, rxquantr176_done
+    rx172_cur."!mark_push"(0, rx172_pos, $I177)
+  rxquantr176_loop:
   # rx literal  ":"
-    add $I11, rx167_pos, 1
-    gt $I11, rx167_eos, rx167_fail
-    sub $I11, rx167_pos, rx167_off
-    substr $S10, rx167_tgt, $I11, 1
-    ne $S10, ":", rx167_fail
-    add rx167_pos, 1
-    (rx167_rep) = rx167_cur."!mark_commit"($I172)
-  rxquantr171_done:
-  alt173_0:
-    set_addr $I10, alt173_1
-    rx167_cur."!mark_push"(0, rx167_pos, $I10)
+    add $I11, rx172_pos, 1
+    gt $I11, rx172_eos, rx172_fail
+    sub $I11, rx172_pos, rx172_off
+    substr $S10, rx172_tgt, $I11, 1
+    ne $S10, ":", rx172_fail
+    add rx172_pos, 1
+    (rx172_rep) = rx172_cur."!mark_commit"($I177)
+  rxquantr176_done:
+  alt178_0:
+    set_addr $I10, alt178_1
+    rx172_cur."!mark_push"(0, rx172_pos, $I10)
   # rx literal  "?"
-    add $I11, rx167_pos, 1
-    gt $I11, rx167_eos, rx167_fail
-    sub $I11, rx167_pos, rx167_off
-    substr $S10, rx167_tgt, $I11, 1
-    ne $S10, "?", rx167_fail
-    add rx167_pos, 1
-    goto alt173_end
-  alt173_1:
-    set_addr $I10, alt173_2
-    rx167_cur."!mark_push"(0, rx167_pos, $I10)
+    add $I11, rx172_pos, 1
+    gt $I11, rx172_eos, rx172_fail
+    sub $I11, rx172_pos, rx172_off
+    substr $S10, rx172_tgt, $I11, 1
+    ne $S10, "?", rx172_fail
+    add rx172_pos, 1
+    goto alt178_end
+  alt178_1:
+    set_addr $I10, alt178_2
+    rx172_cur."!mark_push"(0, rx172_pos, $I10)
   # rx literal  "!"
-    add $I11, rx167_pos, 1
-    gt $I11, rx167_eos, rx167_fail
-    sub $I11, rx167_pos, rx167_off
-    substr $S10, rx167_tgt, $I11, 1
-    ne $S10, "!", rx167_fail
-    add rx167_pos, 1
-    goto alt173_end
-  alt173_2:
+    add $I11, rx172_pos, 1
+    gt $I11, rx172_eos, rx172_fail
+    sub $I11, rx172_pos, rx172_off
+    substr $S10, rx172_tgt, $I11, 1
+    ne $S10, "!", rx172_fail
+    add rx172_pos, 1
+    goto alt178_end
+  alt178_2:
   # rx subrule "before" subtype=zerowidth negate=1
-    rx167_cur."!cursor_pos"(rx167_pos)
-    .const 'Sub' $P175 = "46_1274022883.50471" 
-    capture_lex $P175
-    $P10 = rx167_cur."before"($P175)
-    if $P10, rx167_fail
-  alt173_end:
+    rx172_cur."!cursor_pos"(rx172_pos)
+    .const 'Sub' $P180 = "46_1275811476.7961" 
+    capture_lex $P180
+    $P10 = rx172_cur."before"($P180)
+    if $P10, rx172_fail
+  alt178_end:
   # rx pass
-    rx167_cur."!cursor_pass"(rx167_pos, "backmod")
-    rx167_cur."!cursor_debug"("PASS  ", "backmod", " at pos=", rx167_pos)
-    .return (rx167_cur)
-  rx167_fail:
+    rx172_cur."!cursor_pass"(rx172_pos, "backmod")
+    rx172_cur."!cursor_debug"("PASS  ", "backmod", " at pos=", rx172_pos)
+    .return (rx172_cur)
+  rx172_fail:
 .annotate 'line', 3
-    (rx167_rep, rx167_pos, $I10, $P10) = rx167_cur."!mark_fail"(0)
-    lt rx167_pos, -1, rx167_done
-    eq rx167_pos, -1, rx167_fail
+    (rx172_rep, rx172_pos, $I10, $P10) = rx172_cur."!mark_fail"(0)
+    lt rx172_pos, -1, rx172_done
+    eq rx172_pos, -1, rx172_fail
     jump $I10
-  rx167_done:
-    rx167_cur."!cursor_fail"()
-    rx167_cur."!cursor_debug"("FAIL  ", "backmod")
-    .return (rx167_cur)
+  rx172_done:
+    rx172_cur."!cursor_fail"()
+    rx172_cur."!cursor_debug"("FAIL  ", "backmod")
+    .return (rx172_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backmod"  :subid("45_1274022883.50471") :method
+.sub "!PREFIX__backmod"  :subid("45_1275811476.7961") :method
 .annotate 'line', 3
-    new $P169, "ResizablePMCArray"
-    push $P169, ""
-    .return ($P169)
+    new $P174, "ResizablePMCArray"
+    push $P174, ""
+    .return ($P174)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block174"  :anon :subid("46_1274022883.50471") :method :outer("44_1274022883.50471")
+.sub "_block179"  :anon :subid("46_1275811476.7961") :method :outer("44_1275811476.7961")
 .annotate 'line', 71
-    .local string rx176_tgt
-    .local int rx176_pos
-    .local int rx176_off
-    .local int rx176_eos
-    .local int rx176_rep
-    .local pmc rx176_cur
-    (rx176_cur, rx176_pos, rx176_tgt) = self."!cursor_start"()
-    rx176_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx176_cur
-    .local pmc match
-    .lex "$/", match
-    length rx176_eos, rx176_tgt
-    set rx176_off, 0
-    lt rx176_pos, 2, rx176_start
-    sub rx176_off, rx176_pos, 1
-    substr rx176_tgt, rx176_tgt, rx176_off
-  rx176_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan177_done
-    goto rxscan177_scan
-  rxscan177_loop:
-    ($P10) = rx176_cur."from"()
-    inc $P10
-    set rx176_pos, $P10
-    ge rx176_pos, rx176_eos, rxscan177_done
-  rxscan177_scan:
-    set_addr $I10, rxscan177_loop
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-  rxscan177_done:
+    .local string rx181_tgt
+    .local int rx181_pos
+    .local int rx181_off
+    .local int rx181_eos
+    .local int rx181_rep
+    .local pmc rx181_cur
+    (rx181_cur, rx181_pos, rx181_tgt) = self."!cursor_start"()
+    rx181_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx181_cur
+    .local pmc match
+    .lex "$/", match
+    length rx181_eos, rx181_tgt
+    gt rx181_pos, rx181_eos, rx181_done
+    set rx181_off, 0
+    lt rx181_pos, 2, rx181_start
+    sub rx181_off, rx181_pos, 1
+    substr rx181_tgt, rx181_tgt, rx181_off
+  rx181_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan182_done
+    goto rxscan182_scan
+  rxscan182_loop:
+    ($P10) = rx181_cur."from"()
+    inc $P10
+    set rx181_pos, $P10
+    ge rx181_pos, rx181_eos, rxscan182_done
+  rxscan182_scan:
+    set_addr $I10, rxscan182_loop
+    rx181_cur."!mark_push"(0, rx181_pos, $I10)
+  rxscan182_done:
   # rx literal  ":"
-    add $I11, rx176_pos, 1
-    gt $I11, rx176_eos, rx176_fail
-    sub $I11, rx176_pos, rx176_off
-    substr $S10, rx176_tgt, $I11, 1
-    ne $S10, ":", rx176_fail
-    add rx176_pos, 1
+    add $I11, rx181_pos, 1
+    gt $I11, rx181_eos, rx181_fail
+    sub $I11, rx181_pos, rx181_off
+    substr $S10, rx181_tgt, $I11, 1
+    ne $S10, ":", rx181_fail
+    add rx181_pos, 1
   # rx pass
-    rx176_cur."!cursor_pass"(rx176_pos, "")
-    rx176_cur."!cursor_debug"("PASS  ", "", " at pos=", rx176_pos)
-    .return (rx176_cur)
-  rx176_fail:
-    (rx176_rep, rx176_pos, $I10, $P10) = rx176_cur."!mark_fail"(0)
-    lt rx176_pos, -1, rx176_done
-    eq rx176_pos, -1, rx176_fail
+    rx181_cur."!cursor_pass"(rx181_pos, "")
+    rx181_cur."!cursor_debug"("PASS  ", "", " at pos=", rx181_pos)
+    .return (rx181_cur)
+  rx181_fail:
+    (rx181_rep, rx181_pos, $I10, $P10) = rx181_cur."!mark_fail"(0)
+    lt rx181_pos, -1, rx181_done
+    eq rx181_pos, -1, rx181_fail
     jump $I10
-  rx176_done:
-    rx176_cur."!cursor_fail"()
-    rx176_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx176_cur)
+  rx181_done:
+    rx181_cur."!cursor_fail"()
+    rx181_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx181_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar"  :subid("47_1274022883.50471") :method
+.sub "metachar"  :subid("47_1275811476.7961") :method
 .annotate 'line', 73
-    $P179 = self."!protoregex"("metachar")
-    .return ($P179)
+    $P184 = self."!protoregex"("metachar")
+    .return ($P184)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar"  :subid("48_1274022883.50471") :method
+.sub "!PREFIX__metachar"  :subid("48_1275811476.7961") :method
 .annotate 'line', 73
-    $P181 = self."!PREFIX__!protoregex"("metachar")
-    .return ($P181)
+    $P186 = self."!PREFIX__!protoregex"("metachar")
+    .return ($P186)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<ws>"  :subid("49_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<ws>"  :subid("49_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx183_tgt
-    .local int rx183_pos
-    .local int rx183_off
-    .local int rx183_eos
-    .local int rx183_rep
-    .local pmc rx183_cur
-    (rx183_cur, rx183_pos, rx183_tgt) = self."!cursor_start"()
-    rx183_cur."!cursor_debug"("START ", "metachar:sym<ws>")
-    .lex unicode:"$\x{a2}", rx183_cur
-    .local pmc match
-    .lex "$/", match
-    length rx183_eos, rx183_tgt
-    set rx183_off, 0
-    lt rx183_pos, 2, rx183_start
-    sub rx183_off, rx183_pos, 1
-    substr rx183_tgt, rx183_tgt, rx183_off
-  rx183_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan187_done
-    goto rxscan187_scan
-  rxscan187_loop:
-    ($P10) = rx183_cur."from"()
-    inc $P10
-    set rx183_pos, $P10
-    ge rx183_pos, rx183_eos, rxscan187_done
-  rxscan187_scan:
-    set_addr $I10, rxscan187_loop
-    rx183_cur."!mark_push"(0, rx183_pos, $I10)
-  rxscan187_done:
+    .local string rx188_tgt
+    .local int rx188_pos
+    .local int rx188_off
+    .local int rx188_eos
+    .local int rx188_rep
+    .local pmc rx188_cur
+    (rx188_cur, rx188_pos, rx188_tgt) = self."!cursor_start"()
+    rx188_cur."!cursor_debug"("START ", "metachar:sym<ws>")
+    .lex unicode:"$\x{a2}", rx188_cur
+    .local pmc match
+    .lex "$/", match
+    length rx188_eos, rx188_tgt
+    gt rx188_pos, rx188_eos, rx188_done
+    set rx188_off, 0
+    lt rx188_pos, 2, rx188_start
+    sub rx188_off, rx188_pos, 1
+    substr rx188_tgt, rx188_tgt, rx188_off
+  rx188_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan192_done
+    goto rxscan192_scan
+  rxscan192_loop:
+    ($P10) = rx188_cur."from"()
+    inc $P10
+    set rx188_pos, $P10
+    ge rx188_pos, rx188_eos, rxscan192_done
+  rxscan192_scan:
+    set_addr $I10, rxscan192_loop
+    rx188_cur."!mark_push"(0, rx188_pos, $I10)
+  rxscan192_done:
 .annotate 'line', 74
   # rx subrule "normspace" subtype=method negate=
-    rx183_cur."!cursor_pos"(rx183_pos)
-    $P10 = rx183_cur."normspace"()
-    unless $P10, rx183_fail
-    rx183_pos = $P10."pos"()
-  # rx pass
-    rx183_cur."!cursor_pass"(rx183_pos, "metachar:sym<ws>")
-    rx183_cur."!cursor_debug"("PASS  ", "metachar:sym<ws>", " at pos=", rx183_pos)
-    .return (rx183_cur)
-  rx183_fail:
-.annotate 'line', 3
-    (rx183_rep, rx183_pos, $I10, $P10) = rx183_cur."!mark_fail"(0)
-    lt rx183_pos, -1, rx183_done
-    eq rx183_pos, -1, rx183_fail
-    jump $I10
-  rx183_done:
-    rx183_cur."!cursor_fail"()
-    rx183_cur."!cursor_debug"("FAIL  ", "metachar:sym<ws>")
-    .return (rx183_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<ws>"  :subid("50_1274022883.50471") :method
-.annotate 'line', 3
-    $P185 = self."!PREFIX__!subrule"("", "")
-    new $P186, "ResizablePMCArray"
-    push $P186, $P185
-    .return ($P186)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<[ ]>"  :subid("51_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .local string rx189_tgt
-    .local int rx189_pos
-    .local int rx189_off
-    .local int rx189_eos
-    .local int rx189_rep
-    .local pmc rx189_cur
-    (rx189_cur, rx189_pos, rx189_tgt) = self."!cursor_start"()
-    rx189_cur."!cursor_debug"("START ", "metachar:sym<[ ]>")
-    .lex unicode:"$\x{a2}", rx189_cur
-    .local pmc match
-    .lex "$/", match
-    length rx189_eos, rx189_tgt
-    set rx189_off, 0
-    lt rx189_pos, 2, rx189_start
-    sub rx189_off, rx189_pos, 1
-    substr rx189_tgt, rx189_tgt, rx189_off
-  rx189_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan193_done
-    goto rxscan193_scan
-  rxscan193_loop:
-    ($P10) = rx189_cur."from"()
-    inc $P10
-    set rx189_pos, $P10
-    ge rx189_pos, rx189_eos, rxscan193_done
-  rxscan193_scan:
-    set_addr $I10, rxscan193_loop
-    rx189_cur."!mark_push"(0, rx189_pos, $I10)
-  rxscan193_done:
-.annotate 'line', 75
-  # rx literal  "["
-    add $I11, rx189_pos, 1
-    gt $I11, rx189_eos, rx189_fail
-    sub $I11, rx189_pos, rx189_off
-    substr $S10, rx189_tgt, $I11, 1
-    ne $S10, "[", rx189_fail
-    add rx189_pos, 1
-  # rx subrule "nibbler" subtype=capture negate=
-    rx189_cur."!cursor_pos"(rx189_pos)
-    $P10 = rx189_cur."nibbler"()
-    unless $P10, rx189_fail
-    rx189_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("nibbler")
-    rx189_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx189_pos, 1
-    gt $I11, rx189_eos, rx189_fail
-    sub $I11, rx189_pos, rx189_off
-    substr $S10, rx189_tgt, $I11, 1
-    ne $S10, "]", rx189_fail
-    add rx189_pos, 1
+    rx188_cur."!cursor_pos"(rx188_pos)
+    $P10 = rx188_cur."normspace"()
+    unless $P10, rx188_fail
+    rx188_pos = $P10."pos"()
   # rx pass
-    rx189_cur."!cursor_pass"(rx189_pos, "metachar:sym<[ ]>")
-    rx189_cur."!cursor_debug"("PASS  ", "metachar:sym<[ ]>", " at pos=", rx189_pos)
-    .return (rx189_cur)
-  rx189_fail:
+    rx188_cur."!cursor_pass"(rx188_pos, "metachar:sym<ws>")
+    rx188_cur."!cursor_debug"("PASS  ", "metachar:sym<ws>", " at pos=", rx188_pos)
+    .return (rx188_cur)
+  rx188_fail:
 .annotate 'line', 3
-    (rx189_rep, rx189_pos, $I10, $P10) = rx189_cur."!mark_fail"(0)
-    lt rx189_pos, -1, rx189_done
-    eq rx189_pos, -1, rx189_fail
+    (rx188_rep, rx188_pos, $I10, $P10) = rx188_cur."!mark_fail"(0)
+    lt rx188_pos, -1, rx188_done
+    eq rx188_pos, -1, rx188_fail
     jump $I10
-  rx189_done:
-    rx189_cur."!cursor_fail"()
-    rx189_cur."!cursor_debug"("FAIL  ", "metachar:sym<[ ]>")
-    .return (rx189_cur)
+  rx188_done:
+    rx188_cur."!cursor_fail"()
+    rx188_cur."!cursor_debug"("FAIL  ", "metachar:sym<ws>")
+    .return (rx188_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<[ ]>"  :subid("52_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<ws>"  :subid("50_1275811476.7961") :method
 .annotate 'line', 3
-    $P191 = self."!PREFIX__!subrule"("nibbler", "[")
-    new $P192, "ResizablePMCArray"
-    push $P192, $P191
-    .return ($P192)
+    $P190 = self."!PREFIX__!subrule"("normspace", "")
+    new $P191, "ResizablePMCArray"
+    push $P191, $P190
+    .return ($P191)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<( )>"  :subid("53_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<[ ]>"  :subid("51_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx195_tgt
-    .local int rx195_pos
-    .local int rx195_off
-    .local int rx195_eos
-    .local int rx195_rep
-    .local pmc rx195_cur
-    (rx195_cur, rx195_pos, rx195_tgt) = self."!cursor_start"()
-    rx195_cur."!cursor_debug"("START ", "metachar:sym<( )>")
-    .lex unicode:"$\x{a2}", rx195_cur
+    .local string rx194_tgt
+    .local int rx194_pos
+    .local int rx194_off
+    .local int rx194_eos
+    .local int rx194_rep
+    .local pmc rx194_cur
+    (rx194_cur, rx194_pos, rx194_tgt) = self."!cursor_start"()
+    rx194_cur."!cursor_debug"("START ", "metachar:sym<[ ]>")
+    .lex unicode:"$\x{a2}", rx194_cur
     .local pmc match
     .lex "$/", match
-    length rx195_eos, rx195_tgt
-    set rx195_off, 0
-    lt rx195_pos, 2, rx195_start
-    sub rx195_off, rx195_pos, 1
-    substr rx195_tgt, rx195_tgt, rx195_off
-  rx195_start:
+    length rx194_eos, rx194_tgt
+    gt rx194_pos, rx194_eos, rx194_done
+    set rx194_off, 0
+    lt rx194_pos, 2, rx194_start
+    sub rx194_off, rx194_pos, 1
+    substr rx194_tgt, rx194_tgt, rx194_off
+  rx194_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan199_done
-    goto rxscan199_scan
-  rxscan199_loop:
-    ($P10) = rx195_cur."from"()
+    ne $I10, -1, rxscan198_done
+    goto rxscan198_scan
+  rxscan198_loop:
+    ($P10) = rx194_cur."from"()
     inc $P10
-    set rx195_pos, $P10
-    ge rx195_pos, rx195_eos, rxscan199_done
-  rxscan199_scan:
-    set_addr $I10, rxscan199_loop
-    rx195_cur."!mark_push"(0, rx195_pos, $I10)
-  rxscan199_done:
-.annotate 'line', 76
-  # rx literal  "("
-    add $I11, rx195_pos, 1
-    gt $I11, rx195_eos, rx195_fail
-    sub $I11, rx195_pos, rx195_off
-    substr $S10, rx195_tgt, $I11, 1
-    ne $S10, "(", rx195_fail
-    add rx195_pos, 1
+    set rx194_pos, $P10
+    ge rx194_pos, rx194_eos, rxscan198_done
+  rxscan198_scan:
+    set_addr $I10, rxscan198_loop
+    rx194_cur."!mark_push"(0, rx194_pos, $I10)
+  rxscan198_done:
+.annotate 'line', 75
+  # rx literal  "["
+    add $I11, rx194_pos, 1
+    gt $I11, rx194_eos, rx194_fail
+    sub $I11, rx194_pos, rx194_off
+    substr $S10, rx194_tgt, $I11, 1
+    ne $S10, "[", rx194_fail
+    add rx194_pos, 1
   # rx subrule "nibbler" subtype=capture negate=
-    rx195_cur."!cursor_pos"(rx195_pos)
-    $P10 = rx195_cur."nibbler"()
-    unless $P10, rx195_fail
-    rx195_cur."!mark_push"(0, -1, 0, $P10)
+    rx194_cur."!cursor_pos"(rx194_pos)
+    $P10 = rx194_cur."nibbler"()
+    unless $P10, rx194_fail
+    rx194_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("nibbler")
-    rx195_pos = $P10."pos"()
-  # rx literal  ")"
-    add $I11, rx195_pos, 1
-    gt $I11, rx195_eos, rx195_fail
-    sub $I11, rx195_pos, rx195_off
-    substr $S10, rx195_tgt, $I11, 1
-    ne $S10, ")", rx195_fail
-    add rx195_pos, 1
+    rx194_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx194_pos, 1
+    gt $I11, rx194_eos, rx194_fail
+    sub $I11, rx194_pos, rx194_off
+    substr $S10, rx194_tgt, $I11, 1
+    ne $S10, "]", rx194_fail
+    add rx194_pos, 1
   # rx pass
-    rx195_cur."!cursor_pass"(rx195_pos, "metachar:sym<( )>")
-    rx195_cur."!cursor_debug"("PASS  ", "metachar:sym<( )>", " at pos=", rx195_pos)
-    .return (rx195_cur)
-  rx195_fail:
+    rx194_cur."!cursor_pass"(rx194_pos, "metachar:sym<[ ]>")
+    rx194_cur."!cursor_debug"("PASS  ", "metachar:sym<[ ]>", " at pos=", rx194_pos)
+    .return (rx194_cur)
+  rx194_fail:
 .annotate 'line', 3
-    (rx195_rep, rx195_pos, $I10, $P10) = rx195_cur."!mark_fail"(0)
-    lt rx195_pos, -1, rx195_done
-    eq rx195_pos, -1, rx195_fail
+    (rx194_rep, rx194_pos, $I10, $P10) = rx194_cur."!mark_fail"(0)
+    lt rx194_pos, -1, rx194_done
+    eq rx194_pos, -1, rx194_fail
     jump $I10
-  rx195_done:
-    rx195_cur."!cursor_fail"()
-    rx195_cur."!cursor_debug"("FAIL  ", "metachar:sym<( )>")
-    .return (rx195_cur)
+  rx194_done:
+    rx194_cur."!cursor_fail"()
+    rx194_cur."!cursor_debug"("FAIL  ", "metachar:sym<[ ]>")
+    .return (rx194_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<( )>"  :subid("54_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<[ ]>"  :subid("52_1275811476.7961") :method
 .annotate 'line', 3
-    $P197 = self."!PREFIX__!subrule"("nibbler", "(")
-    new $P198, "ResizablePMCArray"
-    push $P198, $P197
-    .return ($P198)
+    $P196 = self."!PREFIX__!subrule"("nibbler", "[")
+    new $P197, "ResizablePMCArray"
+    push $P197, $P196
+    .return ($P197)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<'>"  :subid("55_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<( )>"  :subid("53_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx201_tgt
-    .local int rx201_pos
-    .local int rx201_off
-    .local int rx201_eos
-    .local int rx201_rep
-    .local pmc rx201_cur
-    (rx201_cur, rx201_pos, rx201_tgt) = self."!cursor_start"()
-    rx201_cur."!cursor_debug"("START ", "metachar:sym<'>")
-    .lex unicode:"$\x{a2}", rx201_cur
+    .local string rx200_tgt
+    .local int rx200_pos
+    .local int rx200_off
+    .local int rx200_eos
+    .local int rx200_rep
+    .local pmc rx200_cur
+    (rx200_cur, rx200_pos, rx200_tgt) = self."!cursor_start"()
+    rx200_cur."!cursor_debug"("START ", "metachar:sym<( )>")
+    .lex unicode:"$\x{a2}", rx200_cur
     .local pmc match
     .lex "$/", match
-    length rx201_eos, rx201_tgt
-    set rx201_off, 0
-    lt rx201_pos, 2, rx201_start
-    sub rx201_off, rx201_pos, 1
-    substr rx201_tgt, rx201_tgt, rx201_off
-  rx201_start:
+    length rx200_eos, rx200_tgt
+    gt rx200_pos, rx200_eos, rx200_done
+    set rx200_off, 0
+    lt rx200_pos, 2, rx200_start
+    sub rx200_off, rx200_pos, 1
+    substr rx200_tgt, rx200_tgt, rx200_off
+  rx200_start:
     $I10 = self.'from'()
     ne $I10, -1, rxscan204_done
     goto rxscan204_scan
   rxscan204_loop:
-    ($P10) = rx201_cur."from"()
+    ($P10) = rx200_cur."from"()
     inc $P10
-    set rx201_pos, $P10
-    ge rx201_pos, rx201_eos, rxscan204_done
+    set rx200_pos, $P10
+    ge rx200_pos, rx200_eos, rxscan204_done
   rxscan204_scan:
     set_addr $I10, rxscan204_loop
-    rx201_cur."!mark_push"(0, rx201_pos, $I10)
+    rx200_cur."!mark_push"(0, rx200_pos, $I10)
   rxscan204_done:
-.annotate 'line', 77
-  # rx enumcharlist negate=0 zerowidth
-    ge rx201_pos, rx201_eos, rx201_fail
-    sub $I10, rx201_pos, rx201_off
-    substr $S10, rx201_tgt, $I10, 1
-    index $I11, "'", $S10
-    lt $I11, 0, rx201_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx201_cur."!cursor_pos"(rx201_pos)
-    $P10 = rx201_cur."quote_EXPR"(":q")
-    unless $P10, rx201_fail
-    rx201_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx201_pos = $P10."pos"()
+.annotate 'line', 76
+  # rx literal  "("
+    add $I11, rx200_pos, 1
+    gt $I11, rx200_eos, rx200_fail
+    sub $I11, rx200_pos, rx200_off
+    substr $S10, rx200_tgt, $I11, 1
+    ne $S10, "(", rx200_fail
+    add rx200_pos, 1
+  # rx subrule "nibbler" subtype=capture negate=
+    rx200_cur."!cursor_pos"(rx200_pos)
+    $P10 = rx200_cur."nibbler"()
+    unless $P10, rx200_fail
+    rx200_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("nibbler")
+    rx200_pos = $P10."pos"()
+  # rx literal  ")"
+    add $I11, rx200_pos, 1
+    gt $I11, rx200_eos, rx200_fail
+    sub $I11, rx200_pos, rx200_off
+    substr $S10, rx200_tgt, $I11, 1
+    ne $S10, ")", rx200_fail
+    add rx200_pos, 1
   # rx pass
-    rx201_cur."!cursor_pass"(rx201_pos, "metachar:sym<'>")
-    rx201_cur."!cursor_debug"("PASS  ", "metachar:sym<'>", " at pos=", rx201_pos)
-    .return (rx201_cur)
-  rx201_fail:
+    rx200_cur."!cursor_pass"(rx200_pos, "metachar:sym<( )>")
+    rx200_cur."!cursor_debug"("PASS  ", "metachar:sym<( )>", " at pos=", rx200_pos)
+    .return (rx200_cur)
+  rx200_fail:
 .annotate 'line', 3
-    (rx201_rep, rx201_pos, $I10, $P10) = rx201_cur."!mark_fail"(0)
-    lt rx201_pos, -1, rx201_done
-    eq rx201_pos, -1, rx201_fail
+    (rx200_rep, rx200_pos, $I10, $P10) = rx200_cur."!mark_fail"(0)
+    lt rx200_pos, -1, rx200_done
+    eq rx200_pos, -1, rx200_fail
     jump $I10
-  rx201_done:
-    rx201_cur."!cursor_fail"()
-    rx201_cur."!cursor_debug"("FAIL  ", "metachar:sym<'>")
-    .return (rx201_cur)
+  rx200_done:
+    rx200_cur."!cursor_fail"()
+    rx200_cur."!cursor_debug"("FAIL  ", "metachar:sym<( )>")
+    .return (rx200_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<'>"  :subid("56_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<( )>"  :subid("54_1275811476.7961") :method
 .annotate 'line', 3
+    $P202 = self."!PREFIX__!subrule"("nibbler", "(")
     new $P203, "ResizablePMCArray"
-    push $P203, "'"
+    push $P203, $P202
     .return ($P203)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<\">"  :subid("57_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<'>"  :subid("55_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
     .local string rx206_tgt
     .local int rx206_pos
@@ -2336,11 +2317,12 @@
     .local int rx206_rep
     .local pmc rx206_cur
     (rx206_cur, rx206_pos, rx206_tgt) = self."!cursor_start"()
-    rx206_cur."!cursor_debug"("START ", "metachar:sym<\">")
+    rx206_cur."!cursor_debug"("START ", "metachar:sym<'>")
     .lex unicode:"$\x{a2}", rx206_cur
     .local pmc match
     .lex "$/", match
     length rx206_eos, rx206_tgt
+    gt rx206_pos, rx206_eos, rx206_done
     set rx206_off, 0
     lt rx206_pos, 2, rx206_start
     sub rx206_off, rx206_pos, 1
@@ -2358,23 +2340,23 @@
     set_addr $I10, rxscan209_loop
     rx206_cur."!mark_push"(0, rx206_pos, $I10)
   rxscan209_done:
-.annotate 'line', 78
+.annotate 'line', 77
   # rx enumcharlist negate=0 zerowidth
     ge rx206_pos, rx206_eos, rx206_fail
     sub $I10, rx206_pos, rx206_off
     substr $S10, rx206_tgt, $I10, 1
-    index $I11, "\"", $S10
+    index $I11, "'", $S10
     lt $I11, 0, rx206_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
     rx206_cur."!cursor_pos"(rx206_pos)
-    $P10 = rx206_cur."quote_EXPR"(":qq")
+    $P10 = rx206_cur."quote_EXPR"(":q")
     unless $P10, rx206_fail
     rx206_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
     rx206_pos = $P10."pos"()
   # rx pass
-    rx206_cur."!cursor_pass"(rx206_pos, "metachar:sym<\">")
-    rx206_cur."!cursor_debug"("PASS  ", "metachar:sym<\">", " at pos=", rx206_pos)
+    rx206_cur."!cursor_pass"(rx206_pos, "metachar:sym<'>")
+    rx206_cur."!cursor_debug"("PASS  ", "metachar:sym<'>", " at pos=", rx206_pos)
     .return (rx206_cur)
   rx206_fail:
 .annotate 'line', 3
@@ -2384,23 +2366,23 @@
     jump $I10
   rx206_done:
     rx206_cur."!cursor_fail"()
-    rx206_cur."!cursor_debug"("FAIL  ", "metachar:sym<\">")
+    rx206_cur."!cursor_debug"("FAIL  ", "metachar:sym<'>")
     .return (rx206_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<\">"  :subid("58_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<'>"  :subid("56_1275811476.7961") :method
 .annotate 'line', 3
     new $P208, "ResizablePMCArray"
-    push $P208, "\""
+    push $P208, "'"
     .return ($P208)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<.>"  :subid("59_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<\">"  :subid("57_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
     .local string rx211_tgt
     .local int rx211_pos
@@ -2409,11 +2391,12 @@
     .local int rx211_rep
     .local pmc rx211_cur
     (rx211_cur, rx211_pos, rx211_tgt) = self."!cursor_start"()
-    rx211_cur."!cursor_debug"("START ", "metachar:sym<.>")
+    rx211_cur."!cursor_debug"("START ", "metachar:sym<\">")
     .lex unicode:"$\x{a2}", rx211_cur
     .local pmc match
     .lex "$/", match
     length rx211_eos, rx211_tgt
+    gt rx211_pos, rx211_eos, rx211_done
     set rx211_off, 0
     lt rx211_pos, 2, rx211_start
     sub rx211_off, rx211_pos, 1
@@ -2431,31 +2414,23 @@
     set_addr $I10, rxscan214_loop
     rx211_cur."!mark_push"(0, rx211_pos, $I10)
   rxscan214_done:
-.annotate 'line', 79
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_215_fail
-    rx211_cur."!mark_push"(0, rx211_pos, $I10)
-  # rx literal  "."
-    add $I11, rx211_pos, 1
-    gt $I11, rx211_eos, rx211_fail
-    sub $I11, rx211_pos, rx211_off
-    substr $S10, rx211_tgt, $I11, 1
-    ne $S10, ".", rx211_fail
-    add rx211_pos, 1
-    set_addr $I10, rxcap_215_fail
-    ($I12, $I11) = rx211_cur."!mark_peek"($I10)
-    rx211_cur."!cursor_pos"($I11)
-    ($P10) = rx211_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx211_pos, "")
+.annotate 'line', 78
+  # rx enumcharlist negate=0 zerowidth
+    ge rx211_pos, rx211_eos, rx211_fail
+    sub $I10, rx211_pos, rx211_off
+    substr $S10, rx211_tgt, $I10, 1
+    index $I11, "\"", $S10
+    lt $I11, 0, rx211_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx211_cur."!cursor_pos"(rx211_pos)
+    $P10 = rx211_cur."quote_EXPR"(":qq")
+    unless $P10, rx211_fail
     rx211_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_215_done
-  rxcap_215_fail:
-    goto rx211_fail
-  rxcap_215_done:
+    $P10."!cursor_names"("quote_EXPR")
+    rx211_pos = $P10."pos"()
   # rx pass
-    rx211_cur."!cursor_pass"(rx211_pos, "metachar:sym<.>")
-    rx211_cur."!cursor_debug"("PASS  ", "metachar:sym<.>", " at pos=", rx211_pos)
+    rx211_cur."!cursor_pass"(rx211_pos, "metachar:sym<\">")
+    rx211_cur."!cursor_debug"("PASS  ", "metachar:sym<\">", " at pos=", rx211_pos)
     .return (rx211_cur)
   rx211_fail:
 .annotate 'line', 3
@@ -2465,4115 +2440,4184 @@
     jump $I10
   rx211_done:
     rx211_cur."!cursor_fail"()
-    rx211_cur."!cursor_debug"("FAIL  ", "metachar:sym<.>")
+    rx211_cur."!cursor_debug"("FAIL  ", "metachar:sym<\">")
     .return (rx211_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<.>"  :subid("60_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<\">"  :subid("58_1275811476.7961") :method
 .annotate 'line', 3
     new $P213, "ResizablePMCArray"
-    push $P213, "."
+    push $P213, "\""
     .return ($P213)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<^>"  :subid("61_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<.>"  :subid("59_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .local string rx216_tgt
+    .local int rx216_pos
+    .local int rx216_off
+    .local int rx216_eos
+    .local int rx216_rep
+    .local pmc rx216_cur
+    (rx216_cur, rx216_pos, rx216_tgt) = self."!cursor_start"()
+    rx216_cur."!cursor_debug"("START ", "metachar:sym<.>")
+    .lex unicode:"$\x{a2}", rx216_cur
+    .local pmc match
+    .lex "$/", match
+    length rx216_eos, rx216_tgt
+    gt rx216_pos, rx216_eos, rx216_done
+    set rx216_off, 0
+    lt rx216_pos, 2, rx216_start
+    sub rx216_off, rx216_pos, 1
+    substr rx216_tgt, rx216_tgt, rx216_off
+  rx216_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan219_done
+    goto rxscan219_scan
+  rxscan219_loop:
+    ($P10) = rx216_cur."from"()
+    inc $P10
+    set rx216_pos, $P10
+    ge rx216_pos, rx216_eos, rxscan219_done
+  rxscan219_scan:
+    set_addr $I10, rxscan219_loop
+    rx216_cur."!mark_push"(0, rx216_pos, $I10)
+  rxscan219_done:
+.annotate 'line', 79
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_220_fail
+    rx216_cur."!mark_push"(0, rx216_pos, $I10)
+  # rx literal  "."
+    add $I11, rx216_pos, 1
+    gt $I11, rx216_eos, rx216_fail
+    sub $I11, rx216_pos, rx216_off
+    substr $S10, rx216_tgt, $I11, 1
+    ne $S10, ".", rx216_fail
+    add rx216_pos, 1
+    set_addr $I10, rxcap_220_fail
+    ($I12, $I11) = rx216_cur."!mark_peek"($I10)
+    rx216_cur."!cursor_pos"($I11)
+    ($P10) = rx216_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx216_pos, "")
+    rx216_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_220_done
+  rxcap_220_fail:
+    goto rx216_fail
+  rxcap_220_done:
+  # rx pass
+    rx216_cur."!cursor_pass"(rx216_pos, "metachar:sym<.>")
+    rx216_cur."!cursor_debug"("PASS  ", "metachar:sym<.>", " at pos=", rx216_pos)
+    .return (rx216_cur)
+  rx216_fail:
+.annotate 'line', 3
+    (rx216_rep, rx216_pos, $I10, $P10) = rx216_cur."!mark_fail"(0)
+    lt rx216_pos, -1, rx216_done
+    eq rx216_pos, -1, rx216_fail
+    jump $I10
+  rx216_done:
+    rx216_cur."!cursor_fail"()
+    rx216_cur."!cursor_debug"("FAIL  ", "metachar:sym<.>")
+    .return (rx216_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__metachar:sym<.>"  :subid("60_1275811476.7961") :method
 .annotate 'line', 3
-    .local string rx217_tgt
-    .local int rx217_pos
-    .local int rx217_off
-    .local int rx217_eos
-    .local int rx217_rep
-    .local pmc rx217_cur
-    (rx217_cur, rx217_pos, rx217_tgt) = self."!cursor_start"()
-    rx217_cur."!cursor_debug"("START ", "metachar:sym<^>")
-    .lex unicode:"$\x{a2}", rx217_cur
-    .local pmc match
-    .lex "$/", match
-    length rx217_eos, rx217_tgt
-    set rx217_off, 0
-    lt rx217_pos, 2, rx217_start
-    sub rx217_off, rx217_pos, 1
-    substr rx217_tgt, rx217_tgt, rx217_off
-  rx217_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan220_done
-    goto rxscan220_scan
-  rxscan220_loop:
-    ($P10) = rx217_cur."from"()
-    inc $P10
-    set rx217_pos, $P10
-    ge rx217_pos, rx217_eos, rxscan220_done
-  rxscan220_scan:
-    set_addr $I10, rxscan220_loop
-    rx217_cur."!mark_push"(0, rx217_pos, $I10)
-  rxscan220_done:
+    new $P218, "ResizablePMCArray"
+    push $P218, "."
+    .return ($P218)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<^>"  :subid("61_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .local string rx222_tgt
+    .local int rx222_pos
+    .local int rx222_off
+    .local int rx222_eos
+    .local int rx222_rep
+    .local pmc rx222_cur
+    (rx222_cur, rx222_pos, rx222_tgt) = self."!cursor_start"()
+    rx222_cur."!cursor_debug"("START ", "metachar:sym<^>")
+    .lex unicode:"$\x{a2}", rx222_cur
+    .local pmc match
+    .lex "$/", match
+    length rx222_eos, rx222_tgt
+    gt rx222_pos, rx222_eos, rx222_done
+    set rx222_off, 0
+    lt rx222_pos, 2, rx222_start
+    sub rx222_off, rx222_pos, 1
+    substr rx222_tgt, rx222_tgt, rx222_off
+  rx222_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan225_done
+    goto rxscan225_scan
+  rxscan225_loop:
+    ($P10) = rx222_cur."from"()
+    inc $P10
+    set rx222_pos, $P10
+    ge rx222_pos, rx222_eos, rxscan225_done
+  rxscan225_scan:
+    set_addr $I10, rxscan225_loop
+    rx222_cur."!mark_push"(0, rx222_pos, $I10)
+  rxscan225_done:
 .annotate 'line', 80
   # rx subcapture "sym"
-    set_addr $I10, rxcap_221_fail
-    rx217_cur."!mark_push"(0, rx217_pos, $I10)
+    set_addr $I10, rxcap_226_fail
+    rx222_cur."!mark_push"(0, rx222_pos, $I10)
   # rx literal  "^"
-    add $I11, rx217_pos, 1
-    gt $I11, rx217_eos, rx217_fail
-    sub $I11, rx217_pos, rx217_off
-    substr $S10, rx217_tgt, $I11, 1
-    ne $S10, "^", rx217_fail
-    add rx217_pos, 1
-    set_addr $I10, rxcap_221_fail
-    ($I12, $I11) = rx217_cur."!mark_peek"($I10)
-    rx217_cur."!cursor_pos"($I11)
-    ($P10) = rx217_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx217_pos, "")
-    rx217_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx222_pos, 1
+    gt $I11, rx222_eos, rx222_fail
+    sub $I11, rx222_pos, rx222_off
+    substr $S10, rx222_tgt, $I11, 1
+    ne $S10, "^", rx222_fail
+    add rx222_pos, 1
+    set_addr $I10, rxcap_226_fail
+    ($I12, $I11) = rx222_cur."!mark_peek"($I10)
+    rx222_cur."!cursor_pos"($I11)
+    ($P10) = rx222_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx222_pos, "")
+    rx222_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_221_done
-  rxcap_221_fail:
-    goto rx217_fail
-  rxcap_221_done:
+    goto rxcap_226_done
+  rxcap_226_fail:
+    goto rx222_fail
+  rxcap_226_done:
   # rx pass
-    rx217_cur."!cursor_pass"(rx217_pos, "metachar:sym<^>")
-    rx217_cur."!cursor_debug"("PASS  ", "metachar:sym<^>", " at pos=", rx217_pos)
-    .return (rx217_cur)
-  rx217_fail:
+    rx222_cur."!cursor_pass"(rx222_pos, "metachar:sym<^>")
+    rx222_cur."!cursor_debug"("PASS  ", "metachar:sym<^>", " at pos=", rx222_pos)
+    .return (rx222_cur)
+  rx222_fail:
 .annotate 'line', 3
-    (rx217_rep, rx217_pos, $I10, $P10) = rx217_cur."!mark_fail"(0)
-    lt rx217_pos, -1, rx217_done
-    eq rx217_pos, -1, rx217_fail
+    (rx222_rep, rx222_pos, $I10, $P10) = rx222_cur."!mark_fail"(0)
+    lt rx222_pos, -1, rx222_done
+    eq rx222_pos, -1, rx222_fail
     jump $I10
-  rx217_done:
-    rx217_cur."!cursor_fail"()
-    rx217_cur."!cursor_debug"("FAIL  ", "metachar:sym<^>")
-    .return (rx217_cur)
+  rx222_done:
+    rx222_cur."!cursor_fail"()
+    rx222_cur."!cursor_debug"("FAIL  ", "metachar:sym<^>")
+    .return (rx222_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<^>"  :subid("62_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<^>"  :subid("62_1275811476.7961") :method
 .annotate 'line', 3
-    new $P219, "ResizablePMCArray"
-    push $P219, "^"
-    .return ($P219)
+    new $P224, "ResizablePMCArray"
+    push $P224, "^"
+    .return ($P224)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<^^>"  :subid("63_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<^^>"  :subid("63_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx223_tgt
-    .local int rx223_pos
-    .local int rx223_off
-    .local int rx223_eos
-    .local int rx223_rep
-    .local pmc rx223_cur
-    (rx223_cur, rx223_pos, rx223_tgt) = self."!cursor_start"()
-    rx223_cur."!cursor_debug"("START ", "metachar:sym<^^>")
-    .lex unicode:"$\x{a2}", rx223_cur
+    .local string rx228_tgt
+    .local int rx228_pos
+    .local int rx228_off
+    .local int rx228_eos
+    .local int rx228_rep
+    .local pmc rx228_cur
+    (rx228_cur, rx228_pos, rx228_tgt) = self."!cursor_start"()
+    rx228_cur."!cursor_debug"("START ", "metachar:sym<^^>")
+    .lex unicode:"$\x{a2}", rx228_cur
     .local pmc match
     .lex "$/", match
-    length rx223_eos, rx223_tgt
-    set rx223_off, 0
-    lt rx223_pos, 2, rx223_start
-    sub rx223_off, rx223_pos, 1
-    substr rx223_tgt, rx223_tgt, rx223_off
-  rx223_start:
+    length rx228_eos, rx228_tgt
+    gt rx228_pos, rx228_eos, rx228_done
+    set rx228_off, 0
+    lt rx228_pos, 2, rx228_start
+    sub rx228_off, rx228_pos, 1
+    substr rx228_tgt, rx228_tgt, rx228_off
+  rx228_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan226_done
-    goto rxscan226_scan
-  rxscan226_loop:
-    ($P10) = rx223_cur."from"()
+    ne $I10, -1, rxscan231_done
+    goto rxscan231_scan
+  rxscan231_loop:
+    ($P10) = rx228_cur."from"()
     inc $P10
-    set rx223_pos, $P10
-    ge rx223_pos, rx223_eos, rxscan226_done
-  rxscan226_scan:
-    set_addr $I10, rxscan226_loop
-    rx223_cur."!mark_push"(0, rx223_pos, $I10)
-  rxscan226_done:
+    set rx228_pos, $P10
+    ge rx228_pos, rx228_eos, rxscan231_done
+  rxscan231_scan:
+    set_addr $I10, rxscan231_loop
+    rx228_cur."!mark_push"(0, rx228_pos, $I10)
+  rxscan231_done:
 .annotate 'line', 81
   # rx subcapture "sym"
-    set_addr $I10, rxcap_227_fail
-    rx223_cur."!mark_push"(0, rx223_pos, $I10)
+    set_addr $I10, rxcap_232_fail
+    rx228_cur."!mark_push"(0, rx228_pos, $I10)
   # rx literal  "^^"
-    add $I11, rx223_pos, 2
-    gt $I11, rx223_eos, rx223_fail
-    sub $I11, rx223_pos, rx223_off
-    substr $S10, rx223_tgt, $I11, 2
-    ne $S10, "^^", rx223_fail
-    add rx223_pos, 2
-    set_addr $I10, rxcap_227_fail
-    ($I12, $I11) = rx223_cur."!mark_peek"($I10)
-    rx223_cur."!cursor_pos"($I11)
-    ($P10) = rx223_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx223_pos, "")
-    rx223_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx228_pos, 2
+    gt $I11, rx228_eos, rx228_fail
+    sub $I11, rx228_pos, rx228_off
+    substr $S10, rx228_tgt, $I11, 2
+    ne $S10, "^^", rx228_fail
+    add rx228_pos, 2
+    set_addr $I10, rxcap_232_fail
+    ($I12, $I11) = rx228_cur."!mark_peek"($I10)
+    rx228_cur."!cursor_pos"($I11)
+    ($P10) = rx228_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx228_pos, "")
+    rx228_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_227_done
-  rxcap_227_fail:
-    goto rx223_fail
-  rxcap_227_done:
+    goto rxcap_232_done
+  rxcap_232_fail:
+    goto rx228_fail
+  rxcap_232_done:
   # rx pass
-    rx223_cur."!cursor_pass"(rx223_pos, "metachar:sym<^^>")
-    rx223_cur."!cursor_debug"("PASS  ", "metachar:sym<^^>", " at pos=", rx223_pos)
-    .return (rx223_cur)
-  rx223_fail:
+    rx228_cur."!cursor_pass"(rx228_pos, "metachar:sym<^^>")
+    rx228_cur."!cursor_debug"("PASS  ", "metachar:sym<^^>", " at pos=", rx228_pos)
+    .return (rx228_cur)
+  rx228_fail:
 .annotate 'line', 3
-    (rx223_rep, rx223_pos, $I10, $P10) = rx223_cur."!mark_fail"(0)
-    lt rx223_pos, -1, rx223_done
-    eq rx223_pos, -1, rx223_fail
+    (rx228_rep, rx228_pos, $I10, $P10) = rx228_cur."!mark_fail"(0)
+    lt rx228_pos, -1, rx228_done
+    eq rx228_pos, -1, rx228_fail
     jump $I10
-  rx223_done:
-    rx223_cur."!cursor_fail"()
-    rx223_cur."!cursor_debug"("FAIL  ", "metachar:sym<^^>")
-    .return (rx223_cur)
+  rx228_done:
+    rx228_cur."!cursor_fail"()
+    rx228_cur."!cursor_debug"("FAIL  ", "metachar:sym<^^>")
+    .return (rx228_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<^^>"  :subid("64_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<^^>"  :subid("64_1275811476.7961") :method
 .annotate 'line', 3
-    new $P225, "ResizablePMCArray"
-    push $P225, "^^"
-    .return ($P225)
+    new $P230, "ResizablePMCArray"
+    push $P230, "^^"
+    .return ($P230)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<$>"  :subid("65_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<$>"  :subid("65_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx229_tgt
-    .local int rx229_pos
-    .local int rx229_off
-    .local int rx229_eos
-    .local int rx229_rep
-    .local pmc rx229_cur
-    (rx229_cur, rx229_pos, rx229_tgt) = self."!cursor_start"()
-    rx229_cur."!cursor_debug"("START ", "metachar:sym<$>")
-    .lex unicode:"$\x{a2}", rx229_cur
+    .local string rx234_tgt
+    .local int rx234_pos
+    .local int rx234_off
+    .local int rx234_eos
+    .local int rx234_rep
+    .local pmc rx234_cur
+    (rx234_cur, rx234_pos, rx234_tgt) = self."!cursor_start"()
+    rx234_cur."!cursor_debug"("START ", "metachar:sym<$>")
+    .lex unicode:"$\x{a2}", rx234_cur
     .local pmc match
     .lex "$/", match
-    length rx229_eos, rx229_tgt
-    set rx229_off, 0
-    lt rx229_pos, 2, rx229_start
-    sub rx229_off, rx229_pos, 1
-    substr rx229_tgt, rx229_tgt, rx229_off
-  rx229_start:
+    length rx234_eos, rx234_tgt
+    gt rx234_pos, rx234_eos, rx234_done
+    set rx234_off, 0
+    lt rx234_pos, 2, rx234_start
+    sub rx234_off, rx234_pos, 1
+    substr rx234_tgt, rx234_tgt, rx234_off
+  rx234_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan232_done
-    goto rxscan232_scan
-  rxscan232_loop:
-    ($P10) = rx229_cur."from"()
+    ne $I10, -1, rxscan237_done
+    goto rxscan237_scan
+  rxscan237_loop:
+    ($P10) = rx234_cur."from"()
     inc $P10
-    set rx229_pos, $P10
-    ge rx229_pos, rx229_eos, rxscan232_done
-  rxscan232_scan:
-    set_addr $I10, rxscan232_loop
-    rx229_cur."!mark_push"(0, rx229_pos, $I10)
-  rxscan232_done:
+    set rx234_pos, $P10
+    ge rx234_pos, rx234_eos, rxscan237_done
+  rxscan237_scan:
+    set_addr $I10, rxscan237_loop
+    rx234_cur."!mark_push"(0, rx234_pos, $I10)
+  rxscan237_done:
 .annotate 'line', 82
   # rx subcapture "sym"
-    set_addr $I10, rxcap_233_fail
-    rx229_cur."!mark_push"(0, rx229_pos, $I10)
+    set_addr $I10, rxcap_238_fail
+    rx234_cur."!mark_push"(0, rx234_pos, $I10)
   # rx literal  "$"
-    add $I11, rx229_pos, 1
-    gt $I11, rx229_eos, rx229_fail
-    sub $I11, rx229_pos, rx229_off
-    substr $S10, rx229_tgt, $I11, 1
-    ne $S10, "$", rx229_fail
-    add rx229_pos, 1
-    set_addr $I10, rxcap_233_fail
-    ($I12, $I11) = rx229_cur."!mark_peek"($I10)
-    rx229_cur."!cursor_pos"($I11)
-    ($P10) = rx229_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx229_pos, "")
-    rx229_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx234_pos, 1
+    gt $I11, rx234_eos, rx234_fail
+    sub $I11, rx234_pos, rx234_off
+    substr $S10, rx234_tgt, $I11, 1
+    ne $S10, "$", rx234_fail
+    add rx234_pos, 1
+    set_addr $I10, rxcap_238_fail
+    ($I12, $I11) = rx234_cur."!mark_peek"($I10)
+    rx234_cur."!cursor_pos"($I11)
+    ($P10) = rx234_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx234_pos, "")
+    rx234_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_233_done
-  rxcap_233_fail:
-    goto rx229_fail
-  rxcap_233_done:
+    goto rxcap_238_done
+  rxcap_238_fail:
+    goto rx234_fail
+  rxcap_238_done:
   # rx pass
-    rx229_cur."!cursor_pass"(rx229_pos, "metachar:sym<$>")
-    rx229_cur."!cursor_debug"("PASS  ", "metachar:sym<$>", " at pos=", rx229_pos)
-    .return (rx229_cur)
-  rx229_fail:
+    rx234_cur."!cursor_pass"(rx234_pos, "metachar:sym<$>")
+    rx234_cur."!cursor_debug"("PASS  ", "metachar:sym<$>", " at pos=", rx234_pos)
+    .return (rx234_cur)
+  rx234_fail:
 .annotate 'line', 3
-    (rx229_rep, rx229_pos, $I10, $P10) = rx229_cur."!mark_fail"(0)
-    lt rx229_pos, -1, rx229_done
-    eq rx229_pos, -1, rx229_fail
+    (rx234_rep, rx234_pos, $I10, $P10) = rx234_cur."!mark_fail"(0)
+    lt rx234_pos, -1, rx234_done
+    eq rx234_pos, -1, rx234_fail
     jump $I10
-  rx229_done:
-    rx229_cur."!cursor_fail"()
-    rx229_cur."!cursor_debug"("FAIL  ", "metachar:sym<$>")
-    .return (rx229_cur)
+  rx234_done:
+    rx234_cur."!cursor_fail"()
+    rx234_cur."!cursor_debug"("FAIL  ", "metachar:sym<$>")
+    .return (rx234_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<$>"  :subid("66_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<$>"  :subid("66_1275811476.7961") :method
 .annotate 'line', 3
-    new $P231, "ResizablePMCArray"
-    push $P231, "$"
-    .return ($P231)
+    new $P236, "ResizablePMCArray"
+    push $P236, "$"
+    .return ($P236)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<$$>"  :subid("67_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<$$>"  :subid("67_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx235_tgt
-    .local int rx235_pos
-    .local int rx235_off
-    .local int rx235_eos
-    .local int rx235_rep
-    .local pmc rx235_cur
-    (rx235_cur, rx235_pos, rx235_tgt) = self."!cursor_start"()
-    rx235_cur."!cursor_debug"("START ", "metachar:sym<$$>")
-    .lex unicode:"$\x{a2}", rx235_cur
+    .local string rx240_tgt
+    .local int rx240_pos
+    .local int rx240_off
+    .local int rx240_eos
+    .local int rx240_rep
+    .local pmc rx240_cur
+    (rx240_cur, rx240_pos, rx240_tgt) = self."!cursor_start"()
+    rx240_cur."!cursor_debug"("START ", "metachar:sym<$$>")
+    .lex unicode:"$\x{a2}", rx240_cur
     .local pmc match
     .lex "$/", match
-    length rx235_eos, rx235_tgt
-    set rx235_off, 0
-    lt rx235_pos, 2, rx235_start
-    sub rx235_off, rx235_pos, 1
-    substr rx235_tgt, rx235_tgt, rx235_off
-  rx235_start:
+    length rx240_eos, rx240_tgt
+    gt rx240_pos, rx240_eos, rx240_done
+    set rx240_off, 0
+    lt rx240_pos, 2, rx240_start
+    sub rx240_off, rx240_pos, 1
+    substr rx240_tgt, rx240_tgt, rx240_off
+  rx240_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan238_done
-    goto rxscan238_scan
-  rxscan238_loop:
-    ($P10) = rx235_cur."from"()
+    ne $I10, -1, rxscan243_done
+    goto rxscan243_scan
+  rxscan243_loop:
+    ($P10) = rx240_cur."from"()
     inc $P10
-    set rx235_pos, $P10
-    ge rx235_pos, rx235_eos, rxscan238_done
-  rxscan238_scan:
-    set_addr $I10, rxscan238_loop
-    rx235_cur."!mark_push"(0, rx235_pos, $I10)
-  rxscan238_done:
+    set rx240_pos, $P10
+    ge rx240_pos, rx240_eos, rxscan243_done
+  rxscan243_scan:
+    set_addr $I10, rxscan243_loop
+    rx240_cur."!mark_push"(0, rx240_pos, $I10)
+  rxscan243_done:
 .annotate 'line', 83
   # rx subcapture "sym"
-    set_addr $I10, rxcap_239_fail
-    rx235_cur."!mark_push"(0, rx235_pos, $I10)
+    set_addr $I10, rxcap_244_fail
+    rx240_cur."!mark_push"(0, rx240_pos, $I10)
   # rx literal  "$$"
-    add $I11, rx235_pos, 2
-    gt $I11, rx235_eos, rx235_fail
-    sub $I11, rx235_pos, rx235_off
-    substr $S10, rx235_tgt, $I11, 2
-    ne $S10, "$$", rx235_fail
-    add rx235_pos, 2
-    set_addr $I10, rxcap_239_fail
-    ($I12, $I11) = rx235_cur."!mark_peek"($I10)
-    rx235_cur."!cursor_pos"($I11)
-    ($P10) = rx235_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx235_pos, "")
-    rx235_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx240_pos, 2
+    gt $I11, rx240_eos, rx240_fail
+    sub $I11, rx240_pos, rx240_off
+    substr $S10, rx240_tgt, $I11, 2
+    ne $S10, "$$", rx240_fail
+    add rx240_pos, 2
+    set_addr $I10, rxcap_244_fail
+    ($I12, $I11) = rx240_cur."!mark_peek"($I10)
+    rx240_cur."!cursor_pos"($I11)
+    ($P10) = rx240_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx240_pos, "")
+    rx240_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_239_done
-  rxcap_239_fail:
-    goto rx235_fail
-  rxcap_239_done:
+    goto rxcap_244_done
+  rxcap_244_fail:
+    goto rx240_fail
+  rxcap_244_done:
   # rx pass
-    rx235_cur."!cursor_pass"(rx235_pos, "metachar:sym<$$>")
-    rx235_cur."!cursor_debug"("PASS  ", "metachar:sym<$$>", " at pos=", rx235_pos)
-    .return (rx235_cur)
-  rx235_fail:
+    rx240_cur."!cursor_pass"(rx240_pos, "metachar:sym<$$>")
+    rx240_cur."!cursor_debug"("PASS  ", "metachar:sym<$$>", " at pos=", rx240_pos)
+    .return (rx240_cur)
+  rx240_fail:
 .annotate 'line', 3
-    (rx235_rep, rx235_pos, $I10, $P10) = rx235_cur."!mark_fail"(0)
-    lt rx235_pos, -1, rx235_done
-    eq rx235_pos, -1, rx235_fail
+    (rx240_rep, rx240_pos, $I10, $P10) = rx240_cur."!mark_fail"(0)
+    lt rx240_pos, -1, rx240_done
+    eq rx240_pos, -1, rx240_fail
     jump $I10
-  rx235_done:
-    rx235_cur."!cursor_fail"()
-    rx235_cur."!cursor_debug"("FAIL  ", "metachar:sym<$$>")
-    .return (rx235_cur)
+  rx240_done:
+    rx240_cur."!cursor_fail"()
+    rx240_cur."!cursor_debug"("FAIL  ", "metachar:sym<$$>")
+    .return (rx240_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<$$>"  :subid("68_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<$$>"  :subid("68_1275811476.7961") :method
 .annotate 'line', 3
-    new $P237, "ResizablePMCArray"
-    push $P237, "$$"
-    .return ($P237)
+    new $P242, "ResizablePMCArray"
+    push $P242, "$$"
+    .return ($P242)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<:::>"  :subid("69_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<:::>"  :subid("69_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx241_tgt
-    .local int rx241_pos
-    .local int rx241_off
-    .local int rx241_eos
-    .local int rx241_rep
-    .local pmc rx241_cur
-    (rx241_cur, rx241_pos, rx241_tgt) = self."!cursor_start"()
-    rx241_cur."!cursor_debug"("START ", "metachar:sym<:::>")
-    .lex unicode:"$\x{a2}", rx241_cur
+    .local string rx246_tgt
+    .local int rx246_pos
+    .local int rx246_off
+    .local int rx246_eos
+    .local int rx246_rep
+    .local pmc rx246_cur
+    (rx246_cur, rx246_pos, rx246_tgt) = self."!cursor_start"()
+    rx246_cur."!cursor_debug"("START ", "metachar:sym<:::>")
+    .lex unicode:"$\x{a2}", rx246_cur
     .local pmc match
     .lex "$/", match
-    length rx241_eos, rx241_tgt
-    set rx241_off, 0
-    lt rx241_pos, 2, rx241_start
-    sub rx241_off, rx241_pos, 1
-    substr rx241_tgt, rx241_tgt, rx241_off
-  rx241_start:
+    length rx246_eos, rx246_tgt
+    gt rx246_pos, rx246_eos, rx246_done
+    set rx246_off, 0
+    lt rx246_pos, 2, rx246_start
+    sub rx246_off, rx246_pos, 1
+    substr rx246_tgt, rx246_tgt, rx246_off
+  rx246_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan245_done
-    goto rxscan245_scan
-  rxscan245_loop:
-    ($P10) = rx241_cur."from"()
+    ne $I10, -1, rxscan250_done
+    goto rxscan250_scan
+  rxscan250_loop:
+    ($P10) = rx246_cur."from"()
     inc $P10
-    set rx241_pos, $P10
-    ge rx241_pos, rx241_eos, rxscan245_done
-  rxscan245_scan:
-    set_addr $I10, rxscan245_loop
-    rx241_cur."!mark_push"(0, rx241_pos, $I10)
-  rxscan245_done:
+    set rx246_pos, $P10
+    ge rx246_pos, rx246_eos, rxscan250_done
+  rxscan250_scan:
+    set_addr $I10, rxscan250_loop
+    rx246_cur."!mark_push"(0, rx246_pos, $I10)
+  rxscan250_done:
 .annotate 'line', 84
   # rx subcapture "sym"
-    set_addr $I10, rxcap_246_fail
-    rx241_cur."!mark_push"(0, rx241_pos, $I10)
+    set_addr $I10, rxcap_251_fail
+    rx246_cur."!mark_push"(0, rx246_pos, $I10)
   # rx literal  ":::"
-    add $I11, rx241_pos, 3
-    gt $I11, rx241_eos, rx241_fail
-    sub $I11, rx241_pos, rx241_off
-    substr $S10, rx241_tgt, $I11, 3
-    ne $S10, ":::", rx241_fail
-    add rx241_pos, 3
-    set_addr $I10, rxcap_246_fail
-    ($I12, $I11) = rx241_cur."!mark_peek"($I10)
-    rx241_cur."!cursor_pos"($I11)
-    ($P10) = rx241_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx241_pos, "")
-    rx241_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx246_pos, 3
+    gt $I11, rx246_eos, rx246_fail
+    sub $I11, rx246_pos, rx246_off
+    substr $S10, rx246_tgt, $I11, 3
+    ne $S10, ":::", rx246_fail
+    add rx246_pos, 3
+    set_addr $I10, rxcap_251_fail
+    ($I12, $I11) = rx246_cur."!mark_peek"($I10)
+    rx246_cur."!cursor_pos"($I11)
+    ($P10) = rx246_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx246_pos, "")
+    rx246_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_246_done
-  rxcap_246_fail:
-    goto rx241_fail
-  rxcap_246_done:
+    goto rxcap_251_done
+  rxcap_251_fail:
+    goto rx246_fail
+  rxcap_251_done:
   # rx subrule "panic" subtype=method negate=
-    rx241_cur."!cursor_pos"(rx241_pos)
-    $P10 = rx241_cur."panic"("::: not yet implemented")
-    unless $P10, rx241_fail
-    rx241_pos = $P10."pos"()
+    rx246_cur."!cursor_pos"(rx246_pos)
+    $P10 = rx246_cur."panic"("::: not yet implemented")
+    unless $P10, rx246_fail
+    rx246_pos = $P10."pos"()
   # rx pass
-    rx241_cur."!cursor_pass"(rx241_pos, "metachar:sym<:::>")
-    rx241_cur."!cursor_debug"("PASS  ", "metachar:sym<:::>", " at pos=", rx241_pos)
-    .return (rx241_cur)
-  rx241_fail:
+    rx246_cur."!cursor_pass"(rx246_pos, "metachar:sym<:::>")
+    rx246_cur."!cursor_debug"("PASS  ", "metachar:sym<:::>", " at pos=", rx246_pos)
+    .return (rx246_cur)
+  rx246_fail:
 .annotate 'line', 3
-    (rx241_rep, rx241_pos, $I10, $P10) = rx241_cur."!mark_fail"(0)
-    lt rx241_pos, -1, rx241_done
-    eq rx241_pos, -1, rx241_fail
+    (rx246_rep, rx246_pos, $I10, $P10) = rx246_cur."!mark_fail"(0)
+    lt rx246_pos, -1, rx246_done
+    eq rx246_pos, -1, rx246_fail
     jump $I10
-  rx241_done:
-    rx241_cur."!cursor_fail"()
-    rx241_cur."!cursor_debug"("FAIL  ", "metachar:sym<:::>")
-    .return (rx241_cur)
+  rx246_done:
+    rx246_cur."!cursor_fail"()
+    rx246_cur."!cursor_debug"("FAIL  ", "metachar:sym<:::>")
+    .return (rx246_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<:::>"  :subid("70_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<:::>"  :subid("70_1275811476.7961") :method
 .annotate 'line', 3
-    $P243 = self."!PREFIX__!subrule"("", ":::")
-    new $P244, "ResizablePMCArray"
-    push $P244, $P243
-    .return ($P244)
+    $P248 = self."!PREFIX__!subrule"("panic", ":::")
+    new $P249, "ResizablePMCArray"
+    push $P249, $P248
+    .return ($P249)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<::>"  :subid("71_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<::>"  :subid("71_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx248_tgt
-    .local int rx248_pos
-    .local int rx248_off
-    .local int rx248_eos
-    .local int rx248_rep
-    .local pmc rx248_cur
-    (rx248_cur, rx248_pos, rx248_tgt) = self."!cursor_start"()
-    rx248_cur."!cursor_debug"("START ", "metachar:sym<::>")
-    .lex unicode:"$\x{a2}", rx248_cur
+    .local string rx253_tgt
+    .local int rx253_pos
+    .local int rx253_off
+    .local int rx253_eos
+    .local int rx253_rep
+    .local pmc rx253_cur
+    (rx253_cur, rx253_pos, rx253_tgt) = self."!cursor_start"()
+    rx253_cur."!cursor_debug"("START ", "metachar:sym<::>")
+    .lex unicode:"$\x{a2}", rx253_cur
     .local pmc match
     .lex "$/", match
-    length rx248_eos, rx248_tgt
-    set rx248_off, 0
-    lt rx248_pos, 2, rx248_start
-    sub rx248_off, rx248_pos, 1
-    substr rx248_tgt, rx248_tgt, rx248_off
-  rx248_start:
+    length rx253_eos, rx253_tgt
+    gt rx253_pos, rx253_eos, rx253_done
+    set rx253_off, 0
+    lt rx253_pos, 2, rx253_start
+    sub rx253_off, rx253_pos, 1
+    substr rx253_tgt, rx253_tgt, rx253_off
+  rx253_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan252_done
-    goto rxscan252_scan
-  rxscan252_loop:
-    ($P10) = rx248_cur."from"()
+    ne $I10, -1, rxscan257_done
+    goto rxscan257_scan
+  rxscan257_loop:
+    ($P10) = rx253_cur."from"()
     inc $P10
-    set rx248_pos, $P10
-    ge rx248_pos, rx248_eos, rxscan252_done
-  rxscan252_scan:
-    set_addr $I10, rxscan252_loop
-    rx248_cur."!mark_push"(0, rx248_pos, $I10)
-  rxscan252_done:
+    set rx253_pos, $P10
+    ge rx253_pos, rx253_eos, rxscan257_done
+  rxscan257_scan:
+    set_addr $I10, rxscan257_loop
+    rx253_cur."!mark_push"(0, rx253_pos, $I10)
+  rxscan257_done:
 .annotate 'line', 85
   # rx subcapture "sym"
-    set_addr $I10, rxcap_253_fail
-    rx248_cur."!mark_push"(0, rx248_pos, $I10)
+    set_addr $I10, rxcap_258_fail
+    rx253_cur."!mark_push"(0, rx253_pos, $I10)
   # rx literal  "::"
-    add $I11, rx248_pos, 2
-    gt $I11, rx248_eos, rx248_fail
-    sub $I11, rx248_pos, rx248_off
-    substr $S10, rx248_tgt, $I11, 2
-    ne $S10, "::", rx248_fail
-    add rx248_pos, 2
-    set_addr $I10, rxcap_253_fail
-    ($I12, $I11) = rx248_cur."!mark_peek"($I10)
-    rx248_cur."!cursor_pos"($I11)
-    ($P10) = rx248_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx248_pos, "")
-    rx248_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx253_pos, 2
+    gt $I11, rx253_eos, rx253_fail
+    sub $I11, rx253_pos, rx253_off
+    substr $S10, rx253_tgt, $I11, 2
+    ne $S10, "::", rx253_fail
+    add rx253_pos, 2
+    set_addr $I10, rxcap_258_fail
+    ($I12, $I11) = rx253_cur."!mark_peek"($I10)
+    rx253_cur."!cursor_pos"($I11)
+    ($P10) = rx253_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx253_pos, "")
+    rx253_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_253_done
-  rxcap_253_fail:
-    goto rx248_fail
-  rxcap_253_done:
+    goto rxcap_258_done
+  rxcap_258_fail:
+    goto rx253_fail
+  rxcap_258_done:
   # rx subrule "panic" subtype=method negate=
-    rx248_cur."!cursor_pos"(rx248_pos)
-    $P10 = rx248_cur."panic"(":: not yet implemented")
-    unless $P10, rx248_fail
-    rx248_pos = $P10."pos"()
+    rx253_cur."!cursor_pos"(rx253_pos)
+    $P10 = rx253_cur."panic"(":: not yet implemented")
+    unless $P10, rx253_fail
+    rx253_pos = $P10."pos"()
   # rx pass
-    rx248_cur."!cursor_pass"(rx248_pos, "metachar:sym<::>")
-    rx248_cur."!cursor_debug"("PASS  ", "metachar:sym<::>", " at pos=", rx248_pos)
-    .return (rx248_cur)
-  rx248_fail:
+    rx253_cur."!cursor_pass"(rx253_pos, "metachar:sym<::>")
+    rx253_cur."!cursor_debug"("PASS  ", "metachar:sym<::>", " at pos=", rx253_pos)
+    .return (rx253_cur)
+  rx253_fail:
 .annotate 'line', 3
-    (rx248_rep, rx248_pos, $I10, $P10) = rx248_cur."!mark_fail"(0)
-    lt rx248_pos, -1, rx248_done
-    eq rx248_pos, -1, rx248_fail
+    (rx253_rep, rx253_pos, $I10, $P10) = rx253_cur."!mark_fail"(0)
+    lt rx253_pos, -1, rx253_done
+    eq rx253_pos, -1, rx253_fail
     jump $I10
-  rx248_done:
-    rx248_cur."!cursor_fail"()
-    rx248_cur."!cursor_debug"("FAIL  ", "metachar:sym<::>")
-    .return (rx248_cur)
+  rx253_done:
+    rx253_cur."!cursor_fail"()
+    rx253_cur."!cursor_debug"("FAIL  ", "metachar:sym<::>")
+    .return (rx253_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<::>"  :subid("72_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<::>"  :subid("72_1275811476.7961") :method
 .annotate 'line', 3
-    $P250 = self."!PREFIX__!subrule"("", "::")
-    new $P251, "ResizablePMCArray"
-    push $P251, $P250
-    .return ($P251)
+    $P255 = self."!PREFIX__!subrule"("panic", "::")
+    new $P256, "ResizablePMCArray"
+    push $P256, $P255
+    .return ($P256)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<lwb>"  :subid("73_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<lwb>"  :subid("73_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx255_tgt
-    .local int rx255_pos
-    .local int rx255_off
-    .local int rx255_eos
-    .local int rx255_rep
-    .local pmc rx255_cur
-    (rx255_cur, rx255_pos, rx255_tgt) = self."!cursor_start"()
-    rx255_cur."!cursor_debug"("START ", "metachar:sym<lwb>")
-    .lex unicode:"$\x{a2}", rx255_cur
+    .local string rx260_tgt
+    .local int rx260_pos
+    .local int rx260_off
+    .local int rx260_eos
+    .local int rx260_rep
+    .local pmc rx260_cur
+    (rx260_cur, rx260_pos, rx260_tgt) = self."!cursor_start"()
+    rx260_cur."!cursor_debug"("START ", "metachar:sym<lwb>")
+    .lex unicode:"$\x{a2}", rx260_cur
     .local pmc match
     .lex "$/", match
-    length rx255_eos, rx255_tgt
-    set rx255_off, 0
-    lt rx255_pos, 2, rx255_start
-    sub rx255_off, rx255_pos, 1
-    substr rx255_tgt, rx255_tgt, rx255_off
-  rx255_start:
+    length rx260_eos, rx260_tgt
+    gt rx260_pos, rx260_eos, rx260_done
+    set rx260_off, 0
+    lt rx260_pos, 2, rx260_start
+    sub rx260_off, rx260_pos, 1
+    substr rx260_tgt, rx260_tgt, rx260_off
+  rx260_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan258_done
-    goto rxscan258_scan
-  rxscan258_loop:
-    ($P10) = rx255_cur."from"()
+    ne $I10, -1, rxscan263_done
+    goto rxscan263_scan
+  rxscan263_loop:
+    ($P10) = rx260_cur."from"()
     inc $P10
-    set rx255_pos, $P10
-    ge rx255_pos, rx255_eos, rxscan258_done
-  rxscan258_scan:
-    set_addr $I10, rxscan258_loop
-    rx255_cur."!mark_push"(0, rx255_pos, $I10)
-  rxscan258_done:
+    set rx260_pos, $P10
+    ge rx260_pos, rx260_eos, rxscan263_done
+  rxscan263_scan:
+    set_addr $I10, rxscan263_loop
+    rx260_cur."!mark_push"(0, rx260_pos, $I10)
+  rxscan263_done:
 .annotate 'line', 86
   # rx subcapture "sym"
-    set_addr $I10, rxcap_260_fail
-    rx255_cur."!mark_push"(0, rx255_pos, $I10)
-  alt259_0:
-    set_addr $I10, alt259_1
-    rx255_cur."!mark_push"(0, rx255_pos, $I10)
+    set_addr $I10, rxcap_265_fail
+    rx260_cur."!mark_push"(0, rx260_pos, $I10)
+  alt264_0:
+    set_addr $I10, alt264_1
+    rx260_cur."!mark_push"(0, rx260_pos, $I10)
   # rx literal  "<<"
-    add $I11, rx255_pos, 2
-    gt $I11, rx255_eos, rx255_fail
-    sub $I11, rx255_pos, rx255_off
-    substr $S10, rx255_tgt, $I11, 2
-    ne $S10, "<<", rx255_fail
-    add rx255_pos, 2
-    goto alt259_end
-  alt259_1:
+    add $I11, rx260_pos, 2
+    gt $I11, rx260_eos, rx260_fail
+    sub $I11, rx260_pos, rx260_off
+    substr $S10, rx260_tgt, $I11, 2
+    ne $S10, "<<", rx260_fail
+    add rx260_pos, 2
+    goto alt264_end
+  alt264_1:
   # rx literal  unicode:"\x{ab}"
-    add $I11, rx255_pos, 1
-    gt $I11, rx255_eos, rx255_fail
-    sub $I11, rx255_pos, rx255_off
-    substr $S10, rx255_tgt, $I11, 1
-    ne $S10, unicode:"\x{ab}", rx255_fail
-    add rx255_pos, 1
-  alt259_end:
-    set_addr $I10, rxcap_260_fail
-    ($I12, $I11) = rx255_cur."!mark_peek"($I10)
-    rx255_cur."!cursor_pos"($I11)
-    ($P10) = rx255_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx255_pos, "")
-    rx255_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx260_pos, 1
+    gt $I11, rx260_eos, rx260_fail
+    sub $I11, rx260_pos, rx260_off
+    substr $S10, rx260_tgt, $I11, 1
+    ne $S10, unicode:"\x{ab}", rx260_fail
+    add rx260_pos, 1
+  alt264_end:
+    set_addr $I10, rxcap_265_fail
+    ($I12, $I11) = rx260_cur."!mark_peek"($I10)
+    rx260_cur."!cursor_pos"($I11)
+    ($P10) = rx260_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx260_pos, "")
+    rx260_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_260_done
-  rxcap_260_fail:
-    goto rx255_fail
-  rxcap_260_done:
+    goto rxcap_265_done
+  rxcap_265_fail:
+    goto rx260_fail
+  rxcap_265_done:
   # rx pass
-    rx255_cur."!cursor_pass"(rx255_pos, "metachar:sym<lwb>")
-    rx255_cur."!cursor_debug"("PASS  ", "metachar:sym<lwb>", " at pos=", rx255_pos)
-    .return (rx255_cur)
-  rx255_fail:
+    rx260_cur."!cursor_pass"(rx260_pos, "metachar:sym<lwb>")
+    rx260_cur."!cursor_debug"("PASS  ", "metachar:sym<lwb>", " at pos=", rx260_pos)
+    .return (rx260_cur)
+  rx260_fail:
 .annotate 'line', 3
-    (rx255_rep, rx255_pos, $I10, $P10) = rx255_cur."!mark_fail"(0)
-    lt rx255_pos, -1, rx255_done
-    eq rx255_pos, -1, rx255_fail
+    (rx260_rep, rx260_pos, $I10, $P10) = rx260_cur."!mark_fail"(0)
+    lt rx260_pos, -1, rx260_done
+    eq rx260_pos, -1, rx260_fail
     jump $I10
-  rx255_done:
-    rx255_cur."!cursor_fail"()
-    rx255_cur."!cursor_debug"("FAIL  ", "metachar:sym<lwb>")
-    .return (rx255_cur)
+  rx260_done:
+    rx260_cur."!cursor_fail"()
+    rx260_cur."!cursor_debug"("FAIL  ", "metachar:sym<lwb>")
+    .return (rx260_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<lwb>"  :subid("74_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<lwb>"  :subid("74_1275811476.7961") :method
 .annotate 'line', 3
-    new $P257, "ResizablePMCArray"
-    push $P257, unicode:"\x{ab}"
-    push $P257, "<<"
-    .return ($P257)
+    new $P262, "ResizablePMCArray"
+    push $P262, unicode:"\x{ab}"
+    push $P262, "<<"
+    .return ($P262)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<rwb>"  :subid("75_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<rwb>"  :subid("75_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx262_tgt
-    .local int rx262_pos
-    .local int rx262_off
-    .local int rx262_eos
-    .local int rx262_rep
-    .local pmc rx262_cur
-    (rx262_cur, rx262_pos, rx262_tgt) = self."!cursor_start"()
-    rx262_cur."!cursor_debug"("START ", "metachar:sym<rwb>")
-    .lex unicode:"$\x{a2}", rx262_cur
+    .local string rx267_tgt
+    .local int rx267_pos
+    .local int rx267_off
+    .local int rx267_eos
+    .local int rx267_rep
+    .local pmc rx267_cur
+    (rx267_cur, rx267_pos, rx267_tgt) = self."!cursor_start"()
+    rx267_cur."!cursor_debug"("START ", "metachar:sym<rwb>")
+    .lex unicode:"$\x{a2}", rx267_cur
     .local pmc match
     .lex "$/", match
-    length rx262_eos, rx262_tgt
-    set rx262_off, 0
-    lt rx262_pos, 2, rx262_start
-    sub rx262_off, rx262_pos, 1
-    substr rx262_tgt, rx262_tgt, rx262_off
-  rx262_start:
+    length rx267_eos, rx267_tgt
+    gt rx267_pos, rx267_eos, rx267_done
+    set rx267_off, 0
+    lt rx267_pos, 2, rx267_start
+    sub rx267_off, rx267_pos, 1
+    substr rx267_tgt, rx267_tgt, rx267_off
+  rx267_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan265_done
-    goto rxscan265_scan
-  rxscan265_loop:
-    ($P10) = rx262_cur."from"()
+    ne $I10, -1, rxscan270_done
+    goto rxscan270_scan
+  rxscan270_loop:
+    ($P10) = rx267_cur."from"()
     inc $P10
-    set rx262_pos, $P10
-    ge rx262_pos, rx262_eos, rxscan265_done
-  rxscan265_scan:
-    set_addr $I10, rxscan265_loop
-    rx262_cur."!mark_push"(0, rx262_pos, $I10)
-  rxscan265_done:
+    set rx267_pos, $P10
+    ge rx267_pos, rx267_eos, rxscan270_done
+  rxscan270_scan:
+    set_addr $I10, rxscan270_loop
+    rx267_cur."!mark_push"(0, rx267_pos, $I10)
+  rxscan270_done:
 .annotate 'line', 87
   # rx subcapture "sym"
-    set_addr $I10, rxcap_267_fail
-    rx262_cur."!mark_push"(0, rx262_pos, $I10)
-  alt266_0:
-    set_addr $I10, alt266_1
-    rx262_cur."!mark_push"(0, rx262_pos, $I10)
+    set_addr $I10, rxcap_272_fail
+    rx267_cur."!mark_push"(0, rx267_pos, $I10)
+  alt271_0:
+    set_addr $I10, alt271_1
+    rx267_cur."!mark_push"(0, rx267_pos, $I10)
   # rx literal  ">>"
-    add $I11, rx262_pos, 2
-    gt $I11, rx262_eos, rx262_fail
-    sub $I11, rx262_pos, rx262_off
-    substr $S10, rx262_tgt, $I11, 2
-    ne $S10, ">>", rx262_fail
-    add rx262_pos, 2
-    goto alt266_end
-  alt266_1:
+    add $I11, rx267_pos, 2
+    gt $I11, rx267_eos, rx267_fail
+    sub $I11, rx267_pos, rx267_off
+    substr $S10, rx267_tgt, $I11, 2
+    ne $S10, ">>", rx267_fail
+    add rx267_pos, 2
+    goto alt271_end
+  alt271_1:
   # rx literal  unicode:"\x{bb}"
-    add $I11, rx262_pos, 1
-    gt $I11, rx262_eos, rx262_fail
-    sub $I11, rx262_pos, rx262_off
-    substr $S10, rx262_tgt, $I11, 1
-    ne $S10, unicode:"\x{bb}", rx262_fail
-    add rx262_pos, 1
-  alt266_end:
-    set_addr $I10, rxcap_267_fail
-    ($I12, $I11) = rx262_cur."!mark_peek"($I10)
-    rx262_cur."!cursor_pos"($I11)
-    ($P10) = rx262_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx262_pos, "")
-    rx262_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx267_pos, 1
+    gt $I11, rx267_eos, rx267_fail
+    sub $I11, rx267_pos, rx267_off
+    substr $S10, rx267_tgt, $I11, 1
+    ne $S10, unicode:"\x{bb}", rx267_fail
+    add rx267_pos, 1
+  alt271_end:
+    set_addr $I10, rxcap_272_fail
+    ($I12, $I11) = rx267_cur."!mark_peek"($I10)
+    rx267_cur."!cursor_pos"($I11)
+    ($P10) = rx267_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx267_pos, "")
+    rx267_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_267_done
-  rxcap_267_fail:
-    goto rx262_fail
-  rxcap_267_done:
+    goto rxcap_272_done
+  rxcap_272_fail:
+    goto rx267_fail
+  rxcap_272_done:
   # rx pass
-    rx262_cur."!cursor_pass"(rx262_pos, "metachar:sym<rwb>")
-    rx262_cur."!cursor_debug"("PASS  ", "metachar:sym<rwb>", " at pos=", rx262_pos)
-    .return (rx262_cur)
-  rx262_fail:
+    rx267_cur."!cursor_pass"(rx267_pos, "metachar:sym<rwb>")
+    rx267_cur."!cursor_debug"("PASS  ", "metachar:sym<rwb>", " at pos=", rx267_pos)
+    .return (rx267_cur)
+  rx267_fail:
 .annotate 'line', 3
-    (rx262_rep, rx262_pos, $I10, $P10) = rx262_cur."!mark_fail"(0)
-    lt rx262_pos, -1, rx262_done
-    eq rx262_pos, -1, rx262_fail
+    (rx267_rep, rx267_pos, $I10, $P10) = rx267_cur."!mark_fail"(0)
+    lt rx267_pos, -1, rx267_done
+    eq rx267_pos, -1, rx267_fail
     jump $I10
-  rx262_done:
-    rx262_cur."!cursor_fail"()
-    rx262_cur."!cursor_debug"("FAIL  ", "metachar:sym<rwb>")
-    .return (rx262_cur)
+  rx267_done:
+    rx267_cur."!cursor_fail"()
+    rx267_cur."!cursor_debug"("FAIL  ", "metachar:sym<rwb>")
+    .return (rx267_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<rwb>"  :subid("76_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<rwb>"  :subid("76_1275811476.7961") :method
 .annotate 'line', 3
-    new $P264, "ResizablePMCArray"
-    push $P264, unicode:"\x{bb}"
-    push $P264, ">>"
-    .return ($P264)
+    new $P269, "ResizablePMCArray"
+    push $P269, unicode:"\x{bb}"
+    push $P269, ">>"
+    .return ($P269)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<bs>"  :subid("77_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<bs>"  :subid("77_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx269_tgt
-    .local int rx269_pos
-    .local int rx269_off
-    .local int rx269_eos
-    .local int rx269_rep
-    .local pmc rx269_cur
-    (rx269_cur, rx269_pos, rx269_tgt) = self."!cursor_start"()
-    rx269_cur."!cursor_debug"("START ", "metachar:sym<bs>")
-    .lex unicode:"$\x{a2}", rx269_cur
+    .local string rx274_tgt
+    .local int rx274_pos
+    .local int rx274_off
+    .local int rx274_eos
+    .local int rx274_rep
+    .local pmc rx274_cur
+    (rx274_cur, rx274_pos, rx274_tgt) = self."!cursor_start"()
+    rx274_cur."!cursor_debug"("START ", "metachar:sym<bs>")
+    .lex unicode:"$\x{a2}", rx274_cur
     .local pmc match
     .lex "$/", match
-    length rx269_eos, rx269_tgt
-    set rx269_off, 0
-    lt rx269_pos, 2, rx269_start
-    sub rx269_off, rx269_pos, 1
-    substr rx269_tgt, rx269_tgt, rx269_off
-  rx269_start:
+    length rx274_eos, rx274_tgt
+    gt rx274_pos, rx274_eos, rx274_done
+    set rx274_off, 0
+    lt rx274_pos, 2, rx274_start
+    sub rx274_off, rx274_pos, 1
+    substr rx274_tgt, rx274_tgt, rx274_off
+  rx274_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan273_done
-    goto rxscan273_scan
-  rxscan273_loop:
-    ($P10) = rx269_cur."from"()
+    ne $I10, -1, rxscan278_done
+    goto rxscan278_scan
+  rxscan278_loop:
+    ($P10) = rx274_cur."from"()
     inc $P10
-    set rx269_pos, $P10
-    ge rx269_pos, rx269_eos, rxscan273_done
-  rxscan273_scan:
-    set_addr $I10, rxscan273_loop
-    rx269_cur."!mark_push"(0, rx269_pos, $I10)
-  rxscan273_done:
+    set rx274_pos, $P10
+    ge rx274_pos, rx274_eos, rxscan278_done
+  rxscan278_scan:
+    set_addr $I10, rxscan278_loop
+    rx274_cur."!mark_push"(0, rx274_pos, $I10)
+  rxscan278_done:
 .annotate 'line', 88
   # rx literal  "\\"
-    add $I11, rx269_pos, 1
-    gt $I11, rx269_eos, rx269_fail
-    sub $I11, rx269_pos, rx269_off
-    substr $S10, rx269_tgt, $I11, 1
-    ne $S10, "\\", rx269_fail
-    add rx269_pos, 1
+    add $I11, rx274_pos, 1
+    gt $I11, rx274_eos, rx274_fail
+    sub $I11, rx274_pos, rx274_off
+    substr $S10, rx274_tgt, $I11, 1
+    ne $S10, "\\", rx274_fail
+    add rx274_pos, 1
   # rx subrule "backslash" subtype=capture negate=
-    rx269_cur."!cursor_pos"(rx269_pos)
-    $P10 = rx269_cur."backslash"()
-    unless $P10, rx269_fail
-    rx269_cur."!mark_push"(0, -1, 0, $P10)
+    rx274_cur."!cursor_pos"(rx274_pos)
+    $P10 = rx274_cur."backslash"()
+    unless $P10, rx274_fail
+    rx274_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backslash")
-    rx269_pos = $P10."pos"()
+    rx274_pos = $P10."pos"()
   # rx pass
-    rx269_cur."!cursor_pass"(rx269_pos, "metachar:sym<bs>")
-    rx269_cur."!cursor_debug"("PASS  ", "metachar:sym<bs>", " at pos=", rx269_pos)
-    .return (rx269_cur)
-  rx269_fail:
+    rx274_cur."!cursor_pass"(rx274_pos, "metachar:sym<bs>")
+    rx274_cur."!cursor_debug"("PASS  ", "metachar:sym<bs>", " at pos=", rx274_pos)
+    .return (rx274_cur)
+  rx274_fail:
 .annotate 'line', 3
-    (rx269_rep, rx269_pos, $I10, $P10) = rx269_cur."!mark_fail"(0)
-    lt rx269_pos, -1, rx269_done
-    eq rx269_pos, -1, rx269_fail
+    (rx274_rep, rx274_pos, $I10, $P10) = rx274_cur."!mark_fail"(0)
+    lt rx274_pos, -1, rx274_done
+    eq rx274_pos, -1, rx274_fail
     jump $I10
-  rx269_done:
-    rx269_cur."!cursor_fail"()
-    rx269_cur."!cursor_debug"("FAIL  ", "metachar:sym<bs>")
-    .return (rx269_cur)
+  rx274_done:
+    rx274_cur."!cursor_fail"()
+    rx274_cur."!cursor_debug"("FAIL  ", "metachar:sym<bs>")
+    .return (rx274_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<bs>"  :subid("78_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<bs>"  :subid("78_1275811476.7961") :method
 .annotate 'line', 3
-    $P271 = self."!PREFIX__!subrule"("backslash", "\\")
-    new $P272, "ResizablePMCArray"
-    push $P272, $P271
-    .return ($P272)
+    $P276 = self."!PREFIX__!subrule"("backslash", "\\")
+    new $P277, "ResizablePMCArray"
+    push $P277, $P276
+    .return ($P277)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<mod>"  :subid("79_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<mod>"  :subid("79_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx275_tgt
-    .local int rx275_pos
-    .local int rx275_off
-    .local int rx275_eos
-    .local int rx275_rep
-    .local pmc rx275_cur
-    (rx275_cur, rx275_pos, rx275_tgt) = self."!cursor_start"()
-    rx275_cur."!cursor_debug"("START ", "metachar:sym<mod>")
-    .lex unicode:"$\x{a2}", rx275_cur
+    .local string rx280_tgt
+    .local int rx280_pos
+    .local int rx280_off
+    .local int rx280_eos
+    .local int rx280_rep
+    .local pmc rx280_cur
+    (rx280_cur, rx280_pos, rx280_tgt) = self."!cursor_start"()
+    rx280_cur."!cursor_debug"("START ", "metachar:sym<mod>")
+    .lex unicode:"$\x{a2}", rx280_cur
     .local pmc match
     .lex "$/", match
-    length rx275_eos, rx275_tgt
-    set rx275_off, 0
-    lt rx275_pos, 2, rx275_start
-    sub rx275_off, rx275_pos, 1
-    substr rx275_tgt, rx275_tgt, rx275_off
-  rx275_start:
+    length rx280_eos, rx280_tgt
+    gt rx280_pos, rx280_eos, rx280_done
+    set rx280_off, 0
+    lt rx280_pos, 2, rx280_start
+    sub rx280_off, rx280_pos, 1
+    substr rx280_tgt, rx280_tgt, rx280_off
+  rx280_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan279_done
-    goto rxscan279_scan
-  rxscan279_loop:
-    ($P10) = rx275_cur."from"()
+    ne $I10, -1, rxscan284_done
+    goto rxscan284_scan
+  rxscan284_loop:
+    ($P10) = rx280_cur."from"()
     inc $P10
-    set rx275_pos, $P10
-    ge rx275_pos, rx275_eos, rxscan279_done
-  rxscan279_scan:
-    set_addr $I10, rxscan279_loop
-    rx275_cur."!mark_push"(0, rx275_pos, $I10)
-  rxscan279_done:
+    set rx280_pos, $P10
+    ge rx280_pos, rx280_eos, rxscan284_done
+  rxscan284_scan:
+    set_addr $I10, rxscan284_loop
+    rx280_cur."!mark_push"(0, rx280_pos, $I10)
+  rxscan284_done:
 .annotate 'line', 89
   # rx subrule "mod_internal" subtype=capture negate=
-    rx275_cur."!cursor_pos"(rx275_pos)
-    $P10 = rx275_cur."mod_internal"()
-    unless $P10, rx275_fail
-    rx275_cur."!mark_push"(0, -1, 0, $P10)
+    rx280_cur."!cursor_pos"(rx280_pos)
+    $P10 = rx280_cur."mod_internal"()
+    unless $P10, rx280_fail
+    rx280_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("mod_internal")
-    rx275_pos = $P10."pos"()
+    rx280_pos = $P10."pos"()
   # rx pass
-    rx275_cur."!cursor_pass"(rx275_pos, "metachar:sym<mod>")
-    rx275_cur."!cursor_debug"("PASS  ", "metachar:sym<mod>", " at pos=", rx275_pos)
-    .return (rx275_cur)
-  rx275_fail:
+    rx280_cur."!cursor_pass"(rx280_pos, "metachar:sym<mod>")
+    rx280_cur."!cursor_debug"("PASS  ", "metachar:sym<mod>", " at pos=", rx280_pos)
+    .return (rx280_cur)
+  rx280_fail:
 .annotate 'line', 3
-    (rx275_rep, rx275_pos, $I10, $P10) = rx275_cur."!mark_fail"(0)
-    lt rx275_pos, -1, rx275_done
-    eq rx275_pos, -1, rx275_fail
+    (rx280_rep, rx280_pos, $I10, $P10) = rx280_cur."!mark_fail"(0)
+    lt rx280_pos, -1, rx280_done
+    eq rx280_pos, -1, rx280_fail
     jump $I10
-  rx275_done:
-    rx275_cur."!cursor_fail"()
-    rx275_cur."!cursor_debug"("FAIL  ", "metachar:sym<mod>")
-    .return (rx275_cur)
+  rx280_done:
+    rx280_cur."!cursor_fail"()
+    rx280_cur."!cursor_debug"("FAIL  ", "metachar:sym<mod>")
+    .return (rx280_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<mod>"  :subid("80_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<mod>"  :subid("80_1275811476.7961") :method
 .annotate 'line', 3
-    $P277 = self."!PREFIX__!subrule"("mod_internal", "")
-    new $P278, "ResizablePMCArray"
-    push $P278, $P277
-    .return ($P278)
+    $P282 = self."!PREFIX__!subrule"("mod_internal", "")
+    new $P283, "ResizablePMCArray"
+    push $P283, $P282
+    .return ($P283)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<~>"  :subid("81_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<~>"  :subid("81_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx281_tgt
-    .local int rx281_pos
-    .local int rx281_off
-    .local int rx281_eos
-    .local int rx281_rep
-    .local pmc rx281_cur
-    (rx281_cur, rx281_pos, rx281_tgt) = self."!cursor_start"()
-    rx281_cur."!cursor_debug"("START ", "metachar:sym<~>")
-    .lex unicode:"$\x{a2}", rx281_cur
+    .local string rx286_tgt
+    .local int rx286_pos
+    .local int rx286_off
+    .local int rx286_eos
+    .local int rx286_rep
+    .local pmc rx286_cur
+    (rx286_cur, rx286_pos, rx286_tgt) = self."!cursor_start"()
+    rx286_cur."!cursor_debug"("START ", "metachar:sym<~>")
+    .lex unicode:"$\x{a2}", rx286_cur
     .local pmc match
     .lex "$/", match
-    length rx281_eos, rx281_tgt
-    set rx281_off, 0
-    lt rx281_pos, 2, rx281_start
-    sub rx281_off, rx281_pos, 1
-    substr rx281_tgt, rx281_tgt, rx281_off
-  rx281_start:
+    length rx286_eos, rx286_tgt
+    gt rx286_pos, rx286_eos, rx286_done
+    set rx286_off, 0
+    lt rx286_pos, 2, rx286_start
+    sub rx286_off, rx286_pos, 1
+    substr rx286_tgt, rx286_tgt, rx286_off
+  rx286_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan285_done
-    goto rxscan285_scan
-  rxscan285_loop:
-    ($P10) = rx281_cur."from"()
+    ne $I10, -1, rxscan290_done
+    goto rxscan290_scan
+  rxscan290_loop:
+    ($P10) = rx286_cur."from"()
     inc $P10
-    set rx281_pos, $P10
-    ge rx281_pos, rx281_eos, rxscan285_done
-  rxscan285_scan:
-    set_addr $I10, rxscan285_loop
-    rx281_cur."!mark_push"(0, rx281_pos, $I10)
-  rxscan285_done:
+    set rx286_pos, $P10
+    ge rx286_pos, rx286_eos, rxscan290_done
+  rxscan290_scan:
+    set_addr $I10, rxscan290_loop
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
+  rxscan290_done:
 .annotate 'line', 93
   # rx subcapture "sym"
-    set_addr $I10, rxcap_286_fail
-    rx281_cur."!mark_push"(0, rx281_pos, $I10)
+    set_addr $I10, rxcap_291_fail
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
   # rx literal  "~"
-    add $I11, rx281_pos, 1
-    gt $I11, rx281_eos, rx281_fail
-    sub $I11, rx281_pos, rx281_off
-    substr $S10, rx281_tgt, $I11, 1
-    ne $S10, "~", rx281_fail
-    add rx281_pos, 1
-    set_addr $I10, rxcap_286_fail
-    ($I12, $I11) = rx281_cur."!mark_peek"($I10)
-    rx281_cur."!cursor_pos"($I11)
-    ($P10) = rx281_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx281_pos, "")
-    rx281_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx286_pos, 1
+    gt $I11, rx286_eos, rx286_fail
+    sub $I11, rx286_pos, rx286_off
+    substr $S10, rx286_tgt, $I11, 1
+    ne $S10, "~", rx286_fail
+    add rx286_pos, 1
+    set_addr $I10, rxcap_291_fail
+    ($I12, $I11) = rx286_cur."!mark_peek"($I10)
+    rx286_cur."!cursor_pos"($I11)
+    ($P10) = rx286_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx286_pos, "")
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_286_done
-  rxcap_286_fail:
-    goto rx281_fail
-  rxcap_286_done:
+    goto rxcap_291_done
+  rxcap_291_fail:
+    goto rx286_fail
+  rxcap_291_done:
 .annotate 'line', 94
   # rx subrule "ws" subtype=method negate=
-    rx281_cur."!cursor_pos"(rx281_pos)
-    $P10 = rx281_cur."ws"()
-    unless $P10, rx281_fail
-    rx281_pos = $P10."pos"()
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."ws"()
+    unless $P10, rx286_fail
+    rx286_pos = $P10."pos"()
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx281_cur."!cursor_pos"(rx281_pos)
-    $P10 = rx281_cur."quantified_atom"()
-    unless $P10, rx281_fail
-    rx281_cur."!mark_push"(0, -1, 0, $P10)
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."quantified_atom"()
+    unless $P10, rx286_fail
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("GOAL")
-    rx281_pos = $P10."pos"()
+    rx286_pos = $P10."pos"()
 .annotate 'line', 95
   # rx subrule "ws" subtype=method negate=
-    rx281_cur."!cursor_pos"(rx281_pos)
-    $P10 = rx281_cur."ws"()
-    unless $P10, rx281_fail
-    rx281_pos = $P10."pos"()
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."ws"()
+    unless $P10, rx286_fail
+    rx286_pos = $P10."pos"()
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx281_cur."!cursor_pos"(rx281_pos)
-    $P10 = rx281_cur."quantified_atom"()
-    unless $P10, rx281_fail
-    rx281_cur."!mark_push"(0, -1, 0, $P10)
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."quantified_atom"()
+    unless $P10, rx286_fail
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx281_pos = $P10."pos"()
+    rx286_pos = $P10."pos"()
 .annotate 'line', 92
   # rx pass
-    rx281_cur."!cursor_pass"(rx281_pos, "metachar:sym<~>")
-    rx281_cur."!cursor_debug"("PASS  ", "metachar:sym<~>", " at pos=", rx281_pos)
-    .return (rx281_cur)
-  rx281_fail:
+    rx286_cur."!cursor_pass"(rx286_pos, "metachar:sym<~>")
+    rx286_cur."!cursor_debug"("PASS  ", "metachar:sym<~>", " at pos=", rx286_pos)
+    .return (rx286_cur)
+  rx286_fail:
 .annotate 'line', 3
-    (rx281_rep, rx281_pos, $I10, $P10) = rx281_cur."!mark_fail"(0)
-    lt rx281_pos, -1, rx281_done
-    eq rx281_pos, -1, rx281_fail
+    (rx286_rep, rx286_pos, $I10, $P10) = rx286_cur."!mark_fail"(0)
+    lt rx286_pos, -1, rx286_done
+    eq rx286_pos, -1, rx286_fail
     jump $I10
-  rx281_done:
-    rx281_cur."!cursor_fail"()
-    rx281_cur."!cursor_debug"("FAIL  ", "metachar:sym<~>")
-    .return (rx281_cur)
+  rx286_done:
+    rx286_cur."!cursor_fail"()
+    rx286_cur."!cursor_debug"("FAIL  ", "metachar:sym<~>")
+    .return (rx286_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<~>"  :subid("82_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<~>"  :subid("82_1275811476.7961") :method
 .annotate 'line', 3
-    $P283 = self."!PREFIX__!subrule"("", "~")
-    new $P284, "ResizablePMCArray"
-    push $P284, $P283
-    .return ($P284)
+    $P288 = self."!PREFIX__!subrule"("ws", "~")
+    new $P289, "ResizablePMCArray"
+    push $P289, $P288
+    .return ($P289)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<{*}>"  :subid("83_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<{*}>"  :subid("83_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx288_tgt
-    .local int rx288_pos
-    .local int rx288_off
-    .local int rx288_eos
-    .local int rx288_rep
-    .local pmc rx288_cur
-    (rx288_cur, rx288_pos, rx288_tgt) = self."!cursor_start"()
-    rx288_cur."!cursor_debug"("START ", "metachar:sym<{*}>")
-    rx288_cur."!cursor_caparray"("key")
-    .lex unicode:"$\x{a2}", rx288_cur
+    .local string rx293_tgt
+    .local int rx293_pos
+    .local int rx293_off
+    .local int rx293_eos
+    .local int rx293_rep
+    .local pmc rx293_cur
+    (rx293_cur, rx293_pos, rx293_tgt) = self."!cursor_start"()
+    rx293_cur."!cursor_debug"("START ", "metachar:sym<{*}>")
+    rx293_cur."!cursor_caparray"("key")
+    .lex unicode:"$\x{a2}", rx293_cur
     .local pmc match
     .lex "$/", match
-    length rx288_eos, rx288_tgt
-    set rx288_off, 0
-    lt rx288_pos, 2, rx288_start
-    sub rx288_off, rx288_pos, 1
-    substr rx288_tgt, rx288_tgt, rx288_off
-  rx288_start:
+    length rx293_eos, rx293_tgt
+    gt rx293_pos, rx293_eos, rx293_done
+    set rx293_off, 0
+    lt rx293_pos, 2, rx293_start
+    sub rx293_off, rx293_pos, 1
+    substr rx293_tgt, rx293_tgt, rx293_off
+  rx293_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan291_done
-    goto rxscan291_scan
-  rxscan291_loop:
-    ($P10) = rx288_cur."from"()
+    ne $I10, -1, rxscan296_done
+    goto rxscan296_scan
+  rxscan296_loop:
+    ($P10) = rx293_cur."from"()
     inc $P10
-    set rx288_pos, $P10
-    ge rx288_pos, rx288_eos, rxscan291_done
-  rxscan291_scan:
-    set_addr $I10, rxscan291_loop
-    rx288_cur."!mark_push"(0, rx288_pos, $I10)
-  rxscan291_done:
+    set rx293_pos, $P10
+    ge rx293_pos, rx293_eos, rxscan296_done
+  rxscan296_scan:
+    set_addr $I10, rxscan296_loop
+    rx293_cur."!mark_push"(0, rx293_pos, $I10)
+  rxscan296_done:
 .annotate 'line', 99
   # rx subcapture "sym"
-    set_addr $I10, rxcap_292_fail
-    rx288_cur."!mark_push"(0, rx288_pos, $I10)
+    set_addr $I10, rxcap_297_fail
+    rx293_cur."!mark_push"(0, rx293_pos, $I10)
   # rx literal  "{*}"
-    add $I11, rx288_pos, 3
-    gt $I11, rx288_eos, rx288_fail
-    sub $I11, rx288_pos, rx288_off
-    substr $S10, rx288_tgt, $I11, 3
-    ne $S10, "{*}", rx288_fail
-    add rx288_pos, 3
-    set_addr $I10, rxcap_292_fail
-    ($I12, $I11) = rx288_cur."!mark_peek"($I10)
-    rx288_cur."!cursor_pos"($I11)
-    ($P10) = rx288_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx288_pos, "")
-    rx288_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx293_pos, 3
+    gt $I11, rx293_eos, rx293_fail
+    sub $I11, rx293_pos, rx293_off
+    substr $S10, rx293_tgt, $I11, 3
+    ne $S10, "{*}", rx293_fail
+    add rx293_pos, 3
+    set_addr $I10, rxcap_297_fail
+    ($I12, $I11) = rx293_cur."!mark_peek"($I10)
+    rx293_cur."!cursor_pos"($I11)
+    ($P10) = rx293_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx293_pos, "")
+    rx293_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_292_done
-  rxcap_292_fail:
-    goto rx288_fail
-  rxcap_292_done:
+    goto rxcap_297_done
+  rxcap_297_fail:
+    goto rx293_fail
+  rxcap_297_done:
 .annotate 'line', 100
-  # rx rxquantr293 ** 0..1
-    set_addr $I303, rxquantr293_done
-    rx288_cur."!mark_push"(0, rx288_pos, $I303)
-  rxquantr293_loop:
-  # rx rxquantr294 ** 0..*
-    set_addr $I295, rxquantr294_done
-    rx288_cur."!mark_push"(0, rx288_pos, $I295)
-  rxquantr294_loop:
+  # rx rxquantr298 ** 0..1
+    set_addr $I308, rxquantr298_done
+    rx293_cur."!mark_push"(0, rx293_pos, $I308)
+  rxquantr298_loop:
+  # rx rxquantr299 ** 0..*
+    set_addr $I300, rxquantr299_done
+    rx293_cur."!mark_push"(0, rx293_pos, $I300)
+  rxquantr299_loop:
   # rx enumcharlist negate=0 
-    ge rx288_pos, rx288_eos, rx288_fail
-    sub $I10, rx288_pos, rx288_off
-    substr $S10, rx288_tgt, $I10, 1
+    ge rx293_pos, rx293_eos, rx293_fail
+    sub $I10, rx293_pos, rx293_off
+    substr $S10, rx293_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx288_fail
-    inc rx288_pos
-    (rx288_rep) = rx288_cur."!mark_commit"($I295)
-    rx288_cur."!mark_push"(rx288_rep, rx288_pos, $I295)
-    goto rxquantr294_loop
-  rxquantr294_done:
+    lt $I11, 0, rx293_fail
+    inc rx293_pos
+    (rx293_rep) = rx293_cur."!mark_commit"($I300)
+    rx293_cur."!mark_push"(rx293_rep, rx293_pos, $I300)
+    goto rxquantr299_loop
+  rxquantr299_done:
   # rx literal  "#= "
-    add $I11, rx288_pos, 3
-    gt $I11, rx288_eos, rx288_fail
-    sub $I11, rx288_pos, rx288_off
-    substr $S10, rx288_tgt, $I11, 3
-    ne $S10, "#= ", rx288_fail
-    add rx288_pos, 3
-  # rx rxquantr296 ** 0..*
-    set_addr $I297, rxquantr296_done
-    rx288_cur."!mark_push"(0, rx288_pos, $I297)
-  rxquantr296_loop:
+    add $I11, rx293_pos, 3
+    gt $I11, rx293_eos, rx293_fail
+    sub $I11, rx293_pos, rx293_off
+    substr $S10, rx293_tgt, $I11, 3
+    ne $S10, "#= ", rx293_fail
+    add rx293_pos, 3
+  # rx rxquantr301 ** 0..*
+    set_addr $I302, rxquantr301_done
+    rx293_cur."!mark_push"(0, rx293_pos, $I302)
+  rxquantr301_loop:
   # rx enumcharlist negate=0 
-    ge rx288_pos, rx288_eos, rx288_fail
-    sub $I10, rx288_pos, rx288_off
-    substr $S10, rx288_tgt, $I10, 1
+    ge rx293_pos, rx293_eos, rx293_fail
+    sub $I10, rx293_pos, rx293_off
+    substr $S10, rx293_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx288_fail
-    inc rx288_pos
-    (rx288_rep) = rx288_cur."!mark_commit"($I297)
-    rx288_cur."!mark_push"(rx288_rep, rx288_pos, $I297)
-    goto rxquantr296_loop
-  rxquantr296_done:
+    lt $I11, 0, rx293_fail
+    inc rx293_pos
+    (rx293_rep) = rx293_cur."!mark_commit"($I302)
+    rx293_cur."!mark_push"(rx293_rep, rx293_pos, $I302)
+    goto rxquantr301_loop
+  rxquantr301_done:
   # rx subcapture "key"
-    set_addr $I10, rxcap_302_fail
-    rx288_cur."!mark_push"(0, rx288_pos, $I10)
+    set_addr $I10, rxcap_307_fail
+    rx293_cur."!mark_push"(0, rx293_pos, $I10)
   # rx charclass_q S r 1..-1
-    sub $I10, rx288_pos, rx288_off
-    find_cclass $I11, 32, rx288_tgt, $I10, rx288_eos
+    sub $I10, rx293_pos, rx293_off
+    find_cclass $I11, 32, rx293_tgt, $I10, rx293_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx288_fail
-    add rx288_pos, rx288_off, $I11
-  # rx rxquantr298 ** 0..*
-    set_addr $I301, rxquantr298_done
-    rx288_cur."!mark_push"(0, rx288_pos, $I301)
-  rxquantr298_loop:
-  # rx rxquantr299 ** 1..*
-    set_addr $I300, rxquantr299_done
-    rx288_cur."!mark_push"(0, -1, $I300)
-  rxquantr299_loop:
+    lt $I11, $I12, rx293_fail
+    add rx293_pos, rx293_off, $I11
+  # rx rxquantr303 ** 0..*
+    set_addr $I306, rxquantr303_done
+    rx293_cur."!mark_push"(0, rx293_pos, $I306)
+  rxquantr303_loop:
+  # rx rxquantr304 ** 1..*
+    set_addr $I305, rxquantr304_done
+    rx293_cur."!mark_push"(0, -1, $I305)
+  rxquantr304_loop:
   # rx enumcharlist negate=0 
-    ge rx288_pos, rx288_eos, rx288_fail
-    sub $I10, rx288_pos, rx288_off
-    substr $S10, rx288_tgt, $I10, 1
+    ge rx293_pos, rx293_eos, rx293_fail
+    sub $I10, rx293_pos, rx293_off
+    substr $S10, rx293_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx288_fail
-    inc rx288_pos
-    (rx288_rep) = rx288_cur."!mark_commit"($I300)
-    rx288_cur."!mark_push"(rx288_rep, rx288_pos, $I300)
-    goto rxquantr299_loop
-  rxquantr299_done:
+    lt $I11, 0, rx293_fail
+    inc rx293_pos
+    (rx293_rep) = rx293_cur."!mark_commit"($I305)
+    rx293_cur."!mark_push"(rx293_rep, rx293_pos, $I305)
+    goto rxquantr304_loop
+  rxquantr304_done:
   # rx charclass_q S r 1..-1
-    sub $I10, rx288_pos, rx288_off
-    find_cclass $I11, 32, rx288_tgt, $I10, rx288_eos
+    sub $I10, rx293_pos, rx293_off
+    find_cclass $I11, 32, rx293_tgt, $I10, rx293_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx288_fail
-    add rx288_pos, rx288_off, $I11
-    (rx288_rep) = rx288_cur."!mark_commit"($I301)
-    rx288_cur."!mark_push"(rx288_rep, rx288_pos, $I301)
-    goto rxquantr298_loop
-  rxquantr298_done:
-    set_addr $I10, rxcap_302_fail
-    ($I12, $I11) = rx288_cur."!mark_peek"($I10)
-    rx288_cur."!cursor_pos"($I11)
-    ($P10) = rx288_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx288_pos, "")
-    rx288_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx293_fail
+    add rx293_pos, rx293_off, $I11
+    (rx293_rep) = rx293_cur."!mark_commit"($I306)
+    rx293_cur."!mark_push"(rx293_rep, rx293_pos, $I306)
+    goto rxquantr303_loop
+  rxquantr303_done:
+    set_addr $I10, rxcap_307_fail
+    ($I12, $I11) = rx293_cur."!mark_peek"($I10)
+    rx293_cur."!cursor_pos"($I11)
+    ($P10) = rx293_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx293_pos, "")
+    rx293_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("key")
-    goto rxcap_302_done
-  rxcap_302_fail:
-    goto rx288_fail
-  rxcap_302_done:
-    (rx288_rep) = rx288_cur."!mark_commit"($I303)
-  rxquantr293_done:
+    goto rxcap_307_done
+  rxcap_307_fail:
+    goto rx293_fail
+  rxcap_307_done:
+    (rx293_rep) = rx293_cur."!mark_commit"($I308)
+  rxquantr298_done:
 .annotate 'line', 98
   # rx pass
-    rx288_cur."!cursor_pass"(rx288_pos, "metachar:sym<{*}>")
-    rx288_cur."!cursor_debug"("PASS  ", "metachar:sym<{*}>", " at pos=", rx288_pos)
-    .return (rx288_cur)
-  rx288_fail:
+    rx293_cur."!cursor_pass"(rx293_pos, "metachar:sym<{*}>")
+    rx293_cur."!cursor_debug"("PASS  ", "metachar:sym<{*}>", " at pos=", rx293_pos)
+    .return (rx293_cur)
+  rx293_fail:
 .annotate 'line', 3
-    (rx288_rep, rx288_pos, $I10, $P10) = rx288_cur."!mark_fail"(0)
-    lt rx288_pos, -1, rx288_done
-    eq rx288_pos, -1, rx288_fail
+    (rx293_rep, rx293_pos, $I10, $P10) = rx293_cur."!mark_fail"(0)
+    lt rx293_pos, -1, rx293_done
+    eq rx293_pos, -1, rx293_fail
     jump $I10
-  rx288_done:
-    rx288_cur."!cursor_fail"()
-    rx288_cur."!cursor_debug"("FAIL  ", "metachar:sym<{*}>")
-    .return (rx288_cur)
+  rx293_done:
+    rx293_cur."!cursor_fail"()
+    rx293_cur."!cursor_debug"("FAIL  ", "metachar:sym<{*}>")
+    .return (rx293_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<{*}>"  :subid("84_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<{*}>"  :subid("84_1275811476.7961") :method
 .annotate 'line', 3
-    new $P290, "ResizablePMCArray"
-    push $P290, "{*}"
-    .return ($P290)
+    new $P295, "ResizablePMCArray"
+    push $P295, "{*}"
+    .return ($P295)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<assert>"  :subid("85_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<assert>"  :subid("85_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx305_tgt
-    .local int rx305_pos
-    .local int rx305_off
-    .local int rx305_eos
-    .local int rx305_rep
-    .local pmc rx305_cur
-    (rx305_cur, rx305_pos, rx305_tgt) = self."!cursor_start"()
-    rx305_cur."!cursor_debug"("START ", "metachar:sym<assert>")
-    .lex unicode:"$\x{a2}", rx305_cur
+    .local string rx310_tgt
+    .local int rx310_pos
+    .local int rx310_off
+    .local int rx310_eos
+    .local int rx310_rep
+    .local pmc rx310_cur
+    (rx310_cur, rx310_pos, rx310_tgt) = self."!cursor_start"()
+    rx310_cur."!cursor_debug"("START ", "metachar:sym<assert>")
+    .lex unicode:"$\x{a2}", rx310_cur
     .local pmc match
     .lex "$/", match
-    length rx305_eos, rx305_tgt
-    set rx305_off, 0
-    lt rx305_pos, 2, rx305_start
-    sub rx305_off, rx305_pos, 1
-    substr rx305_tgt, rx305_tgt, rx305_off
-  rx305_start:
+    length rx310_eos, rx310_tgt
+    gt rx310_pos, rx310_eos, rx310_done
+    set rx310_off, 0
+    lt rx310_pos, 2, rx310_start
+    sub rx310_off, rx310_pos, 1
+    substr rx310_tgt, rx310_tgt, rx310_off
+  rx310_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan309_done
-    goto rxscan309_scan
-  rxscan309_loop:
-    ($P10) = rx305_cur."from"()
+    ne $I10, -1, rxscan314_done
+    goto rxscan314_scan
+  rxscan314_loop:
+    ($P10) = rx310_cur."from"()
     inc $P10
-    set rx305_pos, $P10
-    ge rx305_pos, rx305_eos, rxscan309_done
-  rxscan309_scan:
-    set_addr $I10, rxscan309_loop
-    rx305_cur."!mark_push"(0, rx305_pos, $I10)
-  rxscan309_done:
+    set rx310_pos, $P10
+    ge rx310_pos, rx310_eos, rxscan314_done
+  rxscan314_scan:
+    set_addr $I10, rxscan314_loop
+    rx310_cur."!mark_push"(0, rx310_pos, $I10)
+  rxscan314_done:
 .annotate 'line', 103
   # rx literal  "<"
-    add $I11, rx305_pos, 1
-    gt $I11, rx305_eos, rx305_fail
-    sub $I11, rx305_pos, rx305_off
-    substr $S10, rx305_tgt, $I11, 1
-    ne $S10, "<", rx305_fail
-    add rx305_pos, 1
+    add $I11, rx310_pos, 1
+    gt $I11, rx310_eos, rx310_fail
+    sub $I11, rx310_pos, rx310_off
+    substr $S10, rx310_tgt, $I11, 1
+    ne $S10, "<", rx310_fail
+    add rx310_pos, 1
   # rx subrule "assertion" subtype=capture negate=
-    rx305_cur."!cursor_pos"(rx305_pos)
-    $P10 = rx305_cur."assertion"()
-    unless $P10, rx305_fail
-    rx305_cur."!mark_push"(0, -1, 0, $P10)
+    rx310_cur."!cursor_pos"(rx310_pos)
+    $P10 = rx310_cur."assertion"()
+    unless $P10, rx310_fail
+    rx310_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx305_pos = $P10."pos"()
-  alt310_0:
+    rx310_pos = $P10."pos"()
+  alt315_0:
 .annotate 'line', 104
-    set_addr $I10, alt310_1
-    rx305_cur."!mark_push"(0, rx305_pos, $I10)
+    set_addr $I10, alt315_1
+    rx310_cur."!mark_push"(0, rx310_pos, $I10)
   # rx literal  ">"
-    add $I11, rx305_pos, 1
-    gt $I11, rx305_eos, rx305_fail
-    sub $I11, rx305_pos, rx305_off
-    substr $S10, rx305_tgt, $I11, 1
-    ne $S10, ">", rx305_fail
-    add rx305_pos, 1
-    goto alt310_end
-  alt310_1:
+    add $I11, rx310_pos, 1
+    gt $I11, rx310_eos, rx310_fail
+    sub $I11, rx310_pos, rx310_off
+    substr $S10, rx310_tgt, $I11, 1
+    ne $S10, ">", rx310_fail
+    add rx310_pos, 1
+    goto alt315_end
+  alt315_1:
   # rx subrule "panic" subtype=method negate=
-    rx305_cur."!cursor_pos"(rx305_pos)
-    $P10 = rx305_cur."panic"("regex assertion not terminated by angle bracket")
-    unless $P10, rx305_fail
-    rx305_pos = $P10."pos"()
-  alt310_end:
+    rx310_cur."!cursor_pos"(rx310_pos)
+    $P10 = rx310_cur."panic"("regex assertion not terminated by angle bracket")
+    unless $P10, rx310_fail
+    rx310_pos = $P10."pos"()
+  alt315_end:
 .annotate 'line', 102
   # rx pass
-    rx305_cur."!cursor_pass"(rx305_pos, "metachar:sym<assert>")
-    rx305_cur."!cursor_debug"("PASS  ", "metachar:sym<assert>", " at pos=", rx305_pos)
-    .return (rx305_cur)
-  rx305_fail:
+    rx310_cur."!cursor_pass"(rx310_pos, "metachar:sym<assert>")
+    rx310_cur."!cursor_debug"("PASS  ", "metachar:sym<assert>", " at pos=", rx310_pos)
+    .return (rx310_cur)
+  rx310_fail:
 .annotate 'line', 3
-    (rx305_rep, rx305_pos, $I10, $P10) = rx305_cur."!mark_fail"(0)
-    lt rx305_pos, -1, rx305_done
-    eq rx305_pos, -1, rx305_fail
+    (rx310_rep, rx310_pos, $I10, $P10) = rx310_cur."!mark_fail"(0)
+    lt rx310_pos, -1, rx310_done
+    eq rx310_pos, -1, rx310_fail
     jump $I10
-  rx305_done:
-    rx305_cur."!cursor_fail"()
-    rx305_cur."!cursor_debug"("FAIL  ", "metachar:sym<assert>")
-    .return (rx305_cur)
+  rx310_done:
+    rx310_cur."!cursor_fail"()
+    rx310_cur."!cursor_debug"("FAIL  ", "metachar:sym<assert>")
+    .return (rx310_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<assert>"  :subid("86_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<assert>"  :subid("86_1275811476.7961") :method
 .annotate 'line', 3
-    $P307 = self."!PREFIX__!subrule"("assertion", "<")
-    new $P308, "ResizablePMCArray"
-    push $P308, $P307
-    .return ($P308)
+    $P312 = self."!PREFIX__!subrule"("assertion", "<")
+    new $P313, "ResizablePMCArray"
+    push $P313, $P312
+    .return ($P313)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<var>"  :subid("87_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<var>"  :subid("87_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx312_tgt
-    .local int rx312_pos
-    .local int rx312_off
-    .local int rx312_eos
-    .local int rx312_rep
-    .local pmc rx312_cur
-    (rx312_cur, rx312_pos, rx312_tgt) = self."!cursor_start"()
-    rx312_cur."!cursor_debug"("START ", "metachar:sym<var>")
-    rx312_cur."!cursor_caparray"("quantified_atom")
-    .lex unicode:"$\x{a2}", rx312_cur
+    .local string rx317_tgt
+    .local int rx317_pos
+    .local int rx317_off
+    .local int rx317_eos
+    .local int rx317_rep
+    .local pmc rx317_cur
+    (rx317_cur, rx317_pos, rx317_tgt) = self."!cursor_start"()
+    rx317_cur."!cursor_debug"("START ", "metachar:sym<var>")
+    rx317_cur."!cursor_caparray"("quantified_atom")
+    .lex unicode:"$\x{a2}", rx317_cur
     .local pmc match
     .lex "$/", match
-    length rx312_eos, rx312_tgt
-    set rx312_off, 0
-    lt rx312_pos, 2, rx312_start
-    sub rx312_off, rx312_pos, 1
-    substr rx312_tgt, rx312_tgt, rx312_off
-  rx312_start:
+    length rx317_eos, rx317_tgt
+    gt rx317_pos, rx317_eos, rx317_done
+    set rx317_off, 0
+    lt rx317_pos, 2, rx317_start
+    sub rx317_off, rx317_pos, 1
+    substr rx317_tgt, rx317_tgt, rx317_off
+  rx317_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan315_done
-    goto rxscan315_scan
-  rxscan315_loop:
-    ($P10) = rx312_cur."from"()
+    ne $I10, -1, rxscan320_done
+    goto rxscan320_scan
+  rxscan320_loop:
+    ($P10) = rx317_cur."from"()
     inc $P10
-    set rx312_pos, $P10
-    ge rx312_pos, rx312_eos, rxscan315_done
-  rxscan315_scan:
-    set_addr $I10, rxscan315_loop
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
-  rxscan315_done:
-  alt316_0:
+    set rx317_pos, $P10
+    ge rx317_pos, rx317_eos, rxscan320_done
+  rxscan320_scan:
+    set_addr $I10, rxscan320_loop
+    rx317_cur."!mark_push"(0, rx317_pos, $I10)
+  rxscan320_done:
+  alt321_0:
 .annotate 'line', 108
-    set_addr $I10, alt316_1
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+    set_addr $I10, alt321_1
+    rx317_cur."!mark_push"(0, rx317_pos, $I10)
 .annotate 'line', 109
   # rx literal  "$<"
-    add $I11, rx312_pos, 2
-    gt $I11, rx312_eos, rx312_fail
-    sub $I11, rx312_pos, rx312_off
-    substr $S10, rx312_tgt, $I11, 2
-    ne $S10, "$<", rx312_fail
-    add rx312_pos, 2
+    add $I11, rx317_pos, 2
+    gt $I11, rx317_eos, rx317_fail
+    sub $I11, rx317_pos, rx317_off
+    substr $S10, rx317_tgt, $I11, 2
+    ne $S10, "$<", rx317_fail
+    add rx317_pos, 2
   # rx subcapture "name"
-    set_addr $I10, rxcap_319_fail
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
-  # rx rxquantr317 ** 1..*
-    set_addr $I318, rxquantr317_done
-    rx312_cur."!mark_push"(0, -1, $I318)
-  rxquantr317_loop:
+    set_addr $I10, rxcap_324_fail
+    rx317_cur."!mark_push"(0, rx317_pos, $I10)
+  # rx rxquantr322 ** 1..*
+    set_addr $I323, rxquantr322_done
+    rx317_cur."!mark_push"(0, -1, $I323)
+  rxquantr322_loop:
   # rx enumcharlist negate=1 
-    ge rx312_pos, rx312_eos, rx312_fail
-    sub $I10, rx312_pos, rx312_off
-    substr $S10, rx312_tgt, $I10, 1
+    ge rx317_pos, rx317_eos, rx317_fail
+    sub $I10, rx317_pos, rx317_off
+    substr $S10, rx317_tgt, $I10, 1
     index $I11, ">", $S10
-    ge $I11, 0, rx312_fail
-    inc rx312_pos
-    (rx312_rep) = rx312_cur."!mark_commit"($I318)
-    rx312_cur."!mark_push"(rx312_rep, rx312_pos, $I318)
-    goto rxquantr317_loop
-  rxquantr317_done:
-    set_addr $I10, rxcap_319_fail
-    ($I12, $I11) = rx312_cur."!mark_peek"($I10)
-    rx312_cur."!cursor_pos"($I11)
-    ($P10) = rx312_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx312_pos, "")
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    ge $I11, 0, rx317_fail
+    inc rx317_pos
+    (rx317_rep) = rx317_cur."!mark_commit"($I323)
+    rx317_cur."!mark_push"(rx317_rep, rx317_pos, $I323)
+    goto rxquantr322_loop
+  rxquantr322_done:
+    set_addr $I10, rxcap_324_fail
+    ($I12, $I11) = rx317_cur."!mark_peek"($I10)
+    rx317_cur."!cursor_pos"($I11)
+    ($P10) = rx317_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx317_pos, "")
+    rx317_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    goto rxcap_319_done
-  rxcap_319_fail:
-    goto rx312_fail
-  rxcap_319_done:
+    goto rxcap_324_done
+  rxcap_324_fail:
+    goto rx317_fail
+  rxcap_324_done:
   # rx literal  ">"
-    add $I11, rx312_pos, 1
-    gt $I11, rx312_eos, rx312_fail
-    sub $I11, rx312_pos, rx312_off
-    substr $S10, rx312_tgt, $I11, 1
-    ne $S10, ">", rx312_fail
-    add rx312_pos, 1
-    goto alt316_end
-  alt316_1:
+    add $I11, rx317_pos, 1
+    gt $I11, rx317_eos, rx317_fail
+    sub $I11, rx317_pos, rx317_off
+    substr $S10, rx317_tgt, $I11, 1
+    ne $S10, ">", rx317_fail
+    add rx317_pos, 1
+    goto alt321_end
+  alt321_1:
 .annotate 'line', 110
   # rx literal  "$"
-    add $I11, rx312_pos, 1
-    gt $I11, rx312_eos, rx312_fail
-    sub $I11, rx312_pos, rx312_off
-    substr $S10, rx312_tgt, $I11, 1
-    ne $S10, "$", rx312_fail
-    add rx312_pos, 1
+    add $I11, rx317_pos, 1
+    gt $I11, rx317_eos, rx317_fail
+    sub $I11, rx317_pos, rx317_off
+    substr $S10, rx317_tgt, $I11, 1
+    ne $S10, "$", rx317_fail
+    add rx317_pos, 1
   # rx subcapture "pos"
-    set_addr $I10, rxcap_320_fail
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+    set_addr $I10, rxcap_325_fail
+    rx317_cur."!mark_push"(0, rx317_pos, $I10)
   # rx charclass_q d r 1..-1
-    sub $I10, rx312_pos, rx312_off
-    find_not_cclass $I11, 8, rx312_tgt, $I10, rx312_eos
+    sub $I10, rx317_pos, rx317_off
+    find_not_cclass $I11, 8, rx317_tgt, $I10, rx317_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx312_fail
-    add rx312_pos, rx312_off, $I11
-    set_addr $I10, rxcap_320_fail
-    ($I12, $I11) = rx312_cur."!mark_peek"($I10)
-    rx312_cur."!cursor_pos"($I11)
-    ($P10) = rx312_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx312_pos, "")
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx317_fail
+    add rx317_pos, rx317_off, $I11
+    set_addr $I10, rxcap_325_fail
+    ($I12, $I11) = rx317_cur."!mark_peek"($I10)
+    rx317_cur."!cursor_pos"($I11)
+    ($P10) = rx317_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx317_pos, "")
+    rx317_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pos")
-    goto rxcap_320_done
-  rxcap_320_fail:
-    goto rx312_fail
-  rxcap_320_done:
-  alt316_end:
+    goto rxcap_325_done
+  rxcap_325_fail:
+    goto rx317_fail
+  rxcap_325_done:
+  alt321_end:
 .annotate 'line', 113
-  # rx rxquantr321 ** 0..1
-    set_addr $I322, rxquantr321_done
-    rx312_cur."!mark_push"(0, rx312_pos, $I322)
-  rxquantr321_loop:
+  # rx rxquantr326 ** 0..1
+    set_addr $I327, rxquantr326_done
+    rx317_cur."!mark_push"(0, rx317_pos, $I327)
+  rxquantr326_loop:
   # rx subrule "ws" subtype=method negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."ws"()
-    unless $P10, rx312_fail
-    rx312_pos = $P10."pos"()
+    rx317_cur."!cursor_pos"(rx317_pos)
+    $P10 = rx317_cur."ws"()
+    unless $P10, rx317_fail
+    rx317_pos = $P10."pos"()
   # rx literal  "="
-    add $I11, rx312_pos, 1
-    gt $I11, rx312_eos, rx312_fail
-    sub $I11, rx312_pos, rx312_off
-    substr $S10, rx312_tgt, $I11, 1
-    ne $S10, "=", rx312_fail
-    add rx312_pos, 1
+    add $I11, rx317_pos, 1
+    gt $I11, rx317_eos, rx317_fail
+    sub $I11, rx317_pos, rx317_off
+    substr $S10, rx317_tgt, $I11, 1
+    ne $S10, "=", rx317_fail
+    add rx317_pos, 1
   # rx subrule "ws" subtype=method negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."ws"()
-    unless $P10, rx312_fail
-    rx312_pos = $P10."pos"()
+    rx317_cur."!cursor_pos"(rx317_pos)
+    $P10 = rx317_cur."ws"()
+    unless $P10, rx317_fail
+    rx317_pos = $P10."pos"()
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."quantified_atom"()
-    unless $P10, rx312_fail
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    rx317_cur."!cursor_pos"(rx317_pos)
+    $P10 = rx317_cur."quantified_atom"()
+    unless $P10, rx317_fail
+    rx317_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quantified_atom")
-    rx312_pos = $P10."pos"()
-    (rx312_rep) = rx312_cur."!mark_commit"($I322)
-  rxquantr321_done:
+    rx317_pos = $P10."pos"()
+    (rx317_rep) = rx317_cur."!mark_commit"($I327)
+  rxquantr326_done:
 .annotate 'line', 107
   # rx pass
-    rx312_cur."!cursor_pass"(rx312_pos, "metachar:sym<var>")
-    rx312_cur."!cursor_debug"("PASS  ", "metachar:sym<var>", " at pos=", rx312_pos)
-    .return (rx312_cur)
-  rx312_fail:
+    rx317_cur."!cursor_pass"(rx317_pos, "metachar:sym<var>")
+    rx317_cur."!cursor_debug"("PASS  ", "metachar:sym<var>", " at pos=", rx317_pos)
+    .return (rx317_cur)
+  rx317_fail:
 .annotate 'line', 3
-    (rx312_rep, rx312_pos, $I10, $P10) = rx312_cur."!mark_fail"(0)
-    lt rx312_pos, -1, rx312_done
-    eq rx312_pos, -1, rx312_fail
+    (rx317_rep, rx317_pos, $I10, $P10) = rx317_cur."!mark_fail"(0)
+    lt rx317_pos, -1, rx317_done
+    eq rx317_pos, -1, rx317_fail
     jump $I10
-  rx312_done:
-    rx312_cur."!cursor_fail"()
-    rx312_cur."!cursor_debug"("FAIL  ", "metachar:sym<var>")
-    .return (rx312_cur)
+  rx317_done:
+    rx317_cur."!cursor_fail"()
+    rx317_cur."!cursor_debug"("FAIL  ", "metachar:sym<var>")
+    .return (rx317_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<var>"  :subid("88_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<var>"  :subid("88_1275811476.7961") :method
 .annotate 'line', 3
-    new $P314, "ResizablePMCArray"
-    push $P314, "$"
-    push $P314, "$<"
-    .return ($P314)
+    new $P319, "ResizablePMCArray"
+    push $P319, "$"
+    push $P319, "$<"
+    .return ($P319)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<PIR>"  :subid("89_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "metachar:sym<PIR>"  :subid("89_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx324_tgt
-    .local int rx324_pos
-    .local int rx324_off
-    .local int rx324_eos
-    .local int rx324_rep
-    .local pmc rx324_cur
-    (rx324_cur, rx324_pos, rx324_tgt) = self."!cursor_start"()
-    rx324_cur."!cursor_debug"("START ", "metachar:sym<PIR>")
-    .lex unicode:"$\x{a2}", rx324_cur
+    .local string rx329_tgt
+    .local int rx329_pos
+    .local int rx329_off
+    .local int rx329_eos
+    .local int rx329_rep
+    .local pmc rx329_cur
+    (rx329_cur, rx329_pos, rx329_tgt) = self."!cursor_start"()
+    rx329_cur."!cursor_debug"("START ", "metachar:sym<PIR>")
+    .lex unicode:"$\x{a2}", rx329_cur
     .local pmc match
     .lex "$/", match
-    length rx324_eos, rx324_tgt
-    set rx324_off, 0
-    lt rx324_pos, 2, rx324_start
-    sub rx324_off, rx324_pos, 1
-    substr rx324_tgt, rx324_tgt, rx324_off
-  rx324_start:
+    length rx329_eos, rx329_tgt
+    gt rx329_pos, rx329_eos, rx329_done
+    set rx329_off, 0
+    lt rx329_pos, 2, rx329_start
+    sub rx329_off, rx329_pos, 1
+    substr rx329_tgt, rx329_tgt, rx329_off
+  rx329_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan327_done
-    goto rxscan327_scan
-  rxscan327_loop:
-    ($P10) = rx324_cur."from"()
+    ne $I10, -1, rxscan332_done
+    goto rxscan332_scan
+  rxscan332_loop:
+    ($P10) = rx329_cur."from"()
     inc $P10
-    set rx324_pos, $P10
-    ge rx324_pos, rx324_eos, rxscan327_done
-  rxscan327_scan:
-    set_addr $I10, rxscan327_loop
-    rx324_cur."!mark_push"(0, rx324_pos, $I10)
-  rxscan327_done:
+    set rx329_pos, $P10
+    ge rx329_pos, rx329_eos, rxscan332_done
+  rxscan332_scan:
+    set_addr $I10, rxscan332_loop
+    rx329_cur."!mark_push"(0, rx329_pos, $I10)
+  rxscan332_done:
 .annotate 'line', 117
   # rx literal  ":PIR{{"
-    add $I11, rx324_pos, 6
-    gt $I11, rx324_eos, rx324_fail
-    sub $I11, rx324_pos, rx324_off
-    substr $S10, rx324_tgt, $I11, 6
-    ne $S10, ":PIR{{", rx324_fail
-    add rx324_pos, 6
+    add $I11, rx329_pos, 6
+    gt $I11, rx329_eos, rx329_fail
+    sub $I11, rx329_pos, rx329_off
+    substr $S10, rx329_tgt, $I11, 6
+    ne $S10, ":PIR{{", rx329_fail
+    add rx329_pos, 6
   # rx subcapture "pir"
-    set_addr $I10, rxcap_330_fail
-    rx324_cur."!mark_push"(0, rx324_pos, $I10)
-  # rx rxquantf328 ** 0..*
-    set_addr $I10, rxquantf328_loop
-    rx324_cur."!mark_push"(0, rx324_pos, $I10)
-    goto rxquantf328_done
-  rxquantf328_loop:
+    set_addr $I10, rxcap_335_fail
+    rx329_cur."!mark_push"(0, rx329_pos, $I10)
+  # rx rxquantf333 ** 0..*
+    set_addr $I10, rxquantf333_loop
+    rx329_cur."!mark_push"(0, rx329_pos, $I10)
+    goto rxquantf333_done
+  rxquantf333_loop:
   # rx charclass .
-    ge rx324_pos, rx324_eos, rx324_fail
-    inc rx324_pos
-    set_addr $I10, rxquantf328_loop
-    rx324_cur."!mark_push"($I329, rx324_pos, $I10)
-  rxquantf328_done:
-    set_addr $I10, rxcap_330_fail
-    ($I12, $I11) = rx324_cur."!mark_peek"($I10)
-    rx324_cur."!cursor_pos"($I11)
-    ($P10) = rx324_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx324_pos, "")
-    rx324_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx329_pos, rx329_eos, rx329_fail
+    inc rx329_pos
+    set_addr $I10, rxquantf333_loop
+    rx329_cur."!mark_push"($I334, rx329_pos, $I10)
+  rxquantf333_done:
+    set_addr $I10, rxcap_335_fail
+    ($I12, $I11) = rx329_cur."!mark_peek"($I10)
+    rx329_cur."!cursor_pos"($I11)
+    ($P10) = rx329_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx329_pos, "")
+    rx329_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pir")
-    goto rxcap_330_done
-  rxcap_330_fail:
-    goto rx324_fail
-  rxcap_330_done:
+    goto rxcap_335_done
+  rxcap_335_fail:
+    goto rx329_fail
+  rxcap_335_done:
   # rx literal  "}}"
-    add $I11, rx324_pos, 2
-    gt $I11, rx324_eos, rx324_fail
-    sub $I11, rx324_pos, rx324_off
-    substr $S10, rx324_tgt, $I11, 2
-    ne $S10, "}}", rx324_fail
-    add rx324_pos, 2
+    add $I11, rx329_pos, 2
+    gt $I11, rx329_eos, rx329_fail
+    sub $I11, rx329_pos, rx329_off
+    substr $S10, rx329_tgt, $I11, 2
+    ne $S10, "}}", rx329_fail
+    add rx329_pos, 2
 .annotate 'line', 116
   # rx pass
-    rx324_cur."!cursor_pass"(rx324_pos, "metachar:sym<PIR>")
-    rx324_cur."!cursor_debug"("PASS  ", "metachar:sym<PIR>", " at pos=", rx324_pos)
-    .return (rx324_cur)
-  rx324_fail:
+    rx329_cur."!cursor_pass"(rx329_pos, "metachar:sym<PIR>")
+    rx329_cur."!cursor_debug"("PASS  ", "metachar:sym<PIR>", " at pos=", rx329_pos)
+    .return (rx329_cur)
+  rx329_fail:
 .annotate 'line', 3
-    (rx324_rep, rx324_pos, $I10, $P10) = rx324_cur."!mark_fail"(0)
-    lt rx324_pos, -1, rx324_done
-    eq rx324_pos, -1, rx324_fail
+    (rx329_rep, rx329_pos, $I10, $P10) = rx329_cur."!mark_fail"(0)
+    lt rx329_pos, -1, rx329_done
+    eq rx329_pos, -1, rx329_fail
     jump $I10
-  rx324_done:
-    rx324_cur."!cursor_fail"()
-    rx324_cur."!cursor_debug"("FAIL  ", "metachar:sym<PIR>")
-    .return (rx324_cur)
+  rx329_done:
+    rx329_cur."!cursor_fail"()
+    rx329_cur."!cursor_debug"("FAIL  ", "metachar:sym<PIR>")
+    .return (rx329_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<PIR>"  :subid("90_1274022883.50471") :method
+.sub "!PREFIX__metachar:sym<PIR>"  :subid("90_1275811476.7961") :method
 .annotate 'line', 3
-    new $P326, "ResizablePMCArray"
-    push $P326, ":PIR{{"
-    .return ($P326)
+    new $P331, "ResizablePMCArray"
+    push $P331, ":PIR{{"
+    .return ($P331)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash"  :subid("91_1274022883.50471") :method
+.sub "backslash"  :subid("91_1275811476.7961") :method
 .annotate 'line', 120
-    $P332 = self."!protoregex"("backslash")
-    .return ($P332)
+    $P337 = self."!protoregex"("backslash")
+    .return ($P337)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash"  :subid("92_1274022883.50471") :method
+.sub "!PREFIX__backslash"  :subid("92_1275811476.7961") :method
 .annotate 'line', 120
-    $P334 = self."!PREFIX__!protoregex"("backslash")
-    .return ($P334)
+    $P339 = self."!PREFIX__!protoregex"("backslash")
+    .return ($P339)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<w>"  :subid("93_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<w>"  :subid("93_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx336_tgt
-    .local int rx336_pos
-    .local int rx336_off
-    .local int rx336_eos
-    .local int rx336_rep
-    .local pmc rx336_cur
-    (rx336_cur, rx336_pos, rx336_tgt) = self."!cursor_start"()
-    rx336_cur."!cursor_debug"("START ", "backslash:sym<w>")
-    .lex unicode:"$\x{a2}", rx336_cur
-    .local pmc match
-    .lex "$/", match
-    length rx336_eos, rx336_tgt
-    set rx336_off, 0
-    lt rx336_pos, 2, rx336_start
-    sub rx336_off, rx336_pos, 1
-    substr rx336_tgt, rx336_tgt, rx336_off
-  rx336_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan339_done
-    goto rxscan339_scan
-  rxscan339_loop:
-    ($P10) = rx336_cur."from"()
-    inc $P10
-    set rx336_pos, $P10
-    ge rx336_pos, rx336_eos, rxscan339_done
-  rxscan339_scan:
-    set_addr $I10, rxscan339_loop
-    rx336_cur."!mark_push"(0, rx336_pos, $I10)
-  rxscan339_done:
+    .local string rx341_tgt
+    .local int rx341_pos
+    .local int rx341_off
+    .local int rx341_eos
+    .local int rx341_rep
+    .local pmc rx341_cur
+    (rx341_cur, rx341_pos, rx341_tgt) = self."!cursor_start"()
+    rx341_cur."!cursor_debug"("START ", "backslash:sym<w>")
+    .lex unicode:"$\x{a2}", rx341_cur
+    .local pmc match
+    .lex "$/", match
+    length rx341_eos, rx341_tgt
+    gt rx341_pos, rx341_eos, rx341_done
+    set rx341_off, 0
+    lt rx341_pos, 2, rx341_start
+    sub rx341_off, rx341_pos, 1
+    substr rx341_tgt, rx341_tgt, rx341_off
+  rx341_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan344_done
+    goto rxscan344_scan
+  rxscan344_loop:
+    ($P10) = rx341_cur."from"()
+    inc $P10
+    set rx341_pos, $P10
+    ge rx341_pos, rx341_eos, rxscan344_done
+  rxscan344_scan:
+    set_addr $I10, rxscan344_loop
+    rx341_cur."!mark_push"(0, rx341_pos, $I10)
+  rxscan344_done:
 .annotate 'line', 121
   # rx subcapture "sym"
-    set_addr $I10, rxcap_340_fail
-    rx336_cur."!mark_push"(0, rx336_pos, $I10)
+    set_addr $I10, rxcap_345_fail
+    rx341_cur."!mark_push"(0, rx341_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx336_pos, rx336_eos, rx336_fail
-    sub $I10, rx336_pos, rx336_off
-    substr $S10, rx336_tgt, $I10, 1
+    ge rx341_pos, rx341_eos, rx341_fail
+    sub $I10, rx341_pos, rx341_off
+    substr $S10, rx341_tgt, $I10, 1
     index $I11, "dswnDSWN", $S10
-    lt $I11, 0, rx336_fail
-    inc rx336_pos
-    set_addr $I10, rxcap_340_fail
-    ($I12, $I11) = rx336_cur."!mark_peek"($I10)
-    rx336_cur."!cursor_pos"($I11)
-    ($P10) = rx336_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx336_pos, "")
-    rx336_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx341_fail
+    inc rx341_pos
+    set_addr $I10, rxcap_345_fail
+    ($I12, $I11) = rx341_cur."!mark_peek"($I10)
+    rx341_cur."!cursor_pos"($I11)
+    ($P10) = rx341_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx341_pos, "")
+    rx341_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_340_done
-  rxcap_340_fail:
-    goto rx336_fail
-  rxcap_340_done:
+    goto rxcap_345_done
+  rxcap_345_fail:
+    goto rx341_fail
+  rxcap_345_done:
   # rx pass
-    rx336_cur."!cursor_pass"(rx336_pos, "backslash:sym<w>")
-    rx336_cur."!cursor_debug"("PASS  ", "backslash:sym<w>", " at pos=", rx336_pos)
-    .return (rx336_cur)
-  rx336_fail:
+    rx341_cur."!cursor_pass"(rx341_pos, "backslash:sym<w>")
+    rx341_cur."!cursor_debug"("PASS  ", "backslash:sym<w>", " at pos=", rx341_pos)
+    .return (rx341_cur)
+  rx341_fail:
 .annotate 'line', 3
-    (rx336_rep, rx336_pos, $I10, $P10) = rx336_cur."!mark_fail"(0)
-    lt rx336_pos, -1, rx336_done
-    eq rx336_pos, -1, rx336_fail
+    (rx341_rep, rx341_pos, $I10, $P10) = rx341_cur."!mark_fail"(0)
+    lt rx341_pos, -1, rx341_done
+    eq rx341_pos, -1, rx341_fail
     jump $I10
-  rx336_done:
-    rx336_cur."!cursor_fail"()
-    rx336_cur."!cursor_debug"("FAIL  ", "backslash:sym<w>")
-    .return (rx336_cur)
+  rx341_done:
+    rx341_cur."!cursor_fail"()
+    rx341_cur."!cursor_debug"("FAIL  ", "backslash:sym<w>")
+    .return (rx341_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<w>"  :subid("94_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<w>"  :subid("94_1275811476.7961") :method
 .annotate 'line', 3
-    new $P338, "ResizablePMCArray"
-    push $P338, "N"
-    push $P338, "W"
-    push $P338, "S"
-    push $P338, "D"
-    push $P338, "n"
-    push $P338, "w"
-    push $P338, "s"
-    push $P338, "d"
-    .return ($P338)
+    new $P343, "ResizablePMCArray"
+    push $P343, "N"
+    push $P343, "W"
+    push $P343, "S"
+    push $P343, "D"
+    push $P343, "n"
+    push $P343, "w"
+    push $P343, "s"
+    push $P343, "d"
+    .return ($P343)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<b>"  :subid("95_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<b>"  :subid("95_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx342_tgt
-    .local int rx342_pos
-    .local int rx342_off
-    .local int rx342_eos
-    .local int rx342_rep
-    .local pmc rx342_cur
-    (rx342_cur, rx342_pos, rx342_tgt) = self."!cursor_start"()
-    rx342_cur."!cursor_debug"("START ", "backslash:sym<b>")
-    .lex unicode:"$\x{a2}", rx342_cur
+    .local string rx347_tgt
+    .local int rx347_pos
+    .local int rx347_off
+    .local int rx347_eos
+    .local int rx347_rep
+    .local pmc rx347_cur
+    (rx347_cur, rx347_pos, rx347_tgt) = self."!cursor_start"()
+    rx347_cur."!cursor_debug"("START ", "backslash:sym<b>")
+    .lex unicode:"$\x{a2}", rx347_cur
     .local pmc match
     .lex "$/", match
-    length rx342_eos, rx342_tgt
-    set rx342_off, 0
-    lt rx342_pos, 2, rx342_start
-    sub rx342_off, rx342_pos, 1
-    substr rx342_tgt, rx342_tgt, rx342_off
-  rx342_start:
+    length rx347_eos, rx347_tgt
+    gt rx347_pos, rx347_eos, rx347_done
+    set rx347_off, 0
+    lt rx347_pos, 2, rx347_start
+    sub rx347_off, rx347_pos, 1
+    substr rx347_tgt, rx347_tgt, rx347_off
+  rx347_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan345_done
-    goto rxscan345_scan
-  rxscan345_loop:
-    ($P10) = rx342_cur."from"()
+    ne $I10, -1, rxscan350_done
+    goto rxscan350_scan
+  rxscan350_loop:
+    ($P10) = rx347_cur."from"()
     inc $P10
-    set rx342_pos, $P10
-    ge rx342_pos, rx342_eos, rxscan345_done
-  rxscan345_scan:
-    set_addr $I10, rxscan345_loop
-    rx342_cur."!mark_push"(0, rx342_pos, $I10)
-  rxscan345_done:
+    set rx347_pos, $P10
+    ge rx347_pos, rx347_eos, rxscan350_done
+  rxscan350_scan:
+    set_addr $I10, rxscan350_loop
+    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+  rxscan350_done:
 .annotate 'line', 122
   # rx subcapture "sym"
-    set_addr $I10, rxcap_346_fail
-    rx342_cur."!mark_push"(0, rx342_pos, $I10)
+    set_addr $I10, rxcap_351_fail
+    rx347_cur."!mark_push"(0, rx347_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx342_pos, rx342_eos, rx342_fail
-    sub $I10, rx342_pos, rx342_off
-    substr $S10, rx342_tgt, $I10, 1
+    ge rx347_pos, rx347_eos, rx347_fail
+    sub $I10, rx347_pos, rx347_off
+    substr $S10, rx347_tgt, $I10, 1
     index $I11, "bB", $S10
-    lt $I11, 0, rx342_fail
-    inc rx342_pos
-    set_addr $I10, rxcap_346_fail
-    ($I12, $I11) = rx342_cur."!mark_peek"($I10)
-    rx342_cur."!cursor_pos"($I11)
-    ($P10) = rx342_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx342_pos, "")
-    rx342_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx347_fail
+    inc rx347_pos
+    set_addr $I10, rxcap_351_fail
+    ($I12, $I11) = rx347_cur."!mark_peek"($I10)
+    rx347_cur."!cursor_pos"($I11)
+    ($P10) = rx347_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx347_pos, "")
+    rx347_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_346_done
-  rxcap_346_fail:
-    goto rx342_fail
-  rxcap_346_done:
+    goto rxcap_351_done
+  rxcap_351_fail:
+    goto rx347_fail
+  rxcap_351_done:
   # rx pass
-    rx342_cur."!cursor_pass"(rx342_pos, "backslash:sym<b>")
-    rx342_cur."!cursor_debug"("PASS  ", "backslash:sym<b>", " at pos=", rx342_pos)
-    .return (rx342_cur)
-  rx342_fail:
+    rx347_cur."!cursor_pass"(rx347_pos, "backslash:sym<b>")
+    rx347_cur."!cursor_debug"("PASS  ", "backslash:sym<b>", " at pos=", rx347_pos)
+    .return (rx347_cur)
+  rx347_fail:
 .annotate 'line', 3
-    (rx342_rep, rx342_pos, $I10, $P10) = rx342_cur."!mark_fail"(0)
-    lt rx342_pos, -1, rx342_done
-    eq rx342_pos, -1, rx342_fail
+    (rx347_rep, rx347_pos, $I10, $P10) = rx347_cur."!mark_fail"(0)
+    lt rx347_pos, -1, rx347_done
+    eq rx347_pos, -1, rx347_fail
     jump $I10
-  rx342_done:
-    rx342_cur."!cursor_fail"()
-    rx342_cur."!cursor_debug"("FAIL  ", "backslash:sym<b>")
-    .return (rx342_cur)
+  rx347_done:
+    rx347_cur."!cursor_fail"()
+    rx347_cur."!cursor_debug"("FAIL  ", "backslash:sym<b>")
+    .return (rx347_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<b>"  :subid("96_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<b>"  :subid("96_1275811476.7961") :method
 .annotate 'line', 3
-    new $P344, "ResizablePMCArray"
-    push $P344, "B"
-    push $P344, "b"
-    .return ($P344)
+    new $P349, "ResizablePMCArray"
+    push $P349, "B"
+    push $P349, "b"
+    .return ($P349)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<e>"  :subid("97_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<e>"  :subid("97_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx348_tgt
-    .local int rx348_pos
-    .local int rx348_off
-    .local int rx348_eos
-    .local int rx348_rep
-    .local pmc rx348_cur
-    (rx348_cur, rx348_pos, rx348_tgt) = self."!cursor_start"()
-    rx348_cur."!cursor_debug"("START ", "backslash:sym<e>")
-    .lex unicode:"$\x{a2}", rx348_cur
+    .local string rx353_tgt
+    .local int rx353_pos
+    .local int rx353_off
+    .local int rx353_eos
+    .local int rx353_rep
+    .local pmc rx353_cur
+    (rx353_cur, rx353_pos, rx353_tgt) = self."!cursor_start"()
+    rx353_cur."!cursor_debug"("START ", "backslash:sym<e>")
+    .lex unicode:"$\x{a2}", rx353_cur
     .local pmc match
     .lex "$/", match
-    length rx348_eos, rx348_tgt
-    set rx348_off, 0
-    lt rx348_pos, 2, rx348_start
-    sub rx348_off, rx348_pos, 1
-    substr rx348_tgt, rx348_tgt, rx348_off
-  rx348_start:
+    length rx353_eos, rx353_tgt
+    gt rx353_pos, rx353_eos, rx353_done
+    set rx353_off, 0
+    lt rx353_pos, 2, rx353_start
+    sub rx353_off, rx353_pos, 1
+    substr rx353_tgt, rx353_tgt, rx353_off
+  rx353_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan351_done
-    goto rxscan351_scan
-  rxscan351_loop:
-    ($P10) = rx348_cur."from"()
+    ne $I10, -1, rxscan356_done
+    goto rxscan356_scan
+  rxscan356_loop:
+    ($P10) = rx353_cur."from"()
     inc $P10
-    set rx348_pos, $P10
-    ge rx348_pos, rx348_eos, rxscan351_done
-  rxscan351_scan:
-    set_addr $I10, rxscan351_loop
-    rx348_cur."!mark_push"(0, rx348_pos, $I10)
-  rxscan351_done:
+    set rx353_pos, $P10
+    ge rx353_pos, rx353_eos, rxscan356_done
+  rxscan356_scan:
+    set_addr $I10, rxscan356_loop
+    rx353_cur."!mark_push"(0, rx353_pos, $I10)
+  rxscan356_done:
 .annotate 'line', 123
   # rx subcapture "sym"
-    set_addr $I10, rxcap_352_fail
-    rx348_cur."!mark_push"(0, rx348_pos, $I10)
+    set_addr $I10, rxcap_357_fail
+    rx353_cur."!mark_push"(0, rx353_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx348_pos, rx348_eos, rx348_fail
-    sub $I10, rx348_pos, rx348_off
-    substr $S10, rx348_tgt, $I10, 1
+    ge rx353_pos, rx353_eos, rx353_fail
+    sub $I10, rx353_pos, rx353_off
+    substr $S10, rx353_tgt, $I10, 1
     index $I11, "eE", $S10
-    lt $I11, 0, rx348_fail
-    inc rx348_pos
-    set_addr $I10, rxcap_352_fail
-    ($I12, $I11) = rx348_cur."!mark_peek"($I10)
-    rx348_cur."!cursor_pos"($I11)
-    ($P10) = rx348_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx348_pos, "")
-    rx348_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx353_fail
+    inc rx353_pos
+    set_addr $I10, rxcap_357_fail
+    ($I12, $I11) = rx353_cur."!mark_peek"($I10)
+    rx353_cur."!cursor_pos"($I11)
+    ($P10) = rx353_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx353_pos, "")
+    rx353_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_352_done
-  rxcap_352_fail:
-    goto rx348_fail
-  rxcap_352_done:
+    goto rxcap_357_done
+  rxcap_357_fail:
+    goto rx353_fail
+  rxcap_357_done:
   # rx pass
-    rx348_cur."!cursor_pass"(rx348_pos, "backslash:sym<e>")
-    rx348_cur."!cursor_debug"("PASS  ", "backslash:sym<e>", " at pos=", rx348_pos)
-    .return (rx348_cur)
-  rx348_fail:
+    rx353_cur."!cursor_pass"(rx353_pos, "backslash:sym<e>")
+    rx353_cur."!cursor_debug"("PASS  ", "backslash:sym<e>", " at pos=", rx353_pos)
+    .return (rx353_cur)
+  rx353_fail:
 .annotate 'line', 3
-    (rx348_rep, rx348_pos, $I10, $P10) = rx348_cur."!mark_fail"(0)
-    lt rx348_pos, -1, rx348_done
-    eq rx348_pos, -1, rx348_fail
+    (rx353_rep, rx353_pos, $I10, $P10) = rx353_cur."!mark_fail"(0)
+    lt rx353_pos, -1, rx353_done
+    eq rx353_pos, -1, rx353_fail
     jump $I10
-  rx348_done:
-    rx348_cur."!cursor_fail"()
-    rx348_cur."!cursor_debug"("FAIL  ", "backslash:sym<e>")
-    .return (rx348_cur)
+  rx353_done:
+    rx353_cur."!cursor_fail"()
+    rx353_cur."!cursor_debug"("FAIL  ", "backslash:sym<e>")
+    .return (rx353_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<e>"  :subid("98_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<e>"  :subid("98_1275811476.7961") :method
 .annotate 'line', 3
-    new $P350, "ResizablePMCArray"
-    push $P350, "E"
-    push $P350, "e"
-    .return ($P350)
+    new $P355, "ResizablePMCArray"
+    push $P355, "E"
+    push $P355, "e"
+    .return ($P355)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<f>"  :subid("99_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<f>"  :subid("99_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx354_tgt
-    .local int rx354_pos
-    .local int rx354_off
-    .local int rx354_eos
-    .local int rx354_rep
-    .local pmc rx354_cur
-    (rx354_cur, rx354_pos, rx354_tgt) = self."!cursor_start"()
-    rx354_cur."!cursor_debug"("START ", "backslash:sym<f>")
-    .lex unicode:"$\x{a2}", rx354_cur
+    .local string rx359_tgt
+    .local int rx359_pos
+    .local int rx359_off
+    .local int rx359_eos
+    .local int rx359_rep
+    .local pmc rx359_cur
+    (rx359_cur, rx359_pos, rx359_tgt) = self."!cursor_start"()
+    rx359_cur."!cursor_debug"("START ", "backslash:sym<f>")
+    .lex unicode:"$\x{a2}", rx359_cur
     .local pmc match
     .lex "$/", match
-    length rx354_eos, rx354_tgt
-    set rx354_off, 0
-    lt rx354_pos, 2, rx354_start
-    sub rx354_off, rx354_pos, 1
-    substr rx354_tgt, rx354_tgt, rx354_off
-  rx354_start:
+    length rx359_eos, rx359_tgt
+    gt rx359_pos, rx359_eos, rx359_done
+    set rx359_off, 0
+    lt rx359_pos, 2, rx359_start
+    sub rx359_off, rx359_pos, 1
+    substr rx359_tgt, rx359_tgt, rx359_off
+  rx359_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan357_done
-    goto rxscan357_scan
-  rxscan357_loop:
-    ($P10) = rx354_cur."from"()
+    ne $I10, -1, rxscan362_done
+    goto rxscan362_scan
+  rxscan362_loop:
+    ($P10) = rx359_cur."from"()
     inc $P10
-    set rx354_pos, $P10
-    ge rx354_pos, rx354_eos, rxscan357_done
-  rxscan357_scan:
-    set_addr $I10, rxscan357_loop
-    rx354_cur."!mark_push"(0, rx354_pos, $I10)
-  rxscan357_done:
+    set rx359_pos, $P10
+    ge rx359_pos, rx359_eos, rxscan362_done
+  rxscan362_scan:
+    set_addr $I10, rxscan362_loop
+    rx359_cur."!mark_push"(0, rx359_pos, $I10)
+  rxscan362_done:
 .annotate 'line', 124
   # rx subcapture "sym"
-    set_addr $I10, rxcap_358_fail
-    rx354_cur."!mark_push"(0, rx354_pos, $I10)
+    set_addr $I10, rxcap_363_fail
+    rx359_cur."!mark_push"(0, rx359_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx354_pos, rx354_eos, rx354_fail
-    sub $I10, rx354_pos, rx354_off
-    substr $S10, rx354_tgt, $I10, 1
+    ge rx359_pos, rx359_eos, rx359_fail
+    sub $I10, rx359_pos, rx359_off
+    substr $S10, rx359_tgt, $I10, 1
     index $I11, "fF", $S10
-    lt $I11, 0, rx354_fail
-    inc rx354_pos
-    set_addr $I10, rxcap_358_fail
-    ($I12, $I11) = rx354_cur."!mark_peek"($I10)
-    rx354_cur."!cursor_pos"($I11)
-    ($P10) = rx354_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx354_pos, "")
-    rx354_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx359_fail
+    inc rx359_pos
+    set_addr $I10, rxcap_363_fail
+    ($I12, $I11) = rx359_cur."!mark_peek"($I10)
+    rx359_cur."!cursor_pos"($I11)
+    ($P10) = rx359_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx359_pos, "")
+    rx359_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_358_done
-  rxcap_358_fail:
-    goto rx354_fail
-  rxcap_358_done:
+    goto rxcap_363_done
+  rxcap_363_fail:
+    goto rx359_fail
+  rxcap_363_done:
   # rx pass
-    rx354_cur."!cursor_pass"(rx354_pos, "backslash:sym<f>")
-    rx354_cur."!cursor_debug"("PASS  ", "backslash:sym<f>", " at pos=", rx354_pos)
-    .return (rx354_cur)
-  rx354_fail:
+    rx359_cur."!cursor_pass"(rx359_pos, "backslash:sym<f>")
+    rx359_cur."!cursor_debug"("PASS  ", "backslash:sym<f>", " at pos=", rx359_pos)
+    .return (rx359_cur)
+  rx359_fail:
 .annotate 'line', 3
-    (rx354_rep, rx354_pos, $I10, $P10) = rx354_cur."!mark_fail"(0)
-    lt rx354_pos, -1, rx354_done
-    eq rx354_pos, -1, rx354_fail
+    (rx359_rep, rx359_pos, $I10, $P10) = rx359_cur."!mark_fail"(0)
+    lt rx359_pos, -1, rx359_done
+    eq rx359_pos, -1, rx359_fail
     jump $I10
-  rx354_done:
-    rx354_cur."!cursor_fail"()
-    rx354_cur."!cursor_debug"("FAIL  ", "backslash:sym<f>")
-    .return (rx354_cur)
+  rx359_done:
+    rx359_cur."!cursor_fail"()
+    rx359_cur."!cursor_debug"("FAIL  ", "backslash:sym<f>")
+    .return (rx359_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<f>"  :subid("100_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<f>"  :subid("100_1275811476.7961") :method
 .annotate 'line', 3
-    new $P356, "ResizablePMCArray"
-    push $P356, "F"
-    push $P356, "f"
-    .return ($P356)
+    new $P361, "ResizablePMCArray"
+    push $P361, "F"
+    push $P361, "f"
+    .return ($P361)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<h>"  :subid("101_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<h>"  :subid("101_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx360_tgt
-    .local int rx360_pos
-    .local int rx360_off
-    .local int rx360_eos
-    .local int rx360_rep
-    .local pmc rx360_cur
-    (rx360_cur, rx360_pos, rx360_tgt) = self."!cursor_start"()
-    rx360_cur."!cursor_debug"("START ", "backslash:sym<h>")
-    .lex unicode:"$\x{a2}", rx360_cur
-    .local pmc match
-    .lex "$/", match
-    length rx360_eos, rx360_tgt
-    set rx360_off, 0
-    lt rx360_pos, 2, rx360_start
-    sub rx360_off, rx360_pos, 1
-    substr rx360_tgt, rx360_tgt, rx360_off
-  rx360_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan363_done
-    goto rxscan363_scan
-  rxscan363_loop:
-    ($P10) = rx360_cur."from"()
-    inc $P10
-    set rx360_pos, $P10
-    ge rx360_pos, rx360_eos, rxscan363_done
-  rxscan363_scan:
-    set_addr $I10, rxscan363_loop
-    rx360_cur."!mark_push"(0, rx360_pos, $I10)
-  rxscan363_done:
+    .local string rx365_tgt
+    .local int rx365_pos
+    .local int rx365_off
+    .local int rx365_eos
+    .local int rx365_rep
+    .local pmc rx365_cur
+    (rx365_cur, rx365_pos, rx365_tgt) = self."!cursor_start"()
+    rx365_cur."!cursor_debug"("START ", "backslash:sym<h>")
+    .lex unicode:"$\x{a2}", rx365_cur
+    .local pmc match
+    .lex "$/", match
+    length rx365_eos, rx365_tgt
+    gt rx365_pos, rx365_eos, rx365_done
+    set rx365_off, 0
+    lt rx365_pos, 2, rx365_start
+    sub rx365_off, rx365_pos, 1
+    substr rx365_tgt, rx365_tgt, rx365_off
+  rx365_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan368_done
+    goto rxscan368_scan
+  rxscan368_loop:
+    ($P10) = rx365_cur."from"()
+    inc $P10
+    set rx365_pos, $P10
+    ge rx365_pos, rx365_eos, rxscan368_done
+  rxscan368_scan:
+    set_addr $I10, rxscan368_loop
+    rx365_cur."!mark_push"(0, rx365_pos, $I10)
+  rxscan368_done:
 .annotate 'line', 125
   # rx subcapture "sym"
-    set_addr $I10, rxcap_364_fail
-    rx360_cur."!mark_push"(0, rx360_pos, $I10)
+    set_addr $I10, rxcap_369_fail
+    rx365_cur."!mark_push"(0, rx365_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx360_pos, rx360_eos, rx360_fail
-    sub $I10, rx360_pos, rx360_off
-    substr $S10, rx360_tgt, $I10, 1
+    ge rx365_pos, rx365_eos, rx365_fail
+    sub $I10, rx365_pos, rx365_off
+    substr $S10, rx365_tgt, $I10, 1
     index $I11, "hH", $S10
-    lt $I11, 0, rx360_fail
-    inc rx360_pos
-    set_addr $I10, rxcap_364_fail
-    ($I12, $I11) = rx360_cur."!mark_peek"($I10)
-    rx360_cur."!cursor_pos"($I11)
-    ($P10) = rx360_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx360_pos, "")
-    rx360_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx365_fail
+    inc rx365_pos
+    set_addr $I10, rxcap_369_fail
+    ($I12, $I11) = rx365_cur."!mark_peek"($I10)
+    rx365_cur."!cursor_pos"($I11)
+    ($P10) = rx365_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx365_pos, "")
+    rx365_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_364_done
-  rxcap_364_fail:
-    goto rx360_fail
-  rxcap_364_done:
+    goto rxcap_369_done
+  rxcap_369_fail:
+    goto rx365_fail
+  rxcap_369_done:
   # rx pass
-    rx360_cur."!cursor_pass"(rx360_pos, "backslash:sym<h>")
-    rx360_cur."!cursor_debug"("PASS  ", "backslash:sym<h>", " at pos=", rx360_pos)
-    .return (rx360_cur)
-  rx360_fail:
+    rx365_cur."!cursor_pass"(rx365_pos, "backslash:sym<h>")
+    rx365_cur."!cursor_debug"("PASS  ", "backslash:sym<h>", " at pos=", rx365_pos)
+    .return (rx365_cur)
+  rx365_fail:
 .annotate 'line', 3
-    (rx360_rep, rx360_pos, $I10, $P10) = rx360_cur."!mark_fail"(0)
-    lt rx360_pos, -1, rx360_done
-    eq rx360_pos, -1, rx360_fail
+    (rx365_rep, rx365_pos, $I10, $P10) = rx365_cur."!mark_fail"(0)
+    lt rx365_pos, -1, rx365_done
+    eq rx365_pos, -1, rx365_fail
     jump $I10
-  rx360_done:
-    rx360_cur."!cursor_fail"()
-    rx360_cur."!cursor_debug"("FAIL  ", "backslash:sym<h>")
-    .return (rx360_cur)
+  rx365_done:
+    rx365_cur."!cursor_fail"()
+    rx365_cur."!cursor_debug"("FAIL  ", "backslash:sym<h>")
+    .return (rx365_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<h>"  :subid("102_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<h>"  :subid("102_1275811476.7961") :method
 .annotate 'line', 3
-    new $P362, "ResizablePMCArray"
-    push $P362, "H"
-    push $P362, "h"
-    .return ($P362)
+    new $P367, "ResizablePMCArray"
+    push $P367, "H"
+    push $P367, "h"
+    .return ($P367)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<r>"  :subid("103_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<r>"  :subid("103_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx366_tgt
-    .local int rx366_pos
-    .local int rx366_off
-    .local int rx366_eos
-    .local int rx366_rep
-    .local pmc rx366_cur
-    (rx366_cur, rx366_pos, rx366_tgt) = self."!cursor_start"()
-    rx366_cur."!cursor_debug"("START ", "backslash:sym<r>")
-    .lex unicode:"$\x{a2}", rx366_cur
+    .local string rx371_tgt
+    .local int rx371_pos
+    .local int rx371_off
+    .local int rx371_eos
+    .local int rx371_rep
+    .local pmc rx371_cur
+    (rx371_cur, rx371_pos, rx371_tgt) = self."!cursor_start"()
+    rx371_cur."!cursor_debug"("START ", "backslash:sym<r>")
+    .lex unicode:"$\x{a2}", rx371_cur
     .local pmc match
     .lex "$/", match
-    length rx366_eos, rx366_tgt
-    set rx366_off, 0
-    lt rx366_pos, 2, rx366_start
-    sub rx366_off, rx366_pos, 1
-    substr rx366_tgt, rx366_tgt, rx366_off
-  rx366_start:
+    length rx371_eos, rx371_tgt
+    gt rx371_pos, rx371_eos, rx371_done
+    set rx371_off, 0
+    lt rx371_pos, 2, rx371_start
+    sub rx371_off, rx371_pos, 1
+    substr rx371_tgt, rx371_tgt, rx371_off
+  rx371_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan369_done
-    goto rxscan369_scan
-  rxscan369_loop:
-    ($P10) = rx366_cur."from"()
+    ne $I10, -1, rxscan374_done
+    goto rxscan374_scan
+  rxscan374_loop:
+    ($P10) = rx371_cur."from"()
     inc $P10
-    set rx366_pos, $P10
-    ge rx366_pos, rx366_eos, rxscan369_done
-  rxscan369_scan:
-    set_addr $I10, rxscan369_loop
-    rx366_cur."!mark_push"(0, rx366_pos, $I10)
-  rxscan369_done:
+    set rx371_pos, $P10
+    ge rx371_pos, rx371_eos, rxscan374_done
+  rxscan374_scan:
+    set_addr $I10, rxscan374_loop
+    rx371_cur."!mark_push"(0, rx371_pos, $I10)
+  rxscan374_done:
 .annotate 'line', 126
   # rx subcapture "sym"
-    set_addr $I10, rxcap_370_fail
-    rx366_cur."!mark_push"(0, rx366_pos, $I10)
+    set_addr $I10, rxcap_375_fail
+    rx371_cur."!mark_push"(0, rx371_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx366_pos, rx366_eos, rx366_fail
-    sub $I10, rx366_pos, rx366_off
-    substr $S10, rx366_tgt, $I10, 1
+    ge rx371_pos, rx371_eos, rx371_fail
+    sub $I10, rx371_pos, rx371_off
+    substr $S10, rx371_tgt, $I10, 1
     index $I11, "rR", $S10
-    lt $I11, 0, rx366_fail
-    inc rx366_pos
-    set_addr $I10, rxcap_370_fail
-    ($I12, $I11) = rx366_cur."!mark_peek"($I10)
-    rx366_cur."!cursor_pos"($I11)
-    ($P10) = rx366_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx366_pos, "")
-    rx366_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx371_fail
+    inc rx371_pos
+    set_addr $I10, rxcap_375_fail
+    ($I12, $I11) = rx371_cur."!mark_peek"($I10)
+    rx371_cur."!cursor_pos"($I11)
+    ($P10) = rx371_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx371_pos, "")
+    rx371_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_370_done
-  rxcap_370_fail:
-    goto rx366_fail
-  rxcap_370_done:
+    goto rxcap_375_done
+  rxcap_375_fail:
+    goto rx371_fail
+  rxcap_375_done:
   # rx pass
-    rx366_cur."!cursor_pass"(rx366_pos, "backslash:sym<r>")
-    rx366_cur."!cursor_debug"("PASS  ", "backslash:sym<r>", " at pos=", rx366_pos)
-    .return (rx366_cur)
-  rx366_fail:
+    rx371_cur."!cursor_pass"(rx371_pos, "backslash:sym<r>")
+    rx371_cur."!cursor_debug"("PASS  ", "backslash:sym<r>", " at pos=", rx371_pos)
+    .return (rx371_cur)
+  rx371_fail:
 .annotate 'line', 3
-    (rx366_rep, rx366_pos, $I10, $P10) = rx366_cur."!mark_fail"(0)
-    lt rx366_pos, -1, rx366_done
-    eq rx366_pos, -1, rx366_fail
+    (rx371_rep, rx371_pos, $I10, $P10) = rx371_cur."!mark_fail"(0)
+    lt rx371_pos, -1, rx371_done
+    eq rx371_pos, -1, rx371_fail
     jump $I10
-  rx366_done:
-    rx366_cur."!cursor_fail"()
-    rx366_cur."!cursor_debug"("FAIL  ", "backslash:sym<r>")
-    .return (rx366_cur)
+  rx371_done:
+    rx371_cur."!cursor_fail"()
+    rx371_cur."!cursor_debug"("FAIL  ", "backslash:sym<r>")
+    .return (rx371_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<r>"  :subid("104_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<r>"  :subid("104_1275811476.7961") :method
 .annotate 'line', 3
-    new $P368, "ResizablePMCArray"
-    push $P368, "R"
-    push $P368, "r"
-    .return ($P368)
+    new $P373, "ResizablePMCArray"
+    push $P373, "R"
+    push $P373, "r"
+    .return ($P373)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<t>"  :subid("105_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<t>"  :subid("105_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx372_tgt
-    .local int rx372_pos
-    .local int rx372_off
-    .local int rx372_eos
-    .local int rx372_rep
-    .local pmc rx372_cur
-    (rx372_cur, rx372_pos, rx372_tgt) = self."!cursor_start"()
-    rx372_cur."!cursor_debug"("START ", "backslash:sym<t>")
-    .lex unicode:"$\x{a2}", rx372_cur
+    .local string rx377_tgt
+    .local int rx377_pos
+    .local int rx377_off
+    .local int rx377_eos
+    .local int rx377_rep
+    .local pmc rx377_cur
+    (rx377_cur, rx377_pos, rx377_tgt) = self."!cursor_start"()
+    rx377_cur."!cursor_debug"("START ", "backslash:sym<t>")
+    .lex unicode:"$\x{a2}", rx377_cur
     .local pmc match
     .lex "$/", match
-    length rx372_eos, rx372_tgt
-    set rx372_off, 0
-    lt rx372_pos, 2, rx372_start
-    sub rx372_off, rx372_pos, 1
-    substr rx372_tgt, rx372_tgt, rx372_off
-  rx372_start:
+    length rx377_eos, rx377_tgt
+    gt rx377_pos, rx377_eos, rx377_done
+    set rx377_off, 0
+    lt rx377_pos, 2, rx377_start
+    sub rx377_off, rx377_pos, 1
+    substr rx377_tgt, rx377_tgt, rx377_off
+  rx377_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan375_done
-    goto rxscan375_scan
-  rxscan375_loop:
-    ($P10) = rx372_cur."from"()
+    ne $I10, -1, rxscan380_done
+    goto rxscan380_scan
+  rxscan380_loop:
+    ($P10) = rx377_cur."from"()
     inc $P10
-    set rx372_pos, $P10
-    ge rx372_pos, rx372_eos, rxscan375_done
-  rxscan375_scan:
-    set_addr $I10, rxscan375_loop
-    rx372_cur."!mark_push"(0, rx372_pos, $I10)
-  rxscan375_done:
+    set rx377_pos, $P10
+    ge rx377_pos, rx377_eos, rxscan380_done
+  rxscan380_scan:
+    set_addr $I10, rxscan380_loop
+    rx377_cur."!mark_push"(0, rx377_pos, $I10)
+  rxscan380_done:
 .annotate 'line', 127
   # rx subcapture "sym"
-    set_addr $I10, rxcap_376_fail
-    rx372_cur."!mark_push"(0, rx372_pos, $I10)
+    set_addr $I10, rxcap_381_fail
+    rx377_cur."!mark_push"(0, rx377_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx372_pos, rx372_eos, rx372_fail
-    sub $I10, rx372_pos, rx372_off
-    substr $S10, rx372_tgt, $I10, 1
+    ge rx377_pos, rx377_eos, rx377_fail
+    sub $I10, rx377_pos, rx377_off
+    substr $S10, rx377_tgt, $I10, 1
     index $I11, "tT", $S10
-    lt $I11, 0, rx372_fail
-    inc rx372_pos
-    set_addr $I10, rxcap_376_fail
-    ($I12, $I11) = rx372_cur."!mark_peek"($I10)
-    rx372_cur."!cursor_pos"($I11)
-    ($P10) = rx372_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx372_pos, "")
-    rx372_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx377_fail
+    inc rx377_pos
+    set_addr $I10, rxcap_381_fail
+    ($I12, $I11) = rx377_cur."!mark_peek"($I10)
+    rx377_cur."!cursor_pos"($I11)
+    ($P10) = rx377_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx377_pos, "")
+    rx377_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_376_done
-  rxcap_376_fail:
-    goto rx372_fail
-  rxcap_376_done:
+    goto rxcap_381_done
+  rxcap_381_fail:
+    goto rx377_fail
+  rxcap_381_done:
   # rx pass
-    rx372_cur."!cursor_pass"(rx372_pos, "backslash:sym<t>")
-    rx372_cur."!cursor_debug"("PASS  ", "backslash:sym<t>", " at pos=", rx372_pos)
-    .return (rx372_cur)
-  rx372_fail:
+    rx377_cur."!cursor_pass"(rx377_pos, "backslash:sym<t>")
+    rx377_cur."!cursor_debug"("PASS  ", "backslash:sym<t>", " at pos=", rx377_pos)
+    .return (rx377_cur)
+  rx377_fail:
 .annotate 'line', 3
-    (rx372_rep, rx372_pos, $I10, $P10) = rx372_cur."!mark_fail"(0)
-    lt rx372_pos, -1, rx372_done
-    eq rx372_pos, -1, rx372_fail
+    (rx377_rep, rx377_pos, $I10, $P10) = rx377_cur."!mark_fail"(0)
+    lt rx377_pos, -1, rx377_done
+    eq rx377_pos, -1, rx377_fail
     jump $I10
-  rx372_done:
-    rx372_cur."!cursor_fail"()
-    rx372_cur."!cursor_debug"("FAIL  ", "backslash:sym<t>")
-    .return (rx372_cur)
+  rx377_done:
+    rx377_cur."!cursor_fail"()
+    rx377_cur."!cursor_debug"("FAIL  ", "backslash:sym<t>")
+    .return (rx377_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<t>"  :subid("106_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<t>"  :subid("106_1275811476.7961") :method
 .annotate 'line', 3
-    new $P374, "ResizablePMCArray"
-    push $P374, "T"
-    push $P374, "t"
-    .return ($P374)
+    new $P379, "ResizablePMCArray"
+    push $P379, "T"
+    push $P379, "t"
+    .return ($P379)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<v>"  :subid("107_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<v>"  :subid("107_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx378_tgt
-    .local int rx378_pos
-    .local int rx378_off
-    .local int rx378_eos
-    .local int rx378_rep
-    .local pmc rx378_cur
-    (rx378_cur, rx378_pos, rx378_tgt) = self."!cursor_start"()
-    rx378_cur."!cursor_debug"("START ", "backslash:sym<v>")
-    .lex unicode:"$\x{a2}", rx378_cur
+    .local string rx383_tgt
+    .local int rx383_pos
+    .local int rx383_off
+    .local int rx383_eos
+    .local int rx383_rep
+    .local pmc rx383_cur
+    (rx383_cur, rx383_pos, rx383_tgt) = self."!cursor_start"()
+    rx383_cur."!cursor_debug"("START ", "backslash:sym<v>")
+    .lex unicode:"$\x{a2}", rx383_cur
     .local pmc match
     .lex "$/", match
-    length rx378_eos, rx378_tgt
-    set rx378_off, 0
-    lt rx378_pos, 2, rx378_start
-    sub rx378_off, rx378_pos, 1
-    substr rx378_tgt, rx378_tgt, rx378_off
-  rx378_start:
+    length rx383_eos, rx383_tgt
+    gt rx383_pos, rx383_eos, rx383_done
+    set rx383_off, 0
+    lt rx383_pos, 2, rx383_start
+    sub rx383_off, rx383_pos, 1
+    substr rx383_tgt, rx383_tgt, rx383_off
+  rx383_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan381_done
-    goto rxscan381_scan
-  rxscan381_loop:
-    ($P10) = rx378_cur."from"()
+    ne $I10, -1, rxscan386_done
+    goto rxscan386_scan
+  rxscan386_loop:
+    ($P10) = rx383_cur."from"()
     inc $P10
-    set rx378_pos, $P10
-    ge rx378_pos, rx378_eos, rxscan381_done
-  rxscan381_scan:
-    set_addr $I10, rxscan381_loop
-    rx378_cur."!mark_push"(0, rx378_pos, $I10)
-  rxscan381_done:
+    set rx383_pos, $P10
+    ge rx383_pos, rx383_eos, rxscan386_done
+  rxscan386_scan:
+    set_addr $I10, rxscan386_loop
+    rx383_cur."!mark_push"(0, rx383_pos, $I10)
+  rxscan386_done:
 .annotate 'line', 128
   # rx subcapture "sym"
-    set_addr $I10, rxcap_382_fail
-    rx378_cur."!mark_push"(0, rx378_pos, $I10)
+    set_addr $I10, rxcap_387_fail
+    rx383_cur."!mark_push"(0, rx383_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx378_pos, rx378_eos, rx378_fail
-    sub $I10, rx378_pos, rx378_off
-    substr $S10, rx378_tgt, $I10, 1
+    ge rx383_pos, rx383_eos, rx383_fail
+    sub $I10, rx383_pos, rx383_off
+    substr $S10, rx383_tgt, $I10, 1
     index $I11, "vV", $S10
-    lt $I11, 0, rx378_fail
-    inc rx378_pos
-    set_addr $I10, rxcap_382_fail
-    ($I12, $I11) = rx378_cur."!mark_peek"($I10)
-    rx378_cur."!cursor_pos"($I11)
-    ($P10) = rx378_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx378_pos, "")
-    rx378_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx383_fail
+    inc rx383_pos
+    set_addr $I10, rxcap_387_fail
+    ($I12, $I11) = rx383_cur."!mark_peek"($I10)
+    rx383_cur."!cursor_pos"($I11)
+    ($P10) = rx383_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx383_pos, "")
+    rx383_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_382_done
-  rxcap_382_fail:
-    goto rx378_fail
-  rxcap_382_done:
+    goto rxcap_387_done
+  rxcap_387_fail:
+    goto rx383_fail
+  rxcap_387_done:
   # rx pass
-    rx378_cur."!cursor_pass"(rx378_pos, "backslash:sym<v>")
-    rx378_cur."!cursor_debug"("PASS  ", "backslash:sym<v>", " at pos=", rx378_pos)
-    .return (rx378_cur)
-  rx378_fail:
+    rx383_cur."!cursor_pass"(rx383_pos, "backslash:sym<v>")
+    rx383_cur."!cursor_debug"("PASS  ", "backslash:sym<v>", " at pos=", rx383_pos)
+    .return (rx383_cur)
+  rx383_fail:
 .annotate 'line', 3
-    (rx378_rep, rx378_pos, $I10, $P10) = rx378_cur."!mark_fail"(0)
-    lt rx378_pos, -1, rx378_done
-    eq rx378_pos, -1, rx378_fail
+    (rx383_rep, rx383_pos, $I10, $P10) = rx383_cur."!mark_fail"(0)
+    lt rx383_pos, -1, rx383_done
+    eq rx383_pos, -1, rx383_fail
     jump $I10
-  rx378_done:
-    rx378_cur."!cursor_fail"()
-    rx378_cur."!cursor_debug"("FAIL  ", "backslash:sym<v>")
-    .return (rx378_cur)
+  rx383_done:
+    rx383_cur."!cursor_fail"()
+    rx383_cur."!cursor_debug"("FAIL  ", "backslash:sym<v>")
+    .return (rx383_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<v>"  :subid("108_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<v>"  :subid("108_1275811476.7961") :method
 .annotate 'line', 3
-    new $P380, "ResizablePMCArray"
-    push $P380, "V"
-    push $P380, "v"
-    .return ($P380)
+    new $P385, "ResizablePMCArray"
+    push $P385, "V"
+    push $P385, "v"
+    .return ($P385)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<o>"  :subid("109_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<o>"  :subid("109_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx384_tgt
-    .local int rx384_pos
-    .local int rx384_off
-    .local int rx384_eos
-    .local int rx384_rep
-    .local pmc rx384_cur
-    (rx384_cur, rx384_pos, rx384_tgt) = self."!cursor_start"()
-    rx384_cur."!cursor_debug"("START ", "backslash:sym<o>")
-    .lex unicode:"$\x{a2}", rx384_cur
+    .local string rx389_tgt
+    .local int rx389_pos
+    .local int rx389_off
+    .local int rx389_eos
+    .local int rx389_rep
+    .local pmc rx389_cur
+    (rx389_cur, rx389_pos, rx389_tgt) = self."!cursor_start"()
+    rx389_cur."!cursor_debug"("START ", "backslash:sym<o>")
+    .lex unicode:"$\x{a2}", rx389_cur
     .local pmc match
     .lex "$/", match
-    length rx384_eos, rx384_tgt
-    set rx384_off, 0
-    lt rx384_pos, 2, rx384_start
-    sub rx384_off, rx384_pos, 1
-    substr rx384_tgt, rx384_tgt, rx384_off
-  rx384_start:
+    length rx389_eos, rx389_tgt
+    gt rx389_pos, rx389_eos, rx389_done
+    set rx389_off, 0
+    lt rx389_pos, 2, rx389_start
+    sub rx389_off, rx389_pos, 1
+    substr rx389_tgt, rx389_tgt, rx389_off
+  rx389_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan391_done
-    goto rxscan391_scan
-  rxscan391_loop:
-    ($P10) = rx384_cur."from"()
+    ne $I10, -1, rxscan396_done
+    goto rxscan396_scan
+  rxscan396_loop:
+    ($P10) = rx389_cur."from"()
     inc $P10
-    set rx384_pos, $P10
-    ge rx384_pos, rx384_eos, rxscan391_done
-  rxscan391_scan:
-    set_addr $I10, rxscan391_loop
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
-  rxscan391_done:
+    set rx389_pos, $P10
+    ge rx389_pos, rx389_eos, rxscan396_done
+  rxscan396_scan:
+    set_addr $I10, rxscan396_loop
+    rx389_cur."!mark_push"(0, rx389_pos, $I10)
+  rxscan396_done:
 .annotate 'line', 129
   # rx subcapture "sym"
-    set_addr $I10, rxcap_392_fail
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
+    set_addr $I10, rxcap_397_fail
+    rx389_cur."!mark_push"(0, rx389_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx384_pos, rx384_eos, rx384_fail
-    sub $I10, rx384_pos, rx384_off
-    substr $S10, rx384_tgt, $I10, 1
+    ge rx389_pos, rx389_eos, rx389_fail
+    sub $I10, rx389_pos, rx389_off
+    substr $S10, rx389_tgt, $I10, 1
     index $I11, "oO", $S10
-    lt $I11, 0, rx384_fail
-    inc rx384_pos
-    set_addr $I10, rxcap_392_fail
-    ($I12, $I11) = rx384_cur."!mark_peek"($I10)
-    rx384_cur."!cursor_pos"($I11)
-    ($P10) = rx384_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx384_pos, "")
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx389_fail
+    inc rx389_pos
+    set_addr $I10, rxcap_397_fail
+    ($I12, $I11) = rx389_cur."!mark_peek"($I10)
+    rx389_cur."!cursor_pos"($I11)
+    ($P10) = rx389_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx389_pos, "")
+    rx389_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_392_done
-  rxcap_392_fail:
-    goto rx384_fail
-  rxcap_392_done:
-  alt393_0:
-    set_addr $I10, alt393_1
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
+    goto rxcap_397_done
+  rxcap_397_fail:
+    goto rx389_fail
+  rxcap_397_done:
+  alt398_0:
+    set_addr $I10, alt398_1
+    rx389_cur."!mark_push"(0, rx389_pos, $I10)
   # rx subrule "octint" subtype=capture negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."octint"()
-    unless $P10, rx384_fail
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    rx389_cur."!cursor_pos"(rx389_pos)
+    $P10 = rx389_cur."octint"()
+    unless $P10, rx389_fail
+    rx389_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("octint")
-    rx384_pos = $P10."pos"()
-    goto alt393_end
-  alt393_1:
+    rx389_pos = $P10."pos"()
+    goto alt398_end
+  alt398_1:
   # rx literal  "["
-    add $I11, rx384_pos, 1
-    gt $I11, rx384_eos, rx384_fail
-    sub $I11, rx384_pos, rx384_off
-    substr $S10, rx384_tgt, $I11, 1
-    ne $S10, "[", rx384_fail
-    add rx384_pos, 1
+    add $I11, rx389_pos, 1
+    gt $I11, rx389_eos, rx389_fail
+    sub $I11, rx389_pos, rx389_off
+    substr $S10, rx389_tgt, $I11, 1
+    ne $S10, "[", rx389_fail
+    add rx389_pos, 1
   # rx subrule "octints" subtype=capture negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."octints"()
-    unless $P10, rx384_fail
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    rx389_cur."!cursor_pos"(rx389_pos)
+    $P10 = rx389_cur."octints"()
+    unless $P10, rx389_fail
+    rx389_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("octints")
-    rx384_pos = $P10."pos"()
+    rx389_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx384_pos, 1
-    gt $I11, rx384_eos, rx384_fail
-    sub $I11, rx384_pos, rx384_off
-    substr $S10, rx384_tgt, $I11, 1
-    ne $S10, "]", rx384_fail
-    add rx384_pos, 1
-  alt393_end:
-  # rx pass
-    rx384_cur."!cursor_pass"(rx384_pos, "backslash:sym<o>")
-    rx384_cur."!cursor_debug"("PASS  ", "backslash:sym<o>", " at pos=", rx384_pos)
-    .return (rx384_cur)
-  rx384_fail:
-.annotate 'line', 3
-    (rx384_rep, rx384_pos, $I10, $P10) = rx384_cur."!mark_fail"(0)
-    lt rx384_pos, -1, rx384_done
-    eq rx384_pos, -1, rx384_fail
-    jump $I10
-  rx384_done:
-    rx384_cur."!cursor_fail"()
-    rx384_cur."!cursor_debug"("FAIL  ", "backslash:sym<o>")
-    .return (rx384_cur)
+    add $I11, rx389_pos, 1
+    gt $I11, rx389_eos, rx389_fail
+    sub $I11, rx389_pos, rx389_off
+    substr $S10, rx389_tgt, $I11, 1
+    ne $S10, "]", rx389_fail
+    add rx389_pos, 1
+  alt398_end:
+  # rx pass
+    rx389_cur."!cursor_pass"(rx389_pos, "backslash:sym<o>")
+    rx389_cur."!cursor_debug"("PASS  ", "backslash:sym<o>", " at pos=", rx389_pos)
+    .return (rx389_cur)
+  rx389_fail:
+.annotate 'line', 3
+    (rx389_rep, rx389_pos, $I10, $P10) = rx389_cur."!mark_fail"(0)
+    lt rx389_pos, -1, rx389_done
+    eq rx389_pos, -1, rx389_fail
+    jump $I10
+  rx389_done:
+    rx389_cur."!cursor_fail"()
+    rx389_cur."!cursor_debug"("FAIL  ", "backslash:sym<o>")
+    .return (rx389_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<o>"  :subid("110_1274022883.50471") :method
-.annotate 'line', 3
-    $P386 = self."!PREFIX__!subrule"("octints", "O[")
-    $P387 = self."!PREFIX__!subrule"("octint", "O")
-    $P388 = self."!PREFIX__!subrule"("octints", "o[")
-    $P389 = self."!PREFIX__!subrule"("octint", "o")
-    new $P390, "ResizablePMCArray"
-    push $P390, $P386
-    push $P390, $P387
-    push $P390, $P388
-    push $P390, $P389
-    .return ($P390)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<x>"  :subid("111_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .local string rx395_tgt
-    .local int rx395_pos
-    .local int rx395_off
-    .local int rx395_eos
-    .local int rx395_rep
-    .local pmc rx395_cur
-    (rx395_cur, rx395_pos, rx395_tgt) = self."!cursor_start"()
-    rx395_cur."!cursor_debug"("START ", "backslash:sym<x>")
-    .lex unicode:"$\x{a2}", rx395_cur
-    .local pmc match
-    .lex "$/", match
-    length rx395_eos, rx395_tgt
-    set rx395_off, 0
-    lt rx395_pos, 2, rx395_start
-    sub rx395_off, rx395_pos, 1
-    substr rx395_tgt, rx395_tgt, rx395_off
-  rx395_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan402_done
-    goto rxscan402_scan
-  rxscan402_loop:
-    ($P10) = rx395_cur."from"()
-    inc $P10
-    set rx395_pos, $P10
-    ge rx395_pos, rx395_eos, rxscan402_done
-  rxscan402_scan:
-    set_addr $I10, rxscan402_loop
-    rx395_cur."!mark_push"(0, rx395_pos, $I10)
-  rxscan402_done:
+.sub "!PREFIX__backslash:sym<o>"  :subid("110_1275811476.7961") :method
+.annotate 'line', 3
+    $P391 = self."!PREFIX__!subrule"("octints", "O[")
+    $P392 = self."!PREFIX__!subrule"("octint", "O")
+    $P393 = self."!PREFIX__!subrule"("octints", "o[")
+    $P394 = self."!PREFIX__!subrule"("octint", "o")
+    new $P395, "ResizablePMCArray"
+    push $P395, $P391
+    push $P395, $P392
+    push $P395, $P393
+    push $P395, $P394
+    .return ($P395)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<x>"  :subid("111_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .local string rx400_tgt
+    .local int rx400_pos
+    .local int rx400_off
+    .local int rx400_eos
+    .local int rx400_rep
+    .local pmc rx400_cur
+    (rx400_cur, rx400_pos, rx400_tgt) = self."!cursor_start"()
+    rx400_cur."!cursor_debug"("START ", "backslash:sym<x>")
+    .lex unicode:"$\x{a2}", rx400_cur
+    .local pmc match
+    .lex "$/", match
+    length rx400_eos, rx400_tgt
+    gt rx400_pos, rx400_eos, rx400_done
+    set rx400_off, 0
+    lt rx400_pos, 2, rx400_start
+    sub rx400_off, rx400_pos, 1
+    substr rx400_tgt, rx400_tgt, rx400_off
+  rx400_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan407_done
+    goto rxscan407_scan
+  rxscan407_loop:
+    ($P10) = rx400_cur."from"()
+    inc $P10
+    set rx400_pos, $P10
+    ge rx400_pos, rx400_eos, rxscan407_done
+  rxscan407_scan:
+    set_addr $I10, rxscan407_loop
+    rx400_cur."!mark_push"(0, rx400_pos, $I10)
+  rxscan407_done:
 .annotate 'line', 130
   # rx subcapture "sym"
-    set_addr $I10, rxcap_403_fail
-    rx395_cur."!mark_push"(0, rx395_pos, $I10)
+    set_addr $I10, rxcap_408_fail
+    rx400_cur."!mark_push"(0, rx400_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx395_pos, rx395_eos, rx395_fail
-    sub $I10, rx395_pos, rx395_off
-    substr $S10, rx395_tgt, $I10, 1
+    ge rx400_pos, rx400_eos, rx400_fail
+    sub $I10, rx400_pos, rx400_off
+    substr $S10, rx400_tgt, $I10, 1
     index $I11, "xX", $S10
-    lt $I11, 0, rx395_fail
-    inc rx395_pos
-    set_addr $I10, rxcap_403_fail
-    ($I12, $I11) = rx395_cur."!mark_peek"($I10)
-    rx395_cur."!cursor_pos"($I11)
-    ($P10) = rx395_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx395_pos, "")
-    rx395_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx400_fail
+    inc rx400_pos
+    set_addr $I10, rxcap_408_fail
+    ($I12, $I11) = rx400_cur."!mark_peek"($I10)
+    rx400_cur."!cursor_pos"($I11)
+    ($P10) = rx400_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx400_pos, "")
+    rx400_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_403_done
-  rxcap_403_fail:
-    goto rx395_fail
-  rxcap_403_done:
-  alt404_0:
-    set_addr $I10, alt404_1
-    rx395_cur."!mark_push"(0, rx395_pos, $I10)
+    goto rxcap_408_done
+  rxcap_408_fail:
+    goto rx400_fail
+  rxcap_408_done:
+  alt409_0:
+    set_addr $I10, alt409_1
+    rx400_cur."!mark_push"(0, rx400_pos, $I10)
   # rx subrule "hexint" subtype=capture negate=
-    rx395_cur."!cursor_pos"(rx395_pos)
-    $P10 = rx395_cur."hexint"()
-    unless $P10, rx395_fail
-    rx395_cur."!mark_push"(0, -1, 0, $P10)
+    rx400_cur."!cursor_pos"(rx400_pos)
+    $P10 = rx400_cur."hexint"()
+    unless $P10, rx400_fail
+    rx400_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("hexint")
-    rx395_pos = $P10."pos"()
-    goto alt404_end
-  alt404_1:
+    rx400_pos = $P10."pos"()
+    goto alt409_end
+  alt409_1:
   # rx literal  "["
-    add $I11, rx395_pos, 1
-    gt $I11, rx395_eos, rx395_fail
-    sub $I11, rx395_pos, rx395_off
-    substr $S10, rx395_tgt, $I11, 1
-    ne $S10, "[", rx395_fail
-    add rx395_pos, 1
+    add $I11, rx400_pos, 1
+    gt $I11, rx400_eos, rx400_fail
+    sub $I11, rx400_pos, rx400_off
+    substr $S10, rx400_tgt, $I11, 1
+    ne $S10, "[", rx400_fail
+    add rx400_pos, 1
   # rx subrule "hexints" subtype=capture negate=
-    rx395_cur."!cursor_pos"(rx395_pos)
-    $P10 = rx395_cur."hexints"()
-    unless $P10, rx395_fail
-    rx395_cur."!mark_push"(0, -1, 0, $P10)
+    rx400_cur."!cursor_pos"(rx400_pos)
+    $P10 = rx400_cur."hexints"()
+    unless $P10, rx400_fail
+    rx400_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("hexints")
-    rx395_pos = $P10."pos"()
+    rx400_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx395_pos, 1
-    gt $I11, rx395_eos, rx395_fail
-    sub $I11, rx395_pos, rx395_off
-    substr $S10, rx395_tgt, $I11, 1
-    ne $S10, "]", rx395_fail
-    add rx395_pos, 1
-  alt404_end:
-  # rx pass
-    rx395_cur."!cursor_pass"(rx395_pos, "backslash:sym<x>")
-    rx395_cur."!cursor_debug"("PASS  ", "backslash:sym<x>", " at pos=", rx395_pos)
-    .return (rx395_cur)
-  rx395_fail:
-.annotate 'line', 3
-    (rx395_rep, rx395_pos, $I10, $P10) = rx395_cur."!mark_fail"(0)
-    lt rx395_pos, -1, rx395_done
-    eq rx395_pos, -1, rx395_fail
-    jump $I10
-  rx395_done:
-    rx395_cur."!cursor_fail"()
-    rx395_cur."!cursor_debug"("FAIL  ", "backslash:sym<x>")
-    .return (rx395_cur)
+    add $I11, rx400_pos, 1
+    gt $I11, rx400_eos, rx400_fail
+    sub $I11, rx400_pos, rx400_off
+    substr $S10, rx400_tgt, $I11, 1
+    ne $S10, "]", rx400_fail
+    add rx400_pos, 1
+  alt409_end:
+  # rx pass
+    rx400_cur."!cursor_pass"(rx400_pos, "backslash:sym<x>")
+    rx400_cur."!cursor_debug"("PASS  ", "backslash:sym<x>", " at pos=", rx400_pos)
+    .return (rx400_cur)
+  rx400_fail:
+.annotate 'line', 3
+    (rx400_rep, rx400_pos, $I10, $P10) = rx400_cur."!mark_fail"(0)
+    lt rx400_pos, -1, rx400_done
+    eq rx400_pos, -1, rx400_fail
+    jump $I10
+  rx400_done:
+    rx400_cur."!cursor_fail"()
+    rx400_cur."!cursor_debug"("FAIL  ", "backslash:sym<x>")
+    .return (rx400_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<x>"  :subid("112_1274022883.50471") :method
-.annotate 'line', 3
-    $P397 = self."!PREFIX__!subrule"("hexints", "X[")
-    $P398 = self."!PREFIX__!subrule"("hexint", "X")
-    $P399 = self."!PREFIX__!subrule"("hexints", "x[")
-    $P400 = self."!PREFIX__!subrule"("hexint", "x")
-    new $P401, "ResizablePMCArray"
-    push $P401, $P397
-    push $P401, $P398
-    push $P401, $P399
-    push $P401, $P400
-    .return ($P401)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<c>"  :subid("113_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .local string rx406_tgt
-    .local int rx406_pos
-    .local int rx406_off
-    .local int rx406_eos
-    .local int rx406_rep
-    .local pmc rx406_cur
-    (rx406_cur, rx406_pos, rx406_tgt) = self."!cursor_start"()
-    rx406_cur."!cursor_debug"("START ", "backslash:sym<c>")
-    .lex unicode:"$\x{a2}", rx406_cur
-    .local pmc match
-    .lex "$/", match
-    length rx406_eos, rx406_tgt
-    set rx406_off, 0
-    lt rx406_pos, 2, rx406_start
-    sub rx406_off, rx406_pos, 1
-    substr rx406_tgt, rx406_tgt, rx406_off
-  rx406_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan411_done
-    goto rxscan411_scan
-  rxscan411_loop:
-    ($P10) = rx406_cur."from"()
-    inc $P10
-    set rx406_pos, $P10
-    ge rx406_pos, rx406_eos, rxscan411_done
-  rxscan411_scan:
-    set_addr $I10, rxscan411_loop
-    rx406_cur."!mark_push"(0, rx406_pos, $I10)
-  rxscan411_done:
+.sub "!PREFIX__backslash:sym<x>"  :subid("112_1275811476.7961") :method
+.annotate 'line', 3
+    $P402 = self."!PREFIX__!subrule"("hexints", "X[")
+    $P403 = self."!PREFIX__!subrule"("hexint", "X")
+    $P404 = self."!PREFIX__!subrule"("hexints", "x[")
+    $P405 = self."!PREFIX__!subrule"("hexint", "x")
+    new $P406, "ResizablePMCArray"
+    push $P406, $P402
+    push $P406, $P403
+    push $P406, $P404
+    push $P406, $P405
+    .return ($P406)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<c>"  :subid("113_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .local string rx411_tgt
+    .local int rx411_pos
+    .local int rx411_off
+    .local int rx411_eos
+    .local int rx411_rep
+    .local pmc rx411_cur
+    (rx411_cur, rx411_pos, rx411_tgt) = self."!cursor_start"()
+    rx411_cur."!cursor_debug"("START ", "backslash:sym<c>")
+    .lex unicode:"$\x{a2}", rx411_cur
+    .local pmc match
+    .lex "$/", match
+    length rx411_eos, rx411_tgt
+    gt rx411_pos, rx411_eos, rx411_done
+    set rx411_off, 0
+    lt rx411_pos, 2, rx411_start
+    sub rx411_off, rx411_pos, 1
+    substr rx411_tgt, rx411_tgt, rx411_off
+  rx411_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan416_done
+    goto rxscan416_scan
+  rxscan416_loop:
+    ($P10) = rx411_cur."from"()
+    inc $P10
+    set rx411_pos, $P10
+    ge rx411_pos, rx411_eos, rxscan416_done
+  rxscan416_scan:
+    set_addr $I10, rxscan416_loop
+    rx411_cur."!mark_push"(0, rx411_pos, $I10)
+  rxscan416_done:
 .annotate 'line', 131
   # rx subcapture "sym"
-    set_addr $I10, rxcap_412_fail
-    rx406_cur."!mark_push"(0, rx406_pos, $I10)
+    set_addr $I10, rxcap_417_fail
+    rx411_cur."!mark_push"(0, rx411_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx406_pos, rx406_eos, rx406_fail
-    sub $I10, rx406_pos, rx406_off
-    substr $S10, rx406_tgt, $I10, 1
+    ge rx411_pos, rx411_eos, rx411_fail
+    sub $I10, rx411_pos, rx411_off
+    substr $S10, rx411_tgt, $I10, 1
     index $I11, "cC", $S10
-    lt $I11, 0, rx406_fail
-    inc rx406_pos
-    set_addr $I10, rxcap_412_fail
-    ($I12, $I11) = rx406_cur."!mark_peek"($I10)
-    rx406_cur."!cursor_pos"($I11)
-    ($P10) = rx406_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx406_pos, "")
-    rx406_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx411_fail
+    inc rx411_pos
+    set_addr $I10, rxcap_417_fail
+    ($I12, $I11) = rx411_cur."!mark_peek"($I10)
+    rx411_cur."!cursor_pos"($I11)
+    ($P10) = rx411_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx411_pos, "")
+    rx411_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_412_done
-  rxcap_412_fail:
-    goto rx406_fail
-  rxcap_412_done:
+    goto rxcap_417_done
+  rxcap_417_fail:
+    goto rx411_fail
+  rxcap_417_done:
   # rx subrule "charspec" subtype=capture negate=
-    rx406_cur."!cursor_pos"(rx406_pos)
-    $P10 = rx406_cur."charspec"()
-    unless $P10, rx406_fail
-    rx406_cur."!mark_push"(0, -1, 0, $P10)
+    rx411_cur."!cursor_pos"(rx411_pos)
+    $P10 = rx411_cur."charspec"()
+    unless $P10, rx411_fail
+    rx411_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("charspec")
-    rx406_pos = $P10."pos"()
+    rx411_pos = $P10."pos"()
   # rx pass
-    rx406_cur."!cursor_pass"(rx406_pos, "backslash:sym<c>")
-    rx406_cur."!cursor_debug"("PASS  ", "backslash:sym<c>", " at pos=", rx406_pos)
-    .return (rx406_cur)
-  rx406_fail:
+    rx411_cur."!cursor_pass"(rx411_pos, "backslash:sym<c>")
+    rx411_cur."!cursor_debug"("PASS  ", "backslash:sym<c>", " at pos=", rx411_pos)
+    .return (rx411_cur)
+  rx411_fail:
 .annotate 'line', 3
-    (rx406_rep, rx406_pos, $I10, $P10) = rx406_cur."!mark_fail"(0)
-    lt rx406_pos, -1, rx406_done
-    eq rx406_pos, -1, rx406_fail
+    (rx411_rep, rx411_pos, $I10, $P10) = rx411_cur."!mark_fail"(0)
+    lt rx411_pos, -1, rx411_done
+    eq rx411_pos, -1, rx411_fail
     jump $I10
-  rx406_done:
-    rx406_cur."!cursor_fail"()
-    rx406_cur."!cursor_debug"("FAIL  ", "backslash:sym<c>")
-    .return (rx406_cur)
+  rx411_done:
+    rx411_cur."!cursor_fail"()
+    rx411_cur."!cursor_debug"("FAIL  ", "backslash:sym<c>")
+    .return (rx411_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<c>"  :subid("114_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<c>"  :subid("114_1275811476.7961") :method
 .annotate 'line', 3
-    $P408 = self."!PREFIX__!subrule"("charspec", "C")
-    $P409 = self."!PREFIX__!subrule"("charspec", "c")
-    new $P410, "ResizablePMCArray"
-    push $P410, $P408
-    push $P410, $P409
-    .return ($P410)
+    $P413 = self."!PREFIX__!subrule"("charspec", "C")
+    $P414 = self."!PREFIX__!subrule"("charspec", "c")
+    new $P415, "ResizablePMCArray"
+    push $P415, $P413
+    push $P415, $P414
+    .return ($P415)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<A>"  :subid("115_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<A>"  :subid("115_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx414_tgt
-    .local int rx414_pos
-    .local int rx414_off
-    .local int rx414_eos
-    .local int rx414_rep
-    .local pmc rx414_cur
-    (rx414_cur, rx414_pos, rx414_tgt) = self."!cursor_start"()
-    rx414_cur."!cursor_debug"("START ", "backslash:sym<A>")
-    .lex unicode:"$\x{a2}", rx414_cur
+    .local string rx419_tgt
+    .local int rx419_pos
+    .local int rx419_off
+    .local int rx419_eos
+    .local int rx419_rep
+    .local pmc rx419_cur
+    (rx419_cur, rx419_pos, rx419_tgt) = self."!cursor_start"()
+    rx419_cur."!cursor_debug"("START ", "backslash:sym<A>")
+    .lex unicode:"$\x{a2}", rx419_cur
     .local pmc match
     .lex "$/", match
-    length rx414_eos, rx414_tgt
-    set rx414_off, 0
-    lt rx414_pos, 2, rx414_start
-    sub rx414_off, rx414_pos, 1
-    substr rx414_tgt, rx414_tgt, rx414_off
-  rx414_start:
+    length rx419_eos, rx419_tgt
+    gt rx419_pos, rx419_eos, rx419_done
+    set rx419_off, 0
+    lt rx419_pos, 2, rx419_start
+    sub rx419_off, rx419_pos, 1
+    substr rx419_tgt, rx419_tgt, rx419_off
+  rx419_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan418_done
-    goto rxscan418_scan
-  rxscan418_loop:
-    ($P10) = rx414_cur."from"()
+    ne $I10, -1, rxscan423_done
+    goto rxscan423_scan
+  rxscan423_loop:
+    ($P10) = rx419_cur."from"()
     inc $P10
-    set rx414_pos, $P10
-    ge rx414_pos, rx414_eos, rxscan418_done
-  rxscan418_scan:
-    set_addr $I10, rxscan418_loop
-    rx414_cur."!mark_push"(0, rx414_pos, $I10)
-  rxscan418_done:
+    set rx419_pos, $P10
+    ge rx419_pos, rx419_eos, rxscan423_done
+  rxscan423_scan:
+    set_addr $I10, rxscan423_loop
+    rx419_cur."!mark_push"(0, rx419_pos, $I10)
+  rxscan423_done:
 .annotate 'line', 132
   # rx literal  "A"
-    add $I11, rx414_pos, 1
-    gt $I11, rx414_eos, rx414_fail
-    sub $I11, rx414_pos, rx414_off
-    substr $S10, rx414_tgt, $I11, 1
-    ne $S10, "A", rx414_fail
-    add rx414_pos, 1
+    add $I11, rx419_pos, 1
+    gt $I11, rx419_eos, rx419_fail
+    sub $I11, rx419_pos, rx419_off
+    substr $S10, rx419_tgt, $I11, 1
+    ne $S10, "A", rx419_fail
+    add rx419_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx414_cur."!cursor_pos"(rx414_pos)
-    $P10 = rx414_cur."obs"("\\A as beginning-of-string matcher", "^")
-    unless $P10, rx414_fail
-    rx414_pos = $P10."pos"()
+    rx419_cur."!cursor_pos"(rx419_pos)
+    $P10 = rx419_cur."obs"("\\A as beginning-of-string matcher", "^")
+    unless $P10, rx419_fail
+    rx419_pos = $P10."pos"()
   # rx pass
-    rx414_cur."!cursor_pass"(rx414_pos, "backslash:sym<A>")
-    rx414_cur."!cursor_debug"("PASS  ", "backslash:sym<A>", " at pos=", rx414_pos)
-    .return (rx414_cur)
-  rx414_fail:
+    rx419_cur."!cursor_pass"(rx419_pos, "backslash:sym<A>")
+    rx419_cur."!cursor_debug"("PASS  ", "backslash:sym<A>", " at pos=", rx419_pos)
+    .return (rx419_cur)
+  rx419_fail:
 .annotate 'line', 3
-    (rx414_rep, rx414_pos, $I10, $P10) = rx414_cur."!mark_fail"(0)
-    lt rx414_pos, -1, rx414_done
-    eq rx414_pos, -1, rx414_fail
+    (rx419_rep, rx419_pos, $I10, $P10) = rx419_cur."!mark_fail"(0)
+    lt rx419_pos, -1, rx419_done
+    eq rx419_pos, -1, rx419_fail
     jump $I10
-  rx414_done:
-    rx414_cur."!cursor_fail"()
-    rx414_cur."!cursor_debug"("FAIL  ", "backslash:sym<A>")
-    .return (rx414_cur)
+  rx419_done:
+    rx419_cur."!cursor_fail"()
+    rx419_cur."!cursor_debug"("FAIL  ", "backslash:sym<A>")
+    .return (rx419_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<A>"  :subid("116_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<A>"  :subid("116_1275811476.7961") :method
 .annotate 'line', 3
-    $P416 = self."!PREFIX__!subrule"("", "A")
-    new $P417, "ResizablePMCArray"
-    push $P417, $P416
-    .return ($P417)
+    $P421 = self."!PREFIX__!subrule"("obs", "A")
+    new $P422, "ResizablePMCArray"
+    push $P422, $P421
+    .return ($P422)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<z>"  :subid("117_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<z>"  :subid("117_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx420_tgt
-    .local int rx420_pos
-    .local int rx420_off
-    .local int rx420_eos
-    .local int rx420_rep
-    .local pmc rx420_cur
-    (rx420_cur, rx420_pos, rx420_tgt) = self."!cursor_start"()
-    rx420_cur."!cursor_debug"("START ", "backslash:sym<z>")
-    .lex unicode:"$\x{a2}", rx420_cur
-    .local pmc match
-    .lex "$/", match
-    length rx420_eos, rx420_tgt
-    set rx420_off, 0
-    lt rx420_pos, 2, rx420_start
-    sub rx420_off, rx420_pos, 1
-    substr rx420_tgt, rx420_tgt, rx420_off
-  rx420_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan424_done
-    goto rxscan424_scan
-  rxscan424_loop:
-    ($P10) = rx420_cur."from"()
-    inc $P10
-    set rx420_pos, $P10
-    ge rx420_pos, rx420_eos, rxscan424_done
-  rxscan424_scan:
-    set_addr $I10, rxscan424_loop
-    rx420_cur."!mark_push"(0, rx420_pos, $I10)
-  rxscan424_done:
+    .local string rx425_tgt
+    .local int rx425_pos
+    .local int rx425_off
+    .local int rx425_eos
+    .local int rx425_rep
+    .local pmc rx425_cur
+    (rx425_cur, rx425_pos, rx425_tgt) = self."!cursor_start"()
+    rx425_cur."!cursor_debug"("START ", "backslash:sym<z>")
+    .lex unicode:"$\x{a2}", rx425_cur
+    .local pmc match
+    .lex "$/", match
+    length rx425_eos, rx425_tgt
+    gt rx425_pos, rx425_eos, rx425_done
+    set rx425_off, 0
+    lt rx425_pos, 2, rx425_start
+    sub rx425_off, rx425_pos, 1
+    substr rx425_tgt, rx425_tgt, rx425_off
+  rx425_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan429_done
+    goto rxscan429_scan
+  rxscan429_loop:
+    ($P10) = rx425_cur."from"()
+    inc $P10
+    set rx425_pos, $P10
+    ge rx425_pos, rx425_eos, rxscan429_done
+  rxscan429_scan:
+    set_addr $I10, rxscan429_loop
+    rx425_cur."!mark_push"(0, rx425_pos, $I10)
+  rxscan429_done:
 .annotate 'line', 133
   # rx literal  "z"
-    add $I11, rx420_pos, 1
-    gt $I11, rx420_eos, rx420_fail
-    sub $I11, rx420_pos, rx420_off
-    substr $S10, rx420_tgt, $I11, 1
-    ne $S10, "z", rx420_fail
-    add rx420_pos, 1
+    add $I11, rx425_pos, 1
+    gt $I11, rx425_eos, rx425_fail
+    sub $I11, rx425_pos, rx425_off
+    substr $S10, rx425_tgt, $I11, 1
+    ne $S10, "z", rx425_fail
+    add rx425_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx420_cur."!cursor_pos"(rx420_pos)
-    $P10 = rx420_cur."obs"("\\z as end-of-string matcher", "$")
-    unless $P10, rx420_fail
-    rx420_pos = $P10."pos"()
+    rx425_cur."!cursor_pos"(rx425_pos)
+    $P10 = rx425_cur."obs"("\\z as end-of-string matcher", "$")
+    unless $P10, rx425_fail
+    rx425_pos = $P10."pos"()
   # rx pass
-    rx420_cur."!cursor_pass"(rx420_pos, "backslash:sym<z>")
-    rx420_cur."!cursor_debug"("PASS  ", "backslash:sym<z>", " at pos=", rx420_pos)
-    .return (rx420_cur)
-  rx420_fail:
+    rx425_cur."!cursor_pass"(rx425_pos, "backslash:sym<z>")
+    rx425_cur."!cursor_debug"("PASS  ", "backslash:sym<z>", " at pos=", rx425_pos)
+    .return (rx425_cur)
+  rx425_fail:
 .annotate 'line', 3
-    (rx420_rep, rx420_pos, $I10, $P10) = rx420_cur."!mark_fail"(0)
-    lt rx420_pos, -1, rx420_done
-    eq rx420_pos, -1, rx420_fail
+    (rx425_rep, rx425_pos, $I10, $P10) = rx425_cur."!mark_fail"(0)
+    lt rx425_pos, -1, rx425_done
+    eq rx425_pos, -1, rx425_fail
     jump $I10
-  rx420_done:
-    rx420_cur."!cursor_fail"()
-    rx420_cur."!cursor_debug"("FAIL  ", "backslash:sym<z>")
-    .return (rx420_cur)
+  rx425_done:
+    rx425_cur."!cursor_fail"()
+    rx425_cur."!cursor_debug"("FAIL  ", "backslash:sym<z>")
+    .return (rx425_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<z>"  :subid("118_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<z>"  :subid("118_1275811476.7961") :method
 .annotate 'line', 3
-    $P422 = self."!PREFIX__!subrule"("", "z")
-    new $P423, "ResizablePMCArray"
-    push $P423, $P422
-    .return ($P423)
+    $P427 = self."!PREFIX__!subrule"("obs", "z")
+    new $P428, "ResizablePMCArray"
+    push $P428, $P427
+    .return ($P428)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<Z>"  :subid("119_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<Z>"  :subid("119_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx426_tgt
-    .local int rx426_pos
-    .local int rx426_off
-    .local int rx426_eos
-    .local int rx426_rep
-    .local pmc rx426_cur
-    (rx426_cur, rx426_pos, rx426_tgt) = self."!cursor_start"()
-    rx426_cur."!cursor_debug"("START ", "backslash:sym<Z>")
-    .lex unicode:"$\x{a2}", rx426_cur
+    .local string rx431_tgt
+    .local int rx431_pos
+    .local int rx431_off
+    .local int rx431_eos
+    .local int rx431_rep
+    .local pmc rx431_cur
+    (rx431_cur, rx431_pos, rx431_tgt) = self."!cursor_start"()
+    rx431_cur."!cursor_debug"("START ", "backslash:sym<Z>")
+    .lex unicode:"$\x{a2}", rx431_cur
     .local pmc match
     .lex "$/", match
-    length rx426_eos, rx426_tgt
-    set rx426_off, 0
-    lt rx426_pos, 2, rx426_start
-    sub rx426_off, rx426_pos, 1
-    substr rx426_tgt, rx426_tgt, rx426_off
-  rx426_start:
+    length rx431_eos, rx431_tgt
+    gt rx431_pos, rx431_eos, rx431_done
+    set rx431_off, 0
+    lt rx431_pos, 2, rx431_start
+    sub rx431_off, rx431_pos, 1
+    substr rx431_tgt, rx431_tgt, rx431_off
+  rx431_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan430_done
-    goto rxscan430_scan
-  rxscan430_loop:
-    ($P10) = rx426_cur."from"()
+    ne $I10, -1, rxscan435_done
+    goto rxscan435_scan
+  rxscan435_loop:
+    ($P10) = rx431_cur."from"()
     inc $P10
-    set rx426_pos, $P10
-    ge rx426_pos, rx426_eos, rxscan430_done
-  rxscan430_scan:
-    set_addr $I10, rxscan430_loop
-    rx426_cur."!mark_push"(0, rx426_pos, $I10)
-  rxscan430_done:
+    set rx431_pos, $P10
+    ge rx431_pos, rx431_eos, rxscan435_done
+  rxscan435_scan:
+    set_addr $I10, rxscan435_loop
+    rx431_cur."!mark_push"(0, rx431_pos, $I10)
+  rxscan435_done:
 .annotate 'line', 134
   # rx literal  "Z"
-    add $I11, rx426_pos, 1
-    gt $I11, rx426_eos, rx426_fail
-    sub $I11, rx426_pos, rx426_off
-    substr $S10, rx426_tgt, $I11, 1
-    ne $S10, "Z", rx426_fail
-    add rx426_pos, 1
+    add $I11, rx431_pos, 1
+    gt $I11, rx431_eos, rx431_fail
+    sub $I11, rx431_pos, rx431_off
+    substr $S10, rx431_tgt, $I11, 1
+    ne $S10, "Z", rx431_fail
+    add rx431_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx426_cur."!cursor_pos"(rx426_pos)
-    $P10 = rx426_cur."obs"("\\Z as end-of-string matcher", "\\n?$")
-    unless $P10, rx426_fail
-    rx426_pos = $P10."pos"()
+    rx431_cur."!cursor_pos"(rx431_pos)
+    $P10 = rx431_cur."obs"("\\Z as end-of-string matcher", "\\n?$")
+    unless $P10, rx431_fail
+    rx431_pos = $P10."pos"()
   # rx pass
-    rx426_cur."!cursor_pass"(rx426_pos, "backslash:sym<Z>")
-    rx426_cur."!cursor_debug"("PASS  ", "backslash:sym<Z>", " at pos=", rx426_pos)
-    .return (rx426_cur)
-  rx426_fail:
+    rx431_cur."!cursor_pass"(rx431_pos, "backslash:sym<Z>")
+    rx431_cur."!cursor_debug"("PASS  ", "backslash:sym<Z>", " at pos=", rx431_pos)
+    .return (rx431_cur)
+  rx431_fail:
 .annotate 'line', 3
-    (rx426_rep, rx426_pos, $I10, $P10) = rx426_cur."!mark_fail"(0)
-    lt rx426_pos, -1, rx426_done
-    eq rx426_pos, -1, rx426_fail
+    (rx431_rep, rx431_pos, $I10, $P10) = rx431_cur."!mark_fail"(0)
+    lt rx431_pos, -1, rx431_done
+    eq rx431_pos, -1, rx431_fail
     jump $I10
-  rx426_done:
-    rx426_cur."!cursor_fail"()
-    rx426_cur."!cursor_debug"("FAIL  ", "backslash:sym<Z>")
-    .return (rx426_cur)
+  rx431_done:
+    rx431_cur."!cursor_fail"()
+    rx431_cur."!cursor_debug"("FAIL  ", "backslash:sym<Z>")
+    .return (rx431_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<Z>"  :subid("120_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<Z>"  :subid("120_1275811476.7961") :method
 .annotate 'line', 3
-    $P428 = self."!PREFIX__!subrule"("", "Z")
-    new $P429, "ResizablePMCArray"
-    push $P429, $P428
-    .return ($P429)
+    $P433 = self."!PREFIX__!subrule"("obs", "Z")
+    new $P434, "ResizablePMCArray"
+    push $P434, $P433
+    .return ($P434)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<Q>"  :subid("121_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<Q>"  :subid("121_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx432_tgt
-    .local int rx432_pos
-    .local int rx432_off
-    .local int rx432_eos
-    .local int rx432_rep
-    .local pmc rx432_cur
-    (rx432_cur, rx432_pos, rx432_tgt) = self."!cursor_start"()
-    rx432_cur."!cursor_debug"("START ", "backslash:sym<Q>")
-    .lex unicode:"$\x{a2}", rx432_cur
+    .local string rx437_tgt
+    .local int rx437_pos
+    .local int rx437_off
+    .local int rx437_eos
+    .local int rx437_rep
+    .local pmc rx437_cur
+    (rx437_cur, rx437_pos, rx437_tgt) = self."!cursor_start"()
+    rx437_cur."!cursor_debug"("START ", "backslash:sym<Q>")
+    .lex unicode:"$\x{a2}", rx437_cur
     .local pmc match
     .lex "$/", match
-    length rx432_eos, rx432_tgt
-    set rx432_off, 0
-    lt rx432_pos, 2, rx432_start
-    sub rx432_off, rx432_pos, 1
-    substr rx432_tgt, rx432_tgt, rx432_off
-  rx432_start:
+    length rx437_eos, rx437_tgt
+    gt rx437_pos, rx437_eos, rx437_done
+    set rx437_off, 0
+    lt rx437_pos, 2, rx437_start
+    sub rx437_off, rx437_pos, 1
+    substr rx437_tgt, rx437_tgt, rx437_off
+  rx437_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan436_done
-    goto rxscan436_scan
-  rxscan436_loop:
-    ($P10) = rx432_cur."from"()
+    ne $I10, -1, rxscan441_done
+    goto rxscan441_scan
+  rxscan441_loop:
+    ($P10) = rx437_cur."from"()
     inc $P10
-    set rx432_pos, $P10
-    ge rx432_pos, rx432_eos, rxscan436_done
-  rxscan436_scan:
-    set_addr $I10, rxscan436_loop
-    rx432_cur."!mark_push"(0, rx432_pos, $I10)
-  rxscan436_done:
+    set rx437_pos, $P10
+    ge rx437_pos, rx437_eos, rxscan441_done
+  rxscan441_scan:
+    set_addr $I10, rxscan441_loop
+    rx437_cur."!mark_push"(0, rx437_pos, $I10)
+  rxscan441_done:
 .annotate 'line', 135
   # rx literal  "Q"
-    add $I11, rx432_pos, 1
-    gt $I11, rx432_eos, rx432_fail
-    sub $I11, rx432_pos, rx432_off
-    substr $S10, rx432_tgt, $I11, 1
-    ne $S10, "Q", rx432_fail
-    add rx432_pos, 1
+    add $I11, rx437_pos, 1
+    gt $I11, rx437_eos, rx437_fail
+    sub $I11, rx437_pos, rx437_off
+    substr $S10, rx437_tgt, $I11, 1
+    ne $S10, "Q", rx437_fail
+    add rx437_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx432_cur."!cursor_pos"(rx432_pos)
-    $P10 = rx432_cur."obs"("\\Q as quotemeta", "quotes or literal variable match")
-    unless $P10, rx432_fail
-    rx432_pos = $P10."pos"()
+    rx437_cur."!cursor_pos"(rx437_pos)
+    $P10 = rx437_cur."obs"("\\Q as quotemeta", "quotes or literal variable match")
+    unless $P10, rx437_fail
+    rx437_pos = $P10."pos"()
   # rx pass
-    rx432_cur."!cursor_pass"(rx432_pos, "backslash:sym<Q>")
-    rx432_cur."!cursor_debug"("PASS  ", "backslash:sym<Q>", " at pos=", rx432_pos)
-    .return (rx432_cur)
-  rx432_fail:
+    rx437_cur."!cursor_pass"(rx437_pos, "backslash:sym<Q>")
+    rx437_cur."!cursor_debug"("PASS  ", "backslash:sym<Q>", " at pos=", rx437_pos)
+    .return (rx437_cur)
+  rx437_fail:
 .annotate 'line', 3
-    (rx432_rep, rx432_pos, $I10, $P10) = rx432_cur."!mark_fail"(0)
-    lt rx432_pos, -1, rx432_done
-    eq rx432_pos, -1, rx432_fail
+    (rx437_rep, rx437_pos, $I10, $P10) = rx437_cur."!mark_fail"(0)
+    lt rx437_pos, -1, rx437_done
+    eq rx437_pos, -1, rx437_fail
     jump $I10
-  rx432_done:
-    rx432_cur."!cursor_fail"()
-    rx432_cur."!cursor_debug"("FAIL  ", "backslash:sym<Q>")
-    .return (rx432_cur)
+  rx437_done:
+    rx437_cur."!cursor_fail"()
+    rx437_cur."!cursor_debug"("FAIL  ", "backslash:sym<Q>")
+    .return (rx437_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<Q>"  :subid("122_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<Q>"  :subid("122_1275811476.7961") :method
 .annotate 'line', 3
-    $P434 = self."!PREFIX__!subrule"("", "Q")
-    new $P435, "ResizablePMCArray"
-    push $P435, $P434
-    .return ($P435)
+    $P439 = self."!PREFIX__!subrule"("obs", "Q")
+    new $P440, "ResizablePMCArray"
+    push $P440, $P439
+    .return ($P440)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<misc>"  :subid("123_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "backslash:sym<misc>"  :subid("123_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx438_tgt
-    .local int rx438_pos
-    .local int rx438_off
-    .local int rx438_eos
-    .local int rx438_rep
-    .local pmc rx438_cur
-    (rx438_cur, rx438_pos, rx438_tgt) = self."!cursor_start"()
-    rx438_cur."!cursor_debug"("START ", "backslash:sym<misc>")
-    .lex unicode:"$\x{a2}", rx438_cur
-    .local pmc match
-    .lex "$/", match
-    length rx438_eos, rx438_tgt
-    set rx438_off, 0
-    lt rx438_pos, 2, rx438_start
-    sub rx438_off, rx438_pos, 1
-    substr rx438_tgt, rx438_tgt, rx438_off
-  rx438_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan441_done
-    goto rxscan441_scan
-  rxscan441_loop:
-    ($P10) = rx438_cur."from"()
-    inc $P10
-    set rx438_pos, $P10
-    ge rx438_pos, rx438_eos, rxscan441_done
-  rxscan441_scan:
-    set_addr $I10, rxscan441_loop
-    rx438_cur."!mark_push"(0, rx438_pos, $I10)
-  rxscan441_done:
+    .local string rx443_tgt
+    .local int rx443_pos
+    .local int rx443_off
+    .local int rx443_eos
+    .local int rx443_rep
+    .local pmc rx443_cur
+    (rx443_cur, rx443_pos, rx443_tgt) = self."!cursor_start"()
+    rx443_cur."!cursor_debug"("START ", "backslash:sym<misc>")
+    .lex unicode:"$\x{a2}", rx443_cur
+    .local pmc match
+    .lex "$/", match
+    length rx443_eos, rx443_tgt
+    gt rx443_pos, rx443_eos, rx443_done
+    set rx443_off, 0
+    lt rx443_pos, 2, rx443_start
+    sub rx443_off, rx443_pos, 1
+    substr rx443_tgt, rx443_tgt, rx443_off
+  rx443_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan446_done
+    goto rxscan446_scan
+  rxscan446_loop:
+    ($P10) = rx443_cur."from"()
+    inc $P10
+    set rx443_pos, $P10
+    ge rx443_pos, rx443_eos, rxscan446_done
+  rxscan446_scan:
+    set_addr $I10, rxscan446_loop
+    rx443_cur."!mark_push"(0, rx443_pos, $I10)
+  rxscan446_done:
 .annotate 'line', 136
   # rx charclass W
-    ge rx438_pos, rx438_eos, rx438_fail
-    sub $I10, rx438_pos, rx438_off
-    is_cclass $I11, 8192, rx438_tgt, $I10
-    if $I11, rx438_fail
-    inc rx438_pos
+    ge rx443_pos, rx443_eos, rx443_fail
+    sub $I10, rx443_pos, rx443_off
+    is_cclass $I11, 8192, rx443_tgt, $I10
+    if $I11, rx443_fail
+    inc rx443_pos
   # rx pass
-    rx438_cur."!cursor_pass"(rx438_pos, "backslash:sym<misc>")
-    rx438_cur."!cursor_debug"("PASS  ", "backslash:sym<misc>", " at pos=", rx438_pos)
-    .return (rx438_cur)
-  rx438_fail:
+    rx443_cur."!cursor_pass"(rx443_pos, "backslash:sym<misc>")
+    rx443_cur."!cursor_debug"("PASS  ", "backslash:sym<misc>", " at pos=", rx443_pos)
+    .return (rx443_cur)
+  rx443_fail:
 .annotate 'line', 3
-    (rx438_rep, rx438_pos, $I10, $P10) = rx438_cur."!mark_fail"(0)
-    lt rx438_pos, -1, rx438_done
-    eq rx438_pos, -1, rx438_fail
+    (rx443_rep, rx443_pos, $I10, $P10) = rx443_cur."!mark_fail"(0)
+    lt rx443_pos, -1, rx443_done
+    eq rx443_pos, -1, rx443_fail
     jump $I10
-  rx438_done:
-    rx438_cur."!cursor_fail"()
-    rx438_cur."!cursor_debug"("FAIL  ", "backslash:sym<misc>")
-    .return (rx438_cur)
+  rx443_done:
+    rx443_cur."!cursor_fail"()
+    rx443_cur."!cursor_debug"("FAIL  ", "backslash:sym<misc>")
+    .return (rx443_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<misc>"  :subid("124_1274022883.50471") :method
+.sub "!PREFIX__backslash:sym<misc>"  :subid("124_1275811476.7961") :method
 .annotate 'line', 3
-    new $P440, "ResizablePMCArray"
-    push $P440, ""
-    .return ($P440)
+    new $P445, "ResizablePMCArray"
+    push $P445, ""
+    .return ($P445)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion"  :subid("125_1274022883.50471") :method
+.sub "assertion"  :subid("125_1275811476.7961") :method
 .annotate 'line', 138
-    $P443 = self."!protoregex"("assertion")
-    .return ($P443)
+    $P448 = self."!protoregex"("assertion")
+    .return ($P448)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion"  :subid("126_1274022883.50471") :method
+.sub "!PREFIX__assertion"  :subid("126_1275811476.7961") :method
 .annotate 'line', 138
-    $P445 = self."!PREFIX__!protoregex"("assertion")
-    .return ($P445)
+    $P450 = self."!PREFIX__!protoregex"("assertion")
+    .return ($P450)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<?>"  :subid("127_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "assertion:sym<?>"  :subid("127_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .const 'Sub' $P454 = "129_1274022883.50471" 
-    capture_lex $P454
-    .local string rx447_tgt
-    .local int rx447_pos
-    .local int rx447_off
-    .local int rx447_eos
-    .local int rx447_rep
-    .local pmc rx447_cur
-    (rx447_cur, rx447_pos, rx447_tgt) = self."!cursor_start"()
-    rx447_cur."!cursor_debug"("START ", "assertion:sym<?>")
-    .lex unicode:"$\x{a2}", rx447_cur
-    .local pmc match
-    .lex "$/", match
-    length rx447_eos, rx447_tgt
-    set rx447_off, 0
-    lt rx447_pos, 2, rx447_start
-    sub rx447_off, rx447_pos, 1
-    substr rx447_tgt, rx447_tgt, rx447_off
-  rx447_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan451_done
-    goto rxscan451_scan
-  rxscan451_loop:
-    ($P10) = rx447_cur."from"()
-    inc $P10
-    set rx447_pos, $P10
-    ge rx447_pos, rx447_eos, rxscan451_done
-  rxscan451_scan:
-    set_addr $I10, rxscan451_loop
-    rx447_cur."!mark_push"(0, rx447_pos, $I10)
-  rxscan451_done:
+    .const 'Sub' $P459 = "129_1275811476.7961" 
+    capture_lex $P459
+    .local string rx452_tgt
+    .local int rx452_pos
+    .local int rx452_off
+    .local int rx452_eos
+    .local int rx452_rep
+    .local pmc rx452_cur
+    (rx452_cur, rx452_pos, rx452_tgt) = self."!cursor_start"()
+    rx452_cur."!cursor_debug"("START ", "assertion:sym<?>")
+    .lex unicode:"$\x{a2}", rx452_cur
+    .local pmc match
+    .lex "$/", match
+    length rx452_eos, rx452_tgt
+    gt rx452_pos, rx452_eos, rx452_done
+    set rx452_off, 0
+    lt rx452_pos, 2, rx452_start
+    sub rx452_off, rx452_pos, 1
+    substr rx452_tgt, rx452_tgt, rx452_off
+  rx452_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan456_done
+    goto rxscan456_scan
+  rxscan456_loop:
+    ($P10) = rx452_cur."from"()
+    inc $P10
+    set rx452_pos, $P10
+    ge rx452_pos, rx452_eos, rxscan456_done
+  rxscan456_scan:
+    set_addr $I10, rxscan456_loop
+    rx452_cur."!mark_push"(0, rx452_pos, $I10)
+  rxscan456_done:
 .annotate 'line', 140
   # rx literal  "?"
-    add $I11, rx447_pos, 1
-    gt $I11, rx447_eos, rx447_fail
-    sub $I11, rx447_pos, rx447_off
-    substr $S10, rx447_tgt, $I11, 1
-    ne $S10, "?", rx447_fail
-    add rx447_pos, 1
-  alt452_0:
-    set_addr $I10, alt452_1
-    rx447_cur."!mark_push"(0, rx447_pos, $I10)
+    add $I11, rx452_pos, 1
+    gt $I11, rx452_eos, rx452_fail
+    sub $I11, rx452_pos, rx452_off
+    substr $S10, rx452_tgt, $I11, 1
+    ne $S10, "?", rx452_fail
+    add rx452_pos, 1
+  alt457_0:
+    set_addr $I10, alt457_1
+    rx452_cur."!mark_push"(0, rx452_pos, $I10)
   # rx subrule "before" subtype=zerowidth negate=
-    rx447_cur."!cursor_pos"(rx447_pos)
-    .const 'Sub' $P454 = "129_1274022883.50471" 
-    capture_lex $P454
-    $P10 = rx447_cur."before"($P454)
-    unless $P10, rx447_fail
-    goto alt452_end
-  alt452_1:
+    rx452_cur."!cursor_pos"(rx452_pos)
+    .const 'Sub' $P459 = "129_1275811476.7961" 
+    capture_lex $P459
+    $P10 = rx452_cur."before"($P459)
+    unless $P10, rx452_fail
+    goto alt457_end
+  alt457_1:
   # rx subrule "assertion" subtype=capture negate=
-    rx447_cur."!cursor_pos"(rx447_pos)
-    $P10 = rx447_cur."assertion"()
-    unless $P10, rx447_fail
-    rx447_cur."!mark_push"(0, -1, 0, $P10)
+    rx452_cur."!cursor_pos"(rx452_pos)
+    $P10 = rx452_cur."assertion"()
+    unless $P10, rx452_fail
+    rx452_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx447_pos = $P10."pos"()
-  alt452_end:
+    rx452_pos = $P10."pos"()
+  alt457_end:
   # rx pass
-    rx447_cur."!cursor_pass"(rx447_pos, "assertion:sym<?>")
-    rx447_cur."!cursor_debug"("PASS  ", "assertion:sym<?>", " at pos=", rx447_pos)
-    .return (rx447_cur)
-  rx447_fail:
+    rx452_cur."!cursor_pass"(rx452_pos, "assertion:sym<?>")
+    rx452_cur."!cursor_debug"("PASS  ", "assertion:sym<?>", " at pos=", rx452_pos)
+    .return (rx452_cur)
+  rx452_fail:
 .annotate 'line', 3
-    (rx447_rep, rx447_pos, $I10, $P10) = rx447_cur."!mark_fail"(0)
-    lt rx447_pos, -1, rx447_done
-    eq rx447_pos, -1, rx447_fail
+    (rx452_rep, rx452_pos, $I10, $P10) = rx452_cur."!mark_fail"(0)
+    lt rx452_pos, -1, rx452_done
+    eq rx452_pos, -1, rx452_fail
     jump $I10
-  rx447_done:
-    rx447_cur."!cursor_fail"()
-    rx447_cur."!cursor_debug"("FAIL  ", "assertion:sym<?>")
-    .return (rx447_cur)
+  rx452_done:
+    rx452_cur."!cursor_fail"()
+    rx452_cur."!cursor_debug"("FAIL  ", "assertion:sym<?>")
+    .return (rx452_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<?>"  :subid("128_1274022883.50471") :method
+.sub "!PREFIX__assertion:sym<?>"  :subid("128_1275811476.7961") :method
 .annotate 'line', 3
-    $P449 = self."!PREFIX__!subrule"("assertion", "?")
-    new $P450, "ResizablePMCArray"
-    push $P450, $P449
-    push $P450, "?"
-    .return ($P450)
+    $P454 = self."!PREFIX__!subrule"("assertion", "?")
+    new $P455, "ResizablePMCArray"
+    push $P455, $P454
+    push $P455, "?"
+    .return ($P455)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block453"  :anon :subid("129_1274022883.50471") :method :outer("127_1274022883.50471")
+.sub "_block458"  :anon :subid("129_1275811476.7961") :method :outer("127_1275811476.7961")
 .annotate 'line', 140
-    .local string rx455_tgt
-    .local int rx455_pos
-    .local int rx455_off
-    .local int rx455_eos
-    .local int rx455_rep
-    .local pmc rx455_cur
-    (rx455_cur, rx455_pos, rx455_tgt) = self."!cursor_start"()
-    rx455_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx455_cur
-    .local pmc match
-    .lex "$/", match
-    length rx455_eos, rx455_tgt
-    set rx455_off, 0
-    lt rx455_pos, 2, rx455_start
-    sub rx455_off, rx455_pos, 1
-    substr rx455_tgt, rx455_tgt, rx455_off
-  rx455_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan456_done
-    goto rxscan456_scan
-  rxscan456_loop:
-    ($P10) = rx455_cur."from"()
-    inc $P10
-    set rx455_pos, $P10
-    ge rx455_pos, rx455_eos, rxscan456_done
-  rxscan456_scan:
-    set_addr $I10, rxscan456_loop
-    rx455_cur."!mark_push"(0, rx455_pos, $I10)
-  rxscan456_done:
+    .local string rx460_tgt
+    .local int rx460_pos
+    .local int rx460_off
+    .local int rx460_eos
+    .local int rx460_rep
+    .local pmc rx460_cur
+    (rx460_cur, rx460_pos, rx460_tgt) = self."!cursor_start"()
+    rx460_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx460_cur
+    .local pmc match
+    .lex "$/", match
+    length rx460_eos, rx460_tgt
+    gt rx460_pos, rx460_eos, rx460_done
+    set rx460_off, 0
+    lt rx460_pos, 2, rx460_start
+    sub rx460_off, rx460_pos, 1
+    substr rx460_tgt, rx460_tgt, rx460_off
+  rx460_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan461_done
+    goto rxscan461_scan
+  rxscan461_loop:
+    ($P10) = rx460_cur."from"()
+    inc $P10
+    set rx460_pos, $P10
+    ge rx460_pos, rx460_eos, rxscan461_done
+  rxscan461_scan:
+    set_addr $I10, rxscan461_loop
+    rx460_cur."!mark_push"(0, rx460_pos, $I10)
+  rxscan461_done:
   # rx literal  ">"
-    add $I11, rx455_pos, 1
-    gt $I11, rx455_eos, rx455_fail
-    sub $I11, rx455_pos, rx455_off
-    substr $S10, rx455_tgt, $I11, 1
-    ne $S10, ">", rx455_fail
-    add rx455_pos, 1
-  # rx pass
-    rx455_cur."!cursor_pass"(rx455_pos, "")
-    rx455_cur."!cursor_debug"("PASS  ", "", " at pos=", rx455_pos)
-    .return (rx455_cur)
-  rx455_fail:
-    (rx455_rep, rx455_pos, $I10, $P10) = rx455_cur."!mark_fail"(0)
-    lt rx455_pos, -1, rx455_done
-    eq rx455_pos, -1, rx455_fail
-    jump $I10
-  rx455_done:
-    rx455_cur."!cursor_fail"()
-    rx455_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx455_cur)
+    add $I11, rx460_pos, 1
+    gt $I11, rx460_eos, rx460_fail
+    sub $I11, rx460_pos, rx460_off
+    substr $S10, rx460_tgt, $I11, 1
+    ne $S10, ">", rx460_fail
+    add rx460_pos, 1
+  # rx pass
+    rx460_cur."!cursor_pass"(rx460_pos, "")
+    rx460_cur."!cursor_debug"("PASS  ", "", " at pos=", rx460_pos)
+    .return (rx460_cur)
+  rx460_fail:
+    (rx460_rep, rx460_pos, $I10, $P10) = rx460_cur."!mark_fail"(0)
+    lt rx460_pos, -1, rx460_done
+    eq rx460_pos, -1, rx460_fail
+    jump $I10
+  rx460_done:
+    rx460_cur."!cursor_fail"()
+    rx460_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx460_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<!>"  :subid("130_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .const 'Sub' $P465 = "132_1274022883.50471" 
-    capture_lex $P465
-    .local string rx458_tgt
-    .local int rx458_pos
-    .local int rx458_off
-    .local int rx458_eos
-    .local int rx458_rep
-    .local pmc rx458_cur
-    (rx458_cur, rx458_pos, rx458_tgt) = self."!cursor_start"()
-    rx458_cur."!cursor_debug"("START ", "assertion:sym<!>")
-    .lex unicode:"$\x{a2}", rx458_cur
-    .local pmc match
-    .lex "$/", match
-    length rx458_eos, rx458_tgt
-    set rx458_off, 0
-    lt rx458_pos, 2, rx458_start
-    sub rx458_off, rx458_pos, 1
-    substr rx458_tgt, rx458_tgt, rx458_off
-  rx458_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan462_done
-    goto rxscan462_scan
-  rxscan462_loop:
-    ($P10) = rx458_cur."from"()
-    inc $P10
-    set rx458_pos, $P10
-    ge rx458_pos, rx458_eos, rxscan462_done
-  rxscan462_scan:
-    set_addr $I10, rxscan462_loop
-    rx458_cur."!mark_push"(0, rx458_pos, $I10)
-  rxscan462_done:
+.sub "assertion:sym<!>"  :subid("130_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .const 'Sub' $P470 = "132_1275811476.7961" 
+    capture_lex $P470
+    .local string rx463_tgt
+    .local int rx463_pos
+    .local int rx463_off
+    .local int rx463_eos
+    .local int rx463_rep
+    .local pmc rx463_cur
+    (rx463_cur, rx463_pos, rx463_tgt) = self."!cursor_start"()
+    rx463_cur."!cursor_debug"("START ", "assertion:sym<!>")
+    .lex unicode:"$\x{a2}", rx463_cur
+    .local pmc match
+    .lex "$/", match
+    length rx463_eos, rx463_tgt
+    gt rx463_pos, rx463_eos, rx463_done
+    set rx463_off, 0
+    lt rx463_pos, 2, rx463_start
+    sub rx463_off, rx463_pos, 1
+    substr rx463_tgt, rx463_tgt, rx463_off
+  rx463_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan467_done
+    goto rxscan467_scan
+  rxscan467_loop:
+    ($P10) = rx463_cur."from"()
+    inc $P10
+    set rx463_pos, $P10
+    ge rx463_pos, rx463_eos, rxscan467_done
+  rxscan467_scan:
+    set_addr $I10, rxscan467_loop
+    rx463_cur."!mark_push"(0, rx463_pos, $I10)
+  rxscan467_done:
 .annotate 'line', 141
   # rx literal  "!"
-    add $I11, rx458_pos, 1
-    gt $I11, rx458_eos, rx458_fail
-    sub $I11, rx458_pos, rx458_off
-    substr $S10, rx458_tgt, $I11, 1
-    ne $S10, "!", rx458_fail
-    add rx458_pos, 1
-  alt463_0:
-    set_addr $I10, alt463_1
-    rx458_cur."!mark_push"(0, rx458_pos, $I10)
+    add $I11, rx463_pos, 1
+    gt $I11, rx463_eos, rx463_fail
+    sub $I11, rx463_pos, rx463_off
+    substr $S10, rx463_tgt, $I11, 1
+    ne $S10, "!", rx463_fail
+    add rx463_pos, 1
+  alt468_0:
+    set_addr $I10, alt468_1
+    rx463_cur."!mark_push"(0, rx463_pos, $I10)
   # rx subrule "before" subtype=zerowidth negate=
-    rx458_cur."!cursor_pos"(rx458_pos)
-    .const 'Sub' $P465 = "132_1274022883.50471" 
-    capture_lex $P465
-    $P10 = rx458_cur."before"($P465)
-    unless $P10, rx458_fail
-    goto alt463_end
-  alt463_1:
+    rx463_cur."!cursor_pos"(rx463_pos)
+    .const 'Sub' $P470 = "132_1275811476.7961" 
+    capture_lex $P470
+    $P10 = rx463_cur."before"($P470)
+    unless $P10, rx463_fail
+    goto alt468_end
+  alt468_1:
   # rx subrule "assertion" subtype=capture negate=
-    rx458_cur."!cursor_pos"(rx458_pos)
-    $P10 = rx458_cur."assertion"()
-    unless $P10, rx458_fail
-    rx458_cur."!mark_push"(0, -1, 0, $P10)
+    rx463_cur."!cursor_pos"(rx463_pos)
+    $P10 = rx463_cur."assertion"()
+    unless $P10, rx463_fail
+    rx463_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx458_pos = $P10."pos"()
-  alt463_end:
+    rx463_pos = $P10."pos"()
+  alt468_end:
   # rx pass
-    rx458_cur."!cursor_pass"(rx458_pos, "assertion:sym<!>")
-    rx458_cur."!cursor_debug"("PASS  ", "assertion:sym<!>", " at pos=", rx458_pos)
-    .return (rx458_cur)
-  rx458_fail:
+    rx463_cur."!cursor_pass"(rx463_pos, "assertion:sym<!>")
+    rx463_cur."!cursor_debug"("PASS  ", "assertion:sym<!>", " at pos=", rx463_pos)
+    .return (rx463_cur)
+  rx463_fail:
 .annotate 'line', 3
-    (rx458_rep, rx458_pos, $I10, $P10) = rx458_cur."!mark_fail"(0)
-    lt rx458_pos, -1, rx458_done
-    eq rx458_pos, -1, rx458_fail
+    (rx463_rep, rx463_pos, $I10, $P10) = rx463_cur."!mark_fail"(0)
+    lt rx463_pos, -1, rx463_done
+    eq rx463_pos, -1, rx463_fail
     jump $I10
-  rx458_done:
-    rx458_cur."!cursor_fail"()
-    rx458_cur."!cursor_debug"("FAIL  ", "assertion:sym<!>")
-    .return (rx458_cur)
+  rx463_done:
+    rx463_cur."!cursor_fail"()
+    rx463_cur."!cursor_debug"("FAIL  ", "assertion:sym<!>")
+    .return (rx463_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<!>"  :subid("131_1274022883.50471") :method
+.sub "!PREFIX__assertion:sym<!>"  :subid("131_1275811476.7961") :method
 .annotate 'line', 3
-    $P460 = self."!PREFIX__!subrule"("assertion", "!")
-    new $P461, "ResizablePMCArray"
-    push $P461, $P460
-    push $P461, "!"
-    .return ($P461)
+    $P465 = self."!PREFIX__!subrule"("assertion", "!")
+    new $P466, "ResizablePMCArray"
+    push $P466, $P465
+    push $P466, "!"
+    .return ($P466)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block464"  :anon :subid("132_1274022883.50471") :method :outer("130_1274022883.50471")
+.sub "_block469"  :anon :subid("132_1275811476.7961") :method :outer("130_1275811476.7961")
 .annotate 'line', 141
-    .local string rx466_tgt
-    .local int rx466_pos
-    .local int rx466_off
-    .local int rx466_eos
-    .local int rx466_rep
-    .local pmc rx466_cur
-    (rx466_cur, rx466_pos, rx466_tgt) = self."!cursor_start"()
-    rx466_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx466_cur
-    .local pmc match
-    .lex "$/", match
-    length rx466_eos, rx466_tgt
-    set rx466_off, 0
-    lt rx466_pos, 2, rx466_start
-    sub rx466_off, rx466_pos, 1
-    substr rx466_tgt, rx466_tgt, rx466_off
-  rx466_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan467_done
-    goto rxscan467_scan
-  rxscan467_loop:
-    ($P10) = rx466_cur."from"()
-    inc $P10
-    set rx466_pos, $P10
-    ge rx466_pos, rx466_eos, rxscan467_done
-  rxscan467_scan:
-    set_addr $I10, rxscan467_loop
-    rx466_cur."!mark_push"(0, rx466_pos, $I10)
-  rxscan467_done:
+    .local string rx471_tgt
+    .local int rx471_pos
+    .local int rx471_off
+    .local int rx471_eos
+    .local int rx471_rep
+    .local pmc rx471_cur
+    (rx471_cur, rx471_pos, rx471_tgt) = self."!cursor_start"()
+    rx471_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx471_cur
+    .local pmc match
+    .lex "$/", match
+    length rx471_eos, rx471_tgt
+    gt rx471_pos, rx471_eos, rx471_done
+    set rx471_off, 0
+    lt rx471_pos, 2, rx471_start
+    sub rx471_off, rx471_pos, 1
+    substr rx471_tgt, rx471_tgt, rx471_off
+  rx471_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan472_done
+    goto rxscan472_scan
+  rxscan472_loop:
+    ($P10) = rx471_cur."from"()
+    inc $P10
+    set rx471_pos, $P10
+    ge rx471_pos, rx471_eos, rxscan472_done
+  rxscan472_scan:
+    set_addr $I10, rxscan472_loop
+    rx471_cur."!mark_push"(0, rx471_pos, $I10)
+  rxscan472_done:
   # rx literal  ">"
-    add $I11, rx466_pos, 1
-    gt $I11, rx466_eos, rx466_fail
-    sub $I11, rx466_pos, rx466_off
-    substr $S10, rx466_tgt, $I11, 1
-    ne $S10, ">", rx466_fail
-    add rx466_pos, 1
-  # rx pass
-    rx466_cur."!cursor_pass"(rx466_pos, "")
-    rx466_cur."!cursor_debug"("PASS  ", "", " at pos=", rx466_pos)
-    .return (rx466_cur)
-  rx466_fail:
-    (rx466_rep, rx466_pos, $I10, $P10) = rx466_cur."!mark_fail"(0)
-    lt rx466_pos, -1, rx466_done
-    eq rx466_pos, -1, rx466_fail
-    jump $I10
-  rx466_done:
-    rx466_cur."!cursor_fail"()
-    rx466_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx466_cur)
+    add $I11, rx471_pos, 1
+    gt $I11, rx471_eos, rx471_fail
+    sub $I11, rx471_pos, rx471_off
+    substr $S10, rx471_tgt, $I11, 1
+    ne $S10, ">", rx471_fail
+    add rx471_pos, 1
+  # rx pass
+    rx471_cur."!cursor_pass"(rx471_pos, "")
+    rx471_cur."!cursor_debug"("PASS  ", "", " at pos=", rx471_pos)
+    .return (rx471_cur)
+  rx471_fail:
+    (rx471_rep, rx471_pos, $I10, $P10) = rx471_cur."!mark_fail"(0)
+    lt rx471_pos, -1, rx471_done
+    eq rx471_pos, -1, rx471_fail
+    jump $I10
+  rx471_done:
+    rx471_cur."!cursor_fail"()
+    rx471_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx471_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<method>"  :subid("133_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .local string rx469_tgt
-    .local int rx469_pos
-    .local int rx469_off
-    .local int rx469_eos
-    .local int rx469_rep
-    .local pmc rx469_cur
-    (rx469_cur, rx469_pos, rx469_tgt) = self."!cursor_start"()
-    rx469_cur."!cursor_debug"("START ", "assertion:sym<method>")
-    .lex unicode:"$\x{a2}", rx469_cur
-    .local pmc match
-    .lex "$/", match
-    length rx469_eos, rx469_tgt
-    set rx469_off, 0
-    lt rx469_pos, 2, rx469_start
-    sub rx469_off, rx469_pos, 1
-    substr rx469_tgt, rx469_tgt, rx469_off
-  rx469_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan473_done
-    goto rxscan473_scan
-  rxscan473_loop:
-    ($P10) = rx469_cur."from"()
-    inc $P10
-    set rx469_pos, $P10
-    ge rx469_pos, rx469_eos, rxscan473_done
-  rxscan473_scan:
-    set_addr $I10, rxscan473_loop
-    rx469_cur."!mark_push"(0, rx469_pos, $I10)
-  rxscan473_done:
+.sub "assertion:sym<method>"  :subid("133_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .local string rx474_tgt
+    .local int rx474_pos
+    .local int rx474_off
+    .local int rx474_eos
+    .local int rx474_rep
+    .local pmc rx474_cur
+    (rx474_cur, rx474_pos, rx474_tgt) = self."!cursor_start"()
+    rx474_cur."!cursor_debug"("START ", "assertion:sym<method>")
+    .lex unicode:"$\x{a2}", rx474_cur
+    .local pmc match
+    .lex "$/", match
+    length rx474_eos, rx474_tgt
+    gt rx474_pos, rx474_eos, rx474_done
+    set rx474_off, 0
+    lt rx474_pos, 2, rx474_start
+    sub rx474_off, rx474_pos, 1
+    substr rx474_tgt, rx474_tgt, rx474_off
+  rx474_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan478_done
+    goto rxscan478_scan
+  rxscan478_loop:
+    ($P10) = rx474_cur."from"()
+    inc $P10
+    set rx474_pos, $P10
+    ge rx474_pos, rx474_eos, rxscan478_done
+  rxscan478_scan:
+    set_addr $I10, rxscan478_loop
+    rx474_cur."!mark_push"(0, rx474_pos, $I10)
+  rxscan478_done:
 .annotate 'line', 144
   # rx literal  "."
-    add $I11, rx469_pos, 1
-    gt $I11, rx469_eos, rx469_fail
-    sub $I11, rx469_pos, rx469_off
-    substr $S10, rx469_tgt, $I11, 1
-    ne $S10, ".", rx469_fail
-    add rx469_pos, 1
+    add $I11, rx474_pos, 1
+    gt $I11, rx474_eos, rx474_fail
+    sub $I11, rx474_pos, rx474_off
+    substr $S10, rx474_tgt, $I11, 1
+    ne $S10, ".", rx474_fail
+    add rx474_pos, 1
   # rx subrule "assertion" subtype=capture negate=
-    rx469_cur."!cursor_pos"(rx469_pos)
-    $P10 = rx469_cur."assertion"()
-    unless $P10, rx469_fail
-    rx469_cur."!mark_push"(0, -1, 0, $P10)
+    rx474_cur."!cursor_pos"(rx474_pos)
+    $P10 = rx474_cur."assertion"()
+    unless $P10, rx474_fail
+    rx474_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx469_pos = $P10."pos"()
+    rx474_pos = $P10."pos"()
 .annotate 'line', 143
   # rx pass
-    rx469_cur."!cursor_pass"(rx469_pos, "assertion:sym<method>")
-    rx469_cur."!cursor_debug"("PASS  ", "assertion:sym<method>", " at pos=", rx469_pos)
-    .return (rx469_cur)
-  rx469_fail:
+    rx474_cur."!cursor_pass"(rx474_pos, "assertion:sym<method>")
+    rx474_cur."!cursor_debug"("PASS  ", "assertion:sym<method>", " at pos=", rx474_pos)
+    .return (rx474_cur)
+  rx474_fail:
 .annotate 'line', 3
-    (rx469_rep, rx469_pos, $I10, $P10) = rx469_cur."!mark_fail"(0)
-    lt rx469_pos, -1, rx469_done
-    eq rx469_pos, -1, rx469_fail
+    (rx474_rep, rx474_pos, $I10, $P10) = rx474_cur."!mark_fail"(0)
+    lt rx474_pos, -1, rx474_done
+    eq rx474_pos, -1, rx474_fail
     jump $I10
-  rx469_done:
-    rx469_cur."!cursor_fail"()
-    rx469_cur."!cursor_debug"("FAIL  ", "assertion:sym<method>")
-    .return (rx469_cur)
+  rx474_done:
+    rx474_cur."!cursor_fail"()
+    rx474_cur."!cursor_debug"("FAIL  ", "assertion:sym<method>")
+    .return (rx474_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<method>"  :subid("134_1274022883.50471") :method
+.sub "!PREFIX__assertion:sym<method>"  :subid("134_1275811476.7961") :method
 .annotate 'line', 3
-    $P471 = self."!PREFIX__!subrule"("assertion", ".")
-    new $P472, "ResizablePMCArray"
-    push $P472, $P471
-    .return ($P472)
+    $P476 = self."!PREFIX__!subrule"("assertion", ".")
+    new $P477, "ResizablePMCArray"
+    push $P477, $P476
+    .return ($P477)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<name>"  :subid("135_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "assertion:sym<name>"  :subid("135_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .const 'Sub' $P483 = "137_1274022883.50471" 
-    capture_lex $P483
-    .local string rx475_tgt
-    .local int rx475_pos
-    .local int rx475_off
-    .local int rx475_eos
-    .local int rx475_rep
-    .local pmc rx475_cur
-    (rx475_cur, rx475_pos, rx475_tgt) = self."!cursor_start"()
-    rx475_cur."!cursor_debug"("START ", "assertion:sym<name>")
-    rx475_cur."!cursor_caparray"("assertion", "nibbler", "arglist")
-    .lex unicode:"$\x{a2}", rx475_cur
-    .local pmc match
-    .lex "$/", match
-    length rx475_eos, rx475_tgt
-    set rx475_off, 0
-    lt rx475_pos, 2, rx475_start
-    sub rx475_off, rx475_pos, 1
-    substr rx475_tgt, rx475_tgt, rx475_off
-  rx475_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan478_done
-    goto rxscan478_scan
-  rxscan478_loop:
-    ($P10) = rx475_cur."from"()
-    inc $P10
-    set rx475_pos, $P10
-    ge rx475_pos, rx475_eos, rxscan478_done
-  rxscan478_scan:
-    set_addr $I10, rxscan478_loop
-    rx475_cur."!mark_push"(0, rx475_pos, $I10)
-  rxscan478_done:
+    .const 'Sub' $P488 = "137_1275811476.7961" 
+    capture_lex $P488
+    .local string rx480_tgt
+    .local int rx480_pos
+    .local int rx480_off
+    .local int rx480_eos
+    .local int rx480_rep
+    .local pmc rx480_cur
+    (rx480_cur, rx480_pos, rx480_tgt) = self."!cursor_start"()
+    rx480_cur."!cursor_debug"("START ", "assertion:sym<name>")
+    rx480_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    .lex unicode:"$\x{a2}", rx480_cur
+    .local pmc match
+    .lex "$/", match
+    length rx480_eos, rx480_tgt
+    gt rx480_pos, rx480_eos, rx480_done
+    set rx480_off, 0
+    lt rx480_pos, 2, rx480_start
+    sub rx480_off, rx480_pos, 1
+    substr rx480_tgt, rx480_tgt, rx480_off
+  rx480_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan483_done
+    goto rxscan483_scan
+  rxscan483_loop:
+    ($P10) = rx480_cur."from"()
+    inc $P10
+    set rx480_pos, $P10
+    ge rx480_pos, rx480_eos, rxscan483_done
+  rxscan483_scan:
+    set_addr $I10, rxscan483_loop
+    rx480_cur."!mark_push"(0, rx480_pos, $I10)
+  rxscan483_done:
 .annotate 'line', 148
   # rx subcapture "longname"
-    set_addr $I10, rxcap_479_fail
-    rx475_cur."!mark_push"(0, rx475_pos, $I10)
+    set_addr $I10, rxcap_484_fail
+    rx480_cur."!mark_push"(0, rx480_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx475_pos, rx475_off
-    find_not_cclass $I11, 8192, rx475_tgt, $I10, rx475_eos
+    sub $I10, rx480_pos, rx480_off
+    find_not_cclass $I11, 8192, rx480_tgt, $I10, rx480_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx475_fail
-    add rx475_pos, rx475_off, $I11
-    set_addr $I10, rxcap_479_fail
-    ($I12, $I11) = rx475_cur."!mark_peek"($I10)
-    rx475_cur."!cursor_pos"($I11)
-    ($P10) = rx475_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx475_pos, "")
-    rx475_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx480_fail
+    add rx480_pos, rx480_off, $I11
+    set_addr $I10, rxcap_484_fail
+    ($I12, $I11) = rx480_cur."!mark_peek"($I10)
+    rx480_cur."!cursor_pos"($I11)
+    ($P10) = rx480_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx480_pos, "")
+    rx480_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname")
-    goto rxcap_479_done
-  rxcap_479_fail:
-    goto rx475_fail
-  rxcap_479_done:
+    goto rxcap_484_done
+  rxcap_484_fail:
+    goto rx480_fail
+  rxcap_484_done:
 .annotate 'line', 155
-  # rx rxquantr480 ** 0..1
-    set_addr $I486, rxquantr480_done
-    rx475_cur."!mark_push"(0, rx475_pos, $I486)
-  rxquantr480_loop:
-  alt481_0:
+  # rx rxquantr485 ** 0..1
+    set_addr $I491, rxquantr485_done
+    rx480_cur."!mark_push"(0, rx480_pos, $I491)
+  rxquantr485_loop:
+  alt486_0:
 .annotate 'line', 149
-    set_addr $I10, alt481_1
-    rx475_cur."!mark_push"(0, rx475_pos, $I10)
+    set_addr $I10, alt486_1
+    rx480_cur."!mark_push"(0, rx480_pos, $I10)
 .annotate 'line', 150
   # rx subrule "before" subtype=zerowidth negate=
-    rx475_cur."!cursor_pos"(rx475_pos)
-    .const 'Sub' $P483 = "137_1274022883.50471" 
-    capture_lex $P483
-    $P10 = rx475_cur."before"($P483)
-    unless $P10, rx475_fail
-    goto alt481_end
-  alt481_1:
-    set_addr $I10, alt481_2
-    rx475_cur."!mark_push"(0, rx475_pos, $I10)
+    rx480_cur."!cursor_pos"(rx480_pos)
+    .const 'Sub' $P488 = "137_1275811476.7961" 
+    capture_lex $P488
+    $P10 = rx480_cur."before"($P488)
+    unless $P10, rx480_fail
+    goto alt486_end
+  alt486_1:
+    set_addr $I10, alt486_2
+    rx480_cur."!mark_push"(0, rx480_pos, $I10)
 .annotate 'line', 151
   # rx literal  "="
-    add $I11, rx475_pos, 1
-    gt $I11, rx475_eos, rx475_fail
-    sub $I11, rx475_pos, rx475_off
-    substr $S10, rx475_tgt, $I11, 1
-    ne $S10, "=", rx475_fail
-    add rx475_pos, 1
+    add $I11, rx480_pos, 1
+    gt $I11, rx480_eos, rx480_fail
+    sub $I11, rx480_pos, rx480_off
+    substr $S10, rx480_tgt, $I11, 1
+    ne $S10, "=", rx480_fail
+    add rx480_pos, 1
   # rx subrule "assertion" subtype=capture negate=
-    rx475_cur."!cursor_pos"(rx475_pos)
-    $P10 = rx475_cur."assertion"()
-    unless $P10, rx475_fail
-    rx475_cur."!mark_push"(0, -1, 0, $P10)
+    rx480_cur."!cursor_pos"(rx480_pos)
+    $P10 = rx480_cur."assertion"()
+    unless $P10, rx480_fail
+    rx480_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx475_pos = $P10."pos"()
-    goto alt481_end
-  alt481_2:
-    set_addr $I10, alt481_3
-    rx475_cur."!mark_push"(0, rx475_pos, $I10)
+    rx480_pos = $P10."pos"()
+    goto alt486_end
+  alt486_2:
+    set_addr $I10, alt486_3
+    rx480_cur."!mark_push"(0, rx480_pos, $I10)
 .annotate 'line', 152
   # rx literal  ":"
-    add $I11, rx475_pos, 1
-    gt $I11, rx475_eos, rx475_fail
-    sub $I11, rx475_pos, rx475_off
-    substr $S10, rx475_tgt, $I11, 1
-    ne $S10, ":", rx475_fail
-    add rx475_pos, 1
+    add $I11, rx480_pos, 1
+    gt $I11, rx480_eos, rx480_fail
+    sub $I11, rx480_pos, rx480_off
+    substr $S10, rx480_tgt, $I11, 1
+    ne $S10, ":", rx480_fail
+    add rx480_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx475_cur."!cursor_pos"(rx475_pos)
-    $P10 = rx475_cur."arglist"()
-    unless $P10, rx475_fail
-    rx475_cur."!mark_push"(0, -1, 0, $P10)
+    rx480_cur."!cursor_pos"(rx480_pos)
+    $P10 = rx480_cur."arglist"()
+    unless $P10, rx480_fail
+    rx480_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx475_pos = $P10."pos"()
-    goto alt481_end
-  alt481_3:
-    set_addr $I10, alt481_4
-    rx475_cur."!mark_push"(0, rx475_pos, $I10)
+    rx480_pos = $P10."pos"()
+    goto alt486_end
+  alt486_3:
+    set_addr $I10, alt486_4
+    rx480_cur."!mark_push"(0, rx480_pos, $I10)
 .annotate 'line', 153
   # rx literal  "("
-    add $I11, rx475_pos, 1
-    gt $I11, rx475_eos, rx475_fail
-    sub $I11, rx475_pos, rx475_off
-    substr $S10, rx475_tgt, $I11, 1
-    ne $S10, "(", rx475_fail
-    add rx475_pos, 1
+    add $I11, rx480_pos, 1
+    gt $I11, rx480_eos, rx480_fail
+    sub $I11, rx480_pos, rx480_off
+    substr $S10, rx480_tgt, $I11, 1
+    ne $S10, "(", rx480_fail
+    add rx480_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx475_cur."!cursor_pos"(rx475_pos)
-    $P10 = rx475_cur."arglist"()
-    unless $P10, rx475_fail
-    rx475_cur."!mark_push"(0, -1, 0, $P10)
+    rx480_cur."!cursor_pos"(rx480_pos)
+    $P10 = rx480_cur."arglist"()
+    unless $P10, rx480_fail
+    rx480_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx475_pos = $P10."pos"()
+    rx480_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx475_pos, 1
-    gt $I11, rx475_eos, rx475_fail
-    sub $I11, rx475_pos, rx475_off
-    substr $S10, rx475_tgt, $I11, 1
-    ne $S10, ")", rx475_fail
-    add rx475_pos, 1
-    goto alt481_end
-  alt481_4:
+    add $I11, rx480_pos, 1
+    gt $I11, rx480_eos, rx480_fail
+    sub $I11, rx480_pos, rx480_off
+    substr $S10, rx480_tgt, $I11, 1
+    ne $S10, ")", rx480_fail
+    add rx480_pos, 1
+    goto alt486_end
+  alt486_4:
 .annotate 'line', 154
   # rx subrule "normspace" subtype=method negate=
-    rx475_cur."!cursor_pos"(rx475_pos)
-    $P10 = rx475_cur."normspace"()
-    unless $P10, rx475_fail
-    rx475_pos = $P10."pos"()
+    rx480_cur."!cursor_pos"(rx480_pos)
+    $P10 = rx480_cur."normspace"()
+    unless $P10, rx480_fail
+    rx480_pos = $P10."pos"()
   # rx subrule "nibbler" subtype=capture negate=
-    rx475_cur."!cursor_pos"(rx475_pos)
-    $P10 = rx475_cur."nibbler"()
-    unless $P10, rx475_fail
-    rx475_cur."!mark_push"(0, -1, 0, $P10)
+    rx480_cur."!cursor_pos"(rx480_pos)
+    $P10 = rx480_cur."nibbler"()
+    unless $P10, rx480_fail
+    rx480_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("nibbler")
-    rx475_pos = $P10."pos"()
-  alt481_end:
+    rx480_pos = $P10."pos"()
+  alt486_end:
 .annotate 'line', 155
-    (rx475_rep) = rx475_cur."!mark_commit"($I486)
-  rxquantr480_done:
+    (rx480_rep) = rx480_cur."!mark_commit"($I491)
+  rxquantr485_done:
 .annotate 'line', 147
   # rx pass
-    rx475_cur."!cursor_pass"(rx475_pos, "assertion:sym<name>")
-    rx475_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx475_pos)
-    .return (rx475_cur)
-  rx475_fail:
+    rx480_cur."!cursor_pass"(rx480_pos, "assertion:sym<name>")
+    rx480_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx480_pos)
+    .return (rx480_cur)
+  rx480_fail:
 .annotate 'line', 3
-    (rx475_rep, rx475_pos, $I10, $P10) = rx475_cur."!mark_fail"(0)
-    lt rx475_pos, -1, rx475_done
-    eq rx475_pos, -1, rx475_fail
+    (rx480_rep, rx480_pos, $I10, $P10) = rx480_cur."!mark_fail"(0)
+    lt rx480_pos, -1, rx480_done
+    eq rx480_pos, -1, rx480_fail
     jump $I10
-  rx475_done:
-    rx475_cur."!cursor_fail"()
-    rx475_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
-    .return (rx475_cur)
+  rx480_done:
+    rx480_cur."!cursor_fail"()
+    rx480_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
+    .return (rx480_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("136_1274022883.50471") :method
+.sub "!PREFIX__assertion:sym<name>"  :subid("136_1275811476.7961") :method
 .annotate 'line', 3
-    new $P477, "ResizablePMCArray"
-    push $P477, ""
-    .return ($P477)
+    new $P482, "ResizablePMCArray"
+    push $P482, ""
+    .return ($P482)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block482"  :anon :subid("137_1274022883.50471") :method :outer("135_1274022883.50471")
+.sub "_block487"  :anon :subid("137_1275811476.7961") :method :outer("135_1275811476.7961")
 .annotate 'line', 150
-    .local string rx484_tgt
-    .local int rx484_pos
-    .local int rx484_off
-    .local int rx484_eos
-    .local int rx484_rep
-    .local pmc rx484_cur
-    (rx484_cur, rx484_pos, rx484_tgt) = self."!cursor_start"()
-    rx484_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx484_cur
-    .local pmc match
-    .lex "$/", match
-    length rx484_eos, rx484_tgt
-    set rx484_off, 0
-    lt rx484_pos, 2, rx484_start
-    sub rx484_off, rx484_pos, 1
-    substr rx484_tgt, rx484_tgt, rx484_off
-  rx484_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan485_done
-    goto rxscan485_scan
-  rxscan485_loop:
-    ($P10) = rx484_cur."from"()
-    inc $P10
-    set rx484_pos, $P10
-    ge rx484_pos, rx484_eos, rxscan485_done
-  rxscan485_scan:
-    set_addr $I10, rxscan485_loop
-    rx484_cur."!mark_push"(0, rx484_pos, $I10)
-  rxscan485_done:
+    .local string rx489_tgt
+    .local int rx489_pos
+    .local int rx489_off
+    .local int rx489_eos
+    .local int rx489_rep
+    .local pmc rx489_cur
+    (rx489_cur, rx489_pos, rx489_tgt) = self."!cursor_start"()
+    rx489_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx489_cur
+    .local pmc match
+    .lex "$/", match
+    length rx489_eos, rx489_tgt
+    gt rx489_pos, rx489_eos, rx489_done
+    set rx489_off, 0
+    lt rx489_pos, 2, rx489_start
+    sub rx489_off, rx489_pos, 1
+    substr rx489_tgt, rx489_tgt, rx489_off
+  rx489_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan490_done
+    goto rxscan490_scan
+  rxscan490_loop:
+    ($P10) = rx489_cur."from"()
+    inc $P10
+    set rx489_pos, $P10
+    ge rx489_pos, rx489_eos, rxscan490_done
+  rxscan490_scan:
+    set_addr $I10, rxscan490_loop
+    rx489_cur."!mark_push"(0, rx489_pos, $I10)
+  rxscan490_done:
   # rx literal  ">"
-    add $I11, rx484_pos, 1
-    gt $I11, rx484_eos, rx484_fail
-    sub $I11, rx484_pos, rx484_off
-    substr $S10, rx484_tgt, $I11, 1
-    ne $S10, ">", rx484_fail
-    add rx484_pos, 1
-  # rx pass
-    rx484_cur."!cursor_pass"(rx484_pos, "")
-    rx484_cur."!cursor_debug"("PASS  ", "", " at pos=", rx484_pos)
-    .return (rx484_cur)
-  rx484_fail:
-    (rx484_rep, rx484_pos, $I10, $P10) = rx484_cur."!mark_fail"(0)
-    lt rx484_pos, -1, rx484_done
-    eq rx484_pos, -1, rx484_fail
-    jump $I10
-  rx484_done:
-    rx484_cur."!cursor_fail"()
-    rx484_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx484_cur)
+    add $I11, rx489_pos, 1
+    gt $I11, rx489_eos, rx489_fail
+    sub $I11, rx489_pos, rx489_off
+    substr $S10, rx489_tgt, $I11, 1
+    ne $S10, ">", rx489_fail
+    add rx489_pos, 1
+  # rx pass
+    rx489_cur."!cursor_pass"(rx489_pos, "")
+    rx489_cur."!cursor_debug"("PASS  ", "", " at pos=", rx489_pos)
+    .return (rx489_cur)
+  rx489_fail:
+    (rx489_rep, rx489_pos, $I10, $P10) = rx489_cur."!mark_fail"(0)
+    lt rx489_pos, -1, rx489_done
+    eq rx489_pos, -1, rx489_fail
+    jump $I10
+  rx489_done:
+    rx489_cur."!cursor_fail"()
+    rx489_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx489_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<[>"  :subid("138_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .const 'Sub' $P493 = "140_1274022883.50471" 
-    capture_lex $P493
-    .local string rx488_tgt
-    .local int rx488_pos
-    .local int rx488_off
-    .local int rx488_eos
-    .local int rx488_rep
-    .local pmc rx488_cur
-    (rx488_cur, rx488_pos, rx488_tgt) = self."!cursor_start"()
-    rx488_cur."!cursor_debug"("START ", "assertion:sym<[>")
-    rx488_cur."!cursor_caparray"("cclass_elem")
-    .lex unicode:"$\x{a2}", rx488_cur
-    .local pmc match
-    .lex "$/", match
-    length rx488_eos, rx488_tgt
-    set rx488_off, 0
-    lt rx488_pos, 2, rx488_start
-    sub rx488_off, rx488_pos, 1
-    substr rx488_tgt, rx488_tgt, rx488_off
-  rx488_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan491_done
-    goto rxscan491_scan
-  rxscan491_loop:
-    ($P10) = rx488_cur."from"()
-    inc $P10
-    set rx488_pos, $P10
-    ge rx488_pos, rx488_eos, rxscan491_done
-  rxscan491_scan:
-    set_addr $I10, rxscan491_loop
-    rx488_cur."!mark_push"(0, rx488_pos, $I10)
-  rxscan491_done:
+.sub "assertion:sym<[>"  :subid("138_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .const 'Sub' $P498 = "140_1275811476.7961" 
+    capture_lex $P498
+    .local string rx493_tgt
+    .local int rx493_pos
+    .local int rx493_off
+    .local int rx493_eos
+    .local int rx493_rep
+    .local pmc rx493_cur
+    (rx493_cur, rx493_pos, rx493_tgt) = self."!cursor_start"()
+    rx493_cur."!cursor_debug"("START ", "assertion:sym<[>")
+    rx493_cur."!cursor_caparray"("cclass_elem")
+    .lex unicode:"$\x{a2}", rx493_cur
+    .local pmc match
+    .lex "$/", match
+    length rx493_eos, rx493_tgt
+    gt rx493_pos, rx493_eos, rx493_done
+    set rx493_off, 0
+    lt rx493_pos, 2, rx493_start
+    sub rx493_off, rx493_pos, 1
+    substr rx493_tgt, rx493_tgt, rx493_off
+  rx493_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan496_done
+    goto rxscan496_scan
+  rxscan496_loop:
+    ($P10) = rx493_cur."from"()
+    inc $P10
+    set rx493_pos, $P10
+    ge rx493_pos, rx493_eos, rxscan496_done
+  rxscan496_scan:
+    set_addr $I10, rxscan496_loop
+    rx493_cur."!mark_push"(0, rx493_pos, $I10)
+  rxscan496_done:
 .annotate 'line', 158
   # rx subrule "before" subtype=zerowidth negate=
-    rx488_cur."!cursor_pos"(rx488_pos)
-    .const 'Sub' $P493 = "140_1274022883.50471" 
-    capture_lex $P493
-    $P10 = rx488_cur."before"($P493)
-    unless $P10, rx488_fail
-  # rx rxquantr497 ** 1..*
-    set_addr $I498, rxquantr497_done
-    rx488_cur."!mark_push"(0, -1, $I498)
-  rxquantr497_loop:
+    rx493_cur."!cursor_pos"(rx493_pos)
+    .const 'Sub' $P498 = "140_1275811476.7961" 
+    capture_lex $P498
+    $P10 = rx493_cur."before"($P498)
+    unless $P10, rx493_fail
+  # rx rxquantr502 ** 1..*
+    set_addr $I503, rxquantr502_done
+    rx493_cur."!mark_push"(0, -1, $I503)
+  rxquantr502_loop:
   # rx subrule "cclass_elem" subtype=capture negate=
-    rx488_cur."!cursor_pos"(rx488_pos)
-    $P10 = rx488_cur."cclass_elem"()
-    unless $P10, rx488_fail
-    rx488_cur."!mark_push"(0, -1, 0, $P10)
+    rx493_cur."!cursor_pos"(rx493_pos)
+    $P10 = rx493_cur."cclass_elem"()
+    unless $P10, rx493_fail
+    rx493_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cclass_elem")
-    rx488_pos = $P10."pos"()
-    (rx488_rep) = rx488_cur."!mark_commit"($I498)
-    rx488_cur."!mark_push"(rx488_rep, rx488_pos, $I498)
-    goto rxquantr497_loop
-  rxquantr497_done:
+    rx493_pos = $P10."pos"()
+    (rx493_rep) = rx493_cur."!mark_commit"($I503)
+    rx493_cur."!mark_push"(rx493_rep, rx493_pos, $I503)
+    goto rxquantr502_loop
+  rxquantr502_done:
   # rx pass
-    rx488_cur."!cursor_pass"(rx488_pos, "assertion:sym<[>")
-    rx488_cur."!cursor_debug"("PASS  ", "assertion:sym<[>", " at pos=", rx488_pos)
-    .return (rx488_cur)
-  rx488_fail:
+    rx493_cur."!cursor_pass"(rx493_pos, "assertion:sym<[>")
+    rx493_cur."!cursor_debug"("PASS  ", "assertion:sym<[>", " at pos=", rx493_pos)
+    .return (rx493_cur)
+  rx493_fail:
 .annotate 'line', 3
-    (rx488_rep, rx488_pos, $I10, $P10) = rx488_cur."!mark_fail"(0)
-    lt rx488_pos, -1, rx488_done
-    eq rx488_pos, -1, rx488_fail
+    (rx493_rep, rx493_pos, $I10, $P10) = rx493_cur."!mark_fail"(0)
+    lt rx493_pos, -1, rx493_done
+    eq rx493_pos, -1, rx493_fail
     jump $I10
-  rx488_done:
-    rx488_cur."!cursor_fail"()
-    rx488_cur."!cursor_debug"("FAIL  ", "assertion:sym<[>")
-    .return (rx488_cur)
+  rx493_done:
+    rx493_cur."!cursor_fail"()
+    rx493_cur."!cursor_debug"("FAIL  ", "assertion:sym<[>")
+    .return (rx493_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<[>"  :subid("139_1274022883.50471") :method
+.sub "!PREFIX__assertion:sym<[>"  :subid("139_1275811476.7961") :method
 .annotate 'line', 3
-    new $P490, "ResizablePMCArray"
-    push $P490, ""
-    .return ($P490)
+    new $P495, "ResizablePMCArray"
+    push $P495, ""
+    .return ($P495)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block492"  :anon :subid("140_1274022883.50471") :method :outer("138_1274022883.50471")
+.sub "_block497"  :anon :subid("140_1275811476.7961") :method :outer("138_1275811476.7961")
 .annotate 'line', 158
-    .local string rx494_tgt
-    .local int rx494_pos
-    .local int rx494_off
-    .local int rx494_eos
-    .local int rx494_rep
-    .local pmc rx494_cur
-    (rx494_cur, rx494_pos, rx494_tgt) = self."!cursor_start"()
-    rx494_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx494_cur
-    .local pmc match
-    .lex "$/", match
-    length rx494_eos, rx494_tgt
-    set rx494_off, 0
-    lt rx494_pos, 2, rx494_start
-    sub rx494_off, rx494_pos, 1
-    substr rx494_tgt, rx494_tgt, rx494_off
-  rx494_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan495_done
-    goto rxscan495_scan
-  rxscan495_loop:
-    ($P10) = rx494_cur."from"()
-    inc $P10
-    set rx494_pos, $P10
-    ge rx494_pos, rx494_eos, rxscan495_done
-  rxscan495_scan:
-    set_addr $I10, rxscan495_loop
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
-  rxscan495_done:
-  alt496_0:
-    set_addr $I10, alt496_1
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
+    .local string rx499_tgt
+    .local int rx499_pos
+    .local int rx499_off
+    .local int rx499_eos
+    .local int rx499_rep
+    .local pmc rx499_cur
+    (rx499_cur, rx499_pos, rx499_tgt) = self."!cursor_start"()
+    rx499_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx499_cur
+    .local pmc match
+    .lex "$/", match
+    length rx499_eos, rx499_tgt
+    gt rx499_pos, rx499_eos, rx499_done
+    set rx499_off, 0
+    lt rx499_pos, 2, rx499_start
+    sub rx499_off, rx499_pos, 1
+    substr rx499_tgt, rx499_tgt, rx499_off
+  rx499_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan500_done
+    goto rxscan500_scan
+  rxscan500_loop:
+    ($P10) = rx499_cur."from"()
+    inc $P10
+    set rx499_pos, $P10
+    ge rx499_pos, rx499_eos, rxscan500_done
+  rxscan500_scan:
+    set_addr $I10, rxscan500_loop
+    rx499_cur."!mark_push"(0, rx499_pos, $I10)
+  rxscan500_done:
+  alt501_0:
+    set_addr $I10, alt501_1
+    rx499_cur."!mark_push"(0, rx499_pos, $I10)
   # rx literal  "["
-    add $I11, rx494_pos, 1
-    gt $I11, rx494_eos, rx494_fail
-    sub $I11, rx494_pos, rx494_off
-    substr $S10, rx494_tgt, $I11, 1
-    ne $S10, "[", rx494_fail
-    add rx494_pos, 1
-    goto alt496_end
-  alt496_1:
-    set_addr $I10, alt496_2
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
+    add $I11, rx499_pos, 1
+    gt $I11, rx499_eos, rx499_fail
+    sub $I11, rx499_pos, rx499_off
+    substr $S10, rx499_tgt, $I11, 1
+    ne $S10, "[", rx499_fail
+    add rx499_pos, 1
+    goto alt501_end
+  alt501_1:
+    set_addr $I10, alt501_2
+    rx499_cur."!mark_push"(0, rx499_pos, $I10)
   # rx literal  "+"
-    add $I11, rx494_pos, 1
-    gt $I11, rx494_eos, rx494_fail
-    sub $I11, rx494_pos, rx494_off
-    substr $S10, rx494_tgt, $I11, 1
-    ne $S10, "+", rx494_fail
-    add rx494_pos, 1
-    goto alt496_end
-  alt496_2:
+    add $I11, rx499_pos, 1
+    gt $I11, rx499_eos, rx499_fail
+    sub $I11, rx499_pos, rx499_off
+    substr $S10, rx499_tgt, $I11, 1
+    ne $S10, "+", rx499_fail
+    add rx499_pos, 1
+    goto alt501_end
+  alt501_2:
   # rx literal  "-"
-    add $I11, rx494_pos, 1
-    gt $I11, rx494_eos, rx494_fail
-    sub $I11, rx494_pos, rx494_off
-    substr $S10, rx494_tgt, $I11, 1
-    ne $S10, "-", rx494_fail
-    add rx494_pos, 1
-  alt496_end:
-  # rx pass
-    rx494_cur."!cursor_pass"(rx494_pos, "")
-    rx494_cur."!cursor_debug"("PASS  ", "", " at pos=", rx494_pos)
-    .return (rx494_cur)
-  rx494_fail:
-    (rx494_rep, rx494_pos, $I10, $P10) = rx494_cur."!mark_fail"(0)
-    lt rx494_pos, -1, rx494_done
-    eq rx494_pos, -1, rx494_fail
-    jump $I10
-  rx494_done:
-    rx494_cur."!cursor_fail"()
-    rx494_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx494_cur)
+    add $I11, rx499_pos, 1
+    gt $I11, rx499_eos, rx499_fail
+    sub $I11, rx499_pos, rx499_off
+    substr $S10, rx499_tgt, $I11, 1
+    ne $S10, "-", rx499_fail
+    add rx499_pos, 1
+  alt501_end:
+  # rx pass
+    rx499_cur."!cursor_pass"(rx499_pos, "")
+    rx499_cur."!cursor_debug"("PASS  ", "", " at pos=", rx499_pos)
+    .return (rx499_cur)
+  rx499_fail:
+    (rx499_rep, rx499_pos, $I10, $P10) = rx499_cur."!mark_fail"(0)
+    lt rx499_pos, -1, rx499_done
+    eq rx499_pos, -1, rx499_fail
+    jump $I10
+  rx499_done:
+    rx499_cur."!cursor_fail"()
+    rx499_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx499_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "cclass_elem"  :subid("141_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .const 'Sub' $P511 = "143_1274022883.50471" 
-    capture_lex $P511
-    .local string rx500_tgt
-    .local int rx500_pos
-    .local int rx500_off
-    .local int rx500_eos
-    .local int rx500_rep
-    .local pmc rx500_cur
-    (rx500_cur, rx500_pos, rx500_tgt) = self."!cursor_start"()
-    rx500_cur."!cursor_debug"("START ", "cclass_elem")
-    rx500_cur."!cursor_caparray"("charspec")
-    .lex unicode:"$\x{a2}", rx500_cur
-    .local pmc match
-    .lex "$/", match
-    length rx500_eos, rx500_tgt
-    set rx500_off, 0
-    lt rx500_pos, 2, rx500_start
-    sub rx500_off, rx500_pos, 1
-    substr rx500_tgt, rx500_tgt, rx500_off
-  rx500_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan503_done
-    goto rxscan503_scan
-  rxscan503_loop:
-    ($P10) = rx500_cur."from"()
-    inc $P10
-    set rx500_pos, $P10
-    ge rx500_pos, rx500_eos, rxscan503_done
-  rxscan503_scan:
-    set_addr $I10, rxscan503_loop
-    rx500_cur."!mark_push"(0, rx500_pos, $I10)
-  rxscan503_done:
+.sub "cclass_elem"  :subid("141_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .const 'Sub' $P516 = "143_1275811476.7961" 
+    capture_lex $P516
+    .local string rx505_tgt
+    .local int rx505_pos
+    .local int rx505_off
+    .local int rx505_eos
+    .local int rx505_rep
+    .local pmc rx505_cur
+    (rx505_cur, rx505_pos, rx505_tgt) = self."!cursor_start"()
+    rx505_cur."!cursor_debug"("START ", "cclass_elem")
+    rx505_cur."!cursor_caparray"("charspec")
+    .lex unicode:"$\x{a2}", rx505_cur
+    .local pmc match
+    .lex "$/", match
+    length rx505_eos, rx505_tgt
+    gt rx505_pos, rx505_eos, rx505_done
+    set rx505_off, 0
+    lt rx505_pos, 2, rx505_start
+    sub rx505_off, rx505_pos, 1
+    substr rx505_tgt, rx505_tgt, rx505_off
+  rx505_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan508_done
+    goto rxscan508_scan
+  rxscan508_loop:
+    ($P10) = rx505_cur."from"()
+    inc $P10
+    set rx505_pos, $P10
+    ge rx505_pos, rx505_eos, rxscan508_done
+  rxscan508_scan:
+    set_addr $I10, rxscan508_loop
+    rx505_cur."!mark_push"(0, rx505_pos, $I10)
+  rxscan508_done:
 .annotate 'line', 161
   # rx subcapture "sign"
-    set_addr $I10, rxcap_505_fail
-    rx500_cur."!mark_push"(0, rx500_pos, $I10)
-  alt504_0:
-    set_addr $I10, alt504_1
-    rx500_cur."!mark_push"(0, rx500_pos, $I10)
+    set_addr $I10, rxcap_510_fail
+    rx505_cur."!mark_push"(0, rx505_pos, $I10)
+  alt509_0:
+    set_addr $I10, alt509_1
+    rx505_cur."!mark_push"(0, rx505_pos, $I10)
   # rx literal  "+"
-    add $I11, rx500_pos, 1
-    gt $I11, rx500_eos, rx500_fail
-    sub $I11, rx500_pos, rx500_off
-    substr $S10, rx500_tgt, $I11, 1
-    ne $S10, "+", rx500_fail
-    add rx500_pos, 1
-    goto alt504_end
-  alt504_1:
-    set_addr $I10, alt504_2
-    rx500_cur."!mark_push"(0, rx500_pos, $I10)
+    add $I11, rx505_pos, 1
+    gt $I11, rx505_eos, rx505_fail
+    sub $I11, rx505_pos, rx505_off
+    substr $S10, rx505_tgt, $I11, 1
+    ne $S10, "+", rx505_fail
+    add rx505_pos, 1
+    goto alt509_end
+  alt509_1:
+    set_addr $I10, alt509_2
+    rx505_cur."!mark_push"(0, rx505_pos, $I10)
   # rx literal  "-"
-    add $I11, rx500_pos, 1
-    gt $I11, rx500_eos, rx500_fail
-    sub $I11, rx500_pos, rx500_off
-    substr $S10, rx500_tgt, $I11, 1
-    ne $S10, "-", rx500_fail
-    add rx500_pos, 1
-    goto alt504_end
-  alt504_2:
-  alt504_end:
-    set_addr $I10, rxcap_505_fail
-    ($I12, $I11) = rx500_cur."!mark_peek"($I10)
-    rx500_cur."!cursor_pos"($I11)
-    ($P10) = rx500_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx500_pos, "")
-    rx500_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx505_pos, 1
+    gt $I11, rx505_eos, rx505_fail
+    sub $I11, rx505_pos, rx505_off
+    substr $S10, rx505_tgt, $I11, 1
+    ne $S10, "-", rx505_fail
+    add rx505_pos, 1
+    goto alt509_end
+  alt509_2:
+  alt509_end:
+    set_addr $I10, rxcap_510_fail
+    ($I12, $I11) = rx505_cur."!mark_peek"($I10)
+    rx505_cur."!cursor_pos"($I11)
+    ($P10) = rx505_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx505_pos, "")
+    rx505_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sign")
-    goto rxcap_505_done
-  rxcap_505_fail:
-    goto rx500_fail
-  rxcap_505_done:
+    goto rxcap_510_done
+  rxcap_510_fail:
+    goto rx505_fail
+  rxcap_510_done:
 .annotate 'line', 162
-  # rx rxquantr506 ** 0..1
-    set_addr $I507, rxquantr506_done
-    rx500_cur."!mark_push"(0, rx500_pos, $I507)
-  rxquantr506_loop:
+  # rx rxquantr511 ** 0..1
+    set_addr $I512, rxquantr511_done
+    rx505_cur."!mark_push"(0, rx505_pos, $I512)
+  rxquantr511_loop:
   # rx subrule "normspace" subtype=method negate=
-    rx500_cur."!cursor_pos"(rx500_pos)
-    $P10 = rx500_cur."normspace"()
-    unless $P10, rx500_fail
-    rx500_pos = $P10."pos"()
-    (rx500_rep) = rx500_cur."!mark_commit"($I507)
-  rxquantr506_done:
-  alt508_0:
+    rx505_cur."!cursor_pos"(rx505_pos)
+    $P10 = rx505_cur."normspace"()
+    unless $P10, rx505_fail
+    rx505_pos = $P10."pos"()
+    (rx505_rep) = rx505_cur."!mark_commit"($I512)
+  rxquantr511_done:
+  alt513_0:
 .annotate 'line', 163
-    set_addr $I10, alt508_1
-    rx500_cur."!mark_push"(0, rx500_pos, $I10)
+    set_addr $I10, alt513_1
+    rx505_cur."!mark_push"(0, rx505_pos, $I10)
 .annotate 'line', 164
   # rx literal  "["
-    add $I11, rx500_pos, 1
-    gt $I11, rx500_eos, rx500_fail
-    sub $I11, rx500_pos, rx500_off
-    substr $S10, rx500_tgt, $I11, 1
-    ne $S10, "[", rx500_fail
-    add rx500_pos, 1
+    add $I11, rx505_pos, 1
+    gt $I11, rx505_eos, rx505_fail
+    sub $I11, rx505_pos, rx505_off
+    substr $S10, rx505_tgt, $I11, 1
+    ne $S10, "[", rx505_fail
+    add rx505_pos, 1
 .annotate 'line', 167
-  # rx rxquantr509 ** 0..*
-    set_addr $I530, rxquantr509_done
-    rx500_cur."!mark_push"(0, rx500_pos, $I530)
-  rxquantr509_loop:
+  # rx rxquantr514 ** 0..*
+    set_addr $I535, rxquantr514_done
+    rx505_cur."!mark_push"(0, rx505_pos, $I535)
+  rxquantr514_loop:
 .annotate 'line', 164
-  # rx subrule $P511 subtype=capture negate=
-    rx500_cur."!cursor_pos"(rx500_pos)
-    .const 'Sub' $P511 = "143_1274022883.50471" 
-    capture_lex $P511
-    $P10 = rx500_cur.$P511()
-    unless $P10, rx500_fail
-    rx500_cur."!mark_push"(0, -1, 0, $P10)
+  # rx subrule $P516 subtype=capture negate=
+    rx505_cur."!cursor_pos"(rx505_pos)
+    .const 'Sub' $P516 = "143_1275811476.7961" 
+    capture_lex $P516
+    $P10 = rx505_cur.$P516()
+    unless $P10, rx505_fail
+    rx505_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("charspec")
-    rx500_pos = $P10."pos"()
+    rx505_pos = $P10."pos"()
 .annotate 'line', 167
-    (rx500_rep) = rx500_cur."!mark_commit"($I530)
-    rx500_cur."!mark_push"(rx500_rep, rx500_pos, $I530)
-    goto rxquantr509_loop
-  rxquantr509_done:
+    (rx505_rep) = rx505_cur."!mark_commit"($I535)
+    rx505_cur."!mark_push"(rx505_rep, rx505_pos, $I535)
+    goto rxquantr514_loop
+  rxquantr514_done:
 .annotate 'line', 168
   # rx charclass_q s r 0..-1
-    sub $I10, rx500_pos, rx500_off
-    find_not_cclass $I11, 32, rx500_tgt, $I10, rx500_eos
-    add rx500_pos, rx500_off, $I11
+    sub $I10, rx505_pos, rx505_off
+    find_not_cclass $I11, 32, rx505_tgt, $I10, rx505_eos
+    add rx505_pos, rx505_off, $I11
   # rx literal  "]"
-    add $I11, rx500_pos, 1
-    gt $I11, rx500_eos, rx500_fail
-    sub $I11, rx500_pos, rx500_off
-    substr $S10, rx500_tgt, $I11, 1
-    ne $S10, "]", rx500_fail
-    add rx500_pos, 1
+    add $I11, rx505_pos, 1
+    gt $I11, rx505_eos, rx505_fail
+    sub $I11, rx505_pos, rx505_off
+    substr $S10, rx505_tgt, $I11, 1
+    ne $S10, "]", rx505_fail
+    add rx505_pos, 1
 .annotate 'line', 164
-    goto alt508_end
-  alt508_1:
+    goto alt513_end
+  alt513_1:
 .annotate 'line', 169
   # rx subcapture "name"
-    set_addr $I10, rxcap_531_fail
-    rx500_cur."!mark_push"(0, rx500_pos, $I10)
+    set_addr $I10, rxcap_536_fail
+    rx505_cur."!mark_push"(0, rx505_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx500_pos, rx500_off
-    find_not_cclass $I11, 8192, rx500_tgt, $I10, rx500_eos
+    sub $I10, rx505_pos, rx505_off
+    find_not_cclass $I11, 8192, rx505_tgt, $I10, rx505_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx500_fail
-    add rx500_pos, rx500_off, $I11
-    set_addr $I10, rxcap_531_fail
-    ($I12, $I11) = rx500_cur."!mark_peek"($I10)
-    rx500_cur."!cursor_pos"($I11)
-    ($P10) = rx500_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx500_pos, "")
-    rx500_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx505_fail
+    add rx505_pos, rx505_off, $I11
+    set_addr $I10, rxcap_536_fail
+    ($I12, $I11) = rx505_cur."!mark_peek"($I10)
+    rx505_cur."!cursor_pos"($I11)
+    ($P10) = rx505_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx505_pos, "")
+    rx505_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    goto rxcap_531_done
-  rxcap_531_fail:
-    goto rx500_fail
-  rxcap_531_done:
-  alt508_end:
+    goto rxcap_536_done
+  rxcap_536_fail:
+    goto rx505_fail
+  rxcap_536_done:
+  alt513_end:
 .annotate 'line', 171
-  # rx rxquantr532 ** 0..1
-    set_addr $I533, rxquantr532_done
-    rx500_cur."!mark_push"(0, rx500_pos, $I533)
-  rxquantr532_loop:
+  # rx rxquantr537 ** 0..1
+    set_addr $I538, rxquantr537_done
+    rx505_cur."!mark_push"(0, rx505_pos, $I538)
+  rxquantr537_loop:
   # rx subrule "normspace" subtype=method negate=
-    rx500_cur."!cursor_pos"(rx500_pos)
-    $P10 = rx500_cur."normspace"()
-    unless $P10, rx500_fail
-    rx500_pos = $P10."pos"()
-    (rx500_rep) = rx500_cur."!mark_commit"($I533)
-  rxquantr532_done:
+    rx505_cur."!cursor_pos"(rx505_pos)
+    $P10 = rx505_cur."normspace"()
+    unless $P10, rx505_fail
+    rx505_pos = $P10."pos"()
+    (rx505_rep) = rx505_cur."!mark_commit"($I538)
+  rxquantr537_done:
 .annotate 'line', 160
   # rx pass
-    rx500_cur."!cursor_pass"(rx500_pos, "cclass_elem")
-    rx500_cur."!cursor_debug"("PASS  ", "cclass_elem", " at pos=", rx500_pos)
-    .return (rx500_cur)
-  rx500_fail:
+    rx505_cur."!cursor_pass"(rx505_pos, "cclass_elem")
+    rx505_cur."!cursor_debug"("PASS  ", "cclass_elem", " at pos=", rx505_pos)
+    .return (rx505_cur)
+  rx505_fail:
 .annotate 'line', 3
-    (rx500_rep, rx500_pos, $I10, $P10) = rx500_cur."!mark_fail"(0)
-    lt rx500_pos, -1, rx500_done
-    eq rx500_pos, -1, rx500_fail
+    (rx505_rep, rx505_pos, $I10, $P10) = rx505_cur."!mark_fail"(0)
+    lt rx505_pos, -1, rx505_done
+    eq rx505_pos, -1, rx505_fail
     jump $I10
-  rx500_done:
-    rx500_cur."!cursor_fail"()
-    rx500_cur."!cursor_debug"("FAIL  ", "cclass_elem")
-    .return (rx500_cur)
+  rx505_done:
+    rx505_cur."!cursor_fail"()
+    rx505_cur."!cursor_debug"("FAIL  ", "cclass_elem")
+    .return (rx505_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__cclass_elem"  :subid("142_1274022883.50471") :method
+.sub "!PREFIX__cclass_elem"  :subid("142_1275811476.7961") :method
 .annotate 'line', 3
-    new $P502, "ResizablePMCArray"
-    push $P502, ""
-    push $P502, "-"
-    push $P502, "+"
-    .return ($P502)
+    new $P507, "ResizablePMCArray"
+    push $P507, ""
+    push $P507, "-"
+    push $P507, "+"
+    .return ($P507)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block510"  :anon :subid("143_1274022883.50471") :method :outer("141_1274022883.50471")
+.sub "_block515"  :anon :subid("143_1275811476.7961") :method :outer("141_1275811476.7961")
 .annotate 'line', 164
-    .const 'Sub' $P526 = "146_1274022883.50471" 
+    .const 'Sub' $P531 = "146_1275811476.7961" 
+    capture_lex $P531
+    .const 'Sub' $P526 = "145_1275811476.7961" 
     capture_lex $P526
-    .const 'Sub' $P521 = "145_1274022883.50471" 
-    capture_lex $P521
-    .const 'Sub' $P517 = "144_1274022883.50471" 
-    capture_lex $P517
-    .local string rx512_tgt
-    .local int rx512_pos
-    .local int rx512_off
-    .local int rx512_eos
-    .local int rx512_rep
-    .local pmc rx512_cur
-    (rx512_cur, rx512_pos, rx512_tgt) = self."!cursor_start"()
-    rx512_cur."!cursor_debug"("START ", "")
-    rx512_cur."!cursor_caparray"("1")
-    .lex unicode:"$\x{a2}", rx512_cur
-    .local pmc match
-    .lex "$/", match
-    length rx512_eos, rx512_tgt
-    set rx512_off, 0
-    lt rx512_pos, 2, rx512_start
-    sub rx512_off, rx512_pos, 1
-    substr rx512_tgt, rx512_tgt, rx512_off
-  rx512_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan513_done
-    goto rxscan513_scan
-  rxscan513_loop:
-    ($P10) = rx512_cur."from"()
-    inc $P10
-    set rx512_pos, $P10
-    ge rx512_pos, rx512_eos, rxscan513_done
-  rxscan513_scan:
-    set_addr $I10, rxscan513_loop
-    rx512_cur."!mark_push"(0, rx512_pos, $I10)
-  rxscan513_done:
-  alt514_0:
-    set_addr $I10, alt514_1
-    rx512_cur."!mark_push"(0, rx512_pos, $I10)
+    .const 'Sub' $P522 = "144_1275811476.7961" 
+    capture_lex $P522
+    .local string rx517_tgt
+    .local int rx517_pos
+    .local int rx517_off
+    .local int rx517_eos
+    .local int rx517_rep
+    .local pmc rx517_cur
+    (rx517_cur, rx517_pos, rx517_tgt) = self."!cursor_start"()
+    rx517_cur."!cursor_debug"("START ", "")
+    rx517_cur."!cursor_caparray"("1")
+    .lex unicode:"$\x{a2}", rx517_cur
+    .local pmc match
+    .lex "$/", match
+    length rx517_eos, rx517_tgt
+    gt rx517_pos, rx517_eos, rx517_done
+    set rx517_off, 0
+    lt rx517_pos, 2, rx517_start
+    sub rx517_off, rx517_pos, 1
+    substr rx517_tgt, rx517_tgt, rx517_off
+  rx517_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan518_done
+    goto rxscan518_scan
+  rxscan518_loop:
+    ($P10) = rx517_cur."from"()
+    inc $P10
+    set rx517_pos, $P10
+    ge rx517_pos, rx517_eos, rxscan518_done
+  rxscan518_scan:
+    set_addr $I10, rxscan518_loop
+    rx517_cur."!mark_push"(0, rx517_pos, $I10)
+  rxscan518_done:
+  alt519_0:
+    set_addr $I10, alt519_1
+    rx517_cur."!mark_push"(0, rx517_pos, $I10)
 .annotate 'line', 165
   # rx charclass_q s r 0..-1
-    sub $I10, rx512_pos, rx512_off
-    find_not_cclass $I11, 32, rx512_tgt, $I10, rx512_eos
-    add rx512_pos, rx512_off, $I11
+    sub $I10, rx517_pos, rx517_off
+    find_not_cclass $I11, 32, rx517_tgt, $I10, rx517_eos
+    add rx517_pos, rx517_off, $I11
   # rx literal  "-"
-    add $I11, rx512_pos, 1
-    gt $I11, rx512_eos, rx512_fail
-    sub $I11, rx512_pos, rx512_off
-    substr $S10, rx512_tgt, $I11, 1
-    ne $S10, "-", rx512_fail
-    add rx512_pos, 1
+    add $I11, rx517_pos, 1
+    gt $I11, rx517_eos, rx517_fail
+    sub $I11, rx517_pos, rx517_off
+    substr $S10, rx517_tgt, $I11, 1
+    ne $S10, "-", rx517_fail
+    add rx517_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx512_cur."!cursor_pos"(rx512_pos)
-    $P10 = rx512_cur."obs"("hyphen in enumerated character class", "..")
-    unless $P10, rx512_fail
-    rx512_pos = $P10."pos"()
-    goto alt514_end
-  alt514_1:
+    rx517_cur."!cursor_pos"(rx517_pos)
+    $P10 = rx517_cur."obs"("hyphen in enumerated character class", "..")
+    unless $P10, rx517_fail
+    rx517_pos = $P10."pos"()
+    goto alt519_end
+  alt519_1:
 .annotate 'line', 166
   # rx charclass_q s r 0..-1
-    sub $I10, rx512_pos, rx512_off
-    find_not_cclass $I11, 32, rx512_tgt, $I10, rx512_eos
-    add rx512_pos, rx512_off, $I11
-  alt515_0:
-    set_addr $I10, alt515_1
-    rx512_cur."!mark_push"(0, rx512_pos, $I10)
+    sub $I10, rx517_pos, rx517_off
+    find_not_cclass $I11, 32, rx517_tgt, $I10, rx517_eos
+    add rx517_pos, rx517_off, $I11
+  alt520_0:
+    set_addr $I10, alt520_1
+    rx517_cur."!mark_push"(0, rx517_pos, $I10)
   # rx literal  "\\"
-    add $I11, rx512_pos, 1
-    gt $I11, rx512_eos, rx512_fail
-    sub $I11, rx512_pos, rx512_off
-    substr $S10, rx512_tgt, $I11, 1
-    ne $S10, "\\", rx512_fail
-    add rx512_pos, 1
-  # rx subrule $P517 subtype=capture negate=
-    rx512_cur."!cursor_pos"(rx512_pos)
-    .const 'Sub' $P517 = "144_1274022883.50471" 
-    capture_lex $P517
-    $P10 = rx512_cur.$P517()
-    unless $P10, rx512_fail
-    rx512_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx517_pos, 1
+    gt $I11, rx517_eos, rx517_fail
+    sub $I11, rx517_pos, rx517_off
+    substr $S10, rx517_tgt, $I11, 1
+    ne $S10, "\\", rx517_fail
+    add rx517_pos, 1
+  # rx subrule $P522 subtype=capture negate=
+    rx517_cur."!cursor_pos"(rx517_pos)
+    .const 'Sub' $P522 = "144_1275811476.7961" 
+    capture_lex $P522
+    $P10 = rx517_cur.$P522()
+    unless $P10, rx517_fail
+    rx517_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"(0)
-    rx512_pos = $P10."pos"()
-    goto alt515_end
-  alt515_1:
-  # rx subrule $P521 subtype=capture negate=
-    rx512_cur."!cursor_pos"(rx512_pos)
-    .const 'Sub' $P521 = "145_1274022883.50471" 
-    capture_lex $P521
-    $P10 = rx512_cur.$P521()
-    unless $P10, rx512_fail
-    rx512_cur."!mark_push"(0, -1, 0, $P10)
+    rx517_pos = $P10."pos"()
+    goto alt520_end
+  alt520_1:
+  # rx subrule $P526 subtype=capture negate=
+    rx517_cur."!cursor_pos"(rx517_pos)
+    .const 'Sub' $P526 = "145_1275811476.7961" 
+    capture_lex $P526
+    $P10 = rx517_cur.$P526()
+    unless $P10, rx517_fail
+    rx517_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"(0)
-    rx512_pos = $P10."pos"()
-  alt515_end:
-  # rx rxquantr524 ** 0..1
-    set_addr $I529, rxquantr524_done
-    rx512_cur."!mark_push"(0, rx512_pos, $I529)
-  rxquantr524_loop:
+    rx517_pos = $P10."pos"()
+  alt520_end:
+  # rx rxquantr529 ** 0..1
+    set_addr $I534, rxquantr529_done
+    rx517_cur."!mark_push"(0, rx517_pos, $I534)
+  rxquantr529_loop:
   # rx charclass_q s r 0..-1
-    sub $I10, rx512_pos, rx512_off
-    find_not_cclass $I11, 32, rx512_tgt, $I10, rx512_eos
-    add rx512_pos, rx512_off, $I11
+    sub $I10, rx517_pos, rx517_off
+    find_not_cclass $I11, 32, rx517_tgt, $I10, rx517_eos
+    add rx517_pos, rx517_off, $I11
   # rx literal  ".."
-    add $I11, rx512_pos, 2
-    gt $I11, rx512_eos, rx512_fail
-    sub $I11, rx512_pos, rx512_off
-    substr $S10, rx512_tgt, $I11, 2
-    ne $S10, "..", rx512_fail
-    add rx512_pos, 2
+    add $I11, rx517_pos, 2
+    gt $I11, rx517_eos, rx517_fail
+    sub $I11, rx517_pos, rx517_off
+    substr $S10, rx517_tgt, $I11, 2
+    ne $S10, "..", rx517_fail
+    add rx517_pos, 2
   # rx charclass_q s r 0..-1
-    sub $I10, rx512_pos, rx512_off
-    find_not_cclass $I11, 32, rx512_tgt, $I10, rx512_eos
-    add rx512_pos, rx512_off, $I11
-  # rx subrule $P526 subtype=capture negate=
-    rx512_cur."!cursor_pos"(rx512_pos)
-    .const 'Sub' $P526 = "146_1274022883.50471" 
-    capture_lex $P526
-    $P10 = rx512_cur.$P526()
-    unless $P10, rx512_fail
-    rx512_cur."!mark_push"(0, -1, 0, $P10)
+    sub $I10, rx517_pos, rx517_off
+    find_not_cclass $I11, 32, rx517_tgt, $I10, rx517_eos
+    add rx517_pos, rx517_off, $I11
+  # rx subrule $P531 subtype=capture negate=
+    rx517_cur."!cursor_pos"(rx517_pos)
+    .const 'Sub' $P531 = "146_1275811476.7961" 
+    capture_lex $P531
+    $P10 = rx517_cur.$P531()
+    unless $P10, rx517_fail
+    rx517_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("1")
-    rx512_pos = $P10."pos"()
-    (rx512_rep) = rx512_cur."!mark_commit"($I529)
-  rxquantr524_done:
-  alt514_end:
+    rx517_pos = $P10."pos"()
+    (rx517_rep) = rx517_cur."!mark_commit"($I534)
+  rxquantr529_done:
+  alt519_end:
 .annotate 'line', 164
   # rx pass
-    rx512_cur."!cursor_pass"(rx512_pos, "")
-    rx512_cur."!cursor_debug"("PASS  ", "", " at pos=", rx512_pos)
-    .return (rx512_cur)
-  rx512_fail:
-    (rx512_rep, rx512_pos, $I10, $P10) = rx512_cur."!mark_fail"(0)
-    lt rx512_pos, -1, rx512_done
-    eq rx512_pos, -1, rx512_fail
+    rx517_cur."!cursor_pass"(rx517_pos, "")
+    rx517_cur."!cursor_debug"("PASS  ", "", " at pos=", rx517_pos)
+    .return (rx517_cur)
+  rx517_fail:
+    (rx517_rep, rx517_pos, $I10, $P10) = rx517_cur."!mark_fail"(0)
+    lt rx517_pos, -1, rx517_done
+    eq rx517_pos, -1, rx517_fail
     jump $I10
-  rx512_done:
-    rx512_cur."!cursor_fail"()
-    rx512_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx512_cur)
+  rx517_done:
+    rx517_cur."!cursor_fail"()
+    rx517_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx517_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block516"  :anon :subid("144_1274022883.50471") :method :outer("143_1274022883.50471")
+.sub "_block521"  :anon :subid("144_1275811476.7961") :method :outer("143_1275811476.7961")
 .annotate 'line', 166
-    .local string rx518_tgt
-    .local int rx518_pos
-    .local int rx518_off
-    .local int rx518_eos
-    .local int rx518_rep
-    .local pmc rx518_cur
-    (rx518_cur, rx518_pos, rx518_tgt) = self."!cursor_start"()
-    rx518_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx518_cur
-    .local pmc match
-    .lex "$/", match
-    length rx518_eos, rx518_tgt
-    set rx518_off, 0
-    lt rx518_pos, 2, rx518_start
-    sub rx518_off, rx518_pos, 1
-    substr rx518_tgt, rx518_tgt, rx518_off
-  rx518_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan519_done
-    goto rxscan519_scan
-  rxscan519_loop:
-    ($P10) = rx518_cur."from"()
-    inc $P10
-    set rx518_pos, $P10
-    ge rx518_pos, rx518_eos, rxscan519_done
-  rxscan519_scan:
-    set_addr $I10, rxscan519_loop
-    rx518_cur."!mark_push"(0, rx518_pos, $I10)
-  rxscan519_done:
+    .local string rx523_tgt
+    .local int rx523_pos
+    .local int rx523_off
+    .local int rx523_eos
+    .local int rx523_rep
+    .local pmc rx523_cur
+    (rx523_cur, rx523_pos, rx523_tgt) = self."!cursor_start"()
+    rx523_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx523_cur
+    .local pmc match
+    .lex "$/", match
+    length rx523_eos, rx523_tgt
+    gt rx523_pos, rx523_eos, rx523_done
+    set rx523_off, 0
+    lt rx523_pos, 2, rx523_start
+    sub rx523_off, rx523_pos, 1
+    substr rx523_tgt, rx523_tgt, rx523_off
+  rx523_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan524_done
+    goto rxscan524_scan
+  rxscan524_loop:
+    ($P10) = rx523_cur."from"()
+    inc $P10
+    set rx523_pos, $P10
+    ge rx523_pos, rx523_eos, rxscan524_done
+  rxscan524_scan:
+    set_addr $I10, rxscan524_loop
+    rx523_cur."!mark_push"(0, rx523_pos, $I10)
+  rxscan524_done:
   # rx charclass .
-    ge rx518_pos, rx518_eos, rx518_fail
-    inc rx518_pos
-  # rx pass
-    rx518_cur."!cursor_pass"(rx518_pos, "")
-    rx518_cur."!cursor_debug"("PASS  ", "", " at pos=", rx518_pos)
-    .return (rx518_cur)
-  rx518_fail:
-    (rx518_rep, rx518_pos, $I10, $P10) = rx518_cur."!mark_fail"(0)
-    lt rx518_pos, -1, rx518_done
-    eq rx518_pos, -1, rx518_fail
-    jump $I10
-  rx518_done:
-    rx518_cur."!cursor_fail"()
-    rx518_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx518_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block520"  :anon :subid("145_1274022883.50471") :method :outer("143_1274022883.50471")
-.annotate 'line', 166
-    .local string rx522_tgt
-    .local int rx522_pos
-    .local int rx522_off
-    .local int rx522_eos
-    .local int rx522_rep
-    .local pmc rx522_cur
-    (rx522_cur, rx522_pos, rx522_tgt) = self."!cursor_start"()
-    rx522_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx522_cur
-    .local pmc match
-    .lex "$/", match
-    length rx522_eos, rx522_tgt
-    set rx522_off, 0
-    lt rx522_pos, 2, rx522_start
-    sub rx522_off, rx522_pos, 1
-    substr rx522_tgt, rx522_tgt, rx522_off
-  rx522_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan523_done
-    goto rxscan523_scan
-  rxscan523_loop:
-    ($P10) = rx522_cur."from"()
-    inc $P10
-    set rx522_pos, $P10
-    ge rx522_pos, rx522_eos, rxscan523_done
-  rxscan523_scan:
-    set_addr $I10, rxscan523_loop
-    rx522_cur."!mark_push"(0, rx522_pos, $I10)
-  rxscan523_done:
-  # rx enumcharlist negate=1 
-    ge rx522_pos, rx522_eos, rx522_fail
-    sub $I10, rx522_pos, rx522_off
-    substr $S10, rx522_tgt, $I10, 1
-    index $I11, "]\\", $S10
-    ge $I11, 0, rx522_fail
-    inc rx522_pos
+    ge rx523_pos, rx523_eos, rx523_fail
+    inc rx523_pos
   # rx pass
-    rx522_cur."!cursor_pass"(rx522_pos, "")
-    rx522_cur."!cursor_debug"("PASS  ", "", " at pos=", rx522_pos)
-    .return (rx522_cur)
-  rx522_fail:
-    (rx522_rep, rx522_pos, $I10, $P10) = rx522_cur."!mark_fail"(0)
-    lt rx522_pos, -1, rx522_done
-    eq rx522_pos, -1, rx522_fail
+    rx523_cur."!cursor_pass"(rx523_pos, "")
+    rx523_cur."!cursor_debug"("PASS  ", "", " at pos=", rx523_pos)
+    .return (rx523_cur)
+  rx523_fail:
+    (rx523_rep, rx523_pos, $I10, $P10) = rx523_cur."!mark_fail"(0)
+    lt rx523_pos, -1, rx523_done
+    eq rx523_pos, -1, rx523_fail
     jump $I10
-  rx522_done:
-    rx522_cur."!cursor_fail"()
-    rx522_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx522_cur)
+  rx523_done:
+    rx523_cur."!cursor_fail"()
+    rx523_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx523_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block525"  :anon :subid("146_1274022883.50471") :method :outer("143_1274022883.50471")
+.sub "_block525"  :anon :subid("145_1275811476.7961") :method :outer("143_1275811476.7961")
 .annotate 'line', 166
     .local string rx527_tgt
     .local int rx527_pos
@@ -6587,6 +6631,7 @@
     .local pmc match
     .lex "$/", match
     length rx527_eos, rx527_tgt
+    gt rx527_pos, rx527_eos, rx527_done
     set rx527_off, 0
     lt rx527_pos, 2, rx527_start
     sub rx527_off, rx527_pos, 1
@@ -6604,8 +6649,12 @@
     set_addr $I10, rxscan528_loop
     rx527_cur."!mark_push"(0, rx527_pos, $I10)
   rxscan528_done:
-  # rx charclass .
+  # rx enumcharlist negate=1 
     ge rx527_pos, rx527_eos, rx527_fail
+    sub $I10, rx527_pos, rx527_off
+    substr $S10, rx527_tgt, $I10, 1
+    index $I11, "]\\", $S10
+    ge $I11, 0, rx527_fail
     inc rx527_pos
   # rx pass
     rx527_cur."!cursor_pass"(rx527_pos, "")
@@ -6625,812 +6674,884 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_internal"  :subid("147_1274022883.50471") :method :outer("11_1274022883.50471")
-.annotate 'line', 3
-    .const 'Sub' $P543 = "149_1274022883.50471" 
-    capture_lex $P543
-    .local string rx535_tgt
-    .local int rx535_pos
-    .local int rx535_off
-    .local int rx535_eos
-    .local int rx535_rep
-    .local pmc rx535_cur
-    (rx535_cur, rx535_pos, rx535_tgt) = self."!cursor_start"()
-    rx535_cur."!cursor_debug"("START ", "mod_internal")
-    rx535_cur."!cursor_caparray"("n")
-    .lex unicode:"$\x{a2}", rx535_cur
-    .local pmc match
-    .lex "$/", match
-    length rx535_eos, rx535_tgt
-    set rx535_off, 0
-    lt rx535_pos, 2, rx535_start
-    sub rx535_off, rx535_pos, 1
-    substr rx535_tgt, rx535_tgt, rx535_off
-  rx535_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan539_done
-    goto rxscan539_scan
-  rxscan539_loop:
-    ($P10) = rx535_cur."from"()
-    inc $P10
-    set rx535_pos, $P10
-    ge rx535_pos, rx535_eos, rxscan539_done
-  rxscan539_scan:
-    set_addr $I10, rxscan539_loop
-    rx535_cur."!mark_push"(0, rx535_pos, $I10)
-  rxscan539_done:
-  alt540_0:
+.sub "_block530"  :anon :subid("146_1275811476.7961") :method :outer("143_1275811476.7961")
+.annotate 'line', 166
+    .local string rx532_tgt
+    .local int rx532_pos
+    .local int rx532_off
+    .local int rx532_eos
+    .local int rx532_rep
+    .local pmc rx532_cur
+    (rx532_cur, rx532_pos, rx532_tgt) = self."!cursor_start"()
+    rx532_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx532_cur
+    .local pmc match
+    .lex "$/", match
+    length rx532_eos, rx532_tgt
+    gt rx532_pos, rx532_eos, rx532_done
+    set rx532_off, 0
+    lt rx532_pos, 2, rx532_start
+    sub rx532_off, rx532_pos, 1
+    substr rx532_tgt, rx532_tgt, rx532_off
+  rx532_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan533_done
+    goto rxscan533_scan
+  rxscan533_loop:
+    ($P10) = rx532_cur."from"()
+    inc $P10
+    set rx532_pos, $P10
+    ge rx532_pos, rx532_eos, rxscan533_done
+  rxscan533_scan:
+    set_addr $I10, rxscan533_loop
+    rx532_cur."!mark_push"(0, rx532_pos, $I10)
+  rxscan533_done:
+  # rx charclass .
+    ge rx532_pos, rx532_eos, rx532_fail
+    inc rx532_pos
+  # rx pass
+    rx532_cur."!cursor_pass"(rx532_pos, "")
+    rx532_cur."!cursor_debug"("PASS  ", "", " at pos=", rx532_pos)
+    .return (rx532_cur)
+  rx532_fail:
+    (rx532_rep, rx532_pos, $I10, $P10) = rx532_cur."!mark_fail"(0)
+    lt rx532_pos, -1, rx532_done
+    eq rx532_pos, -1, rx532_fail
+    jump $I10
+  rx532_done:
+    rx532_cur."!cursor_fail"()
+    rx532_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx532_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_internal"  :subid("147_1275811476.7961") :method :outer("11_1275811476.7961")
+.annotate 'line', 3
+    .const 'Sub' $P548 = "149_1275811476.7961" 
+    capture_lex $P548
+    .local string rx540_tgt
+    .local int rx540_pos
+    .local int rx540_off
+    .local int rx540_eos
+    .local int rx540_rep
+    .local pmc rx540_cur
+    (rx540_cur, rx540_pos, rx540_tgt) = self."!cursor_start"()
+    rx540_cur."!cursor_debug"("START ", "mod_internal")
+    rx540_cur."!cursor_caparray"("n")
+    .lex unicode:"$\x{a2}", rx540_cur
+    .local pmc match
+    .lex "$/", match
+    length rx540_eos, rx540_tgt
+    gt rx540_pos, rx540_eos, rx540_done
+    set rx540_off, 0
+    lt rx540_pos, 2, rx540_start
+    sub rx540_off, rx540_pos, 1
+    substr rx540_tgt, rx540_tgt, rx540_off
+  rx540_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan544_done
+    goto rxscan544_scan
+  rxscan544_loop:
+    ($P10) = rx540_cur."from"()
+    inc $P10
+    set rx540_pos, $P10
+    ge rx540_pos, rx540_eos, rxscan544_done
+  rxscan544_scan:
+    set_addr $I10, rxscan544_loop
+    rx540_cur."!mark_push"(0, rx540_pos, $I10)
+  rxscan544_done:
+  alt545_0:
 .annotate 'line', 175
-    set_addr $I10, alt540_1
-    rx535_cur."!mark_push"(0, rx535_pos, $I10)
+    set_addr $I10, alt545_1
+    rx540_cur."!mark_push"(0, rx540_pos, $I10)
 .annotate 'line', 176
   # rx literal  ":"
-    add $I11, rx535_pos, 1
-    gt $I11, rx535_eos, rx535_fail
-    sub $I11, rx535_pos, rx535_off
-    substr $S10, rx535_tgt, $I11, 1
-    ne $S10, ":", rx535_fail
-    add rx535_pos, 1
-  # rx rxquantr541 ** 1..1
-    set_addr $I547, rxquantr541_done
-    rx535_cur."!mark_push"(0, -1, $I547)
-  rxquantr541_loop:
-  # rx subrule $P543 subtype=capture negate=
-    rx535_cur."!cursor_pos"(rx535_pos)
-    .const 'Sub' $P543 = "149_1274022883.50471" 
-    capture_lex $P543
-    $P10 = rx535_cur.$P543()
-    unless $P10, rx535_fail
-    rx535_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx540_pos, 1
+    gt $I11, rx540_eos, rx540_fail
+    sub $I11, rx540_pos, rx540_off
+    substr $S10, rx540_tgt, $I11, 1
+    ne $S10, ":", rx540_fail
+    add rx540_pos, 1
+  # rx rxquantr546 ** 1..1
+    set_addr $I552, rxquantr546_done
+    rx540_cur."!mark_push"(0, -1, $I552)
+  rxquantr546_loop:
+  # rx subrule $P548 subtype=capture negate=
+    rx540_cur."!cursor_pos"(rx540_pos)
+    .const 'Sub' $P548 = "149_1275811476.7961" 
+    capture_lex $P548
+    $P10 = rx540_cur.$P548()
+    unless $P10, rx540_fail
+    rx540_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("n")
-    rx535_pos = $P10."pos"()
-    (rx535_rep) = rx535_cur."!mark_commit"($I547)
-  rxquantr541_done:
+    rx540_pos = $P10."pos"()
+    (rx540_rep) = rx540_cur."!mark_commit"($I552)
+  rxquantr546_done:
   # rx subrule "mod_ident" subtype=capture negate=
-    rx535_cur."!cursor_pos"(rx535_pos)
-    $P10 = rx535_cur."mod_ident"()
-    unless $P10, rx535_fail
-    rx535_cur."!mark_push"(0, -1, 0, $P10)
+    rx540_cur."!cursor_pos"(rx540_pos)
+    $P10 = rx540_cur."mod_ident"()
+    unless $P10, rx540_fail
+    rx540_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("mod_ident")
-    rx535_pos = $P10."pos"()
+    rx540_pos = $P10."pos"()
   # rxanchor rwb
-    le rx535_pos, 0, rx535_fail
-    sub $I10, rx535_pos, rx535_off
-    is_cclass $I11, 8192, rx535_tgt, $I10
-    if $I11, rx535_fail
+    le rx540_pos, 0, rx540_fail
+    sub $I10, rx540_pos, rx540_off
+    is_cclass $I11, 8192, rx540_tgt, $I10
+    if $I11, rx540_fail
     dec $I10
-    is_cclass $I11, 8192, rx535_tgt, $I10
-    unless $I11, rx535_fail
-    goto alt540_end
-  alt540_1:
+    is_cclass $I11, 8192, rx540_tgt, $I10
+    unless $I11, rx540_fail
+    goto alt545_end
+  alt545_1:
 .annotate 'line', 177
   # rx literal  ":"
-    add $I11, rx535_pos, 1
-    gt $I11, rx535_eos, rx535_fail
-    sub $I11, rx535_pos, rx535_off
-    substr $S10, rx535_tgt, $I11, 1
-    ne $S10, ":", rx535_fail
-    add rx535_pos, 1
+    add $I11, rx540_pos, 1
+    gt $I11, rx540_eos, rx540_fail
+    sub $I11, rx540_pos, rx540_off
+    substr $S10, rx540_tgt, $I11, 1
+    ne $S10, ":", rx540_fail
+    add rx540_pos, 1
   # rx subrule "mod_ident" subtype=capture negate=
-    rx535_cur."!cursor_pos"(rx535_pos)
-    $P10 = rx535_cur."mod_ident"()
-    unless $P10, rx535_fail
-    rx535_cur."!mark_push"(0, -1, 0, $P10)
+    rx540_cur."!cursor_pos"(rx540_pos)
+    $P10 = rx540_cur."mod_ident"()
+    unless $P10, rx540_fail
+    rx540_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("mod_ident")
-    rx535_pos = $P10."pos"()
-  # rx rxquantr548 ** 0..1
-    set_addr $I550, rxquantr548_done
-    rx535_cur."!mark_push"(0, rx535_pos, $I550)
-  rxquantr548_loop:
+    rx540_pos = $P10."pos"()
+  # rx rxquantr553 ** 0..1
+    set_addr $I555, rxquantr553_done
+    rx540_cur."!mark_push"(0, rx540_pos, $I555)
+  rxquantr553_loop:
   # rx literal  "("
-    add $I11, rx535_pos, 1
-    gt $I11, rx535_eos, rx535_fail
-    sub $I11, rx535_pos, rx535_off
-    substr $S10, rx535_tgt, $I11, 1
-    ne $S10, "(", rx535_fail
-    add rx535_pos, 1
+    add $I11, rx540_pos, 1
+    gt $I11, rx540_eos, rx540_fail
+    sub $I11, rx540_pos, rx540_off
+    substr $S10, rx540_tgt, $I11, 1
+    ne $S10, "(", rx540_fail
+    add rx540_pos, 1
   # rx subcapture "n"
-    set_addr $I10, rxcap_549_fail
-    rx535_cur."!mark_push"(0, rx535_pos, $I10)
+    set_addr $I10, rxcap_554_fail
+    rx540_cur."!mark_push"(0, rx540_pos, $I10)
   # rx charclass_q d r 1..-1
-    sub $I10, rx535_pos, rx535_off
-    find_not_cclass $I11, 8, rx535_tgt, $I10, rx535_eos
+    sub $I10, rx540_pos, rx540_off
+    find_not_cclass $I11, 8, rx540_tgt, $I10, rx540_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx535_fail
-    add rx535_pos, rx535_off, $I11
-    set_addr $I10, rxcap_549_fail
-    ($I12, $I11) = rx535_cur."!mark_peek"($I10)
-    rx535_cur."!cursor_pos"($I11)
-    ($P10) = rx535_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx535_pos, "")
-    rx535_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx540_fail
+    add rx540_pos, rx540_off, $I11
+    set_addr $I10, rxcap_554_fail
+    ($I12, $I11) = rx540_cur."!mark_peek"($I10)
+    rx540_cur."!cursor_pos"($I11)
+    ($P10) = rx540_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx540_pos, "")
+    rx540_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("n")
-    goto rxcap_549_done
-  rxcap_549_fail:
-    goto rx535_fail
-  rxcap_549_done:
+    goto rxcap_554_done
+  rxcap_554_fail:
+    goto rx540_fail
+  rxcap_554_done:
   # rx literal  ")"
-    add $I11, rx535_pos, 1
-    gt $I11, rx535_eos, rx535_fail
-    sub $I11, rx535_pos, rx535_off
-    substr $S10, rx535_tgt, $I11, 1
-    ne $S10, ")", rx535_fail
-    add rx535_pos, 1
-    (rx535_rep) = rx535_cur."!mark_commit"($I550)
-  rxquantr548_done:
-  alt540_end:
+    add $I11, rx540_pos, 1
+    gt $I11, rx540_eos, rx540_fail
+    sub $I11, rx540_pos, rx540_off
+    substr $S10, rx540_tgt, $I11, 1
+    ne $S10, ")", rx540_fail
+    add rx540_pos, 1
+    (rx540_rep) = rx540_cur."!mark_commit"($I555)
+  rxquantr553_done:
+  alt545_end:
 .annotate 'line', 174
   # rx pass
-    rx535_cur."!cursor_pass"(rx535_pos, "mod_internal")
-    rx535_cur."!cursor_debug"("PASS  ", "mod_internal", " at pos=", rx535_pos)
-    .return (rx535_cur)
-  rx535_fail:
+    rx540_cur."!cursor_pass"(rx540_pos, "mod_internal")
+    rx540_cur."!cursor_debug"("PASS  ", "mod_internal", " at pos=", rx540_pos)
+    .return (rx540_cur)
+  rx540_fail:
 .annotate 'line', 3
-    (rx535_rep, rx535_pos, $I10, $P10) = rx535_cur."!mark_fail"(0)
-    lt rx535_pos, -1, rx535_done
-    eq rx535_pos, -1, rx535_fail
+    (rx540_rep, rx540_pos, $I10, $P10) = rx540_cur."!mark_fail"(0)
+    lt rx540_pos, -1, rx540_done
+    eq rx540_pos, -1, rx540_fail
     jump $I10
-  rx535_done:
-    rx535_cur."!cursor_fail"()
-    rx535_cur."!cursor_debug"("FAIL  ", "mod_internal")
-    .return (rx535_cur)
+  rx540_done:
+    rx540_cur."!cursor_fail"()
+    rx540_cur."!cursor_debug"("FAIL  ", "mod_internal")
+    .return (rx540_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_internal"  :subid("148_1274022883.50471") :method
+.sub "!PREFIX__mod_internal"  :subid("148_1275811476.7961") :method
 .annotate 'line', 3
-    $P537 = self."!PREFIX__!subrule"("mod_ident", ":")
-    new $P538, "ResizablePMCArray"
-    push $P538, $P537
-    push $P538, ":"
-    .return ($P538)
+    $P542 = self."!PREFIX__!subrule"("mod_ident", ":")
+    new $P543, "ResizablePMCArray"
+    push $P543, $P542
+    push $P543, ":"
+    .return ($P543)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block542"  :anon :subid("149_1274022883.50471") :method :outer("147_1274022883.50471")
+.sub "_block547"  :anon :subid("149_1275811476.7961") :method :outer("147_1275811476.7961")
 .annotate 'line', 176
-    .local string rx544_tgt
-    .local int rx544_pos
-    .local int rx544_off
-    .local int rx544_eos
-    .local int rx544_rep
-    .local pmc rx544_cur
-    (rx544_cur, rx544_pos, rx544_tgt) = self."!cursor_start"()
-    rx544_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx544_cur
-    .local pmc match
-    .lex "$/", match
-    length rx544_eos, rx544_tgt
-    set rx544_off, 0
-    lt rx544_pos, 2, rx544_start
-    sub rx544_off, rx544_pos, 1
-    substr rx544_tgt, rx544_tgt, rx544_off
-  rx544_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan545_done
-    goto rxscan545_scan
-  rxscan545_loop:
-    ($P10) = rx544_cur."from"()
-    inc $P10
-    set rx544_pos, $P10
-    ge rx544_pos, rx544_eos, rxscan545_done
-  rxscan545_scan:
-    set_addr $I10, rxscan545_loop
-    rx544_cur."!mark_push"(0, rx544_pos, $I10)
-  rxscan545_done:
-  alt546_0:
-    set_addr $I10, alt546_1
-    rx544_cur."!mark_push"(0, rx544_pos, $I10)
+    .local string rx549_tgt
+    .local int rx549_pos
+    .local int rx549_off
+    .local int rx549_eos
+    .local int rx549_rep
+    .local pmc rx549_cur
+    (rx549_cur, rx549_pos, rx549_tgt) = self."!cursor_start"()
+    rx549_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx549_cur
+    .local pmc match
+    .lex "$/", match
+    length rx549_eos, rx549_tgt
+    gt rx549_pos, rx549_eos, rx549_done
+    set rx549_off, 0
+    lt rx549_pos, 2, rx549_start
+    sub rx549_off, rx549_pos, 1
+    substr rx549_tgt, rx549_tgt, rx549_off
+  rx549_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan550_done
+    goto rxscan550_scan
+  rxscan550_loop:
+    ($P10) = rx549_cur."from"()
+    inc $P10
+    set rx549_pos, $P10
+    ge rx549_pos, rx549_eos, rxscan550_done
+  rxscan550_scan:
+    set_addr $I10, rxscan550_loop
+    rx549_cur."!mark_push"(0, rx549_pos, $I10)
+  rxscan550_done:
+  alt551_0:
+    set_addr $I10, alt551_1
+    rx549_cur."!mark_push"(0, rx549_pos, $I10)
   # rx literal  "!"
-    add $I11, rx544_pos, 1
-    gt $I11, rx544_eos, rx544_fail
-    sub $I11, rx544_pos, rx544_off
-    substr $S10, rx544_tgt, $I11, 1
-    ne $S10, "!", rx544_fail
-    add rx544_pos, 1
-    goto alt546_end
-  alt546_1:
+    add $I11, rx549_pos, 1
+    gt $I11, rx549_eos, rx549_fail
+    sub $I11, rx549_pos, rx549_off
+    substr $S10, rx549_tgt, $I11, 1
+    ne $S10, "!", rx549_fail
+    add rx549_pos, 1
+    goto alt551_end
+  alt551_1:
   # rx charclass_q d r 1..-1
-    sub $I10, rx544_pos, rx544_off
-    find_not_cclass $I11, 8, rx544_tgt, $I10, rx544_eos
+    sub $I10, rx549_pos, rx549_off
+    find_not_cclass $I11, 8, rx549_tgt, $I10, rx549_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx544_fail
-    add rx544_pos, rx544_off, $I11
-  alt546_end:
+    lt $I11, $I12, rx549_fail
+    add rx549_pos, rx549_off, $I11
+  alt551_end:
   # rx pass
-    rx544_cur."!cursor_pass"(rx544_pos, "")
-    rx544_cur."!cursor_debug"("PASS  ", "", " at pos=", rx544_pos)
-    .return (rx544_cur)
-  rx544_fail:
-    (rx544_rep, rx544_pos, $I10, $P10) = rx544_cur."!mark_fail"(0)
-    lt rx544_pos, -1, rx544_done
-    eq rx544_pos, -1, rx544_fail
+    rx549_cur."!cursor_pass"(rx549_pos, "")
+    rx549_cur."!cursor_debug"("PASS  ", "", " at pos=", rx549_pos)
+    .return (rx549_cur)
+  rx549_fail:
+    (rx549_rep, rx549_pos, $I10, $P10) = rx549_cur."!mark_fail"(0)
+    lt rx549_pos, -1, rx549_done
+    eq rx549_pos, -1, rx549_fail
     jump $I10
-  rx544_done:
-    rx544_cur."!cursor_fail"()
-    rx544_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx544_cur)
+  rx549_done:
+    rx549_cur."!cursor_fail"()
+    rx549_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx549_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident"  :subid("150_1274022883.50471") :method
+.sub "mod_ident"  :subid("150_1275811476.7961") :method
 .annotate 'line', 181
-    $P552 = self."!protoregex"("mod_ident")
-    .return ($P552)
+    $P557 = self."!protoregex"("mod_ident")
+    .return ($P557)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident"  :subid("151_1274022883.50471") :method
+.sub "!PREFIX__mod_ident"  :subid("151_1275811476.7961") :method
 .annotate 'line', 181
-    $P554 = self."!PREFIX__!protoregex"("mod_ident")
-    .return ($P554)
+    $P559 = self."!PREFIX__!protoregex"("mod_ident")
+    .return ($P559)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<ignorecase>"  :subid("152_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "mod_ident:sym<ignorecase>"  :subid("152_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx556_tgt
-    .local int rx556_pos
-    .local int rx556_off
-    .local int rx556_eos
-    .local int rx556_rep
-    .local pmc rx556_cur
-    (rx556_cur, rx556_pos, rx556_tgt) = self."!cursor_start"()
-    rx556_cur."!cursor_debug"("START ", "mod_ident:sym<ignorecase>")
-    .lex unicode:"$\x{a2}", rx556_cur
-    .local pmc match
-    .lex "$/", match
-    length rx556_eos, rx556_tgt
-    set rx556_off, 0
-    lt rx556_pos, 2, rx556_start
-    sub rx556_off, rx556_pos, 1
-    substr rx556_tgt, rx556_tgt, rx556_off
-  rx556_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan559_done
-    goto rxscan559_scan
-  rxscan559_loop:
-    ($P10) = rx556_cur."from"()
-    inc $P10
-    set rx556_pos, $P10
-    ge rx556_pos, rx556_eos, rxscan559_done
-  rxscan559_scan:
-    set_addr $I10, rxscan559_loop
-    rx556_cur."!mark_push"(0, rx556_pos, $I10)
-  rxscan559_done:
+    .local string rx561_tgt
+    .local int rx561_pos
+    .local int rx561_off
+    .local int rx561_eos
+    .local int rx561_rep
+    .local pmc rx561_cur
+    (rx561_cur, rx561_pos, rx561_tgt) = self."!cursor_start"()
+    rx561_cur."!cursor_debug"("START ", "mod_ident:sym<ignorecase>")
+    .lex unicode:"$\x{a2}", rx561_cur
+    .local pmc match
+    .lex "$/", match
+    length rx561_eos, rx561_tgt
+    gt rx561_pos, rx561_eos, rx561_done
+    set rx561_off, 0
+    lt rx561_pos, 2, rx561_start
+    sub rx561_off, rx561_pos, 1
+    substr rx561_tgt, rx561_tgt, rx561_off
+  rx561_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan564_done
+    goto rxscan564_scan
+  rxscan564_loop:
+    ($P10) = rx561_cur."from"()
+    inc $P10
+    set rx561_pos, $P10
+    ge rx561_pos, rx561_eos, rxscan564_done
+  rxscan564_scan:
+    set_addr $I10, rxscan564_loop
+    rx561_cur."!mark_push"(0, rx561_pos, $I10)
+  rxscan564_done:
 .annotate 'line', 182
   # rx subcapture "sym"
-    set_addr $I10, rxcap_560_fail
-    rx556_cur."!mark_push"(0, rx556_pos, $I10)
+    set_addr $I10, rxcap_565_fail
+    rx561_cur."!mark_push"(0, rx561_pos, $I10)
   # rx literal  "i"
-    add $I11, rx556_pos, 1
-    gt $I11, rx556_eos, rx556_fail
-    sub $I11, rx556_pos, rx556_off
-    substr $S10, rx556_tgt, $I11, 1
-    ne $S10, "i", rx556_fail
-    add rx556_pos, 1
-    set_addr $I10, rxcap_560_fail
-    ($I12, $I11) = rx556_cur."!mark_peek"($I10)
-    rx556_cur."!cursor_pos"($I11)
-    ($P10) = rx556_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx556_pos, "")
-    rx556_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx561_pos, 1
+    gt $I11, rx561_eos, rx561_fail
+    sub $I11, rx561_pos, rx561_off
+    substr $S10, rx561_tgt, $I11, 1
+    ne $S10, "i", rx561_fail
+    add rx561_pos, 1
+    set_addr $I10, rxcap_565_fail
+    ($I12, $I11) = rx561_cur."!mark_peek"($I10)
+    rx561_cur."!cursor_pos"($I11)
+    ($P10) = rx561_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx561_pos, "")
+    rx561_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_560_done
-  rxcap_560_fail:
-    goto rx556_fail
-  rxcap_560_done:
-  # rx rxquantr561 ** 0..1
-    set_addr $I562, rxquantr561_done
-    rx556_cur."!mark_push"(0, rx556_pos, $I562)
-  rxquantr561_loop:
+    goto rxcap_565_done
+  rxcap_565_fail:
+    goto rx561_fail
+  rxcap_565_done:
+  # rx rxquantr566 ** 0..1
+    set_addr $I567, rxquantr566_done
+    rx561_cur."!mark_push"(0, rx561_pos, $I567)
+  rxquantr566_loop:
   # rx literal  "gnorecase"
-    add $I11, rx556_pos, 9
-    gt $I11, rx556_eos, rx556_fail
-    sub $I11, rx556_pos, rx556_off
-    substr $S10, rx556_tgt, $I11, 9
-    ne $S10, "gnorecase", rx556_fail
-    add rx556_pos, 9
-    (rx556_rep) = rx556_cur."!mark_commit"($I562)
-  rxquantr561_done:
+    add $I11, rx561_pos, 9
+    gt $I11, rx561_eos, rx561_fail
+    sub $I11, rx561_pos, rx561_off
+    substr $S10, rx561_tgt, $I11, 9
+    ne $S10, "gnorecase", rx561_fail
+    add rx561_pos, 9
+    (rx561_rep) = rx561_cur."!mark_commit"($I567)
+  rxquantr566_done:
   # rx pass
-    rx556_cur."!cursor_pass"(rx556_pos, "mod_ident:sym<ignorecase>")
-    rx556_cur."!cursor_debug"("PASS  ", "mod_ident:sym<ignorecase>", " at pos=", rx556_pos)
-    .return (rx556_cur)
-  rx556_fail:
+    rx561_cur."!cursor_pass"(rx561_pos, "mod_ident:sym<ignorecase>")
+    rx561_cur."!cursor_debug"("PASS  ", "mod_ident:sym<ignorecase>", " at pos=", rx561_pos)
+    .return (rx561_cur)
+  rx561_fail:
 .annotate 'line', 3
-    (rx556_rep, rx556_pos, $I10, $P10) = rx556_cur."!mark_fail"(0)
-    lt rx556_pos, -1, rx556_done
-    eq rx556_pos, -1, rx556_fail
+    (rx561_rep, rx561_pos, $I10, $P10) = rx561_cur."!mark_fail"(0)
+    lt rx561_pos, -1, rx561_done
+    eq rx561_pos, -1, rx561_fail
     jump $I10
-  rx556_done:
-    rx556_cur."!cursor_fail"()
-    rx556_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<ignorecase>")
-    .return (rx556_cur)
+  rx561_done:
+    rx561_cur."!cursor_fail"()
+    rx561_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<ignorecase>")
+    .return (rx561_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<ignorecase>"  :subid("153_1274022883.50471") :method
+.sub "!PREFIX__mod_ident:sym<ignorecase>"  :subid("153_1275811476.7961") :method
 .annotate 'line', 3
-    new $P558, "ResizablePMCArray"
-    push $P558, "i"
-    .return ($P558)
+    new $P563, "ResizablePMCArray"
+    push $P563, "i"
+    .return ($P563)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<ratchet>"  :subid("154_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "mod_ident:sym<ratchet>"  :subid("154_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx564_tgt
-    .local int rx564_pos
-    .local int rx564_off
-    .local int rx564_eos
-    .local int rx564_rep
-    .local pmc rx564_cur
-    (rx564_cur, rx564_pos, rx564_tgt) = self."!cursor_start"()
-    rx564_cur."!cursor_debug"("START ", "mod_ident:sym<ratchet>")
-    .lex unicode:"$\x{a2}", rx564_cur
+    .local string rx569_tgt
+    .local int rx569_pos
+    .local int rx569_off
+    .local int rx569_eos
+    .local int rx569_rep
+    .local pmc rx569_cur
+    (rx569_cur, rx569_pos, rx569_tgt) = self."!cursor_start"()
+    rx569_cur."!cursor_debug"("START ", "mod_ident:sym<ratchet>")
+    .lex unicode:"$\x{a2}", rx569_cur
     .local pmc match
     .lex "$/", match
-    length rx564_eos, rx564_tgt
-    set rx564_off, 0
-    lt rx564_pos, 2, rx564_start
-    sub rx564_off, rx564_pos, 1
-    substr rx564_tgt, rx564_tgt, rx564_off
-  rx564_start:
+    length rx569_eos, rx569_tgt
+    gt rx569_pos, rx569_eos, rx569_done
+    set rx569_off, 0
+    lt rx569_pos, 2, rx569_start
+    sub rx569_off, rx569_pos, 1
+    substr rx569_tgt, rx569_tgt, rx569_off
+  rx569_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan567_done
-    goto rxscan567_scan
-  rxscan567_loop:
-    ($P10) = rx564_cur."from"()
+    ne $I10, -1, rxscan572_done
+    goto rxscan572_scan
+  rxscan572_loop:
+    ($P10) = rx569_cur."from"()
     inc $P10
-    set rx564_pos, $P10
-    ge rx564_pos, rx564_eos, rxscan567_done
-  rxscan567_scan:
-    set_addr $I10, rxscan567_loop
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
-  rxscan567_done:
+    set rx569_pos, $P10
+    ge rx569_pos, rx569_eos, rxscan572_done
+  rxscan572_scan:
+    set_addr $I10, rxscan572_loop
+    rx569_cur."!mark_push"(0, rx569_pos, $I10)
+  rxscan572_done:
 .annotate 'line', 183
   # rx subcapture "sym"
-    set_addr $I10, rxcap_568_fail
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
+    set_addr $I10, rxcap_573_fail
+    rx569_cur."!mark_push"(0, rx569_pos, $I10)
   # rx literal  "r"
-    add $I11, rx564_pos, 1
-    gt $I11, rx564_eos, rx564_fail
-    sub $I11, rx564_pos, rx564_off
-    substr $S10, rx564_tgt, $I11, 1
-    ne $S10, "r", rx564_fail
-    add rx564_pos, 1
-    set_addr $I10, rxcap_568_fail
-    ($I12, $I11) = rx564_cur."!mark_peek"($I10)
-    rx564_cur."!cursor_pos"($I11)
-    ($P10) = rx564_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx564_pos, "")
-    rx564_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx569_pos, 1
+    gt $I11, rx569_eos, rx569_fail
+    sub $I11, rx569_pos, rx569_off
+    substr $S10, rx569_tgt, $I11, 1
+    ne $S10, "r", rx569_fail
+    add rx569_pos, 1
+    set_addr $I10, rxcap_573_fail
+    ($I12, $I11) = rx569_cur."!mark_peek"($I10)
+    rx569_cur."!cursor_pos"($I11)
+    ($P10) = rx569_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx569_pos, "")
+    rx569_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_568_done
-  rxcap_568_fail:
-    goto rx564_fail
-  rxcap_568_done:
-  # rx rxquantr569 ** 0..1
-    set_addr $I570, rxquantr569_done
-    rx564_cur."!mark_push"(0, rx564_pos, $I570)
-  rxquantr569_loop:
+    goto rxcap_573_done
+  rxcap_573_fail:
+    goto rx569_fail
+  rxcap_573_done:
+  # rx rxquantr574 ** 0..1
+    set_addr $I575, rxquantr574_done
+    rx569_cur."!mark_push"(0, rx569_pos, $I575)
+  rxquantr574_loop:
   # rx literal  "atchet"
-    add $I11, rx564_pos, 6
-    gt $I11, rx564_eos, rx564_fail
-    sub $I11, rx564_pos, rx564_off
-    substr $S10, rx564_tgt, $I11, 6
-    ne $S10, "atchet", rx564_fail
-    add rx564_pos, 6
-    (rx564_rep) = rx564_cur."!mark_commit"($I570)
-  rxquantr569_done:
+    add $I11, rx569_pos, 6
+    gt $I11, rx569_eos, rx569_fail
+    sub $I11, rx569_pos, rx569_off
+    substr $S10, rx569_tgt, $I11, 6
+    ne $S10, "atchet", rx569_fail
+    add rx569_pos, 6
+    (rx569_rep) = rx569_cur."!mark_commit"($I575)
+  rxquantr574_done:
   # rx pass
-    rx564_cur."!cursor_pass"(rx564_pos, "mod_ident:sym<ratchet>")
-    rx564_cur."!cursor_debug"("PASS  ", "mod_ident:sym<ratchet>", " at pos=", rx564_pos)
-    .return (rx564_cur)
-  rx564_fail:
+    rx569_cur."!cursor_pass"(rx569_pos, "mod_ident:sym<ratchet>")
+    rx569_cur."!cursor_debug"("PASS  ", "mod_ident:sym<ratchet>", " at pos=", rx569_pos)
+    .return (rx569_cur)
+  rx569_fail:
 .annotate 'line', 3
-    (rx564_rep, rx564_pos, $I10, $P10) = rx564_cur."!mark_fail"(0)
-    lt rx564_pos, -1, rx564_done
-    eq rx564_pos, -1, rx564_fail
+    (rx569_rep, rx569_pos, $I10, $P10) = rx569_cur."!mark_fail"(0)
+    lt rx569_pos, -1, rx569_done
+    eq rx569_pos, -1, rx569_fail
     jump $I10
-  rx564_done:
-    rx564_cur."!cursor_fail"()
-    rx564_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<ratchet>")
-    .return (rx564_cur)
+  rx569_done:
+    rx569_cur."!cursor_fail"()
+    rx569_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<ratchet>")
+    .return (rx569_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<ratchet>"  :subid("155_1274022883.50471") :method
+.sub "!PREFIX__mod_ident:sym<ratchet>"  :subid("155_1275811476.7961") :method
 .annotate 'line', 3
-    new $P566, "ResizablePMCArray"
-    push $P566, "r"
-    .return ($P566)
+    new $P571, "ResizablePMCArray"
+    push $P571, "r"
+    .return ($P571)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<sigspace>"  :subid("156_1274022883.50471") :method :outer("11_1274022883.50471")
+.sub "mod_ident:sym<sigspace>"  :subid("156_1275811476.7961") :method :outer("11_1275811476.7961")
 .annotate 'line', 3
-    .local string rx572_tgt
-    .local int rx572_pos
-    .local int rx572_off
-    .local int rx572_eos
-    .local int rx572_rep
-    .local pmc rx572_cur
-    (rx572_cur, rx572_pos, rx572_tgt) = self."!cursor_start"()
-    rx572_cur."!cursor_debug"("START ", "mod_ident:sym<sigspace>")
-    .lex unicode:"$\x{a2}", rx572_cur
-    .local pmc match
-    .lex "$/", match
-    length rx572_eos, rx572_tgt
-    set rx572_off, 0
-    lt rx572_pos, 2, rx572_start
-    sub rx572_off, rx572_pos, 1
-    substr rx572_tgt, rx572_tgt, rx572_off
-  rx572_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan575_done
-    goto rxscan575_scan
-  rxscan575_loop:
-    ($P10) = rx572_cur."from"()
-    inc $P10
-    set rx572_pos, $P10
-    ge rx572_pos, rx572_eos, rxscan575_done
-  rxscan575_scan:
-    set_addr $I10, rxscan575_loop
-    rx572_cur."!mark_push"(0, rx572_pos, $I10)
-  rxscan575_done:
+    .local string rx577_tgt
+    .local int rx577_pos
+    .local int rx577_off
+    .local int rx577_eos
+    .local int rx577_rep
+    .local pmc rx577_cur
+    (rx577_cur, rx577_pos, rx577_tgt) = self."!cursor_start"()
+    rx577_cur."!cursor_debug"("START ", "mod_ident:sym<sigspace>")
+    .lex unicode:"$\x{a2}", rx577_cur
+    .local pmc match
+    .lex "$/", match
+    length rx577_eos, rx577_tgt
+    gt rx577_pos, rx577_eos, rx577_done
+    set rx577_off, 0
+    lt rx577_pos, 2, rx577_start
+    sub rx577_off, rx577_pos, 1
+    substr rx577_tgt, rx577_tgt, rx577_off
+  rx577_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan580_done
+    goto rxscan580_scan
+  rxscan580_loop:
+    ($P10) = rx577_cur."from"()
+    inc $P10
+    set rx577_pos, $P10
+    ge rx577_pos, rx577_eos, rxscan580_done
+  rxscan580_scan:
+    set_addr $I10, rxscan580_loop
+    rx577_cur."!mark_push"(0, rx577_pos, $I10)
+  rxscan580_done:
 .annotate 'line', 184
   # rx subcapture "sym"
-    set_addr $I10, rxcap_576_fail
-    rx572_cur."!mark_push"(0, rx572_pos, $I10)
+    set_addr $I10, rxcap_581_fail
+    rx577_cur."!mark_push"(0, rx577_pos, $I10)
   # rx literal  "s"
-    add $I11, rx572_pos, 1
-    gt $I11, rx572_eos, rx572_fail
-    sub $I11, rx572_pos, rx572_off
-    substr $S10, rx572_tgt, $I11, 1
-    ne $S10, "s", rx572_fail
-    add rx572_pos, 1
-    set_addr $I10, rxcap_576_fail
-    ($I12, $I11) = rx572_cur."!mark_peek"($I10)
-    rx572_cur."!cursor_pos"($I11)
-    ($P10) = rx572_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx572_pos, "")
-    rx572_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx577_pos, 1
+    gt $I11, rx577_eos, rx577_fail
+    sub $I11, rx577_pos, rx577_off
+    substr $S10, rx577_tgt, $I11, 1
+    ne $S10, "s", rx577_fail
+    add rx577_pos, 1
+    set_addr $I10, rxcap_581_fail
+    ($I12, $I11) = rx577_cur."!mark_peek"($I10)
+    rx577_cur."!cursor_pos"($I11)
+    ($P10) = rx577_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx577_pos, "")
+    rx577_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_576_done
-  rxcap_576_fail:
-    goto rx572_fail
-  rxcap_576_done:
-  # rx rxquantr577 ** 0..1
-    set_addr $I578, rxquantr577_done
-    rx572_cur."!mark_push"(0, rx572_pos, $I578)
-  rxquantr577_loop:
+    goto rxcap_581_done
+  rxcap_581_fail:
+    goto rx577_fail
+  rxcap_581_done:
+  # rx rxquantr582 ** 0..1
+    set_addr $I583, rxquantr582_done
+    rx577_cur."!mark_push"(0, rx577_pos, $I583)
+  rxquantr582_loop:
   # rx literal  "igspace"
-    add $I11, rx572_pos, 7
-    gt $I11, rx572_eos, rx572_fail
-    sub $I11, rx572_pos, rx572_off
-    substr $S10, rx572_tgt, $I11, 7
-    ne $S10, "igspace", rx572_fail
-    add rx572_pos, 7
-    (rx572_rep) = rx572_cur."!mark_commit"($I578)
-  rxquantr577_done:
+    add $I11, rx577_pos, 7
+    gt $I11, rx577_eos, rx577_fail
+    sub $I11, rx577_pos, rx577_off
+    substr $S10, rx577_tgt, $I11, 7
+    ne $S10, "igspace", rx577_fail
+    add rx577_pos, 7
+    (rx577_rep) = rx577_cur."!mark_commit"($I583)
+  rxquantr582_done:
   # rx pass
-    rx572_cur."!cursor_pass"(rx572_pos, "mod_ident:sym<sigspace>")
-    rx572_cur."!cursor_debug"("PASS  ", "mod_ident:sym<sigspace>", " at pos=", rx572_pos)
-    .return (rx572_cur)
-  rx572_fail:
+    rx577_cur."!cursor_pass"(rx577_pos, "mod_ident:sym<sigspace>")
+    rx577_cur."!cursor_debug"("PASS  ", "mod_ident:sym<sigspace>", " at pos=", rx577_pos)
+    .return (rx577_cur)
+  rx577_fail:
 .annotate 'line', 3
-    (rx572_rep, rx572_pos, $I10, $P10) = rx572_cur."!mark_fail"(0)
-    lt rx572_pos, -1, rx572_done
-    eq rx572_pos, -1, rx572_fail
+    (rx577_rep, rx577_pos, $I10, $P10) = rx577_cur."!mark_fail"(0)
+    lt rx577_pos, -1, rx577_done
+    eq rx577_pos, -1, rx577_fail
     jump $I10
-  rx572_done:
-    rx572_cur."!cursor_fail"()
-    rx572_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<sigspace>")
-    .return (rx572_cur)
+  rx577_done:
+    rx577_cur."!cursor_fail"()
+    rx577_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<sigspace>")
+    .return (rx577_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<sigspace>"  :subid("157_1274022883.50471") :method
+.sub "!PREFIX__mod_ident:sym<sigspace>"  :subid("157_1275811476.7961") :method
 .annotate 'line', 3
-    new $P574, "ResizablePMCArray"
-    push $P574, "s"
-    .return ($P574)
+    new $P579, "ResizablePMCArray"
+    push $P579, "s"
+    .return ($P579)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block579" :load :anon :subid("158_1274022883.50471")
+.sub "_block584" :load :anon :subid("158_1275811476.7961")
 .annotate 'line', 3
-    .const 'Sub' $P581 = "11_1274022883.50471" 
-    $P582 = $P581()
-    .return ($P582)
+    .const 'Sub' $P586 = "11_1275811476.7961" 
+    $P587 = $P586()
+    .return ($P587)
 .end
 
 
 .namespace []
-.sub "_block584" :load :anon :subid("159_1274022883.50471")
+.sub "_block589" :load :anon :subid("159_1275811476.7961")
 .annotate 'line', 1
-    .const 'Sub' $P586 = "10_1274022883.50471" 
-    $P587 = $P586()
-    .return ($P587)
+    .const 'Sub' $P591 = "10_1275811476.7961" 
+    $P592 = $P591()
+    .return ($P592)
 .end
 
 ### .include 'gen/p6regex-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1274022889.08438")
+.sub "_block11"  :anon :subid("10_1275811482.3686")
 .annotate 'line', 0
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     capture_lex $P14
+.annotate 'line', 1
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
 .annotate 'line', 4
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     capture_lex $P14
-    $P1572 = $P14()
+    $P1599 = $P14()
 .annotate 'line', 1
-    .return ($P1572)
-    .const 'Sub' $P1574 = "90_1274022889.08438" 
-    .return ($P1574)
+    .return ($P1599)
+    .const 'Sub' $P1601 = "91_1275811482.3686" 
+    .return ($P1601)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post91") :outer("10_1274022889.08438")
+.sub "" :load :init :subid("post92") :outer("10_1275811482.3686")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1274022889.08438" 
+    .const 'Sub' $P12 = "10_1275811482.3686" 
     .local pmc block
     set block, $P12
-    $P1577 = get_root_global ["parrot"], "P6metaclass"
-    $P1577."new_class"("Regex::P6Regex::Actions", "HLL::Actions" :named("parent"))
+    $P1604 = get_root_global ["parrot"], "P6metaclass"
+    $P1604."new_class"("Regex::P6Regex::Actions", "HLL::Actions" :named("parent"))
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block13"  :subid("11_1274022889.08438") :outer("10_1274022889.08438")
+.sub "_block13"  :subid("11_1275811482.3686") :outer("10_1275811482.3686")
 .annotate 'line', 4
-    .const 'Sub' $P1534 = "88_1274022889.08438" 
-    capture_lex $P1534
-    .const 'Sub' $P1465 = "84_1274022889.08438" 
-    capture_lex $P1465
-    .const 'Sub' $P1397 = "82_1274022889.08438" 
-    capture_lex $P1397
-    .const 'Sub' $P1324 = "79_1274022889.08438" 
-    capture_lex $P1324
-    .const 'Sub' $P1310 = "78_1274022889.08438" 
-    capture_lex $P1310
-    .const 'Sub' $P1286 = "77_1274022889.08438" 
-    capture_lex $P1286
-    .const 'Sub' $P1268 = "76_1274022889.08438" 
+    .const 'Sub' $P1561 = "89_1275811482.3686" 
+    capture_lex $P1561
+    .const 'Sub' $P1492 = "85_1275811482.3686" 
+    capture_lex $P1492
+    .const 'Sub' $P1424 = "83_1275811482.3686" 
+    capture_lex $P1424
+    .const 'Sub' $P1351 = "80_1275811482.3686" 
+    capture_lex $P1351
+    .const 'Sub' $P1337 = "79_1275811482.3686" 
+    capture_lex $P1337
+    .const 'Sub' $P1313 = "78_1275811482.3686" 
+    capture_lex $P1313
+    .const 'Sub' $P1295 = "77_1275811482.3686" 
+    capture_lex $P1295
+    .const 'Sub' $P1281 = "76_1275811482.3686" 
+    capture_lex $P1281
+    .const 'Sub' $P1268 = "75_1275811482.3686" 
     capture_lex $P1268
-    .const 'Sub' $P1254 = "75_1274022889.08438" 
-    capture_lex $P1254
-    .const 'Sub' $P1241 = "74_1274022889.08438" 
-    capture_lex $P1241
-    .const 'Sub' $P1210 = "73_1274022889.08438" 
-    capture_lex $P1210
-    .const 'Sub' $P1179 = "72_1274022889.08438" 
-    capture_lex $P1179
-    .const 'Sub' $P1163 = "71_1274022889.08438" 
-    capture_lex $P1163
-    .const 'Sub' $P1147 = "70_1274022889.08438" 
-    capture_lex $P1147
-    .const 'Sub' $P1131 = "69_1274022889.08438" 
-    capture_lex $P1131
-    .const 'Sub' $P1115 = "68_1274022889.08438" 
-    capture_lex $P1115
-    .const 'Sub' $P1099 = "67_1274022889.08438" 
-    capture_lex $P1099
-    .const 'Sub' $P1083 = "66_1274022889.08438" 
-    capture_lex $P1083
-    .const 'Sub' $P1067 = "65_1274022889.08438" 
-    capture_lex $P1067
-    .const 'Sub' $P1043 = "64_1274022889.08438" 
-    capture_lex $P1043
-    .const 'Sub' $P1028 = "63_1274022889.08438" 
-    capture_lex $P1028
-    .const 'Sub' $P972 = "62_1274022889.08438" 
-    capture_lex $P972
-    .const 'Sub' $P951 = "61_1274022889.08438" 
-    capture_lex $P951
-    .const 'Sub' $P929 = "60_1274022889.08438" 
-    capture_lex $P929
-    .const 'Sub' $P919 = "59_1274022889.08438" 
-    capture_lex $P919
-    .const 'Sub' $P909 = "58_1274022889.08438" 
-    capture_lex $P909
-    .const 'Sub' $P899 = "57_1274022889.08438" 
-    capture_lex $P899
-    .const 'Sub' $P887 = "56_1274022889.08438" 
-    capture_lex $P887
-    .const 'Sub' $P875 = "55_1274022889.08438" 
-    capture_lex $P875
-    .const 'Sub' $P863 = "54_1274022889.08438" 
-    capture_lex $P863
-    .const 'Sub' $P851 = "53_1274022889.08438" 
-    capture_lex $P851
-    .const 'Sub' $P839 = "52_1274022889.08438" 
-    capture_lex $P839
-    .const 'Sub' $P827 = "51_1274022889.08438" 
-    capture_lex $P827
-    .const 'Sub' $P815 = "50_1274022889.08438" 
-    capture_lex $P815
-    .const 'Sub' $P803 = "49_1274022889.08438" 
-    capture_lex $P803
-    .const 'Sub' $P780 = "48_1274022889.08438" 
-    capture_lex $P780
-    .const 'Sub' $P757 = "47_1274022889.08438" 
-    capture_lex $P757
-    .const 'Sub' $P739 = "46_1274022889.08438" 
-    capture_lex $P739
-    .const 'Sub' $P729 = "45_1274022889.08438" 
-    capture_lex $P729
-    .const 'Sub' $P711 = "44_1274022889.08438" 
-    capture_lex $P711
-    .const 'Sub' $P664 = "43_1274022889.08438" 
-    capture_lex $P664
-    .const 'Sub' $P647 = "42_1274022889.08438" 
-    capture_lex $P647
-    .const 'Sub' $P632 = "41_1274022889.08438" 
-    capture_lex $P632
-    .const 'Sub' $P617 = "40_1274022889.08438" 
-    capture_lex $P617
-    .const 'Sub' $P591 = "39_1274022889.08438" 
-    capture_lex $P591
-    .const 'Sub' $P541 = "37_1274022889.08438" 
+    .const 'Sub' $P1237 = "74_1275811482.3686" 
+    capture_lex $P1237
+    .const 'Sub' $P1206 = "73_1275811482.3686" 
+    capture_lex $P1206
+    .const 'Sub' $P1190 = "72_1275811482.3686" 
+    capture_lex $P1190
+    .const 'Sub' $P1174 = "71_1275811482.3686" 
+    capture_lex $P1174
+    .const 'Sub' $P1158 = "70_1275811482.3686" 
+    capture_lex $P1158
+    .const 'Sub' $P1142 = "69_1275811482.3686" 
+    capture_lex $P1142
+    .const 'Sub' $P1126 = "68_1275811482.3686" 
+    capture_lex $P1126
+    .const 'Sub' $P1110 = "67_1275811482.3686" 
+    capture_lex $P1110
+    .const 'Sub' $P1094 = "66_1275811482.3686" 
+    capture_lex $P1094
+    .const 'Sub' $P1070 = "65_1275811482.3686" 
+    capture_lex $P1070
+    .const 'Sub' $P1055 = "64_1275811482.3686" 
+    capture_lex $P1055
+    .const 'Sub' $P999 = "63_1275811482.3686" 
+    capture_lex $P999
+    .const 'Sub' $P978 = "62_1275811482.3686" 
+    capture_lex $P978
+    .const 'Sub' $P956 = "61_1275811482.3686" 
+    capture_lex $P956
+    .const 'Sub' $P946 = "60_1275811482.3686" 
+    capture_lex $P946
+    .const 'Sub' $P936 = "59_1275811482.3686" 
+    capture_lex $P936
+    .const 'Sub' $P926 = "58_1275811482.3686" 
+    capture_lex $P926
+    .const 'Sub' $P914 = "57_1275811482.3686" 
+    capture_lex $P914
+    .const 'Sub' $P902 = "56_1275811482.3686" 
+    capture_lex $P902
+    .const 'Sub' $P890 = "55_1275811482.3686" 
+    capture_lex $P890
+    .const 'Sub' $P878 = "54_1275811482.3686" 
+    capture_lex $P878
+    .const 'Sub' $P866 = "53_1275811482.3686" 
+    capture_lex $P866
+    .const 'Sub' $P854 = "52_1275811482.3686" 
+    capture_lex $P854
+    .const 'Sub' $P842 = "51_1275811482.3686" 
+    capture_lex $P842
+    .const 'Sub' $P830 = "50_1275811482.3686" 
+    capture_lex $P830
+    .const 'Sub' $P807 = "49_1275811482.3686" 
+    capture_lex $P807
+    .const 'Sub' $P784 = "48_1275811482.3686" 
+    capture_lex $P784
+    .const 'Sub' $P766 = "47_1275811482.3686" 
+    capture_lex $P766
+    .const 'Sub' $P756 = "46_1275811482.3686" 
+    capture_lex $P756
+    .const 'Sub' $P738 = "45_1275811482.3686" 
+    capture_lex $P738
+    .const 'Sub' $P665 = "43_1275811482.3686" 
+    capture_lex $P665
+    .const 'Sub' $P648 = "42_1275811482.3686" 
+    capture_lex $P648
+    .const 'Sub' $P633 = "41_1275811482.3686" 
+    capture_lex $P633
+    .const 'Sub' $P618 = "40_1275811482.3686" 
+    capture_lex $P618
+    .const 'Sub' $P592 = "39_1275811482.3686" 
+    capture_lex $P592
+    .const 'Sub' $P541 = "37_1275811482.3686" 
     capture_lex $P541
-    .const 'Sub' $P473 = "35_1274022889.08438" 
+    .const 'Sub' $P473 = "35_1275811482.3686" 
     capture_lex $P473
-    .const 'Sub' $P418 = "32_1274022889.08438" 
+    .const 'Sub' $P418 = "32_1275811482.3686" 
     capture_lex $P418
-    .const 'Sub' $P403 = "31_1274022889.08438" 
+    .const 'Sub' $P403 = "31_1275811482.3686" 
     capture_lex $P403
-    .const 'Sub' $P377 = "29_1274022889.08438" 
+    .const 'Sub' $P377 = "29_1275811482.3686" 
     capture_lex $P377
-    .const 'Sub' $P360 = "28_1274022889.08438" 
+    .const 'Sub' $P360 = "28_1275811482.3686" 
     capture_lex $P360
-    .const 'Sub' $P338 = "27_1274022889.08438" 
+    .const 'Sub' $P338 = "27_1275811482.3686" 
     capture_lex $P338
-    .const 'Sub' $P305 = "26_1274022889.08438" 
+    .const 'Sub' $P305 = "26_1275811482.3686" 
     capture_lex $P305
-    .const 'Sub' $P50 = "13_1274022889.08438" 
+    .const 'Sub' $P50 = "13_1275811482.3686" 
     capture_lex $P50
-    .const 'Sub' $P16 = "12_1274022889.08438" 
+    .const 'Sub' $P16 = "12_1275811482.3686" 
     capture_lex $P16
     get_global $P15, "@MODIFIERS"
-    unless_null $P15, vivify_93
+    unless_null $P15, vivify_94
     $P15 = root_new ['parrot';'ResizablePMCArray']
     set_global "@MODIFIERS", $P15
-  vivify_93:
-.annotate 'line', 479
-    .const 'Sub' $P16 = "12_1274022889.08438" 
+  vivify_94:
+.annotate 'line', 494
+    .const 'Sub' $P16 = "12_1275811482.3686" 
     newclosure $P49, $P16
     .lex "buildsub", $P49
-.annotate 'line', 496
-    .const 'Sub' $P50 = "13_1274022889.08438" 
+.annotate 'line', 511
+    .const 'Sub' $P50 = "13_1275811482.3686" 
     newclosure $P304, $P50
     .lex "capnames", $P304
-.annotate 'line', 562
-    .const 'Sub' $P305 = "26_1274022889.08438" 
+.annotate 'line', 577
+    .const 'Sub' $P305 = "26_1275811482.3686" 
     newclosure $P337, $P305
     .lex "backmod", $P337
-.annotate 'line', 569
-    .const 'Sub' $P338 = "27_1274022889.08438" 
+.annotate 'line', 584
+    .const 'Sub' $P338 = "27_1275811482.3686" 
     newclosure $P358, $P338
     .lex "subrule_alias", $P358
 .annotate 'line', 4
+    $P0 = find_dynamic_lex "$*CTXSAVE"
+    if null $P0 goto ctxsave_done
+    $I0 = can $P0, "ctxsave"
+    unless $I0 goto ctxsave_done
+    $P0."ctxsave"()
+  ctxsave_done:
     get_global $P359, "@MODIFIERS"
-.annotate 'line', 472
-    find_lex $P1563, "buildsub"
-    find_lex $P1564, "capnames"
-    find_lex $P1565, "backmod"
-    find_lex $P1566, "subrule_alias"
+.annotate 'line', 487
+    find_lex $P1590, "buildsub"
+    find_lex $P1591, "capnames"
+    find_lex $P1592, "backmod"
+    find_lex $P1593, "subrule_alias"
 .annotate 'line', 4
-    .return ($P1566)
-    .const 'Sub' $P1568 = "89_1274022889.08438" 
-    .return ($P1568)
+    .return ($P1593)
+    .const 'Sub' $P1595 = "90_1275811482.3686" 
+    .return ($P1595)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "" :load :init :subid("post92") :outer("11_1274022889.08438")
+.sub "" :load :init :subid("post93") :outer("11_1275811482.3686")
 .annotate 'line', 4
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate 'line', 7
 
-        $P1571 = new ['ResizablePMCArray']
+        $P1598 = new ['ResizablePMCArray']
         $P0 = new ['Hash']
-        push $P1571, $P0
+        push $P1598, $P0
     
-    set_global "@MODIFIERS", $P1571
+    set_global "@MODIFIERS", $P1598
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "buildsub"  :subid("12_1274022889.08438") :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "buildsub"  :subid("12_1275811482.3686") :outer("11_1275811482.3686")
     .param pmc param_19
     .param pmc param_20 :optional
     .param int has_param_20 :opt_flag
-.annotate 'line', 479
+.annotate 'line', 494
     new $P18, 'ExceptionHandler'
     set_addr $P18, control_17
-    $P18."handle_types"(57)
+    $P18."handle_types"(.CONTROL_RETURN)
     push_eh $P18
     .lex "$rpast", param_19
-    if has_param_20, optparam_94
+    if has_param_20, optparam_95
     get_hll_global $P21, ["PAST"], "Block"
     $P22 = $P21."new"()
     set param_20, $P22
-  optparam_94:
+  optparam_95:
     .lex "$block", param_20
-.annotate 'line', 480
+.annotate 'line', 495
     $P23 = root_new ['parrot';'Hash']
     .lex "%capnames", $P23
     find_lex $P24, "$rpast"
     $P25 = "capnames"($P24, 0)
     store_lex "%capnames", $P25
-.annotate 'line', 481
+.annotate 'line', 496
     new $P26, "Integer"
     assign $P26, 0
     find_lex $P27, "%capnames"
-    unless_null $P27, vivify_95
+    unless_null $P27, vivify_96
     $P27 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P27
-  vivify_95:
+  vivify_96:
     set $P27[""], $P26
-.annotate 'line', 482
+.annotate 'line', 497
     get_hll_global $P28, ["PAST"], "Regex"
-.annotate 'line', 483
+.annotate 'line', 498
     get_hll_global $P29, ["PAST"], "Regex"
     $P30 = $P29."new"("scan" :named("pasttype"))
     find_lex $P31, "$rpast"
-.annotate 'line', 485
+.annotate 'line', 500
     get_hll_global $P32, ["PAST"], "Regex"
     $P33 = $P32."new"("pass" :named("pasttype"))
     find_lex $P34, "%capnames"
     $P35 = $P28."new"($P30, $P31, $P33, "concat" :named("pasttype"), $P34 :named("capnames"))
-.annotate 'line', 482
+.annotate 'line', 497
     store_lex "$rpast", $P35
-.annotate 'line', 489
+.annotate 'line', 504
     find_lex $P37, "$block"
     $P38 = $P37."symbol"(unicode:"$\x{a2}")
     if $P38, unless_36_end
     find_lex $P39, "$block"
     $P39."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
   unless_36_end:
-.annotate 'line', 490
+.annotate 'line', 505
     find_lex $P41, "$block"
     $P42 = $P41."symbol"("$/")
     if $P42, unless_40_end
     find_lex $P43, "$block"
     $P43."symbol"("$/", "lexical" :named("scope"))
   unless_40_end:
-.annotate 'line', 491
+.annotate 'line', 506
     find_lex $P44, "$block"
     find_lex $P45, "$rpast"
     $P44."push"($P45)
-.annotate 'line', 492
+.annotate 'line', 507
     find_lex $P46, "$block"
     $P46."blocktype"("method")
     find_lex $P47, "$block"
-.annotate 'line', 479
+.annotate 'line', 494
     .return ($P47)
   control_17:
     .local pmc exception 
@@ -7441,49 +7562,50 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "capnames"  :subid("13_1274022889.08438") :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "capnames"  :subid("13_1275811482.3686") :outer("11_1275811482.3686")
     .param pmc param_53
     .param pmc param_54
-.annotate 'line', 496
-    .const 'Sub' $P279 = "24_1274022889.08438" 
+.annotate 'line', 511
+    .const 'Sub' $P279 = "24_1275811482.3686" 
     capture_lex $P279
-    .const 'Sub' $P216 = "21_1274022889.08438" 
+    .const 'Sub' $P216 = "21_1275811482.3686" 
     capture_lex $P216
-    .const 'Sub' $P174 = "19_1274022889.08438" 
+    .const 'Sub' $P174 = "19_1275811482.3686" 
     capture_lex $P174
-    .const 'Sub' $P132 = "17_1274022889.08438" 
+    .const 'Sub' $P132 = "17_1275811482.3686" 
     capture_lex $P132
-    .const 'Sub' $P65 = "14_1274022889.08438" 
+    .const 'Sub' $P65 = "14_1275811482.3686" 
     capture_lex $P65
     new $P52, 'ExceptionHandler'
     set_addr $P52, control_51
-    $P52."handle_types"(57)
+    $P52."handle_types"(.CONTROL_RETURN)
     push_eh $P52
     .lex "$ast", param_53
     .lex "$count", param_54
-.annotate 'line', 497
+.annotate 'line', 512
     $P55 = root_new ['parrot';'Hash']
     .lex "%capnames", $P55
-.annotate 'line', 498
+.annotate 'line', 513
     new $P56, "Undef"
     .lex "$pasttype", $P56
-.annotate 'line', 496
+.annotate 'line', 511
     find_lex $P57, "%capnames"
-.annotate 'line', 498
+.annotate 'line', 513
     find_lex $P58, "$ast"
     $P59 = $P58."pasttype"()
     store_lex "$pasttype", $P59
-.annotate 'line', 499
+.annotate 'line', 514
     find_lex $P61, "$pasttype"
     set $S62, $P61
     iseq $I63, $S62, "alt"
     if $I63, if_60
-.annotate 'line', 512
+.annotate 'line', 527
     find_lex $P123, "$pasttype"
     set $S124, $P123
     iseq $I125, $S124, "concat"
     if $I125, if_122
-.annotate 'line', 521
+.annotate 'line', 536
     find_lex $P167, "$pasttype"
     set $S168, $P167
     iseq $I169, $S168, "subrule"
@@ -7499,51 +7621,51 @@
     set $P165, $I172
   if_166_end:
     if $P165, if_164
-.annotate 'line', 534
+.annotate 'line', 549
     find_lex $P212, "$pasttype"
     set $S213, $P212
     iseq $I214, $S213, "subcapture"
     if $I214, if_211
-.annotate 'line', 551
+.annotate 'line', 566
     find_lex $P275, "$pasttype"
     set $S276, $P275
     iseq $I277, $S276, "quant"
     unless $I277, if_274_end
-    .const 'Sub' $P279 = "24_1274022889.08438" 
+    .const 'Sub' $P279 = "24_1275811482.3686" 
     capture_lex $P279
     $P279()
   if_274_end:
     goto if_211_end
   if_211:
-.annotate 'line', 534
-    .const 'Sub' $P216 = "21_1274022889.08438" 
+.annotate 'line', 549
+    .const 'Sub' $P216 = "21_1275811482.3686" 
     capture_lex $P216
     $P216()
   if_211_end:
     goto if_164_end
   if_164:
-.annotate 'line', 521
-    .const 'Sub' $P174 = "19_1274022889.08438" 
+.annotate 'line', 536
+    .const 'Sub' $P174 = "19_1275811482.3686" 
     capture_lex $P174
     $P174()
   if_164_end:
     goto if_122_end
   if_122:
-.annotate 'line', 513
+.annotate 'line', 528
     find_lex $P127, "$ast"
     $P128 = $P127."list"()
     defined $I129, $P128
-    unless $I129, for_undef_116
+    unless $I129, for_undef_117
     iter $P126, $P128
     new $P162, 'ExceptionHandler'
     set_addr $P162, loop161_handler
-    $P162."handle_types"(64, 66, 65)
+    $P162."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P162
   loop161_test:
     unless $P126, loop161_done
     shift $P130, $P126
   loop161_redo:
-    .const 'Sub' $P132 = "17_1274022889.08438" 
+    .const 'Sub' $P132 = "17_1275811482.3686" 
     capture_lex $P132
     $P132($P130)
   loop161_next:
@@ -7552,30 +7674,30 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P163, exception, 'type'
-    eq $P163, 64, loop161_next
-    eq $P163, 66, loop161_redo
+    eq $P163, .CONTROL_LOOP_NEXT, loop161_next
+    eq $P163, .CONTROL_LOOP_REDO, loop161_redo
   loop161_done:
     pop_eh 
-  for_undef_116:
+  for_undef_117:
   if_122_end:
-.annotate 'line', 512
+.annotate 'line', 527
     goto if_60_end
   if_60:
-.annotate 'line', 499
-    .const 'Sub' $P65 = "14_1274022889.08438" 
+.annotate 'line', 514
+    .const 'Sub' $P65 = "14_1275811482.3686" 
     capture_lex $P65
     $P65()
   if_60_end:
-.annotate 'line', 558
+.annotate 'line', 573
     find_lex $P300, "$count"
     find_lex $P301, "%capnames"
-    unless_null $P301, vivify_136
+    unless_null $P301, vivify_137
     $P301 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P301
-  vivify_136:
+  vivify_137:
     set $P301[""], $P300
     find_lex $P302, "%capnames"
-.annotate 'line', 496
+.annotate 'line', 511
     .return ($P302)
   control_51:
     .local pmc exception 
@@ -7586,38 +7708,39 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block278"  :anon :subid("24_1274022889.08438") :outer("13_1274022889.08438")
-.annotate 'line', 551
-    .const 'Sub' $P290 = "25_1274022889.08438" 
+.include "except_types.pasm"
+.sub "_block278"  :anon :subid("24_1275811482.3686") :outer("13_1275811482.3686")
+.annotate 'line', 566
+    .const 'Sub' $P290 = "25_1275811482.3686" 
     capture_lex $P290
-.annotate 'line', 552
+.annotate 'line', 567
     $P280 = root_new ['parrot';'Hash']
     .lex "%astcap", $P280
     find_lex $P281, "$ast"
-    unless_null $P281, vivify_96
+    unless_null $P281, vivify_97
     $P281 = root_new ['parrot';'ResizablePMCArray']
-  vivify_96:
+  vivify_97:
     set $P282, $P281[0]
-    unless_null $P282, vivify_97
+    unless_null $P282, vivify_98
     new $P282, "Undef"
-  vivify_97:
+  vivify_98:
     find_lex $P283, "$count"
     $P284 = "capnames"($P282, $P283)
     store_lex "%astcap", $P284
-.annotate 'line', 553
+.annotate 'line', 568
     find_lex $P286, "%astcap"
     defined $I287, $P286
-    unless $I287, for_undef_98
+    unless $I287, for_undef_99
     iter $P285, $P286
     new $P296, 'ExceptionHandler'
     set_addr $P296, loop295_handler
-    $P296."handle_types"(64, 66, 65)
+    $P296."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P296
   loop295_test:
     unless $P285, loop295_done
     shift $P288, $P285
   loop295_redo:
-    .const 'Sub' $P290 = "25_1274022889.08438" 
+    .const 'Sub' $P290 = "25_1275811482.3686" 
     capture_lex $P290
     $P290($P288)
   loop295_next:
@@ -7626,87 +7749,88 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P297, exception, 'type'
-    eq $P297, 64, loop295_next
-    eq $P297, 66, loop295_redo
+    eq $P297, .CONTROL_LOOP_NEXT, loop295_next
+    eq $P297, .CONTROL_LOOP_REDO, loop295_redo
   loop295_done:
     pop_eh 
-  for_undef_98:
-.annotate 'line', 556
+  for_undef_99:
+.annotate 'line', 571
     find_lex $P298, "%astcap"
-    unless_null $P298, vivify_100
+    unless_null $P298, vivify_101
     $P298 = root_new ['parrot';'Hash']
-  vivify_100:
+  vivify_101:
     set $P299, $P298[""]
-    unless_null $P299, vivify_101
+    unless_null $P299, vivify_102
     new $P299, "Undef"
-  vivify_101:
+  vivify_102:
     store_lex "$count", $P299
-.annotate 'line', 551
+.annotate 'line', 566
     .return ($P299)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block289"  :anon :subid("25_1274022889.08438") :outer("24_1274022889.08438")
+.sub "_block289"  :anon :subid("25_1275811482.3686") :outer("24_1275811482.3686")
     .param pmc param_291
-.annotate 'line', 553
+.annotate 'line', 568
     .lex "$_", param_291
-.annotate 'line', 554
+.annotate 'line', 569
     new $P292, "Integer"
     assign $P292, 2
     find_lex $P293, "$_"
     find_lex $P294, "%capnames"
-    unless_null $P294, vivify_99
+    unless_null $P294, vivify_100
     $P294 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P294
-  vivify_99:
+  vivify_100:
     set $P294[$P293], $P292
-.annotate 'line', 553
+.annotate 'line', 568
     .return ($P292)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block215"  :anon :subid("21_1274022889.08438") :outer("13_1274022889.08438")
-.annotate 'line', 534
-    .const 'Sub' $P256 = "23_1274022889.08438" 
+.include "except_types.pasm"
+.sub "_block215"  :anon :subid("21_1275811482.3686") :outer("13_1275811482.3686")
+.annotate 'line', 549
+    .const 'Sub' $P256 = "23_1275811482.3686" 
     capture_lex $P256
-    .const 'Sub' $P228 = "22_1274022889.08438" 
+    .const 'Sub' $P228 = "22_1275811482.3686" 
     capture_lex $P228
-.annotate 'line', 535
+.annotate 'line', 550
     new $P217, "Undef"
     .lex "$name", $P217
-.annotate 'line', 536
+.annotate 'line', 551
     $P218 = root_new ['parrot';'ResizablePMCArray']
     .lex "@names", $P218
-.annotate 'line', 545
+.annotate 'line', 560
     $P219 = root_new ['parrot';'Hash']
     .lex "%x", $P219
-.annotate 'line', 535
+.annotate 'line', 550
     find_lex $P220, "$ast"
     $P221 = $P220."name"()
     store_lex "$name", $P221
-.annotate 'line', 536
+.annotate 'line', 551
 
             $P0 = find_lex '$name'
             $S0 = $P0
             $P222 = split '=', $S0
         
     store_lex "@names", $P222
-.annotate 'line', 541
+.annotate 'line', 556
     find_lex $P224, "@names"
     defined $I225, $P224
-    unless $I225, for_undef_102
+    unless $I225, for_undef_103
     iter $P223, $P224
     new $P245, 'ExceptionHandler'
     set_addr $P245, loop244_handler
-    $P245."handle_types"(64, 66, 65)
+    $P245."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P245
   loop244_test:
     unless $P223, loop244_done
     shift $P226, $P223
   loop244_redo:
-    .const 'Sub' $P228 = "22_1274022889.08438" 
+    .const 'Sub' $P228 = "22_1275811482.3686" 
     capture_lex $P228
     $P228($P226)
   loop244_next:
@@ -7715,37 +7839,37 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P246, exception, 'type'
-    eq $P246, 64, loop244_next
-    eq $P246, 66, loop244_redo
+    eq $P246, .CONTROL_LOOP_NEXT, loop244_next
+    eq $P246, .CONTROL_LOOP_REDO, loop244_redo
   loop244_done:
     pop_eh 
-  for_undef_102:
-.annotate 'line', 545
+  for_undef_103:
+.annotate 'line', 560
     find_lex $P247, "$ast"
-    unless_null $P247, vivify_104
+    unless_null $P247, vivify_105
     $P247 = root_new ['parrot';'ResizablePMCArray']
-  vivify_104:
+  vivify_105:
     set $P248, $P247[0]
-    unless_null $P248, vivify_105
+    unless_null $P248, vivify_106
     new $P248, "Undef"
-  vivify_105:
+  vivify_106:
     find_lex $P249, "$count"
     $P250 = "capnames"($P248, $P249)
     store_lex "%x", $P250
-.annotate 'line', 546
+.annotate 'line', 561
     find_lex $P252, "%x"
     defined $I253, $P252
-    unless $I253, for_undef_106
+    unless $I253, for_undef_107
     iter $P251, $P252
     new $P270, 'ExceptionHandler'
     set_addr $P270, loop269_handler
-    $P270."handle_types"(64, 66, 65)
+    $P270."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P270
   loop269_test:
     unless $P251, loop269_done
     shift $P254, $P251
   loop269_redo:
-    .const 'Sub' $P256 = "23_1274022889.08438" 
+    .const 'Sub' $P256 = "23_1275811482.3686" 
     capture_lex $P256
     $P256($P254)
   loop269_next:
@@ -7754,32 +7878,32 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P271, exception, 'type'
-    eq $P271, 64, loop269_next
-    eq $P271, 66, loop269_redo
+    eq $P271, .CONTROL_LOOP_NEXT, loop269_next
+    eq $P271, .CONTROL_LOOP_REDO, loop269_redo
   loop269_done:
     pop_eh 
-  for_undef_106:
-.annotate 'line', 549
+  for_undef_107:
+.annotate 'line', 564
     find_lex $P272, "%x"
-    unless_null $P272, vivify_112
+    unless_null $P272, vivify_113
     $P272 = root_new ['parrot';'Hash']
-  vivify_112:
+  vivify_113:
     set $P273, $P272[""]
-    unless_null $P273, vivify_113
+    unless_null $P273, vivify_114
     new $P273, "Undef"
-  vivify_113:
+  vivify_114:
     store_lex "$count", $P273
-.annotate 'line', 534
+.annotate 'line', 549
     .return ($P273)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block227"  :anon :subid("22_1274022889.08438") :outer("21_1274022889.08438")
+.sub "_block227"  :anon :subid("22_1275811482.3686") :outer("21_1275811482.3686")
     .param pmc param_229
-.annotate 'line', 541
+.annotate 'line', 556
     .lex "$_", param_229
-.annotate 'line', 542
+.annotate 'line', 557
     find_lex $P233, "$_"
     set $S234, $P233
     iseq $I235, $S234, "0"
@@ -7799,77 +7923,78 @@
     add $P240, $P239, 1
     store_lex "$count", $P240
   if_230_end:
-.annotate 'line', 543
+.annotate 'line', 558
     new $P241, "Integer"
     assign $P241, 1
     find_lex $P242, "$_"
     find_lex $P243, "%capnames"
-    unless_null $P243, vivify_103
+    unless_null $P243, vivify_104
     $P243 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P243
-  vivify_103:
+  vivify_104:
     set $P243[$P242], $P241
-.annotate 'line', 541
+.annotate 'line', 556
     .return ($P241)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block255"  :anon :subid("23_1274022889.08438") :outer("21_1274022889.08438")
+.sub "_block255"  :anon :subid("23_1275811482.3686") :outer("21_1275811482.3686")
     .param pmc param_257
-.annotate 'line', 546
+.annotate 'line', 561
     .lex "$_", param_257
-.annotate 'line', 547
+.annotate 'line', 562
     find_lex $P258, "$_"
     find_lex $P259, "%capnames"
-    unless_null $P259, vivify_107
+    unless_null $P259, vivify_108
     $P259 = root_new ['parrot';'Hash']
-  vivify_107:
+  vivify_108:
     set $P260, $P259[$P258]
-    unless_null $P260, vivify_108
+    unless_null $P260, vivify_109
     new $P260, "Undef"
-  vivify_108:
+  vivify_109:
     set $N261, $P260
     new $P262, 'Float'
     set $P262, $N261
     find_lex $P263, "$_"
     find_lex $P264, "%x"
-    unless_null $P264, vivify_109
+    unless_null $P264, vivify_110
     $P264 = root_new ['parrot';'Hash']
-  vivify_109:
+  vivify_110:
     set $P265, $P264[$P263]
-    unless_null $P265, vivify_110
+    unless_null $P265, vivify_111
     new $P265, "Undef"
-  vivify_110:
+  vivify_111:
     add $P266, $P262, $P265
     find_lex $P267, "$_"
     find_lex $P268, "%capnames"
-    unless_null $P268, vivify_111
+    unless_null $P268, vivify_112
     $P268 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P268
-  vivify_111:
+  vivify_112:
     set $P268[$P267], $P266
-.annotate 'line', 546
+.annotate 'line', 561
     .return ($P266)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block173"  :anon :subid("19_1274022889.08438") :outer("13_1274022889.08438")
-.annotate 'line', 521
-    .const 'Sub' $P192 = "20_1274022889.08438" 
+.include "except_types.pasm"
+.sub "_block173"  :anon :subid("19_1275811482.3686") :outer("13_1275811482.3686")
+.annotate 'line', 536
+    .const 'Sub' $P192 = "20_1275811482.3686" 
     capture_lex $P192
-.annotate 'line', 522
+.annotate 'line', 537
     new $P175, "Undef"
     .lex "$name", $P175
-.annotate 'line', 524
+.annotate 'line', 539
     $P176 = root_new ['parrot';'ResizablePMCArray']
     .lex "@names", $P176
-.annotate 'line', 522
+.annotate 'line', 537
     find_lex $P177, "$ast"
     $P178 = $P177."name"()
     store_lex "$name", $P178
-.annotate 'line', 523
+.annotate 'line', 538
     find_lex $P180, "$name"
     set $S181, $P180
     iseq $I182, $S181, ""
@@ -7880,27 +8005,27 @@
     find_lex $P185, "$name"
     $P184."name"($P185)
   if_179_end:
-.annotate 'line', 524
+.annotate 'line', 539
 
             $P0 = find_lex '$name'
             $S0 = $P0
             $P186 = split '=', $S0
         
     store_lex "@names", $P186
-.annotate 'line', 529
+.annotate 'line', 544
     find_lex $P188, "@names"
     defined $I189, $P188
-    unless $I189, for_undef_114
+    unless $I189, for_undef_115
     iter $P187, $P188
     new $P209, 'ExceptionHandler'
     set_addr $P209, loop208_handler
-    $P209."handle_types"(64, 66, 65)
+    $P209."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P209
   loop208_test:
     unless $P187, loop208_done
     shift $P190, $P187
   loop208_redo:
-    .const 'Sub' $P192 = "20_1274022889.08438" 
+    .const 'Sub' $P192 = "20_1275811482.3686" 
     capture_lex $P192
     $P192($P190)
   loop208_next:
@@ -7909,22 +8034,22 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P210, exception, 'type'
-    eq $P210, 64, loop208_next
-    eq $P210, 66, loop208_redo
+    eq $P210, .CONTROL_LOOP_NEXT, loop208_next
+    eq $P210, .CONTROL_LOOP_REDO, loop208_redo
   loop208_done:
     pop_eh 
-  for_undef_114:
-.annotate 'line', 521
+  for_undef_115:
+.annotate 'line', 536
     .return ($P187)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block191"  :anon :subid("20_1274022889.08438") :outer("19_1274022889.08438")
+.sub "_block191"  :anon :subid("20_1275811482.3686") :outer("19_1275811482.3686")
     .param pmc param_193
-.annotate 'line', 529
+.annotate 'line', 544
     .lex "$_", param_193
-.annotate 'line', 530
+.annotate 'line', 545
     find_lex $P197, "$_"
     set $S198, $P197
     iseq $I199, $S198, "0"
@@ -7944,28 +8069,29 @@
     add $P204, $P203, 1
     store_lex "$count", $P204
   if_194_end:
-.annotate 'line', 531
+.annotate 'line', 546
     new $P205, "Integer"
     assign $P205, 1
     find_lex $P206, "$_"
     find_lex $P207, "%capnames"
-    unless_null $P207, vivify_115
+    unless_null $P207, vivify_116
     $P207 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P207
-  vivify_115:
+  vivify_116:
     set $P207[$P206], $P205
-.annotate 'line', 529
+.annotate 'line', 544
     .return ($P205)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block131"  :anon :subid("17_1274022889.08438") :outer("13_1274022889.08438")
+.include "except_types.pasm"
+.sub "_block131"  :anon :subid("17_1275811482.3686") :outer("13_1275811482.3686")
     .param pmc param_134
-.annotate 'line', 513
-    .const 'Sub' $P143 = "18_1274022889.08438" 
+.annotate 'line', 528
+    .const 'Sub' $P143 = "18_1275811482.3686" 
     capture_lex $P143
-.annotate 'line', 514
+.annotate 'line', 529
     $P133 = root_new ['parrot';'Hash']
     .lex "%x", $P133
     .lex "$_", param_134
@@ -7973,20 +8099,20 @@
     find_lex $P136, "$count"
     $P137 = "capnames"($P135, $P136)
     store_lex "%x", $P137
-.annotate 'line', 515
+.annotate 'line', 530
     find_lex $P139, "%x"
     defined $I140, $P139
-    unless $I140, for_undef_117
+    unless $I140, for_undef_118
     iter $P138, $P139
     new $P157, 'ExceptionHandler'
     set_addr $P157, loop156_handler
-    $P157."handle_types"(64, 66, 65)
+    $P157."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P157
   loop156_test:
     unless $P138, loop156_done
     shift $P141, $P138
   loop156_redo:
-    .const 'Sub' $P143 = "18_1274022889.08438" 
+    .const 'Sub' $P143 = "18_1275811482.3686" 
     capture_lex $P143
     $P143($P141)
   loop156_next:
@@ -7995,91 +8121,92 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P158, exception, 'type'
-    eq $P158, 64, loop156_next
-    eq $P158, 66, loop156_redo
+    eq $P158, .CONTROL_LOOP_NEXT, loop156_next
+    eq $P158, .CONTROL_LOOP_REDO, loop156_redo
   loop156_done:
     pop_eh 
-  for_undef_117:
-.annotate 'line', 518
+  for_undef_118:
+.annotate 'line', 533
     find_lex $P159, "%x"
-    unless_null $P159, vivify_123
+    unless_null $P159, vivify_124
     $P159 = root_new ['parrot';'Hash']
-  vivify_123:
+  vivify_124:
     set $P160, $P159[""]
-    unless_null $P160, vivify_124
+    unless_null $P160, vivify_125
     new $P160, "Undef"
-  vivify_124:
+  vivify_125:
     store_lex "$count", $P160
-.annotate 'line', 513
+.annotate 'line', 528
     .return ($P160)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block142"  :anon :subid("18_1274022889.08438") :outer("17_1274022889.08438")
+.sub "_block142"  :anon :subid("18_1275811482.3686") :outer("17_1275811482.3686")
     .param pmc param_144
-.annotate 'line', 515
+.annotate 'line', 530
     .lex "$_", param_144
-.annotate 'line', 516
+.annotate 'line', 531
     find_lex $P145, "$_"
     find_lex $P146, "%capnames"
-    unless_null $P146, vivify_118
+    unless_null $P146, vivify_119
     $P146 = root_new ['parrot';'Hash']
-  vivify_118:
+  vivify_119:
     set $P147, $P146[$P145]
-    unless_null $P147, vivify_119
+    unless_null $P147, vivify_120
     new $P147, "Undef"
-  vivify_119:
+  vivify_120:
     set $N148, $P147
     new $P149, 'Float'
     set $P149, $N148
     find_lex $P150, "$_"
     find_lex $P151, "%x"
-    unless_null $P151, vivify_120
+    unless_null $P151, vivify_121
     $P151 = root_new ['parrot';'Hash']
-  vivify_120:
+  vivify_121:
     set $P152, $P151[$P150]
-    unless_null $P152, vivify_121
+    unless_null $P152, vivify_122
     new $P152, "Undef"
-  vivify_121:
+  vivify_122:
     add $P153, $P149, $P152
     find_lex $P154, "$_"
     find_lex $P155, "%capnames"
-    unless_null $P155, vivify_122
+    unless_null $P155, vivify_123
     $P155 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P155
-  vivify_122:
+  vivify_123:
     set $P155[$P154], $P153
-.annotate 'line', 515
+.annotate 'line', 530
     .return ($P153)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block64"  :anon :subid("14_1274022889.08438") :outer("13_1274022889.08438")
-.annotate 'line', 499
-    .const 'Sub' $P74 = "15_1274022889.08438" 
+.include "except_types.pasm"
+.sub "_block64"  :anon :subid("14_1275811482.3686") :outer("13_1275811482.3686")
+.annotate 'line', 514
+    .const 'Sub' $P74 = "15_1275811482.3686" 
     capture_lex $P74
-.annotate 'line', 500
+.annotate 'line', 515
     new $P66, "Undef"
     .lex "$max", $P66
     find_lex $P67, "$count"
     store_lex "$max", $P67
-.annotate 'line', 501
+.annotate 'line', 516
     find_lex $P69, "$ast"
     $P70 = $P69."list"()
     defined $I71, $P70
-    unless $I71, for_undef_125
+    unless $I71, for_undef_126
     iter $P68, $P70
     new $P119, 'ExceptionHandler'
     set_addr $P119, loop118_handler
-    $P119."handle_types"(64, 66, 65)
+    $P119."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P119
   loop118_test:
     unless $P68, loop118_done
     shift $P72, $P68
   loop118_redo:
-    .const 'Sub' $P74 = "15_1274022889.08438" 
+    .const 'Sub' $P74 = "15_1275811482.3686" 
     capture_lex $P74
     $P74($P72)
   loop118_next:
@@ -8088,26 +8215,27 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P120, exception, 'type'
-    eq $P120, 64, loop118_next
-    eq $P120, 66, loop118_redo
+    eq $P120, .CONTROL_LOOP_NEXT, loop118_next
+    eq $P120, .CONTROL_LOOP_REDO, loop118_redo
   loop118_done:
     pop_eh 
-  for_undef_125:
-.annotate 'line', 510
+  for_undef_126:
+.annotate 'line', 525
     find_lex $P121, "$max"
     store_lex "$count", $P121
-.annotate 'line', 499
+.annotate 'line', 514
     .return ($P121)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block73"  :anon :subid("15_1274022889.08438") :outer("14_1274022889.08438")
+.include "except_types.pasm"
+.sub "_block73"  :anon :subid("15_1275811482.3686") :outer("14_1275811482.3686")
     .param pmc param_76
-.annotate 'line', 501
-    .const 'Sub' $P85 = "16_1274022889.08438" 
+.annotate 'line', 516
+    .const 'Sub' $P85 = "16_1275811482.3686" 
     capture_lex $P85
-.annotate 'line', 502
+.annotate 'line', 517
     $P75 = root_new ['parrot';'Hash']
     .lex "%x", $P75
     .lex "$_", param_76
@@ -8115,20 +8243,20 @@
     find_lex $P78, "$count"
     $P79 = "capnames"($P77, $P78)
     store_lex "%x", $P79
-.annotate 'line', 503
+.annotate 'line', 518
     find_lex $P81, "%x"
     defined $I82, $P81
-    unless $I82, for_undef_126
+    unless $I82, for_undef_127
     iter $P80, $P81
     new $P106, 'ExceptionHandler'
     set_addr $P106, loop105_handler
-    $P106."handle_types"(64, 66, 65)
+    $P106."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P106
   loop105_test:
     unless $P80, loop105_done
     shift $P83, $P80
   loop105_redo:
-    .const 'Sub' $P85 = "16_1274022889.08438" 
+    .const 'Sub' $P85 = "16_1275811482.3686" 
     capture_lex $P85
     $P85($P83)
   loop105_next:
@@ -8137,20 +8265,20 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P107, exception, 'type'
-    eq $P107, 64, loop105_next
-    eq $P107, 66, loop105_redo
+    eq $P107, .CONTROL_LOOP_NEXT, loop105_next
+    eq $P107, .CONTROL_LOOP_REDO, loop105_redo
   loop105_done:
     pop_eh 
-  for_undef_126:
-.annotate 'line', 508
+  for_undef_127:
+.annotate 'line', 523
     find_lex $P110, "%x"
-    unless_null $P110, vivify_132
+    unless_null $P110, vivify_133
     $P110 = root_new ['parrot';'Hash']
-  vivify_132:
+  vivify_133:
     set $P111, $P110[""]
-    unless_null $P111, vivify_133
+    unless_null $P111, vivify_134
     new $P111, "Undef"
-  vivify_133:
+  vivify_134:
     set $N112, $P111
     find_lex $P113, "$max"
     set $N114, $P113
@@ -8161,36 +8289,36 @@
     goto if_109_end
   if_109:
     find_lex $P116, "%x"
-    unless_null $P116, vivify_134
+    unless_null $P116, vivify_135
     $P116 = root_new ['parrot';'Hash']
-  vivify_134:
+  vivify_135:
     set $P117, $P116[""]
-    unless_null $P117, vivify_135
+    unless_null $P117, vivify_136
     new $P117, "Undef"
-  vivify_135:
+  vivify_136:
     store_lex "$max", $P117
     set $P108, $P117
   if_109_end:
-.annotate 'line', 501
+.annotate 'line', 516
     .return ($P108)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block84"  :anon :subid("16_1274022889.08438") :outer("15_1274022889.08438")
+.sub "_block84"  :anon :subid("16_1275811482.3686") :outer("15_1275811482.3686")
     .param pmc param_86
-.annotate 'line', 503
+.annotate 'line', 518
     .lex "$_", param_86
-.annotate 'line', 504
+.annotate 'line', 519
     find_lex $P91, "$_"
     find_lex $P92, "%capnames"
-    unless_null $P92, vivify_127
+    unless_null $P92, vivify_128
     $P92 = root_new ['parrot';'Hash']
-  vivify_127:
+  vivify_128:
     set $P93, $P92[$P91]
-    unless_null $P93, vivify_128
+    unless_null $P93, vivify_129
     new $P93, "Undef"
-  vivify_128:
+  vivify_129:
     set $N94, $P93
     islt $I95, $N94, 2.0
     if $I95, if_90
@@ -8200,13 +8328,13 @@
   if_90:
     find_lex $P96, "$_"
     find_lex $P97, "%x"
-    unless_null $P97, vivify_129
+    unless_null $P97, vivify_130
     $P97 = root_new ['parrot';'Hash']
-  vivify_129:
+  vivify_130:
     set $P98, $P97[$P96]
-    unless_null $P98, vivify_130
+    unless_null $P98, vivify_131
     new $P98, "Undef"
-  vivify_130:
+  vivify_131:
     set $N99, $P98
     iseq $I100, $N99, 1.0
     new $P89, 'Integer'
@@ -8222,36 +8350,37 @@
     assign $P101, 1
     set $P87, $P101
   if_88_end:
-.annotate 'line', 505
+.annotate 'line', 520
     find_lex $P103, "$_"
     find_lex $P104, "%capnames"
-    unless_null $P104, vivify_131
+    unless_null $P104, vivify_132
     $P104 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P104
-  vivify_131:
+  vivify_132:
     set $P104[$P103], $P87
-.annotate 'line', 503
+.annotate 'line', 518
     .return ($P87)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backmod"  :subid("26_1274022889.08438") :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "backmod"  :subid("26_1275811482.3686") :outer("11_1275811482.3686")
     .param pmc param_308
     .param pmc param_309
-.annotate 'line', 562
+.annotate 'line', 577
     new $P307, 'ExceptionHandler'
     set_addr $P307, control_306
-    $P307."handle_types"(57)
+    $P307."handle_types"(.CONTROL_RETURN)
     push_eh $P307
     .lex "$ast", param_308
     .lex "$backmod", param_309
-.annotate 'line', 563
+.annotate 'line', 578
     find_lex $P311, "$backmod"
     set $S312, $P311
     iseq $I313, $S312, ":"
     if $I313, if_310
-.annotate 'line', 564
+.annotate 'line', 579
     find_lex $P318, "$backmod"
     set $S319, $P318
     iseq $I320, $S319, ":?"
@@ -8267,7 +8396,7 @@
     set $P316, $I323
   unless_317_end:
     if $P316, if_315
-.annotate 'line', 565
+.annotate 'line', 580
     find_lex $P328, "$backmod"
     set $S329, $P328
     iseq $I330, $S329, ":!"
@@ -8288,18 +8417,18 @@
   if_325_end:
     goto if_315_end
   if_315:
-.annotate 'line', 564
+.annotate 'line', 579
     find_lex $P324, "$ast"
     $P324."backtrack"("f")
   if_315_end:
     goto if_310_end
   if_310:
-.annotate 'line', 563
+.annotate 'line', 578
     find_lex $P314, "$ast"
     $P314."backtrack"("r")
   if_310_end:
     find_lex $P335, "$ast"
-.annotate 'line', 562
+.annotate 'line', 577
     .return ($P335)
   control_306:
     .local pmc exception 
@@ -8310,28 +8439,29 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "subrule_alias"  :subid("27_1274022889.08438") :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "subrule_alias"  :subid("27_1275811482.3686") :outer("11_1275811482.3686")
     .param pmc param_341
     .param pmc param_342
-.annotate 'line', 569
+.annotate 'line', 584
     new $P340, 'ExceptionHandler'
     set_addr $P340, control_339
-    $P340."handle_types"(57)
+    $P340."handle_types"(.CONTROL_RETURN)
     push_eh $P340
     .lex "$past", param_341
     .lex "$name", param_342
-.annotate 'line', 570
+.annotate 'line', 585
     find_lex $P344, "$past"
     $S345 = $P344."name"()
     isgt $I346, $S345, ""
     if $I346, if_343
-.annotate 'line', 571
+.annotate 'line', 586
     find_lex $P353, "$past"
     find_lex $P354, "$name"
     $P353."name"($P354)
     goto if_343_end
   if_343:
-.annotate 'line', 570
+.annotate 'line', 585
     find_lex $P347, "$past"
     find_lex $P348, "$name"
     concat $P349, $P348, "="
@@ -8340,10 +8470,10 @@
     concat $P352, $P349, $S351
     $P347."name"($P352)
   if_343_end:
-.annotate 'line', 572
+.annotate 'line', 587
     find_lex $P355, "$past"
     $P356 = $P355."subtype"("capture")
-.annotate 'line', 569
+.annotate 'line', 584
     .return ($P356)
   control_339:
     .local pmc exception 
@@ -8354,47 +8484,48 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "arg"  :subid("28_1274022889.08438") :method :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "arg"  :subid("28_1275811482.3686") :method :outer("11_1275811482.3686")
     .param pmc param_363
 .annotate 'line', 14
     new $P362, 'ExceptionHandler'
     set_addr $P362, control_361
-    $P362."handle_types"(57)
+    $P362."handle_types"(.CONTROL_RETURN)
     push_eh $P362
     .lex "self", self
     .lex "$/", param_363
 .annotate 'line', 15
     find_lex $P364, "$/"
     find_lex $P367, "$/"
-    unless_null $P367, vivify_137
+    unless_null $P367, vivify_138
     $P367 = root_new ['parrot';'Hash']
-  vivify_137:
+  vivify_138:
     set $P368, $P367["quote_EXPR"]
-    unless_null $P368, vivify_138
+    unless_null $P368, vivify_139
     new $P368, "Undef"
-  vivify_138:
+  vivify_139:
     if $P368, if_366
     find_lex $P372, "$/"
-    unless_null $P372, vivify_139
+    unless_null $P372, vivify_140
     $P372 = root_new ['parrot';'Hash']
-  vivify_139:
+  vivify_140:
     set $P373, $P372["val"]
-    unless_null $P373, vivify_140
+    unless_null $P373, vivify_141
     new $P373, "Undef"
-  vivify_140:
+  vivify_141:
     set $N374, $P373
     new $P365, 'Float'
     set $P365, $N374
     goto if_366_end
   if_366:
     find_lex $P369, "$/"
-    unless_null $P369, vivify_141
+    unless_null $P369, vivify_142
     $P369 = root_new ['parrot';'Hash']
-  vivify_141:
+  vivify_142:
     set $P370, $P369["quote_EXPR"]
-    unless_null $P370, vivify_142
+    unless_null $P370, vivify_143
     new $P370, "Undef"
-  vivify_142:
+  vivify_143:
     $P371 = $P370."ast"()
     set $P365, $P371
   if_366_end:
@@ -8410,14 +8541,15 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "arglist"  :subid("29_1274022889.08438") :method :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "arglist"  :subid("29_1275811482.3686") :method :outer("11_1275811482.3686")
     .param pmc param_380
 .annotate 'line', 18
-    .const 'Sub' $P390 = "30_1274022889.08438" 
+    .const 'Sub' $P390 = "30_1275811482.3686" 
     capture_lex $P390
     new $P379, 'ExceptionHandler'
     set_addr $P379, control_378
-    $P379."handle_types"(57)
+    $P379."handle_types"(.CONTROL_RETURN)
     push_eh $P379
     .lex "self", self
     .lex "$/", param_380
@@ -8429,25 +8561,25 @@
     store_lex "$past", $P383
 .annotate 'line', 20
     find_lex $P385, "$/"
-    unless_null $P385, vivify_143
+    unless_null $P385, vivify_144
     $P385 = root_new ['parrot';'Hash']
-  vivify_143:
+  vivify_144:
     set $P386, $P385["arg"]
-    unless_null $P386, vivify_144
+    unless_null $P386, vivify_145
     new $P386, "Undef"
-  vivify_144:
+  vivify_145:
     defined $I387, $P386
-    unless $I387, for_undef_145
+    unless $I387, for_undef_146
     iter $P384, $P386
     new $P397, 'ExceptionHandler'
     set_addr $P397, loop396_handler
-    $P397."handle_types"(64, 66, 65)
+    $P397."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P397
   loop396_test:
     unless $P384, loop396_done
     shift $P388, $P384
   loop396_redo:
-    .const 'Sub' $P390 = "30_1274022889.08438" 
+    .const 'Sub' $P390 = "30_1275811482.3686" 
     capture_lex $P390
     $P390($P388)
   loop396_next:
@@ -8456,11 +8588,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P398, exception, 'type'
-    eq $P398, 64, loop396_next
-    eq $P398, 66, loop396_redo
+    eq $P398, .CONTROL_LOOP_NEXT, loop396_next
+    eq $P398, .CONTROL_LOOP_REDO, loop396_redo
   loop396_done:
     pop_eh 
-  for_undef_145:
+  for_undef_146:
 .annotate 'line', 21
     find_lex $P399, "$/"
     find_lex $P400, "$past"
@@ -8476,7 +8608,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block389"  :anon :subid("30_1274022889.08438") :outer("29_1274022889.08438")
+.sub "_block389"  :anon :subid("30_1275811482.3686") :outer("29_1275811482.3686")
     .param pmc param_391
 .annotate 'line', 20
     .lex "$_", param_391
@@ -8489,12 +8621,13 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "TOP"  :subid("31_1274022889.08438") :method :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "TOP"  :subid("31_1275811482.3686") :method :outer("11_1275811482.3686")
     .param pmc param_406
 .annotate 'line', 24
     new $P405, 'ExceptionHandler'
     set_addr $P405, control_404
-    $P405."handle_types"(57)
+    $P405."handle_types"(.CONTROL_RETURN)
     push_eh $P405
     .lex "self", self
     .lex "$/", param_406
@@ -8502,13 +8635,13 @@
     new $P407, "Undef"
     .lex "$past", $P407
     find_lex $P408, "$/"
-    unless_null $P408, vivify_146
+    unless_null $P408, vivify_147
     $P408 = root_new ['parrot';'Hash']
-  vivify_146:
+  vivify_147:
     set $P409, $P408["nibbler"]
-    unless_null $P409, vivify_147
+    unless_null $P409, vivify_148
     new $P409, "Undef"
-  vivify_147:
+  vivify_148:
     $P410 = $P409."ast"()
     $P411 = "buildsub"($P410)
     store_lex "$past", $P411
@@ -8531,25 +8664,26 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "nibbler"  :subid("32_1274022889.08438") :method :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "nibbler"  :subid("32_1275811482.3686") :method :outer("11_1275811482.3686")
     .param pmc param_421
     .param pmc param_422 :optional
     .param int has_param_422 :opt_flag
 .annotate 'line', 30
-    .const 'Sub' $P456 = "34_1274022889.08438" 
+    .const 'Sub' $P456 = "34_1275811482.3686" 
     capture_lex $P456
-    .const 'Sub' $P430 = "33_1274022889.08438" 
+    .const 'Sub' $P430 = "33_1275811482.3686" 
     capture_lex $P430
     new $P420, 'ExceptionHandler'
     set_addr $P420, control_419
-    $P420."handle_types"(57)
+    $P420."handle_types"(.CONTROL_RETURN)
     push_eh $P420
     .lex "self", self
     .lex "$/", param_421
-    if has_param_422, optparam_148
+    if has_param_422, optparam_149
     new $P423, "Undef"
     set param_422, $P423
-  optparam_148:
+  optparam_149:
     .lex "$key", param_422
 .annotate 'line', 42
     new $P424, "Undef"
@@ -8559,7 +8693,7 @@
     set $S427, $P426
     iseq $I428, $S427, "open"
     unless $I428, if_425_end
-    .const 'Sub' $P430 = "33_1274022889.08438" 
+    .const 'Sub' $P430 = "33_1275811482.3686" 
     capture_lex $P430
     $P430()
   if_425_end:
@@ -8569,29 +8703,29 @@
     find_lex $P441, "$past"
 .annotate 'line', 43
     find_lex $P443, "$/"
-    unless_null $P443, vivify_151
+    unless_null $P443, vivify_152
     $P443 = root_new ['parrot';'Hash']
-  vivify_151:
+  vivify_152:
     set $P444, $P443["termish"]
-    unless_null $P444, vivify_152
+    unless_null $P444, vivify_153
     new $P444, "Undef"
-  vivify_152:
+  vivify_153:
     set $N445, $P444
     isgt $I446, $N445, 1.0
     if $I446, if_442
 .annotate 'line', 50
     find_lex $P465, "$/"
-    unless_null $P465, vivify_153
+    unless_null $P465, vivify_154
     $P465 = root_new ['parrot';'Hash']
-  vivify_153:
+  vivify_154:
     set $P466, $P465["termish"]
-    unless_null $P466, vivify_154
+    unless_null $P466, vivify_155
     $P466 = root_new ['parrot';'ResizablePMCArray']
-  vivify_154:
+  vivify_155:
     set $P467, $P466[0]
-    unless_null $P467, vivify_155
+    unless_null $P467, vivify_156
     new $P467, "Undef"
-  vivify_155:
+  vivify_156:
     $P468 = $P467."ast"()
     store_lex "$past", $P468
 .annotate 'line', 49
@@ -8604,25 +8738,25 @@
     store_lex "$past", $P449
 .annotate 'line', 45
     find_lex $P451, "$/"
-    unless_null $P451, vivify_156
+    unless_null $P451, vivify_157
     $P451 = root_new ['parrot';'Hash']
-  vivify_156:
+  vivify_157:
     set $P452, $P451["termish"]
-    unless_null $P452, vivify_157
+    unless_null $P452, vivify_158
     new $P452, "Undef"
-  vivify_157:
+  vivify_158:
     defined $I453, $P452
-    unless $I453, for_undef_158
+    unless $I453, for_undef_159
     iter $P450, $P452
     new $P463, 'ExceptionHandler'
     set_addr $P463, loop462_handler
-    $P463."handle_types"(64, 66, 65)
+    $P463."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P463
   loop462_test:
     unless $P450, loop462_done
     shift $P454, $P450
   loop462_redo:
-    .const 'Sub' $P456 = "34_1274022889.08438" 
+    .const 'Sub' $P456 = "34_1275811482.3686" 
     capture_lex $P456
     $P456($P454)
   loop462_next:
@@ -8631,11 +8765,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P464, exception, 'type'
-    eq $P464, 64, loop462_next
-    eq $P464, 66, loop462_redo
+    eq $P464, .CONTROL_LOOP_NEXT, loop462_next
+    eq $P464, .CONTROL_LOOP_REDO, loop462_redo
   loop462_done:
     pop_eh 
-  for_undef_158:
+  for_undef_159:
   if_442_end:
 .annotate 'line', 52
     find_lex $P469, "$/"
@@ -8652,7 +8786,8 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block429"  :anon :subid("33_1274022889.08438") :outer("32_1274022889.08438")
+.include "except_types.pasm"
+.sub "_block429"  :anon :subid("33_1275811482.3686") :outer("32_1275811482.3686")
 .annotate 'line', 32
     $P431 = root_new ['parrot';'Hash']
     .lex "%old", $P431
@@ -8661,13 +8796,13 @@
     .lex "%new", $P432
 .annotate 'line', 32
     get_global $P433, "@MODIFIERS"
-    unless_null $P433, vivify_149
+    unless_null $P433, vivify_150
     $P433 = root_new ['parrot';'ResizablePMCArray']
-  vivify_149:
+  vivify_150:
     set $P434, $P433[0]
-    unless_null $P434, vivify_150
+    unless_null $P434, vivify_151
     new $P434, "Undef"
-  vivify_150:
+  vivify_151:
     store_lex "%old", $P434
 .annotate 'line', 33
 
@@ -8681,7 +8816,7 @@
     $P436."unshift"($P437)
 .annotate 'line', 38
     new $P438, "Exception"
-    set $P438['type'], 57
+    set $P438['type'], .CONTROL_RETURN
     new $P439, "Integer"
     assign $P439, 1
     setattribute $P438, 'payload', $P439
@@ -8692,7 +8827,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block455"  :anon :subid("34_1274022889.08438") :outer("32_1274022889.08438")
+.sub "_block455"  :anon :subid("34_1275811482.3686") :outer("32_1275811482.3686")
     .param pmc param_457
 .annotate 'line', 45
     .lex "$_", param_457
@@ -8707,14 +8842,15 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "termish"  :subid("35_1274022889.08438") :method :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "termish"  :subid("35_1275811482.3686") :method :outer("11_1275811482.3686")
     .param pmc param_476
 .annotate 'line', 55
-    .const 'Sub' $P489 = "36_1274022889.08438" 
+    .const 'Sub' $P489 = "36_1275811482.3686" 
     capture_lex $P489
     new $P475, 'ExceptionHandler'
     set_addr $P475, control_474
-    $P475."handle_types"(57)
+    $P475."handle_types"(.CONTROL_RETURN)
     push_eh $P475
     .lex "self", self
     .lex "$/", param_476
@@ -8735,25 +8871,25 @@
     store_lex "$lastlit", $P482
 .annotate 'line', 58
     find_lex $P484, "$/"
-    unless_null $P484, vivify_159
+    unless_null $P484, vivify_160
     $P484 = root_new ['parrot';'Hash']
-  vivify_159:
+  vivify_160:
     set $P485, $P484["noun"]
-    unless_null $P485, vivify_160
+    unless_null $P485, vivify_161
     new $P485, "Undef"
-  vivify_160:
+  vivify_161:
     defined $I486, $P485
-    unless $I486, for_undef_161
+    unless $I486, for_undef_162
     iter $P483, $P485
     new $P535, 'ExceptionHandler'
     set_addr $P535, loop534_handler
-    $P535."handle_types"(64, 66, 65)
+    $P535."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
     push_eh $P535
   loop534_test:
     unless $P483, loop534_done
     shift $P487, $P483
   loop534_redo:
-    .const 'Sub' $P489 = "36_1274022889.08438" 
+    .const 'Sub' $P489 = "36_1275811482.3686" 
     capture_lex $P489
     $P489($P487)
   loop534_next:
@@ -8762,11 +8898,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P536, exception, 'type'
-    eq $P536, 64, loop534_next
-    eq $P536, 66, loop534_redo
+    eq $P536, .CONTROL_LOOP_NEXT, loop534_next
+    eq $P536, .CONTROL_LOOP_REDO, loop534_redo
   loop534_done:
     pop_eh 
-  for_undef_161:
+  for_undef_162:
 .annotate 'line', 73
     find_lex $P537, "$/"
     find_lex $P538, "$past"
@@ -8782,7 +8918,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block488"  :anon :subid("36_1274022889.08438") :outer("35_1274022889.08438")
+.sub "_block488"  :anon :subid("36_1275811482.3686") :outer("35_1275811482.3686")
     .param pmc param_491
 .annotate 'line', 59
     new $P490, "Undef"
@@ -8816,13 +8952,13 @@
 .annotate 'line', 62
     get_hll_global $P507, ["PAST"], "Node"
     find_lex $P508, "$ast"
-    unless_null $P508, vivify_162
+    unless_null $P508, vivify_163
     $P508 = root_new ['parrot';'ResizablePMCArray']
-  vivify_162:
+  vivify_163:
     set $P509, $P508[0]
-    unless_null $P509, vivify_163
+    unless_null $P509, vivify_164
     new $P509, "Undef"
-  vivify_163:
+  vivify_164:
     $P510 = $P507."ACCEPTS"($P509)
     isfalse $I511, $P510
     new $P499, 'Integer'
@@ -8845,13 +8981,13 @@
 .annotate 'line', 68
     get_hll_global $P527, ["PAST"], "Node"
     find_lex $P528, "$ast"
-    unless_null $P528, vivify_164
+    unless_null $P528, vivify_165
     $P528 = root_new ['parrot';'ResizablePMCArray']
-  vivify_164:
+  vivify_165:
     set $P529, $P528[0]
-    unless_null $P529, vivify_165
+    unless_null $P529, vivify_166
     new $P529, "Undef"
-  vivify_165:
+  vivify_166:
     $P530 = $P527."ACCEPTS"($P529)
     isfalse $I531, $P530
     new $P522, 'Integer'
@@ -8875,27 +9011,27 @@
   if_498:
 .annotate 'line', 63
     find_lex $P512, "$lastlit"
-    unless_null $P512, vivify_166
+    unless_null $P512, vivify_167
     $P512 = root_new ['parrot';'ResizablePMCArray']
-  vivify_166:
+  vivify_167:
     set $P513, $P512[0]
-    unless_null $P513, vivify_167
+    unless_null $P513, vivify_168
     new $P513, "Undef"
-  vivify_167:
+  vivify_168:
     find_lex $P514, "$ast"
-    unless_null $P514, vivify_168
+    unless_null $P514, vivify_169
     $P514 = root_new ['parrot';'ResizablePMCArray']
-  vivify_168:
+  vivify_169:
     set $P515, $P514[0]
-    unless_null $P515, vivify_169
+    unless_null $P515, vivify_170
     new $P515, "Undef"
-  vivify_169:
+  vivify_170:
     concat $P516, $P513, $P515
     find_lex $P517, "$lastlit"
-    unless_null $P517, vivify_170
+    unless_null $P517, vivify_171
     $P517 = root_new ['parrot';'ResizablePMCArray']
     store_lex "$lastlit", $P517
-  vivify_170:
+  vivify_171:
     set $P517[0], $P516
 .annotate 'line', 62
     set $P497, $P516
@@ -8909,14 +9045,15 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantified_atom"  :subid("37_1274022889.08438") :method :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "quantified_atom"  :subid("37_1275811482.3686") :method :outer("11_1275811482.3686")
     .param pmc param_544
 .annotate 'line', 76
-    .const 'Sub' $P553 = "38_1274022889.08438" 
+    .const 'Sub' $P553 = "38_1275811482.3686" 
     capture_lex $P553
     new $P543, 'ExceptionHandler'
     set_addr $P543, control_542
-    $P543."handle_types"(57)
+    $P543."handle_types"(.CONTROL_RETURN)
     push_eh $P543
     .lex "self", self
     .lex "$/", param_544
@@ -8924,112 +9061,112 @@
     new $P545, "Undef"
     .lex "$past", $P545
     find_lex $P546, "$/"
-    unless_null $P546, vivify_171
+    unless_null $P546, vivify_172
     $P546 = root_new ['parrot';'Hash']
-  vivify_171:
+  vivify_172:
     set $P547, $P546["atom"]
-    unless_null $P547, vivify_172
+    unless_null $P547, vivify_173
     new $P547, "Undef"
-  vivify_172:
+  vivify_173:
     $P548 = $P547."ast"()
     store_lex "$past", $P548
 .annotate 'line', 78
     find_lex $P550, "$/"
-    unless_null $P550, vivify_173
+    unless_null $P550, vivify_174
     $P550 = root_new ['parrot';'Hash']
-  vivify_173:
+  vivify_174:
     set $P551, $P550["quantifier"]
-    unless_null $P551, vivify_174
+    unless_null $P551, vivify_175
     new $P551, "Undef"
-  vivify_174:
+  vivify_175:
     if $P551, if_549
 .annotate 'line', 84
-    find_lex $P567, "$/"
-    unless_null $P567, vivify_175
-    $P567 = root_new ['parrot';'Hash']
-  vivify_175:
-    set $P568, $P567["backmod"]
+    find_lex $P568, "$/"
     unless_null $P568, vivify_176
-    $P568 = root_new ['parrot';'ResizablePMCArray']
+    $P568 = root_new ['parrot';'Hash']
   vivify_176:
-    set $P569, $P568[0]
+    set $P569, $P568["backmod"]
     unless_null $P569, vivify_177
-    new $P569, "Undef"
+    $P569 = root_new ['parrot';'ResizablePMCArray']
   vivify_177:
-    unless $P569, if_566_end
-    find_lex $P570, "$past"
-    find_lex $P571, "$/"
-    unless_null $P571, vivify_178
-    $P571 = root_new ['parrot';'Hash']
+    set $P570, $P569[0]
+    unless_null $P570, vivify_178
+    new $P570, "Undef"
   vivify_178:
-    set $P572, $P571["backmod"]
+    unless $P570, if_567_end
+    find_lex $P571, "$past"
+    find_lex $P572, "$/"
     unless_null $P572, vivify_179
-    $P572 = root_new ['parrot';'ResizablePMCArray']
+    $P572 = root_new ['parrot';'Hash']
   vivify_179:
-    set $P573, $P572[0]
+    set $P573, $P572["backmod"]
     unless_null $P573, vivify_180
-    new $P573, "Undef"
+    $P573 = root_new ['parrot';'ResizablePMCArray']
   vivify_180:
-    "backmod"($P570, $P573)
-  if_566_end:
+    set $P574, $P573[0]
+    unless_null $P574, vivify_181
+    new $P574, "Undef"
+  vivify_181:
+    "backmod"($P571, $P574)
+  if_567_end:
     goto if_549_end
   if_549:
 .annotate 'line', 78
-    .const 'Sub' $P553 = "38_1274022889.08438" 
+    .const 'Sub' $P553 = "38_1275811482.3686" 
     capture_lex $P553
     $P553()
   if_549_end:
 .annotate 'line', 85
-    find_lex $P579, "$past"
-    if $P579, if_578
-    set $P577, $P579
-    goto if_578_end
-  if_578:
     find_lex $P580, "$past"
-    $P581 = $P580."backtrack"()
-    isfalse $I582, $P581
-    new $P577, 'Integer'
-    set $P577, $I582
-  if_578_end:
-    if $P577, if_576
-    set $P575, $P577
-    goto if_576_end
-  if_576:
-    get_global $P583, "@MODIFIERS"
-    unless_null $P583, vivify_184
-    $P583 = root_new ['parrot';'ResizablePMCArray']
-  vivify_184:
-    set $P584, $P583[0]
+    if $P580, if_579
+    set $P578, $P580
+    goto if_579_end
+  if_579:
+    find_lex $P581, "$past"
+    $P582 = $P581."backtrack"()
+    isfalse $I583, $P582
+    new $P578, 'Integer'
+    set $P578, $I583
+  if_579_end:
+    if $P578, if_577
+    set $P576, $P578
+    goto if_577_end
+  if_577:
+    get_global $P584, "@MODIFIERS"
     unless_null $P584, vivify_185
-    $P584 = root_new ['parrot';'Hash']
+    $P584 = root_new ['parrot';'ResizablePMCArray']
   vivify_185:
-    set $P585, $P584["r"]
+    set $P585, $P584[0]
     unless_null $P585, vivify_186
-    new $P585, "Undef"
+    $P585 = root_new ['parrot';'Hash']
   vivify_186:
-    set $P575, $P585
-  if_576_end:
-    unless $P575, if_574_end
+    set $P586, $P585["r"]
+    unless_null $P586, vivify_187
+    new $P586, "Undef"
+  vivify_187:
+    set $P576, $P586
+  if_577_end:
+    unless $P576, if_575_end
 .annotate 'line', 86
-    find_lex $P586, "$past"
-    $P586."backtrack"("r")
-  if_574_end:
+    find_lex $P587, "$past"
+    $P587."backtrack"("r")
+  if_575_end:
 .annotate 'line', 88
-    find_lex $P587, "$/"
-    find_lex $P588, "$past"
-    $P589 = $P587."!make"($P588)
+    find_lex $P588, "$/"
+    find_lex $P589, "$past"
+    $P590 = $P588."!make"($P589)
 .annotate 'line', 76
-    .return ($P589)
+    .return ($P590)
   control_542:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P590, exception, "payload"
-    .return ($P590)
+    getattribute $P591, exception, "payload"
+    .return ($P591)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block552"  :anon :subid("38_1274022889.08438") :outer("37_1274022889.08438")
+.sub "_block552"  :anon :subid("38_1275811482.3686") :outer("37_1275811482.3686")
 .annotate 'line', 80
     new $P554, "Undef"
     .lex "$qast", $P554
@@ -9038,1881 +9175,1920 @@
     isfalse $I557, $P556
     unless $I557, if_555_end
     find_lex $P558, "$/"
-    $P558."panic"("Can't quantify zero-width atom")
+    $P559 = $P558."CURSOR"()
+    $P559."panic"("Quantifier follows nothing")
   if_555_end:
 .annotate 'line', 80
-    find_lex $P559, "$/"
-    unless_null $P559, vivify_181
-    $P559 = root_new ['parrot';'Hash']
-  vivify_181:
-    set $P560, $P559["quantifier"]
+    find_lex $P560, "$/"
     unless_null $P560, vivify_182
-    $P560 = root_new ['parrot';'ResizablePMCArray']
+    $P560 = root_new ['parrot';'Hash']
   vivify_182:
-    set $P561, $P560[0]
+    set $P561, $P560["quantifier"]
     unless_null $P561, vivify_183
-    new $P561, "Undef"
+    $P561 = root_new ['parrot';'ResizablePMCArray']
   vivify_183:
-    $P562 = $P561."ast"()
-    store_lex "$qast", $P562
+    set $P562, $P561[0]
+    unless_null $P562, vivify_184
+    new $P562, "Undef"
+  vivify_184:
+    $P563 = $P562."ast"()
+    store_lex "$qast", $P563
 .annotate 'line', 81
-    find_lex $P563, "$qast"
-    find_lex $P564, "$past"
-    $P563."unshift"($P564)
+    find_lex $P564, "$qast"
+    find_lex $P565, "$past"
+    $P564."unshift"($P565)
 .annotate 'line', 82
-    find_lex $P565, "$qast"
-    store_lex "$past", $P565
+    find_lex $P566, "$qast"
+    store_lex "$past", $P566
 .annotate 'line', 78
-    .return ($P565)
+    .return ($P566)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "atom"  :subid("39_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_594
+.include "except_types.pasm"
+.sub "atom"  :subid("39_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_595
 .annotate 'line', 91
-    new $P593, 'ExceptionHandler'
-    set_addr $P593, control_592
-    $P593."handle_types"(57)
-    push_eh $P593
+    new $P594, 'ExceptionHandler'
+    set_addr $P594, control_593
+    $P594."handle_types"(.CONTROL_RETURN)
+    push_eh $P594
     .lex "self", self
-    .lex "$/", param_594
+    .lex "$/", param_595
 .annotate 'line', 92
-    new $P595, "Undef"
-    .lex "$past", $P595
+    new $P596, "Undef"
+    .lex "$past", $P596
 .annotate 'line', 91
-    find_lex $P596, "$past"
+    find_lex $P597, "$past"
 .annotate 'line', 93
-    find_lex $P598, "$/"
-    unless_null $P598, vivify_187
-    $P598 = root_new ['parrot';'Hash']
-  vivify_187:
-    set $P599, $P598["metachar"]
+    find_lex $P599, "$/"
     unless_null $P599, vivify_188
-    new $P599, "Undef"
+    $P599 = root_new ['parrot';'Hash']
   vivify_188:
-    if $P599, if_597
+    set $P600, $P599["metachar"]
+    unless_null $P600, vivify_189
+    new $P600, "Undef"
+  vivify_189:
+    if $P600, if_598
 .annotate 'line', 95
-    get_hll_global $P603, ["PAST"], "Regex"
-    find_lex $P604, "$/"
-    set $S605, $P604
-    find_lex $P606, "$/"
-    $P607 = $P603."new"($S605, "literal" :named("pasttype"), $P606 :named("node"))
-    store_lex "$past", $P607
+    get_hll_global $P604, ["PAST"], "Regex"
+    find_lex $P605, "$/"
+    set $S606, $P605
+    find_lex $P607, "$/"
+    $P608 = $P604."new"($S606, "literal" :named("pasttype"), $P607 :named("node"))
+    store_lex "$past", $P608
 .annotate 'line', 96
-    get_global $P609, "@MODIFIERS"
-    unless_null $P609, vivify_189
-    $P609 = root_new ['parrot';'ResizablePMCArray']
-  vivify_189:
-    set $P610, $P609[0]
+    get_global $P610, "@MODIFIERS"
     unless_null $P610, vivify_190
-    $P610 = root_new ['parrot';'Hash']
+    $P610 = root_new ['parrot';'ResizablePMCArray']
   vivify_190:
-    set $P611, $P610["i"]
+    set $P611, $P610[0]
     unless_null $P611, vivify_191
-    new $P611, "Undef"
+    $P611 = root_new ['parrot';'Hash']
   vivify_191:
-    unless $P611, if_608_end
-    find_lex $P612, "$past"
-    $P612."subtype"("ignorecase")
-  if_608_end:
+    set $P612, $P611["i"]
+    unless_null $P612, vivify_192
+    new $P612, "Undef"
+  vivify_192:
+    unless $P612, if_609_end
+    find_lex $P613, "$past"
+    $P613."subtype"("ignorecase")
+  if_609_end:
 .annotate 'line', 94
-    goto if_597_end
-  if_597:
+    goto if_598_end
+  if_598:
 .annotate 'line', 93
-    find_lex $P600, "$/"
-    unless_null $P600, vivify_192
-    $P600 = root_new ['parrot';'Hash']
-  vivify_192:
-    set $P601, $P600["metachar"]
+    find_lex $P601, "$/"
     unless_null $P601, vivify_193
-    new $P601, "Undef"
+    $P601 = root_new ['parrot';'Hash']
   vivify_193:
-    $P602 = $P601."ast"()
-    store_lex "$past", $P602
-  if_597_end:
+    set $P602, $P601["metachar"]
+    unless_null $P602, vivify_194
+    new $P602, "Undef"
+  vivify_194:
+    $P603 = $P602."ast"()
+    store_lex "$past", $P603
+  if_598_end:
 .annotate 'line', 98
-    find_lex $P613, "$/"
-    find_lex $P614, "$past"
-    $P615 = $P613."!make"($P614)
+    find_lex $P614, "$/"
+    find_lex $P615, "$past"
+    $P616 = $P614."!make"($P615)
 .annotate 'line', 91
-    .return ($P615)
-  control_592:
+    .return ($P616)
+  control_593:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P616, exception, "payload"
-    .return ($P616)
+    getattribute $P617, exception, "payload"
+    .return ($P617)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantifier:sym<*>"  :subid("40_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_620
+.include "except_types.pasm"
+.sub "quantifier:sym<*>"  :subid("40_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_621
 .annotate 'line', 101
-    new $P619, 'ExceptionHandler'
-    set_addr $P619, control_618
-    $P619."handle_types"(57)
-    push_eh $P619
+    new $P620, 'ExceptionHandler'
+    set_addr $P620, control_619
+    $P620."handle_types"(.CONTROL_RETURN)
+    push_eh $P620
     .lex "self", self
-    .lex "$/", param_620
+    .lex "$/", param_621
 .annotate 'line', 102
-    new $P621, "Undef"
-    .lex "$past", $P621
-    get_hll_global $P622, ["PAST"], "Regex"
-    find_lex $P623, "$/"
-    $P624 = $P622."new"("quant" :named("pasttype"), $P623 :named("node"))
-    store_lex "$past", $P624
+    new $P622, "Undef"
+    .lex "$past", $P622
+    get_hll_global $P623, ["PAST"], "Regex"
+    find_lex $P624, "$/"
+    $P625 = $P623."new"("quant" :named("pasttype"), $P624 :named("node"))
+    store_lex "$past", $P625
 .annotate 'line', 103
-    find_lex $P625, "$/"
-    find_lex $P626, "$past"
-    find_lex $P627, "$/"
-    unless_null $P627, vivify_194
-    $P627 = root_new ['parrot';'Hash']
-  vivify_194:
-    set $P628, $P627["backmod"]
+    find_lex $P626, "$/"
+    find_lex $P627, "$past"
+    find_lex $P628, "$/"
     unless_null $P628, vivify_195
-    new $P628, "Undef"
+    $P628 = root_new ['parrot';'Hash']
   vivify_195:
-    $P629 = "backmod"($P626, $P628)
-    $P630 = $P625."!make"($P629)
+    set $P629, $P628["backmod"]
+    unless_null $P629, vivify_196
+    new $P629, "Undef"
+  vivify_196:
+    $P630 = "backmod"($P627, $P629)
+    $P631 = $P626."!make"($P630)
 .annotate 'line', 101
-    .return ($P630)
-  control_618:
+    .return ($P631)
+  control_619:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P631, exception, "payload"
-    .return ($P631)
+    getattribute $P632, exception, "payload"
+    .return ($P632)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantifier:sym<+>"  :subid("41_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_635
+.include "except_types.pasm"
+.sub "quantifier:sym<+>"  :subid("41_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_636
 .annotate 'line', 106
-    new $P634, 'ExceptionHandler'
-    set_addr $P634, control_633
-    $P634."handle_types"(57)
-    push_eh $P634
+    new $P635, 'ExceptionHandler'
+    set_addr $P635, control_634
+    $P635."handle_types"(.CONTROL_RETURN)
+    push_eh $P635
     .lex "self", self
-    .lex "$/", param_635
+    .lex "$/", param_636
 .annotate 'line', 107
-    new $P636, "Undef"
-    .lex "$past", $P636
-    get_hll_global $P637, ["PAST"], "Regex"
-    find_lex $P638, "$/"
-    $P639 = $P637."new"("quant" :named("pasttype"), 1 :named("min"), $P638 :named("node"))
-    store_lex "$past", $P639
+    new $P637, "Undef"
+    .lex "$past", $P637
+    get_hll_global $P638, ["PAST"], "Regex"
+    find_lex $P639, "$/"
+    $P640 = $P638."new"("quant" :named("pasttype"), 1 :named("min"), $P639 :named("node"))
+    store_lex "$past", $P640
 .annotate 'line', 108
-    find_lex $P640, "$/"
-    find_lex $P641, "$past"
-    find_lex $P642, "$/"
-    unless_null $P642, vivify_196
-    $P642 = root_new ['parrot';'Hash']
-  vivify_196:
-    set $P643, $P642["backmod"]
+    find_lex $P641, "$/"
+    find_lex $P642, "$past"
+    find_lex $P643, "$/"
     unless_null $P643, vivify_197
-    new $P643, "Undef"
+    $P643 = root_new ['parrot';'Hash']
   vivify_197:
-    $P644 = "backmod"($P641, $P643)
-    $P645 = $P640."!make"($P644)
+    set $P644, $P643["backmod"]
+    unless_null $P644, vivify_198
+    new $P644, "Undef"
+  vivify_198:
+    $P645 = "backmod"($P642, $P644)
+    $P646 = $P641."!make"($P645)
 .annotate 'line', 106
-    .return ($P645)
-  control_633:
+    .return ($P646)
+  control_634:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P646, exception, "payload"
-    .return ($P646)
+    getattribute $P647, exception, "payload"
+    .return ($P647)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantifier:sym<?>"  :subid("42_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_650
+.include "except_types.pasm"
+.sub "quantifier:sym<?>"  :subid("42_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_651
 .annotate 'line', 111
-    new $P649, 'ExceptionHandler'
-    set_addr $P649, control_648
-    $P649."handle_types"(57)
-    push_eh $P649
+    new $P650, 'ExceptionHandler'
+    set_addr $P650, control_649
+    $P650."handle_types"(.CONTROL_RETURN)
+    push_eh $P650
     .lex "self", self
-    .lex "$/", param_650
+    .lex "$/", param_651
 .annotate 'line', 112
-    new $P651, "Undef"
-    .lex "$past", $P651
-    get_hll_global $P652, ["PAST"], "Regex"
-    find_lex $P653, "$/"
-    $P654 = $P652."new"("quant" :named("pasttype"), 0 :named("min"), 1 :named("max"), $P653 :named("node"))
-    store_lex "$past", $P654
+    new $P652, "Undef"
+    .lex "$past", $P652
+    get_hll_global $P653, ["PAST"], "Regex"
+    find_lex $P654, "$/"
+    $P655 = $P653."new"("quant" :named("pasttype"), 0 :named("min"), 1 :named("max"), $P654 :named("node"))
+    store_lex "$past", $P655
 .annotate 'line', 113
-    find_lex $P655, "$/"
-    find_lex $P656, "$past"
-    find_lex $P657, "$/"
-    unless_null $P657, vivify_198
-    $P657 = root_new ['parrot';'Hash']
-  vivify_198:
-    set $P658, $P657["backmod"]
+    find_lex $P656, "$/"
+    find_lex $P657, "$past"
+    find_lex $P658, "$/"
     unless_null $P658, vivify_199
-    new $P658, "Undef"
+    $P658 = root_new ['parrot';'Hash']
   vivify_199:
-    $P659 = "backmod"($P656, $P658)
-    $P655."!make"($P659)
+    set $P659, $P658["backmod"]
+    unless_null $P659, vivify_200
+    new $P659, "Undef"
+  vivify_200:
+    $P660 = "backmod"($P657, $P659)
+    $P656."!make"($P660)
 .annotate 'line', 114
-    find_lex $P660, "$/"
-    find_lex $P661, "$past"
-    $P662 = $P660."!make"($P661)
+    find_lex $P661, "$/"
+    find_lex $P662, "$past"
+    $P663 = $P661."!make"($P662)
 .annotate 'line', 111
-    .return ($P662)
-  control_648:
+    .return ($P663)
+  control_649:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P663, exception, "payload"
-    .return ($P663)
+    getattribute $P664, exception, "payload"
+    .return ($P664)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantifier:sym<**>"  :subid("43_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_667
+.include "except_types.pasm"
+.sub "quantifier:sym<**>"  :subid("43_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_668
 .annotate 'line', 117
-    new $P666, 'ExceptionHandler'
-    set_addr $P666, control_665
-    $P666."handle_types"(57)
-    push_eh $P666
+    .const 'Sub' $P683 = "44_1275811482.3686" 
+    capture_lex $P683
+    new $P667, 'ExceptionHandler'
+    set_addr $P667, control_666
+    $P667."handle_types"(.CONTROL_RETURN)
+    push_eh $P667
     .lex "self", self
-    .lex "$/", param_667
+    .lex "$/", param_668
 .annotate 'line', 118
-    new $P668, "Undef"
-    .lex "$past", $P668
+    new $P669, "Undef"
+    .lex "$past", $P669
+.annotate 'line', 119
+    new $P670, "Undef"
+    .lex "$ws", $P670
 .annotate 'line', 117
-    find_lex $P669, "$past"
+    find_lex $P671, "$past"
 .annotate 'line', 119
-    find_lex $P671, "$/"
-    unless_null $P671, vivify_200
-    $P671 = root_new ['parrot';'Hash']
-  vivify_200:
-    set $P672, $P671["quantified_atom"]
-    unless_null $P672, vivify_201
-    new $P672, "Undef"
+    find_lex $P674, "$/"
+    unless_null $P674, vivify_201
+    $P674 = root_new ['parrot';'Hash']
   vivify_201:
-    if $P672, if_670
-.annotate 'line', 124
-    get_hll_global $P679, ["PAST"], "Regex"
-    find_lex $P680, "$/"
-    unless_null $P680, vivify_202
-    $P680 = root_new ['parrot';'Hash']
+    set $P675, $P674["normspace"]
+    unless_null $P675, vivify_202
+    new $P675, "Undef"
   vivify_202:
-    set $P681, $P680["min"]
-    unless_null $P681, vivify_203
-    new $P681, "Undef"
+    if $P675, if_673
+    set $P672, $P675
+    goto if_673_end
+  if_673:
+    get_global $P676, "@MODIFIERS"
+    unless_null $P676, vivify_203
+    $P676 = root_new ['parrot';'ResizablePMCArray']
   vivify_203:
-    set $N682, $P681
-    find_lex $P683, "$/"
-    $P684 = $P679."new"("quant" :named("pasttype"), $N682 :named("min"), $P683 :named("node"))
-    store_lex "$past", $P684
-.annotate 'line', 125
-    find_lex $P686, "$/"
-    unless_null $P686, vivify_204
-    $P686 = root_new ['parrot';'Hash']
+    set $P677, $P676[0]
+    unless_null $P677, vivify_204
+    $P677 = root_new ['parrot';'Hash']
   vivify_204:
-    set $P687, $P686["max"]
-    unless_null $P687, vivify_205
-    new $P687, "Undef"
+    set $P678, $P677["s"]
+    unless_null $P678, vivify_205
+    new $P678, "Undef"
   vivify_205:
-    isfalse $I688, $P687
-    if $I688, if_685
-.annotate 'line', 126
-    find_lex $P694, "$/"
-    unless_null $P694, vivify_206
-    $P694 = root_new ['parrot';'Hash']
+    set $P672, $P678
+  if_673_end:
+    store_lex "$ws", $P672
+.annotate 'line', 120
+    find_lex $P680, "$/"
+    unless_null $P680, vivify_206
+    $P680 = root_new ['parrot';'Hash']
   vivify_206:
-    set $P695, $P694["max"]
-    unless_null $P695, vivify_207
-    $P695 = root_new ['parrot';'ResizablePMCArray']
+    set $P681, $P680["quantified_atom"]
+    unless_null $P681, vivify_207
+    new $P681, "Undef"
   vivify_207:
-    set $P696, $P695[0]
-    unless_null $P696, vivify_208
-    new $P696, "Undef"
+    if $P681, if_679
+.annotate 'line', 136
+    get_hll_global $P701, ["PAST"], "Regex"
+    find_lex $P702, "$/"
+    unless_null $P702, vivify_208
+    $P702 = root_new ['parrot';'Hash']
   vivify_208:
-    set $S697, $P696
-    isne $I698, $S697, "*"
-    unless $I698, if_693_end
-    find_lex $P699, "$past"
-    find_lex $P700, "$/"
-    unless_null $P700, vivify_209
-    $P700 = root_new ['parrot';'Hash']
+    set $P703, $P702["min"]
+    unless_null $P703, vivify_209
+    new $P703, "Undef"
   vivify_209:
-    set $P701, $P700["max"]
-    unless_null $P701, vivify_210
-    $P701 = root_new ['parrot';'ResizablePMCArray']
+    set $N704, $P703
+    find_lex $P705, "$/"
+    $P706 = $P701."new"("quant" :named("pasttype"), $N704 :named("min"), $P705 :named("node"))
+    store_lex "$past", $P706
+.annotate 'line', 137
+    find_lex $P708, "$/"
+    unless_null $P708, vivify_210
+    $P708 = root_new ['parrot';'Hash']
   vivify_210:
-    set $P702, $P701[0]
-    unless_null $P702, vivify_211
-    new $P702, "Undef"
+    set $P709, $P708["max"]
+    unless_null $P709, vivify_211
+    new $P709, "Undef"
   vivify_211:
-    set $N703, $P702
-    $P699."max"($N703)
-  if_693_end:
-    goto if_685_end
-  if_685:
-.annotate 'line', 125
-    find_lex $P689, "$past"
-    find_lex $P690, "$/"
-    unless_null $P690, vivify_212
-    $P690 = root_new ['parrot';'Hash']
+    isfalse $I710, $P709
+    if $I710, if_707
+.annotate 'line', 138
+    find_lex $P716, "$/"
+    unless_null $P716, vivify_212
+    $P716 = root_new ['parrot';'Hash']
   vivify_212:
-    set $P691, $P690["min"]
-    unless_null $P691, vivify_213
-    new $P691, "Undef"
+    set $P717, $P716["max"]
+    unless_null $P717, vivify_213
+    $P717 = root_new ['parrot';'ResizablePMCArray']
   vivify_213:
-    set $N692, $P691
-    $P689."max"($N692)
-  if_685_end:
-.annotate 'line', 123
-    goto if_670_end
-  if_670:
-.annotate 'line', 120
-    get_hll_global $P673, ["PAST"], "Regex"
-.annotate 'line', 121
-    find_lex $P674, "$/"
-    unless_null $P674, vivify_214
-    $P674 = root_new ['parrot';'Hash']
+    set $P718, $P717[0]
+    unless_null $P718, vivify_214
+    new $P718, "Undef"
   vivify_214:
-    set $P675, $P674["quantified_atom"]
-    unless_null $P675, vivify_215
-    new $P675, "Undef"
+    set $S719, $P718
+    isne $I720, $S719, "*"
+    unless $I720, if_715_end
+    find_lex $P721, "$past"
+    find_lex $P722, "$/"
+    unless_null $P722, vivify_215
+    $P722 = root_new ['parrot';'Hash']
   vivify_215:
-    $P676 = $P675."ast"()
-    find_lex $P677, "$/"
-    $P678 = $P673."new"("quant" :named("pasttype"), 1 :named("min"), $P676 :named("sep"), $P677 :named("node"))
-.annotate 'line', 120
-    store_lex "$past", $P678
-  if_670_end:
-.annotate 'line', 128
-    find_lex $P704, "$/"
-    find_lex $P705, "$past"
-    find_lex $P706, "$/"
-    unless_null $P706, vivify_216
-    $P706 = root_new ['parrot';'Hash']
+    set $P723, $P722["max"]
+    unless_null $P723, vivify_216
+    $P723 = root_new ['parrot';'ResizablePMCArray']
   vivify_216:
-    set $P707, $P706["backmod"]
-    unless_null $P707, vivify_217
-    new $P707, "Undef"
+    set $P724, $P723[0]
+    unless_null $P724, vivify_217
+    new $P724, "Undef"
   vivify_217:
-    $P708 = "backmod"($P705, $P707)
-    $P709 = $P704."!make"($P708)
-.annotate 'line', 117
-    .return ($P709)
-  control_665:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P710, exception, "payload"
-    .return ($P710)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<ws>"  :subid("44_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_714
-.annotate 'line', 131
-    new $P713, 'ExceptionHandler'
-    set_addr $P713, control_712
-    $P713."handle_types"(57)
-    push_eh $P713
-    .lex "self", self
-    .lex "$/", param_714
-.annotate 'line', 132
-    new $P715, "Undef"
-    .lex "$past", $P715
-.annotate 'line', 133
-    get_global $P718, "@MODIFIERS"
-    unless_null $P718, vivify_218
-    $P718 = root_new ['parrot';'ResizablePMCArray']
+    set $N725, $P724
+    $P721."max"($N725)
+  if_715_end:
+    goto if_707_end
+  if_707:
+.annotate 'line', 137
+    find_lex $P711, "$past"
+    find_lex $P712, "$/"
+    unless_null $P712, vivify_218
+    $P712 = root_new ['parrot';'Hash']
   vivify_218:
-    set $P719, $P718[0]
-    unless_null $P719, vivify_219
-    $P719 = root_new ['parrot';'Hash']
+    set $P713, $P712["min"]
+    unless_null $P713, vivify_219
+    new $P713, "Undef"
   vivify_219:
-    set $P720, $P719["s"]
-    unless_null $P720, vivify_220
-    new $P720, "Undef"
-  vivify_220:
-    if $P720, if_717
-    new $P724, "Integer"
-    assign $P724, 0
-    set $P716, $P724
-    goto if_717_end
-  if_717:
-    get_hll_global $P721, ["PAST"], "Regex"
-    find_lex $P722, "$/"
-    $P723 = $P721."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"), $P722 :named("node"))
-    set $P716, $P723
-  if_717_end:
-    store_lex "$past", $P716
-.annotate 'line', 136
-    find_lex $P725, "$/"
-    find_lex $P726, "$past"
-    $P727 = $P725."!make"($P726)
-.annotate 'line', 131
-    .return ($P727)
-  control_712:
+    set $N714, $P713
+    $P711."max"($N714)
+  if_707_end:
+.annotate 'line', 139
+    find_lex $P727, "$ws"
+    unless $P727, if_726_end
+    find_lex $P728, "$past"
+    get_hll_global $P729, ["PAST"], "Regex"
+    $P730 = $P729."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
+    $P728."sep"($P730)
+  if_726_end:
+.annotate 'line', 135
+    goto if_679_end
+  if_679:
+.annotate 'line', 120
+    .const 'Sub' $P683 = "44_1275811482.3686" 
+    capture_lex $P683
+    $P683()
+  if_679_end:
+.annotate 'line', 143
+    find_lex $P731, "$/"
+    find_lex $P732, "$past"
+    find_lex $P733, "$/"
+    unless_null $P733, vivify_222
+    $P733 = root_new ['parrot';'Hash']
+  vivify_222:
+    set $P734, $P733["backmod"]
+    unless_null $P734, vivify_223
+    new $P734, "Undef"
+  vivify_223:
+    $P735 = "backmod"($P732, $P734)
+    $P736 = $P731."!make"($P735)
+.annotate 'line', 117
+    .return ($P736)
+  control_666:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P728, exception, "payload"
-    .return ($P728)
+    getattribute $P737, exception, "payload"
+    .return ($P737)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<[ ]>"  :subid("45_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_732
-.annotate 'line', 140
-    new $P731, 'ExceptionHandler'
-    set_addr $P731, control_730
-    $P731."handle_types"(57)
-    push_eh $P731
-    .lex "self", self
-    .lex "$/", param_732
-.annotate 'line', 141
-    find_lex $P733, "$/"
-    find_lex $P734, "$/"
-    unless_null $P734, vivify_221
-    $P734 = root_new ['parrot';'Hash']
+.sub "_block682"  :anon :subid("44_1275811482.3686") :outer("43_1275811482.3686")
+.annotate 'line', 121
+    new $P684, "Undef"
+    .lex "$ast", $P684
+    find_lex $P685, "$/"
+    unless_null $P685, vivify_220
+    $P685 = root_new ['parrot';'Hash']
+  vivify_220:
+    set $P686, $P685["quantified_atom"]
+    unless_null $P686, vivify_221
+    new $P686, "Undef"
   vivify_221:
-    set $P735, $P734["nibbler"]
-    unless_null $P735, vivify_222
-    new $P735, "Undef"
-  vivify_222:
-    $P736 = $P735."ast"()
-    $P737 = $P733."!make"($P736)
-.annotate 'line', 140
-    .return ($P737)
-  control_730:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P738, exception, "payload"
-    .return ($P738)
+    $P687 = $P686."ast"()
+    store_lex "$ast", $P687
+.annotate 'line', 122
+    find_lex $P689, "$ws"
+    unless $P689, if_688_end
+.annotate 'line', 123
+    get_hll_global $P690, ["PAST"], "Regex"
+.annotate 'line', 125
+    get_hll_global $P691, ["PAST"], "Regex"
+    $P692 = $P691."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
+    find_lex $P693, "$ast"
+.annotate 'line', 128
+    get_hll_global $P694, ["PAST"], "Regex"
+    $P695 = $P694."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
+    $P696 = $P690."new"($P692, $P693, $P695, "concat" :named("pasttype"))
+.annotate 'line', 123
+    store_lex "$ast", $P696
+  if_688_end:
+.annotate 'line', 132
+    get_hll_global $P697, ["PAST"], "Regex"
+    find_lex $P698, "$ast"
+    find_lex $P699, "$/"
+    $P700 = $P697."new"("quant" :named("pasttype"), 1 :named("min"), $P698 :named("sep"), $P699 :named("node"))
+    store_lex "$past", $P700
+.annotate 'line', 120
+    .return ($P700)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<( )>"  :subid("46_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_742
-.annotate 'line', 144
-    new $P741, 'ExceptionHandler'
-    set_addr $P741, control_740
-    $P741."handle_types"(57)
-    push_eh $P741
-    .lex "self", self
-    .lex "$/", param_742
-.annotate 'line', 145
-    new $P743, "Undef"
-    .lex "$subpast", $P743
+.include "except_types.pasm"
+.sub "metachar:sym<ws>"  :subid("45_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_741
 .annotate 'line', 146
-    new $P744, "Undef"
-    .lex "$past", $P744
-.annotate 'line', 145
-    find_lex $P745, "$/"
-    unless_null $P745, vivify_223
-    $P745 = root_new ['parrot';'Hash']
-  vivify_223:
-    set $P746, $P745["nibbler"]
-    unless_null $P746, vivify_224
-    new $P746, "Undef"
+    new $P740, 'ExceptionHandler'
+    set_addr $P740, control_739
+    $P740."handle_types"(.CONTROL_RETURN)
+    push_eh $P740
+    .lex "self", self
+    .lex "$/", param_741
+.annotate 'line', 147
+    new $P742, "Undef"
+    .lex "$past", $P742
+.annotate 'line', 148
+    get_global $P745, "@MODIFIERS"
+    unless_null $P745, vivify_224
+    $P745 = root_new ['parrot';'ResizablePMCArray']
   vivify_224:
-    $P747 = $P746."ast"()
-    $P748 = "buildsub"($P747)
-    store_lex "$subpast", $P748
+    set $P746, $P745[0]
+    unless_null $P746, vivify_225
+    $P746 = root_new ['parrot';'Hash']
+  vivify_225:
+    set $P747, $P746["s"]
+    unless_null $P747, vivify_226
+    new $P747, "Undef"
+  vivify_226:
+    if $P747, if_744
+    new $P751, "Integer"
+    assign $P751, 0
+    set $P743, $P751
+    goto if_744_end
+  if_744:
+    get_hll_global $P748, ["PAST"], "Regex"
+    find_lex $P749, "$/"
+    $P750 = $P748."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"), $P749 :named("node"))
+    set $P743, $P750
+  if_744_end:
+    store_lex "$past", $P743
+.annotate 'line', 151
+    find_lex $P752, "$/"
+    find_lex $P753, "$past"
+    $P754 = $P752."!make"($P753)
 .annotate 'line', 146
-    get_hll_global $P749, ["PAST"], "Regex"
-    find_lex $P750, "$subpast"
-    find_lex $P751, "$/"
-    $P752 = $P749."new"($P750, "subrule" :named("pasttype"), "capture" :named("subtype"), $P751 :named("node"))
-    store_lex "$past", $P752
-.annotate 'line', 148
-    find_lex $P753, "$/"
-    find_lex $P754, "$past"
-    $P755 = $P753."!make"($P754)
-.annotate 'line', 144
-    .return ($P755)
-  control_740:
+    .return ($P754)
+  control_739:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P756, exception, "payload"
-    .return ($P756)
+    getattribute $P755, exception, "payload"
+    .return ($P755)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<'>"  :subid("47_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_760
-.annotate 'line', 151
-    new $P759, 'ExceptionHandler'
-    set_addr $P759, control_758
-    $P759."handle_types"(57)
-    push_eh $P759
-    .lex "self", self
-    .lex "$/", param_760
-.annotate 'line', 152
-    new $P761, "Undef"
-    .lex "$quote", $P761
-.annotate 'line', 154
+.include "except_types.pasm"
+.sub "metachar:sym<[ ]>"  :subid("46_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_759
+.annotate 'line', 155
+    new $P758, 'ExceptionHandler'
+    set_addr $P758, control_757
+    $P758."handle_types"(.CONTROL_RETURN)
+    push_eh $P758
+    .lex "self", self
+    .lex "$/", param_759
+.annotate 'line', 156
+    find_lex $P760, "$/"
+    find_lex $P761, "$/"
+    unless_null $P761, vivify_227
+    $P761 = root_new ['parrot';'Hash']
+  vivify_227:
+    set $P762, $P761["nibbler"]
+    unless_null $P762, vivify_228
     new $P762, "Undef"
-    .lex "$past", $P762
-.annotate 'line', 152
-    find_lex $P763, "$/"
-    unless_null $P763, vivify_225
-    $P763 = root_new ['parrot';'Hash']
-  vivify_225:
-    set $P764, $P763["quote_EXPR"]
-    unless_null $P764, vivify_226
-    new $P764, "Undef"
-  vivify_226:
-    $P765 = $P764."ast"()
-    store_lex "$quote", $P765
-.annotate 'line', 153
-    get_hll_global $P767, ["PAST"], "Val"
-    find_lex $P768, "$quote"
-    $P769 = $P767."ACCEPTS"($P768)
-    unless $P769, if_766_end
-    find_lex $P770, "$quote"
-    $P771 = $P770."value"()
-    store_lex "$quote", $P771
-  if_766_end:
-.annotate 'line', 154
-    get_hll_global $P772, ["PAST"], "Regex"
-    find_lex $P773, "$quote"
-    find_lex $P774, "$/"
-    $P775 = $P772."new"($P773, "literal" :named("pasttype"), $P774 :named("node"))
-    store_lex "$past", $P775
+  vivify_228:
+    $P763 = $P762."ast"()
+    $P764 = $P760."!make"($P763)
 .annotate 'line', 155
-    find_lex $P776, "$/"
-    find_lex $P777, "$past"
-    $P778 = $P776."!make"($P777)
-.annotate 'line', 151
-    .return ($P778)
-  control_758:
+    .return ($P764)
+  control_757:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P779, exception, "payload"
-    .return ($P779)
+    getattribute $P765, exception, "payload"
+    .return ($P765)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<\">"  :subid("48_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_783
-.annotate 'line', 158
-    new $P782, 'ExceptionHandler'
-    set_addr $P782, control_781
-    $P782."handle_types"(57)
-    push_eh $P782
-    .lex "self", self
-    .lex "$/", param_783
+.include "except_types.pasm"
+.sub "metachar:sym<( )>"  :subid("47_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_769
 .annotate 'line', 159
-    new $P784, "Undef"
-    .lex "$quote", $P784
+    new $P768, 'ExceptionHandler'
+    set_addr $P768, control_767
+    $P768."handle_types"(.CONTROL_RETURN)
+    push_eh $P768
+    .lex "self", self
+    .lex "$/", param_769
+.annotate 'line', 160
+    new $P770, "Undef"
+    .lex "$subpast", $P770
 .annotate 'line', 161
-    new $P785, "Undef"
-    .lex "$past", $P785
-.annotate 'line', 159
-    find_lex $P786, "$/"
-    unless_null $P786, vivify_227
-    $P786 = root_new ['parrot';'Hash']
-  vivify_227:
-    set $P787, $P786["quote_EXPR"]
-    unless_null $P787, vivify_228
-    new $P787, "Undef"
-  vivify_228:
-    $P788 = $P787."ast"()
-    store_lex "$quote", $P788
+    new $P771, "Undef"
+    .lex "$past", $P771
 .annotate 'line', 160
-    get_hll_global $P790, ["PAST"], "Val"
-    find_lex $P791, "$quote"
-    $P792 = $P790."ACCEPTS"($P791)
-    unless $P792, if_789_end
-    find_lex $P793, "$quote"
-    $P794 = $P793."value"()
-    store_lex "$quote", $P794
-  if_789_end:
+    find_lex $P772, "$/"
+    unless_null $P772, vivify_229
+    $P772 = root_new ['parrot';'Hash']
+  vivify_229:
+    set $P773, $P772["nibbler"]
+    unless_null $P773, vivify_230
+    new $P773, "Undef"
+  vivify_230:
+    $P774 = $P773."ast"()
+    $P775 = "buildsub"($P774)
+    store_lex "$subpast", $P775
 .annotate 'line', 161
-    get_hll_global $P795, ["PAST"], "Regex"
-    find_lex $P796, "$quote"
-    find_lex $P797, "$/"
-    $P798 = $P795."new"($P796, "literal" :named("pasttype"), $P797 :named("node"))
-    store_lex "$past", $P798
-.annotate 'line', 162
-    find_lex $P799, "$/"
-    find_lex $P800, "$past"
-    $P801 = $P799."!make"($P800)
-.annotate 'line', 158
-    .return ($P801)
-  control_781:
+    get_hll_global $P776, ["PAST"], "Regex"
+    find_lex $P777, "$subpast"
+    find_lex $P778, "$/"
+    $P779 = $P776."new"($P777, "subrule" :named("pasttype"), "capture" :named("subtype"), $P778 :named("node"))
+    store_lex "$past", $P779
+.annotate 'line', 163
+    find_lex $P780, "$/"
+    find_lex $P781, "$past"
+    $P782 = $P780."!make"($P781)
+.annotate 'line', 159
+    .return ($P782)
+  control_767:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P802, exception, "payload"
-    .return ($P802)
+    getattribute $P783, exception, "payload"
+    .return ($P783)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<.>"  :subid("49_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_806
-.annotate 'line', 165
-    new $P805, 'ExceptionHandler'
-    set_addr $P805, control_804
-    $P805."handle_types"(57)
-    push_eh $P805
-    .lex "self", self
-    .lex "$/", param_806
+.include "except_types.pasm"
+.sub "metachar:sym<'>"  :subid("48_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_787
 .annotate 'line', 166
-    new $P807, "Undef"
-    .lex "$past", $P807
-    get_hll_global $P808, ["PAST"], "Regex"
-    find_lex $P809, "$/"
-    $P810 = $P808."new"("charclass" :named("pasttype"), "." :named("subtype"), $P809 :named("node"))
-    store_lex "$past", $P810
-.annotate 'line', 167
-    find_lex $P811, "$/"
-    find_lex $P812, "$past"
-    $P813 = $P811."!make"($P812)
-.annotate 'line', 165
-    .return ($P813)
-  control_804:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P814, exception, "payload"
-    .return ($P814)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<^>"  :subid("50_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_818
-.annotate 'line', 170
-    new $P817, 'ExceptionHandler'
-    set_addr $P817, control_816
-    $P817."handle_types"(57)
-    push_eh $P817
+    new $P786, 'ExceptionHandler'
+    set_addr $P786, control_785
+    $P786."handle_types"(.CONTROL_RETURN)
+    push_eh $P786
     .lex "self", self
-    .lex "$/", param_818
-.annotate 'line', 171
-    new $P819, "Undef"
-    .lex "$past", $P819
-    get_hll_global $P820, ["PAST"], "Regex"
-    find_lex $P821, "$/"
-    $P822 = $P820."new"("anchor" :named("pasttype"), "bos" :named("subtype"), $P821 :named("node"))
-    store_lex "$past", $P822
-.annotate 'line', 172
-    find_lex $P823, "$/"
-    find_lex $P824, "$past"
-    $P825 = $P823."!make"($P824)
+    .lex "$/", param_787
+.annotate 'line', 167
+    new $P788, "Undef"
+    .lex "$quote", $P788
+.annotate 'line', 169
+    new $P789, "Undef"
+    .lex "$past", $P789
+.annotate 'line', 167
+    find_lex $P790, "$/"
+    unless_null $P790, vivify_231
+    $P790 = root_new ['parrot';'Hash']
+  vivify_231:
+    set $P791, $P790["quote_EXPR"]
+    unless_null $P791, vivify_232
+    new $P791, "Undef"
+  vivify_232:
+    $P792 = $P791."ast"()
+    store_lex "$quote", $P792
+.annotate 'line', 168
+    get_hll_global $P794, ["PAST"], "Val"
+    find_lex $P795, "$quote"
+    $P796 = $P794."ACCEPTS"($P795)
+    unless $P796, if_793_end
+    find_lex $P797, "$quote"
+    $P798 = $P797."value"()
+    store_lex "$quote", $P798
+  if_793_end:
+.annotate 'line', 169
+    get_hll_global $P799, ["PAST"], "Regex"
+    find_lex $P800, "$quote"
+    find_lex $P801, "$/"
+    $P802 = $P799."new"($P800, "literal" :named("pasttype"), $P801 :named("node"))
+    store_lex "$past", $P802
 .annotate 'line', 170
-    .return ($P825)
-  control_816:
+    find_lex $P803, "$/"
+    find_lex $P804, "$past"
+    $P805 = $P803."!make"($P804)
+.annotate 'line', 166
+    .return ($P805)
+  control_785:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P826, exception, "payload"
-    .return ($P826)
+    getattribute $P806, exception, "payload"
+    .return ($P806)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<^^>"  :subid("51_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_830
-.annotate 'line', 175
-    new $P829, 'ExceptionHandler'
-    set_addr $P829, control_828
-    $P829."handle_types"(57)
-    push_eh $P829
+.include "except_types.pasm"
+.sub "metachar:sym<\">"  :subid("49_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_810
+.annotate 'line', 173
+    new $P809, 'ExceptionHandler'
+    set_addr $P809, control_808
+    $P809."handle_types"(.CONTROL_RETURN)
+    push_eh $P809
     .lex "self", self
-    .lex "$/", param_830
+    .lex "$/", param_810
+.annotate 'line', 174
+    new $P811, "Undef"
+    .lex "$quote", $P811
 .annotate 'line', 176
-    new $P831, "Undef"
-    .lex "$past", $P831
-    get_hll_global $P832, ["PAST"], "Regex"
-    find_lex $P833, "$/"
-    $P834 = $P832."new"("anchor" :named("pasttype"), "bol" :named("subtype"), $P833 :named("node"))
-    store_lex "$past", $P834
-.annotate 'line', 177
-    find_lex $P835, "$/"
-    find_lex $P836, "$past"
-    $P837 = $P835."!make"($P836)
+    new $P812, "Undef"
+    .lex "$past", $P812
+.annotate 'line', 174
+    find_lex $P813, "$/"
+    unless_null $P813, vivify_233
+    $P813 = root_new ['parrot';'Hash']
+  vivify_233:
+    set $P814, $P813["quote_EXPR"]
+    unless_null $P814, vivify_234
+    new $P814, "Undef"
+  vivify_234:
+    $P815 = $P814."ast"()
+    store_lex "$quote", $P815
 .annotate 'line', 175
-    .return ($P837)
-  control_828:
+    get_hll_global $P817, ["PAST"], "Val"
+    find_lex $P818, "$quote"
+    $P819 = $P817."ACCEPTS"($P818)
+    unless $P819, if_816_end
+    find_lex $P820, "$quote"
+    $P821 = $P820."value"()
+    store_lex "$quote", $P821
+  if_816_end:
+.annotate 'line', 176
+    get_hll_global $P822, ["PAST"], "Regex"
+    find_lex $P823, "$quote"
+    find_lex $P824, "$/"
+    $P825 = $P822."new"($P823, "literal" :named("pasttype"), $P824 :named("node"))
+    store_lex "$past", $P825
+.annotate 'line', 177
+    find_lex $P826, "$/"
+    find_lex $P827, "$past"
+    $P828 = $P826."!make"($P827)
+.annotate 'line', 173
+    .return ($P828)
+  control_808:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P838, exception, "payload"
-    .return ($P838)
+    getattribute $P829, exception, "payload"
+    .return ($P829)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<$>"  :subid("52_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_842
+.include "except_types.pasm"
+.sub "metachar:sym<.>"  :subid("50_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_833
 .annotate 'line', 180
-    new $P841, 'ExceptionHandler'
-    set_addr $P841, control_840
-    $P841."handle_types"(57)
-    push_eh $P841
+    new $P832, 'ExceptionHandler'
+    set_addr $P832, control_831
+    $P832."handle_types"(.CONTROL_RETURN)
+    push_eh $P832
     .lex "self", self
-    .lex "$/", param_842
+    .lex "$/", param_833
 .annotate 'line', 181
-    new $P843, "Undef"
-    .lex "$past", $P843
-    get_hll_global $P844, ["PAST"], "Regex"
-    find_lex $P845, "$/"
-    $P846 = $P844."new"("anchor" :named("pasttype"), "eos" :named("subtype"), $P845 :named("node"))
-    store_lex "$past", $P846
+    new $P834, "Undef"
+    .lex "$past", $P834
+    get_hll_global $P835, ["PAST"], "Regex"
+    find_lex $P836, "$/"
+    $P837 = $P835."new"("charclass" :named("pasttype"), "." :named("subtype"), $P836 :named("node"))
+    store_lex "$past", $P837
 .annotate 'line', 182
-    find_lex $P847, "$/"
-    find_lex $P848, "$past"
-    $P849 = $P847."!make"($P848)
+    find_lex $P838, "$/"
+    find_lex $P839, "$past"
+    $P840 = $P838."!make"($P839)
 .annotate 'line', 180
-    .return ($P849)
-  control_840:
+    .return ($P840)
+  control_831:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P850, exception, "payload"
-    .return ($P850)
+    getattribute $P841, exception, "payload"
+    .return ($P841)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<$$>"  :subid("53_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_854
+.include "except_types.pasm"
+.sub "metachar:sym<^>"  :subid("51_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_845
 .annotate 'line', 185
-    new $P853, 'ExceptionHandler'
-    set_addr $P853, control_852
-    $P853."handle_types"(57)
-    push_eh $P853
+    new $P844, 'ExceptionHandler'
+    set_addr $P844, control_843
+    $P844."handle_types"(.CONTROL_RETURN)
+    push_eh $P844
     .lex "self", self
-    .lex "$/", param_854
+    .lex "$/", param_845
 .annotate 'line', 186
-    new $P855, "Undef"
-    .lex "$past", $P855
-    get_hll_global $P856, ["PAST"], "Regex"
-    find_lex $P857, "$/"
-    $P858 = $P856."new"("anchor" :named("pasttype"), "eol" :named("subtype"), $P857 :named("node"))
-    store_lex "$past", $P858
+    new $P846, "Undef"
+    .lex "$past", $P846
+    get_hll_global $P847, ["PAST"], "Regex"
+    find_lex $P848, "$/"
+    $P849 = $P847."new"("anchor" :named("pasttype"), "bos" :named("subtype"), $P848 :named("node"))
+    store_lex "$past", $P849
 .annotate 'line', 187
-    find_lex $P859, "$/"
-    find_lex $P860, "$past"
-    $P861 = $P859."!make"($P860)
+    find_lex $P850, "$/"
+    find_lex $P851, "$past"
+    $P852 = $P850."!make"($P851)
 .annotate 'line', 185
-    .return ($P861)
-  control_852:
+    .return ($P852)
+  control_843:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P862, exception, "payload"
-    .return ($P862)
+    getattribute $P853, exception, "payload"
+    .return ($P853)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<:::>"  :subid("54_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_866
+.include "except_types.pasm"
+.sub "metachar:sym<^^>"  :subid("52_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_857
 .annotate 'line', 190
-    new $P865, 'ExceptionHandler'
-    set_addr $P865, control_864
-    $P865."handle_types"(57)
-    push_eh $P865
+    new $P856, 'ExceptionHandler'
+    set_addr $P856, control_855
+    $P856."handle_types"(.CONTROL_RETURN)
+    push_eh $P856
     .lex "self", self
-    .lex "$/", param_866
+    .lex "$/", param_857
 .annotate 'line', 191
-    new $P867, "Undef"
-    .lex "$past", $P867
-    get_hll_global $P868, ["PAST"], "Regex"
-    find_lex $P869, "$/"
-    $P870 = $P868."new"("cut" :named("pasttype"), $P869 :named("node"))
-    store_lex "$past", $P870
+    new $P858, "Undef"
+    .lex "$past", $P858
+    get_hll_global $P859, ["PAST"], "Regex"
+    find_lex $P860, "$/"
+    $P861 = $P859."new"("anchor" :named("pasttype"), "bol" :named("subtype"), $P860 :named("node"))
+    store_lex "$past", $P861
 .annotate 'line', 192
-    find_lex $P871, "$/"
-    find_lex $P872, "$past"
-    $P873 = $P871."!make"($P872)
+    find_lex $P862, "$/"
+    find_lex $P863, "$past"
+    $P864 = $P862."!make"($P863)
 .annotate 'line', 190
-    .return ($P873)
-  control_864:
+    .return ($P864)
+  control_855:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P874, exception, "payload"
-    .return ($P874)
+    getattribute $P865, exception, "payload"
+    .return ($P865)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<lwb>"  :subid("55_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_878
+.include "except_types.pasm"
+.sub "metachar:sym<$>"  :subid("53_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_869
 .annotate 'line', 195
-    new $P877, 'ExceptionHandler'
-    set_addr $P877, control_876
-    $P877."handle_types"(57)
-    push_eh $P877
+    new $P868, 'ExceptionHandler'
+    set_addr $P868, control_867
+    $P868."handle_types"(.CONTROL_RETURN)
+    push_eh $P868
     .lex "self", self
-    .lex "$/", param_878
+    .lex "$/", param_869
 .annotate 'line', 196
-    new $P879, "Undef"
-    .lex "$past", $P879
-    get_hll_global $P880, ["PAST"], "Regex"
-    find_lex $P881, "$/"
-    $P882 = $P880."new"("anchor" :named("pasttype"), "lwb" :named("subtype"), $P881 :named("node"))
-    store_lex "$past", $P882
+    new $P870, "Undef"
+    .lex "$past", $P870
+    get_hll_global $P871, ["PAST"], "Regex"
+    find_lex $P872, "$/"
+    $P873 = $P871."new"("anchor" :named("pasttype"), "eos" :named("subtype"), $P872 :named("node"))
+    store_lex "$past", $P873
 .annotate 'line', 197
-    find_lex $P883, "$/"
-    find_lex $P884, "$past"
-    $P885 = $P883."!make"($P884)
+    find_lex $P874, "$/"
+    find_lex $P875, "$past"
+    $P876 = $P874."!make"($P875)
 .annotate 'line', 195
-    .return ($P885)
-  control_876:
+    .return ($P876)
+  control_867:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P886, exception, "payload"
-    .return ($P886)
+    getattribute $P877, exception, "payload"
+    .return ($P877)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<rwb>"  :subid("56_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_890
+.include "except_types.pasm"
+.sub "metachar:sym<$$>"  :subid("54_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_881
 .annotate 'line', 200
-    new $P889, 'ExceptionHandler'
-    set_addr $P889, control_888
-    $P889."handle_types"(57)
-    push_eh $P889
+    new $P880, 'ExceptionHandler'
+    set_addr $P880, control_879
+    $P880."handle_types"(.CONTROL_RETURN)
+    push_eh $P880
     .lex "self", self
-    .lex "$/", param_890
+    .lex "$/", param_881
 .annotate 'line', 201
-    new $P891, "Undef"
-    .lex "$past", $P891
-    get_hll_global $P892, ["PAST"], "Regex"
-    find_lex $P893, "$/"
-    $P894 = $P892."new"("anchor" :named("pasttype"), "rwb" :named("subtype"), $P893 :named("node"))
-    store_lex "$past", $P894
+    new $P882, "Undef"
+    .lex "$past", $P882
+    get_hll_global $P883, ["PAST"], "Regex"
+    find_lex $P884, "$/"
+    $P885 = $P883."new"("anchor" :named("pasttype"), "eol" :named("subtype"), $P884 :named("node"))
+    store_lex "$past", $P885
 .annotate 'line', 202
-    find_lex $P895, "$/"
-    find_lex $P896, "$past"
-    $P897 = $P895."!make"($P896)
+    find_lex $P886, "$/"
+    find_lex $P887, "$past"
+    $P888 = $P886."!make"($P887)
 .annotate 'line', 200
-    .return ($P897)
-  control_888:
+    .return ($P888)
+  control_879:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P898, exception, "payload"
-    .return ($P898)
+    getattribute $P889, exception, "payload"
+    .return ($P889)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<bs>"  :subid("57_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_902
+.include "except_types.pasm"
+.sub "metachar:sym<:::>"  :subid("55_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_893
 .annotate 'line', 205
-    new $P901, 'ExceptionHandler'
-    set_addr $P901, control_900
-    $P901."handle_types"(57)
-    push_eh $P901
+    new $P892, 'ExceptionHandler'
+    set_addr $P892, control_891
+    $P892."handle_types"(.CONTROL_RETURN)
+    push_eh $P892
     .lex "self", self
-    .lex "$/", param_902
+    .lex "$/", param_893
 .annotate 'line', 206
-    find_lex $P903, "$/"
-    find_lex $P904, "$/"
-    unless_null $P904, vivify_229
-    $P904 = root_new ['parrot';'Hash']
-  vivify_229:
-    set $P905, $P904["backslash"]
-    unless_null $P905, vivify_230
-    new $P905, "Undef"
-  vivify_230:
-    $P906 = $P905."ast"()
-    $P907 = $P903."!make"($P906)
+    new $P894, "Undef"
+    .lex "$past", $P894
+    get_hll_global $P895, ["PAST"], "Regex"
+    find_lex $P896, "$/"
+    $P897 = $P895."new"("cut" :named("pasttype"), $P896 :named("node"))
+    store_lex "$past", $P897
+.annotate 'line', 207
+    find_lex $P898, "$/"
+    find_lex $P899, "$past"
+    $P900 = $P898."!make"($P899)
 .annotate 'line', 205
-    .return ($P907)
-  control_900:
+    .return ($P900)
+  control_891:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P908, exception, "payload"
-    .return ($P908)
+    getattribute $P901, exception, "payload"
+    .return ($P901)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<mod>"  :subid("58_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_912
-.annotate 'line', 209
-    new $P911, 'ExceptionHandler'
-    set_addr $P911, control_910
-    $P911."handle_types"(57)
-    push_eh $P911
-    .lex "self", self
-    .lex "$/", param_912
+.include "except_types.pasm"
+.sub "metachar:sym<lwb>"  :subid("56_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_905
 .annotate 'line', 210
-    find_lex $P913, "$/"
-    find_lex $P914, "$/"
-    unless_null $P914, vivify_231
-    $P914 = root_new ['parrot';'Hash']
-  vivify_231:
-    set $P915, $P914["mod_internal"]
-    unless_null $P915, vivify_232
-    new $P915, "Undef"
-  vivify_232:
-    $P916 = $P915."ast"()
-    $P917 = $P913."!make"($P916)
-.annotate 'line', 209
-    .return ($P917)
-  control_910:
+    new $P904, 'ExceptionHandler'
+    set_addr $P904, control_903
+    $P904."handle_types"(.CONTROL_RETURN)
+    push_eh $P904
+    .lex "self", self
+    .lex "$/", param_905
+.annotate 'line', 211
+    new $P906, "Undef"
+    .lex "$past", $P906
+    get_hll_global $P907, ["PAST"], "Regex"
+    find_lex $P908, "$/"
+    $P909 = $P907."new"("anchor" :named("pasttype"), "lwb" :named("subtype"), $P908 :named("node"))
+    store_lex "$past", $P909
+.annotate 'line', 212
+    find_lex $P910, "$/"
+    find_lex $P911, "$past"
+    $P912 = $P910."!make"($P911)
+.annotate 'line', 210
+    .return ($P912)
+  control_903:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P918, exception, "payload"
-    .return ($P918)
+    getattribute $P913, exception, "payload"
+    .return ($P913)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<assert>"  :subid("59_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_922
-.annotate 'line', 213
-    new $P921, 'ExceptionHandler'
-    set_addr $P921, control_920
-    $P921."handle_types"(57)
-    push_eh $P921
+.include "except_types.pasm"
+.sub "metachar:sym<rwb>"  :subid("57_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_917
+.annotate 'line', 215
+    new $P916, 'ExceptionHandler'
+    set_addr $P916, control_915
+    $P916."handle_types"(.CONTROL_RETURN)
+    push_eh $P916
     .lex "self", self
-    .lex "$/", param_922
-.annotate 'line', 214
-    find_lex $P923, "$/"
-    find_lex $P924, "$/"
-    unless_null $P924, vivify_233
-    $P924 = root_new ['parrot';'Hash']
-  vivify_233:
-    set $P925, $P924["assertion"]
-    unless_null $P925, vivify_234
-    new $P925, "Undef"
-  vivify_234:
-    $P926 = $P925."ast"()
-    $P927 = $P923."!make"($P926)
-.annotate 'line', 213
-    .return ($P927)
-  control_920:
+    .lex "$/", param_917
+.annotate 'line', 216
+    new $P918, "Undef"
+    .lex "$past", $P918
+    get_hll_global $P919, ["PAST"], "Regex"
+    find_lex $P920, "$/"
+    $P921 = $P919."new"("anchor" :named("pasttype"), "rwb" :named("subtype"), $P920 :named("node"))
+    store_lex "$past", $P921
+.annotate 'line', 217
+    find_lex $P922, "$/"
+    find_lex $P923, "$past"
+    $P924 = $P922."!make"($P923)
+.annotate 'line', 215
+    .return ($P924)
+  control_915:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P928, exception, "payload"
-    .return ($P928)
+    getattribute $P925, exception, "payload"
+    .return ($P925)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<~>"  :subid("60_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_932
-.annotate 'line', 217
-    new $P931, 'ExceptionHandler'
-    set_addr $P931, control_930
-    $P931."handle_types"(57)
-    push_eh $P931
-    .lex "self", self
-    .lex "$/", param_932
-.annotate 'line', 218
-    find_lex $P933, "$/"
-    get_hll_global $P934, ["PAST"], "Regex"
-.annotate 'line', 219
-    find_lex $P935, "$/"
-    unless_null $P935, vivify_235
-    $P935 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "metachar:sym<bs>"  :subid("58_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_929
+.annotate 'line', 220
+    new $P928, 'ExceptionHandler'
+    set_addr $P928, control_927
+    $P928."handle_types"(.CONTROL_RETURN)
+    push_eh $P928
+    .lex "self", self
+    .lex "$/", param_929
+.annotate 'line', 221
+    find_lex $P930, "$/"
+    find_lex $P931, "$/"
+    unless_null $P931, vivify_235
+    $P931 = root_new ['parrot';'Hash']
   vivify_235:
-    set $P936, $P935["EXPR"]
-    unless_null $P936, vivify_236
-    new $P936, "Undef"
+    set $P932, $P931["backslash"]
+    unless_null $P932, vivify_236
+    new $P932, "Undef"
   vivify_236:
-    $P937 = $P936."ast"()
+    $P933 = $P932."ast"()
+    $P934 = $P930."!make"($P933)
 .annotate 'line', 220
-    get_hll_global $P938, ["PAST"], "Regex"
-.annotate 'line', 221
-    find_lex $P939, "$/"
-    unless_null $P939, vivify_237
-    $P939 = root_new ['parrot';'Hash']
+    .return ($P934)
+  control_927:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P935, exception, "payload"
+    .return ($P935)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "metachar:sym<mod>"  :subid("59_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_939
+.annotate 'line', 224
+    new $P938, 'ExceptionHandler'
+    set_addr $P938, control_937
+    $P938."handle_types"(.CONTROL_RETURN)
+    push_eh $P938
+    .lex "self", self
+    .lex "$/", param_939
+.annotate 'line', 225
+    find_lex $P940, "$/"
+    find_lex $P941, "$/"
+    unless_null $P941, vivify_237
+    $P941 = root_new ['parrot';'Hash']
   vivify_237:
-    set $P940, $P939["GOAL"]
-    unless_null $P940, vivify_238
-    new $P940, "Undef"
+    set $P942, $P941["mod_internal"]
+    unless_null $P942, vivify_238
+    new $P942, "Undef"
   vivify_238:
-    $P941 = $P940."ast"()
-.annotate 'line', 222
-    get_hll_global $P942, ["PAST"], "Regex"
-    find_lex $P943, "$/"
-    unless_null $P943, vivify_239
-    $P943 = root_new ['parrot';'Hash']
+    $P943 = $P942."ast"()
+    $P944 = $P940."!make"($P943)
+.annotate 'line', 224
+    .return ($P944)
+  control_937:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P945, exception, "payload"
+    .return ($P945)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "metachar:sym<assert>"  :subid("60_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_949
+.annotate 'line', 228
+    new $P948, 'ExceptionHandler'
+    set_addr $P948, control_947
+    $P948."handle_types"(.CONTROL_RETURN)
+    push_eh $P948
+    .lex "self", self
+    .lex "$/", param_949
+.annotate 'line', 229
+    find_lex $P950, "$/"
+    find_lex $P951, "$/"
+    unless_null $P951, vivify_239
+    $P951 = root_new ['parrot';'Hash']
   vivify_239:
-    set $P944, $P943["GOAL"]
-    unless_null $P944, vivify_240
-    new $P944, "Undef"
+    set $P952, $P951["assertion"]
+    unless_null $P952, vivify_240
+    new $P952, "Undef"
   vivify_240:
-    set $S945, $P944
-    $P946 = $P942."new"("FAILGOAL", $S945, "subrule" :named("pasttype"), "method" :named("subtype"))
-    $P947 = $P938."new"($P941, $P946, "alt" :named("pasttype"))
-.annotate 'line', 220
-    $P948 = $P934."new"($P937, $P947, "concat" :named("pasttype"))
-.annotate 'line', 218
-    $P949 = $P933."!make"($P948)
-.annotate 'line', 217
-    .return ($P949)
-  control_930:
+    $P953 = $P952."ast"()
+    $P954 = $P950."!make"($P953)
+.annotate 'line', 228
+    .return ($P954)
+  control_947:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P950, exception, "payload"
-    .return ($P950)
+    getattribute $P955, exception, "payload"
+    .return ($P955)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<{*}>"  :subid("61_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_954
-.annotate 'line', 230
-    new $P953, 'ExceptionHandler'
-    set_addr $P953, control_952
-    $P953."handle_types"(57)
-    push_eh $P953
-    .lex "self", self
-    .lex "$/", param_954
-.annotate 'line', 231
-    new $P955, "Undef"
-    .lex "$past", $P955
+.include "except_types.pasm"
+.sub "metachar:sym<~>"  :subid("61_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_959
 .annotate 'line', 232
-    find_lex $P958, "$/"
-    unless_null $P958, vivify_241
-    $P958 = root_new ['parrot';'Hash']
+    new $P958, 'ExceptionHandler'
+    set_addr $P958, control_957
+    $P958."handle_types"(.CONTROL_RETURN)
+    push_eh $P958
+    .lex "self", self
+    .lex "$/", param_959
+.annotate 'line', 233
+    find_lex $P960, "$/"
+    get_hll_global $P961, ["PAST"], "Regex"
+.annotate 'line', 234
+    find_lex $P962, "$/"
+    unless_null $P962, vivify_241
+    $P962 = root_new ['parrot';'Hash']
   vivify_241:
-    set $P959, $P958["key"]
-    unless_null $P959, vivify_242
-    new $P959, "Undef"
+    set $P963, $P962["EXPR"]
+    unless_null $P963, vivify_242
+    new $P963, "Undef"
   vivify_242:
-    if $P959, if_957
-    new $P967, "Integer"
-    assign $P967, 0
-    set $P956, $P967
-    goto if_957_end
-  if_957:
-    get_hll_global $P960, ["PAST"], "Regex"
-    find_lex $P961, "$/"
-    unless_null $P961, vivify_243
-    $P961 = root_new ['parrot';'Hash']
+    $P964 = $P963."ast"()
+.annotate 'line', 235
+    get_hll_global $P965, ["PAST"], "Regex"
+.annotate 'line', 236
+    find_lex $P966, "$/"
+    unless_null $P966, vivify_243
+    $P966 = root_new ['parrot';'Hash']
   vivify_243:
-    set $P962, $P961["key"]
-    unless_null $P962, vivify_244
-    $P962 = root_new ['parrot';'ResizablePMCArray']
+    set $P967, $P966["GOAL"]
+    unless_null $P967, vivify_244
+    new $P967, "Undef"
   vivify_244:
-    set $P963, $P962[0]
-    unless_null $P963, vivify_245
-    new $P963, "Undef"
+    $P968 = $P967."ast"()
+.annotate 'line', 237
+    get_hll_global $P969, ["PAST"], "Regex"
+    find_lex $P970, "$/"
+    unless_null $P970, vivify_245
+    $P970 = root_new ['parrot';'Hash']
   vivify_245:
-    set $S964, $P963
-    find_lex $P965, "$/"
-    $P966 = $P960."new"($S964, "reduce" :named("pasttype"), $P965 :named("node"))
-    set $P956, $P966
-  if_957_end:
-    store_lex "$past", $P956
-.annotate 'line', 234
-    find_lex $P968, "$/"
-    find_lex $P969, "$past"
-    $P970 = $P968."!make"($P969)
-.annotate 'line', 230
-    .return ($P970)
-  control_952:
+    set $P971, $P970["GOAL"]
+    unless_null $P971, vivify_246
+    new $P971, "Undef"
+  vivify_246:
+    set $S972, $P971
+    $P973 = $P969."new"("FAILGOAL", $S972, "subrule" :named("pasttype"), "method" :named("subtype"))
+    $P974 = $P965."new"($P968, $P973, "alt" :named("pasttype"))
+.annotate 'line', 235
+    $P975 = $P961."new"($P964, $P974, "concat" :named("pasttype"))
+.annotate 'line', 233
+    $P976 = $P960."!make"($P975)
+.annotate 'line', 232
+    .return ($P976)
+  control_957:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P971, exception, "payload"
-    .return ($P971)
+    getattribute $P977, exception, "payload"
+    .return ($P977)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<var>"  :subid("62_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_975
-.annotate 'line', 237
-    new $P974, 'ExceptionHandler'
-    set_addr $P974, control_973
-    $P974."handle_types"(57)
-    push_eh $P974
-    .lex "self", self
-    .lex "$/", param_975
-.annotate 'line', 238
-    new $P976, "Undef"
-    .lex "$past", $P976
-.annotate 'line', 239
-    new $P977, "Undef"
-    .lex "$name", $P977
-.annotate 'line', 237
-    find_lex $P978, "$past"
-.annotate 'line', 239
-    find_lex $P981, "$/"
-    unless_null $P981, vivify_246
-    $P981 = root_new ['parrot';'Hash']
-  vivify_246:
-    set $P982, $P981["pos"]
-    unless_null $P982, vivify_247
+.include "except_types.pasm"
+.sub "metachar:sym<{*}>"  :subid("62_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_981
+.annotate 'line', 245
+    new $P980, 'ExceptionHandler'
+    set_addr $P980, control_979
+    $P980."handle_types"(.CONTROL_RETURN)
+    push_eh $P980
+    .lex "self", self
+    .lex "$/", param_981
+.annotate 'line', 246
     new $P982, "Undef"
+    .lex "$past", $P982
+.annotate 'line', 247
+    find_lex $P985, "$/"
+    unless_null $P985, vivify_247
+    $P985 = root_new ['parrot';'Hash']
   vivify_247:
-    if $P982, if_980
-    find_lex $P986, "$/"
+    set $P986, $P985["key"]
     unless_null $P986, vivify_248
-    $P986 = root_new ['parrot';'Hash']
+    new $P986, "Undef"
   vivify_248:
-    set $P987, $P986["name"]
-    unless_null $P987, vivify_249
-    new $P987, "Undef"
+    if $P986, if_984
+    new $P994, "Integer"
+    assign $P994, 0
+    set $P983, $P994
+    goto if_984_end
+  if_984:
+    get_hll_global $P987, ["PAST"], "Regex"
+    find_lex $P988, "$/"
+    unless_null $P988, vivify_249
+    $P988 = root_new ['parrot';'Hash']
   vivify_249:
-    set $S988, $P987
-    new $P979, 'String'
-    set $P979, $S988
-    goto if_980_end
-  if_980:
-    find_lex $P983, "$/"
-    unless_null $P983, vivify_250
-    $P983 = root_new ['parrot';'Hash']
+    set $P989, $P988["key"]
+    unless_null $P989, vivify_250
+    $P989 = root_new ['parrot';'ResizablePMCArray']
   vivify_250:
-    set $P984, $P983["pos"]
-    unless_null $P984, vivify_251
-    new $P984, "Undef"
+    set $P990, $P989[0]
+    unless_null $P990, vivify_251
+    new $P990, "Undef"
   vivify_251:
-    set $N985, $P984
-    new $P979, 'Float'
-    set $P979, $N985
-  if_980_end:
-    store_lex "$name", $P979
-.annotate 'line', 240
-    find_lex $P990, "$/"
-    unless_null $P990, vivify_252
-    $P990 = root_new ['parrot';'Hash']
-  vivify_252:
-    set $P991, $P990["quantified_atom"]
-    unless_null $P991, vivify_253
-    new $P991, "Undef"
-  vivify_253:
-    if $P991, if_989
-.annotate 'line', 251
-    get_hll_global $P1020, ["PAST"], "Regex"
-    find_lex $P1021, "$name"
-    find_lex $P1022, "$/"
-    $P1023 = $P1020."new"("!BACKREF", $P1021, "subrule" :named("pasttype"), "method" :named("subtype"), $P1022 :named("node"))
-    store_lex "$past", $P1023
-.annotate 'line', 250
-    goto if_989_end
-  if_989:
-.annotate 'line', 241
+    set $S991, $P990
     find_lex $P992, "$/"
-    unless_null $P992, vivify_254
-    $P992 = root_new ['parrot';'Hash']
-  vivify_254:
-    set $P993, $P992["quantified_atom"]
-    unless_null $P993, vivify_255
-    $P993 = root_new ['parrot';'ResizablePMCArray']
-  vivify_255:
-    set $P994, $P993[0]
-    unless_null $P994, vivify_256
-    new $P994, "Undef"
-  vivify_256:
-    $P995 = $P994."ast"()
-    store_lex "$past", $P995
-.annotate 'line', 242
-    find_lex $P999, "$past"
-    $S1000 = $P999."pasttype"()
-    iseq $I1001, $S1000, "quant"
-    if $I1001, if_998
-    new $P997, 'Integer'
-    set $P997, $I1001
-    goto if_998_end
-  if_998:
-    find_lex $P1002, "$past"
-    unless_null $P1002, vivify_257
-    $P1002 = root_new ['parrot';'ResizablePMCArray']
-  vivify_257:
-    set $P1003, $P1002[0]
-    unless_null $P1003, vivify_258
-    new $P1003, "Undef"
-  vivify_258:
-    $S1004 = $P1003."pasttype"()
-    iseq $I1005, $S1004, "subrule"
-    new $P997, 'Integer'
-    set $P997, $I1005
-  if_998_end:
-    if $P997, if_996
-.annotate 'line', 245
-    find_lex $P1010, "$past"
-    $S1011 = $P1010."pasttype"()
-    iseq $I1012, $S1011, "subrule"
-    if $I1012, if_1009
-.annotate 'line', 247
-    get_hll_global $P1015, ["PAST"], "Regex"
-    find_lex $P1016, "$past"
-    find_lex $P1017, "$name"
-    find_lex $P1018, "$/"
-    $P1019 = $P1015."new"($P1016, $P1017 :named("name"), "subcapture" :named("pasttype"), $P1018 :named("node"))
-    store_lex "$past", $P1019
-.annotate 'line', 246
-    goto if_1009_end
-  if_1009:
+    $P993 = $P987."new"($S991, "reduce" :named("pasttype"), $P992 :named("node"))
+    set $P983, $P993
+  if_984_end:
+    store_lex "$past", $P983
+.annotate 'line', 249
+    find_lex $P995, "$/"
+    find_lex $P996, "$past"
+    $P997 = $P995."!make"($P996)
 .annotate 'line', 245
-    find_lex $P1013, "$past"
-    find_lex $P1014, "$name"
-    "subrule_alias"($P1013, $P1014)
-  if_1009_end:
-    goto if_996_end
-  if_996:
-.annotate 'line', 243
-    find_lex $P1006, "$past"
-    unless_null $P1006, vivify_259
-    $P1006 = root_new ['parrot';'ResizablePMCArray']
-  vivify_259:
-    set $P1007, $P1006[0]
-    unless_null $P1007, vivify_260
-    new $P1007, "Undef"
-  vivify_260:
-    find_lex $P1008, "$name"
-    "subrule_alias"($P1007, $P1008)
-  if_996_end:
-  if_989_end:
-.annotate 'line', 254
-    find_lex $P1024, "$/"
-    find_lex $P1025, "$past"
-    $P1026 = $P1024."!make"($P1025)
-.annotate 'line', 237
-    .return ($P1026)
-  control_973:
+    .return ($P997)
+  control_979:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1027, exception, "payload"
-    .return ($P1027)
+    getattribute $P998, exception, "payload"
+    .return ($P998)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<PIR>"  :subid("63_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1031
-.annotate 'line', 257
-    new $P1030, 'ExceptionHandler'
-    set_addr $P1030, control_1029
-    $P1030."handle_types"(57)
-    push_eh $P1030
+.include "except_types.pasm"
+.sub "metachar:sym<var>"  :subid("63_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1002
+.annotate 'line', 252
+    new $P1001, 'ExceptionHandler'
+    set_addr $P1001, control_1000
+    $P1001."handle_types"(.CONTROL_RETURN)
+    push_eh $P1001
     .lex "self", self
-    .lex "$/", param_1031
-.annotate 'line', 258
-    find_lex $P1032, "$/"
-    get_hll_global $P1033, ["PAST"], "Regex"
-.annotate 'line', 259
-    get_hll_global $P1034, ["PAST"], "Op"
-    find_lex $P1035, "$/"
-    unless_null $P1035, vivify_261
-    $P1035 = root_new ['parrot';'Hash']
+    .lex "$/", param_1002
+.annotate 'line', 253
+    new $P1003, "Undef"
+    .lex "$past", $P1003
+.annotate 'line', 254
+    new $P1004, "Undef"
+    .lex "$name", $P1004
+.annotate 'line', 252
+    find_lex $P1005, "$past"
+.annotate 'line', 254
+    find_lex $P1008, "$/"
+    unless_null $P1008, vivify_252
+    $P1008 = root_new ['parrot';'Hash']
+  vivify_252:
+    set $P1009, $P1008["pos"]
+    unless_null $P1009, vivify_253
+    new $P1009, "Undef"
+  vivify_253:
+    if $P1009, if_1007
+    find_lex $P1013, "$/"
+    unless_null $P1013, vivify_254
+    $P1013 = root_new ['parrot';'Hash']
+  vivify_254:
+    set $P1014, $P1013["name"]
+    unless_null $P1014, vivify_255
+    new $P1014, "Undef"
+  vivify_255:
+    set $S1015, $P1014
+    new $P1006, 'String'
+    set $P1006, $S1015
+    goto if_1007_end
+  if_1007:
+    find_lex $P1010, "$/"
+    unless_null $P1010, vivify_256
+    $P1010 = root_new ['parrot';'Hash']
+  vivify_256:
+    set $P1011, $P1010["pos"]
+    unless_null $P1011, vivify_257
+    new $P1011, "Undef"
+  vivify_257:
+    set $N1012, $P1011
+    new $P1006, 'Float'
+    set $P1006, $N1012
+  if_1007_end:
+    store_lex "$name", $P1006
+.annotate 'line', 255
+    find_lex $P1017, "$/"
+    unless_null $P1017, vivify_258
+    $P1017 = root_new ['parrot';'Hash']
+  vivify_258:
+    set $P1018, $P1017["quantified_atom"]
+    unless_null $P1018, vivify_259
+    new $P1018, "Undef"
+  vivify_259:
+    if $P1018, if_1016
+.annotate 'line', 266
+    get_hll_global $P1047, ["PAST"], "Regex"
+    find_lex $P1048, "$name"
+    find_lex $P1049, "$/"
+    $P1050 = $P1047."new"("!BACKREF", $P1048, "subrule" :named("pasttype"), "method" :named("subtype"), $P1049 :named("node"))
+    store_lex "$past", $P1050
+.annotate 'line', 265
+    goto if_1016_end
+  if_1016:
+.annotate 'line', 256
+    find_lex $P1019, "$/"
+    unless_null $P1019, vivify_260
+    $P1019 = root_new ['parrot';'Hash']
+  vivify_260:
+    set $P1020, $P1019["quantified_atom"]
+    unless_null $P1020, vivify_261
+    $P1020 = root_new ['parrot';'ResizablePMCArray']
   vivify_261:
-    set $P1036, $P1035["pir"]
-    unless_null $P1036, vivify_262
-    new $P1036, "Undef"
+    set $P1021, $P1020[0]
+    unless_null $P1021, vivify_262
+    new $P1021, "Undef"
   vivify_262:
-    set $S1037, $P1036
-    $P1038 = $P1034."new"($S1037 :named("inline"), "inline" :named("pasttype"))
-    find_lex $P1039, "$/"
-    $P1040 = $P1033."new"($P1038, "pastnode" :named("pasttype"), $P1039 :named("node"))
-.annotate 'line', 258
-    $P1041 = $P1032."!make"($P1040)
+    $P1022 = $P1021."ast"()
+    store_lex "$past", $P1022
 .annotate 'line', 257
-    .return ($P1041)
-  control_1029:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1042, exception, "payload"
-    .return ($P1042)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<w>"  :subid("64_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1046
-.annotate 'line', 265
-    new $P1045, 'ExceptionHandler'
-    set_addr $P1045, control_1044
-    $P1045."handle_types"(57)
-    push_eh $P1045
-    .lex "self", self
-    .lex "$/", param_1046
-.annotate 'line', 266
-    new $P1047, "Undef"
-    .lex "$subtype", $P1047
-.annotate 'line', 267
-    new $P1048, "Undef"
-    .lex "$past", $P1048
-.annotate 'line', 266
-    find_lex $P1051, "$/"
-    unless_null $P1051, vivify_263
-    $P1051 = root_new ['parrot';'Hash']
+    find_lex $P1026, "$past"
+    $S1027 = $P1026."pasttype"()
+    iseq $I1028, $S1027, "quant"
+    if $I1028, if_1025
+    new $P1024, 'Integer'
+    set $P1024, $I1028
+    goto if_1025_end
+  if_1025:
+    find_lex $P1029, "$past"
+    unless_null $P1029, vivify_263
+    $P1029 = root_new ['parrot';'ResizablePMCArray']
   vivify_263:
-    set $P1052, $P1051["sym"]
-    unless_null $P1052, vivify_264
-    new $P1052, "Undef"
+    set $P1030, $P1029[0]
+    unless_null $P1030, vivify_264
+    new $P1030, "Undef"
   vivify_264:
-    set $S1053, $P1052
-    iseq $I1054, $S1053, "n"
-    if $I1054, if_1050
-    find_lex $P1056, "$/"
-    unless_null $P1056, vivify_265
-    $P1056 = root_new ['parrot';'Hash']
+    $S1031 = $P1030."pasttype"()
+    iseq $I1032, $S1031, "subrule"
+    new $P1024, 'Integer'
+    set $P1024, $I1032
+  if_1025_end:
+    if $P1024, if_1023
+.annotate 'line', 260
+    find_lex $P1037, "$past"
+    $S1038 = $P1037."pasttype"()
+    iseq $I1039, $S1038, "subrule"
+    if $I1039, if_1036
+.annotate 'line', 262
+    get_hll_global $P1042, ["PAST"], "Regex"
+    find_lex $P1043, "$past"
+    find_lex $P1044, "$name"
+    find_lex $P1045, "$/"
+    $P1046 = $P1042."new"($P1043, $P1044 :named("name"), "subcapture" :named("pasttype"), $P1045 :named("node"))
+    store_lex "$past", $P1046
+.annotate 'line', 261
+    goto if_1036_end
+  if_1036:
+.annotate 'line', 260
+    find_lex $P1040, "$past"
+    find_lex $P1041, "$name"
+    "subrule_alias"($P1040, $P1041)
+  if_1036_end:
+    goto if_1023_end
+  if_1023:
+.annotate 'line', 258
+    find_lex $P1033, "$past"
+    unless_null $P1033, vivify_265
+    $P1033 = root_new ['parrot';'ResizablePMCArray']
   vivify_265:
-    set $P1057, $P1056["sym"]
-    unless_null $P1057, vivify_266
-    new $P1057, "Undef"
+    set $P1034, $P1033[0]
+    unless_null $P1034, vivify_266
+    new $P1034, "Undef"
   vivify_266:
-    set $S1058, $P1057
-    new $P1049, 'String'
-    set $P1049, $S1058
-    goto if_1050_end
-  if_1050:
-    new $P1055, "String"
-    assign $P1055, "nl"
-    set $P1049, $P1055
-  if_1050_end:
-    store_lex "$subtype", $P1049
-.annotate 'line', 267
-    get_hll_global $P1059, ["PAST"], "Regex"
-    find_lex $P1060, "$subtype"
-    find_lex $P1061, "$/"
-    $P1062 = $P1059."new"("charclass" :named("pasttype"), $P1060 :named("subtype"), $P1061 :named("node"))
-    store_lex "$past", $P1062
-.annotate 'line', 268
-    find_lex $P1063, "$/"
-    find_lex $P1064, "$past"
-    $P1065 = $P1063."!make"($P1064)
-.annotate 'line', 265
-    .return ($P1065)
-  control_1044:
+    find_lex $P1035, "$name"
+    "subrule_alias"($P1034, $P1035)
+  if_1023_end:
+  if_1016_end:
+.annotate 'line', 269
+    find_lex $P1051, "$/"
+    find_lex $P1052, "$past"
+    $P1053 = $P1051."!make"($P1052)
+.annotate 'line', 252
+    .return ($P1053)
+  control_1000:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1066, exception, "payload"
-    .return ($P1066)
+    getattribute $P1054, exception, "payload"
+    .return ($P1054)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<b>"  :subid("65_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1070
-.annotate 'line', 271
-    new $P1069, 'ExceptionHandler'
-    set_addr $P1069, control_1068
-    $P1069."handle_types"(57)
-    push_eh $P1069
-    .lex "self", self
-    .lex "$/", param_1070
+.include "except_types.pasm"
+.sub "metachar:sym<PIR>"  :subid("64_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1058
 .annotate 'line', 272
-    new $P1071, "Undef"
-    .lex "$past", $P1071
-    get_hll_global $P1072, ["PAST"], "Regex"
+    new $P1057, 'ExceptionHandler'
+    set_addr $P1057, control_1056
+    $P1057."handle_types"(.CONTROL_RETURN)
+    push_eh $P1057
+    .lex "self", self
+    .lex "$/", param_1058
 .annotate 'line', 273
-    find_lex $P1073, "$/"
-    unless_null $P1073, vivify_267
-    $P1073 = root_new ['parrot';'Hash']
+    find_lex $P1059, "$/"
+    get_hll_global $P1060, ["PAST"], "Regex"
+.annotate 'line', 274
+    get_hll_global $P1061, ["PAST"], "Op"
+    find_lex $P1062, "$/"
+    unless_null $P1062, vivify_267
+    $P1062 = root_new ['parrot';'Hash']
   vivify_267:
-    set $P1074, $P1073["sym"]
-    unless_null $P1074, vivify_268
-    new $P1074, "Undef"
+    set $P1063, $P1062["pir"]
+    unless_null $P1063, vivify_268
+    new $P1063, "Undef"
   vivify_268:
-    set $S1075, $P1074
-    iseq $I1076, $S1075, "B"
-    find_lex $P1077, "$/"
-    $P1078 = $P1072."new"("\b", "enumcharlist" :named("pasttype"), $I1076 :named("negate"), $P1077 :named("node"))
+    set $S1064, $P1063
+    $P1065 = $P1061."new"($S1064 :named("inline"), "inline" :named("pasttype"))
+    find_lex $P1066, "$/"
+    $P1067 = $P1060."new"($P1065, "pastnode" :named("pasttype"), $P1066 :named("node"))
+.annotate 'line', 273
+    $P1068 = $P1059."!make"($P1067)
 .annotate 'line', 272
-    store_lex "$past", $P1078
-.annotate 'line', 274
-    find_lex $P1079, "$/"
-    find_lex $P1080, "$past"
-    $P1081 = $P1079."!make"($P1080)
-.annotate 'line', 271
-    .return ($P1081)
-  control_1068:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1082, exception, "payload"
-    .return ($P1082)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<e>"  :subid("66_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1086
-.annotate 'line', 277
-    new $P1085, 'ExceptionHandler'
-    set_addr $P1085, control_1084
-    $P1085."handle_types"(57)
-    push_eh $P1085
-    .lex "self", self
-    .lex "$/", param_1086
-.annotate 'line', 278
-    new $P1087, "Undef"
-    .lex "$past", $P1087
-    get_hll_global $P1088, ["PAST"], "Regex"
-.annotate 'line', 279
-    find_lex $P1089, "$/"
-    unless_null $P1089, vivify_269
-    $P1089 = root_new ['parrot';'Hash']
-  vivify_269:
-    set $P1090, $P1089["sym"]
-    unless_null $P1090, vivify_270
-    new $P1090, "Undef"
-  vivify_270:
-    set $S1091, $P1090
-    iseq $I1092, $S1091, "E"
-    find_lex $P1093, "$/"
-    $P1094 = $P1088."new"("\e", "enumcharlist" :named("pasttype"), $I1092 :named("negate"), $P1093 :named("node"))
-.annotate 'line', 278
-    store_lex "$past", $P1094
-.annotate 'line', 280
-    find_lex $P1095, "$/"
-    find_lex $P1096, "$past"
-    $P1097 = $P1095."!make"($P1096)
-.annotate 'line', 277
-    .return ($P1097)
-  control_1084:
+    .return ($P1068)
+  control_1056:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1098, exception, "payload"
-    .return ($P1098)
+    getattribute $P1069, exception, "payload"
+    .return ($P1069)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<f>"  :subid("67_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1102
-.annotate 'line', 283
-    new $P1101, 'ExceptionHandler'
-    set_addr $P1101, control_1100
-    $P1101."handle_types"(57)
-    push_eh $P1101
-    .lex "self", self
-    .lex "$/", param_1102
-.annotate 'line', 284
-    new $P1103, "Undef"
-    .lex "$past", $P1103
-    get_hll_global $P1104, ["PAST"], "Regex"
-.annotate 'line', 285
-    find_lex $P1105, "$/"
-    unless_null $P1105, vivify_271
-    $P1105 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "backslash:sym<w>"  :subid("65_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1073
+.annotate 'line', 280
+    new $P1072, 'ExceptionHandler'
+    set_addr $P1072, control_1071
+    $P1072."handle_types"(.CONTROL_RETURN)
+    push_eh $P1072
+    .lex "self", self
+    .lex "$/", param_1073
+.annotate 'line', 281
+    new $P1074, "Undef"
+    .lex "$subtype", $P1074
+.annotate 'line', 282
+    new $P1075, "Undef"
+    .lex "$past", $P1075
+.annotate 'line', 281
+    find_lex $P1078, "$/"
+    unless_null $P1078, vivify_269
+    $P1078 = root_new ['parrot';'Hash']
+  vivify_269:
+    set $P1079, $P1078["sym"]
+    unless_null $P1079, vivify_270
+    new $P1079, "Undef"
+  vivify_270:
+    set $S1080, $P1079
+    iseq $I1081, $S1080, "n"
+    if $I1081, if_1077
+    find_lex $P1083, "$/"
+    unless_null $P1083, vivify_271
+    $P1083 = root_new ['parrot';'Hash']
   vivify_271:
-    set $P1106, $P1105["sym"]
-    unless_null $P1106, vivify_272
-    new $P1106, "Undef"
+    set $P1084, $P1083["sym"]
+    unless_null $P1084, vivify_272
+    new $P1084, "Undef"
   vivify_272:
-    set $S1107, $P1106
-    iseq $I1108, $S1107, "F"
-    find_lex $P1109, "$/"
-    $P1110 = $P1104."new"("\f", "enumcharlist" :named("pasttype"), $I1108 :named("negate"), $P1109 :named("node"))
-.annotate 'line', 284
-    store_lex "$past", $P1110
-.annotate 'line', 286
-    find_lex $P1111, "$/"
-    find_lex $P1112, "$past"
-    $P1113 = $P1111."!make"($P1112)
+    set $S1085, $P1084
+    new $P1076, 'String'
+    set $P1076, $S1085
+    goto if_1077_end
+  if_1077:
+    new $P1082, "String"
+    assign $P1082, "nl"
+    set $P1076, $P1082
+  if_1077_end:
+    store_lex "$subtype", $P1076
+.annotate 'line', 282
+    get_hll_global $P1086, ["PAST"], "Regex"
+    find_lex $P1087, "$subtype"
+    find_lex $P1088, "$/"
+    $P1089 = $P1086."new"("charclass" :named("pasttype"), $P1087 :named("subtype"), $P1088 :named("node"))
+    store_lex "$past", $P1089
 .annotate 'line', 283
-    .return ($P1113)
-  control_1100:
+    find_lex $P1090, "$/"
+    find_lex $P1091, "$past"
+    $P1092 = $P1090."!make"($P1091)
+.annotate 'line', 280
+    .return ($P1092)
+  control_1071:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1114, exception, "payload"
-    .return ($P1114)
+    getattribute $P1093, exception, "payload"
+    .return ($P1093)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<h>"  :subid("68_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1118
-.annotate 'line', 289
-    new $P1117, 'ExceptionHandler'
-    set_addr $P1117, control_1116
-    $P1117."handle_types"(57)
-    push_eh $P1117
-    .lex "self", self
-    .lex "$/", param_1118
-.annotate 'line', 290
-    new $P1119, "Undef"
-    .lex "$past", $P1119
-    get_hll_global $P1120, ["PAST"], "Regex"
-.annotate 'line', 291
-    find_lex $P1121, "$/"
-    unless_null $P1121, vivify_273
-    $P1121 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "backslash:sym<b>"  :subid("66_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1097
+.annotate 'line', 286
+    new $P1096, 'ExceptionHandler'
+    set_addr $P1096, control_1095
+    $P1096."handle_types"(.CONTROL_RETURN)
+    push_eh $P1096
+    .lex "self", self
+    .lex "$/", param_1097
+.annotate 'line', 287
+    new $P1098, "Undef"
+    .lex "$past", $P1098
+    get_hll_global $P1099, ["PAST"], "Regex"
+.annotate 'line', 288
+    find_lex $P1100, "$/"
+    unless_null $P1100, vivify_273
+    $P1100 = root_new ['parrot';'Hash']
   vivify_273:
-    set $P1122, $P1121["sym"]
-    unless_null $P1122, vivify_274
-    new $P1122, "Undef"
+    set $P1101, $P1100["sym"]
+    unless_null $P1101, vivify_274
+    new $P1101, "Undef"
   vivify_274:
-    set $S1123, $P1122
-    iseq $I1124, $S1123, "H"
-    find_lex $P1125, "$/"
-    $P1126 = $P1120."new"(unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", "enumcharlist" :named("pasttype"), $I1124 :named("negate"), $P1125 :named("node"))
-.annotate 'line', 290
-    store_lex "$past", $P1126
-.annotate 'line', 292
-    find_lex $P1127, "$/"
-    find_lex $P1128, "$past"
-    $P1129 = $P1127."!make"($P1128)
+    set $S1102, $P1101
+    iseq $I1103, $S1102, "B"
+    find_lex $P1104, "$/"
+    $P1105 = $P1099."new"("\b", "enumcharlist" :named("pasttype"), $I1103 :named("negate"), $P1104 :named("node"))
+.annotate 'line', 287
+    store_lex "$past", $P1105
 .annotate 'line', 289
-    .return ($P1129)
-  control_1116:
+    find_lex $P1106, "$/"
+    find_lex $P1107, "$past"
+    $P1108 = $P1106."!make"($P1107)
+.annotate 'line', 286
+    .return ($P1108)
+  control_1095:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1130, exception, "payload"
-    .return ($P1130)
+    getattribute $P1109, exception, "payload"
+    .return ($P1109)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<r>"  :subid("69_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1134
-.annotate 'line', 295
-    new $P1133, 'ExceptionHandler'
-    set_addr $P1133, control_1132
-    $P1133."handle_types"(57)
-    push_eh $P1133
-    .lex "self", self
-    .lex "$/", param_1134
-.annotate 'line', 296
-    new $P1135, "Undef"
-    .lex "$past", $P1135
-    get_hll_global $P1136, ["PAST"], "Regex"
-.annotate 'line', 297
-    find_lex $P1137, "$/"
-    unless_null $P1137, vivify_275
-    $P1137 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "backslash:sym<e>"  :subid("67_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1113
+.annotate 'line', 292
+    new $P1112, 'ExceptionHandler'
+    set_addr $P1112, control_1111
+    $P1112."handle_types"(.CONTROL_RETURN)
+    push_eh $P1112
+    .lex "self", self
+    .lex "$/", param_1113
+.annotate 'line', 293
+    new $P1114, "Undef"
+    .lex "$past", $P1114
+    get_hll_global $P1115, ["PAST"], "Regex"
+.annotate 'line', 294
+    find_lex $P1116, "$/"
+    unless_null $P1116, vivify_275
+    $P1116 = root_new ['parrot';'Hash']
   vivify_275:
-    set $P1138, $P1137["sym"]
-    unless_null $P1138, vivify_276
-    new $P1138, "Undef"
+    set $P1117, $P1116["sym"]
+    unless_null $P1117, vivify_276
+    new $P1117, "Undef"
   vivify_276:
-    set $S1139, $P1138
-    iseq $I1140, $S1139, "R"
-    find_lex $P1141, "$/"
-    $P1142 = $P1136."new"("\r", "enumcharlist" :named("pasttype"), $I1140 :named("negate"), $P1141 :named("node"))
-.annotate 'line', 296
-    store_lex "$past", $P1142
-.annotate 'line', 298
-    find_lex $P1143, "$/"
-    find_lex $P1144, "$past"
-    $P1145 = $P1143."!make"($P1144)
+    set $S1118, $P1117
+    iseq $I1119, $S1118, "E"
+    find_lex $P1120, "$/"
+    $P1121 = $P1115."new"("\e", "enumcharlist" :named("pasttype"), $I1119 :named("negate"), $P1120 :named("node"))
+.annotate 'line', 293
+    store_lex "$past", $P1121
 .annotate 'line', 295
-    .return ($P1145)
-  control_1132:
+    find_lex $P1122, "$/"
+    find_lex $P1123, "$past"
+    $P1124 = $P1122."!make"($P1123)
+.annotate 'line', 292
+    .return ($P1124)
+  control_1111:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1146, exception, "payload"
-    .return ($P1146)
+    getattribute $P1125, exception, "payload"
+    .return ($P1125)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<t>"  :subid("70_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1150
-.annotate 'line', 301
-    new $P1149, 'ExceptionHandler'
-    set_addr $P1149, control_1148
-    $P1149."handle_types"(57)
-    push_eh $P1149
-    .lex "self", self
-    .lex "$/", param_1150
-.annotate 'line', 302
-    new $P1151, "Undef"
-    .lex "$past", $P1151
-    get_hll_global $P1152, ["PAST"], "Regex"
-.annotate 'line', 303
-    find_lex $P1153, "$/"
-    unless_null $P1153, vivify_277
-    $P1153 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "backslash:sym<f>"  :subid("68_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1129
+.annotate 'line', 298
+    new $P1128, 'ExceptionHandler'
+    set_addr $P1128, control_1127
+    $P1128."handle_types"(.CONTROL_RETURN)
+    push_eh $P1128
+    .lex "self", self
+    .lex "$/", param_1129
+.annotate 'line', 299
+    new $P1130, "Undef"
+    .lex "$past", $P1130
+    get_hll_global $P1131, ["PAST"], "Regex"
+.annotate 'line', 300
+    find_lex $P1132, "$/"
+    unless_null $P1132, vivify_277
+    $P1132 = root_new ['parrot';'Hash']
   vivify_277:
-    set $P1154, $P1153["sym"]
-    unless_null $P1154, vivify_278
-    new $P1154, "Undef"
+    set $P1133, $P1132["sym"]
+    unless_null $P1133, vivify_278
+    new $P1133, "Undef"
   vivify_278:
-    set $S1155, $P1154
-    iseq $I1156, $S1155, "T"
-    find_lex $P1157, "$/"
-    $P1158 = $P1152."new"("\t", "enumcharlist" :named("pasttype"), $I1156 :named("negate"), $P1157 :named("node"))
-.annotate 'line', 302
-    store_lex "$past", $P1158
-.annotate 'line', 304
-    find_lex $P1159, "$/"
-    find_lex $P1160, "$past"
-    $P1161 = $P1159."!make"($P1160)
+    set $S1134, $P1133
+    iseq $I1135, $S1134, "F"
+    find_lex $P1136, "$/"
+    $P1137 = $P1131."new"("\f", "enumcharlist" :named("pasttype"), $I1135 :named("negate"), $P1136 :named("node"))
+.annotate 'line', 299
+    store_lex "$past", $P1137
 .annotate 'line', 301
-    .return ($P1161)
-  control_1148:
+    find_lex $P1138, "$/"
+    find_lex $P1139, "$past"
+    $P1140 = $P1138."!make"($P1139)
+.annotate 'line', 298
+    .return ($P1140)
+  control_1127:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1162, exception, "payload"
-    .return ($P1162)
+    getattribute $P1141, exception, "payload"
+    .return ($P1141)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<v>"  :subid("71_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1166
-.annotate 'line', 307
-    new $P1165, 'ExceptionHandler'
-    set_addr $P1165, control_1164
-    $P1165."handle_types"(57)
-    push_eh $P1165
-    .lex "self", self
-    .lex "$/", param_1166
-.annotate 'line', 308
-    new $P1167, "Undef"
-    .lex "$past", $P1167
-    get_hll_global $P1168, ["PAST"], "Regex"
-.annotate 'line', 310
-    find_lex $P1169, "$/"
-    unless_null $P1169, vivify_279
-    $P1169 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "backslash:sym<h>"  :subid("69_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1145
+.annotate 'line', 304
+    new $P1144, 'ExceptionHandler'
+    set_addr $P1144, control_1143
+    $P1144."handle_types"(.CONTROL_RETURN)
+    push_eh $P1144
+    .lex "self", self
+    .lex "$/", param_1145
+.annotate 'line', 305
+    new $P1146, "Undef"
+    .lex "$past", $P1146
+    get_hll_global $P1147, ["PAST"], "Regex"
+.annotate 'line', 306
+    find_lex $P1148, "$/"
+    unless_null $P1148, vivify_279
+    $P1148 = root_new ['parrot';'Hash']
   vivify_279:
-    set $P1170, $P1169["sym"]
-    unless_null $P1170, vivify_280
-    new $P1170, "Undef"
+    set $P1149, $P1148["sym"]
+    unless_null $P1149, vivify_280
+    new $P1149, "Undef"
   vivify_280:
-    set $S1171, $P1170
-    iseq $I1172, $S1171, "V"
-    find_lex $P1173, "$/"
-    $P1174 = $P1168."new"(unicode:"\n\x{b}\f\r\x{85}\u2028\u2029", "enumcharlist" :named("pasttype"), $I1172 :named("negate"), $P1173 :named("node"))
-.annotate 'line', 308
-    store_lex "$past", $P1174
-.annotate 'line', 311
-    find_lex $P1175, "$/"
-    find_lex $P1176, "$past"
-    $P1177 = $P1175."!make"($P1176)
+    set $S1150, $P1149
+    iseq $I1151, $S1150, "H"
+    find_lex $P1152, "$/"
+    $P1153 = $P1147."new"(unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", "enumcharlist" :named("pasttype"), $I1151 :named("negate"), $P1152 :named("node"))
+.annotate 'line', 305
+    store_lex "$past", $P1153
 .annotate 'line', 307
-    .return ($P1177)
-  control_1164:
+    find_lex $P1154, "$/"
+    find_lex $P1155, "$past"
+    $P1156 = $P1154."!make"($P1155)
+.annotate 'line', 304
+    .return ($P1156)
+  control_1143:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1178, exception, "payload"
-    .return ($P1178)
+    getattribute $P1157, exception, "payload"
+    .return ($P1157)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<o>"  :subid("72_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1182
-.annotate 'line', 314
-    new $P1181, 'ExceptionHandler'
-    set_addr $P1181, control_1180
-    $P1181."handle_types"(57)
-    push_eh $P1181
+.include "except_types.pasm"
+.sub "backslash:sym<r>"  :subid("70_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1161
+.annotate 'line', 310
+    new $P1160, 'ExceptionHandler'
+    set_addr $P1160, control_1159
+    $P1160."handle_types"(.CONTROL_RETURN)
+    push_eh $P1160
     .lex "self", self
-    .lex "$/", param_1182
-.annotate 'line', 315
-    new $P1183, "Undef"
-    .lex "$octlit", $P1183
-.annotate 'line', 316
-    get_hll_global $P1184, ["HLL";"Actions"], "ints_to_string"
-    find_lex $P1187, "$/"
-    unless_null $P1187, vivify_281
-    $P1187 = root_new ['parrot';'Hash']
+    .lex "$/", param_1161
+.annotate 'line', 311
+    new $P1162, "Undef"
+    .lex "$past", $P1162
+    get_hll_global $P1163, ["PAST"], "Regex"
+.annotate 'line', 312
+    find_lex $P1164, "$/"
+    unless_null $P1164, vivify_281
+    $P1164 = root_new ['parrot';'Hash']
   vivify_281:
-    set $P1188, $P1187["octint"]
-    unless_null $P1188, vivify_282
-    new $P1188, "Undef"
+    set $P1165, $P1164["sym"]
+    unless_null $P1165, vivify_282
+    new $P1165, "Undef"
   vivify_282:
-    unless $P1188, unless_1186
-    set $P1185, $P1188
-    goto unless_1186_end
-  unless_1186:
-    find_lex $P1189, "$/"
-    unless_null $P1189, vivify_283
-    $P1189 = root_new ['parrot';'Hash']
-  vivify_283:
-    set $P1190, $P1189["octints"]
-    unless_null $P1190, vivify_284
-    $P1190 = root_new ['parrot';'Hash']
-  vivify_284:
-    set $P1191, $P1190["octint"]
-    unless_null $P1191, vivify_285
-    new $P1191, "Undef"
-  vivify_285:
-    set $P1185, $P1191
-  unless_1186_end:
-    $P1192 = $P1184($P1185)
-    store_lex "$octlit", $P1192
-.annotate 'line', 317
-    find_lex $P1193, "$/"
-    find_lex $P1196, "$/"
-    unless_null $P1196, vivify_286
-    $P1196 = root_new ['parrot';'Hash']
-  vivify_286:
-    set $P1197, $P1196["sym"]
-    unless_null $P1197, vivify_287
-    new $P1197, "Undef"
-  vivify_287:
-    set $S1198, $P1197
-    iseq $I1199, $S1198, "O"
-    if $I1199, if_1195
-.annotate 'line', 320
-    get_hll_global $P1204, ["PAST"], "Regex"
-    find_lex $P1205, "$octlit"
-    find_lex $P1206, "$/"
-    $P1207 = $P1204."new"($P1205, "literal" :named("pasttype"), $P1206 :named("node"))
-    set $P1194, $P1207
+    set $S1166, $P1165
+    iseq $I1167, $S1166, "R"
+    find_lex $P1168, "$/"
+    $P1169 = $P1163."new"("\r", "enumcharlist" :named("pasttype"), $I1167 :named("negate"), $P1168 :named("node"))
+.annotate 'line', 311
+    store_lex "$past", $P1169
+.annotate 'line', 313
+    find_lex $P1170, "$/"
+    find_lex $P1171, "$past"
+    $P1172 = $P1170."!make"($P1171)
+.annotate 'line', 310
+    .return ($P1172)
+  control_1159:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1173, exception, "payload"
+    .return ($P1173)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "backslash:sym<t>"  :subid("71_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1177
+.annotate 'line', 316
+    new $P1176, 'ExceptionHandler'
+    set_addr $P1176, control_1175
+    $P1176."handle_types"(.CONTROL_RETURN)
+    push_eh $P1176
+    .lex "self", self
+    .lex "$/", param_1177
 .annotate 'line', 317
-    goto if_1195_end
-  if_1195:
+    new $P1178, "Undef"
+    .lex "$past", $P1178
+    get_hll_global $P1179, ["PAST"], "Regex"
 .annotate 'line', 318
-    get_hll_global $P1200, ["PAST"], "Regex"
-    find_lex $P1201, "$octlit"
-    find_lex $P1202, "$/"
-    $P1203 = $P1200."new"($P1201, "enumcharlist" :named("pasttype"), 1 :named("negate"), $P1202 :named("node"))
-    set $P1194, $P1203
-  if_1195_end:
-    $P1208 = $P1193."!make"($P1194)
-.annotate 'line', 314
-    .return ($P1208)
-  control_1180:
+    find_lex $P1180, "$/"
+    unless_null $P1180, vivify_283
+    $P1180 = root_new ['parrot';'Hash']
+  vivify_283:
+    set $P1181, $P1180["sym"]
+    unless_null $P1181, vivify_284
+    new $P1181, "Undef"
+  vivify_284:
+    set $S1182, $P1181
+    iseq $I1183, $S1182, "T"
+    find_lex $P1184, "$/"
+    $P1185 = $P1179."new"("\t", "enumcharlist" :named("pasttype"), $I1183 :named("negate"), $P1184 :named("node"))
+.annotate 'line', 317
+    store_lex "$past", $P1185
+.annotate 'line', 319
+    find_lex $P1186, "$/"
+    find_lex $P1187, "$past"
+    $P1188 = $P1186."!make"($P1187)
+.annotate 'line', 316
+    .return ($P1188)
+  control_1175:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1209, exception, "payload"
-    .return ($P1209)
+    getattribute $P1189, exception, "payload"
+    .return ($P1189)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<x>"  :subid("73_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1213
+.include "except_types.pasm"
+.sub "backslash:sym<v>"  :subid("72_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1193
+.annotate 'line', 322
+    new $P1192, 'ExceptionHandler'
+    set_addr $P1192, control_1191
+    $P1192."handle_types"(.CONTROL_RETURN)
+    push_eh $P1192
+    .lex "self", self
+    .lex "$/", param_1193
 .annotate 'line', 323
-    new $P1212, 'ExceptionHandler'
-    set_addr $P1212, control_1211
-    $P1212."handle_types"(57)
-    push_eh $P1212
-    .lex "self", self
-    .lex "$/", param_1213
-.annotate 'line', 324
-    new $P1214, "Undef"
-    .lex "$hexlit", $P1214
+    new $P1194, "Undef"
+    .lex "$past", $P1194
+    get_hll_global $P1195, ["PAST"], "Regex"
 .annotate 'line', 325
-    get_hll_global $P1215, ["HLL";"Actions"], "ints_to_string"
-    find_lex $P1218, "$/"
-    unless_null $P1218, vivify_288
-    $P1218 = root_new ['parrot';'Hash']
+    find_lex $P1196, "$/"
+    unless_null $P1196, vivify_285
+    $P1196 = root_new ['parrot';'Hash']
+  vivify_285:
+    set $P1197, $P1196["sym"]
+    unless_null $P1197, vivify_286
+    new $P1197, "Undef"
+  vivify_286:
+    set $S1198, $P1197
+    iseq $I1199, $S1198, "V"
+    find_lex $P1200, "$/"
+    $P1201 = $P1195."new"(unicode:"\n\x{b}\f\r\x{85}\u2028\u2029", "enumcharlist" :named("pasttype"), $I1199 :named("negate"), $P1200 :named("node"))
+.annotate 'line', 323
+    store_lex "$past", $P1201
+.annotate 'line', 326
+    find_lex $P1202, "$/"
+    find_lex $P1203, "$past"
+    $P1204 = $P1202."!make"($P1203)
+.annotate 'line', 322
+    .return ($P1204)
+  control_1191:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1205, exception, "payload"
+    .return ($P1205)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "backslash:sym<o>"  :subid("73_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1209
+.annotate 'line', 329
+    new $P1208, 'ExceptionHandler'
+    set_addr $P1208, control_1207
+    $P1208."handle_types"(.CONTROL_RETURN)
+    push_eh $P1208
+    .lex "self", self
+    .lex "$/", param_1209
+.annotate 'line', 330
+    new $P1210, "Undef"
+    .lex "$octlit", $P1210
+.annotate 'line', 331
+    get_hll_global $P1211, ["HLL";"Actions"], "ints_to_string"
+    find_lex $P1214, "$/"
+    unless_null $P1214, vivify_287
+    $P1214 = root_new ['parrot';'Hash']
+  vivify_287:
+    set $P1215, $P1214["octint"]
+    unless_null $P1215, vivify_288
+    new $P1215, "Undef"
   vivify_288:
-    set $P1219, $P1218["hexint"]
-    unless_null $P1219, vivify_289
-    new $P1219, "Undef"
+    unless $P1215, unless_1213
+    set $P1212, $P1215
+    goto unless_1213_end
+  unless_1213:
+    find_lex $P1216, "$/"
+    unless_null $P1216, vivify_289
+    $P1216 = root_new ['parrot';'Hash']
   vivify_289:
-    unless $P1219, unless_1217
-    set $P1216, $P1219
-    goto unless_1217_end
-  unless_1217:
-    find_lex $P1220, "$/"
-    unless_null $P1220, vivify_290
-    $P1220 = root_new ['parrot';'Hash']
+    set $P1217, $P1216["octints"]
+    unless_null $P1217, vivify_290
+    $P1217 = root_new ['parrot';'Hash']
   vivify_290:
-    set $P1221, $P1220["hexints"]
-    unless_null $P1221, vivify_291
-    $P1221 = root_new ['parrot';'Hash']
+    set $P1218, $P1217["octint"]
+    unless_null $P1218, vivify_291
+    new $P1218, "Undef"
   vivify_291:
-    set $P1222, $P1221["hexint"]
-    unless_null $P1222, vivify_292
-    new $P1222, "Undef"
+    set $P1212, $P1218
+  unless_1213_end:
+    $P1219 = $P1211($P1212)
+    store_lex "$octlit", $P1219
+.annotate 'line', 332
+    find_lex $P1220, "$/"
+    find_lex $P1223, "$/"
+    unless_null $P1223, vivify_292
+    $P1223 = root_new ['parrot';'Hash']
   vivify_292:
-    set $P1216, $P1222
-  unless_1217_end:
-    $P1223 = $P1215($P1216)
-    store_lex "$hexlit", $P1223
-.annotate 'line', 326
-    find_lex $P1224, "$/"
-    find_lex $P1227, "$/"
-    unless_null $P1227, vivify_293
-    $P1227 = root_new ['parrot';'Hash']
+    set $P1224, $P1223["sym"]
+    unless_null $P1224, vivify_293
+    new $P1224, "Undef"
   vivify_293:
-    set $P1228, $P1227["sym"]
-    unless_null $P1228, vivify_294
-    new $P1228, "Undef"
-  vivify_294:
-    set $S1229, $P1228
-    iseq $I1230, $S1229, "X"
-    if $I1230, if_1226
-.annotate 'line', 329
-    get_hll_global $P1235, ["PAST"], "Regex"
-    find_lex $P1236, "$hexlit"
-    find_lex $P1237, "$/"
-    $P1238 = $P1235."new"($P1236, "literal" :named("pasttype"), $P1237 :named("node"))
-    set $P1225, $P1238
-.annotate 'line', 326
-    goto if_1226_end
-  if_1226:
-.annotate 'line', 327
+    set $S1225, $P1224
+    iseq $I1226, $S1225, "O"
+    if $I1226, if_1222
+.annotate 'line', 335
     get_hll_global $P1231, ["PAST"], "Regex"
-    find_lex $P1232, "$hexlit"
+    find_lex $P1232, "$octlit"
     find_lex $P1233, "$/"
-    $P1234 = $P1231."new"($P1232, "enumcharlist" :named("pasttype"), 1 :named("negate"), $P1233 :named("node"))
-    set $P1225, $P1234
-  if_1226_end:
-    $P1239 = $P1224."!make"($P1225)
-.annotate 'line', 323
-    .return ($P1239)
-  control_1211:
+    $P1234 = $P1231."new"($P1232, "literal" :named("pasttype"), $P1233 :named("node"))
+    set $P1221, $P1234
+.annotate 'line', 332
+    goto if_1222_end
+  if_1222:
+.annotate 'line', 333
+    get_hll_global $P1227, ["PAST"], "Regex"
+    find_lex $P1228, "$octlit"
+    find_lex $P1229, "$/"
+    $P1230 = $P1227."new"($P1228, "enumcharlist" :named("pasttype"), 1 :named("negate"), $P1229 :named("node"))
+    set $P1221, $P1230
+  if_1222_end:
+    $P1235 = $P1220."!make"($P1221)
+.annotate 'line', 329
+    .return ($P1235)
+  control_1207:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1240, exception, "payload"
-    .return ($P1240)
+    getattribute $P1236, exception, "payload"
+    .return ($P1236)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<c>"  :subid("74_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1244
-.annotate 'line', 332
-    new $P1243, 'ExceptionHandler'
-    set_addr $P1243, control_1242
-    $P1243."handle_types"(57)
-    push_eh $P1243
-    .lex "self", self
-    .lex "$/", param_1244
-.annotate 'line', 333
+.include "except_types.pasm"
+.sub "backslash:sym<x>"  :subid("74_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1240
+.annotate 'line', 338
+    new $P1239, 'ExceptionHandler'
+    set_addr $P1239, control_1238
+    $P1239."handle_types"(.CONTROL_RETURN)
+    push_eh $P1239
+    .lex "self", self
+    .lex "$/", param_1240
+.annotate 'line', 339
+    new $P1241, "Undef"
+    .lex "$hexlit", $P1241
+.annotate 'line', 340
+    get_hll_global $P1242, ["HLL";"Actions"], "ints_to_string"
     find_lex $P1245, "$/"
-    get_hll_global $P1246, ["PAST"], "Regex"
+    unless_null $P1245, vivify_294
+    $P1245 = root_new ['parrot';'Hash']
+  vivify_294:
+    set $P1246, $P1245["hexint"]
+    unless_null $P1246, vivify_295
+    new $P1246, "Undef"
+  vivify_295:
+    unless $P1246, unless_1244
+    set $P1243, $P1246
+    goto unless_1244_end
+  unless_1244:
     find_lex $P1247, "$/"
-    unless_null $P1247, vivify_295
+    unless_null $P1247, vivify_296
     $P1247 = root_new ['parrot';'Hash']
-  vivify_295:
-    set $P1248, $P1247["charspec"]
-    unless_null $P1248, vivify_296
-    new $P1248, "Undef"
   vivify_296:
-    $P1249 = $P1248."ast"()
-    find_lex $P1250, "$/"
-    $P1251 = $P1246."new"($P1249, "literal" :named("pasttype"), $P1250 :named("node"))
-    $P1252 = $P1245."!make"($P1251)
-.annotate 'line', 332
-    .return ($P1252)
-  control_1242:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1253, exception, "payload"
-    .return ($P1253)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<misc>"  :subid("75_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1257
-.annotate 'line', 336
-    new $P1256, 'ExceptionHandler'
-    set_addr $P1256, control_1255
-    $P1256."handle_types"(57)
-    push_eh $P1256
-    .lex "self", self
-    .lex "$/", param_1257
-.annotate 'line', 337
-    new $P1258, "Undef"
-    .lex "$past", $P1258
-    get_hll_global $P1259, ["PAST"], "Regex"
+    set $P1248, $P1247["hexints"]
+    unless_null $P1248, vivify_297
+    $P1248 = root_new ['parrot';'Hash']
+  vivify_297:
+    set $P1249, $P1248["hexint"]
+    unless_null $P1249, vivify_298
+    new $P1249, "Undef"
+  vivify_298:
+    set $P1243, $P1249
+  unless_1244_end:
+    $P1250 = $P1242($P1243)
+    store_lex "$hexlit", $P1250
+.annotate 'line', 341
+    find_lex $P1251, "$/"
+    find_lex $P1254, "$/"
+    unless_null $P1254, vivify_299
+    $P1254 = root_new ['parrot';'Hash']
+  vivify_299:
+    set $P1255, $P1254["sym"]
+    unless_null $P1255, vivify_300
+    new $P1255, "Undef"
+  vivify_300:
+    set $S1256, $P1255
+    iseq $I1257, $S1256, "X"
+    if $I1257, if_1253
+.annotate 'line', 344
+    get_hll_global $P1262, ["PAST"], "Regex"
+    find_lex $P1263, "$hexlit"
+    find_lex $P1264, "$/"
+    $P1265 = $P1262."new"($P1263, "literal" :named("pasttype"), $P1264 :named("node"))
+    set $P1252, $P1265
+.annotate 'line', 341
+    goto if_1253_end
+  if_1253:
+.annotate 'line', 342
+    get_hll_global $P1258, ["PAST"], "Regex"
+    find_lex $P1259, "$hexlit"
     find_lex $P1260, "$/"
-    set $S1261, $P1260
-    find_lex $P1262, "$/"
-    $P1263 = $P1259."new"($S1261, "literal" :named("pasttype"), $P1262 :named("node"))
-    store_lex "$past", $P1263
+    $P1261 = $P1258."new"($P1259, "enumcharlist" :named("pasttype"), 1 :named("negate"), $P1260 :named("node"))
+    set $P1252, $P1261
+  if_1253_end:
+    $P1266 = $P1251."!make"($P1252)
 .annotate 'line', 338
-    find_lex $P1264, "$/"
-    find_lex $P1265, "$past"
-    $P1266 = $P1264."!make"($P1265)
-.annotate 'line', 336
     .return ($P1266)
-  control_1255:
+  control_1238:
     .local pmc exception 
     .get_results (exception) 
     getattribute $P1267, exception, "payload"
@@ -10921,375 +11097,449 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<?>"  :subid("76_1274022889.08438") :method :outer("11_1274022889.08438")
+.include "except_types.pasm"
+.sub "backslash:sym<c>"  :subid("75_1275811482.3686") :method :outer("11_1275811482.3686")
     .param pmc param_1271
-.annotate 'line', 342
+.annotate 'line', 347
     new $P1270, 'ExceptionHandler'
     set_addr $P1270, control_1269
-    $P1270."handle_types"(57)
+    $P1270."handle_types"(.CONTROL_RETURN)
     push_eh $P1270
     .lex "self", self
     .lex "$/", param_1271
-.annotate 'line', 343
-    new $P1272, "Undef"
-    .lex "$past", $P1272
-.annotate 'line', 342
-    find_lex $P1273, "$past"
-.annotate 'line', 344
-    find_lex $P1275, "$/"
-    unless_null $P1275, vivify_297
-    $P1275 = root_new ['parrot';'Hash']
-  vivify_297:
-    set $P1276, $P1275["assertion"]
-    unless_null $P1276, vivify_298
-    new $P1276, "Undef"
-  vivify_298:
-    if $P1276, if_1274
 .annotate 'line', 348
-    new $P1281, "Integer"
-    assign $P1281, 0
-    store_lex "$past", $P1281
-    goto if_1274_end
-  if_1274:
-.annotate 'line', 345
+    find_lex $P1272, "$/"
+    get_hll_global $P1273, ["PAST"], "Regex"
+    find_lex $P1274, "$/"
+    unless_null $P1274, vivify_301
+    $P1274 = root_new ['parrot';'Hash']
+  vivify_301:
+    set $P1275, $P1274["charspec"]
+    unless_null $P1275, vivify_302
+    new $P1275, "Undef"
+  vivify_302:
+    $P1276 = $P1275."ast"()
     find_lex $P1277, "$/"
-    unless_null $P1277, vivify_299
-    $P1277 = root_new ['parrot';'Hash']
-  vivify_299:
-    set $P1278, $P1277["assertion"]
-    unless_null $P1278, vivify_300
-    new $P1278, "Undef"
-  vivify_300:
-    $P1279 = $P1278."ast"()
-    store_lex "$past", $P1279
-.annotate 'line', 346
-    find_lex $P1280, "$past"
-    $P1280."subtype"("zerowidth")
-  if_1274_end:
-.annotate 'line', 349
-    find_lex $P1282, "$/"
-    find_lex $P1283, "$past"
-    $P1284 = $P1282."!make"($P1283)
-.annotate 'line', 342
-    .return ($P1284)
+    $P1278 = $P1273."new"($P1276, "literal" :named("pasttype"), $P1277 :named("node"))
+    $P1279 = $P1272."!make"($P1278)
+.annotate 'line', 347
+    .return ($P1279)
   control_1269:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1285, exception, "payload"
-    .return ($P1285)
+    getattribute $P1280, exception, "payload"
+    .return ($P1280)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<!>"  :subid("77_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1289
-.annotate 'line', 352
-    new $P1288, 'ExceptionHandler'
-    set_addr $P1288, control_1287
-    $P1288."handle_types"(57)
-    push_eh $P1288
+.include "except_types.pasm"
+.sub "backslash:sym<misc>"  :subid("76_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1284
+.annotate 'line', 351
+    new $P1283, 'ExceptionHandler'
+    set_addr $P1283, control_1282
+    $P1283."handle_types"(.CONTROL_RETURN)
+    push_eh $P1283
     .lex "self", self
-    .lex "$/", param_1289
-.annotate 'line', 353
-    new $P1290, "Undef"
-    .lex "$past", $P1290
+    .lex "$/", param_1284
 .annotate 'line', 352
-    find_lex $P1291, "$past"
-.annotate 'line', 354
-    find_lex $P1293, "$/"
-    unless_null $P1293, vivify_301
-    $P1293 = root_new ['parrot';'Hash']
-  vivify_301:
-    set $P1294, $P1293["assertion"]
-    unless_null $P1294, vivify_302
-    new $P1294, "Undef"
-  vivify_302:
-    if $P1294, if_1292
-.annotate 'line', 360
-    get_hll_global $P1303, ["PAST"], "Regex"
-    find_lex $P1304, "$/"
-    $P1305 = $P1303."new"("anchor" :named("pasttype"), "fail" :named("subtype"), $P1304 :named("node"))
-    store_lex "$past", $P1305
+    new $P1285, "Undef"
+    .lex "$past", $P1285
+    get_hll_global $P1286, ["PAST"], "Regex"
+    find_lex $P1287, "$/"
+    set $S1288, $P1287
+    find_lex $P1289, "$/"
+    $P1290 = $P1286."new"($S1288, "literal" :named("pasttype"), $P1289 :named("node"))
+    store_lex "$past", $P1290
+.annotate 'line', 353
+    find_lex $P1291, "$/"
+    find_lex $P1292, "$past"
+    $P1293 = $P1291."!make"($P1292)
+.annotate 'line', 351
+    .return ($P1293)
+  control_1282:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1294, exception, "payload"
+    .return ($P1294)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "assertion:sym<?>"  :subid("77_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1298
+.annotate 'line', 357
+    new $P1297, 'ExceptionHandler'
+    set_addr $P1297, control_1296
+    $P1297."handle_types"(.CONTROL_RETURN)
+    push_eh $P1297
+    .lex "self", self
+    .lex "$/", param_1298
+.annotate 'line', 358
+    new $P1299, "Undef"
+    .lex "$past", $P1299
+.annotate 'line', 357
+    find_lex $P1300, "$past"
 .annotate 'line', 359
-    goto if_1292_end
-  if_1292:
-.annotate 'line', 355
-    find_lex $P1295, "$/"
-    unless_null $P1295, vivify_303
-    $P1295 = root_new ['parrot';'Hash']
+    find_lex $P1302, "$/"
+    unless_null $P1302, vivify_303
+    $P1302 = root_new ['parrot';'Hash']
   vivify_303:
-    set $P1296, $P1295["assertion"]
-    unless_null $P1296, vivify_304
-    new $P1296, "Undef"
+    set $P1303, $P1302["assertion"]
+    unless_null $P1303, vivify_304
+    new $P1303, "Undef"
   vivify_304:
-    $P1297 = $P1296."ast"()
-    store_lex "$past", $P1297
-.annotate 'line', 356
-    find_lex $P1298, "$past"
-    find_lex $P1299, "$past"
-    $P1300 = $P1299."negate"()
-    isfalse $I1301, $P1300
-    $P1298."negate"($I1301)
-.annotate 'line', 357
-    find_lex $P1302, "$past"
-    $P1302."subtype"("zerowidth")
-  if_1292_end:
-.annotate 'line', 362
-    find_lex $P1306, "$/"
+    if $P1303, if_1301
+.annotate 'line', 363
+    new $P1308, "Integer"
+    assign $P1308, 0
+    store_lex "$past", $P1308
+    goto if_1301_end
+  if_1301:
+.annotate 'line', 360
+    find_lex $P1304, "$/"
+    unless_null $P1304, vivify_305
+    $P1304 = root_new ['parrot';'Hash']
+  vivify_305:
+    set $P1305, $P1304["assertion"]
+    unless_null $P1305, vivify_306
+    new $P1305, "Undef"
+  vivify_306:
+    $P1306 = $P1305."ast"()
+    store_lex "$past", $P1306
+.annotate 'line', 361
     find_lex $P1307, "$past"
-    $P1308 = $P1306."!make"($P1307)
-.annotate 'line', 352
-    .return ($P1308)
-  control_1287:
+    $P1307."subtype"("zerowidth")
+  if_1301_end:
+.annotate 'line', 364
+    find_lex $P1309, "$/"
+    find_lex $P1310, "$past"
+    $P1311 = $P1309."!make"($P1310)
+.annotate 'line', 357
+    .return ($P1311)
+  control_1296:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1309, exception, "payload"
-    .return ($P1309)
+    getattribute $P1312, exception, "payload"
+    .return ($P1312)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<method>"  :subid("78_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1313
-.annotate 'line', 365
-    new $P1312, 'ExceptionHandler'
-    set_addr $P1312, control_1311
-    $P1312."handle_types"(57)
-    push_eh $P1312
+.include "except_types.pasm"
+.sub "assertion:sym<!>"  :subid("78_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1316
+.annotate 'line', 367
+    new $P1315, 'ExceptionHandler'
+    set_addr $P1315, control_1314
+    $P1315."handle_types"(.CONTROL_RETURN)
+    push_eh $P1315
     .lex "self", self
-    .lex "$/", param_1313
-.annotate 'line', 366
-    new $P1314, "Undef"
-    .lex "$past", $P1314
-    find_lex $P1315, "$/"
-    unless_null $P1315, vivify_305
-    $P1315 = root_new ['parrot';'Hash']
-  vivify_305:
-    set $P1316, $P1315["assertion"]
-    unless_null $P1316, vivify_306
-    new $P1316, "Undef"
-  vivify_306:
-    $P1317 = $P1316."ast"()
-    store_lex "$past", $P1317
+    .lex "$/", param_1316
+.annotate 'line', 368
+    new $P1317, "Undef"
+    .lex "$past", $P1317
 .annotate 'line', 367
     find_lex $P1318, "$past"
-    $P1318."subtype"("method")
-.annotate 'line', 368
-    find_lex $P1319, "$past"
-    $P1319."name"("")
 .annotate 'line', 369
     find_lex $P1320, "$/"
-    find_lex $P1321, "$past"
-    $P1322 = $P1320."!make"($P1321)
-.annotate 'line', 365
-    .return ($P1322)
-  control_1311:
+    unless_null $P1320, vivify_307
+    $P1320 = root_new ['parrot';'Hash']
+  vivify_307:
+    set $P1321, $P1320["assertion"]
+    unless_null $P1321, vivify_308
+    new $P1321, "Undef"
+  vivify_308:
+    if $P1321, if_1319
+.annotate 'line', 375
+    get_hll_global $P1330, ["PAST"], "Regex"
+    find_lex $P1331, "$/"
+    $P1332 = $P1330."new"("anchor" :named("pasttype"), "fail" :named("subtype"), $P1331 :named("node"))
+    store_lex "$past", $P1332
+.annotate 'line', 374
+    goto if_1319_end
+  if_1319:
+.annotate 'line', 370
+    find_lex $P1322, "$/"
+    unless_null $P1322, vivify_309
+    $P1322 = root_new ['parrot';'Hash']
+  vivify_309:
+    set $P1323, $P1322["assertion"]
+    unless_null $P1323, vivify_310
+    new $P1323, "Undef"
+  vivify_310:
+    $P1324 = $P1323."ast"()
+    store_lex "$past", $P1324
+.annotate 'line', 371
+    find_lex $P1325, "$past"
+    find_lex $P1326, "$past"
+    $P1327 = $P1326."negate"()
+    isfalse $I1328, $P1327
+    $P1325."negate"($I1328)
+.annotate 'line', 372
+    find_lex $P1329, "$past"
+    $P1329."subtype"("zerowidth")
+  if_1319_end:
+.annotate 'line', 377
+    find_lex $P1333, "$/"
+    find_lex $P1334, "$past"
+    $P1335 = $P1333."!make"($P1334)
+.annotate 'line', 367
+    .return ($P1335)
+  control_1314:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1323, exception, "payload"
-    .return ($P1323)
+    getattribute $P1336, exception, "payload"
+    .return ($P1336)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<name>"  :subid("79_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1327
-.annotate 'line', 372
-    .const 'Sub' $P1385 = "81_1274022889.08438" 
-    capture_lex $P1385
-    .const 'Sub' $P1349 = "80_1274022889.08438" 
-    capture_lex $P1349
-    new $P1326, 'ExceptionHandler'
-    set_addr $P1326, control_1325
-    $P1326."handle_types"(57)
-    push_eh $P1326
-    .lex "self", self
-    .lex "$/", param_1327
-.annotate 'line', 373
-    new $P1328, "Undef"
-    .lex "$name", $P1328
-.annotate 'line', 374
-    new $P1329, "Undef"
-    .lex "$past", $P1329
-.annotate 'line', 373
-    find_lex $P1330, "$/"
-    unless_null $P1330, vivify_307
-    $P1330 = root_new ['parrot';'Hash']
-  vivify_307:
-    set $P1331, $P1330["longname"]
-    unless_null $P1331, vivify_308
-    new $P1331, "Undef"
-  vivify_308:
-    set $S1332, $P1331
-    new $P1333, 'String'
-    set $P1333, $S1332
-    store_lex "$name", $P1333
-    find_lex $P1334, "$past"
-.annotate 'line', 375
-    find_lex $P1336, "$/"
-    unless_null $P1336, vivify_309
-    $P1336 = root_new ['parrot';'Hash']
-  vivify_309:
-    set $P1337, $P1336["assertion"]
-    unless_null $P1337, vivify_310
-    new $P1337, "Undef"
-  vivify_310:
-    if $P1337, if_1335
-.annotate 'line', 379
-    find_lex $P1345, "$name"
-    set $S1346, $P1345
-    iseq $I1347, $S1346, "sym"
-    if $I1347, if_1344
-.annotate 'line', 395
-    get_hll_global $P1359, ["PAST"], "Regex"
-    find_lex $P1360, "$name"
-    find_lex $P1361, "$name"
-    find_lex $P1362, "$/"
-    $P1363 = $P1359."new"($P1360, $P1361 :named("name"), "subrule" :named("pasttype"), "capture" :named("subtype"), $P1362 :named("node"))
-    store_lex "$past", $P1363
-.annotate 'line', 397
-    find_lex $P1365, "$/"
-    unless_null $P1365, vivify_311
-    $P1365 = root_new ['parrot';'Hash']
+.include "except_types.pasm"
+.sub "assertion:sym<method>"  :subid("79_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1340
+.annotate 'line', 380
+    new $P1339, 'ExceptionHandler'
+    set_addr $P1339, control_1338
+    $P1339."handle_types"(.CONTROL_RETURN)
+    push_eh $P1339
+    .lex "self", self
+    .lex "$/", param_1340
+.annotate 'line', 381
+    new $P1341, "Undef"
+    .lex "$past", $P1341
+    find_lex $P1342, "$/"
+    unless_null $P1342, vivify_311
+    $P1342 = root_new ['parrot';'Hash']
   vivify_311:
-    set $P1366, $P1365["nibbler"]
-    unless_null $P1366, vivify_312
-    new $P1366, "Undef"
+    set $P1343, $P1342["assertion"]
+    unless_null $P1343, vivify_312
+    new $P1343, "Undef"
   vivify_312:
-    if $P1366, if_1364
-.annotate 'line', 400
-    find_lex $P1374, "$/"
-    unless_null $P1374, vivify_313
-    $P1374 = root_new ['parrot';'Hash']
+    $P1344 = $P1343."ast"()
+    store_lex "$past", $P1344
+.annotate 'line', 382
+    find_lex $P1345, "$past"
+    $P1345."subtype"("method")
+.annotate 'line', 383
+    find_lex $P1346, "$past"
+    $P1346."name"("")
+.annotate 'line', 384
+    find_lex $P1347, "$/"
+    find_lex $P1348, "$past"
+    $P1349 = $P1347."!make"($P1348)
+.annotate 'line', 380
+    .return ($P1349)
+  control_1338:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1350, exception, "payload"
+    .return ($P1350)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "assertion:sym<name>"  :subid("80_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1354
+.annotate 'line', 387
+    .const 'Sub' $P1412 = "82_1275811482.3686" 
+    capture_lex $P1412
+    .const 'Sub' $P1376 = "81_1275811482.3686" 
+    capture_lex $P1376
+    new $P1353, 'ExceptionHandler'
+    set_addr $P1353, control_1352
+    $P1353."handle_types"(.CONTROL_RETURN)
+    push_eh $P1353
+    .lex "self", self
+    .lex "$/", param_1354
+.annotate 'line', 388
+    new $P1355, "Undef"
+    .lex "$name", $P1355
+.annotate 'line', 389
+    new $P1356, "Undef"
+    .lex "$past", $P1356
+.annotate 'line', 388
+    find_lex $P1357, "$/"
+    unless_null $P1357, vivify_313
+    $P1357 = root_new ['parrot';'Hash']
   vivify_313:
-    set $P1375, $P1374["arglist"]
-    unless_null $P1375, vivify_314
-    new $P1375, "Undef"
+    set $P1358, $P1357["longname"]
+    unless_null $P1358, vivify_314
+    new $P1358, "Undef"
   vivify_314:
-    unless $P1375, if_1373_end
-.annotate 'line', 401
-    find_lex $P1377, "$/"
-    unless_null $P1377, vivify_315
-    $P1377 = root_new ['parrot';'Hash']
+    set $S1359, $P1358
+    new $P1360, 'String'
+    set $P1360, $S1359
+    store_lex "$name", $P1360
+    find_lex $P1361, "$past"
+.annotate 'line', 390
+    find_lex $P1363, "$/"
+    unless_null $P1363, vivify_315
+    $P1363 = root_new ['parrot';'Hash']
   vivify_315:
-    set $P1378, $P1377["arglist"]
-    unless_null $P1378, vivify_316
-    $P1378 = root_new ['parrot';'ResizablePMCArray']
+    set $P1364, $P1363["assertion"]
+    unless_null $P1364, vivify_316
+    new $P1364, "Undef"
   vivify_316:
-    set $P1379, $P1378[0]
-    unless_null $P1379, vivify_317
-    new $P1379, "Undef"
+    if $P1364, if_1362
+.annotate 'line', 394
+    find_lex $P1372, "$name"
+    set $S1373, $P1372
+    iseq $I1374, $S1373, "sym"
+    if $I1374, if_1371
+.annotate 'line', 410
+    get_hll_global $P1386, ["PAST"], "Regex"
+    find_lex $P1387, "$name"
+    find_lex $P1388, "$name"
+    find_lex $P1389, "$/"
+    $P1390 = $P1386."new"($P1387, $P1388 :named("name"), "subrule" :named("pasttype"), "capture" :named("subtype"), $P1389 :named("node"))
+    store_lex "$past", $P1390
+.annotate 'line', 412
+    find_lex $P1392, "$/"
+    unless_null $P1392, vivify_317
+    $P1392 = root_new ['parrot';'Hash']
   vivify_317:
-    $P1380 = $P1379."ast"()
-    $P1381 = $P1380."list"()
-    defined $I1382, $P1381
-    unless $I1382, for_undef_318
-    iter $P1376, $P1381
-    new $P1391, 'ExceptionHandler'
-    set_addr $P1391, loop1390_handler
-    $P1391."handle_types"(64, 66, 65)
-    push_eh $P1391
-  loop1390_test:
-    unless $P1376, loop1390_done
-    shift $P1383, $P1376
-  loop1390_redo:
-    .const 'Sub' $P1385 = "81_1274022889.08438" 
-    capture_lex $P1385
-    $P1385($P1383)
-  loop1390_next:
-    goto loop1390_test
-  loop1390_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1392, exception, 'type'
-    eq $P1392, 64, loop1390_next
-    eq $P1392, 66, loop1390_redo
-  loop1390_done:
-    pop_eh 
-  for_undef_318:
-  if_1373_end:
-.annotate 'line', 400
-    goto if_1364_end
-  if_1364:
-.annotate 'line', 398
-    find_lex $P1367, "$past"
-    find_lex $P1368, "$/"
-    unless_null $P1368, vivify_319
-    $P1368 = root_new ['parrot';'Hash']
+    set $P1393, $P1392["nibbler"]
+    unless_null $P1393, vivify_318
+    new $P1393, "Undef"
+  vivify_318:
+    if $P1393, if_1391
+.annotate 'line', 415
+    find_lex $P1401, "$/"
+    unless_null $P1401, vivify_319
+    $P1401 = root_new ['parrot';'Hash']
   vivify_319:
-    set $P1369, $P1368["nibbler"]
-    unless_null $P1369, vivify_320
-    $P1369 = root_new ['parrot';'ResizablePMCArray']
+    set $P1402, $P1401["arglist"]
+    unless_null $P1402, vivify_320
+    new $P1402, "Undef"
   vivify_320:
-    set $P1370, $P1369[0]
-    unless_null $P1370, vivify_321
-    new $P1370, "Undef"
+    unless $P1402, if_1400_end
+.annotate 'line', 416
+    find_lex $P1404, "$/"
+    unless_null $P1404, vivify_321
+    $P1404 = root_new ['parrot';'Hash']
   vivify_321:
-    $P1371 = $P1370."ast"()
-    $P1372 = "buildsub"($P1371)
-    $P1367."push"($P1372)
-  if_1364_end:
-.annotate 'line', 394
-    goto if_1344_end
-  if_1344:
-.annotate 'line', 379
-    .const 'Sub' $P1349 = "80_1274022889.08438" 
-    capture_lex $P1349
-    $P1349()
-  if_1344_end:
-    goto if_1335_end
-  if_1335:
-.annotate 'line', 376
-    find_lex $P1338, "$/"
-    unless_null $P1338, vivify_322
-    $P1338 = root_new ['parrot';'Hash']
+    set $P1405, $P1404["arglist"]
+    unless_null $P1405, vivify_322
+    $P1405 = root_new ['parrot';'ResizablePMCArray']
   vivify_322:
-    set $P1339, $P1338["assertion"]
-    unless_null $P1339, vivify_323
-    $P1339 = root_new ['parrot';'ResizablePMCArray']
+    set $P1406, $P1405[0]
+    unless_null $P1406, vivify_323
+    new $P1406, "Undef"
   vivify_323:
-    set $P1340, $P1339[0]
-    unless_null $P1340, vivify_324
-    new $P1340, "Undef"
-  vivify_324:
-    $P1341 = $P1340."ast"()
-    store_lex "$past", $P1341
-.annotate 'line', 377
-    find_lex $P1342, "$past"
-    find_lex $P1343, "$name"
-    "subrule_alias"($P1342, $P1343)
-  if_1335_end:
-.annotate 'line', 404
-    find_lex $P1393, "$/"
+    $P1407 = $P1406."ast"()
+    $P1408 = $P1407."list"()
+    defined $I1409, $P1408
+    unless $I1409, for_undef_324
+    iter $P1403, $P1408
+    new $P1418, 'ExceptionHandler'
+    set_addr $P1418, loop1417_handler
+    $P1418."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1418
+  loop1417_test:
+    unless $P1403, loop1417_done
+    shift $P1410, $P1403
+  loop1417_redo:
+    .const 'Sub' $P1412 = "82_1275811482.3686" 
+    capture_lex $P1412
+    $P1412($P1410)
+  loop1417_next:
+    goto loop1417_test
+  loop1417_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1419, exception, 'type'
+    eq $P1419, .CONTROL_LOOP_NEXT, loop1417_next
+    eq $P1419, .CONTROL_LOOP_REDO, loop1417_redo
+  loop1417_done:
+    pop_eh 
+  for_undef_324:
+  if_1400_end:
+.annotate 'line', 415
+    goto if_1391_end
+  if_1391:
+.annotate 'line', 413
     find_lex $P1394, "$past"
-    $P1395 = $P1393."!make"($P1394)
-.annotate 'line', 372
-    .return ($P1395)
-  control_1325:
+    find_lex $P1395, "$/"
+    unless_null $P1395, vivify_325
+    $P1395 = root_new ['parrot';'Hash']
+  vivify_325:
+    set $P1396, $P1395["nibbler"]
+    unless_null $P1396, vivify_326
+    $P1396 = root_new ['parrot';'ResizablePMCArray']
+  vivify_326:
+    set $P1397, $P1396[0]
+    unless_null $P1397, vivify_327
+    new $P1397, "Undef"
+  vivify_327:
+    $P1398 = $P1397."ast"()
+    $P1399 = "buildsub"($P1398)
+    $P1394."push"($P1399)
+  if_1391_end:
+.annotate 'line', 409
+    goto if_1371_end
+  if_1371:
+.annotate 'line', 394
+    .const 'Sub' $P1376 = "81_1275811482.3686" 
+    capture_lex $P1376
+    $P1376()
+  if_1371_end:
+    goto if_1362_end
+  if_1362:
+.annotate 'line', 391
+    find_lex $P1365, "$/"
+    unless_null $P1365, vivify_328
+    $P1365 = root_new ['parrot';'Hash']
+  vivify_328:
+    set $P1366, $P1365["assertion"]
+    unless_null $P1366, vivify_329
+    $P1366 = root_new ['parrot';'ResizablePMCArray']
+  vivify_329:
+    set $P1367, $P1366[0]
+    unless_null $P1367, vivify_330
+    new $P1367, "Undef"
+  vivify_330:
+    $P1368 = $P1367."ast"()
+    store_lex "$past", $P1368
+.annotate 'line', 392
+    find_lex $P1369, "$past"
+    find_lex $P1370, "$name"
+    "subrule_alias"($P1369, $P1370)
+  if_1362_end:
+.annotate 'line', 419
+    find_lex $P1420, "$/"
+    find_lex $P1421, "$past"
+    $P1422 = $P1420."!make"($P1421)
+.annotate 'line', 387
+    .return ($P1422)
+  control_1352:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1396, exception, "payload"
-    .return ($P1396)
+    getattribute $P1423, exception, "payload"
+    .return ($P1423)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1384"  :anon :subid("81_1274022889.08438") :outer("79_1274022889.08438")
-    .param pmc param_1386
-.annotate 'line', 401
-    .lex "$_", param_1386
-    find_lex $P1387, "$past"
-    find_lex $P1388, "$_"
-    $P1389 = $P1387."push"($P1388)
-    .return ($P1389)
+.sub "_block1411"  :anon :subid("82_1275811482.3686") :outer("80_1275811482.3686")
+    .param pmc param_1413
+.annotate 'line', 416
+    .lex "$_", param_1413
+    find_lex $P1414, "$past"
+    find_lex $P1415, "$_"
+    $P1416 = $P1414."push"($P1415)
+    .return ($P1416)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1348"  :anon :subid("80_1274022889.08438") :outer("79_1274022889.08438")
-.annotate 'line', 380
-    new $P1350, "Undef"
-    .lex "$regexsym", $P1350
+.sub "_block1375"  :anon :subid("81_1275811482.3686") :outer("80_1275811482.3686")
+.annotate 'line', 395
+    new $P1377, "Undef"
+    .lex "$regexsym", $P1377
 
             $P0 = get_global '$REGEXNAME'
             $S0 = $P0
@@ -11297,388 +11547,390 @@
             add $I0, 5
             $S0 = substr $S0, $I0
             $S0 = chopn $S0, 1
-            $P1351 = box $S0
+            $P1378 = box $S0
         
-    store_lex "$regexsym", $P1351
-.annotate 'line', 389
-    get_hll_global $P1352, ["PAST"], "Regex"
-.annotate 'line', 390
-    get_hll_global $P1353, ["PAST"], "Regex"
-    find_lex $P1354, "$regexsym"
-    $P1355 = $P1353."new"($P1354, "literal" :named("pasttype"))
-    find_lex $P1356, "$name"
-    find_lex $P1357, "$/"
-    $P1358 = $P1352."new"($P1355, $P1356 :named("name"), "subcapture" :named("pasttype"), $P1357 :named("node"))
-.annotate 'line', 389
-    store_lex "$past", $P1358
-.annotate 'line', 379
-    .return ($P1358)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<[>"  :subid("82_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1400
-.annotate 'line', 407
-    .const 'Sub' $P1435 = "83_1274022889.08438" 
-    capture_lex $P1435
-    new $P1399, 'ExceptionHandler'
-    set_addr $P1399, control_1398
-    $P1399."handle_types"(57)
-    push_eh $P1399
-    .lex "self", self
-    .lex "$/", param_1400
-.annotate 'line', 408
-    new $P1401, "Undef"
-    .lex "$clist", $P1401
-.annotate 'line', 409
-    new $P1402, "Undef"
-    .lex "$past", $P1402
-.annotate 'line', 418
-    new $P1403, "Undef"
-    .lex "$i", $P1403
-.annotate 'line', 419
-    new $P1404, "Undef"
-    .lex "$n", $P1404
-.annotate 'line', 408
-    find_lex $P1405, "$/"
-    unless_null $P1405, vivify_325
-    $P1405 = root_new ['parrot';'Hash']
-  vivify_325:
-    set $P1406, $P1405["cclass_elem"]
-    unless_null $P1406, vivify_326
-    new $P1406, "Undef"
-  vivify_326:
-    store_lex "$clist", $P1406
-.annotate 'line', 409
-    find_lex $P1407, "$clist"
-    unless_null $P1407, vivify_327
-    $P1407 = root_new ['parrot';'ResizablePMCArray']
-  vivify_327:
-    set $P1408, $P1407[0]
-    unless_null $P1408, vivify_328
-    new $P1408, "Undef"
-  vivify_328:
-    $P1409 = $P1408."ast"()
-    store_lex "$past", $P1409
-.annotate 'line', 410
-    find_lex $P1413, "$past"
-    $P1414 = $P1413."negate"()
-    if $P1414, if_1412
-    set $P1411, $P1414
-    goto if_1412_end
-  if_1412:
-    find_lex $P1415, "$past"
-    $S1416 = $P1415."pasttype"()
-    iseq $I1417, $S1416, "subrule"
-    new $P1411, 'Integer'
-    set $P1411, $I1417
-  if_1412_end:
-    unless $P1411, if_1410_end
-.annotate 'line', 411
-    find_lex $P1418, "$past"
-    $P1418."subtype"("zerowidth")
-.annotate 'line', 412
-    get_hll_global $P1419, ["PAST"], "Regex"
-    find_lex $P1420, "$past"
-.annotate 'line', 414
-    get_hll_global $P1421, ["PAST"], "Regex"
-    $P1422 = $P1421."new"("charclass" :named("pasttype"), "." :named("subtype"))
-    find_lex $P1423, "$/"
-    $P1424 = $P1419."new"($P1420, $P1422, $P1423 :named("node"))
-.annotate 'line', 412
-    store_lex "$past", $P1424
-  if_1410_end:
-.annotate 'line', 418
-    new $P1425, "Integer"
-    assign $P1425, 1
-    store_lex "$i", $P1425
-.annotate 'line', 419
-    find_lex $P1426, "$clist"
-    set $N1427, $P1426
-    new $P1428, 'Float'
-    set $P1428, $N1427
-    store_lex "$n", $P1428
-.annotate 'line', 420
-    new $P1459, 'ExceptionHandler'
-    set_addr $P1459, loop1458_handler
-    $P1459."handle_types"(64, 66, 65)
-    push_eh $P1459
-  loop1458_test:
-    find_lex $P1429, "$i"
-    set $N1430, $P1429
-    find_lex $P1431, "$n"
-    set $N1432, $P1431
-    islt $I1433, $N1430, $N1432
-    unless $I1433, loop1458_done
-  loop1458_redo:
-    .const 'Sub' $P1435 = "83_1274022889.08438" 
-    capture_lex $P1435
-    $P1435()
-  loop1458_next:
-    goto loop1458_test
-  loop1458_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1460, exception, 'type'
-    eq $P1460, 64, loop1458_next
-    eq $P1460, 66, loop1458_redo
-  loop1458_done:
-    pop_eh 
-.annotate 'line', 431
-    find_lex $P1461, "$/"
-    find_lex $P1462, "$past"
-    $P1463 = $P1461."!make"($P1462)
-.annotate 'line', 407
-    .return ($P1463)
-  control_1398:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1464, exception, "payload"
-    .return ($P1464)
+    store_lex "$regexsym", $P1378
+.annotate 'line', 404
+    get_hll_global $P1379, ["PAST"], "Regex"
+.annotate 'line', 405
+    get_hll_global $P1380, ["PAST"], "Regex"
+    find_lex $P1381, "$regexsym"
+    $P1382 = $P1380."new"($P1381, "literal" :named("pasttype"))
+    find_lex $P1383, "$name"
+    find_lex $P1384, "$/"
+    $P1385 = $P1379."new"($P1382, $P1383 :named("name"), "subcapture" :named("pasttype"), $P1384 :named("node"))
+.annotate 'line', 404
+    store_lex "$past", $P1385
+.annotate 'line', 394
+    .return ($P1385)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1434"  :anon :subid("83_1274022889.08438") :outer("82_1274022889.08438")
-.annotate 'line', 421
-    new $P1436, "Undef"
-    .lex "$ast", $P1436
-    find_lex $P1437, "$i"
-    set $I1438, $P1437
-    find_lex $P1439, "$clist"
-    unless_null $P1439, vivify_329
-    $P1439 = root_new ['parrot';'ResizablePMCArray']
-  vivify_329:
-    set $P1440, $P1439[$I1438]
-    unless_null $P1440, vivify_330
-    new $P1440, "Undef"
-  vivify_330:
-    $P1441 = $P1440."ast"()
-    store_lex "$ast", $P1441
+.include "except_types.pasm"
+.sub "assertion:sym<[>"  :subid("83_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1427
 .annotate 'line', 422
-    find_lex $P1443, "$ast"
-    $P1444 = $P1443."negate"()
-    if $P1444, if_1442
-.annotate 'line', 427
-    get_hll_global $P1451, ["PAST"], "Regex"
-    find_lex $P1452, "$past"
-    find_lex $P1453, "$ast"
-    find_lex $P1454, "$/"
-    $P1455 = $P1451."new"($P1452, $P1453, "alt" :named("pasttype"), $P1454 :named("node"))
-    store_lex "$past", $P1455
-.annotate 'line', 426
-    goto if_1442_end
-  if_1442:
+    .const 'Sub' $P1462 = "84_1275811482.3686" 
+    capture_lex $P1462
+    new $P1426, 'ExceptionHandler'
+    set_addr $P1426, control_1425
+    $P1426."handle_types"(.CONTROL_RETURN)
+    push_eh $P1426
+    .lex "self", self
+    .lex "$/", param_1427
 .annotate 'line', 423
-    find_lex $P1445, "$ast"
-    $P1445."subtype"("zerowidth")
+    new $P1428, "Undef"
+    .lex "$clist", $P1428
 .annotate 'line', 424
-    get_hll_global $P1446, ["PAST"], "Regex"
-    find_lex $P1447, "$ast"
-    find_lex $P1448, "$past"
-    find_lex $P1449, "$/"
-    $P1450 = $P1446."new"($P1447, $P1448, "concat" :named("pasttype"), $P1449 :named("node"))
-    store_lex "$past", $P1450
-  if_1442_end:
-.annotate 'line', 429
-    find_lex $P1456, "$i"
-    add $P1457, $P1456, 1
-    store_lex "$i", $P1457
-.annotate 'line', 420
-    .return ($P1457)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "cclass_elem"  :subid("84_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1468
+    new $P1429, "Undef"
+    .lex "$past", $P1429
+.annotate 'line', 433
+    new $P1430, "Undef"
+    .lex "$i", $P1430
 .annotate 'line', 434
-    .const 'Sub' $P1493 = "86_1274022889.08438" 
-    capture_lex $P1493
-    .const 'Sub' $P1477 = "85_1274022889.08438" 
-    capture_lex $P1477
-    new $P1467, 'ExceptionHandler'
-    set_addr $P1467, control_1466
-    $P1467."handle_types"(57)
-    push_eh $P1467
-    .lex "self", self
-    .lex "$/", param_1468
-.annotate 'line', 435
-    new $P1469, "Undef"
-    .lex "$str", $P1469
-.annotate 'line', 436
-    new $P1470, "Undef"
-    .lex "$past", $P1470
-.annotate 'line', 435
-    new $P1471, "String"
-    assign $P1471, ""
-    store_lex "$str", $P1471
-    find_lex $P1472, "$past"
-.annotate 'line', 437
-    find_lex $P1474, "$/"
-    unless_null $P1474, vivify_331
-    $P1474 = root_new ['parrot';'Hash']
+    new $P1431, "Undef"
+    .lex "$n", $P1431
+.annotate 'line', 423
+    find_lex $P1432, "$/"
+    unless_null $P1432, vivify_331
+    $P1432 = root_new ['parrot';'Hash']
   vivify_331:
-    set $P1475, $P1474["name"]
-    unless_null $P1475, vivify_332
-    new $P1475, "Undef"
+    set $P1433, $P1432["cclass_elem"]
+    unless_null $P1433, vivify_332
+    new $P1433, "Undef"
   vivify_332:
-    if $P1475, if_1473
-.annotate 'line', 441
-    find_lex $P1488, "$/"
-    unless_null $P1488, vivify_333
-    $P1488 = root_new ['parrot';'Hash']
+    store_lex "$clist", $P1433
+.annotate 'line', 424
+    find_lex $P1434, "$clist"
+    unless_null $P1434, vivify_333
+    $P1434 = root_new ['parrot';'ResizablePMCArray']
   vivify_333:
-    set $P1489, $P1488["charspec"]
-    unless_null $P1489, vivify_334
-    new $P1489, "Undef"
+    set $P1435, $P1434[0]
+    unless_null $P1435, vivify_334
+    new $P1435, "Undef"
   vivify_334:
-    defined $I1490, $P1489
-    unless $I1490, for_undef_335
-    iter $P1487, $P1489
-    new $P1519, 'ExceptionHandler'
-    set_addr $P1519, loop1518_handler
-    $P1519."handle_types"(64, 66, 65)
-    push_eh $P1519
-  loop1518_test:
-    unless $P1487, loop1518_done
-    shift $P1491, $P1487
-  loop1518_redo:
-    .const 'Sub' $P1493 = "86_1274022889.08438" 
-    capture_lex $P1493
-    $P1493($P1491)
-  loop1518_next:
-    goto loop1518_test
-  loop1518_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1520, exception, 'type'
-    eq $P1520, 64, loop1518_next
-    eq $P1520, 66, loop1518_redo
-  loop1518_done:
-    pop_eh 
-  for_undef_335:
-.annotate 'line', 466
-    get_hll_global $P1521, ["PAST"], "Regex"
-    find_lex $P1522, "$str"
-    find_lex $P1523, "$/"
-    $P1524 = $P1521."new"($P1522, "enumcharlist" :named("pasttype"), $P1523 :named("node"))
-    store_lex "$past", $P1524
-.annotate 'line', 440
-    goto if_1473_end
-  if_1473:
-.annotate 'line', 437
-    .const 'Sub' $P1477 = "85_1274022889.08438" 
-    capture_lex $P1477
-    $P1477()
-  if_1473_end:
-.annotate 'line', 468
-    find_lex $P1525, "$past"
-    find_lex $P1526, "$/"
-    unless_null $P1526, vivify_347
-    $P1526 = root_new ['parrot';'Hash']
-  vivify_347:
-    set $P1527, $P1526["sign"]
-    unless_null $P1527, vivify_348
-    new $P1527, "Undef"
-  vivify_348:
-    set $S1528, $P1527
-    iseq $I1529, $S1528, "-"
-    $P1525."negate"($I1529)
-.annotate 'line', 469
-    find_lex $P1530, "$/"
-    find_lex $P1531, "$past"
-    $P1532 = $P1530."!make"($P1531)
+    $P1436 = $P1435."ast"()
+    store_lex "$past", $P1436
+.annotate 'line', 425
+    find_lex $P1440, "$past"
+    $P1441 = $P1440."negate"()
+    if $P1441, if_1439
+    set $P1438, $P1441
+    goto if_1439_end
+  if_1439:
+    find_lex $P1442, "$past"
+    $S1443 = $P1442."pasttype"()
+    iseq $I1444, $S1443, "subrule"
+    new $P1438, 'Integer'
+    set $P1438, $I1444
+  if_1439_end:
+    unless $P1438, if_1437_end
+.annotate 'line', 426
+    find_lex $P1445, "$past"
+    $P1445."subtype"("zerowidth")
+.annotate 'line', 427
+    get_hll_global $P1446, ["PAST"], "Regex"
+    find_lex $P1447, "$past"
+.annotate 'line', 429
+    get_hll_global $P1448, ["PAST"], "Regex"
+    $P1449 = $P1448."new"("charclass" :named("pasttype"), "." :named("subtype"))
+    find_lex $P1450, "$/"
+    $P1451 = $P1446."new"($P1447, $P1449, $P1450 :named("node"))
+.annotate 'line', 427
+    store_lex "$past", $P1451
+  if_1437_end:
+.annotate 'line', 433
+    new $P1452, "Integer"
+    assign $P1452, 1
+    store_lex "$i", $P1452
 .annotate 'line', 434
-    .return ($P1532)
-  control_1466:
+    find_lex $P1453, "$clist"
+    set $N1454, $P1453
+    new $P1455, 'Float'
+    set $P1455, $N1454
+    store_lex "$n", $P1455
+.annotate 'line', 435
+    new $P1486, 'ExceptionHandler'
+    set_addr $P1486, loop1485_handler
+    $P1486."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1486
+  loop1485_test:
+    find_lex $P1456, "$i"
+    set $N1457, $P1456
+    find_lex $P1458, "$n"
+    set $N1459, $P1458
+    islt $I1460, $N1457, $N1459
+    unless $I1460, loop1485_done
+  loop1485_redo:
+    .const 'Sub' $P1462 = "84_1275811482.3686" 
+    capture_lex $P1462
+    $P1462()
+  loop1485_next:
+    goto loop1485_test
+  loop1485_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1487, exception, 'type'
+    eq $P1487, .CONTROL_LOOP_NEXT, loop1485_next
+    eq $P1487, .CONTROL_LOOP_REDO, loop1485_redo
+  loop1485_done:
+    pop_eh 
+.annotate 'line', 446
+    find_lex $P1488, "$/"
+    find_lex $P1489, "$past"
+    $P1490 = $P1488."!make"($P1489)
+.annotate 'line', 422
+    .return ($P1490)
+  control_1425:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1533, exception, "payload"
-    .return ($P1533)
+    getattribute $P1491, exception, "payload"
+    .return ($P1491)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1492"  :anon :subid("86_1274022889.08438") :outer("84_1274022889.08438")
-    .param pmc param_1494
-.annotate 'line', 441
-    .const 'Sub' $P1500 = "87_1274022889.08438" 
-    capture_lex $P1500
-    .lex "$_", param_1494
-.annotate 'line', 442
-    find_lex $P1497, "$_"
-    unless_null $P1497, vivify_336
-    $P1497 = root_new ['parrot';'ResizablePMCArray']
+.sub "_block1461"  :anon :subid("84_1275811482.3686") :outer("83_1275811482.3686")
+.annotate 'line', 436
+    new $P1463, "Undef"
+    .lex "$ast", $P1463
+    find_lex $P1464, "$i"
+    set $I1465, $P1464
+    find_lex $P1466, "$clist"
+    unless_null $P1466, vivify_335
+    $P1466 = root_new ['parrot';'ResizablePMCArray']
+  vivify_335:
+    set $P1467, $P1466[$I1465]
+    unless_null $P1467, vivify_336
+    new $P1467, "Undef"
   vivify_336:
-    set $P1498, $P1497[1]
-    unless_null $P1498, vivify_337
-    new $P1498, "Undef"
-  vivify_337:
-    if $P1498, if_1496
-.annotate 'line', 464
-    find_lex $P1514, "$str"
-    find_lex $P1515, "$_"
-    unless_null $P1515, vivify_338
-    $P1515 = root_new ['parrot';'ResizablePMCArray']
-  vivify_338:
-    set $P1516, $P1515[0]
-    unless_null $P1516, vivify_339
-    new $P1516, "Undef"
-  vivify_339:
-    concat $P1517, $P1514, $P1516
-    store_lex "$str", $P1517
-    set $P1495, $P1517
+    $P1468 = $P1467."ast"()
+    store_lex "$ast", $P1468
+.annotate 'line', 437
+    find_lex $P1470, "$ast"
+    $P1471 = $P1470."negate"()
+    if $P1471, if_1469
 .annotate 'line', 442
-    goto if_1496_end
-  if_1496:
-    .const 'Sub' $P1500 = "87_1274022889.08438" 
-    capture_lex $P1500
-    $P1513 = $P1500()
-    set $P1495, $P1513
-  if_1496_end:
+    get_hll_global $P1478, ["PAST"], "Regex"
+    find_lex $P1479, "$past"
+    find_lex $P1480, "$ast"
+    find_lex $P1481, "$/"
+    $P1482 = $P1478."new"($P1479, $P1480, "alt" :named("pasttype"), $P1481 :named("node"))
+    store_lex "$past", $P1482
 .annotate 'line', 441
-    .return ($P1495)
+    goto if_1469_end
+  if_1469:
+.annotate 'line', 438
+    find_lex $P1472, "$ast"
+    $P1472."subtype"("zerowidth")
+.annotate 'line', 439
+    get_hll_global $P1473, ["PAST"], "Regex"
+    find_lex $P1474, "$ast"
+    find_lex $P1475, "$past"
+    find_lex $P1476, "$/"
+    $P1477 = $P1473."new"($P1474, $P1475, "concat" :named("pasttype"), $P1476 :named("node"))
+    store_lex "$past", $P1477
+  if_1469_end:
+.annotate 'line', 444
+    find_lex $P1483, "$i"
+    add $P1484, $P1483, 1
+    store_lex "$i", $P1484
+.annotate 'line', 435
+    .return ($P1484)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1499"  :anon :subid("87_1274022889.08438") :outer("86_1274022889.08438")
-.annotate 'line', 443
-    new $P1501, "Undef"
-    .lex "$a", $P1501
-.annotate 'line', 444
+.include "except_types.pasm"
+.sub "cclass_elem"  :subid("85_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1495
+.annotate 'line', 449
+    .const 'Sub' $P1520 = "87_1275811482.3686" 
+    capture_lex $P1520
+    .const 'Sub' $P1504 = "86_1275811482.3686" 
+    capture_lex $P1504
+    new $P1494, 'ExceptionHandler'
+    set_addr $P1494, control_1493
+    $P1494."handle_types"(.CONTROL_RETURN)
+    push_eh $P1494
+    .lex "self", self
+    .lex "$/", param_1495
+.annotate 'line', 450
+    new $P1496, "Undef"
+    .lex "$str", $P1496
+.annotate 'line', 451
+    new $P1497, "Undef"
+    .lex "$past", $P1497
+.annotate 'line', 450
+    new $P1498, "String"
+    assign $P1498, ""
+    store_lex "$str", $P1498
+    find_lex $P1499, "$past"
+.annotate 'line', 452
+    find_lex $P1501, "$/"
+    unless_null $P1501, vivify_337
+    $P1501 = root_new ['parrot';'Hash']
+  vivify_337:
+    set $P1502, $P1501["name"]
+    unless_null $P1502, vivify_338
     new $P1502, "Undef"
-    .lex "$b", $P1502
-.annotate 'line', 445
-    new $P1503, "Undef"
-    .lex "$c", $P1503
-.annotate 'line', 443
-    find_lex $P1504, "$_"
-    unless_null $P1504, vivify_340
-    $P1504 = root_new ['parrot';'ResizablePMCArray']
+  vivify_338:
+    if $P1502, if_1500
+.annotate 'line', 456
+    find_lex $P1515, "$/"
+    unless_null $P1515, vivify_339
+    $P1515 = root_new ['parrot';'Hash']
+  vivify_339:
+    set $P1516, $P1515["charspec"]
+    unless_null $P1516, vivify_340
+    new $P1516, "Undef"
   vivify_340:
-    set $P1505, $P1504[0]
-    unless_null $P1505, vivify_341
-    new $P1505, "Undef"
-  vivify_341:
-    store_lex "$a", $P1505
-.annotate 'line', 444
-    find_lex $P1506, "$_"
-    unless_null $P1506, vivify_342
-    $P1506 = root_new ['parrot';'ResizablePMCArray']
+    defined $I1517, $P1516
+    unless $I1517, for_undef_341
+    iter $P1514, $P1516
+    new $P1546, 'ExceptionHandler'
+    set_addr $P1546, loop1545_handler
+    $P1546."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1546
+  loop1545_test:
+    unless $P1514, loop1545_done
+    shift $P1518, $P1514
+  loop1545_redo:
+    .const 'Sub' $P1520 = "87_1275811482.3686" 
+    capture_lex $P1520
+    $P1520($P1518)
+  loop1545_next:
+    goto loop1545_test
+  loop1545_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1547, exception, 'type'
+    eq $P1547, .CONTROL_LOOP_NEXT, loop1545_next
+    eq $P1547, .CONTROL_LOOP_REDO, loop1545_redo
+  loop1545_done:
+    pop_eh 
+  for_undef_341:
+.annotate 'line', 481
+    get_hll_global $P1548, ["PAST"], "Regex"
+    find_lex $P1549, "$str"
+    find_lex $P1550, "$/"
+    $P1551 = $P1548."new"($P1549, "enumcharlist" :named("pasttype"), $P1550 :named("node"))
+    store_lex "$past", $P1551
+.annotate 'line', 455
+    goto if_1500_end
+  if_1500:
+.annotate 'line', 452
+    .const 'Sub' $P1504 = "86_1275811482.3686" 
+    capture_lex $P1504
+    $P1504()
+  if_1500_end:
+.annotate 'line', 483
+    find_lex $P1552, "$past"
+    find_lex $P1553, "$/"
+    unless_null $P1553, vivify_353
+    $P1553 = root_new ['parrot';'Hash']
+  vivify_353:
+    set $P1554, $P1553["sign"]
+    unless_null $P1554, vivify_354
+    new $P1554, "Undef"
+  vivify_354:
+    set $S1555, $P1554
+    iseq $I1556, $S1555, "-"
+    $P1552."negate"($I1556)
+.annotate 'line', 484
+    find_lex $P1557, "$/"
+    find_lex $P1558, "$past"
+    $P1559 = $P1557."!make"($P1558)
+.annotate 'line', 449
+    .return ($P1559)
+  control_1493:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1560, exception, "payload"
+    .return ($P1560)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.sub "_block1519"  :anon :subid("87_1275811482.3686") :outer("85_1275811482.3686")
+    .param pmc param_1521
+.annotate 'line', 456
+    .const 'Sub' $P1527 = "88_1275811482.3686" 
+    capture_lex $P1527
+    .lex "$_", param_1521
+.annotate 'line', 457
+    find_lex $P1524, "$_"
+    unless_null $P1524, vivify_342
+    $P1524 = root_new ['parrot';'ResizablePMCArray']
   vivify_342:
-    set $P1507, $P1506[1]
-    unless_null $P1507, vivify_343
-    $P1507 = root_new ['parrot';'ResizablePMCArray']
+    set $P1525, $P1524[1]
+    unless_null $P1525, vivify_343
+    new $P1525, "Undef"
   vivify_343:
-    set $P1508, $P1507[0]
-    unless_null $P1508, vivify_344
-    new $P1508, "Undef"
+    if $P1525, if_1523
+.annotate 'line', 479
+    find_lex $P1541, "$str"
+    find_lex $P1542, "$_"
+    unless_null $P1542, vivify_344
+    $P1542 = root_new ['parrot';'ResizablePMCArray']
   vivify_344:
-    store_lex "$b", $P1508
-.annotate 'line', 445
+    set $P1543, $P1542[0]
+    unless_null $P1543, vivify_345
+    new $P1543, "Undef"
+  vivify_345:
+    concat $P1544, $P1541, $P1543
+    store_lex "$str", $P1544
+    set $P1522, $P1544
+.annotate 'line', 457
+    goto if_1523_end
+  if_1523:
+    .const 'Sub' $P1527 = "88_1275811482.3686" 
+    capture_lex $P1527
+    $P1540 = $P1527()
+    set $P1522, $P1540
+  if_1523_end:
+.annotate 'line', 456
+    .return ($P1522)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.sub "_block1526"  :anon :subid("88_1275811482.3686") :outer("87_1275811482.3686")
+.annotate 'line', 458
+    new $P1528, "Undef"
+    .lex "$a", $P1528
+.annotate 'line', 459
+    new $P1529, "Undef"
+    .lex "$b", $P1529
+.annotate 'line', 460
+    new $P1530, "Undef"
+    .lex "$c", $P1530
+.annotate 'line', 458
+    find_lex $P1531, "$_"
+    unless_null $P1531, vivify_346
+    $P1531 = root_new ['parrot';'ResizablePMCArray']
+  vivify_346:
+    set $P1532, $P1531[0]
+    unless_null $P1532, vivify_347
+    new $P1532, "Undef"
+  vivify_347:
+    store_lex "$a", $P1532
+.annotate 'line', 459
+    find_lex $P1533, "$_"
+    unless_null $P1533, vivify_348
+    $P1533 = root_new ['parrot';'ResizablePMCArray']
+  vivify_348:
+    set $P1534, $P1533[1]
+    unless_null $P1534, vivify_349
+    $P1534 = root_new ['parrot';'ResizablePMCArray']
+  vivify_349:
+    set $P1535, $P1534[0]
+    unless_null $P1535, vivify_350
+    new $P1535, "Undef"
+  vivify_350:
+    store_lex "$b", $P1535
+.annotate 'line', 460
 
                              $P0 = find_lex '$a'
                              $S0 = $P0
@@ -11694,160 +11946,161 @@
                              inc $I0
                              goto cclass_loop
                            cclass_done:
-                             $P1509 = box $S2
+                             $P1536 = box $S2
                          
-    store_lex "$c", $P1509
-.annotate 'line', 462
-    find_lex $P1510, "$str"
-    find_lex $P1511, "$c"
-    concat $P1512, $P1510, $P1511
-    store_lex "$str", $P1512
-.annotate 'line', 442
-    .return ($P1512)
+    store_lex "$c", $P1536
+.annotate 'line', 477
+    find_lex $P1537, "$str"
+    find_lex $P1538, "$c"
+    concat $P1539, $P1537, $P1538
+    store_lex "$str", $P1539
+.annotate 'line', 457
+    .return ($P1539)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1476"  :anon :subid("85_1274022889.08438") :outer("84_1274022889.08438")
-.annotate 'line', 438
-    new $P1478, "Undef"
-    .lex "$name", $P1478
-    find_lex $P1479, "$/"
-    unless_null $P1479, vivify_345
-    $P1479 = root_new ['parrot';'Hash']
-  vivify_345:
-    set $P1480, $P1479["name"]
-    unless_null $P1480, vivify_346
-    new $P1480, "Undef"
-  vivify_346:
-    set $S1481, $P1480
-    new $P1482, 'String'
-    set $P1482, $S1481
-    store_lex "$name", $P1482
-.annotate 'line', 439
-    get_hll_global $P1483, ["PAST"], "Regex"
-    find_lex $P1484, "$name"
-    find_lex $P1485, "$/"
-    $P1486 = $P1483."new"($P1484, "subrule" :named("pasttype"), "method" :named("subtype"), $P1485 :named("node"))
-    store_lex "$past", $P1486
-.annotate 'line', 437
-    .return ($P1486)
+.sub "_block1503"  :anon :subid("86_1275811482.3686") :outer("85_1275811482.3686")
+.annotate 'line', 453
+    new $P1505, "Undef"
+    .lex "$name", $P1505
+    find_lex $P1506, "$/"
+    unless_null $P1506, vivify_351
+    $P1506 = root_new ['parrot';'Hash']
+  vivify_351:
+    set $P1507, $P1506["name"]
+    unless_null $P1507, vivify_352
+    new $P1507, "Undef"
+  vivify_352:
+    set $S1508, $P1507
+    new $P1509, 'String'
+    set $P1509, $S1508
+    store_lex "$name", $P1509
+.annotate 'line', 454
+    get_hll_global $P1510, ["PAST"], "Regex"
+    find_lex $P1511, "$name"
+    find_lex $P1512, "$/"
+    $P1513 = $P1510."new"($P1511, "subrule" :named("pasttype"), "method" :named("subtype"), $P1512 :named("node"))
+    store_lex "$past", $P1513
+.annotate 'line', 452
+    .return ($P1513)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "mod_internal"  :subid("88_1274022889.08438") :method :outer("11_1274022889.08438")
-    .param pmc param_1537
-.annotate 'line', 472
-    new $P1536, 'ExceptionHandler'
-    set_addr $P1536, control_1535
-    $P1536."handle_types"(57)
-    push_eh $P1536
-    .lex "self", self
-    .lex "$/", param_1537
-.annotate 'line', 473
-    $P1538 = root_new ['parrot';'Hash']
-    .lex "%mods", $P1538
-.annotate 'line', 474
-    new $P1539, "Undef"
-    .lex "$n", $P1539
-.annotate 'line', 473
-    get_global $P1540, "@MODIFIERS"
-    unless_null $P1540, vivify_349
-    $P1540 = root_new ['parrot';'ResizablePMCArray']
-  vivify_349:
-    set $P1541, $P1540[0]
-    unless_null $P1541, vivify_350
-    new $P1541, "Undef"
-  vivify_350:
-    store_lex "%mods", $P1541
-.annotate 'line', 474
-    find_lex $P1544, "$/"
-    unless_null $P1544, vivify_351
-    $P1544 = root_new ['parrot';'Hash']
-  vivify_351:
-    set $P1545, $P1544["n"]
-    unless_null $P1545, vivify_352
-    $P1545 = root_new ['parrot';'ResizablePMCArray']
-  vivify_352:
-    set $P1546, $P1545[0]
-    unless_null $P1546, vivify_353
-    new $P1546, "Undef"
-  vivify_353:
-    set $S1547, $P1546
-    isgt $I1548, $S1547, ""
-    if $I1548, if_1543
-    new $P1553, "Integer"
-    assign $P1553, 1
-    set $P1542, $P1553
-    goto if_1543_end
-  if_1543:
-    find_lex $P1549, "$/"
-    unless_null $P1549, vivify_354
-    $P1549 = root_new ['parrot';'Hash']
-  vivify_354:
-    set $P1550, $P1549["n"]
-    unless_null $P1550, vivify_355
-    $P1550 = root_new ['parrot';'ResizablePMCArray']
+.include "except_types.pasm"
+.sub "mod_internal"  :subid("89_1275811482.3686") :method :outer("11_1275811482.3686")
+    .param pmc param_1564
+.annotate 'line', 487
+    new $P1563, 'ExceptionHandler'
+    set_addr $P1563, control_1562
+    $P1563."handle_types"(.CONTROL_RETURN)
+    push_eh $P1563
+    .lex "self", self
+    .lex "$/", param_1564
+.annotate 'line', 488
+    $P1565 = root_new ['parrot';'Hash']
+    .lex "%mods", $P1565
+.annotate 'line', 489
+    new $P1566, "Undef"
+    .lex "$n", $P1566
+.annotate 'line', 488
+    get_global $P1567, "@MODIFIERS"
+    unless_null $P1567, vivify_355
+    $P1567 = root_new ['parrot';'ResizablePMCArray']
   vivify_355:
-    set $P1551, $P1550[0]
-    unless_null $P1551, vivify_356
-    new $P1551, "Undef"
+    set $P1568, $P1567[0]
+    unless_null $P1568, vivify_356
+    new $P1568, "Undef"
   vivify_356:
-    set $N1552, $P1551
-    new $P1542, 'Float'
-    set $P1542, $N1552
-  if_1543_end:
-    store_lex "$n", $P1542
-.annotate 'line', 475
-    find_lex $P1554, "$n"
-    find_lex $P1555, "$/"
-    unless_null $P1555, vivify_357
-    $P1555 = root_new ['parrot';'Hash']
+    store_lex "%mods", $P1568
+.annotate 'line', 489
+    find_lex $P1571, "$/"
+    unless_null $P1571, vivify_357
+    $P1571 = root_new ['parrot';'Hash']
   vivify_357:
-    set $P1556, $P1555["mod_ident"]
-    unless_null $P1556, vivify_358
-    $P1556 = root_new ['parrot';'Hash']
+    set $P1572, $P1571["n"]
+    unless_null $P1572, vivify_358
+    $P1572 = root_new ['parrot';'ResizablePMCArray']
   vivify_358:
-    set $P1557, $P1556["sym"]
-    unless_null $P1557, vivify_359
-    new $P1557, "Undef"
+    set $P1573, $P1572[0]
+    unless_null $P1573, vivify_359
+    new $P1573, "Undef"
   vivify_359:
-    set $S1558, $P1557
-    find_lex $P1559, "%mods"
-    unless_null $P1559, vivify_360
-    $P1559 = root_new ['parrot';'Hash']
-    store_lex "%mods", $P1559
+    set $S1574, $P1573
+    isgt $I1575, $S1574, ""
+    if $I1575, if_1570
+    new $P1580, "Integer"
+    assign $P1580, 1
+    set $P1569, $P1580
+    goto if_1570_end
+  if_1570:
+    find_lex $P1576, "$/"
+    unless_null $P1576, vivify_360
+    $P1576 = root_new ['parrot';'Hash']
   vivify_360:
-    set $P1559[$S1558], $P1554
-.annotate 'line', 476
-    find_lex $P1560, "$/"
-    $P1561 = $P1560."!make"(0)
-.annotate 'line', 472
-    .return ($P1561)
-  control_1535:
+    set $P1577, $P1576["n"]
+    unless_null $P1577, vivify_361
+    $P1577 = root_new ['parrot';'ResizablePMCArray']
+  vivify_361:
+    set $P1578, $P1577[0]
+    unless_null $P1578, vivify_362
+    new $P1578, "Undef"
+  vivify_362:
+    set $N1579, $P1578
+    new $P1569, 'Float'
+    set $P1569, $N1579
+  if_1570_end:
+    store_lex "$n", $P1569
+.annotate 'line', 490
+    find_lex $P1581, "$n"
+    find_lex $P1582, "$/"
+    unless_null $P1582, vivify_363
+    $P1582 = root_new ['parrot';'Hash']
+  vivify_363:
+    set $P1583, $P1582["mod_ident"]
+    unless_null $P1583, vivify_364
+    $P1583 = root_new ['parrot';'Hash']
+  vivify_364:
+    set $P1584, $P1583["sym"]
+    unless_null $P1584, vivify_365
+    new $P1584, "Undef"
+  vivify_365:
+    set $S1585, $P1584
+    find_lex $P1586, "%mods"
+    unless_null $P1586, vivify_366
+    $P1586 = root_new ['parrot';'Hash']
+    store_lex "%mods", $P1586
+  vivify_366:
+    set $P1586[$S1585], $P1581
+.annotate 'line', 491
+    find_lex $P1587, "$/"
+    $P1588 = $P1587."!make"(0)
+.annotate 'line', 487
+    .return ($P1588)
+  control_1562:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1562, exception, "payload"
-    .return ($P1562)
+    getattribute $P1589, exception, "payload"
+    .return ($P1589)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1567" :load :anon :subid("89_1274022889.08438")
+.sub "_block1594" :load :anon :subid("90_1275811482.3686")
 .annotate 'line', 4
-    .const 'Sub' $P1569 = "11_1274022889.08438" 
-    $P1570 = $P1569()
-    .return ($P1570)
+    .const 'Sub' $P1596 = "11_1275811482.3686" 
+    $P1597 = $P1596()
+    .return ($P1597)
 .end
 
 
 .namespace []
-.sub "_block1573" :load :anon :subid("90_1274022889.08438")
+.sub "_block1600" :load :anon :subid("91_1275811482.3686")
 .annotate 'line', 1
-    .const 'Sub' $P1575 = "10_1274022889.08438" 
-    $P1576 = $P1575()
-    .return ($P1576)
+    .const 'Sub' $P1602 = "10_1275811482.3686" 
+    $P1603 = $P1602()
+    .return ($P1603)
 .end
 
 # .include 'src/cheats/p6regex-grammar.pir'

Modified: branches/gsoc_threads/ext/nqp-rx/src/stage0/Regex-s0.pir
==============================================================================
--- branches/gsoc_threads/ext/nqp-rx/src/stage0/Regex-s0.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/ext/nqp-rx/src/stage0/Regex-s0.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -149,16 +149,12 @@
     unless cstack_it goto cstack_done
     .local pmc subcur, submatch, names
     subcur = shift cstack_it
+    $I0 = isa subcur, ['Regex';'Cursor']
+    unless $I0 goto cstack_loop
     # If the subcursor isn't bound with a name, skip it
     names = getattribute subcur, '$!names'
     if null names goto cstack_loop
-    $I0 = isa subcur, ['Regex';'Cursor']
-    unless $I0 goto cstack_1
     submatch = subcur.'MATCH'()
-    goto cstack_2
-  cstack_1:
-    submatch = subcur
-  cstack_2:
     # See if we have multiple binds
     .local pmc names_it
     subname = names
@@ -433,13 +429,15 @@
     orig = getattribute self, '$!target'
     line = orig.'lineof'(from)
     inc line
-    printerr from
-    printerr '/'
-    printerr line
-    printerr ': '
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(2)
+    print $P1, from
+    print $P1, '/'
+    print $P1, line
+    print $P1, ': '
     $S0 = join '', args
-    printerr $S0
-    printerr "\n"
+    print $P1, $S0
+    print $P1, "\n"
   done:
     .return (self)
 .end
@@ -720,6 +718,128 @@
 .end
 
 
+=item !INTERPOLATE(var [, convert])
+
+Perform regex interpolation on C<var>.  If C<var> is a
+regex (sub), it is used directly, otherwise it is used
+for a string literal match.  If C<var> is an array,
+then all of the elements of C<var> are considered,
+and the longest match is returned.
+
+=cut
+
+.sub '!INTERPOLATE' :method
+    .param pmc var
+
+    .local pmc cur
+    .local int pos, eos
+    .local string tgt
+
+    $I0 = does var, 'array'
+    if $I0 goto var_array
+
+  var_scalar:
+    $I0 = does var, 'invokable'
+    if $I0 goto var_sub
+
+  var_string:
+    (cur, pos, tgt) = self.'!cursor_start'()
+    eos = length tgt
+    $S0 = var
+    $I0 = length $S0
+    $I1 = pos + $I0
+    if $I1 > eos goto string_fail
+    $S1 = substr tgt, pos, $I0
+    if $S0 != $S1 goto string_fail
+    pos += $I0
+  string_pass:
+    cur.'!cursor_pass'(pos, '')
+  string_fail:
+    .return (cur)
+
+  var_sub:
+    cur = var(self)
+    .return (cur)
+
+  var_array:
+    (cur, pos, tgt) = self.'!cursor_start'()
+    eos = length tgt
+    .local pmc var_it, elem
+    .local int maxlen
+    var_it = iter var
+    maxlen = -1
+  array_loop:
+    unless var_it goto array_done
+    elem = shift var_it
+    $I0 = does elem, 'invokable'
+    if $I0 goto array_sub
+  array_string:
+    $S0 = elem
+    $I0 = length $S0
+    if $I0 <= maxlen goto array_loop
+    $I1 = pos + $I0
+    if $I1 > eos goto array_loop
+    $S1 = substr tgt, pos, $I0
+    if $S0 != $S1 goto array_loop
+    maxlen = $I0
+    goto array_loop
+  array_sub:
+    $P0 = elem(self)
+    unless $P0 goto array_loop
+    $I0 = $P0.'pos'()
+    $I0 -= pos
+    if $I0 <= maxlen goto array_loop
+    maxlen = $I0
+    goto array_loop
+  array_done:
+    if maxlen < 0 goto array_fail
+    $I0 = pos + maxlen
+    cur.'!cursor_pass'($I0, '')
+  array_fail:
+    .return (cur)
+.end
+
+
+=item !INTERPOLATE_REGEX(var)
+
+Same as C<!INTERPOLATE> above, except that any non-regex values
+are first compiled to regexes prior to being matched.  
+
+=cut
+
+.sub '!INTERPOLATE_REGEX' :method
+    .param pmc var
+
+    $I0 = does var, 'invokable'
+    if $I0 goto done
+
+    .local pmc p6regex
+    p6regex = compreg 'Regex::P6Regex'
+
+    $I0 = does var, 'array'
+    if $I0 goto var_array
+    var = p6regex.'compile'(var)
+    goto done
+
+  var_array:
+    .local pmc var_it, elem
+    var_it = iter var
+    var = new ['ResizablePMCArray']
+  var_loop:
+    unless var_it goto done
+    elem = shift var_it
+    $I0 = does elem, 'invokable'
+    if $I0 goto var_next
+    elem = p6regex.'compile'(elem)
+  var_next:
+    push var, elem
+    goto var_loop
+
+  done:
+    .tailcall self.'!INTERPOLATE'(var)
+.end
+    
+
 =back
 
 =head2 Vtable functions
@@ -879,6 +999,10 @@
     (cur, pos, tgt) = self.'!cursor_start'()
     $I0 = is_cclass .CCLASS_ALPHABETIC, tgt, pos
     if $I0 goto pass
+
+    $I0 = length tgt
+    if pos >= $I0 goto fail
+
     $S0 = substr tgt, pos, 1
     if $S0 != '_' goto fail
   pass:
@@ -1495,6 +1619,9 @@
     $I0 = self.'to'()
     $I1 = self.'from'()
     $I2 = $I0 - $I1
+    if $I2 >= 0 goto done
+    .return (0)
+  done:
     .return ($I2)
 .end
 
@@ -1921,7 +2048,7 @@
 # vim: expandtab shiftwidth=4 ft=pir:
 
 ### .include 'src/PAST/Regex.pir'
-# $Id: Regex.pir 41578 2009-09-30 14:45:23Z pmichaud $
+# $Id$
 
 =head1 NAME
 
@@ -2167,6 +2294,22 @@
     .tailcall head.'prefix'(prefix, tail :flat)
 .end
 
+.sub 'prefix_pastnode' :method
+    .param string prefix
+    .param pmc tail
+
+    unless tail goto pastnode_none
+    .local string subtype
+    subtype = self.'subtype'()
+    if subtype != 'declarative' goto pastnode_none
+
+    .local pmc head
+    head = shift tail
+    .tailcall head.'prefix'(prefix, tail :flat)
+
+  pastnode_none:
+    .return (prefix)
+.end
 
 .sub 'prefix_subcapture' :method
     .param string prefix
@@ -2180,7 +2323,7 @@
     .param pmc tail
 
     .local pmc name, negate, subtype
-    name = self.'name'()
+    name = self[0]
     negate = self.'negate'()
     subtype = self.'subtype'()
     $I0 = does name, 'string'
@@ -2268,7 +2411,7 @@
     .lex '$*REG', reghash
 
     .local pmc regexname, regexname_esc
-    $P0 = get_global '@?BLOCK'
+    $P0 = find_dynamic_lex '@*BLOCKPAST'
     $P1 = $P0[0]
     $S0 = $P1.'name'()
     regexname = box $S0
@@ -2358,6 +2501,7 @@
     ops.'push_pirop'('.local pmc', 'match')
     ops.'push_pirop'('.lex', '"$/"', 'match')
     ops.'push_pirop'('length', eos, tgt, 'result'=>eos)
+    ops.'push_pirop'('gt', pos, eos, donelabel)
 
     # On Parrot, indexing into variable-width encoded strings
     # (such as utf8) becomes much more expensive as we move

Modified: branches/gsoc_threads/ext/nqp-rx/src/stage0/nqp-setting.nqp
==============================================================================
--- branches/gsoc_threads/ext/nqp-rx/src/stage0/nqp-setting.nqp	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/ext/nqp-rx/src/stage0/nqp-setting.nqp	Thu Jun 10 21:09:12 2010	(r47545)
@@ -182,10 +182,12 @@
     my $result  := pir::new__Ps('StringBuilder');
 
     for @matches -> $match {
-        pir::push($result, pir::substr($text, $offset, $match.from - $offset))
-            if $match.from > $offset;
-        pir::push($result, $is_code ?? $repl($match) !! $repl);
-        $offset := $match.to;
+        if $match {
+            pir::push($result, pir::substr($text, $offset, $match.from - $offset))
+                if $match.from > $offset;
+            pir::push($result, $is_code ?? $repl($match) !! $repl);
+            $offset := $match.to;
+        }
     }
 
     my $chars := pir::length($text);
@@ -211,9 +213,10 @@
 =end
 
 our sub slurp ($filename) {
-    my $handle := pir::open__Pss($file, 'r');
+    my $handle := FileHandle.new();
+    $handle.open($file, 'r');
     my $contents := $handle.readall;
-    pir::close($handle);
+    $handle.close();
     $contents;
 }
 
@@ -223,9 +226,10 @@
 =end item
 
 our sub spew($filename, $contents) {
-    my $handle := pir::open__Pss($filename, 'w');
+    my $handle := FileHandle.new();
+    $handle.open($filename, 'w');
     $handle.print($contents);
-    pir::close($handle);
+    $handle.close();
 }
 
 # vim: ft=perl6

Modified: branches/gsoc_threads/include/parrot/charset.h
==============================================================================
--- branches/gsoc_threads/include/parrot/charset.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/charset.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -72,11 +72,13 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 const char * Parrot_charset_c_name(SHIM_INTERP, INTVAL number_of_charset);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING * Parrot_charset_name(SHIM_INTERP, INTVAL number_of_charset);
@@ -89,6 +91,7 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_charset_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
@@ -102,11 +105,13 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const CHARSET * Parrot_default_charset(SHIM_INTERP);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 const CHARSET * Parrot_find_charset(SHIM_INTERP,
@@ -114,6 +119,7 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 charset_converter_t Parrot_find_charset_converter(SHIM_INTERP,
@@ -123,6 +129,7 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 const CHARSET * Parrot_get_charset(SHIM_INTERP, INTVAL number_of_charset);

Modified: branches/gsoc_threads/include/parrot/compiler.h
==============================================================================
--- branches/gsoc_threads/include/parrot/compiler.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/compiler.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -136,11 +136,35 @@
 #define PARROT_IGNORABLE_RESULT
 #define PARROT_WARN_UNUSED_RESULT   __attribute__warn_unused_result__
 
+#define PARROT_PURE_FUNCTION        __attribute__pure__  __attribute__warn_unused_result__
 /* Pure functions have no side-effects, and depend only on parms or globals. e.g. strlen() */
-#define PARROT_PURE_FUNCTION                __attribute__pure__  __attribute__warn_unused_result__
-
-/* Const functions are pure functions, and do not examine targets of pointers. e.g. sqrt() */
-#define PARROT_CONST_FUNCTION               __attribute__const__ __attribute__warn_unused_result__
+/* "Many functions have no effects except the return value and their
+    return value depends only on the parameters and/or global
+    variables. Such a function can be subject to common subexpression
+    elimination and loop optimization just as an arithmetic operator
+    would be. For example, "PARROT_PURE_FUNCTION int square(int x)"
+    says that the hypothetical function square is safe to call fewer
+    times than the program says.
+
+    Some of common examples of pure functions are strlen or
+    memcmp. Interesting non-pure functions are functions with infinite
+    loops or those depending on volatile memory or other system resource,
+    that may change between two consecutive calls (such as feof in a
+    multithreading environment)." -- http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
+*/
+
+#define PARROT_CONST_FUNCTION       __attribute__const__ __attribute__warn_unused_result__
+/* Const functions are pure functions, and also do not examine targets of pointer args or globals. e.g. sqrt() */
+/* "Many functions do not examine any values except their arguments,
+    and have no effects except the return value. Basically this is just
+    slightly more strict class than the pure attribute below, since
+    function is not allowed to read global memory. Note that a function
+    that has pointer arguments and examines the data pointed to must
+    not be declared const. Likewise, a function that calls a non-const
+    function usually must not be const. It does not make sense for a
+    const function to return void."
+        -- http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
+*/
 
 #define PARROT_DOES_NOT_RETURN              /*@noreturn@*/ __attribute__noreturn__
 #define PARROT_DOES_NOT_RETURN_WHEN_FALSE   /*@noreturnwhenfalse@*/

Modified: branches/gsoc_threads/include/parrot/debugger.h
==============================================================================
--- branches/gsoc_threads/include/parrot/debugger.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/debugger.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -205,11 +205,20 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+void PDB_backtrace(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
 void PDB_load_source(PARROT_INTERP, ARGIN(const char *command))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+void PDB_print(PARROT_INTERP, ARGIN(const char *command))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 void PDB_script_file(PARROT_INTERP, ARGIN(const char *command))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -227,9 +236,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void PDB_backtrace(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
 char PDB_break(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -330,10 +336,6 @@
 void PDB_next(PARROT_INTERP, ARGIN_NULLOK(const char *command))
         __attribute__nonnull__(1);
 
-void PDB_print(PARROT_INTERP, ARGIN(const char *command))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 char PDB_program_end(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -372,9 +374,14 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_debugger_start __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_PDB_backtrace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_PDB_load_source __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(command))
+#define ASSERT_ARGS_PDB_print __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(command))
 #define ASSERT_ARGS_PDB_script_file __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(command))
@@ -385,8 +392,6 @@
 #define ASSERT_ARGS_PDB_assign __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(command))
-#define ASSERT_ARGS_PDB_backtrace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_PDB_break __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_PDB_check_condition __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -443,9 +448,6 @@
     , PARROT_ASSERT_ARG(command))
 #define ASSERT_ARGS_PDB_next __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_PDB_print __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(command))
 #define ASSERT_ARGS_PDB_program_end __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_PDB_run_command __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/gsoc_threads/include/parrot/embed.h
==============================================================================
--- branches/gsoc_threads/include/parrot/embed.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/embed.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -141,14 +141,17 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 Parrot_UInt Parrot_test_debug(PARROT_INTERP, Parrot_UInt flag)
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 Parrot_Int Parrot_test_flag(PARROT_INTERP, Parrot_Int flag)
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 Parrot_UInt Parrot_test_trace(PARROT_INTERP, Parrot_UInt flag)
         __attribute__nonnull__(1);
 

Modified: branches/gsoc_threads/include/parrot/encoding.h
==============================================================================
--- branches/gsoc_threads/include/parrot/encoding.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/encoding.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -56,6 +56,7 @@
 PARROT_DATA ENCODING *Parrot_utf8_encoding_ptr;
 PARROT_DATA ENCODING *Parrot_utf16_encoding_ptr;
 PARROT_DATA ENCODING *Parrot_ucs2_encoding_ptr;
+PARROT_DATA ENCODING *Parrot_ucs4_encoding_ptr;
 PARROT_DATA ENCODING *Parrot_default_encoding_ptr;
 #endif
 

Modified: branches/gsoc_threads/include/parrot/exceptions.h
==============================================================================
--- branches/gsoc_threads/include/parrot/exceptions.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/exceptions.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -90,6 +90,7 @@
     CONTROL_ERROR,
     CONTROL_TAKE,
     CONTROL_LEAVE,
+    CONTROL_EXIT,
 
     CONTROL_LOOP_NEXT,
     CONTROL_LOOP_LAST,
@@ -115,9 +116,9 @@
 /* HEADERIZER BEGIN: src/exceptions.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 PARROT_COLD
-PARROT_EXPORT
 void do_panic(
     NULLOK_INTERP,
     ARGIN_NULLOK(const char *message),

Modified: branches/gsoc_threads/include/parrot/gc_api.h
==============================================================================
--- branches/gsoc_threads/include/parrot/gc_api.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/gc_api.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -93,10 +93,10 @@
 
 /* &end_gen */
 
-#define GC_trace_stack_FLAG    (UINTVAL)(1 << 0)   /* trace system areas and stack */
-#define GC_trace_normal        (UINTVAL)(1 << 0)   /* the same */
-#define GC_lazy_FLAG           (UINTVAL)(1 << 1)   /* timely destruction run */
-#define GC_finish_FLAG         (UINTVAL)(1 << 2)   /* on Parrot exit: mark (almost) all PMCs dead and */
+#define GC_trace_stack_FLAG    (UINTVAL)(1 << 1)   /* trace system areas and stack */
+#define GC_trace_normal_FLAG   (UINTVAL)(1 << 1)   /* the same */
+#define GC_lazy_FLAG           (UINTVAL)(1 << 2)   /* timely destruction run */
+#define GC_finish_FLAG         (UINTVAL)(1 << 3)   /* on Parrot exit: mark (almost) all PMCs dead and */
                                                    /* garbage collect. */
 
 /* HEADERIZER BEGIN: src/gc/api.c */

Modified: branches/gsoc_threads/include/parrot/hash.h
==============================================================================
--- branches/gsoc_threads/include/parrot/hash.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/hash.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -315,13 +315,13 @@
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
 int int_compare(SHIM_INTERP,
     ARGIN_NULLOK(const void *a),
     ARGIN_NULLOK(const void *b));
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
 size_t key_hash_int(SHIM_INTERP,
     ARGIN_NULLOK(const void *value),
     size_t seed);

Modified: branches/gsoc_threads/include/parrot/imcc.h
==============================================================================
--- branches/gsoc_threads/include/parrot/imcc.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/imcc.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -6,10 +6,8 @@
 #ifndef PARROT_IMCC_H_GUARD
 #define PARROT_IMCC_H_GUARD
 
-PARROT_EXPORT void imcc_initialize(PARROT_INTERP);
-PARROT_EXPORT void imcc_start_handling_flags(PARROT_INTERP);
-PARROT_EXPORT int imcc_handle_flag(PARROT_INTERP, struct longopt_opt_info *opt, Parrot_Run_core_t *core);
-PARROT_EXPORT int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, const char **argv);
+PARROT_EXPORT int  imcc_run(PARROT_INTERP, const char *sourcefile, int argc, const char **argv);
+PARROT_EXPORT void imcc_run_pbc(PARROT_INTERP, const char *outputfile, int argc, const char **argv);
 
 #endif /* PARROT_IMCC_H_GUARD */
 

Modified: branches/gsoc_threads/include/parrot/interpreter.h
==============================================================================
--- branches/gsoc_threads/include/parrot/interpreter.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/interpreter.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -522,14 +522,6 @@
         __attribute__nonnull__(3)
         __attribute__nonnull__(4);
 
-PARROT_WARN_UNUSED_RESULT
-INTVAL sysinfo_i(SHIM_INTERP, INTVAL info_wanted);
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING * sysinfo_s(PARROT_INTERP, INTVAL info_wanted)
-        __attribute__nonnull__(1);
-
 #define ASSERT_ARGS_interpinfo __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_interpinfo_p __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -556,9 +548,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(func) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_sysinfo_i __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_sysinfo_s __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/interp/inter_misc.c */
 

Modified: branches/gsoc_threads/include/parrot/io.h
==============================================================================
--- branches/gsoc_threads/include/parrot/io.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/io.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -222,6 +222,10 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PIOOFF_T Parrot_io_make_offset32(INTVAL hi, INTVAL lo);
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_io_new_pmc(PARROT_INTERP, INTVAL flags)
         __attribute__nonnull__(1);
@@ -342,9 +346,6 @@
         FUNC_MODIFIES(*pmc);
 
 PARROT_WARN_UNUSED_RESULT
-PIOOFF_T Parrot_io_make_offset32(INTVAL hi, INTVAL lo);
-
-PARROT_WARN_UNUSED_RESULT
 PIOOFF_T Parrot_io_make_offset_pmc(PARROT_INTERP, ARGMOD(PMC *pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -378,6 +379,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_Parrot_io_make_offset __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_Parrot_io_make_offset32 __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_io_new_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_io_open __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -420,7 +422,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc) \
     , PARROT_ASSERT_ARG(buffer))
-#define ASSERT_ARGS_Parrot_io_make_offset32 __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_io_make_offset_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))

Modified: branches/gsoc_threads/include/parrot/longopt.h
==============================================================================
--- branches/gsoc_threads/include/parrot/longopt.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/longopt.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,13 +1,9 @@
 /* longopt.h
- *  Copyright (C) 2001-2003, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
  *     Command line option parsing (for pre-initialized code)
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
  */
 
 #ifndef PARROT_LONGOPT_H_GUARD
@@ -44,10 +40,18 @@
 
 #define LONGOPT_OPT_INFO_INIT { 1, 0, NULL, NULL, NULL }
 
+#define OPT_GC_DEBUG       128
+#define OPT_DESTROY_FLAG   129
+#define OPT_HELP_DEBUG     130
+#define OPT_PBC_OUTPUT     131
+#define OPT_RUNTIME_PREFIX 132
+#define OPT_HASH_SEED      133
+
 /* HEADERIZER BEGIN: src/longopt.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 int longopt_get(PARROT_INTERP,
     int argc,
     ARGIN(const char* argv[]),
@@ -59,11 +63,17 @@
         __attribute__nonnull__(5)
         FUNC_MODIFIES(* info_buf);
 
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PARROT_CONST_FUNCTION
+const struct longopt_opt_decl * Parrot_cmd_options(void);
+
 #define ASSERT_ARGS_longopt_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(argv) \
     , PARROT_ASSERT_ARG(options) \
     , PARROT_ASSERT_ARG(info_buf))
+#define ASSERT_ARGS_Parrot_cmd_options __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/longopt.c */
 

Modified: branches/gsoc_threads/include/parrot/misc.h
==============================================================================
--- branches/gsoc_threads/include/parrot/misc.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/misc.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -83,6 +83,13 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+PMC* Parrot_tm_to_array(PARROT_INTERP, ARGIN(const struct tm *tm))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_uint_rand(INTVAL how_random);
 
 PARROT_CONST_FUNCTION
@@ -102,12 +109,6 @@
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*data);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-PMC* tm_to_array(PARROT_INTERP, ARGIN(const struct tm *tm))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 #define ASSERT_ARGS_Parrot_byte_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(base) \
     , PARROT_ASSERT_ARG(search))
@@ -123,6 +124,9 @@
     , PARROT_ASSERT_ARG(src_regs) \
     , PARROT_ASSERT_ARG(info))
 #define ASSERT_ARGS_Parrot_srand __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_Parrot_tm_to_array __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(tm))
 #define ASSERT_ARGS_Parrot_uint_rand __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_floatval_mod __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_intval_mod __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -130,9 +134,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(data) \
     , PARROT_ASSERT_ARG(cmp))
-#define ASSERT_ARGS_tm_to_array __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(tm))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/utils.c */
 

Copied: branches/gsoc_threads/include/parrot/oplib/core_ops.h (from r47544, trunk/include/parrot/oplib/core_ops.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/include/parrot/oplib/core_ops.h	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/include/parrot/oplib/core_ops.h)
@@ -0,0 +1,1119 @@
+
+/* $Id$ */
+
+#ifndef PARROT_OPLIB_CORE_OPS_H_GUARD
+#define PARROT_OPLIB_CORE_OPS_H_GUARD
+
+
+/* ex: set ro:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from 'src/ops/core.ops' (and possibly other
+ * .ops files). by ops2c.nqp.
+ *
+ * Any changes made here will be lost!  To regenerate this file after making
+ * changes to any ops, use the bootstap-ops makefile target.
+ *
+ */
+
+#include "parrot/parrot.h"
+#include "parrot/oplib.h"
+#include "parrot/runcore_api.h"
+
+ op_lib_t *Parrot_DynOp_core_2_4_0(PARROT_INTERP, long init);
+
+ opcode_t * Parrot_end(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_noop(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_check_events(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_check_events__(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_wrapper__(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_load_bytecode_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_load_bytecode_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_load_language_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_load_language_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_branch_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_branch_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_local_branch_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_local_branch_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_local_return_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_jump_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_jump_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_enternative(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_if_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_if_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_if_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_if_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unless_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unless_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unless_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unless_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_invokecc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_invoke_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_yield(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_tailcall_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_returncc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_capture_lex_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_newclosure_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_args_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_params_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_returns_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_results_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_result_info_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_result_info_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_result_info_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_addr_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_addr_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_addr_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_addr_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_schedule_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_addhandler_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_eh_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_eh_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_pop_eh(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_throw_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_throw_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_rethrow_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_count_eh_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_die_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_die_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_die_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_die_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_die_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_die_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_die_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_die_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_exit_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_exit_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_debug_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_debug_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bounds_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bounds_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_profile_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_profile_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trace_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trace_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gc_debug_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gc_debug_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_interpinfo_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_interpinfo_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_interpinfo_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_interpinfo_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_interpinfo_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_interpinfo_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_warningson_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_warningson_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_warningsoff_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_warningsoff_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_errorson_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_errorson_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_errorsoff_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_errorsoff_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_runinterp_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_runinterp_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getinterp_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sweep_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_collect(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sweepoff(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sweepon(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_collectoff(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_collecton(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_needs_destroy_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_s_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_sc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dlfunc_p_p_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dlfunc_p_p_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dlfunc_p_p_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dlfunc_p_p_sc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dlvar_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dlvar_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_compreg_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_compreg_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_compreg_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_compreg_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_callback_p_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_callback_p_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_annotations_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_annotations_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_annotations_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_band_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_band_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_band_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_band_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_band_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bor_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bor_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bor_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bor_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bor_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shl_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shl_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shl_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shl_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shl_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shr_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shr_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shr_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shr_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shr_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lsr_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lsr_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lsr_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lsr_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lsr_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bxor_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bxor_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bxor_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bxor_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bxor_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_ic_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_i_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_n_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_nc_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_n_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_sc_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_p_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_p_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_p_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_p_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_p_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_str_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_num_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_addr_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_addr_sc_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_addr_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_addr_sc_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_eq_addr_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_ic_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_i_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_n_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_nc_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_n_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_sc_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_p_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_p_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_p_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_p_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_p_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_str_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_num_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_addr_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_addr_sc_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_addr_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_addr_sc_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ne_addr_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_ic_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_i_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_n_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_nc_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_n_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_sc_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_p_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_p_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_p_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_p_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_p_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_str_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_lt_num_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_ic_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_i_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_n_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_nc_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_n_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_sc_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_p_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_p_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_p_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_p_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_p_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_str_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_le_num_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_p_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_p_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_p_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_p_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_p_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_str_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_gt_num_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_p_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_p_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_p_nc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_p_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_p_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_str_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ge_num_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_if_null_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_if_null_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unless_null_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unless_null_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_i_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_str_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_num_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_cmp_pmc_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_issame_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_issame_i_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_issame_i_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_issame_i_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_issame_i_sc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isntsame_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isntsame_i_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isntsame_i_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isntsame_i_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isntsame_i_sc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_istrue_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isfalse_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isnull_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isnull_i_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isnull_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isnull_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isgt_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isge_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isle_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_islt_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iseq_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isne_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_and_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_and_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_and_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_and_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_not_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_not_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_not_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_not_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_or_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_or_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_or_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_or_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_xor_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_xor_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_xor_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_xor_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_say_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_say_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_say_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_say_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_say_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_say_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_say_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_print_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getstdin_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getstdout_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getstderr_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_abs_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_abs_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_abs_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_abs_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_abs_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_abs_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_n_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_n_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_n_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_p_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dec_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dec_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_dec_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_i_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_n_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_n_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_n_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_n_nc_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_div_p_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_n_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_n_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_n_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fdiv_p_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ceil_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ceil_i_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ceil_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_floor_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_floor_i_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_floor_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_n_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_n_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_n_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mod_p_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_n_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_n_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_n_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_mul_p_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_neg_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_neg_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_neg_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_neg_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_neg_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_neg_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_i_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_i_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_i_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_n_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_n_nc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_n_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sub_p_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sqrt_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_callmethodcc_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_callmethodcc_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_callmethodcc_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_callmethod_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_callmethod_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_callmethod_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_tailcallmethod_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_tailcallmethod_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_tailcallmethod_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_addmethod_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_addmethod_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_can_i_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_can_i_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_does_i_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_does_i_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_does_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_does_i_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isa_i_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isa_i_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isa_i_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_isa_i_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_newclass_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_newclass_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_newclass_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_newclass_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_pc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_pc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_pc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_pc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_sc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_s_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_subclass_p_sc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_class_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_class_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_class_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_class_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_class_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_addparent_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_removeparent_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_addrole_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_addattribute_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_addattribute_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_removeattribute_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_removeattribute_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getattribute_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getattribute_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getattribute_p_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getattribute_p_p_pc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getattribute_p_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getattribute_p_p_pc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setattribute_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setattribute_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setattribute_p_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setattribute_p_pc_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setattribute_p_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setattribute_p_pc_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inspect_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inspect_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inspect_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inspect_p_pc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inspect_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_inspect_p_pc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_s_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_sc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_pc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_pc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_pc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_pc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_typeof_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_typeof_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_repr_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_method_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_method_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_defined_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_defined_i_p_ki(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_defined_i_p_kic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_defined_i_p_k(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_defined_i_p_kc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_exists_i_p_ki(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_exists_i_p_kic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_exists_i_p_k(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_exists_i_p_kc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_delete_p_k(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_delete_p_kc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_delete_p_ki(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_delete_p_kic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_elements_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_push_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_pop_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_pop_n_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_pop_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_pop_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unshift_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unshift_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unshift_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unshift_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unshift_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unshift_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unshift_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shift_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shift_n_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shift_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_shift_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_splice_p_p_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_splice_p_p_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_splice_p_p_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_splice_p_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setprop_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setprop_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getprop_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_getprop_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_delprop_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_delprop_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_prophash_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_freeze_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_thaw_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_thaw_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_multi_s_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_multi_sc_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_multi_s_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_add_multi_sc_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_multi_p_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_multi_p_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_multi_p_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_multi_p_sc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_register_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unregister_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_box_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_box_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_box_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_box_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_box_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_box_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_iter_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_morph_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_morph_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_clone_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_clone_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_p_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_p_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_assign_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_setref_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_deref_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_ki_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_ki_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_ki_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kic_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_ki_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kic_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_ki_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_ki_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kic_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_ki_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kic_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_p_ki(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_p_kic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_p_ki(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_p_kic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_p_ki(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_p_kic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_p_ki(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_p_kic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_k_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_k_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_k_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kc_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_k_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kc_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_k_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_k_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_k_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_kc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_p_k(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_i_p_kc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_p_k(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_n_p_kc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_p_k(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_s_p_kc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_p_k(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_p_p_kc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_clone_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_clone_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_clone_p_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_copy_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_null_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_null_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_null_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_null_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ord_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ord_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ord_i_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ord_i_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ord_i_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_ord_i_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_chr_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_chr_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_chopn_s_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_chopn_s_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_chopn_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_chopn_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_s_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_s_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_s_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_concat_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_s_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_s_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_repeat_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_length_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_length_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bytelength_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_bytelength_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_pin_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_unpin_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_s_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_sc_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_s_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_sc_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_s_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_sc_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_s_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_sc_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_p_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_p_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_p_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_substr_s_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_i_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_i_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_ic_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_ic_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_i_ic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_i_ic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_ic_ic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_ic_ic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_i_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_i_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_ic_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_ic_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_i_ic_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_i_ic_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_ic_ic_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_ic_ic_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_sc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_s_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_sc_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_s_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_sc_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_sc_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_index_i_sc_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sprintf_s_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sprintf_s_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sprintf_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_stringinfo_i_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_stringinfo_i_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_stringinfo_i_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_stringinfo_i_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_upcase_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_upcase_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_downcase_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_downcase_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_titlecase_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_titlecase_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_join_s_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_join_s_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_split_p_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_split_p_sc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_split_p_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_split_p_sc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_charset_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_charset_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_charsetname_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_charsetname_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_charset_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_charset_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trans_charset_s_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trans_charset_s_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trans_charset_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trans_charset_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_encoding_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_encoding_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_encodingname_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_encodingname_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_encoding_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_encoding_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trans_encoding_s_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trans_encoding_s_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trans_encoding_s_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trans_encoding_s_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_is_cclass_i_i_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_is_cclass_i_ic_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_is_cclass_i_i_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_is_cclass_i_ic_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_is_cclass_i_i_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_is_cclass_i_ic_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_is_cclass_i_i_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_is_cclass_i_ic_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_i_s_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_ic_s_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_i_sc_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_ic_sc_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_i_s_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_ic_s_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_i_sc_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_ic_sc_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_i_s_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_ic_s_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_i_sc_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_ic_sc_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_i_s_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_ic_s_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_i_sc_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_cclass_i_ic_sc_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_i_s_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_ic_s_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_i_sc_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_ic_sc_i_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_i_s_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_ic_s_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_i_sc_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_ic_sc_ic_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_i_s_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_ic_s_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_i_sc_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_ic_sc_i_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_i_s_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_ic_s_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_i_sc_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_not_cclass_i_ic_sc_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_escape_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_compose_s_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_compose_s_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_spawnw_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_spawnw_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_spawnw_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_err_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_err_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_err_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_err_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_time_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_time_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sleep_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sleep_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sleep_n(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_sleep_nc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_store_lex_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_store_lex_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_store_dynamic_lex_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_store_dynamic_lex_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_lex_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_lex_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_dynamic_lex_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_dynamic_lex_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_caller_lex_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_caller_lex_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_namespace_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_namespace_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_namespace_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_namespace_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_namespace_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_namespace_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_namespace_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_namespace_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_namespace_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_global_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_global_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_global_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_global_p_pc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_global_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_global_p_pc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_global_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_global_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_global_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_global_p_pc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_global_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_hll_global_p_pc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_global_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_global_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_global_p_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_global_p_pc_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_global_p_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_root_global_p_pc_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_global_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_global_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_global_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_global_pc_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_global_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_global_pc_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_hll_global_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_hll_global_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_hll_global_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_hll_global_pc_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_hll_global_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_hll_global_pc_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_root_global_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_root_global_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_root_global_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_root_global_pc_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_root_global_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_root_global_pc_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_name_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_name_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_sub_not_null_p_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_sub_not_null_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_trap(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_label_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_label_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_pc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_pc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_pc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_pc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_ic_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_ic_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_i_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_i_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_ic_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_ic_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_s_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_s_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_p_sc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_fetch_p_pc_sc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_p_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_pc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_pc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_p_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_pc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_pc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_i_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_ic_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_ic_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_i_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_i_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_ic_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_ic_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_s_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_s_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_p_sc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_vivify_p_pc_sc_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_s_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_sc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_s_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_sc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_pc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_new_p_pc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_p_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_pc_i(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_root_new_p_pc_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_codepoint_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_find_codepoint_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_finalize_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_finalize_pc(opcode_t *, PARROT_INTERP);
+
+
+#endif /* PARROT_OPLIB_CORE_OPS_H_GUARD */
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ *   buffer-read-only: t
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/gsoc_threads/include/parrot/oplib/ops.h (from r47544, trunk/include/parrot/oplib/ops.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/include/parrot/oplib/ops.h	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/include/parrot/oplib/ops.h)
@@ -0,0 +1,1116 @@
+
+/* $Id$ */
+
+#ifndef PARROT_OPLIB_OPS_H_GUARD
+#define PARROT_OPLIB_OPS_H_GUARD
+
+
+/* ex: set ro:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from 'src/ops/core.ops' (and possibly other
+ * .ops files). by ops2c.nqp.
+ *
+ * Any changes made here will be lost!  To regenerate this file after making
+ * changes to any ops, use the bootstap-ops makefile target.
+ *
+ */
+
+typedef enum {
+    PARROT_OP_end,                             /* 0 */
+    PARROT_OP_noop,                            /* 1 */
+    PARROT_OP_check_events,                    /* 2 */
+    PARROT_OP_check_events__,                  /* 3 */
+    PARROT_OP_wrapper__,                       /* 4 */
+    PARROT_OP_load_bytecode_s,                 /* 5 */
+    PARROT_OP_load_bytecode_sc,                /* 6 */
+    PARROT_OP_load_language_s,                 /* 7 */
+    PARROT_OP_load_language_sc,                /* 8 */
+    PARROT_OP_branch_i,                        /* 9 */
+    PARROT_OP_branch_ic,                       /* 10 */
+    PARROT_OP_local_branch_p_i,                /* 11 */
+    PARROT_OP_local_branch_p_ic,               /* 12 */
+    PARROT_OP_local_return_p,                  /* 13 */
+    PARROT_OP_jump_i,                          /* 14 */
+    PARROT_OP_jump_ic,                         /* 15 */
+    PARROT_OP_enternative,                     /* 16 */
+    PARROT_OP_if_i_ic,                         /* 17 */
+    PARROT_OP_if_n_ic,                         /* 18 */
+    PARROT_OP_if_s_ic,                         /* 19 */
+    PARROT_OP_if_p_ic,                         /* 20 */
+    PARROT_OP_unless_i_ic,                     /* 21 */
+    PARROT_OP_unless_n_ic,                     /* 22 */
+    PARROT_OP_unless_s_ic,                     /* 23 */
+    PARROT_OP_unless_p_ic,                     /* 24 */
+    PARROT_OP_invokecc_p,                      /* 25 */
+    PARROT_OP_invoke_p_p,                      /* 26 */
+    PARROT_OP_yield,                           /* 27 */
+    PARROT_OP_tailcall_p,                      /* 28 */
+    PARROT_OP_returncc,                        /* 29 */
+    PARROT_OP_capture_lex_p,                   /* 30 */
+    PARROT_OP_newclosure_p_p,                  /* 31 */
+    PARROT_OP_set_args_pc,                     /* 32 */
+    PARROT_OP_get_params_pc,                   /* 33 */
+    PARROT_OP_set_returns_pc,                  /* 34 */
+    PARROT_OP_get_results_pc,                  /* 35 */
+    PARROT_OP_set_result_info_p,               /* 36 */
+    PARROT_OP_set_result_info_pc,              /* 37 */
+    PARROT_OP_result_info_p,                   /* 38 */
+    PARROT_OP_set_addr_i_ic,                   /* 39 */
+    PARROT_OP_set_addr_p_ic,                   /* 40 */
+    PARROT_OP_set_addr_p_i,                    /* 41 */
+    PARROT_OP_get_addr_i_p,                    /* 42 */
+    PARROT_OP_schedule_p,                      /* 43 */
+    PARROT_OP_addhandler_p,                    /* 44 */
+    PARROT_OP_push_eh_ic,                      /* 45 */
+    PARROT_OP_push_eh_p,                       /* 46 */
+    PARROT_OP_pop_eh,                          /* 47 */
+    PARROT_OP_throw_p,                         /* 48 */
+    PARROT_OP_throw_p_p,                       /* 49 */
+    PARROT_OP_rethrow_p,                       /* 50 */
+    PARROT_OP_count_eh_i,                      /* 51 */
+    PARROT_OP_die_s,                           /* 52 */
+    PARROT_OP_die_sc,                          /* 53 */
+    PARROT_OP_die_p,                           /* 54 */
+    PARROT_OP_die_pc,                          /* 55 */
+    PARROT_OP_die_i_i,                         /* 56 */
+    PARROT_OP_die_ic_i,                        /* 57 */
+    PARROT_OP_die_i_ic,                        /* 58 */
+    PARROT_OP_die_ic_ic,                       /* 59 */
+    PARROT_OP_exit_i,                          /* 60 */
+    PARROT_OP_exit_ic,                         /* 61 */
+    PARROT_OP_debug_i,                         /* 62 */
+    PARROT_OP_debug_ic,                        /* 63 */
+    PARROT_OP_bounds_i,                        /* 64 */
+    PARROT_OP_bounds_ic,                       /* 65 */
+    PARROT_OP_profile_i,                       /* 66 */
+    PARROT_OP_profile_ic,                      /* 67 */
+    PARROT_OP_trace_i,                         /* 68 */
+    PARROT_OP_trace_ic,                        /* 69 */
+    PARROT_OP_gc_debug_i,                      /* 70 */
+    PARROT_OP_gc_debug_ic,                     /* 71 */
+    PARROT_OP_interpinfo_i_i,                  /* 72 */
+    PARROT_OP_interpinfo_i_ic,                 /* 73 */
+    PARROT_OP_interpinfo_p_i,                  /* 74 */
+    PARROT_OP_interpinfo_p_ic,                 /* 75 */
+    PARROT_OP_interpinfo_s_i,                  /* 76 */
+    PARROT_OP_interpinfo_s_ic,                 /* 77 */
+    PARROT_OP_warningson_i,                    /* 78 */
+    PARROT_OP_warningson_ic,                   /* 79 */
+    PARROT_OP_warningsoff_i,                   /* 80 */
+    PARROT_OP_warningsoff_ic,                  /* 81 */
+    PARROT_OP_errorson_i,                      /* 82 */
+    PARROT_OP_errorson_ic,                     /* 83 */
+    PARROT_OP_errorsoff_i,                     /* 84 */
+    PARROT_OP_errorsoff_ic,                    /* 85 */
+    PARROT_OP_runinterp_p_i,                   /* 86 */
+    PARROT_OP_runinterp_p_ic,                  /* 87 */
+    PARROT_OP_getinterp_p,                     /* 88 */
+    PARROT_OP_sweep_ic,                        /* 89 */
+    PARROT_OP_collect,                         /* 90 */
+    PARROT_OP_sweepoff,                        /* 91 */
+    PARROT_OP_sweepon,                         /* 92 */
+    PARROT_OP_collectoff,                      /* 93 */
+    PARROT_OP_collecton,                       /* 94 */
+    PARROT_OP_needs_destroy_p,                 /* 95 */
+    PARROT_OP_loadlib_p_s,                     /* 96 */
+    PARROT_OP_loadlib_p_sc,                    /* 97 */
+    PARROT_OP_loadlib_p_s_p,                   /* 98 */
+    PARROT_OP_loadlib_p_sc_p,                  /* 99 */
+    PARROT_OP_loadlib_p_s_pc,                  /* 100 */
+    PARROT_OP_loadlib_p_sc_pc,                 /* 101 */
+    PARROT_OP_dlfunc_p_p_s_s,                  /* 102 */
+    PARROT_OP_dlfunc_p_p_sc_s,                 /* 103 */
+    PARROT_OP_dlfunc_p_p_s_sc,                 /* 104 */
+    PARROT_OP_dlfunc_p_p_sc_sc,                /* 105 */
+    PARROT_OP_dlvar_p_p_s,                     /* 106 */
+    PARROT_OP_dlvar_p_p_sc,                    /* 107 */
+    PARROT_OP_compreg_s_p,                     /* 108 */
+    PARROT_OP_compreg_sc_p,                    /* 109 */
+    PARROT_OP_compreg_p_s,                     /* 110 */
+    PARROT_OP_compreg_p_sc,                    /* 111 */
+    PARROT_OP_new_callback_p_p_p_s,            /* 112 */
+    PARROT_OP_new_callback_p_p_p_sc,           /* 113 */
+    PARROT_OP_annotations_p,                   /* 114 */
+    PARROT_OP_annotations_p_s,                 /* 115 */
+    PARROT_OP_annotations_p_sc,                /* 116 */
+    PARROT_OP_band_i_i,                        /* 117 */
+    PARROT_OP_band_i_ic,                       /* 118 */
+    PARROT_OP_band_i_i_i,                      /* 119 */
+    PARROT_OP_band_i_ic_i,                     /* 120 */
+    PARROT_OP_band_i_i_ic,                     /* 121 */
+    PARROT_OP_bor_i_i,                         /* 122 */
+    PARROT_OP_bor_i_ic,                        /* 123 */
+    PARROT_OP_bor_i_i_i,                       /* 124 */
+    PARROT_OP_bor_i_ic_i,                      /* 125 */
+    PARROT_OP_bor_i_i_ic,                      /* 126 */
+    PARROT_OP_shl_i_i,                         /* 127 */
+    PARROT_OP_shl_i_ic,                        /* 128 */
+    PARROT_OP_shl_i_i_i,                       /* 129 */
+    PARROT_OP_shl_i_ic_i,                      /* 130 */
+    PARROT_OP_shl_i_i_ic,                      /* 131 */
+    PARROT_OP_shr_i_i,                         /* 132 */
+    PARROT_OP_shr_i_ic,                        /* 133 */
+    PARROT_OP_shr_i_i_i,                       /* 134 */
+    PARROT_OP_shr_i_ic_i,                      /* 135 */
+    PARROT_OP_shr_i_i_ic,                      /* 136 */
+    PARROT_OP_lsr_i_i,                         /* 137 */
+    PARROT_OP_lsr_i_ic,                        /* 138 */
+    PARROT_OP_lsr_i_i_i,                       /* 139 */
+    PARROT_OP_lsr_i_ic_i,                      /* 140 */
+    PARROT_OP_lsr_i_i_ic,                      /* 141 */
+    PARROT_OP_bxor_i_i,                        /* 142 */
+    PARROT_OP_bxor_i_ic,                       /* 143 */
+    PARROT_OP_bxor_i_i_i,                      /* 144 */
+    PARROT_OP_bxor_i_ic_i,                     /* 145 */
+    PARROT_OP_bxor_i_i_ic,                     /* 146 */
+    PARROT_OP_eq_i_i_ic,                       /* 147 */
+    PARROT_OP_eq_ic_i_ic,                      /* 148 */
+    PARROT_OP_eq_i_ic_ic,                      /* 149 */
+    PARROT_OP_eq_n_n_ic,                       /* 150 */
+    PARROT_OP_eq_nc_n_ic,                      /* 151 */
+    PARROT_OP_eq_n_nc_ic,                      /* 152 */
+    PARROT_OP_eq_s_s_ic,                       /* 153 */
+    PARROT_OP_eq_sc_s_ic,                      /* 154 */
+    PARROT_OP_eq_s_sc_ic,                      /* 155 */
+    PARROT_OP_eq_p_p_ic,                       /* 156 */
+    PARROT_OP_eq_p_i_ic,                       /* 157 */
+    PARROT_OP_eq_p_ic_ic,                      /* 158 */
+    PARROT_OP_eq_p_n_ic,                       /* 159 */
+    PARROT_OP_eq_p_nc_ic,                      /* 160 */
+    PARROT_OP_eq_p_s_ic,                       /* 161 */
+    PARROT_OP_eq_p_sc_ic,                      /* 162 */
+    PARROT_OP_eq_str_p_p_ic,                   /* 163 */
+    PARROT_OP_eq_num_p_p_ic,                   /* 164 */
+    PARROT_OP_eq_addr_s_s_ic,                  /* 165 */
+    PARROT_OP_eq_addr_sc_s_ic,                 /* 166 */
+    PARROT_OP_eq_addr_s_sc_ic,                 /* 167 */
+    PARROT_OP_eq_addr_sc_sc_ic,                /* 168 */
+    PARROT_OP_eq_addr_p_p_ic,                  /* 169 */
+    PARROT_OP_ne_i_i_ic,                       /* 170 */
+    PARROT_OP_ne_ic_i_ic,                      /* 171 */
+    PARROT_OP_ne_i_ic_ic,                      /* 172 */
+    PARROT_OP_ne_n_n_ic,                       /* 173 */
+    PARROT_OP_ne_nc_n_ic,                      /* 174 */
+    PARROT_OP_ne_n_nc_ic,                      /* 175 */
+    PARROT_OP_ne_s_s_ic,                       /* 176 */
+    PARROT_OP_ne_sc_s_ic,                      /* 177 */
+    PARROT_OP_ne_s_sc_ic,                      /* 178 */
+    PARROT_OP_ne_p_p_ic,                       /* 179 */
+    PARROT_OP_ne_p_i_ic,                       /* 180 */
+    PARROT_OP_ne_p_ic_ic,                      /* 181 */
+    PARROT_OP_ne_p_n_ic,                       /* 182 */
+    PARROT_OP_ne_p_nc_ic,                      /* 183 */
+    PARROT_OP_ne_p_s_ic,                       /* 184 */
+    PARROT_OP_ne_p_sc_ic,                      /* 185 */
+    PARROT_OP_ne_str_p_p_ic,                   /* 186 */
+    PARROT_OP_ne_num_p_p_ic,                   /* 187 */
+    PARROT_OP_ne_addr_s_s_ic,                  /* 188 */
+    PARROT_OP_ne_addr_sc_s_ic,                 /* 189 */
+    PARROT_OP_ne_addr_s_sc_ic,                 /* 190 */
+    PARROT_OP_ne_addr_sc_sc_ic,                /* 191 */
+    PARROT_OP_ne_addr_p_p_ic,                  /* 192 */
+    PARROT_OP_lt_i_i_ic,                       /* 193 */
+    PARROT_OP_lt_ic_i_ic,                      /* 194 */
+    PARROT_OP_lt_i_ic_ic,                      /* 195 */
+    PARROT_OP_lt_n_n_ic,                       /* 196 */
+    PARROT_OP_lt_nc_n_ic,                      /* 197 */
+    PARROT_OP_lt_n_nc_ic,                      /* 198 */
+    PARROT_OP_lt_s_s_ic,                       /* 199 */
+    PARROT_OP_lt_sc_s_ic,                      /* 200 */
+    PARROT_OP_lt_s_sc_ic,                      /* 201 */
+    PARROT_OP_lt_p_p_ic,                       /* 202 */
+    PARROT_OP_lt_p_i_ic,                       /* 203 */
+    PARROT_OP_lt_p_ic_ic,                      /* 204 */
+    PARROT_OP_lt_p_n_ic,                       /* 205 */
+    PARROT_OP_lt_p_nc_ic,                      /* 206 */
+    PARROT_OP_lt_p_s_ic,                       /* 207 */
+    PARROT_OP_lt_p_sc_ic,                      /* 208 */
+    PARROT_OP_lt_str_p_p_ic,                   /* 209 */
+    PARROT_OP_lt_num_p_p_ic,                   /* 210 */
+    PARROT_OP_le_i_i_ic,                       /* 211 */
+    PARROT_OP_le_ic_i_ic,                      /* 212 */
+    PARROT_OP_le_i_ic_ic,                      /* 213 */
+    PARROT_OP_le_n_n_ic,                       /* 214 */
+    PARROT_OP_le_nc_n_ic,                      /* 215 */
+    PARROT_OP_le_n_nc_ic,                      /* 216 */
+    PARROT_OP_le_s_s_ic,                       /* 217 */
+    PARROT_OP_le_sc_s_ic,                      /* 218 */
+    PARROT_OP_le_s_sc_ic,                      /* 219 */
+    PARROT_OP_le_p_p_ic,                       /* 220 */
+    PARROT_OP_le_p_i_ic,                       /* 221 */
+    PARROT_OP_le_p_ic_ic,                      /* 222 */
+    PARROT_OP_le_p_n_ic,                       /* 223 */
+    PARROT_OP_le_p_nc_ic,                      /* 224 */
+    PARROT_OP_le_p_s_ic,                       /* 225 */
+    PARROT_OP_le_p_sc_ic,                      /* 226 */
+    PARROT_OP_le_str_p_p_ic,                   /* 227 */
+    PARROT_OP_le_num_p_p_ic,                   /* 228 */
+    PARROT_OP_gt_p_p_ic,                       /* 229 */
+    PARROT_OP_gt_p_i_ic,                       /* 230 */
+    PARROT_OP_gt_p_ic_ic,                      /* 231 */
+    PARROT_OP_gt_p_n_ic,                       /* 232 */
+    PARROT_OP_gt_p_nc_ic,                      /* 233 */
+    PARROT_OP_gt_p_s_ic,                       /* 234 */
+    PARROT_OP_gt_p_sc_ic,                      /* 235 */
+    PARROT_OP_gt_str_p_p_ic,                   /* 236 */
+    PARROT_OP_gt_num_p_p_ic,                   /* 237 */
+    PARROT_OP_ge_p_p_ic,                       /* 238 */
+    PARROT_OP_ge_p_i_ic,                       /* 239 */
+    PARROT_OP_ge_p_ic_ic,                      /* 240 */
+    PARROT_OP_ge_p_n_ic,                       /* 241 */
+    PARROT_OP_ge_p_nc_ic,                      /* 242 */
+    PARROT_OP_ge_p_s_ic,                       /* 243 */
+    PARROT_OP_ge_p_sc_ic,                      /* 244 */
+    PARROT_OP_ge_str_p_p_ic,                   /* 245 */
+    PARROT_OP_ge_num_p_p_ic,                   /* 246 */
+    PARROT_OP_if_null_p_ic,                    /* 247 */
+    PARROT_OP_if_null_s_ic,                    /* 248 */
+    PARROT_OP_unless_null_p_ic,                /* 249 */
+    PARROT_OP_unless_null_s_ic,                /* 250 */
+    PARROT_OP_cmp_i_i_i,                       /* 251 */
+    PARROT_OP_cmp_i_ic_i,                      /* 252 */
+    PARROT_OP_cmp_i_i_ic,                      /* 253 */
+    PARROT_OP_cmp_i_n_n,                       /* 254 */
+    PARROT_OP_cmp_i_nc_n,                      /* 255 */
+    PARROT_OP_cmp_i_n_nc,                      /* 256 */
+    PARROT_OP_cmp_i_s_s,                       /* 257 */
+    PARROT_OP_cmp_i_sc_s,                      /* 258 */
+    PARROT_OP_cmp_i_s_sc,                      /* 259 */
+    PARROT_OP_cmp_i_p_p,                       /* 260 */
+    PARROT_OP_cmp_i_p_i,                       /* 261 */
+    PARROT_OP_cmp_i_p_ic,                      /* 262 */
+    PARROT_OP_cmp_i_p_n,                       /* 263 */
+    PARROT_OP_cmp_i_p_nc,                      /* 264 */
+    PARROT_OP_cmp_i_p_s,                       /* 265 */
+    PARROT_OP_cmp_i_p_sc,                      /* 266 */
+    PARROT_OP_cmp_str_i_p_p,                   /* 267 */
+    PARROT_OP_cmp_num_i_p_p,                   /* 268 */
+    PARROT_OP_cmp_pmc_p_p_p,                   /* 269 */
+    PARROT_OP_issame_i_p_p,                    /* 270 */
+    PARROT_OP_issame_i_s_s,                    /* 271 */
+    PARROT_OP_issame_i_sc_s,                   /* 272 */
+    PARROT_OP_issame_i_s_sc,                   /* 273 */
+    PARROT_OP_issame_i_sc_sc,                  /* 274 */
+    PARROT_OP_isntsame_i_p_p,                  /* 275 */
+    PARROT_OP_isntsame_i_s_s,                  /* 276 */
+    PARROT_OP_isntsame_i_sc_s,                 /* 277 */
+    PARROT_OP_isntsame_i_s_sc,                 /* 278 */
+    PARROT_OP_isntsame_i_sc_sc,                /* 279 */
+    PARROT_OP_istrue_i_p,                      /* 280 */
+    PARROT_OP_isfalse_i_p,                     /* 281 */
+    PARROT_OP_isnull_i_p,                      /* 282 */
+    PARROT_OP_isnull_i_pc,                     /* 283 */
+    PARROT_OP_isnull_i_s,                      /* 284 */
+    PARROT_OP_isnull_i_sc,                     /* 285 */
+    PARROT_OP_isgt_i_p_p,                      /* 286 */
+    PARROT_OP_isge_i_p_p,                      /* 287 */
+    PARROT_OP_isle_i_i_i,                      /* 288 */
+    PARROT_OP_isle_i_ic_i,                     /* 289 */
+    PARROT_OP_isle_i_i_ic,                     /* 290 */
+    PARROT_OP_isle_i_n_n,                      /* 291 */
+    PARROT_OP_isle_i_nc_n,                     /* 292 */
+    PARROT_OP_isle_i_n_nc,                     /* 293 */
+    PARROT_OP_isle_i_s_s,                      /* 294 */
+    PARROT_OP_isle_i_sc_s,                     /* 295 */
+    PARROT_OP_isle_i_s_sc,                     /* 296 */
+    PARROT_OP_isle_i_p_p,                      /* 297 */
+    PARROT_OP_islt_i_i_i,                      /* 298 */
+    PARROT_OP_islt_i_ic_i,                     /* 299 */
+    PARROT_OP_islt_i_i_ic,                     /* 300 */
+    PARROT_OP_islt_i_n_n,                      /* 301 */
+    PARROT_OP_islt_i_nc_n,                     /* 302 */
+    PARROT_OP_islt_i_n_nc,                     /* 303 */
+    PARROT_OP_islt_i_s_s,                      /* 304 */
+    PARROT_OP_islt_i_sc_s,                     /* 305 */
+    PARROT_OP_islt_i_s_sc,                     /* 306 */
+    PARROT_OP_islt_i_p_p,                      /* 307 */
+    PARROT_OP_iseq_i_i_i,                      /* 308 */
+    PARROT_OP_iseq_i_ic_i,                     /* 309 */
+    PARROT_OP_iseq_i_i_ic,                     /* 310 */
+    PARROT_OP_iseq_i_n_n,                      /* 311 */
+    PARROT_OP_iseq_i_nc_n,                     /* 312 */
+    PARROT_OP_iseq_i_n_nc,                     /* 313 */
+    PARROT_OP_iseq_i_s_s,                      /* 314 */
+    PARROT_OP_iseq_i_sc_s,                     /* 315 */
+    PARROT_OP_iseq_i_s_sc,                     /* 316 */
+    PARROT_OP_iseq_i_p_p,                      /* 317 */
+    PARROT_OP_isne_i_i_i,                      /* 318 */
+    PARROT_OP_isne_i_ic_i,                     /* 319 */
+    PARROT_OP_isne_i_i_ic,                     /* 320 */
+    PARROT_OP_isne_i_n_n,                      /* 321 */
+    PARROT_OP_isne_i_nc_n,                     /* 322 */
+    PARROT_OP_isne_i_n_nc,                     /* 323 */
+    PARROT_OP_isne_i_s_s,                      /* 324 */
+    PARROT_OP_isne_i_sc_s,                     /* 325 */
+    PARROT_OP_isne_i_s_sc,                     /* 326 */
+    PARROT_OP_isne_i_p_p,                      /* 327 */
+    PARROT_OP_and_i_i_i,                       /* 328 */
+    PARROT_OP_and_i_ic_i,                      /* 329 */
+    PARROT_OP_and_i_i_ic,                      /* 330 */
+    PARROT_OP_and_p_p_p,                       /* 331 */
+    PARROT_OP_not_i,                           /* 332 */
+    PARROT_OP_not_i_i,                         /* 333 */
+    PARROT_OP_not_p,                           /* 334 */
+    PARROT_OP_not_p_p,                         /* 335 */
+    PARROT_OP_or_i_i_i,                        /* 336 */
+    PARROT_OP_or_i_ic_i,                       /* 337 */
+    PARROT_OP_or_i_i_ic,                       /* 338 */
+    PARROT_OP_or_p_p_p,                        /* 339 */
+    PARROT_OP_xor_i_i_i,                       /* 340 */
+    PARROT_OP_xor_i_ic_i,                      /* 341 */
+    PARROT_OP_xor_i_i_ic,                      /* 342 */
+    PARROT_OP_xor_p_p_p,                       /* 343 */
+    PARROT_OP_print_i,                         /* 344 */
+    PARROT_OP_print_ic,                        /* 345 */
+    PARROT_OP_print_n,                         /* 346 */
+    PARROT_OP_print_nc,                        /* 347 */
+    PARROT_OP_print_s,                         /* 348 */
+    PARROT_OP_print_sc,                        /* 349 */
+    PARROT_OP_print_p,                         /* 350 */
+    PARROT_OP_say_i,                           /* 351 */
+    PARROT_OP_say_ic,                          /* 352 */
+    PARROT_OP_say_n,                           /* 353 */
+    PARROT_OP_say_nc,                          /* 354 */
+    PARROT_OP_say_s,                           /* 355 */
+    PARROT_OP_say_sc,                          /* 356 */
+    PARROT_OP_say_p,                           /* 357 */
+    PARROT_OP_print_p_i,                       /* 358 */
+    PARROT_OP_print_p_ic,                      /* 359 */
+    PARROT_OP_print_p_n,                       /* 360 */
+    PARROT_OP_print_p_nc,                      /* 361 */
+    PARROT_OP_print_p_s,                       /* 362 */
+    PARROT_OP_print_p_sc,                      /* 363 */
+    PARROT_OP_print_p_p,                       /* 364 */
+    PARROT_OP_getstdin_p,                      /* 365 */
+    PARROT_OP_getstdout_p,                     /* 366 */
+    PARROT_OP_getstderr_p,                     /* 367 */
+    PARROT_OP_abs_i,                           /* 368 */
+    PARROT_OP_abs_n,                           /* 369 */
+    PARROT_OP_abs_i_i,                         /* 370 */
+    PARROT_OP_abs_n_n,                         /* 371 */
+    PARROT_OP_abs_p,                           /* 372 */
+    PARROT_OP_abs_p_p,                         /* 373 */
+    PARROT_OP_add_i_i,                         /* 374 */
+    PARROT_OP_add_i_ic,                        /* 375 */
+    PARROT_OP_add_n_n,                         /* 376 */
+    PARROT_OP_add_n_nc,                        /* 377 */
+    PARROT_OP_add_p_p,                         /* 378 */
+    PARROT_OP_add_p_i,                         /* 379 */
+    PARROT_OP_add_p_ic,                        /* 380 */
+    PARROT_OP_add_p_n,                         /* 381 */
+    PARROT_OP_add_p_nc,                        /* 382 */
+    PARROT_OP_add_i_i_i,                       /* 383 */
+    PARROT_OP_add_i_ic_i,                      /* 384 */
+    PARROT_OP_add_i_i_ic,                      /* 385 */
+    PARROT_OP_add_n_n_n,                       /* 386 */
+    PARROT_OP_add_n_nc_n,                      /* 387 */
+    PARROT_OP_add_n_n_nc,                      /* 388 */
+    PARROT_OP_add_p_p_p,                       /* 389 */
+    PARROT_OP_add_p_p_i,                       /* 390 */
+    PARROT_OP_add_p_p_ic,                      /* 391 */
+    PARROT_OP_add_p_p_n,                       /* 392 */
+    PARROT_OP_add_p_p_nc,                      /* 393 */
+    PARROT_OP_dec_i,                           /* 394 */
+    PARROT_OP_dec_n,                           /* 395 */
+    PARROT_OP_dec_p,                           /* 396 */
+    PARROT_OP_div_i_i,                         /* 397 */
+    PARROT_OP_div_i_ic,                        /* 398 */
+    PARROT_OP_div_n_n,                         /* 399 */
+    PARROT_OP_div_n_nc,                        /* 400 */
+    PARROT_OP_div_p_p,                         /* 401 */
+    PARROT_OP_div_p_i,                         /* 402 */
+    PARROT_OP_div_p_ic,                        /* 403 */
+    PARROT_OP_div_p_n,                         /* 404 */
+    PARROT_OP_div_p_nc,                        /* 405 */
+    PARROT_OP_div_i_i_i,                       /* 406 */
+    PARROT_OP_div_i_ic_i,                      /* 407 */
+    PARROT_OP_div_i_i_ic,                      /* 408 */
+    PARROT_OP_div_i_ic_ic,                     /* 409 */
+    PARROT_OP_div_n_n_n,                       /* 410 */
+    PARROT_OP_div_n_nc_n,                      /* 411 */
+    PARROT_OP_div_n_n_nc,                      /* 412 */
+    PARROT_OP_div_n_nc_nc,                     /* 413 */
+    PARROT_OP_div_p_p_p,                       /* 414 */
+    PARROT_OP_div_p_p_i,                       /* 415 */
+    PARROT_OP_div_p_p_ic,                      /* 416 */
+    PARROT_OP_div_p_p_n,                       /* 417 */
+    PARROT_OP_div_p_p_nc,                      /* 418 */
+    PARROT_OP_fdiv_i_i,                        /* 419 */
+    PARROT_OP_fdiv_i_ic,                       /* 420 */
+    PARROT_OP_fdiv_n_n,                        /* 421 */
+    PARROT_OP_fdiv_n_nc,                       /* 422 */
+    PARROT_OP_fdiv_p_p,                        /* 423 */
+    PARROT_OP_fdiv_p_i,                        /* 424 */
+    PARROT_OP_fdiv_p_ic,                       /* 425 */
+    PARROT_OP_fdiv_p_n,                        /* 426 */
+    PARROT_OP_fdiv_p_nc,                       /* 427 */
+    PARROT_OP_fdiv_i_i_i,                      /* 428 */
+    PARROT_OP_fdiv_i_ic_i,                     /* 429 */
+    PARROT_OP_fdiv_i_i_ic,                     /* 430 */
+    PARROT_OP_fdiv_n_n_n,                      /* 431 */
+    PARROT_OP_fdiv_n_nc_n,                     /* 432 */
+    PARROT_OP_fdiv_n_n_nc,                     /* 433 */
+    PARROT_OP_fdiv_p_p_p,                      /* 434 */
+    PARROT_OP_fdiv_p_p_i,                      /* 435 */
+    PARROT_OP_fdiv_p_p_ic,                     /* 436 */
+    PARROT_OP_fdiv_p_p_n,                      /* 437 */
+    PARROT_OP_fdiv_p_p_nc,                     /* 438 */
+    PARROT_OP_ceil_n,                          /* 439 */
+    PARROT_OP_ceil_i_n,                        /* 440 */
+    PARROT_OP_ceil_n_n,                        /* 441 */
+    PARROT_OP_floor_n,                         /* 442 */
+    PARROT_OP_floor_i_n,                       /* 443 */
+    PARROT_OP_floor_n_n,                       /* 444 */
+    PARROT_OP_inc_i,                           /* 445 */
+    PARROT_OP_inc_n,                           /* 446 */
+    PARROT_OP_inc_p,                           /* 447 */
+    PARROT_OP_mod_i_i,                         /* 448 */
+    PARROT_OP_mod_i_ic,                        /* 449 */
+    PARROT_OP_mod_n_n,                         /* 450 */
+    PARROT_OP_mod_n_nc,                        /* 451 */
+    PARROT_OP_mod_p_p,                         /* 452 */
+    PARROT_OP_mod_p_i,                         /* 453 */
+    PARROT_OP_mod_p_ic,                        /* 454 */
+    PARROT_OP_mod_p_n,                         /* 455 */
+    PARROT_OP_mod_p_nc,                        /* 456 */
+    PARROT_OP_mod_i_i_i,                       /* 457 */
+    PARROT_OP_mod_i_ic_i,                      /* 458 */
+    PARROT_OP_mod_i_i_ic,                      /* 459 */
+    PARROT_OP_mod_n_n_n,                       /* 460 */
+    PARROT_OP_mod_n_nc_n,                      /* 461 */
+    PARROT_OP_mod_n_n_nc,                      /* 462 */
+    PARROT_OP_mod_p_p_p,                       /* 463 */
+    PARROT_OP_mod_p_p_i,                       /* 464 */
+    PARROT_OP_mod_p_p_ic,                      /* 465 */
+    PARROT_OP_mod_p_p_n,                       /* 466 */
+    PARROT_OP_mod_p_p_nc,                      /* 467 */
+    PARROT_OP_mul_i_i,                         /* 468 */
+    PARROT_OP_mul_i_ic,                        /* 469 */
+    PARROT_OP_mul_n_n,                         /* 470 */
+    PARROT_OP_mul_n_nc,                        /* 471 */
+    PARROT_OP_mul_p_p,                         /* 472 */
+    PARROT_OP_mul_p_i,                         /* 473 */
+    PARROT_OP_mul_p_ic,                        /* 474 */
+    PARROT_OP_mul_p_n,                         /* 475 */
+    PARROT_OP_mul_p_nc,                        /* 476 */
+    PARROT_OP_mul_i_i_i,                       /* 477 */
+    PARROT_OP_mul_i_ic_i,                      /* 478 */
+    PARROT_OP_mul_i_i_ic,                      /* 479 */
+    PARROT_OP_mul_n_n_n,                       /* 480 */
+    PARROT_OP_mul_n_nc_n,                      /* 481 */
+    PARROT_OP_mul_n_n_nc,                      /* 482 */
+    PARROT_OP_mul_p_p_p,                       /* 483 */
+    PARROT_OP_mul_p_p_i,                       /* 484 */
+    PARROT_OP_mul_p_p_ic,                      /* 485 */
+    PARROT_OP_mul_p_p_n,                       /* 486 */
+    PARROT_OP_mul_p_p_nc,                      /* 487 */
+    PARROT_OP_neg_i,                           /* 488 */
+    PARROT_OP_neg_n,                           /* 489 */
+    PARROT_OP_neg_p,                           /* 490 */
+    PARROT_OP_neg_i_i,                         /* 491 */
+    PARROT_OP_neg_n_n,                         /* 492 */
+    PARROT_OP_neg_p_p,                         /* 493 */
+    PARROT_OP_sub_i_i,                         /* 494 */
+    PARROT_OP_sub_i_ic,                        /* 495 */
+    PARROT_OP_sub_n_n,                         /* 496 */
+    PARROT_OP_sub_n_nc,                        /* 497 */
+    PARROT_OP_sub_p_p,                         /* 498 */
+    PARROT_OP_sub_p_i,                         /* 499 */
+    PARROT_OP_sub_p_ic,                        /* 500 */
+    PARROT_OP_sub_p_n,                         /* 501 */
+    PARROT_OP_sub_p_nc,                        /* 502 */
+    PARROT_OP_sub_i_i_i,                       /* 503 */
+    PARROT_OP_sub_i_ic_i,                      /* 504 */
+    PARROT_OP_sub_i_i_ic,                      /* 505 */
+    PARROT_OP_sub_n_n_n,                       /* 506 */
+    PARROT_OP_sub_n_nc_n,                      /* 507 */
+    PARROT_OP_sub_n_n_nc,                      /* 508 */
+    PARROT_OP_sub_p_p_p,                       /* 509 */
+    PARROT_OP_sub_p_p_i,                       /* 510 */
+    PARROT_OP_sub_p_p_ic,                      /* 511 */
+    PARROT_OP_sub_p_p_n,                       /* 512 */
+    PARROT_OP_sub_p_p_nc,                      /* 513 */
+    PARROT_OP_sqrt_n_n,                        /* 514 */
+    PARROT_OP_callmethodcc_p_s,                /* 515 */
+    PARROT_OP_callmethodcc_p_sc,               /* 516 */
+    PARROT_OP_callmethodcc_p_p,                /* 517 */
+    PARROT_OP_callmethod_p_s_p,                /* 518 */
+    PARROT_OP_callmethod_p_sc_p,               /* 519 */
+    PARROT_OP_callmethod_p_p_p,                /* 520 */
+    PARROT_OP_tailcallmethod_p_s,              /* 521 */
+    PARROT_OP_tailcallmethod_p_sc,             /* 522 */
+    PARROT_OP_tailcallmethod_p_p,              /* 523 */
+    PARROT_OP_addmethod_p_s_p,                 /* 524 */
+    PARROT_OP_addmethod_p_sc_p,                /* 525 */
+    PARROT_OP_can_i_p_s,                       /* 526 */
+    PARROT_OP_can_i_p_sc,                      /* 527 */
+    PARROT_OP_does_i_p_s,                      /* 528 */
+    PARROT_OP_does_i_p_sc,                     /* 529 */
+    PARROT_OP_does_i_p_p,                      /* 530 */
+    PARROT_OP_does_i_p_pc,                     /* 531 */
+    PARROT_OP_isa_i_p_s,                       /* 532 */
+    PARROT_OP_isa_i_p_sc,                      /* 533 */
+    PARROT_OP_isa_i_p_p,                       /* 534 */
+    PARROT_OP_isa_i_p_pc,                      /* 535 */
+    PARROT_OP_newclass_p_s,                    /* 536 */
+    PARROT_OP_newclass_p_sc,                   /* 537 */
+    PARROT_OP_newclass_p_p,                    /* 538 */
+    PARROT_OP_newclass_p_pc,                   /* 539 */
+    PARROT_OP_subclass_p_p,                    /* 540 */
+    PARROT_OP_subclass_p_pc,                   /* 541 */
+    PARROT_OP_subclass_p_p_s,                  /* 542 */
+    PARROT_OP_subclass_p_pc_s,                 /* 543 */
+    PARROT_OP_subclass_p_p_sc,                 /* 544 */
+    PARROT_OP_subclass_p_pc_sc,                /* 545 */
+    PARROT_OP_subclass_p_p_p,                  /* 546 */
+    PARROT_OP_subclass_p_pc_p,                 /* 547 */
+    PARROT_OP_subclass_p_p_pc,                 /* 548 */
+    PARROT_OP_subclass_p_pc_pc,                /* 549 */
+    PARROT_OP_subclass_p_s,                    /* 550 */
+    PARROT_OP_subclass_p_sc,                   /* 551 */
+    PARROT_OP_subclass_p_s_s,                  /* 552 */
+    PARROT_OP_subclass_p_sc_s,                 /* 553 */
+    PARROT_OP_subclass_p_s_sc,                 /* 554 */
+    PARROT_OP_subclass_p_sc_sc,                /* 555 */
+    PARROT_OP_subclass_p_s_p,                  /* 556 */
+    PARROT_OP_subclass_p_sc_p,                 /* 557 */
+    PARROT_OP_subclass_p_s_pc,                 /* 558 */
+    PARROT_OP_subclass_p_sc_pc,                /* 559 */
+    PARROT_OP_get_class_p_s,                   /* 560 */
+    PARROT_OP_get_class_p_sc,                  /* 561 */
+    PARROT_OP_get_class_p_p,                   /* 562 */
+    PARROT_OP_get_class_p_pc,                  /* 563 */
+    PARROT_OP_class_p_p,                       /* 564 */
+    PARROT_OP_addparent_p_p,                   /* 565 */
+    PARROT_OP_removeparent_p_p,                /* 566 */
+    PARROT_OP_addrole_p_p,                     /* 567 */
+    PARROT_OP_addattribute_p_s,                /* 568 */
+    PARROT_OP_addattribute_p_sc,               /* 569 */
+    PARROT_OP_removeattribute_p_s,             /* 570 */
+    PARROT_OP_removeattribute_p_sc,            /* 571 */
+    PARROT_OP_getattribute_p_p_s,              /* 572 */
+    PARROT_OP_getattribute_p_p_sc,             /* 573 */
+    PARROT_OP_getattribute_p_p_p_s,            /* 574 */
+    PARROT_OP_getattribute_p_p_pc_s,           /* 575 */
+    PARROT_OP_getattribute_p_p_p_sc,           /* 576 */
+    PARROT_OP_getattribute_p_p_pc_sc,          /* 577 */
+    PARROT_OP_setattribute_p_s_p,              /* 578 */
+    PARROT_OP_setattribute_p_sc_p,             /* 579 */
+    PARROT_OP_setattribute_p_p_s_p,            /* 580 */
+    PARROT_OP_setattribute_p_pc_s_p,           /* 581 */
+    PARROT_OP_setattribute_p_p_sc_p,           /* 582 */
+    PARROT_OP_setattribute_p_pc_sc_p,          /* 583 */
+    PARROT_OP_inspect_p_p,                     /* 584 */
+    PARROT_OP_inspect_p_pc,                    /* 585 */
+    PARROT_OP_inspect_p_p_s,                   /* 586 */
+    PARROT_OP_inspect_p_pc_s,                  /* 587 */
+    PARROT_OP_inspect_p_p_sc,                  /* 588 */
+    PARROT_OP_inspect_p_pc_sc,                 /* 589 */
+    PARROT_OP_new_p_s,                         /* 590 */
+    PARROT_OP_new_p_sc,                        /* 591 */
+    PARROT_OP_new_p_s_p,                       /* 592 */
+    PARROT_OP_new_p_sc_p,                      /* 593 */
+    PARROT_OP_new_p_s_pc,                      /* 594 */
+    PARROT_OP_new_p_sc_pc,                     /* 595 */
+    PARROT_OP_new_p_p,                         /* 596 */
+    PARROT_OP_new_p_pc,                        /* 597 */
+    PARROT_OP_new_p_p_p,                       /* 598 */
+    PARROT_OP_new_p_pc_p,                      /* 599 */
+    PARROT_OP_new_p_p_pc,                      /* 600 */
+    PARROT_OP_new_p_pc_pc,                     /* 601 */
+    PARROT_OP_root_new_p_p,                    /* 602 */
+    PARROT_OP_root_new_p_pc,                   /* 603 */
+    PARROT_OP_root_new_p_p_p,                  /* 604 */
+    PARROT_OP_root_new_p_pc_p,                 /* 605 */
+    PARROT_OP_root_new_p_p_pc,                 /* 606 */
+    PARROT_OP_root_new_p_pc_pc,                /* 607 */
+    PARROT_OP_typeof_s_p,                      /* 608 */
+    PARROT_OP_typeof_p_p,                      /* 609 */
+    PARROT_OP_get_repr_s_p,                    /* 610 */
+    PARROT_OP_find_method_p_p_s,               /* 611 */
+    PARROT_OP_find_method_p_p_sc,              /* 612 */
+    PARROT_OP_defined_i_p,                     /* 613 */
+    PARROT_OP_defined_i_p_ki,                  /* 614 */
+    PARROT_OP_defined_i_p_kic,                 /* 615 */
+    PARROT_OP_defined_i_p_k,                   /* 616 */
+    PARROT_OP_defined_i_p_kc,                  /* 617 */
+    PARROT_OP_exists_i_p_ki,                   /* 618 */
+    PARROT_OP_exists_i_p_kic,                  /* 619 */
+    PARROT_OP_exists_i_p_k,                    /* 620 */
+    PARROT_OP_exists_i_p_kc,                   /* 621 */
+    PARROT_OP_delete_p_k,                      /* 622 */
+    PARROT_OP_delete_p_kc,                     /* 623 */
+    PARROT_OP_delete_p_ki,                     /* 624 */
+    PARROT_OP_delete_p_kic,                    /* 625 */
+    PARROT_OP_elements_i_p,                    /* 626 */
+    PARROT_OP_push_p_i,                        /* 627 */
+    PARROT_OP_push_p_ic,                       /* 628 */
+    PARROT_OP_push_p_n,                        /* 629 */
+    PARROT_OP_push_p_nc,                       /* 630 */
+    PARROT_OP_push_p_s,                        /* 631 */
+    PARROT_OP_push_p_sc,                       /* 632 */
+    PARROT_OP_push_p_p,                        /* 633 */
+    PARROT_OP_pop_i_p,                         /* 634 */
+    PARROT_OP_pop_n_p,                         /* 635 */
+    PARROT_OP_pop_s_p,                         /* 636 */
+    PARROT_OP_pop_p_p,                         /* 637 */
+    PARROT_OP_unshift_p_i,                     /* 638 */
+    PARROT_OP_unshift_p_ic,                    /* 639 */
+    PARROT_OP_unshift_p_n,                     /* 640 */
+    PARROT_OP_unshift_p_nc,                    /* 641 */
+    PARROT_OP_unshift_p_s,                     /* 642 */
+    PARROT_OP_unshift_p_sc,                    /* 643 */
+    PARROT_OP_unshift_p_p,                     /* 644 */
+    PARROT_OP_shift_i_p,                       /* 645 */
+    PARROT_OP_shift_n_p,                       /* 646 */
+    PARROT_OP_shift_s_p,                       /* 647 */
+    PARROT_OP_shift_p_p,                       /* 648 */
+    PARROT_OP_splice_p_p_i_i,                  /* 649 */
+    PARROT_OP_splice_p_p_ic_i,                 /* 650 */
+    PARROT_OP_splice_p_p_i_ic,                 /* 651 */
+    PARROT_OP_splice_p_p_ic_ic,                /* 652 */
+    PARROT_OP_setprop_p_s_p,                   /* 653 */
+    PARROT_OP_setprop_p_sc_p,                  /* 654 */
+    PARROT_OP_getprop_p_s_p,                   /* 655 */
+    PARROT_OP_getprop_p_sc_p,                  /* 656 */
+    PARROT_OP_delprop_p_s,                     /* 657 */
+    PARROT_OP_delprop_p_sc,                    /* 658 */
+    PARROT_OP_prophash_p_p,                    /* 659 */
+    PARROT_OP_freeze_s_p,                      /* 660 */
+    PARROT_OP_thaw_p_s,                        /* 661 */
+    PARROT_OP_thaw_p_sc,                       /* 662 */
+    PARROT_OP_add_multi_s_s_p,                 /* 663 */
+    PARROT_OP_add_multi_sc_s_p,                /* 664 */
+    PARROT_OP_add_multi_s_sc_p,                /* 665 */
+    PARROT_OP_add_multi_sc_sc_p,               /* 666 */
+    PARROT_OP_find_multi_p_s_s,                /* 667 */
+    PARROT_OP_find_multi_p_sc_s,               /* 668 */
+    PARROT_OP_find_multi_p_s_sc,               /* 669 */
+    PARROT_OP_find_multi_p_sc_sc,              /* 670 */
+    PARROT_OP_register_p,                      /* 671 */
+    PARROT_OP_unregister_p,                    /* 672 */
+    PARROT_OP_box_p_i,                         /* 673 */
+    PARROT_OP_box_p_ic,                        /* 674 */
+    PARROT_OP_box_p_n,                         /* 675 */
+    PARROT_OP_box_p_nc,                        /* 676 */
+    PARROT_OP_box_p_s,                         /* 677 */
+    PARROT_OP_box_p_sc,                        /* 678 */
+    PARROT_OP_iter_p_p,                        /* 679 */
+    PARROT_OP_morph_p_p,                       /* 680 */
+    PARROT_OP_morph_p_pc,                      /* 681 */
+    PARROT_OP_clone_s_s,                       /* 682 */
+    PARROT_OP_clone_s_sc,                      /* 683 */
+    PARROT_OP_set_i_i,                         /* 684 */
+    PARROT_OP_set_i_ic,                        /* 685 */
+    PARROT_OP_set_i_n,                         /* 686 */
+    PARROT_OP_set_i_nc,                        /* 687 */
+    PARROT_OP_set_i_s,                         /* 688 */
+    PARROT_OP_set_i_sc,                        /* 689 */
+    PARROT_OP_set_n_n,                         /* 690 */
+    PARROT_OP_set_n_nc,                        /* 691 */
+    PARROT_OP_set_n_i,                         /* 692 */
+    PARROT_OP_set_n_ic,                        /* 693 */
+    PARROT_OP_set_n_s,                         /* 694 */
+    PARROT_OP_set_n_sc,                        /* 695 */
+    PARROT_OP_set_n_p,                         /* 696 */
+    PARROT_OP_set_s_p,                         /* 697 */
+    PARROT_OP_set_s_s,                         /* 698 */
+    PARROT_OP_set_s_sc,                        /* 699 */
+    PARROT_OP_set_s_i,                         /* 700 */
+    PARROT_OP_set_s_ic,                        /* 701 */
+    PARROT_OP_set_s_n,                         /* 702 */
+    PARROT_OP_set_s_nc,                        /* 703 */
+    PARROT_OP_set_p_pc,                        /* 704 */
+    PARROT_OP_set_p_p,                         /* 705 */
+    PARROT_OP_set_p_i,                         /* 706 */
+    PARROT_OP_set_p_ic,                        /* 707 */
+    PARROT_OP_set_p_n,                         /* 708 */
+    PARROT_OP_set_p_nc,                        /* 709 */
+    PARROT_OP_set_p_s,                         /* 710 */
+    PARROT_OP_set_p_sc,                        /* 711 */
+    PARROT_OP_set_i_p,                         /* 712 */
+    PARROT_OP_assign_p_p,                      /* 713 */
+    PARROT_OP_assign_p_i,                      /* 714 */
+    PARROT_OP_assign_p_ic,                     /* 715 */
+    PARROT_OP_assign_p_n,                      /* 716 */
+    PARROT_OP_assign_p_nc,                     /* 717 */
+    PARROT_OP_assign_p_s,                      /* 718 */
+    PARROT_OP_assign_p_sc,                     /* 719 */
+    PARROT_OP_assign_s_s,                      /* 720 */
+    PARROT_OP_assign_s_sc,                     /* 721 */
+    PARROT_OP_setref_p_p,                      /* 722 */
+    PARROT_OP_deref_p_p,                       /* 723 */
+    PARROT_OP_set_p_ki_i,                      /* 724 */
+    PARROT_OP_set_p_kic_i,                     /* 725 */
+    PARROT_OP_set_p_ki_ic,                     /* 726 */
+    PARROT_OP_set_p_kic_ic,                    /* 727 */
+    PARROT_OP_set_p_ki_n,                      /* 728 */
+    PARROT_OP_set_p_kic_n,                     /* 729 */
+    PARROT_OP_set_p_ki_nc,                     /* 730 */
+    PARROT_OP_set_p_kic_nc,                    /* 731 */
+    PARROT_OP_set_p_ki_s,                      /* 732 */
+    PARROT_OP_set_p_kic_s,                     /* 733 */
+    PARROT_OP_set_p_ki_sc,                     /* 734 */
+    PARROT_OP_set_p_kic_sc,                    /* 735 */
+    PARROT_OP_set_p_ki_p,                      /* 736 */
+    PARROT_OP_set_p_kic_p,                     /* 737 */
+    PARROT_OP_set_i_p_ki,                      /* 738 */
+    PARROT_OP_set_i_p_kic,                     /* 739 */
+    PARROT_OP_set_n_p_ki,                      /* 740 */
+    PARROT_OP_set_n_p_kic,                     /* 741 */
+    PARROT_OP_set_s_p_ki,                      /* 742 */
+    PARROT_OP_set_s_p_kic,                     /* 743 */
+    PARROT_OP_set_p_p_ki,                      /* 744 */
+    PARROT_OP_set_p_p_kic,                     /* 745 */
+    PARROT_OP_set_p_k_i,                       /* 746 */
+    PARROT_OP_set_p_kc_i,                      /* 747 */
+    PARROT_OP_set_p_k_ic,                      /* 748 */
+    PARROT_OP_set_p_kc_ic,                     /* 749 */
+    PARROT_OP_set_p_k_n,                       /* 750 */
+    PARROT_OP_set_p_kc_n,                      /* 751 */
+    PARROT_OP_set_p_k_nc,                      /* 752 */
+    PARROT_OP_set_p_kc_nc,                     /* 753 */
+    PARROT_OP_set_p_k_s,                       /* 754 */
+    PARROT_OP_set_p_kc_s,                      /* 755 */
+    PARROT_OP_set_p_k_sc,                      /* 756 */
+    PARROT_OP_set_p_kc_sc,                     /* 757 */
+    PARROT_OP_set_p_k_p,                       /* 758 */
+    PARROT_OP_set_p_kc_p,                      /* 759 */
+    PARROT_OP_set_i_p_k,                       /* 760 */
+    PARROT_OP_set_i_p_kc,                      /* 761 */
+    PARROT_OP_set_n_p_k,                       /* 762 */
+    PARROT_OP_set_n_p_kc,                      /* 763 */
+    PARROT_OP_set_s_p_k,                       /* 764 */
+    PARROT_OP_set_s_p_kc,                      /* 765 */
+    PARROT_OP_set_p_p_k,                       /* 766 */
+    PARROT_OP_set_p_p_kc,                      /* 767 */
+    PARROT_OP_clone_p_p,                       /* 768 */
+    PARROT_OP_clone_p_p_p,                     /* 769 */
+    PARROT_OP_clone_p_p_pc,                    /* 770 */
+    PARROT_OP_copy_p_p,                        /* 771 */
+    PARROT_OP_null_s,                          /* 772 */
+    PARROT_OP_null_i,                          /* 773 */
+    PARROT_OP_null_p,                          /* 774 */
+    PARROT_OP_null_n,                          /* 775 */
+    PARROT_OP_ord_i_s,                         /* 776 */
+    PARROT_OP_ord_i_sc,                        /* 777 */
+    PARROT_OP_ord_i_s_i,                       /* 778 */
+    PARROT_OP_ord_i_sc_i,                      /* 779 */
+    PARROT_OP_ord_i_s_ic,                      /* 780 */
+    PARROT_OP_ord_i_sc_ic,                     /* 781 */
+    PARROT_OP_chr_s_i,                         /* 782 */
+    PARROT_OP_chr_s_ic,                        /* 783 */
+    PARROT_OP_chopn_s_s_i,                     /* 784 */
+    PARROT_OP_chopn_s_sc_i,                    /* 785 */
+    PARROT_OP_chopn_s_s_ic,                    /* 786 */
+    PARROT_OP_chopn_s_sc_ic,                   /* 787 */
+    PARROT_OP_concat_s_s,                      /* 788 */
+    PARROT_OP_concat_s_sc,                     /* 789 */
+    PARROT_OP_concat_p_p,                      /* 790 */
+    PARROT_OP_concat_p_s,                      /* 791 */
+    PARROT_OP_concat_p_sc,                     /* 792 */
+    PARROT_OP_concat_s_s_s,                    /* 793 */
+    PARROT_OP_concat_s_sc_s,                   /* 794 */
+    PARROT_OP_concat_s_s_sc,                   /* 795 */
+    PARROT_OP_concat_p_p_s,                    /* 796 */
+    PARROT_OP_concat_p_p_sc,                   /* 797 */
+    PARROT_OP_concat_p_p_p,                    /* 798 */
+    PARROT_OP_repeat_s_s_i,                    /* 799 */
+    PARROT_OP_repeat_s_sc_i,                   /* 800 */
+    PARROT_OP_repeat_s_s_ic,                   /* 801 */
+    PARROT_OP_repeat_s_sc_ic,                  /* 802 */
+    PARROT_OP_repeat_p_p_i,                    /* 803 */
+    PARROT_OP_repeat_p_p_ic,                   /* 804 */
+    PARROT_OP_repeat_p_p_p,                    /* 805 */
+    PARROT_OP_repeat_p_i,                      /* 806 */
+    PARROT_OP_repeat_p_ic,                     /* 807 */
+    PARROT_OP_repeat_p_p,                      /* 808 */
+    PARROT_OP_length_i_s,                      /* 809 */
+    PARROT_OP_length_i_sc,                     /* 810 */
+    PARROT_OP_bytelength_i_s,                  /* 811 */
+    PARROT_OP_bytelength_i_sc,                 /* 812 */
+    PARROT_OP_pin_s,                           /* 813 */
+    PARROT_OP_unpin_s,                         /* 814 */
+    PARROT_OP_substr_s_s_i,                    /* 815 */
+    PARROT_OP_substr_s_sc_i,                   /* 816 */
+    PARROT_OP_substr_s_s_ic,                   /* 817 */
+    PARROT_OP_substr_s_sc_ic,                  /* 818 */
+    PARROT_OP_substr_s_s_i_i,                  /* 819 */
+    PARROT_OP_substr_s_sc_i_i,                 /* 820 */
+    PARROT_OP_substr_s_s_ic_i,                 /* 821 */
+    PARROT_OP_substr_s_sc_ic_i,                /* 822 */
+    PARROT_OP_substr_s_s_i_ic,                 /* 823 */
+    PARROT_OP_substr_s_sc_i_ic,                /* 824 */
+    PARROT_OP_substr_s_s_ic_ic,                /* 825 */
+    PARROT_OP_substr_s_sc_ic_ic,               /* 826 */
+    PARROT_OP_substr_s_p_i_i,                  /* 827 */
+    PARROT_OP_substr_s_p_ic_i,                 /* 828 */
+    PARROT_OP_substr_s_p_i_ic,                 /* 829 */
+    PARROT_OP_substr_s_p_ic_ic,                /* 830 */
+    PARROT_OP_replace_s_s_i_i_s,               /* 831 */
+    PARROT_OP_replace_s_sc_i_i_s,              /* 832 */
+    PARROT_OP_replace_s_s_ic_i_s,              /* 833 */
+    PARROT_OP_replace_s_sc_ic_i_s,             /* 834 */
+    PARROT_OP_replace_s_s_i_ic_s,              /* 835 */
+    PARROT_OP_replace_s_sc_i_ic_s,             /* 836 */
+    PARROT_OP_replace_s_s_ic_ic_s,             /* 837 */
+    PARROT_OP_replace_s_sc_ic_ic_s,            /* 838 */
+    PARROT_OP_replace_s_s_i_i_sc,              /* 839 */
+    PARROT_OP_replace_s_sc_i_i_sc,             /* 840 */
+    PARROT_OP_replace_s_s_ic_i_sc,             /* 841 */
+    PARROT_OP_replace_s_sc_ic_i_sc,            /* 842 */
+    PARROT_OP_replace_s_s_i_ic_sc,             /* 843 */
+    PARROT_OP_replace_s_sc_i_ic_sc,            /* 844 */
+    PARROT_OP_replace_s_s_ic_ic_sc,            /* 845 */
+    PARROT_OP_replace_s_sc_ic_ic_sc,           /* 846 */
+    PARROT_OP_index_i_s_s,                     /* 847 */
+    PARROT_OP_index_i_sc_s,                    /* 848 */
+    PARROT_OP_index_i_s_sc,                    /* 849 */
+    PARROT_OP_index_i_sc_sc,                   /* 850 */
+    PARROT_OP_index_i_s_s_i,                   /* 851 */
+    PARROT_OP_index_i_sc_s_i,                  /* 852 */
+    PARROT_OP_index_i_s_sc_i,                  /* 853 */
+    PARROT_OP_index_i_sc_sc_i,                 /* 854 */
+    PARROT_OP_index_i_s_s_ic,                  /* 855 */
+    PARROT_OP_index_i_sc_s_ic,                 /* 856 */
+    PARROT_OP_index_i_s_sc_ic,                 /* 857 */
+    PARROT_OP_index_i_sc_sc_ic,                /* 858 */
+    PARROT_OP_sprintf_s_s_p,                   /* 859 */
+    PARROT_OP_sprintf_s_sc_p,                  /* 860 */
+    PARROT_OP_sprintf_p_p_p,                   /* 861 */
+    PARROT_OP_new_s,                           /* 862 */
+    PARROT_OP_new_s_i,                         /* 863 */
+    PARROT_OP_new_s_ic,                        /* 864 */
+    PARROT_OP_stringinfo_i_s_i,                /* 865 */
+    PARROT_OP_stringinfo_i_sc_i,               /* 866 */
+    PARROT_OP_stringinfo_i_s_ic,               /* 867 */
+    PARROT_OP_stringinfo_i_sc_ic,              /* 868 */
+    PARROT_OP_upcase_s_s,                      /* 869 */
+    PARROT_OP_upcase_s_sc,                     /* 870 */
+    PARROT_OP_downcase_s_s,                    /* 871 */
+    PARROT_OP_downcase_s_sc,                   /* 872 */
+    PARROT_OP_titlecase_s_s,                   /* 873 */
+    PARROT_OP_titlecase_s_sc,                  /* 874 */
+    PARROT_OP_join_s_s_p,                      /* 875 */
+    PARROT_OP_join_s_sc_p,                     /* 876 */
+    PARROT_OP_split_p_s_s,                     /* 877 */
+    PARROT_OP_split_p_sc_s,                    /* 878 */
+    PARROT_OP_split_p_s_sc,                    /* 879 */
+    PARROT_OP_split_p_sc_sc,                   /* 880 */
+    PARROT_OP_charset_i_s,                     /* 881 */
+    PARROT_OP_charset_i_sc,                    /* 882 */
+    PARROT_OP_charsetname_s_i,                 /* 883 */
+    PARROT_OP_charsetname_s_ic,                /* 884 */
+    PARROT_OP_find_charset_i_s,                /* 885 */
+    PARROT_OP_find_charset_i_sc,               /* 886 */
+    PARROT_OP_trans_charset_s_s_i,             /* 887 */
+    PARROT_OP_trans_charset_s_sc_i,            /* 888 */
+    PARROT_OP_trans_charset_s_s_ic,            /* 889 */
+    PARROT_OP_trans_charset_s_sc_ic,           /* 890 */
+    PARROT_OP_encoding_i_s,                    /* 891 */
+    PARROT_OP_encoding_i_sc,                   /* 892 */
+    PARROT_OP_encodingname_s_i,                /* 893 */
+    PARROT_OP_encodingname_s_ic,               /* 894 */
+    PARROT_OP_find_encoding_i_s,               /* 895 */
+    PARROT_OP_find_encoding_i_sc,              /* 896 */
+    PARROT_OP_trans_encoding_s_s_i,            /* 897 */
+    PARROT_OP_trans_encoding_s_sc_i,           /* 898 */
+    PARROT_OP_trans_encoding_s_s_ic,           /* 899 */
+    PARROT_OP_trans_encoding_s_sc_ic,          /* 900 */
+    PARROT_OP_is_cclass_i_i_s_i,               /* 901 */
+    PARROT_OP_is_cclass_i_ic_s_i,              /* 902 */
+    PARROT_OP_is_cclass_i_i_sc_i,              /* 903 */
+    PARROT_OP_is_cclass_i_ic_sc_i,             /* 904 */
+    PARROT_OP_is_cclass_i_i_s_ic,              /* 905 */
+    PARROT_OP_is_cclass_i_ic_s_ic,             /* 906 */
+    PARROT_OP_is_cclass_i_i_sc_ic,             /* 907 */
+    PARROT_OP_is_cclass_i_ic_sc_ic,            /* 908 */
+    PARROT_OP_find_cclass_i_i_s_i_i,           /* 909 */
+    PARROT_OP_find_cclass_i_ic_s_i_i,          /* 910 */
+    PARROT_OP_find_cclass_i_i_sc_i_i,          /* 911 */
+    PARROT_OP_find_cclass_i_ic_sc_i_i,         /* 912 */
+    PARROT_OP_find_cclass_i_i_s_ic_i,          /* 913 */
+    PARROT_OP_find_cclass_i_ic_s_ic_i,         /* 914 */
+    PARROT_OP_find_cclass_i_i_sc_ic_i,         /* 915 */
+    PARROT_OP_find_cclass_i_ic_sc_ic_i,        /* 916 */
+    PARROT_OP_find_cclass_i_i_s_i_ic,          /* 917 */
+    PARROT_OP_find_cclass_i_ic_s_i_ic,         /* 918 */
+    PARROT_OP_find_cclass_i_i_sc_i_ic,         /* 919 */
+    PARROT_OP_find_cclass_i_ic_sc_i_ic,        /* 920 */
+    PARROT_OP_find_cclass_i_i_s_ic_ic,         /* 921 */
+    PARROT_OP_find_cclass_i_ic_s_ic_ic,        /* 922 */
+    PARROT_OP_find_cclass_i_i_sc_ic_ic,        /* 923 */
+    PARROT_OP_find_cclass_i_ic_sc_ic_ic,       /* 924 */
+    PARROT_OP_find_not_cclass_i_i_s_i_i,       /* 925 */
+    PARROT_OP_find_not_cclass_i_ic_s_i_i,      /* 926 */
+    PARROT_OP_find_not_cclass_i_i_sc_i_i,      /* 927 */
+    PARROT_OP_find_not_cclass_i_ic_sc_i_i,     /* 928 */
+    PARROT_OP_find_not_cclass_i_i_s_ic_i,      /* 929 */
+    PARROT_OP_find_not_cclass_i_ic_s_ic_i,     /* 930 */
+    PARROT_OP_find_not_cclass_i_i_sc_ic_i,     /* 931 */
+    PARROT_OP_find_not_cclass_i_ic_sc_ic_i,    /* 932 */
+    PARROT_OP_find_not_cclass_i_i_s_i_ic,      /* 933 */
+    PARROT_OP_find_not_cclass_i_ic_s_i_ic,     /* 934 */
+    PARROT_OP_find_not_cclass_i_i_sc_i_ic,     /* 935 */
+    PARROT_OP_find_not_cclass_i_ic_sc_i_ic,    /* 936 */
+    PARROT_OP_find_not_cclass_i_i_s_ic_ic,     /* 937 */
+    PARROT_OP_find_not_cclass_i_ic_s_ic_ic,    /* 938 */
+    PARROT_OP_find_not_cclass_i_i_sc_ic_ic,    /* 939 */
+    PARROT_OP_find_not_cclass_i_ic_sc_ic_ic,   /* 940 */
+    PARROT_OP_escape_s_s,                      /* 941 */
+    PARROT_OP_compose_s_s,                     /* 942 */
+    PARROT_OP_compose_s_sc,                    /* 943 */
+    PARROT_OP_spawnw_i_s,                      /* 944 */
+    PARROT_OP_spawnw_i_sc,                     /* 945 */
+    PARROT_OP_spawnw_i_p,                      /* 946 */
+    PARROT_OP_err_i,                           /* 947 */
+    PARROT_OP_err_s,                           /* 948 */
+    PARROT_OP_err_s_i,                         /* 949 */
+    PARROT_OP_err_s_ic,                        /* 950 */
+    PARROT_OP_time_i,                          /* 951 */
+    PARROT_OP_time_n,                          /* 952 */
+    PARROT_OP_sleep_i,                         /* 953 */
+    PARROT_OP_sleep_ic,                        /* 954 */
+    PARROT_OP_sleep_n,                         /* 955 */
+    PARROT_OP_sleep_nc,                        /* 956 */
+    PARROT_OP_store_lex_s_p,                   /* 957 */
+    PARROT_OP_store_lex_sc_p,                  /* 958 */
+    PARROT_OP_store_dynamic_lex_s_p,           /* 959 */
+    PARROT_OP_store_dynamic_lex_sc_p,          /* 960 */
+    PARROT_OP_find_lex_p_s,                    /* 961 */
+    PARROT_OP_find_lex_p_sc,                   /* 962 */
+    PARROT_OP_find_dynamic_lex_p_s,            /* 963 */
+    PARROT_OP_find_dynamic_lex_p_sc,           /* 964 */
+    PARROT_OP_find_caller_lex_p_s,             /* 965 */
+    PARROT_OP_find_caller_lex_p_sc,            /* 966 */
+    PARROT_OP_get_namespace_p,                 /* 967 */
+    PARROT_OP_get_namespace_p_p,               /* 968 */
+    PARROT_OP_get_namespace_p_pc,              /* 969 */
+    PARROT_OP_get_hll_namespace_p,             /* 970 */
+    PARROT_OP_get_hll_namespace_p_p,           /* 971 */
+    PARROT_OP_get_hll_namespace_p_pc,          /* 972 */
+    PARROT_OP_get_root_namespace_p,            /* 973 */
+    PARROT_OP_get_root_namespace_p_p,          /* 974 */
+    PARROT_OP_get_root_namespace_p_pc,         /* 975 */
+    PARROT_OP_get_global_p_s,                  /* 976 */
+    PARROT_OP_get_global_p_sc,                 /* 977 */
+    PARROT_OP_get_global_p_p_s,                /* 978 */
+    PARROT_OP_get_global_p_pc_s,               /* 979 */
+    PARROT_OP_get_global_p_p_sc,               /* 980 */
+    PARROT_OP_get_global_p_pc_sc,              /* 981 */
+    PARROT_OP_get_hll_global_p_s,              /* 982 */
+    PARROT_OP_get_hll_global_p_sc,             /* 983 */
+    PARROT_OP_get_hll_global_p_p_s,            /* 984 */
+    PARROT_OP_get_hll_global_p_pc_s,           /* 985 */
+    PARROT_OP_get_hll_global_p_p_sc,           /* 986 */
+    PARROT_OP_get_hll_global_p_pc_sc,          /* 987 */
+    PARROT_OP_get_root_global_p_s,             /* 988 */
+    PARROT_OP_get_root_global_p_sc,            /* 989 */
+    PARROT_OP_get_root_global_p_p_s,           /* 990 */
+    PARROT_OP_get_root_global_p_pc_s,          /* 991 */
+    PARROT_OP_get_root_global_p_p_sc,          /* 992 */
+    PARROT_OP_get_root_global_p_pc_sc,         /* 993 */
+    PARROT_OP_set_global_s_p,                  /* 994 */
+    PARROT_OP_set_global_sc_p,                 /* 995 */
+    PARROT_OP_set_global_p_s_p,                /* 996 */
+    PARROT_OP_set_global_pc_s_p,               /* 997 */
+    PARROT_OP_set_global_p_sc_p,               /* 998 */
+    PARROT_OP_set_global_pc_sc_p,              /* 999 */
+    PARROT_OP_set_hll_global_s_p,              /* 1000 */
+    PARROT_OP_set_hll_global_sc_p,             /* 1001 */
+    PARROT_OP_set_hll_global_p_s_p,            /* 1002 */
+    PARROT_OP_set_hll_global_pc_s_p,           /* 1003 */
+    PARROT_OP_set_hll_global_p_sc_p,           /* 1004 */
+    PARROT_OP_set_hll_global_pc_sc_p,          /* 1005 */
+    PARROT_OP_set_root_global_s_p,             /* 1006 */
+    PARROT_OP_set_root_global_sc_p,            /* 1007 */
+    PARROT_OP_set_root_global_p_s_p,           /* 1008 */
+    PARROT_OP_set_root_global_pc_s_p,          /* 1009 */
+    PARROT_OP_set_root_global_p_sc_p,          /* 1010 */
+    PARROT_OP_set_root_global_pc_sc_p,         /* 1011 */
+    PARROT_OP_find_name_p_s,                   /* 1012 */
+    PARROT_OP_find_name_p_sc,                  /* 1013 */
+    PARROT_OP_find_sub_not_null_p_s,           /* 1014 */
+    PARROT_OP_find_sub_not_null_p_sc,          /* 1015 */
+    PARROT_OP_trap,                            /* 1016 */
+    PARROT_OP_set_label_p_ic,                  /* 1017 */
+    PARROT_OP_get_label_i_p,                   /* 1018 */
+    PARROT_OP_fetch_p_p_p_p,                   /* 1019 */
+    PARROT_OP_fetch_p_pc_p_p,                  /* 1020 */
+    PARROT_OP_fetch_p_p_pc_p,                  /* 1021 */
+    PARROT_OP_fetch_p_pc_pc_p,                 /* 1022 */
+    PARROT_OP_fetch_p_p_p_pc,                  /* 1023 */
+    PARROT_OP_fetch_p_pc_p_pc,                 /* 1024 */
+    PARROT_OP_fetch_p_p_pc_pc,                 /* 1025 */
+    PARROT_OP_fetch_p_pc_pc_pc,                /* 1026 */
+    PARROT_OP_fetch_p_p_i_p,                   /* 1027 */
+    PARROT_OP_fetch_p_pc_i_p,                  /* 1028 */
+    PARROT_OP_fetch_p_p_ic_p,                  /* 1029 */
+    PARROT_OP_fetch_p_pc_ic_p,                 /* 1030 */
+    PARROT_OP_fetch_p_p_i_pc,                  /* 1031 */
+    PARROT_OP_fetch_p_pc_i_pc,                 /* 1032 */
+    PARROT_OP_fetch_p_p_ic_pc,                 /* 1033 */
+    PARROT_OP_fetch_p_pc_ic_pc,                /* 1034 */
+    PARROT_OP_fetch_p_p_s_p,                   /* 1035 */
+    PARROT_OP_fetch_p_pc_s_p,                  /* 1036 */
+    PARROT_OP_fetch_p_p_sc_p,                  /* 1037 */
+    PARROT_OP_fetch_p_pc_sc_p,                 /* 1038 */
+    PARROT_OP_fetch_p_p_s_pc,                  /* 1039 */
+    PARROT_OP_fetch_p_pc_s_pc,                 /* 1040 */
+    PARROT_OP_fetch_p_p_sc_pc,                 /* 1041 */
+    PARROT_OP_fetch_p_pc_sc_pc,                /* 1042 */
+    PARROT_OP_vivify_p_p_p_p,                  /* 1043 */
+    PARROT_OP_vivify_p_pc_p_p,                 /* 1044 */
+    PARROT_OP_vivify_p_p_pc_p,                 /* 1045 */
+    PARROT_OP_vivify_p_pc_pc_p,                /* 1046 */
+    PARROT_OP_vivify_p_p_p_pc,                 /* 1047 */
+    PARROT_OP_vivify_p_pc_p_pc,                /* 1048 */
+    PARROT_OP_vivify_p_p_pc_pc,                /* 1049 */
+    PARROT_OP_vivify_p_pc_pc_pc,               /* 1050 */
+    PARROT_OP_vivify_p_p_i_p,                  /* 1051 */
+    PARROT_OP_vivify_p_pc_i_p,                 /* 1052 */
+    PARROT_OP_vivify_p_p_ic_p,                 /* 1053 */
+    PARROT_OP_vivify_p_pc_ic_p,                /* 1054 */
+    PARROT_OP_vivify_p_p_i_pc,                 /* 1055 */
+    PARROT_OP_vivify_p_pc_i_pc,                /* 1056 */
+    PARROT_OP_vivify_p_p_ic_pc,                /* 1057 */
+    PARROT_OP_vivify_p_pc_ic_pc,               /* 1058 */
+    PARROT_OP_vivify_p_p_s_p,                  /* 1059 */
+    PARROT_OP_vivify_p_pc_s_p,                 /* 1060 */
+    PARROT_OP_vivify_p_p_sc_p,                 /* 1061 */
+    PARROT_OP_vivify_p_pc_sc_p,                /* 1062 */
+    PARROT_OP_vivify_p_p_s_pc,                 /* 1063 */
+    PARROT_OP_vivify_p_pc_s_pc,                /* 1064 */
+    PARROT_OP_vivify_p_p_sc_pc,                /* 1065 */
+    PARROT_OP_vivify_p_pc_sc_pc,               /* 1066 */
+    PARROT_OP_new_p_s_i,                       /* 1067 */
+    PARROT_OP_new_p_sc_i,                      /* 1068 */
+    PARROT_OP_new_p_s_ic,                      /* 1069 */
+    PARROT_OP_new_p_sc_ic,                     /* 1070 */
+    PARROT_OP_new_p_p_i,                       /* 1071 */
+    PARROT_OP_new_p_pc_i,                      /* 1072 */
+    PARROT_OP_new_p_p_ic,                      /* 1073 */
+    PARROT_OP_new_p_pc_ic,                     /* 1074 */
+    PARROT_OP_root_new_p_p_i,                  /* 1075 */
+    PARROT_OP_root_new_p_pc_i,                 /* 1076 */
+    PARROT_OP_root_new_p_p_ic,                 /* 1077 */
+    PARROT_OP_root_new_p_pc_ic,                /* 1078 */
+    PARROT_OP_find_codepoint_i_s,              /* 1079 */
+    PARROT_OP_find_codepoint_i_sc,             /* 1080 */
+    PARROT_OP_finalize_p,                      /* 1081 */
+    PARROT_OP_finalize_pc                      /* 1082 */
+
+} parrot_opcode_enums;
+
+
+#endif /* PARROT_OPLIB_OPS_H_GUARD */
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ *   buffer-read-only: t
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/gsoc_threads/include/parrot/opsenum.h (from r47544, trunk/include/parrot/opsenum.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/include/parrot/opsenum.h	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/include/parrot/opsenum.h)
@@ -0,0 +1,1114 @@
+
+/* $Id$ */
+
+#ifndef PARROT_OPSENUM_H_GUARD
+#define PARROT_OPSENUM_H_GUARD
+
+
+/* ex: set ro:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from 'src/ops/core.ops' (and possibly other
+ * .ops files). by ops2c.nqp.
+ *
+ * Any changes made here will be lost!  To regenerate this file after making
+ * changes to any ops, use the bootstap-ops makefile target.
+ *
+ */
+enum OPS_ENUM {
+    enum_ops_end                           =    0,
+    enum_ops_noop                          =    1,
+    enum_ops_check_events                  =    2,
+    enum_ops_check_events__                =    3,
+    enum_ops_wrapper__                     =    4,
+    enum_ops_load_bytecode_s               =    5,
+    enum_ops_load_bytecode_sc              =    6,
+    enum_ops_load_language_s               =    7,
+    enum_ops_load_language_sc              =    8,
+    enum_ops_branch_i                      =    9,
+    enum_ops_branch_ic                     =   10,
+    enum_ops_local_branch_p_i              =   11,
+    enum_ops_local_branch_p_ic             =   12,
+    enum_ops_local_return_p                =   13,
+    enum_ops_jump_i                        =   14,
+    enum_ops_jump_ic                       =   15,
+    enum_ops_enternative                   =   16,
+    enum_ops_if_i_ic                       =   17,
+    enum_ops_if_n_ic                       =   18,
+    enum_ops_if_s_ic                       =   19,
+    enum_ops_if_p_ic                       =   20,
+    enum_ops_unless_i_ic                   =   21,
+    enum_ops_unless_n_ic                   =   22,
+    enum_ops_unless_s_ic                   =   23,
+    enum_ops_unless_p_ic                   =   24,
+    enum_ops_invokecc_p                    =   25,
+    enum_ops_invoke_p_p                    =   26,
+    enum_ops_yield                         =   27,
+    enum_ops_tailcall_p                    =   28,
+    enum_ops_returncc                      =   29,
+    enum_ops_capture_lex_p                 =   30,
+    enum_ops_newclosure_p_p                =   31,
+    enum_ops_set_args_pc                   =   32,
+    enum_ops_get_params_pc                 =   33,
+    enum_ops_set_returns_pc                =   34,
+    enum_ops_get_results_pc                =   35,
+    enum_ops_set_result_info_p             =   36,
+    enum_ops_set_result_info_pc            =   37,
+    enum_ops_result_info_p                 =   38,
+    enum_ops_set_addr_i_ic                 =   39,
+    enum_ops_set_addr_p_ic                 =   40,
+    enum_ops_set_addr_p_i                  =   41,
+    enum_ops_get_addr_i_p                  =   42,
+    enum_ops_schedule_p                    =   43,
+    enum_ops_addhandler_p                  =   44,
+    enum_ops_push_eh_ic                    =   45,
+    enum_ops_push_eh_p                     =   46,
+    enum_ops_pop_eh                        =   47,
+    enum_ops_throw_p                       =   48,
+    enum_ops_throw_p_p                     =   49,
+    enum_ops_rethrow_p                     =   50,
+    enum_ops_count_eh_i                    =   51,
+    enum_ops_die_s                         =   52,
+    enum_ops_die_sc                        =   53,
+    enum_ops_die_p                         =   54,
+    enum_ops_die_pc                        =   55,
+    enum_ops_die_i_i                       =   56,
+    enum_ops_die_ic_i                      =   57,
+    enum_ops_die_i_ic                      =   58,
+    enum_ops_die_ic_ic                     =   59,
+    enum_ops_exit_i                        =   60,
+    enum_ops_exit_ic                       =   61,
+    enum_ops_debug_i                       =   62,
+    enum_ops_debug_ic                      =   63,
+    enum_ops_bounds_i                      =   64,
+    enum_ops_bounds_ic                     =   65,
+    enum_ops_profile_i                     =   66,
+    enum_ops_profile_ic                    =   67,
+    enum_ops_trace_i                       =   68,
+    enum_ops_trace_ic                      =   69,
+    enum_ops_gc_debug_i                    =   70,
+    enum_ops_gc_debug_ic                   =   71,
+    enum_ops_interpinfo_i_i                =   72,
+    enum_ops_interpinfo_i_ic               =   73,
+    enum_ops_interpinfo_p_i                =   74,
+    enum_ops_interpinfo_p_ic               =   75,
+    enum_ops_interpinfo_s_i                =   76,
+    enum_ops_interpinfo_s_ic               =   77,
+    enum_ops_warningson_i                  =   78,
+    enum_ops_warningson_ic                 =   79,
+    enum_ops_warningsoff_i                 =   80,
+    enum_ops_warningsoff_ic                =   81,
+    enum_ops_errorson_i                    =   82,
+    enum_ops_errorson_ic                   =   83,
+    enum_ops_errorsoff_i                   =   84,
+    enum_ops_errorsoff_ic                  =   85,
+    enum_ops_runinterp_p_i                 =   86,
+    enum_ops_runinterp_p_ic                =   87,
+    enum_ops_getinterp_p                   =   88,
+    enum_ops_sweep_ic                      =   89,
+    enum_ops_collect                       =   90,
+    enum_ops_sweepoff                      =   91,
+    enum_ops_sweepon                       =   92,
+    enum_ops_collectoff                    =   93,
+    enum_ops_collecton                     =   94,
+    enum_ops_needs_destroy_p               =   95,
+    enum_ops_loadlib_p_s                   =   96,
+    enum_ops_loadlib_p_sc                  =   97,
+    enum_ops_loadlib_p_s_p                 =   98,
+    enum_ops_loadlib_p_sc_p                =   99,
+    enum_ops_loadlib_p_s_pc                =  100,
+    enum_ops_loadlib_p_sc_pc               =  101,
+    enum_ops_dlfunc_p_p_s_s                =  102,
+    enum_ops_dlfunc_p_p_sc_s               =  103,
+    enum_ops_dlfunc_p_p_s_sc               =  104,
+    enum_ops_dlfunc_p_p_sc_sc              =  105,
+    enum_ops_dlvar_p_p_s                   =  106,
+    enum_ops_dlvar_p_p_sc                  =  107,
+    enum_ops_compreg_s_p                   =  108,
+    enum_ops_compreg_sc_p                  =  109,
+    enum_ops_compreg_p_s                   =  110,
+    enum_ops_compreg_p_sc                  =  111,
+    enum_ops_new_callback_p_p_p_s          =  112,
+    enum_ops_new_callback_p_p_p_sc         =  113,
+    enum_ops_annotations_p                 =  114,
+    enum_ops_annotations_p_s               =  115,
+    enum_ops_annotations_p_sc              =  116,
+    enum_ops_band_i_i                      =  117,
+    enum_ops_band_i_ic                     =  118,
+    enum_ops_band_i_i_i                    =  119,
+    enum_ops_band_i_ic_i                   =  120,
+    enum_ops_band_i_i_ic                   =  121,
+    enum_ops_bor_i_i                       =  122,
+    enum_ops_bor_i_ic                      =  123,
+    enum_ops_bor_i_i_i                     =  124,
+    enum_ops_bor_i_ic_i                    =  125,
+    enum_ops_bor_i_i_ic                    =  126,
+    enum_ops_shl_i_i                       =  127,
+    enum_ops_shl_i_ic                      =  128,
+    enum_ops_shl_i_i_i                     =  129,
+    enum_ops_shl_i_ic_i                    =  130,
+    enum_ops_shl_i_i_ic                    =  131,
+    enum_ops_shr_i_i                       =  132,
+    enum_ops_shr_i_ic                      =  133,
+    enum_ops_shr_i_i_i                     =  134,
+    enum_ops_shr_i_ic_i                    =  135,
+    enum_ops_shr_i_i_ic                    =  136,
+    enum_ops_lsr_i_i                       =  137,
+    enum_ops_lsr_i_ic                      =  138,
+    enum_ops_lsr_i_i_i                     =  139,
+    enum_ops_lsr_i_ic_i                    =  140,
+    enum_ops_lsr_i_i_ic                    =  141,
+    enum_ops_bxor_i_i                      =  142,
+    enum_ops_bxor_i_ic                     =  143,
+    enum_ops_bxor_i_i_i                    =  144,
+    enum_ops_bxor_i_ic_i                   =  145,
+    enum_ops_bxor_i_i_ic                   =  146,
+    enum_ops_eq_i_i_ic                     =  147,
+    enum_ops_eq_ic_i_ic                    =  148,
+    enum_ops_eq_i_ic_ic                    =  149,
+    enum_ops_eq_n_n_ic                     =  150,
+    enum_ops_eq_nc_n_ic                    =  151,
+    enum_ops_eq_n_nc_ic                    =  152,
+    enum_ops_eq_s_s_ic                     =  153,
+    enum_ops_eq_sc_s_ic                    =  154,
+    enum_ops_eq_s_sc_ic                    =  155,
+    enum_ops_eq_p_p_ic                     =  156,
+    enum_ops_eq_p_i_ic                     =  157,
+    enum_ops_eq_p_ic_ic                    =  158,
+    enum_ops_eq_p_n_ic                     =  159,
+    enum_ops_eq_p_nc_ic                    =  160,
+    enum_ops_eq_p_s_ic                     =  161,
+    enum_ops_eq_p_sc_ic                    =  162,
+    enum_ops_eq_str_p_p_ic                 =  163,
+    enum_ops_eq_num_p_p_ic                 =  164,
+    enum_ops_eq_addr_s_s_ic                =  165,
+    enum_ops_eq_addr_sc_s_ic               =  166,
+    enum_ops_eq_addr_s_sc_ic               =  167,
+    enum_ops_eq_addr_sc_sc_ic              =  168,
+    enum_ops_eq_addr_p_p_ic                =  169,
+    enum_ops_ne_i_i_ic                     =  170,
+    enum_ops_ne_ic_i_ic                    =  171,
+    enum_ops_ne_i_ic_ic                    =  172,
+    enum_ops_ne_n_n_ic                     =  173,
+    enum_ops_ne_nc_n_ic                    =  174,
+    enum_ops_ne_n_nc_ic                    =  175,
+    enum_ops_ne_s_s_ic                     =  176,
+    enum_ops_ne_sc_s_ic                    =  177,
+    enum_ops_ne_s_sc_ic                    =  178,
+    enum_ops_ne_p_p_ic                     =  179,
+    enum_ops_ne_p_i_ic                     =  180,
+    enum_ops_ne_p_ic_ic                    =  181,
+    enum_ops_ne_p_n_ic                     =  182,
+    enum_ops_ne_p_nc_ic                    =  183,
+    enum_ops_ne_p_s_ic                     =  184,
+    enum_ops_ne_p_sc_ic                    =  185,
+    enum_ops_ne_str_p_p_ic                 =  186,
+    enum_ops_ne_num_p_p_ic                 =  187,
+    enum_ops_ne_addr_s_s_ic                =  188,
+    enum_ops_ne_addr_sc_s_ic               =  189,
+    enum_ops_ne_addr_s_sc_ic               =  190,
+    enum_ops_ne_addr_sc_sc_ic              =  191,
+    enum_ops_ne_addr_p_p_ic                =  192,
+    enum_ops_lt_i_i_ic                     =  193,
+    enum_ops_lt_ic_i_ic                    =  194,
+    enum_ops_lt_i_ic_ic                    =  195,
+    enum_ops_lt_n_n_ic                     =  196,
+    enum_ops_lt_nc_n_ic                    =  197,
+    enum_ops_lt_n_nc_ic                    =  198,
+    enum_ops_lt_s_s_ic                     =  199,
+    enum_ops_lt_sc_s_ic                    =  200,
+    enum_ops_lt_s_sc_ic                    =  201,
+    enum_ops_lt_p_p_ic                     =  202,
+    enum_ops_lt_p_i_ic                     =  203,
+    enum_ops_lt_p_ic_ic                    =  204,
+    enum_ops_lt_p_n_ic                     =  205,
+    enum_ops_lt_p_nc_ic                    =  206,
+    enum_ops_lt_p_s_ic                     =  207,
+    enum_ops_lt_p_sc_ic                    =  208,
+    enum_ops_lt_str_p_p_ic                 =  209,
+    enum_ops_lt_num_p_p_ic                 =  210,
+    enum_ops_le_i_i_ic                     =  211,
+    enum_ops_le_ic_i_ic                    =  212,
+    enum_ops_le_i_ic_ic                    =  213,
+    enum_ops_le_n_n_ic                     =  214,
+    enum_ops_le_nc_n_ic                    =  215,
+    enum_ops_le_n_nc_ic                    =  216,
+    enum_ops_le_s_s_ic                     =  217,
+    enum_ops_le_sc_s_ic                    =  218,
+    enum_ops_le_s_sc_ic                    =  219,
+    enum_ops_le_p_p_ic                     =  220,
+    enum_ops_le_p_i_ic                     =  221,
+    enum_ops_le_p_ic_ic                    =  222,
+    enum_ops_le_p_n_ic                     =  223,
+    enum_ops_le_p_nc_ic                    =  224,
+    enum_ops_le_p_s_ic                     =  225,
+    enum_ops_le_p_sc_ic                    =  226,
+    enum_ops_le_str_p_p_ic                 =  227,
+    enum_ops_le_num_p_p_ic                 =  228,
+    enum_ops_gt_p_p_ic                     =  229,
+    enum_ops_gt_p_i_ic                     =  230,
+    enum_ops_gt_p_ic_ic                    =  231,
+    enum_ops_gt_p_n_ic                     =  232,
+    enum_ops_gt_p_nc_ic                    =  233,
+    enum_ops_gt_p_s_ic                     =  234,
+    enum_ops_gt_p_sc_ic                    =  235,
+    enum_ops_gt_str_p_p_ic                 =  236,
+    enum_ops_gt_num_p_p_ic                 =  237,
+    enum_ops_ge_p_p_ic                     =  238,
+    enum_ops_ge_p_i_ic                     =  239,
+    enum_ops_ge_p_ic_ic                    =  240,
+    enum_ops_ge_p_n_ic                     =  241,
+    enum_ops_ge_p_nc_ic                    =  242,
+    enum_ops_ge_p_s_ic                     =  243,
+    enum_ops_ge_p_sc_ic                    =  244,
+    enum_ops_ge_str_p_p_ic                 =  245,
+    enum_ops_ge_num_p_p_ic                 =  246,
+    enum_ops_if_null_p_ic                  =  247,
+    enum_ops_if_null_s_ic                  =  248,
+    enum_ops_unless_null_p_ic              =  249,
+    enum_ops_unless_null_s_ic              =  250,
+    enum_ops_cmp_i_i_i                     =  251,
+    enum_ops_cmp_i_ic_i                    =  252,
+    enum_ops_cmp_i_i_ic                    =  253,
+    enum_ops_cmp_i_n_n                     =  254,
+    enum_ops_cmp_i_nc_n                    =  255,
+    enum_ops_cmp_i_n_nc                    =  256,
+    enum_ops_cmp_i_s_s                     =  257,
+    enum_ops_cmp_i_sc_s                    =  258,
+    enum_ops_cmp_i_s_sc                    =  259,
+    enum_ops_cmp_i_p_p                     =  260,
+    enum_ops_cmp_i_p_i                     =  261,
+    enum_ops_cmp_i_p_ic                    =  262,
+    enum_ops_cmp_i_p_n                     =  263,
+    enum_ops_cmp_i_p_nc                    =  264,
+    enum_ops_cmp_i_p_s                     =  265,
+    enum_ops_cmp_i_p_sc                    =  266,
+    enum_ops_cmp_str_i_p_p                 =  267,
+    enum_ops_cmp_num_i_p_p                 =  268,
+    enum_ops_cmp_pmc_p_p_p                 =  269,
+    enum_ops_issame_i_p_p                  =  270,
+    enum_ops_issame_i_s_s                  =  271,
+    enum_ops_issame_i_sc_s                 =  272,
+    enum_ops_issame_i_s_sc                 =  273,
+    enum_ops_issame_i_sc_sc                =  274,
+    enum_ops_isntsame_i_p_p                =  275,
+    enum_ops_isntsame_i_s_s                =  276,
+    enum_ops_isntsame_i_sc_s               =  277,
+    enum_ops_isntsame_i_s_sc               =  278,
+    enum_ops_isntsame_i_sc_sc              =  279,
+    enum_ops_istrue_i_p                    =  280,
+    enum_ops_isfalse_i_p                   =  281,
+    enum_ops_isnull_i_p                    =  282,
+    enum_ops_isnull_i_pc                   =  283,
+    enum_ops_isnull_i_s                    =  284,
+    enum_ops_isnull_i_sc                   =  285,
+    enum_ops_isgt_i_p_p                    =  286,
+    enum_ops_isge_i_p_p                    =  287,
+    enum_ops_isle_i_i_i                    =  288,
+    enum_ops_isle_i_ic_i                   =  289,
+    enum_ops_isle_i_i_ic                   =  290,
+    enum_ops_isle_i_n_n                    =  291,
+    enum_ops_isle_i_nc_n                   =  292,
+    enum_ops_isle_i_n_nc                   =  293,
+    enum_ops_isle_i_s_s                    =  294,
+    enum_ops_isle_i_sc_s                   =  295,
+    enum_ops_isle_i_s_sc                   =  296,
+    enum_ops_isle_i_p_p                    =  297,
+    enum_ops_islt_i_i_i                    =  298,
+    enum_ops_islt_i_ic_i                   =  299,
+    enum_ops_islt_i_i_ic                   =  300,
+    enum_ops_islt_i_n_n                    =  301,
+    enum_ops_islt_i_nc_n                   =  302,
+    enum_ops_islt_i_n_nc                   =  303,
+    enum_ops_islt_i_s_s                    =  304,
+    enum_ops_islt_i_sc_s                   =  305,
+    enum_ops_islt_i_s_sc                   =  306,
+    enum_ops_islt_i_p_p                    =  307,
+    enum_ops_iseq_i_i_i                    =  308,
+    enum_ops_iseq_i_ic_i                   =  309,
+    enum_ops_iseq_i_i_ic                   =  310,
+    enum_ops_iseq_i_n_n                    =  311,
+    enum_ops_iseq_i_nc_n                   =  312,
+    enum_ops_iseq_i_n_nc                   =  313,
+    enum_ops_iseq_i_s_s                    =  314,
+    enum_ops_iseq_i_sc_s                   =  315,
+    enum_ops_iseq_i_s_sc                   =  316,
+    enum_ops_iseq_i_p_p                    =  317,
+    enum_ops_isne_i_i_i                    =  318,
+    enum_ops_isne_i_ic_i                   =  319,
+    enum_ops_isne_i_i_ic                   =  320,
+    enum_ops_isne_i_n_n                    =  321,
+    enum_ops_isne_i_nc_n                   =  322,
+    enum_ops_isne_i_n_nc                   =  323,
+    enum_ops_isne_i_s_s                    =  324,
+    enum_ops_isne_i_sc_s                   =  325,
+    enum_ops_isne_i_s_sc                   =  326,
+    enum_ops_isne_i_p_p                    =  327,
+    enum_ops_and_i_i_i                     =  328,
+    enum_ops_and_i_ic_i                    =  329,
+    enum_ops_and_i_i_ic                    =  330,
+    enum_ops_and_p_p_p                     =  331,
+    enum_ops_not_i                         =  332,
+    enum_ops_not_i_i                       =  333,
+    enum_ops_not_p                         =  334,
+    enum_ops_not_p_p                       =  335,
+    enum_ops_or_i_i_i                      =  336,
+    enum_ops_or_i_ic_i                     =  337,
+    enum_ops_or_i_i_ic                     =  338,
+    enum_ops_or_p_p_p                      =  339,
+    enum_ops_xor_i_i_i                     =  340,
+    enum_ops_xor_i_ic_i                    =  341,
+    enum_ops_xor_i_i_ic                    =  342,
+    enum_ops_xor_p_p_p                     =  343,
+    enum_ops_print_i                       =  344,
+    enum_ops_print_ic                      =  345,
+    enum_ops_print_n                       =  346,
+    enum_ops_print_nc                      =  347,
+    enum_ops_print_s                       =  348,
+    enum_ops_print_sc                      =  349,
+    enum_ops_print_p                       =  350,
+    enum_ops_say_i                         =  351,
+    enum_ops_say_ic                        =  352,
+    enum_ops_say_n                         =  353,
+    enum_ops_say_nc                        =  354,
+    enum_ops_say_s                         =  355,
+    enum_ops_say_sc                        =  356,
+    enum_ops_say_p                         =  357,
+    enum_ops_print_p_i                     =  358,
+    enum_ops_print_p_ic                    =  359,
+    enum_ops_print_p_n                     =  360,
+    enum_ops_print_p_nc                    =  361,
+    enum_ops_print_p_s                     =  362,
+    enum_ops_print_p_sc                    =  363,
+    enum_ops_print_p_p                     =  364,
+    enum_ops_getstdin_p                    =  365,
+    enum_ops_getstdout_p                   =  366,
+    enum_ops_getstderr_p                   =  367,
+    enum_ops_abs_i                         =  368,
+    enum_ops_abs_n                         =  369,
+    enum_ops_abs_i_i                       =  370,
+    enum_ops_abs_n_n                       =  371,
+    enum_ops_abs_p                         =  372,
+    enum_ops_abs_p_p                       =  373,
+    enum_ops_add_i_i                       =  374,
+    enum_ops_add_i_ic                      =  375,
+    enum_ops_add_n_n                       =  376,
+    enum_ops_add_n_nc                      =  377,
+    enum_ops_add_p_p                       =  378,
+    enum_ops_add_p_i                       =  379,
+    enum_ops_add_p_ic                      =  380,
+    enum_ops_add_p_n                       =  381,
+    enum_ops_add_p_nc                      =  382,
+    enum_ops_add_i_i_i                     =  383,
+    enum_ops_add_i_ic_i                    =  384,
+    enum_ops_add_i_i_ic                    =  385,
+    enum_ops_add_n_n_n                     =  386,
+    enum_ops_add_n_nc_n                    =  387,
+    enum_ops_add_n_n_nc                    =  388,
+    enum_ops_add_p_p_p                     =  389,
+    enum_ops_add_p_p_i                     =  390,
+    enum_ops_add_p_p_ic                    =  391,
+    enum_ops_add_p_p_n                     =  392,
+    enum_ops_add_p_p_nc                    =  393,
+    enum_ops_dec_i                         =  394,
+    enum_ops_dec_n                         =  395,
+    enum_ops_dec_p                         =  396,
+    enum_ops_div_i_i                       =  397,
+    enum_ops_div_i_ic                      =  398,
+    enum_ops_div_n_n                       =  399,
+    enum_ops_div_n_nc                      =  400,
+    enum_ops_div_p_p                       =  401,
+    enum_ops_div_p_i                       =  402,
+    enum_ops_div_p_ic                      =  403,
+    enum_ops_div_p_n                       =  404,
+    enum_ops_div_p_nc                      =  405,
+    enum_ops_div_i_i_i                     =  406,
+    enum_ops_div_i_ic_i                    =  407,
+    enum_ops_div_i_i_ic                    =  408,
+    enum_ops_div_i_ic_ic                   =  409,
+    enum_ops_div_n_n_n                     =  410,
+    enum_ops_div_n_nc_n                    =  411,
+    enum_ops_div_n_n_nc                    =  412,
+    enum_ops_div_n_nc_nc                   =  413,
+    enum_ops_div_p_p_p                     =  414,
+    enum_ops_div_p_p_i                     =  415,
+    enum_ops_div_p_p_ic                    =  416,
+    enum_ops_div_p_p_n                     =  417,
+    enum_ops_div_p_p_nc                    =  418,
+    enum_ops_fdiv_i_i                      =  419,
+    enum_ops_fdiv_i_ic                     =  420,
+    enum_ops_fdiv_n_n                      =  421,
+    enum_ops_fdiv_n_nc                     =  422,
+    enum_ops_fdiv_p_p                      =  423,
+    enum_ops_fdiv_p_i                      =  424,
+    enum_ops_fdiv_p_ic                     =  425,
+    enum_ops_fdiv_p_n                      =  426,
+    enum_ops_fdiv_p_nc                     =  427,
+    enum_ops_fdiv_i_i_i                    =  428,
+    enum_ops_fdiv_i_ic_i                   =  429,
+    enum_ops_fdiv_i_i_ic                   =  430,
+    enum_ops_fdiv_n_n_n                    =  431,
+    enum_ops_fdiv_n_nc_n                   =  432,
+    enum_ops_fdiv_n_n_nc                   =  433,
+    enum_ops_fdiv_p_p_p                    =  434,
+    enum_ops_fdiv_p_p_i                    =  435,
+    enum_ops_fdiv_p_p_ic                   =  436,
+    enum_ops_fdiv_p_p_n                    =  437,
+    enum_ops_fdiv_p_p_nc                   =  438,
+    enum_ops_ceil_n                        =  439,
+    enum_ops_ceil_i_n                      =  440,
+    enum_ops_ceil_n_n                      =  441,
+    enum_ops_floor_n                       =  442,
+    enum_ops_floor_i_n                     =  443,
+    enum_ops_floor_n_n                     =  444,
+    enum_ops_inc_i                         =  445,
+    enum_ops_inc_n                         =  446,
+    enum_ops_inc_p                         =  447,
+    enum_ops_mod_i_i                       =  448,
+    enum_ops_mod_i_ic                      =  449,
+    enum_ops_mod_n_n                       =  450,
+    enum_ops_mod_n_nc                      =  451,
+    enum_ops_mod_p_p                       =  452,
+    enum_ops_mod_p_i                       =  453,
+    enum_ops_mod_p_ic                      =  454,
+    enum_ops_mod_p_n                       =  455,
+    enum_ops_mod_p_nc                      =  456,
+    enum_ops_mod_i_i_i                     =  457,
+    enum_ops_mod_i_ic_i                    =  458,
+    enum_ops_mod_i_i_ic                    =  459,
+    enum_ops_mod_n_n_n                     =  460,
+    enum_ops_mod_n_nc_n                    =  461,
+    enum_ops_mod_n_n_nc                    =  462,
+    enum_ops_mod_p_p_p                     =  463,
+    enum_ops_mod_p_p_i                     =  464,
+    enum_ops_mod_p_p_ic                    =  465,
+    enum_ops_mod_p_p_n                     =  466,
+    enum_ops_mod_p_p_nc                    =  467,
+    enum_ops_mul_i_i                       =  468,
+    enum_ops_mul_i_ic                      =  469,
+    enum_ops_mul_n_n                       =  470,
+    enum_ops_mul_n_nc                      =  471,
+    enum_ops_mul_p_p                       =  472,
+    enum_ops_mul_p_i                       =  473,
+    enum_ops_mul_p_ic                      =  474,
+    enum_ops_mul_p_n                       =  475,
+    enum_ops_mul_p_nc                      =  476,
+    enum_ops_mul_i_i_i                     =  477,
+    enum_ops_mul_i_ic_i                    =  478,
+    enum_ops_mul_i_i_ic                    =  479,
+    enum_ops_mul_n_n_n                     =  480,
+    enum_ops_mul_n_nc_n                    =  481,
+    enum_ops_mul_n_n_nc                    =  482,
+    enum_ops_mul_p_p_p                     =  483,
+    enum_ops_mul_p_p_i                     =  484,
+    enum_ops_mul_p_p_ic                    =  485,
+    enum_ops_mul_p_p_n                     =  486,
+    enum_ops_mul_p_p_nc                    =  487,
+    enum_ops_neg_i                         =  488,
+    enum_ops_neg_n                         =  489,
+    enum_ops_neg_p                         =  490,
+    enum_ops_neg_i_i                       =  491,
+    enum_ops_neg_n_n                       =  492,
+    enum_ops_neg_p_p                       =  493,
+    enum_ops_sub_i_i                       =  494,
+    enum_ops_sub_i_ic                      =  495,
+    enum_ops_sub_n_n                       =  496,
+    enum_ops_sub_n_nc                      =  497,
+    enum_ops_sub_p_p                       =  498,
+    enum_ops_sub_p_i                       =  499,
+    enum_ops_sub_p_ic                      =  500,
+    enum_ops_sub_p_n                       =  501,
+    enum_ops_sub_p_nc                      =  502,
+    enum_ops_sub_i_i_i                     =  503,
+    enum_ops_sub_i_ic_i                    =  504,
+    enum_ops_sub_i_i_ic                    =  505,
+    enum_ops_sub_n_n_n                     =  506,
+    enum_ops_sub_n_nc_n                    =  507,
+    enum_ops_sub_n_n_nc                    =  508,
+    enum_ops_sub_p_p_p                     =  509,
+    enum_ops_sub_p_p_i                     =  510,
+    enum_ops_sub_p_p_ic                    =  511,
+    enum_ops_sub_p_p_n                     =  512,
+    enum_ops_sub_p_p_nc                    =  513,
+    enum_ops_sqrt_n_n                      =  514,
+    enum_ops_callmethodcc_p_s              =  515,
+    enum_ops_callmethodcc_p_sc             =  516,
+    enum_ops_callmethodcc_p_p              =  517,
+    enum_ops_callmethod_p_s_p              =  518,
+    enum_ops_callmethod_p_sc_p             =  519,
+    enum_ops_callmethod_p_p_p              =  520,
+    enum_ops_tailcallmethod_p_s            =  521,
+    enum_ops_tailcallmethod_p_sc           =  522,
+    enum_ops_tailcallmethod_p_p            =  523,
+    enum_ops_addmethod_p_s_p               =  524,
+    enum_ops_addmethod_p_sc_p              =  525,
+    enum_ops_can_i_p_s                     =  526,
+    enum_ops_can_i_p_sc                    =  527,
+    enum_ops_does_i_p_s                    =  528,
+    enum_ops_does_i_p_sc                   =  529,
+    enum_ops_does_i_p_p                    =  530,
+    enum_ops_does_i_p_pc                   =  531,
+    enum_ops_isa_i_p_s                     =  532,
+    enum_ops_isa_i_p_sc                    =  533,
+    enum_ops_isa_i_p_p                     =  534,
+    enum_ops_isa_i_p_pc                    =  535,
+    enum_ops_newclass_p_s                  =  536,
+    enum_ops_newclass_p_sc                 =  537,
+    enum_ops_newclass_p_p                  =  538,
+    enum_ops_newclass_p_pc                 =  539,
+    enum_ops_subclass_p_p                  =  540,
+    enum_ops_subclass_p_pc                 =  541,
+    enum_ops_subclass_p_p_s                =  542,
+    enum_ops_subclass_p_pc_s               =  543,
+    enum_ops_subclass_p_p_sc               =  544,
+    enum_ops_subclass_p_pc_sc              =  545,
+    enum_ops_subclass_p_p_p                =  546,
+    enum_ops_subclass_p_pc_p               =  547,
+    enum_ops_subclass_p_p_pc               =  548,
+    enum_ops_subclass_p_pc_pc              =  549,
+    enum_ops_subclass_p_s                  =  550,
+    enum_ops_subclass_p_sc                 =  551,
+    enum_ops_subclass_p_s_s                =  552,
+    enum_ops_subclass_p_sc_s               =  553,
+    enum_ops_subclass_p_s_sc               =  554,
+    enum_ops_subclass_p_sc_sc              =  555,
+    enum_ops_subclass_p_s_p                =  556,
+    enum_ops_subclass_p_sc_p               =  557,
+    enum_ops_subclass_p_s_pc               =  558,
+    enum_ops_subclass_p_sc_pc              =  559,
+    enum_ops_get_class_p_s                 =  560,
+    enum_ops_get_class_p_sc                =  561,
+    enum_ops_get_class_p_p                 =  562,
+    enum_ops_get_class_p_pc                =  563,
+    enum_ops_class_p_p                     =  564,
+    enum_ops_addparent_p_p                 =  565,
+    enum_ops_removeparent_p_p              =  566,
+    enum_ops_addrole_p_p                   =  567,
+    enum_ops_addattribute_p_s              =  568,
+    enum_ops_addattribute_p_sc             =  569,
+    enum_ops_removeattribute_p_s           =  570,
+    enum_ops_removeattribute_p_sc          =  571,
+    enum_ops_getattribute_p_p_s            =  572,
+    enum_ops_getattribute_p_p_sc           =  573,
+    enum_ops_getattribute_p_p_p_s          =  574,
+    enum_ops_getattribute_p_p_pc_s         =  575,
+    enum_ops_getattribute_p_p_p_sc         =  576,
+    enum_ops_getattribute_p_p_pc_sc        =  577,
+    enum_ops_setattribute_p_s_p            =  578,
+    enum_ops_setattribute_p_sc_p           =  579,
+    enum_ops_setattribute_p_p_s_p          =  580,
+    enum_ops_setattribute_p_pc_s_p         =  581,
+    enum_ops_setattribute_p_p_sc_p         =  582,
+    enum_ops_setattribute_p_pc_sc_p        =  583,
+    enum_ops_inspect_p_p                   =  584,
+    enum_ops_inspect_p_pc                  =  585,
+    enum_ops_inspect_p_p_s                 =  586,
+    enum_ops_inspect_p_pc_s                =  587,
+    enum_ops_inspect_p_p_sc                =  588,
+    enum_ops_inspect_p_pc_sc               =  589,
+    enum_ops_new_p_s                       =  590,
+    enum_ops_new_p_sc                      =  591,
+    enum_ops_new_p_s_p                     =  592,
+    enum_ops_new_p_sc_p                    =  593,
+    enum_ops_new_p_s_pc                    =  594,
+    enum_ops_new_p_sc_pc                   =  595,
+    enum_ops_new_p_p                       =  596,
+    enum_ops_new_p_pc                      =  597,
+    enum_ops_new_p_p_p                     =  598,
+    enum_ops_new_p_pc_p                    =  599,
+    enum_ops_new_p_p_pc                    =  600,
+    enum_ops_new_p_pc_pc                   =  601,
+    enum_ops_root_new_p_p                  =  602,
+    enum_ops_root_new_p_pc                 =  603,
+    enum_ops_root_new_p_p_p                =  604,
+    enum_ops_root_new_p_pc_p               =  605,
+    enum_ops_root_new_p_p_pc               =  606,
+    enum_ops_root_new_p_pc_pc              =  607,
+    enum_ops_typeof_s_p                    =  608,
+    enum_ops_typeof_p_p                    =  609,
+    enum_ops_get_repr_s_p                  =  610,
+    enum_ops_find_method_p_p_s             =  611,
+    enum_ops_find_method_p_p_sc            =  612,
+    enum_ops_defined_i_p                   =  613,
+    enum_ops_defined_i_p_ki                =  614,
+    enum_ops_defined_i_p_kic               =  615,
+    enum_ops_defined_i_p_k                 =  616,
+    enum_ops_defined_i_p_kc                =  617,
+    enum_ops_exists_i_p_ki                 =  618,
+    enum_ops_exists_i_p_kic                =  619,
+    enum_ops_exists_i_p_k                  =  620,
+    enum_ops_exists_i_p_kc                 =  621,
+    enum_ops_delete_p_k                    =  622,
+    enum_ops_delete_p_kc                   =  623,
+    enum_ops_delete_p_ki                   =  624,
+    enum_ops_delete_p_kic                  =  625,
+    enum_ops_elements_i_p                  =  626,
+    enum_ops_push_p_i                      =  627,
+    enum_ops_push_p_ic                     =  628,
+    enum_ops_push_p_n                      =  629,
+    enum_ops_push_p_nc                     =  630,
+    enum_ops_push_p_s                      =  631,
+    enum_ops_push_p_sc                     =  632,
+    enum_ops_push_p_p                      =  633,
+    enum_ops_pop_i_p                       =  634,
+    enum_ops_pop_n_p                       =  635,
+    enum_ops_pop_s_p                       =  636,
+    enum_ops_pop_p_p                       =  637,
+    enum_ops_unshift_p_i                   =  638,
+    enum_ops_unshift_p_ic                  =  639,
+    enum_ops_unshift_p_n                   =  640,
+    enum_ops_unshift_p_nc                  =  641,
+    enum_ops_unshift_p_s                   =  642,
+    enum_ops_unshift_p_sc                  =  643,
+    enum_ops_unshift_p_p                   =  644,
+    enum_ops_shift_i_p                     =  645,
+    enum_ops_shift_n_p                     =  646,
+    enum_ops_shift_s_p                     =  647,
+    enum_ops_shift_p_p                     =  648,
+    enum_ops_splice_p_p_i_i                =  649,
+    enum_ops_splice_p_p_ic_i               =  650,
+    enum_ops_splice_p_p_i_ic               =  651,
+    enum_ops_splice_p_p_ic_ic              =  652,
+    enum_ops_setprop_p_s_p                 =  653,
+    enum_ops_setprop_p_sc_p                =  654,
+    enum_ops_getprop_p_s_p                 =  655,
+    enum_ops_getprop_p_sc_p                =  656,
+    enum_ops_delprop_p_s                   =  657,
+    enum_ops_delprop_p_sc                  =  658,
+    enum_ops_prophash_p_p                  =  659,
+    enum_ops_freeze_s_p                    =  660,
+    enum_ops_thaw_p_s                      =  661,
+    enum_ops_thaw_p_sc                     =  662,
+    enum_ops_add_multi_s_s_p               =  663,
+    enum_ops_add_multi_sc_s_p              =  664,
+    enum_ops_add_multi_s_sc_p              =  665,
+    enum_ops_add_multi_sc_sc_p             =  666,
+    enum_ops_find_multi_p_s_s              =  667,
+    enum_ops_find_multi_p_sc_s             =  668,
+    enum_ops_find_multi_p_s_sc             =  669,
+    enum_ops_find_multi_p_sc_sc            =  670,
+    enum_ops_register_p                    =  671,
+    enum_ops_unregister_p                  =  672,
+    enum_ops_box_p_i                       =  673,
+    enum_ops_box_p_ic                      =  674,
+    enum_ops_box_p_n                       =  675,
+    enum_ops_box_p_nc                      =  676,
+    enum_ops_box_p_s                       =  677,
+    enum_ops_box_p_sc                      =  678,
+    enum_ops_iter_p_p                      =  679,
+    enum_ops_morph_p_p                     =  680,
+    enum_ops_morph_p_pc                    =  681,
+    enum_ops_clone_s_s                     =  682,
+    enum_ops_clone_s_sc                    =  683,
+    enum_ops_set_i_i                       =  684,
+    enum_ops_set_i_ic                      =  685,
+    enum_ops_set_i_n                       =  686,
+    enum_ops_set_i_nc                      =  687,
+    enum_ops_set_i_s                       =  688,
+    enum_ops_set_i_sc                      =  689,
+    enum_ops_set_n_n                       =  690,
+    enum_ops_set_n_nc                      =  691,
+    enum_ops_set_n_i                       =  692,
+    enum_ops_set_n_ic                      =  693,
+    enum_ops_set_n_s                       =  694,
+    enum_ops_set_n_sc                      =  695,
+    enum_ops_set_n_p                       =  696,
+    enum_ops_set_s_p                       =  697,
+    enum_ops_set_s_s                       =  698,
+    enum_ops_set_s_sc                      =  699,
+    enum_ops_set_s_i                       =  700,
+    enum_ops_set_s_ic                      =  701,
+    enum_ops_set_s_n                       =  702,
+    enum_ops_set_s_nc                      =  703,
+    enum_ops_set_p_pc                      =  704,
+    enum_ops_set_p_p                       =  705,
+    enum_ops_set_p_i                       =  706,
+    enum_ops_set_p_ic                      =  707,
+    enum_ops_set_p_n                       =  708,
+    enum_ops_set_p_nc                      =  709,
+    enum_ops_set_p_s                       =  710,
+    enum_ops_set_p_sc                      =  711,
+    enum_ops_set_i_p                       =  712,
+    enum_ops_assign_p_p                    =  713,
+    enum_ops_assign_p_i                    =  714,
+    enum_ops_assign_p_ic                   =  715,
+    enum_ops_assign_p_n                    =  716,
+    enum_ops_assign_p_nc                   =  717,
+    enum_ops_assign_p_s                    =  718,
+    enum_ops_assign_p_sc                   =  719,
+    enum_ops_assign_s_s                    =  720,
+    enum_ops_assign_s_sc                   =  721,
+    enum_ops_setref_p_p                    =  722,
+    enum_ops_deref_p_p                     =  723,
+    enum_ops_set_p_ki_i                    =  724,
+    enum_ops_set_p_kic_i                   =  725,
+    enum_ops_set_p_ki_ic                   =  726,
+    enum_ops_set_p_kic_ic                  =  727,
+    enum_ops_set_p_ki_n                    =  728,
+    enum_ops_set_p_kic_n                   =  729,
+    enum_ops_set_p_ki_nc                   =  730,
+    enum_ops_set_p_kic_nc                  =  731,
+    enum_ops_set_p_ki_s                    =  732,
+    enum_ops_set_p_kic_s                   =  733,
+    enum_ops_set_p_ki_sc                   =  734,
+    enum_ops_set_p_kic_sc                  =  735,
+    enum_ops_set_p_ki_p                    =  736,
+    enum_ops_set_p_kic_p                   =  737,
+    enum_ops_set_i_p_ki                    =  738,
+    enum_ops_set_i_p_kic                   =  739,
+    enum_ops_set_n_p_ki                    =  740,
+    enum_ops_set_n_p_kic                   =  741,
+    enum_ops_set_s_p_ki                    =  742,
+    enum_ops_set_s_p_kic                   =  743,
+    enum_ops_set_p_p_ki                    =  744,
+    enum_ops_set_p_p_kic                   =  745,
+    enum_ops_set_p_k_i                     =  746,
+    enum_ops_set_p_kc_i                    =  747,
+    enum_ops_set_p_k_ic                    =  748,
+    enum_ops_set_p_kc_ic                   =  749,
+    enum_ops_set_p_k_n                     =  750,
+    enum_ops_set_p_kc_n                    =  751,
+    enum_ops_set_p_k_nc                    =  752,
+    enum_ops_set_p_kc_nc                   =  753,
+    enum_ops_set_p_k_s                     =  754,
+    enum_ops_set_p_kc_s                    =  755,
+    enum_ops_set_p_k_sc                    =  756,
+    enum_ops_set_p_kc_sc                   =  757,
+    enum_ops_set_p_k_p                     =  758,
+    enum_ops_set_p_kc_p                    =  759,
+    enum_ops_set_i_p_k                     =  760,
+    enum_ops_set_i_p_kc                    =  761,
+    enum_ops_set_n_p_k                     =  762,
+    enum_ops_set_n_p_kc                    =  763,
+    enum_ops_set_s_p_k                     =  764,
+    enum_ops_set_s_p_kc                    =  765,
+    enum_ops_set_p_p_k                     =  766,
+    enum_ops_set_p_p_kc                    =  767,
+    enum_ops_clone_p_p                     =  768,
+    enum_ops_clone_p_p_p                   =  769,
+    enum_ops_clone_p_p_pc                  =  770,
+    enum_ops_copy_p_p                      =  771,
+    enum_ops_null_s                        =  772,
+    enum_ops_null_i                        =  773,
+    enum_ops_null_p                        =  774,
+    enum_ops_null_n                        =  775,
+    enum_ops_ord_i_s                       =  776,
+    enum_ops_ord_i_sc                      =  777,
+    enum_ops_ord_i_s_i                     =  778,
+    enum_ops_ord_i_sc_i                    =  779,
+    enum_ops_ord_i_s_ic                    =  780,
+    enum_ops_ord_i_sc_ic                   =  781,
+    enum_ops_chr_s_i                       =  782,
+    enum_ops_chr_s_ic                      =  783,
+    enum_ops_chopn_s_s_i                   =  784,
+    enum_ops_chopn_s_sc_i                  =  785,
+    enum_ops_chopn_s_s_ic                  =  786,
+    enum_ops_chopn_s_sc_ic                 =  787,
+    enum_ops_concat_s_s                    =  788,
+    enum_ops_concat_s_sc                   =  789,
+    enum_ops_concat_p_p                    =  790,
+    enum_ops_concat_p_s                    =  791,
+    enum_ops_concat_p_sc                   =  792,
+    enum_ops_concat_s_s_s                  =  793,
+    enum_ops_concat_s_sc_s                 =  794,
+    enum_ops_concat_s_s_sc                 =  795,
+    enum_ops_concat_p_p_s                  =  796,
+    enum_ops_concat_p_p_sc                 =  797,
+    enum_ops_concat_p_p_p                  =  798,
+    enum_ops_repeat_s_s_i                  =  799,
+    enum_ops_repeat_s_sc_i                 =  800,
+    enum_ops_repeat_s_s_ic                 =  801,
+    enum_ops_repeat_s_sc_ic                =  802,
+    enum_ops_repeat_p_p_i                  =  803,
+    enum_ops_repeat_p_p_ic                 =  804,
+    enum_ops_repeat_p_p_p                  =  805,
+    enum_ops_repeat_p_i                    =  806,
+    enum_ops_repeat_p_ic                   =  807,
+    enum_ops_repeat_p_p                    =  808,
+    enum_ops_length_i_s                    =  809,
+    enum_ops_length_i_sc                   =  810,
+    enum_ops_bytelength_i_s                =  811,
+    enum_ops_bytelength_i_sc               =  812,
+    enum_ops_pin_s                         =  813,
+    enum_ops_unpin_s                       =  814,
+    enum_ops_substr_s_s_i                  =  815,
+    enum_ops_substr_s_sc_i                 =  816,
+    enum_ops_substr_s_s_ic                 =  817,
+    enum_ops_substr_s_sc_ic                =  818,
+    enum_ops_substr_s_s_i_i                =  819,
+    enum_ops_substr_s_sc_i_i               =  820,
+    enum_ops_substr_s_s_ic_i               =  821,
+    enum_ops_substr_s_sc_ic_i              =  822,
+    enum_ops_substr_s_s_i_ic               =  823,
+    enum_ops_substr_s_sc_i_ic              =  824,
+    enum_ops_substr_s_s_ic_ic              =  825,
+    enum_ops_substr_s_sc_ic_ic             =  826,
+    enum_ops_substr_s_p_i_i                =  827,
+    enum_ops_substr_s_p_ic_i               =  828,
+    enum_ops_substr_s_p_i_ic               =  829,
+    enum_ops_substr_s_p_ic_ic              =  830,
+    enum_ops_replace_s_s_i_i_s             =  831,
+    enum_ops_replace_s_sc_i_i_s            =  832,
+    enum_ops_replace_s_s_ic_i_s            =  833,
+    enum_ops_replace_s_sc_ic_i_s           =  834,
+    enum_ops_replace_s_s_i_ic_s            =  835,
+    enum_ops_replace_s_sc_i_ic_s           =  836,
+    enum_ops_replace_s_s_ic_ic_s           =  837,
+    enum_ops_replace_s_sc_ic_ic_s          =  838,
+    enum_ops_replace_s_s_i_i_sc            =  839,
+    enum_ops_replace_s_sc_i_i_sc           =  840,
+    enum_ops_replace_s_s_ic_i_sc           =  841,
+    enum_ops_replace_s_sc_ic_i_sc          =  842,
+    enum_ops_replace_s_s_i_ic_sc           =  843,
+    enum_ops_replace_s_sc_i_ic_sc          =  844,
+    enum_ops_replace_s_s_ic_ic_sc          =  845,
+    enum_ops_replace_s_sc_ic_ic_sc         =  846,
+    enum_ops_index_i_s_s                   =  847,
+    enum_ops_index_i_sc_s                  =  848,
+    enum_ops_index_i_s_sc                  =  849,
+    enum_ops_index_i_sc_sc                 =  850,
+    enum_ops_index_i_s_s_i                 =  851,
+    enum_ops_index_i_sc_s_i                =  852,
+    enum_ops_index_i_s_sc_i                =  853,
+    enum_ops_index_i_sc_sc_i               =  854,
+    enum_ops_index_i_s_s_ic                =  855,
+    enum_ops_index_i_sc_s_ic               =  856,
+    enum_ops_index_i_s_sc_ic               =  857,
+    enum_ops_index_i_sc_sc_ic              =  858,
+    enum_ops_sprintf_s_s_p                 =  859,
+    enum_ops_sprintf_s_sc_p                =  860,
+    enum_ops_sprintf_p_p_p                 =  861,
+    enum_ops_new_s                         =  862,
+    enum_ops_new_s_i                       =  863,
+    enum_ops_new_s_ic                      =  864,
+    enum_ops_stringinfo_i_s_i              =  865,
+    enum_ops_stringinfo_i_sc_i             =  866,
+    enum_ops_stringinfo_i_s_ic             =  867,
+    enum_ops_stringinfo_i_sc_ic            =  868,
+    enum_ops_upcase_s_s                    =  869,
+    enum_ops_upcase_s_sc                   =  870,
+    enum_ops_downcase_s_s                  =  871,
+    enum_ops_downcase_s_sc                 =  872,
+    enum_ops_titlecase_s_s                 =  873,
+    enum_ops_titlecase_s_sc                =  874,
+    enum_ops_join_s_s_p                    =  875,
+    enum_ops_join_s_sc_p                   =  876,
+    enum_ops_split_p_s_s                   =  877,
+    enum_ops_split_p_sc_s                  =  878,
+    enum_ops_split_p_s_sc                  =  879,
+    enum_ops_split_p_sc_sc                 =  880,
+    enum_ops_charset_i_s                   =  881,
+    enum_ops_charset_i_sc                  =  882,
+    enum_ops_charsetname_s_i               =  883,
+    enum_ops_charsetname_s_ic              =  884,
+    enum_ops_find_charset_i_s              =  885,
+    enum_ops_find_charset_i_sc             =  886,
+    enum_ops_trans_charset_s_s_i           =  887,
+    enum_ops_trans_charset_s_sc_i          =  888,
+    enum_ops_trans_charset_s_s_ic          =  889,
+    enum_ops_trans_charset_s_sc_ic         =  890,
+    enum_ops_encoding_i_s                  =  891,
+    enum_ops_encoding_i_sc                 =  892,
+    enum_ops_encodingname_s_i              =  893,
+    enum_ops_encodingname_s_ic             =  894,
+    enum_ops_find_encoding_i_s             =  895,
+    enum_ops_find_encoding_i_sc            =  896,
+    enum_ops_trans_encoding_s_s_i          =  897,
+    enum_ops_trans_encoding_s_sc_i         =  898,
+    enum_ops_trans_encoding_s_s_ic         =  899,
+    enum_ops_trans_encoding_s_sc_ic        =  900,
+    enum_ops_is_cclass_i_i_s_i             =  901,
+    enum_ops_is_cclass_i_ic_s_i            =  902,
+    enum_ops_is_cclass_i_i_sc_i            =  903,
+    enum_ops_is_cclass_i_ic_sc_i           =  904,
+    enum_ops_is_cclass_i_i_s_ic            =  905,
+    enum_ops_is_cclass_i_ic_s_ic           =  906,
+    enum_ops_is_cclass_i_i_sc_ic           =  907,
+    enum_ops_is_cclass_i_ic_sc_ic          =  908,
+    enum_ops_find_cclass_i_i_s_i_i         =  909,
+    enum_ops_find_cclass_i_ic_s_i_i        =  910,
+    enum_ops_find_cclass_i_i_sc_i_i        =  911,
+    enum_ops_find_cclass_i_ic_sc_i_i       =  912,
+    enum_ops_find_cclass_i_i_s_ic_i        =  913,
+    enum_ops_find_cclass_i_ic_s_ic_i       =  914,
+    enum_ops_find_cclass_i_i_sc_ic_i       =  915,
+    enum_ops_find_cclass_i_ic_sc_ic_i      =  916,
+    enum_ops_find_cclass_i_i_s_i_ic        =  917,
+    enum_ops_find_cclass_i_ic_s_i_ic       =  918,
+    enum_ops_find_cclass_i_i_sc_i_ic       =  919,
+    enum_ops_find_cclass_i_ic_sc_i_ic      =  920,
+    enum_ops_find_cclass_i_i_s_ic_ic       =  921,
+    enum_ops_find_cclass_i_ic_s_ic_ic      =  922,
+    enum_ops_find_cclass_i_i_sc_ic_ic      =  923,
+    enum_ops_find_cclass_i_ic_sc_ic_ic     =  924,
+    enum_ops_find_not_cclass_i_i_s_i_i     =  925,
+    enum_ops_find_not_cclass_i_ic_s_i_i    =  926,
+    enum_ops_find_not_cclass_i_i_sc_i_i    =  927,
+    enum_ops_find_not_cclass_i_ic_sc_i_i   =  928,
+    enum_ops_find_not_cclass_i_i_s_ic_i    =  929,
+    enum_ops_find_not_cclass_i_ic_s_ic_i   =  930,
+    enum_ops_find_not_cclass_i_i_sc_ic_i   =  931,
+    enum_ops_find_not_cclass_i_ic_sc_ic_i  =  932,
+    enum_ops_find_not_cclass_i_i_s_i_ic    =  933,
+    enum_ops_find_not_cclass_i_ic_s_i_ic   =  934,
+    enum_ops_find_not_cclass_i_i_sc_i_ic   =  935,
+    enum_ops_find_not_cclass_i_ic_sc_i_ic  =  936,
+    enum_ops_find_not_cclass_i_i_s_ic_ic   =  937,
+    enum_ops_find_not_cclass_i_ic_s_ic_ic  =  938,
+    enum_ops_find_not_cclass_i_i_sc_ic_ic  =  939,
+    enum_ops_find_not_cclass_i_ic_sc_ic_ic =  940,
+    enum_ops_escape_s_s                    =  941,
+    enum_ops_compose_s_s                   =  942,
+    enum_ops_compose_s_sc                  =  943,
+    enum_ops_spawnw_i_s                    =  944,
+    enum_ops_spawnw_i_sc                   =  945,
+    enum_ops_spawnw_i_p                    =  946,
+    enum_ops_err_i                         =  947,
+    enum_ops_err_s                         =  948,
+    enum_ops_err_s_i                       =  949,
+    enum_ops_err_s_ic                      =  950,
+    enum_ops_time_i                        =  951,
+    enum_ops_time_n                        =  952,
+    enum_ops_sleep_i                       =  953,
+    enum_ops_sleep_ic                      =  954,
+    enum_ops_sleep_n                       =  955,
+    enum_ops_sleep_nc                      =  956,
+    enum_ops_store_lex_s_p                 =  957,
+    enum_ops_store_lex_sc_p                =  958,
+    enum_ops_store_dynamic_lex_s_p         =  959,
+    enum_ops_store_dynamic_lex_sc_p        =  960,
+    enum_ops_find_lex_p_s                  =  961,
+    enum_ops_find_lex_p_sc                 =  962,
+    enum_ops_find_dynamic_lex_p_s          =  963,
+    enum_ops_find_dynamic_lex_p_sc         =  964,
+    enum_ops_find_caller_lex_p_s           =  965,
+    enum_ops_find_caller_lex_p_sc          =  966,
+    enum_ops_get_namespace_p               =  967,
+    enum_ops_get_namespace_p_p             =  968,
+    enum_ops_get_namespace_p_pc            =  969,
+    enum_ops_get_hll_namespace_p           =  970,
+    enum_ops_get_hll_namespace_p_p         =  971,
+    enum_ops_get_hll_namespace_p_pc        =  972,
+    enum_ops_get_root_namespace_p          =  973,
+    enum_ops_get_root_namespace_p_p        =  974,
+    enum_ops_get_root_namespace_p_pc       =  975,
+    enum_ops_get_global_p_s                =  976,
+    enum_ops_get_global_p_sc               =  977,
+    enum_ops_get_global_p_p_s              =  978,
+    enum_ops_get_global_p_pc_s             =  979,
+    enum_ops_get_global_p_p_sc             =  980,
+    enum_ops_get_global_p_pc_sc            =  981,
+    enum_ops_get_hll_global_p_s            =  982,
+    enum_ops_get_hll_global_p_sc           =  983,
+    enum_ops_get_hll_global_p_p_s          =  984,
+    enum_ops_get_hll_global_p_pc_s         =  985,
+    enum_ops_get_hll_global_p_p_sc         =  986,
+    enum_ops_get_hll_global_p_pc_sc        =  987,
+    enum_ops_get_root_global_p_s           =  988,
+    enum_ops_get_root_global_p_sc          =  989,
+    enum_ops_get_root_global_p_p_s         =  990,
+    enum_ops_get_root_global_p_pc_s        =  991,
+    enum_ops_get_root_global_p_p_sc        =  992,
+    enum_ops_get_root_global_p_pc_sc       =  993,
+    enum_ops_set_global_s_p                =  994,
+    enum_ops_set_global_sc_p               =  995,
+    enum_ops_set_global_p_s_p              =  996,
+    enum_ops_set_global_pc_s_p             =  997,
+    enum_ops_set_global_p_sc_p             =  998,
+    enum_ops_set_global_pc_sc_p            =  999,
+    enum_ops_set_hll_global_s_p            = 1000,
+    enum_ops_set_hll_global_sc_p           = 1001,
+    enum_ops_set_hll_global_p_s_p          = 1002,
+    enum_ops_set_hll_global_pc_s_p         = 1003,
+    enum_ops_set_hll_global_p_sc_p         = 1004,
+    enum_ops_set_hll_global_pc_sc_p        = 1005,
+    enum_ops_set_root_global_s_p           = 1006,
+    enum_ops_set_root_global_sc_p          = 1007,
+    enum_ops_set_root_global_p_s_p         = 1008,
+    enum_ops_set_root_global_pc_s_p        = 1009,
+    enum_ops_set_root_global_p_sc_p        = 1010,
+    enum_ops_set_root_global_pc_sc_p       = 1011,
+    enum_ops_find_name_p_s                 = 1012,
+    enum_ops_find_name_p_sc                = 1013,
+    enum_ops_find_sub_not_null_p_s         = 1014,
+    enum_ops_find_sub_not_null_p_sc        = 1015,
+    enum_ops_trap                          = 1016,
+    enum_ops_set_label_p_ic                = 1017,
+    enum_ops_get_label_i_p                 = 1018,
+    enum_ops_fetch_p_p_p_p                 = 1019,
+    enum_ops_fetch_p_pc_p_p                = 1020,
+    enum_ops_fetch_p_p_pc_p                = 1021,
+    enum_ops_fetch_p_pc_pc_p               = 1022,
+    enum_ops_fetch_p_p_p_pc                = 1023,
+    enum_ops_fetch_p_pc_p_pc               = 1024,
+    enum_ops_fetch_p_p_pc_pc               = 1025,
+    enum_ops_fetch_p_pc_pc_pc              = 1026,
+    enum_ops_fetch_p_p_i_p                 = 1027,
+    enum_ops_fetch_p_pc_i_p                = 1028,
+    enum_ops_fetch_p_p_ic_p                = 1029,
+    enum_ops_fetch_p_pc_ic_p               = 1030,
+    enum_ops_fetch_p_p_i_pc                = 1031,
+    enum_ops_fetch_p_pc_i_pc               = 1032,
+    enum_ops_fetch_p_p_ic_pc               = 1033,
+    enum_ops_fetch_p_pc_ic_pc              = 1034,
+    enum_ops_fetch_p_p_s_p                 = 1035,
+    enum_ops_fetch_p_pc_s_p                = 1036,
+    enum_ops_fetch_p_p_sc_p                = 1037,
+    enum_ops_fetch_p_pc_sc_p               = 1038,
+    enum_ops_fetch_p_p_s_pc                = 1039,
+    enum_ops_fetch_p_pc_s_pc               = 1040,
+    enum_ops_fetch_p_p_sc_pc               = 1041,
+    enum_ops_fetch_p_pc_sc_pc              = 1042,
+    enum_ops_vivify_p_p_p_p                = 1043,
+    enum_ops_vivify_p_pc_p_p               = 1044,
+    enum_ops_vivify_p_p_pc_p               = 1045,
+    enum_ops_vivify_p_pc_pc_p              = 1046,
+    enum_ops_vivify_p_p_p_pc               = 1047,
+    enum_ops_vivify_p_pc_p_pc              = 1048,
+    enum_ops_vivify_p_p_pc_pc              = 1049,
+    enum_ops_vivify_p_pc_pc_pc             = 1050,
+    enum_ops_vivify_p_p_i_p                = 1051,
+    enum_ops_vivify_p_pc_i_p               = 1052,
+    enum_ops_vivify_p_p_ic_p               = 1053,
+    enum_ops_vivify_p_pc_ic_p              = 1054,
+    enum_ops_vivify_p_p_i_pc               = 1055,
+    enum_ops_vivify_p_pc_i_pc              = 1056,
+    enum_ops_vivify_p_p_ic_pc              = 1057,
+    enum_ops_vivify_p_pc_ic_pc             = 1058,
+    enum_ops_vivify_p_p_s_p                = 1059,
+    enum_ops_vivify_p_pc_s_p               = 1060,
+    enum_ops_vivify_p_p_sc_p               = 1061,
+    enum_ops_vivify_p_pc_sc_p              = 1062,
+    enum_ops_vivify_p_p_s_pc               = 1063,
+    enum_ops_vivify_p_pc_s_pc              = 1064,
+    enum_ops_vivify_p_p_sc_pc              = 1065,
+    enum_ops_vivify_p_pc_sc_pc             = 1066,
+    enum_ops_new_p_s_i                     = 1067,
+    enum_ops_new_p_sc_i                    = 1068,
+    enum_ops_new_p_s_ic                    = 1069,
+    enum_ops_new_p_sc_ic                   = 1070,
+    enum_ops_new_p_p_i                     = 1071,
+    enum_ops_new_p_pc_i                    = 1072,
+    enum_ops_new_p_p_ic                    = 1073,
+    enum_ops_new_p_pc_ic                   = 1074,
+    enum_ops_root_new_p_p_i                = 1075,
+    enum_ops_root_new_p_pc_i               = 1076,
+    enum_ops_root_new_p_p_ic               = 1077,
+    enum_ops_root_new_p_pc_ic              = 1078,
+    enum_ops_find_codepoint_i_s            = 1079,
+    enum_ops_find_codepoint_i_sc           = 1080,
+    enum_ops_finalize_p                    = 1081,
+    enum_ops_finalize_pc                   = 1082,
+};
+
+
+#endif /* PARROT_OPSENUM_H_GUARD */
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ *   buffer-read-only: t
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/gsoc_threads/include/parrot/packfile.h
==============================================================================
--- branches/gsoc_threads/include/parrot/packfile.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/packfile.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -222,7 +222,6 @@
 
 typedef enum {
     enum_fixup_none,
-    enum_fixup_label,
     enum_fixup_sub
 } enum_fixup_t;
 
@@ -1096,7 +1095,8 @@
 size_t PF_size_string(ARGIN(const STRING *s))
         __attribute__nonnull__(1);
 
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
+PARROT_WARN_UNUSED_RESULT
 size_t PF_size_strlen(const UINTVAL len);
 
 PARROT_WARN_UNUSED_RESULT

Modified: branches/gsoc_threads/include/parrot/platform_interface.h
==============================================================================
--- branches/gsoc_threads/include/parrot/platform_interface.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/platform_interface.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -57,8 +57,14 @@
 void Parrot_usleep(unsigned int microseconds);
 INTVAL Parrot_intval_time(void);
 FLOATVAL Parrot_floatval_time(void);
+
+PARROT_EXPORT
 struct tm * Parrot_gmtime_r(const time_t *, struct tm *);
+
+PARROT_EXPORT
 struct tm * Parrot_localtime_r(const time_t *, struct tm *);
+
+PARROT_EXPORT
 char* Parrot_asctime_r(const struct tm*, char *);
 
 /*

Modified: branches/gsoc_threads/include/parrot/pmc.h
==============================================================================
--- branches/gsoc_threads/include/parrot/pmc.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/pmc.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -53,6 +53,7 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_HOT
 INTVAL Parrot_pmc_is_null(SHIM_INTERP, ARGIN_NULLOK(const PMC *pmc));
@@ -84,6 +85,7 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 PMC * Parrot_pmc_new_constant_noinit(PARROT_INTERP, INTVAL base_type)
         __attribute__nonnull__(1);
 
@@ -243,6 +245,9 @@
 #define pmc_type                Parrot_pmc_get_type_str
 #define pmc_type_p              Parrot_pmc_get_type
 
+#define PMC_IS_TYPE(p, t) ((p)->vtable->base_type == enum_class_ ## t)
+#define PMC_IS_TYPE_ENUM(p, e) ((p)->vtable->base_type == (e))
+
 #endif /* PARROT_PMC_H_GUARD */
 
 /*

Modified: branches/gsoc_threads/include/parrot/runcore_trace.h
==============================================================================
--- branches/gsoc_threads/include/parrot/runcore_trace.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/runcore_trace.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -18,10 +18,6 @@
 /* HEADERIZER BEGIN: src/runcore/trace.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-Interp * debugger_or_interp(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
 int trace_key_dump(PARROT_INTERP, ARGIN(PMC *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -44,8 +40,6 @@
 void trace_pmc_dump(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc))
         __attribute__nonnull__(1);
 
-#define ASSERT_ARGS_debugger_or_interp __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_trace_key_dump __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(key))

Modified: branches/gsoc_threads/include/parrot/string_funcs.h
==============================================================================
--- branches/gsoc_threads/include/parrot/string_funcs.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/string_funcs.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -235,6 +235,7 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_str_length(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
 
@@ -390,7 +391,8 @@
 STRING * Parrot_str_unescape_string(PARROT_INTERP,
     ARGIN(const STRING *src),
     ARGIN(const CHARSET *charset),
-    ARGIN(const ENCODING *encoding))
+    ARGIN(const ENCODING *encoding),
+    UINTVAL flags)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)

Modified: branches/gsoc_threads/include/parrot/warnings.h
==============================================================================
--- branches/gsoc_threads/include/parrot/warnings.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/include/parrot/warnings.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -61,12 +61,20 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+void Parrot_warn_deprecated(PARROT_INTERP, ARGIN(const char *message))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 void print_pbc_location(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_warn __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(message))
+#define ASSERT_ARGS_Parrot_warn_deprecated __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(message))
 #define ASSERT_ARGS_print_pbc_location __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */

Modified: branches/gsoc_threads/lib/Parrot/Configure.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Configure.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Configure.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -21,6 +21,7 @@
 
     $conf->add_steps(@steps);
     $conf->runsteps;
+    $conf->debug(@messages);
 
 =head1 DESCRIPTION
 
@@ -554,6 +555,22 @@
     return;
 }
 
+=item * C<debug()>
+
+When C<--verbose> is requested, or when a particular configuration step is
+specified in C<--verbose-step>, this method prints its arguments as a string
+on STDOUT.
+
+=cut
+
+sub debug {
+    my ($conf, @messages) = @_;
+    if ($conf->options->get('verbose')) {
+        print join('' => @messages);
+    }
+    return 1;
+}
+
 =back
 
 =head1 CREDITS

Modified: branches/gsoc_threads/lib/Parrot/Configure/Options/Conf.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Configure/Options/Conf.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Configure/Options/Conf.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -44,8 +44,6 @@
                         which upon failure cause Configure.pl to halt
    --silent             Don't be verbose, interactive or fatal
    --nomanicheck        Don't check the MANIFEST
-   --languages="list of languages"
-                        Specify a list of languages to process
 
    --ask                Have Configure ask for commonly-changed info
    --test=configure     Run tests of configuration tools before configuring

Modified: branches/gsoc_threads/lib/Parrot/Configure/Options/Conf/Shared.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Configure/Options/Conf/Shared.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Configure/Options/Conf/Shared.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -39,7 +39,6 @@
     intval
     jitcapable
     buildframes
-    languages
     ld
     ldflags
     lex

Modified: branches/gsoc_threads/lib/Parrot/Configure/Options/Reconf.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Configure/Options/Reconf.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Configure/Options/Reconf.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 package Parrot::Configure::Options::Reconf;
@@ -16,7 +16,6 @@
     ask
     debugging
     help
-    languages
     lex
     maintainer
     step
@@ -57,8 +56,6 @@
    --step=(gen::makefiles)
                         Execute a single configure step
    --target=(Makefile)  Regenerate a specific makefile
-   --languages="list of languages"
-                        Specify a list of languages to process
 
    --ask                Have Configure ask for commonly-changed info
 

Modified: branches/gsoc_threads/lib/Parrot/Configure/Options/Test/Prepare.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Configure/Options/Test/Prepare.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Configure/Options/Test/Prepare.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -161,8 +161,6 @@
 
     t/postconfigure/
     t/tools/pmc2cutils/
-    t/tools/ops2cutils/
-    t/tools/ops2pm/
     t/pharness/
 
 =back

Modified: branches/gsoc_threads/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Configure/Step/List.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Configure/Step/List.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -48,7 +48,6 @@
     auto::socklen_t
     auto::neg_0
     auto::env
-    auto::extra_nci_thunks
     auto::thread
     auto::gmp
     auto::readline

Modified: branches/gsoc_threads/lib/Parrot/Distribution.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Distribution.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Distribution.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -430,7 +430,11 @@
             compilers/pirc/macro/macroparser.h
             include/parrot/config.h
             include/parrot/has_header.h
+            include/parrot/oplib/core_ops.h
+            include/parrot/oplib/ops.h
+            include/parrot/opsenum.h
             src/gc/malloc.c
+            src/ops/core_ops.c
             } unless @exemptions;
 
         my $path = -f $file ? $file : $file->path;

Modified: branches/gsoc_threads/lib/Parrot/Docs/Section/Ops.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Docs/Section/Ops.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Docs/Section/Ops.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -53,12 +53,6 @@
         'Opcodes',
         'ops.html',
         '',
-        $self->new_group(
-            'Tools',
-            '',
-            $self->new_item( '', 'tools/build/ops2c.pl' ),
-            $self->new_item( '', 'tools/build/ops2pm.pl' ),
-        ),
         $self->new_group( 'Opcode Libraries', '', @core_ops ),
         $self->new_group( 'Dynamic Opcode Libraries', '', @dynamic_ops ),
     );

Modified: branches/gsoc_threads/lib/Parrot/Docs/Section/Tools.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Docs/Section/Tools.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Docs/Section/Tools.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -53,8 +53,6 @@
             '',
             $self->new_item( '', 'docs/configuration.pod' ),
             $self->new_item( '', 'tools/build/c2str.pl' ),
-            $self->new_item( '', 'tools/build/ops2c.pl' ),
-            $self->new_item( '', 'tools/build/ops2pm.pl' ),
             $self->new_item( '', 'tools/build/parrot_config_c.pl' ),
             $self->new_item( '', 'tools/build/pmc2c.pl' ),
             $self->new_item( '', 'tools/dev/install_files.pl' ),

Modified: branches/gsoc_threads/lib/Parrot/Harness/DefaultTests.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Harness/DefaultTests.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Harness/DefaultTests.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -65,8 +65,6 @@
     t/pmc/*.t
     t/oo/*.t
     t/native_pbc/*.t
-    t/dynpmc/*.t
-    t/dynoplibs/*.t
 );
 
 # core tests are run unless --runcore-tests is present.  Typically
@@ -85,7 +83,9 @@
     t/compilers/pge/p5regex/*.t
     t/compilers/pge/perl6regex/*.t
     t/compilers/tge/*.t
+    t/compilers/opsc/*.t
     t/compilers/data_json/*.t
+    t/dynoplibs/*.t
     t/library/*.t
     t/tools/*.t
     t/profiling/*.t

Modified: branches/gsoc_threads/lib/Parrot/Headerizer.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Headerizer.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Headerizer.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -247,8 +247,10 @@
     }
     if ( $return_type =~ /\*/ ) {
         if ( !$macros{PARROT_CAN_RETURN_NULL} && !$macros{PARROT_CANNOT_RETURN_NULL} ) {
-            $self->squawk( $file, $name,
-                'Returns a pointer, but no PARROT_CAN(NOT)_RETURN_NULL macro found.' );
+            if ( $name !~ /^yy/ ) { # Don't complain about lexer-created functions
+                $self->squawk( $file, $name,
+                    'Returns a pointer, but no PARROT_CAN(NOT)_RETURN_NULL macro found.' );
+            }
         }
         elsif ( $macros{PARROT_CAN_RETURN_NULL} && $macros{PARROT_CANNOT_RETURN_NULL} ) {
             $self->squawk( $file, $name,

Deleted: branches/gsoc_threads/lib/Parrot/Op.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Op.pm	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,423 +0,0 @@
-#! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-Parrot::Op - Parrot Operation
-
-=head1 SYNOPSIS
-
-  use Parrot::Op;
-
-=head1 DESCRIPTION
-
-C<Parrot::Op> represents a Parrot operation (op, for short), as read
-from an ops file via C<Parrot::OpsFile>, or perhaps even generated by
-some other means. It is the Perl equivalent of the C<op_info_t> C
-C<struct> defined in F<include/parrot/op.h>.
-
-=head2 Op Type
-
-Ops are either I<auto> or I<manual>. Manual ops are responsible for
-having explicit next-op C<RETURN()> statements, while auto ops can count
-on an automatically generated next-op to be appended to the op body.
-
-Note that F<tools/build/ops2c.pl> supplies either 'inline' or 'function'
-as the op's type, depending on whether the C<inline> keyword is present
-in the op definition. This has the effect of causing all ops to be
-considered manual.
-
-=head2 Op Arguments
-
-Note that argument 0 is considered to be the op itself, with arguments
-1..9 being the arguments passed to the op.
-
-Op argument direction and type are represented by short one or two letter
-descriptors.
-
-Op Direction:
-
-    i   The argument is incoming
-    o   The argument is outgoing
-    io  The argument is both incoming and outgoing
-
-Op Type:
-
-    i   The argument is an integer register index.
-    n   The argument is a number register index.
-    p   The argument is a PMC register index.
-    s   The argument is a string register index.
-    ic  The argument is an integer constant (in-line).
-    nc  The argument is a number constant index.
-    pc  The argument is a PMC constant index.
-    sc  The argument is a string constant index.
-    kc  The argument is a key constant index.
-    ki  The argument is a key integer register index.
-    kic  The argument is a key integer constant (in-line).
-
-=head2 Class Methods
-
-=over 4
-
-=cut
-
-package Parrot::Op;
-
-use strict;
-use warnings;
-
-=item C<new($code, $type, $name, $args, $argdirs, $labels, $flags)>
-
-Allocates a new bodyless op. A body must be provided eventually for the
-op to be usable.
-
-C<$code> is the integer identifier for the op.
-
-C<$type> is the type of op (see the note on op types above).
-
-C<$name> is the name of the op.
-
-C<$args> is a reference to an array of argument type descriptors.
-
-C<$argdirs> is a reference to an array of argument direction
-descriptors. Element I<x> is the direction of argument C<< $args->[I<x>]
->>.
-
-C<$labels> is a reference to an array of boolean values indicating
-whether each argument direction was prefixed by 'C<label>'.
-
-C<$flags> is a hash reference containing zero or more I<hints> or
-I<directives>.
-
-=cut
-
-sub new {
-    my $class = shift;
-    my ( $code, $type, $name, $args, $argdirs, $labels, $flags ) = @_;
-
-    my $self = {
-        CODE    => $code,
-        TYPE    => $type,
-        NAME    => $name,
-        ARGS    => [@$args],
-        ARGDIRS => [@$argdirs],
-        LABELS  => [@$labels],
-        FLAGS   => $flags,
-        BODY    => '',
-        JUMP    => 0,
-    };
-
-    return bless $self, $class;
-}
-
-=back
-
-=head2 Instance Methods
-
-=over 4
-
-=item C<code()>
-
-Returns the op code.
-
-=cut
-
-sub code {
-    my $self = shift;
-
-    return $self->{CODE};
-}
-
-=item C<type()>
-
-The type of the op, either 'inline' or 'function'.
-
-=cut
-
-sub type {
-    my $self = shift;
-
-    return $self->{TYPE};
-}
-
-=item C<name()>
-
-The (short or root) name of the op.
-
-=cut
-
-sub name {
-    my $self = shift;
-
-    return $self->{NAME};
-}
-
-=item C<full_name()>
-
-For argumentless ops, it's the same as C<name()>. For ops with
-arguments, an underscore followed by underscore-separated argument types
-are appended to the name.
-
-=cut
-
-sub full_name {
-    my $self      = shift;
-    my $name      = $self->name;
-    my @arg_types = $self->arg_types;
-
-    $name .= "_" . join( "_", @arg_types ) if @arg_types;
-
-    return $name;
-}
-
-=item C<func_name()>
-
-The same as C<full_name()>, but with 'C<Parrot_>' prefixed.
-
-=cut
-
-sub func_name {
-    my ( $self, $trans ) = @_;
-
-    return $trans->prefix . $self->full_name;
-}
-
-=item C<arg_types()>
-
-Returns the types of the op's arguments.
-
-=cut
-
-sub arg_types {
-    my $self = shift;
-
-    return @{ $self->{ARGS} };
-}
-
-=item C<arg_type($index)>
-
-Returns the type of the op's argument at C<$index>.
-
-=cut
-
-sub arg_type {
-    my $self = shift;
-
-    return $self->{ARGS}[shift];
-}
-
-=item C<arg_dirs()>
-
-Returns the directions of the op's arguments.
-
-=cut
-
-sub arg_dirs {
-    my $self = shift;
-
-    return @{ $self->{ARGDIRS} };
-}
-
-=item C<labels()>
-
-Returns the labels.
-
-=cut
-
-sub labels {
-    my $self = shift;
-
-    return @{ $self->{LABELS} };
-}
-
-=item C<flags(@flags)>
-
-=item C<flags()>
-
-Sets/gets the op's flags.  This returns a hash reference, whose keys are any
-flags (passed as ":flag") specified for the op.
-
-=cut
-
-sub flags {
-    my $self = shift;
-
-    if (@_) {
-        $self->{FLAGS} = shift;
-    }
-
-    return $self->{FLAGS};
-}
-
-=item C<arg_dir($index)>
-
-Returns the direction of the op's argument at C<$index>.
-
-=cut
-
-sub arg_dir {
-    my $self = shift;
-
-    return $self->{ARGDIRS}[shift];
-}
-
-=item C<body($body)>
-
-=item C<body()>
-
-Sets/gets the op's code body.
-
-=cut
-
-sub body {
-    my $self = shift;
-
-    if (@_) {
-        $self->{BODY} = shift;
-    }
-
-    return $self->{BODY};
-}
-
-=item C<jump($jump)>
-
-=item C<jump()>
-
-Sets/gets a string containing one or more C<op_jump_t> values joined with
-C<|> (see F<include/parrot/op.h>). This indicates if and how an op
-may jump.
-
-=cut
-
-sub jump {
-    my $self = shift;
-
-    if (@_) {
-        $self->{JUMP} = shift;
-    }
-
-    return $self->{JUMP};
-}
-
-# Called from rewrite_body() to perform the actual substitutions.
-sub _substitute {
-    my $self           = shift;
-    local $_           = shift;
-    my $trans          = shift;
-    my $preamble_only  = shift;
-
-    my $rewrote_access =
-        s/{{\@([^{]*?)}}/   $trans->access_arg($self->arg_type($1 - 1), $1, $self); /me;
-
-    die "Argument access not allowed in preamble\n"
-        if $preamble_only && $rewrote_access;
-
-    s/{{=0,=([^{]*?)}}/   $trans->restart_address($1) . "; {{=0}}"; /me;
-    s/{{=0,\+=([^{]*?)}}/ $trans->restart_offset($1)  . "; {{=0}}"; /me;
-
-    s/{{\+=([^{]*?)}}/    $trans->goto_offset($1);  /me;
-    s/{{=([^*][^{]*?)}}/  $trans->goto_address($1); /me;
-
-    s/{{\^(\d+)}}/        $1                        /me;
-    s/{{\^\+([^{]*?)}}/   $trans->expr_offset($1);  /me;
-    s/{{\^([^{]*?)}}/     $trans->expr_address($1); /me;
-
-    return $_;
-}
-
-=item C<rewrite_body($body, $trans, [$preamble])>
-
-Performs the various macro substitutions using the specified transform,
-correctly handling nested substitions, and repeating over the whole string
-until no more substitutions can be made.
-
-C<VTABLE_> macros are enforced by converting C<<< I<< x >>->vtable->I<<
-method >> >>> to C<VTABLE_I<method>>.
-
-=cut
-
-sub rewrite_body {
-    my ( $self, $body, $trans, $preamble_only ) = @_;
-
-    while (1) {
-        my $new_body = $self->_substitute( $body, $trans, !!$preamble_only );
-
-        last if $body eq $new_body;
-
-        $body = $new_body;
-    }
-
-    return $body;
-}
-
-=item C<source($trans)>
-
-Returns the L<C<body()>> of the op with substitutions made by
-C<$trans> (a subclass of C<Parrot::OpTrans>).
-
-=cut
-
-sub source {
-    my ( $self, $trans ) = @_;
-
-    my $flags = $self->flags;
-
-    if (exists($$flags{pic})
-        && !( ref($trans) eq 'Parrot::OpTrans::CGP' || ref($trans) eq 'Parrot::OpTrans::CSwitch' ) )
-    {
-        return qq{PANIC(interp, "How did you do that");\n};
-    }
-
-    my $prelude = $trans->can( 'add_body_prelude' )
-                ? $trans->add_body_prelude()
-                : '';
-
-    return $self->rewrite_body( $prelude . $self->body, $trans );
-}
-
-=item C<size()>
-
-Returns the op's number of arguments. Note that this also includes
-the op itself as one argument.
-
-=cut
-
-sub size {
-    my $self = shift;
-
-    return scalar( $self->arg_types + 1 );
-}
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item C<Parrot::OpsFile>
-
-=item C<Parrot::OpTrans>
-
-=item F<tools/build/ops2c.pl>
-
-=item F<tools/build/ops2pm.pl>
-
-=item F<tools/build/pbc2c.pl>
-
-=back
-
-=head1 HISTORY
-
-Author: Gregor N. Purdy E<lt>gregor at focusresearch.comE<gt>
-
-=cut
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/gsoc_threads/lib/Parrot/OpTrans.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/OpTrans.pm	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,225 +0,0 @@
-# Copyright (C) 2002-2007, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-Parrot::OpTrans - Transform Ops to C Code
-
-=head1 DESCRIPTION
-
-C<Parrot::OpTrans> is the abstract superclass for the Parrot op to C
-transforms. Each transform contains various bits of information needed
-to generate the C code, and creates a different type of run loop. The
-methods defined here supply various default values and behaviour common
-to all transforms.
-
-The subclass hierarchy is as follows:
-
-    OpTrans
-       |
-       |
-       C
-
-=head2 Class Methods
-
-=over 4
-
-=cut
-
-package Parrot::OpTrans;
-
-use strict;
-use warnings;
-
-=item C<new()>
-
-Returns a new instance.
-
-=cut
-
-sub new {
-    return bless {}, shift;
-}
-
-=back
-
-=head2 Instance Methods
-
-=over 4
-
-=item C<prefix()>
-
-Returns the default 'C<Parrot_>' prefix.
-
-Used by C<Parrot::Op>'s C<func_name()> to individuate op function names.
-
-=cut
-
-sub prefix {
-    return 'Parrot_';
-}
-
-=item C<suffix()>
-
-Implemented in subclasses to return a suffix with which to individuate
-variable names. This default implementation returns an empty string.
-
-=cut
-
-sub suffix {
-    return '';
-}
-
-=item C<core_type()>
-
-Implemented in subclasses to return the type of core created by the
-transform. This default implementation raises an exception indicating
-that the core type is missing. See the C<Parrot_Run_core_t> C<enum> in
-F<include/parrot/interpreter.h> for a list of the core types.
-
-=cut
-
-sub core_type {
-    my $self = shift;
-
-    die ref($self) . " doesn't have core_type()";
-}
-
-=item C<run_core_func_decl($base)>
-
-Optionally implemented in subclasses to return the C code for the run
-core function declaration. C<$base> is the name of the main ops file minus
-the .ops extension.
-
-=item C<ops_addr_decl($base_suffix)>
-
-Optionally implemented in subclasses to return the C code for the ops
-address declaration. C<$base_suffix> is the name of the main ops file minus
-the .ops extension with C<suffix()> and an underscore appended.
-
-=item C<run_core_func_decl($base)>
-
-Optionally implemented in subclasses to return the C code for the run
-core function declaration. C<$base> is the same as for
-C<run_core_func_decl()>.
-
-=item C<run_core_func_start()>
-
-Implemented in subclasses, if C<run_core_func_decl()> is implemented, to
-return the C code prior to the run core function.
-
-=item C<run_core_after_addr_table($base_suffix)>
-
-Optionally implemented in subclasses to return the run core C code for
-section after the address table. C<$base_suffix> is the same as for
-C<ops_addr_decl()>.
-
-=item C<run_core_finish($base)>
-
-Implemented in subclasses to return the C code following the run core
-function. C<$base> is the same as for C<run_core_func_decl()>.
-
-=item C<init_func_init1($base)>
-
-Optionally implemented in subclasses to return the C code for the core's
-init function. C<$base> is the same as for C<run_core_func_decl()>.
-
-=item C<init_set_dispatch($base_suffix)>
-
-Optionally implemented in subclasses to return the C code for
-initializing the dispatch mechanism within the core's init function.
-C<$base_suffix> is the same as for C<ops_addr_decl()>.
-
-=back
-
-B<Macro Substitutions>
-
-The following methods are called by C<Parrot::OpFile> to perform ops
-file macro substitutions.
-
-=over
-
-=item C<access_arg($type, $value, $op)>
-
-Implemented in subclasses to return the C code for the specified op
-argument type and value. C<$op> is an instance of C<Parrot::Op>.
-
-=item C<gen_goto($where)>
-
-The various C<goto_I<X>> methods below call this method with the return
-value of an C<expr_I<X>> method (implemented in subclass).
-
-=cut
-
-sub gen_goto {
-    my ( $self, $where_str ) = @_;
-
-    return "return $where_str";
-}
-
-=item C<restart_address($address)>
-
-Implemented in subclasses to return the C code for C<restart
-ADDRESS($address)>.
-
-=item C<restart_offset($offset)>
-
-Implemented in subclasses to return the C code for C<restart
-OFFSET($offset)>.
-
-=item C<goto_address($address)>
-
-Transforms the C<goto ADDRESS($address)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub goto_address {
-    my $self = shift;
-
-    return $self->gen_goto( $self->expr_address(@_) );
-}
-
-=item C<goto_offset($offset)>
-
-Transforms the C<goto OFFSET($offset)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub goto_offset {
-    my $self = shift;
-
-    return $self->gen_goto( $self->expr_offset(@_) );
-}
-
-=item C<expr_offset($offset)>
-
-Implemented in subclasses to return the C code for C<OFFSET($offset)>.
-Called by C<goto_offset()>.
-
-=item C<expr_address($address)>
-
-Implemented in subclasses to return the C code for C<ADDRESS($address)>.
-Called by C<goto_address()>.
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item C<Parrot::OpTrans::C>
-
-=back
-
-=cut
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/gsoc_threads/lib/Parrot/Ops2pm.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Ops2pm.pm	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,537 +0,0 @@
-# Copyright (C) 2007, Parrot Foundation.
-# $Id$
-package Parrot::Ops2pm;
-use strict;
-use warnings;
-use Cwd;
-use Data::Dumper ();
-use File::Path ();
-use File::Spec;
-use lib qw ( lib );
-use base qw( Parrot::Ops2pm::Base );
-use Parrot::OpsFile;
-
-=head1 NAME
-
-Parrot::Ops2pm - Methods holding functionality for F<tools/build/ops2pm.pl>.
-
-=head1 SYNOPSIS
-
-    use Parrot::Ops2pm;
-
-    $self = Parrot::Ops2pm->new( {
-        argv            => [ @ARGV ],
-        nolines         => $nolines_flag,
-        moddir          => "lib/Parrot/OpLib",
-        module          => "core.pm",
-        inc_dir         => "include/parrot/oplib",
-        inc_f           => "ops.h",
-        script          => "tools/build/ops2pm.pl",
-    } );
-
-    $self->prepare_ops();
-    $self->load_op_map_files();
-    $self->sort_ops();
-    $self->prepare_real_ops();
-    $self->print_module();
-    $self->print_h();
-    exit 0;
-
-=cut
-
-=head1 DESCRIPTION
-
-Parrot::Ops2pm provides methods called by F<tools/build/ops2pm.pl>, a
-program which is called at the very beginning of the Parrot F<make> process.
-The program's function is to build two files:
-
-=over 4
-
-=item * F<lib/Parrot/OpLib/core.pm>
-
-=item * F<include/parrot/oplib/ops.h>
-
-=back
-
-The functionality once (pre-April 2007) found in F<tools/build/ops2pm.pl> has
-been extracted into this package's methods in order to support
-component-focused testing and future refactoring.
-
-=head1 METHODS
-
-=head2 C<new()>
-
-Inherited from Parrot::Ops2pm::Base and documented in
-F<lib/Parrot/Ops2pm/Base.pm>.
-
-=head2 C<prepare_ops()>
-
-Inherited from Parrot::Ops2pm::Base and documented in
-F<lib/Parrot/Ops2pm/Base.pm>.
-
-=head2 C<load_op_map_files()>
-
-=over 4
-
-=item * Purpose
-
-When F<tools/build/ops2pm.pl> is called by F<make>, this method
-checks the number of ops strictly against F<src/ops/ops.num> and
-F<src/ops/ops.skip>.
-
-=item * Arguments
-
-None.  (Implicitly requires that the C<argv> and C<script> keys
-have been provided to the constructor.)
-
-=item * Return Value and Side Effects
-
-Returns true value upon success.  Internally, sets these
-values in these elements in the object's data structure:
-
-=over 4
-
-=item * C<max_op_num>
-
-Scalar holding number of highest non-experimental op.  Example:
-
-    'max_op_num' => 1246,
-
-=item * C<optable>
-
-Reference to hash holding mapping of opcode names ops to their numbers.
-Example:
-
-  'optable' => {
-    'pow_p_p_i' => 650,
-    'say_s' => 463,
-    'lsr_p_p_i' => 207,
-    'lt_s_sc_ic' => 289,
-    # ...
-    'debug_init' => 429,
-    'iseq_i_nc_n' => 397,
-    'eq_addr_sc_s_ic' => 254
-  },
-
-Per F<src/ops/ops.num>, this mapping exists so that we can nail down
-the op numbers for the core opcodes in a particular version of the
-bytecode and provide backward-compatibility for bytecode.
-
-=item * C<skiptable>
-
-Reference to a 'seen-hash' of skipped opcodes.
-
-  'skiptable' => {
-    'bor_i_ic_ic' => 1,
-    'xor_i_ic_ic' => 1,
-    'tanh_n_nc' => 1,
-    # ...
-  },
-
-As F<src/ops/ops.skip> states, these are "... opcodes that could be listed in
-F<[src/ops/]ops.num> but aren't ever to be generated or implemented because
-they are useless and/or silly."
-
-=back
-
-=back
-
-=cut
-
-sub load_op_map_files {
-    my $self      = shift;
-    my $num_file  = $self->{num_file};
-    my $skip_file = $self->{skip_file};
-
-    my ( $op, $name, $number, $prev );
-
-    $self->{max_op_num} ||= 0;
-
-    open $op, '<', $num_file
-        or die "Can't open $num_file: $!";
-    $prev = -1;
-    while (<$op>) {
-        chomp;
-        s/#.*$//;
-        s/\s*$//;
-        s/^\s*//;
-        next unless $_;
-        ( $name, $number ) = split( /\s+/, $_ );
-        if ( $prev + 1 != $number ) {
-            die "hole in ops.num before #$number";
-        }
-        if ( exists $self->{optable}{$name} ) {
-            die "duplicate opcode $name and $number";
-        }
-        $prev = $number;
-        $self->{optable}{$name} = $number;
-        if ( $number > $self->{max_op_num} ) {
-            $self->{max_op_num} = $number;
-        }
-    }
-    undef $op;
-
-    open $op, '<', $skip_file
-        or die "Can't open $skip_file: $!";
-    while (<$op>) {
-        chomp;
-        s/#.*$//;
-        s/\s*$//;
-        s/^\s*//;
-        next unless $_;
-        ($name) = split( /\s+/, $_ );
-        if ( exists $self->{optable}{$name} ) {
-            die "skipped opcode is also in $num_file:$.";
-        }
-        $self->{skiptable}{$name} = 1;
-    }
-    undef $op;
-    return 1;
-}
-
-=head2 C<sort_ops()>
-
-=over 4
-
-=item * Purpose
-
-Internal manipulation of the Parrot::Ops2pm object: sorting by number of the
-list of op codes found in the object's C<{ops}-E<gt>{OPS}> element.
-
-=item * Arguments
-
-None.
-
-=item * Return Value and Side Effects
-
-No return value.  Internally, re-sets the C<ops> key of the object's data
-structure.
-
-=item * Comment
-
-It is at this point that warnings about experimental opcodes will be
-emitted if you are working in a checkout from the Parrot repository.  Example:
-
-    trap                      1247       experimental, not in ops.num
-
-=back
-
-=cut
-
-sub sort_ops {
-    my $self = shift;
-    for my $el ( @{ $self->{ops}{OPS} } ) {
-        if ( exists $self->{optable}{ $el->full_name } ) {
-            $el->{CODE} = $self->{optable}{ $el->full_name };
-        }
-        elsif ( exists $self->{skiptable}{ $el->full_name } ) {
-            $el->{CODE} = -1;
-        }
-        elsif ( $el->{experimental} ) {
-            my $n = $self->{optable}{ $el->full_name } = ++$self->{max_op_num};
-            warn sprintf(
-                "%-25s %-10s experimental, not in ops.num\n",
-                $el->full_name, $n
-            ) if -e "DEVELOPING";
-            $el->{CODE} = $n;
-        }
-        else {
-            die sprintf(
-                "%-25s %-10s FATAL: not in ops.num nor ops.skip\n",
-                $el->full_name, ""
-            ) if -e "DEVELOPING";
-            $el->{CODE} = -1;
-        }
-    }
-    @{ $self->{ops}{OPS} } =
-        sort { $a->{CODE} <=> $b->{CODE} } ( @{ $self->{ops}{OPS} } );
-}
-
-=head2 C<prepare_real_ops()>
-
-=over 4
-
-=item * Purpose
-
-Final stage of preparation of ops.
-
-=item * Arguments
-
-None.  (Same implicit requirements for the constructor as
-C<load_op_map_files()> above.)
-
-=item * Return Value and Side Effects
-
-No return value.  Internally, adds the C<real_ops> key of the object's
-data structure.  Its value is a Parrot::OpsFile object.
-
-=back
-
-=cut
-
-sub prepare_real_ops {
-    my $self = shift;
-
-    my $real_ops = Parrot::OpsFile->new( [], $self->{nolines} );
-    $real_ops->{PREAMBLE} = $self->{ops}{PREAMBLE};
-    $real_ops->version( $self->{ops}->version );
-
-    # verify opcode numbers
-    my $seq = 0;
-    for my $el ( @{ $self->{ops}{OPS} } ) {
-        next if $el->{CODE} < 0;    # skip
-        my $opname = $el->full_name;
-        my $n      = $self->{optable}{$opname};    # former global
-        if ( $n != $el->{CODE} ) {
-            die "op $opname: number mismatch: ops.num $n vs. core.ops $el->{CODE}";
-        }
-        if ( $seq != $el->{CODE} ) {
-            die "op $opname: sequence mismatch: ops.num $seq vs. core.ops $el->{CODE}";
-        }
-        push @{ $real_ops->{OPS} }, $el;
-        ++$seq;
-    }
-    $self->{real_ops} = $real_ops;
-}
-
-=head2 C<print_module()>
-
-=over 4
-
-=item * Purpose
-
-Uses information in the object's data structure -- principally
-the C<real_ops> element -- to create F<lib/Parrot/OpLib/core.pm>.
-
-=item * Arguments
-
-None.  (Implicitly requires that the constructor have the
-following keys defined:  C<argv>, C<script>, C<moddir> and C<module>.)
-
-=item * Return Value
-
-Returns true value upon success.
-
-=item * Comment
-
-=back
-
-=cut
-
-sub print_module {
-    my $self    = shift;
-    my $cwd     = cwd();
-    my $fulldir = File::Spec->catdir( $cwd, $self->{moddir} );
-    if ( !-d $fulldir ) {
-        if ( !File::Path::mkpath( [ $fulldir ], 0, 0755 ) ) {
-            -d $fulldir
-                or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
-        }
-    }
-    my $fullpath = File::Spec->catfile( ($fulldir), $self->{module} );
-    open my $MODULE, '>', $fullpath
-        or die "$self->{script}: Could not open module file '$fullpath' for writing: $!!\n";
-
-    my $version = $self->{real_ops}->version();
-    ( my $pod = <<"END_POD") =~ s/^    //osmg;
-    =head1 NAME
-
-    Parrot::OpLib::core - Parrot Op Info
-
-    =head1 DESCRIPTION
-
-    This is an autogenerated file, created by F<$self->{script}>.
-
-    It contains Parrot version info, a preamble for inclusion in C code,
-    and an array of C<Parrot::Op> instances representing the Parrot ops.
-
-    =cut
-END_POD
-
-    my $preamble = <<END_C;
-#! perl -w
-#
-# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
-#
-# This file is generated automatically from '$self->{file}'.
-# Any changes made here will be lost!
-#
-
-$pod
-
-use strict;
-
-package Parrot::OpLib::core;
-
-use vars qw(\$VERSION \$ops \$preamble);
-
-\$VERSION = "$version";
-
-END_C
-
-    print {$MODULE} $preamble;
-    print {$MODULE} Data::Dumper->Dump( [ $self->{real_ops}->preamble, [ $self->{real_ops}->ops ] ],
-        [qw($preamble $ops)] );
-
-    print {$MODULE} <<END_C;
-
-1;
-END_C
-
-    close $MODULE or die;
-
-    return 1;
-}
-
-=head2 C<print_h()>
-
-=over 4
-
-=item * Purpose
-
-Uses information in the object's data structure -- principally
-the C<real_ops> key -- to create F<include/parrot/oplib/ops.h>.
-
-=item * Arguments
-
-None.  (Implicitly requires that the constructor have the
-following keys defined:  C<argv>, C<script>, C<inc_dir> and C<inc_f>.)
-
-=item * Return Value
-
-Returns true value upon success.
-
-=item * Comment
-
-=back
-
-=cut
-
-sub print_h {
-    my $self    = shift;
-    my $cwd     = cwd();
-    my $fulldir = File::Spec->catdir( $cwd, $self->{inc_dir} );
-    if ( !-d $fulldir ) {
-        if ( !File::Path::mkpath( [ $fulldir ], 0, 0755 ) ) {
-            -d $fulldir
-                or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
-        }
-    }
-
-    my $fullpath = File::Spec->catfile( ($fulldir), $self->{inc_f} );
-    open my $OUT, '>', $fullpath
-        or die "$self->{script}: Could not open module file '$fullpath' for writing: $!!\n";
-
-    print $OUT <<END_C;
-/* ex: set ro:
- * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
- *
- * This file is generated automatically from '$self->{file}'
- * by $self->{script}.
- *
- * Any changes made here will be lost!
- */
-
-#ifndef PARROT_OPS_H_GUARD
-#define PARROT_OPS_H_GUARD
-
-typedef enum {
-END_C
-
-    my @OPS = @{ $self->{real_ops}->{OPS} };
-    for my $el (@OPS) {
-        my $opname = $el->full_name;
-        my $n      = $el->{CODE};
-        my $comma  = $n < @OPS - 1 ? "," : "";
-        $opname = "PARROT_OP_$opname$comma";
-
-        printf $OUT "    %-30s\t/* %4d */\n", $opname, $n;
-    }
-
-    print $OUT <<END_C;
-} parrot_opcode_enums;
-
-#endif /* PARROT_OPS_H_GUARD */
-
-END_C
-
-    # append the C code coda
-    print $OUT <<END_C;
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
-END_C
-    close $OUT;
-    return 1;
-}
-
-=head1 NOTE ON TESTING
-
-A suite of test files to accompany this package is found in
-F<t/tools/ops2pm>.  This suite has been developed to maximize its
-coverage of the code of Parrot::Ops2pm (as measured by Perl module
-Devel::Cover).  Should you wish to refactor this package, it is recommended
-that you do so in a B<test-driven> manner:
-
-=over 4
-
-=item 1
-
-Write the specification for any additions or modifications to
-Parrot::Ops2pm' interface.
-
-=item 2
-
-Write tests that reflect any such modifications.
-
-=item 3
-
-Write the additional or modified code that reflects the new specification.
-
-=item 4
-
-Test the new code and debug.  The tests in the suite should be run B<after>
-Parrot's F<Configure.pl> has run but B<before> F<make> has run.  Example:
-
-    $> perl Configure.pl
-    $> prove -v t/tools/ops2pm/*.t
-    $> make
-
-=item 5
-
-Use Devel::Cover to measure the extent to which the existing and new tests
-cover the existing and revised code.
-
-=item 6
-
-Refactor and retest to ensure high test coverage.
-
-=back
-
-This package's methods are called by F<tools/build/ops2pm.pl>, which in turn
-is invoked by F<make> in the Parrot build process.  Successful execution of
-F<make> proves that the functionality in this package achieved its overall
-objective but does not necessarily invoke many of the individual code
-statements in the package.  That is the rationale for the component-focused
-testing provided by the test suite.
-
-=head1 AUTHOR
-
-See F<tools/build/ops2pm.pl> for a list of the Parrot hackers who, over a
-period of several years, developed the functionality now found in the methods
-of Parrot::Ops2pm.  Jim Keenan extracted that functionality and placed
-it in this package's methods.
-
-=cut
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/gsoc_threads/lib/Parrot/OpsFile.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/OpsFile.pm	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,750 +0,0 @@
-#! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-Parrot::OpsFile - Ops To C Code Generation
-
-=head1 SYNOPSIS
-
-  use Parrot::OpsFile;
-
-=head1 DESCRIPTION
-
-C<Parrot::OpsFile> takes one or more files of op functions and
-creates real C code for them.
-
-This class is used by F<tools/build/ops2c.pl>,
-F<tools/build/ops2pm.pl> and F<tools/build/pbc2c.pl>.
-
-=head2 Op Functions
-
-For ops that have trivial bodies (such as just a call to some other
-function and a C<return> statement), opcode functions are in the format:
-
-    inline op opname (args) :flags {
-        ... body of function ...
-    }
-
-Note that currently the C<inline> op type is ignored.
-
-Alternately, for opcode functions that have more internal complexity the
-format is:
-
-    op opname (args) :flags {
-        ... body of function ...
-    }
-
-There may be more than one C<return>.
-
-In both cases the closing brace B<must> be on its own line.
-
-When specifying multiple flags, each flag gets its own prefixing colon.
-
-=head2 Op Arguments
-
-Op arguments are a comma-separated list of direction and type pairs.
-
-Argument direction is one of:
-
-    in            the argument passes a value into the op
-    out           the argument passes a value out of the op
-    inout         the argument passes a value into and out of the op
-    inconst       the argument passes a constant value into the op
-    invar         the argument passes a variable value into the op
-
-Argument direction is used to determine the life times of symbols and
-their related register allocations. When an argument is passed into an
-op a register is read from, when it's passed out of an op a register is
-written to.
-
-Argument type is one of:
-
-    INT       the argument is an integer
-    NUM       the argument is an numeric
-    STR       the argument is an string
-    PMC       the argument is an PMC
-    KEY       the argument is an aggregate PMC key
-    INTKEY    the argument is an aggregate PMC integer key
-    LABEL     the argument is an integer branch offset or address
-
-The size of the return offset is determined from the op function's
-signature.
-
-=head2 Op Flags
-
-The flags are of two types:
-
-=over 4
-
-=item 1 class
-
-The classification of ops is intended to facilitate the selection of
-suitable ops for a Parrot safe mode.
-
-=item 2 behavior
-
-The presence (or absence) of certain flags will change how the op behaves. For
-example, the lack of the C<flow> flag will cause the op to be implicitly
-terminated with C<goto NEXT()>. (See next section).
-
-The :deprecated flag will generate a diagnostic to standard error at
-runtime when a deprecated opcode is invoked and
-C<PARROT_WARNINGS_DEPRECATED_FLAG> has been set.
-
-=back
-
-=head2 Op Body (Macro Substitutions)
-
-In the following macro descriptions, C<PC> and C<PC'> are the current
-and next position within the Parrot code.
-
-=over 4
-
-=item C<goto OFFSET(X)>
-
-Transforms to C<PC' = PC + X>. This is used for branches.
-
-=item C<goto NEXT()>
-
-Transforms to C<PC' = PC + S>, where C<S> is the size of an op.
-
-=item C<goto ADDRESS(X)>
-
-Transforms to C<PC' = X>. This is used for absolute jumps.
-
-=item C<expr OFFSET(X)>
-
-Transforms to C<PC + X>. This is used to give a relative address.
-
-=item C<expr NEXT()>
-
-Transforms to C<PC + S>, the position of the next op.
-
-=item C<expr ADDRESS(X)>
-
-Transforms to C<X>, an absolute address.
-
-=item C<restart OFFSET(X)>
-
-Transforms to C<PC' = 0> and restarts at C<PC + X>.
-
-=item C<restart NEXT()>
-
-Transforms to C<PC' = 0> and restarts at C<PC + S>.
-
-=item C<$n>
-
-Transforms to the op function's nth argument. C<$0> is the opcode itself.
-
-=back
-
-Note that, for ease of parsing, if the argument to one of the above
-notations in a ops file contains parentheses, then double the enclosing
-parentheses and add a space around the argument, like so:
-
-    goto OFFSET(( (void*)interp->happy_place ))
-
-=head2 Class Methods
-
-=over 4
-
-=cut
-
-package Parrot::OpsFile;
-
-use strict;
-use warnings;
-
-use base qw( Exporter );
-
-use Parrot::Op;
-use Parrot::Config;
-
-our %op_body;
-our @EXPORT = qw( %op_body );
-
-# private sub  _trim()
-#
-# Trim leading and trailing spaces.
-
-sub _trim {
-    my $value = shift;
-
-    $value =~ s/^\s+//;
-    $value =~ s/\s+$//;
-
-    return $value;
-}
-
-=item C<new(@files)>
-
-Returns a new instance initialized by calling C<read_ops()> on each of
-the specified op files.
-
-=cut
-
-sub new {
-    my ( $class, $files, $nolines ) = @_;
-
-    my $self = bless { PREAMBLE => '' }, $class;
-
-    $self->read_ops( $_, $nolines ) for @{$files};
-
-    # FILE holds a space separated list of opsfile name
-    if ( $self->{FILE} ) {
-        $self->{FILE} =~ s/, $//;
-        $self->{FILE} =~ s/, $//;
-    }
-
-    return $self;
-}
-
-=back
-
-=head2 Instance Methods
-
-=over 4
-
-=item C<read_ops($file,$nolines)>
-
-Reads in the specified .ops file, gathering information about the ops.
-
-=cut
-
-sub read_ops {
-    my ( $self, $file, $nolines ) = @_;
-
-    my $ops_file = "src/" . $file;
-
-    die "Parrot::OpFunc::init(): No file specified!\n" unless defined $file;
-
-    $self->{FILE} .= $file . ', ';
-
-    my $orig = $file;
-
-    open my $OPS, '<', $file or die "Can't open $file, $!/$^E";
-
-    $self->version( $PConfig{VERSION} );
-
-    if ( !( $file =~ s/\.ops$/.c/ ) ) {
-        $file .= ".c";
-    }
-
-    #
-    # Read through the file, creating and storing Parrot::Op objects:
-    #
-
-    my $count = 0;
-    my ( $name, $footer );
-    my $type;
-    my $body;
-    my $short_name;
-    my $args;
-    my @args;
-    my @argdirs;
-    my $seen_pod;
-    my $seen_op;
-    my $in_preamble;
-    my $line;
-    my $flags;
-    my @labels;
-
-    while (<$OPS>) {
-        $seen_pod    = 1 if m|^=|;
-        $in_preamble = 1 if s|^BEGIN_OPS_PREAMBLE||;
-
-        unless ( $seen_op or m|^(inline\s+)?op\s+| ) {
-
-            if (m|^END_OPS_PREAMBLE|) {
-                $_ = '';
-                $in_preamble = 0;
-            }
-            elsif ($in_preamble) {
-                $self->{PREAMBLE} .= $_;
-            }
-
-            next;
-        }
-
-        die "No 'VERSION = ...;' line found before beginning of ops in file '$orig'!\n"
-            unless defined $self->version;
-
-        #
-        # Handle start-of-op:
-        #
-        # We create a new Parrot::Op instance based on the type, name and args.
-        # We query the Parrot::Op for the op size, etc., which we use later.
-        #
-        # Either of these two forms work:
-        #
-        #   inline op  name (args) {
-        #   op         name (args) {
-        #
-        # The args are a comma-separated list of items from this table of argument
-        # types (even if no formal args are specified, there will be a single 'o'
-        # entry):
-        #
-        #   op   The opcode
-        #
-        #   i    Integer register index
-        #   n    Number register index
-        #   p    PMC register index
-        #   s    String register index
-        #
-        #   ic   Integer constant (in-line)
-        #   nc   Number constant index
-        #   pc   PMC constant index
-        #   sc   String constant index
-        #   kc   Key constant index
-        #   kic  Integer Key constant index (in-line)
-        #
-
-        my $op_sig_RE = qr/
-            ^
-            (inline\s+)?  # optional keywords
-            op
-            \s+
-            ([a-zA-Z]\w*) # op name
-            \s*
-            \((.*)\)      # argument signature
-            \s*
-            ((?: \:\w+\s*)*)         # :flags
-            \s*
-            {
-            $
-        /x;
-
-        if ($_ =~ $op_sig_RE) {
-            if ($seen_op) {
-                die "$ops_file [$.]: Cannot define an op within an op definition!\n";
-            }
-
-            $type       = defined($1) ? 'inline' : 'function';
-            $short_name = $2;
-            $args       = _trim( lc $3 );
-            $flags      = $4 ? _trim( lc $4 ) : "";
-            @args       = split( /\s*,\s*/, $args );
-            @argdirs    = ();
-            @labels     = ();
-            $body       = '';
-            $seen_op    = 1;
-            $line       = $. + 1;
-
-            $flags = { map { $_ => undef } (split(/[ :]+/, $flags)) };
-
-            my @temp;
-
-            for my $arg (@args) {
-                my ( $use, $type ) =
-                    $arg =~ m/^(in|out|inout|inconst|invar)
-                    \s+
-                    (INT|NUM|STR|PMC|KEY|INTKEY|LABEL)$/ix;
-
-                die "Unrecognized arg format '$arg' in '$_'!"
-                    unless defined($use) and defined($type);
-
-                # remember it's a label, then turn it to an int
-                if ( $type =~ /^LABEL$/i ) {
-                    $type = 'i';
-                    push @labels, 1;
-                }
-                else {
-                    push @labels, 0;
-                }
-
-                if ( $type =~ /^INTKEY$/i ) {
-                    $type = 'ki';
-                }
-                else {
-                    $type = lc substr( $type, 0, 1 );
-                }
-
-                if ( $use eq 'in' ) {
-                    push @temp,    "$type|${type}c";
-                    push @argdirs, 'i';
-                }
-                elsif ( $use eq 'invar' ) {
-                    push @temp,    $type;
-                    push @argdirs, 'i';
-                }
-                elsif ( $use eq 'inconst' ) {
-                    push @temp,    "${type}c";
-                    push @argdirs, 'i';
-                }
-                elsif ( $use eq 'inout' ) {
-                    push @temp,    $type;
-                    push @argdirs, 'io';
-                }
-                else {
-                    push @temp,    $type;
-                    push @argdirs, 'o';
-                }
-            }
-
-            @args = @temp;
-
-            next;
-        }
-
-        #
-        # Handle end-of-op:
-        #
-        # We stash the accumulated body of source code in the Parrot::Op, push the
-        # Parrot::Op onto our op array, and forget the op so we can start the next
-        # one.
-        #
-
-        if (/^}\s*$/) {
-            $count += $self->make_op(
-                $count, $type, $short_name, $body,  \@args, \@argdirs,
-                $line,  $orig, \@labels,    $flags, $nolines
-            );
-
-            $seen_op = 0;
-
-            next;
-        }
-
-        #
-        # Accumulate the code into the op's body:
-        #
-
-        if ($seen_op) {
-            $body .= $_;
-        }
-        else {
-            die "Parrot::OpsFile: Unrecognized line: '$_'!\n";
-        }
-    }
-
-    if ($seen_op) {
-        die "Parrot::OpsFile: File ended with incomplete op definition!\n";
-    }
-
-    close $OPS or die "Could not close ops file '$file' ($!)!";
-
-    return;
-}
-
-# Extends a string containing an or expression "0" .. "A" .. "A|B" etc.
-sub or_flag {
-    my ( $flag, $value ) = @_;
-
-    if ( $$flag eq '0' ) {
-        $$flag = $value;
-    }
-    else {
-        $$flag .= "|$value";
-    }
-}
-
-=item C<make_op($code,
-$type, $short_name, $body, $args, $argdirs, $line, $file, $labels, $flags, $nolines)>
-
-Returns a new C<Parrot::Op> instance for the specified arguments.
-
-=cut
-
-sub make_op {
-    my (
-        $self,    $code, $type, $short_name, $body,  $args,
-        $argdirs, $line, $file, $labels,     $flags, $nolines
-    ) = @_;
-    my $counter  = 0;
-    my $branch   = 0;
-    my $pop      = 0;
-
-    if (exists($$flags{deprecated})) {
-        $body = <<"END_CODE" . $body;
-INTVAL unused = PARROT_WARNINGS_test(interp,PARROT_WARNINGS_DEPRECATED_FLAG) &&
-  fprintf(stderr,"Warning: instruction '$short_name' is deprecated\\n");
-END_CODE
-}
-    unless (exists($$flags{flow})) {
-        $body .= "\ngoto NEXT();";
-    }
-
-    foreach my $variant ( expand_args(@$args) ) {
-        my (@fixedargs) = split( /,/, $variant );
-        my $op =
-            Parrot::Op->new( $code++, $type, $short_name, [@fixedargs], [@$argdirs], [@$labels],
-            $flags );
-        my $op_size = $op->size;
-        my $jumps   = "0";
-
-        #
-        # Macro substitutions:
-        #
-        # We convert the following notations:
-        #
-        #   .ops file          Op body  Meaning       Comment
-        #   -----------------  -------  ------------  ----------------------------------
-        #   goto OFFSET(X)     {{+=X}}  PC' = PC + X  Used for branches
-        #   goto NEXT()        {{+=S}}  PC' = PC + S  Where S is op size
-        #   goto ADDRESS(X)    {{=X}}   PC' = X       Used for absolute jumps
-        #   expr OFFSET(X)     {{^+X}}  PC + X        Relative address
-        #   expr NEXT()        {{^+S}}  PC + S        Where S is op size
-        #   expr ADDRESS(X)    {{^X}}   X             Absolute address
-        #
-        #   restart OFFSET(X)  {{=0,+=X}}   PC' = 0   Restarts at PC + X
-        #   restart NEXT()     {{=0,+=S}}   PC' = 0   Restarts at PC + S
-        #
-        #   $X                 {{@X}}   Argument X    $0 is opcode, $1 is first arg
-        #
-        # For ease of parsing, if the argument to one of the above
-        # notations in a .ops file contains parentheses, then double the
-        # enclosing parentheses and add a space around the argument,
-        # like so:
-        #
-        #    goto OFFSET(( (void*)interp->happy_place ))
-        #
-        # Later transformations turn the Op body notations into C code, based
-        # on the mode of operation (function calls, switch statements, gotos
-        # with labels, etc.).
-        #
-        if ($body =~ /(goto|restart)\s+OFFSET\(.*?\)/ || $short_name =~ /runinterp/) {
-            $branch = 1;
-        }
-
-        $body =~ s/\bgoto\s+ADDRESS\(\( (.*?) \)\)/{{=$1}}/mg;
-        $body =~ s/\bexpr\s+ADDRESS\(\( (.*?) \)\)/{{^$1}}/mg;
-        $body =~ s/\bgoto\s+ADDRESS\((.*?)\)/{{=$1}}/mg;
-        $body =~ s/\bexpr\s+ADDRESS\((.*?)\)/{{^$1}}/mg;
-
-        $body =~ s/\bgoto\s+OFFSET\(\( (.*?) \)\)/{{+=$1}}/mg;
-        $body =~ s/\bexpr\s+OFFSET\(\( (.*?) \)\)/{{^+$1}}/mg;
-        $body =~ s/\bgoto\s+OFFSET\((.*?)\)/{{+=$1}}/mg;
-        $body =~ s/\bexpr\s+OFFSET\((.*?)\)/{{^+$1}}/mg;
-
-        $body =~ s/\bexpr\s+NEXT\(\)/{{^+$op_size}}/mg;
-        $body =~ s/\bgoto\s+NEXT\(\)/{{+=$op_size}}/mg;
-
-        $body =~ s/\brestart\s+OFFSET\((.*?)\)/{{=0,+=$1}}/mg;
-        $body =~ s/\brestart\s+NEXT\(\)/{{=0,+=$op_size}}/mg;
-        $body =~ s/\brestart\s+ADDRESS\((.*?)\)/{{=$1}}/mg;
-
-        $body =~ s/\$(\d+)/{{\@$1}}/mg;
-
-        # We can only reference as many parameters as we declare
-        my $max_arg_num = @$args;
-        my @found_args = ($body =~ m/{{@(\d+)}}/g);
-        foreach my $arg (@found_args) {
-            die "opcode '$short_name' uses '\$$arg' but only has $max_arg_num parameters.\n" if $arg > $max_arg_num;
-        }
-
-
-        my $file_escaped = $file;
-        $file_escaped =~ s|(\\)|$1$1|g;    # escape backslashes
-        $op->body( $nolines ? $body : qq{#line $line "$file_escaped"\n$body} );
-
-        # Constants here are defined in include/parrot/op.h
-        or_flag( \$jumps, "PARROT_JUMP_RELATIVE" ) if $branch;
-
-        $op->jump($jumps);
-        $self->push_op($op);
-        $counter++;
-    }
-
-    return $counter;
-}
-
-=item C<expand_args(@args)>
-
-Given an argument list, returns a list of all the possible argument
-combinations.
-
-=cut
-
-sub expand_args {
-    my (@args) = @_;
-
-    return "" if ( !scalar(@args) );
-
-    my $arg = shift(@args);
-    my @var = split( /\|/, $arg );
-
-    if ( !scalar(@args) ) {
-        return @var;
-    }
-    else {
-        my @list = expand_args(@args);
-        my @results;
-
-        foreach my $l (@list) {
-            foreach my $v (@var) {
-                push( @results, "$v,$l" );
-            }
-        }
-
-        return @results;
-    }
-}
-
-=item C<ops()>
-
-Returns the C<Parrot::Op> instances found in the file(s).
-
-=cut
-
-sub ops {
-    my ($self) = @_;
-
-    return @{ $self->{OPS} };
-}
-
-=item C<op($index)>
-
-Returns the op at C<$index>.
-
-=cut
-
-sub op {
-    my ( $self, $index ) = @_;
-
-    return $self->{OPS}[$index];
-}
-
-=item C<preamble()>
-
-=item C<preamble($trans)>
-
-Returns any lines found prior to first op definition.
-
-If C<$trans> (an C<Parrot::OpTrans> subclass) is supplied then
-substitutions are made.
-
-=cut
-
-sub preamble {
-    my ( $self, $trans ) = @_;
-
-    local $_ = $self->{PREAMBLE};
-
-    if ($trans) {
-        s/goto\s+OFFSET\((.*)\)/{{+=$1}}/mg;
-
-        #s/goto\s+NEXT\(\)/{{+=$op_size}}/mg;   #not supported--dependent on op size
-        s/goto\s+ADDRESS\((.*)\)/{{=$1}}/mg;
-
-        $_ = Parrot::Op->rewrite_body( $_, $trans, 'preamble' );
-    }
-
-    return $_;
-}
-
-=item C<version($major, $minor, $patch)>
-
-=item C<version($version)>
-
-=item C<version()>
-
-Sets/gets the version number.
-
-=cut
-
-sub version {
-    my $self = shift;
-
-    if ( @_ == 1 ) {
-        $self->{VERSION} = shift;
-    }
-    elsif ( @_ == 3 ) {
-        $self->{VERSION} = join( '.', @_ );
-    }
-    elsif ( @_ == 0 ) {
-        if (wantarray) {
-            return split( /\./, $self->{VERSION} );
-        }
-        else {
-            return $self->{VERSION};
-        }
-    }
-    else {
-        die "Parrot::OpsFile::version(): Illegal argument count" . scalar(@_) . "!";
-    }
-}
-
-=item C<major_version()>
-
-Returns the major version number.
-
-=cut
-
-sub major_version {
-    my $self = shift;
-
-    $self->{VERSION} =~ m/^(\d+)\./;
-
-    return $1;
-}
-
-=item C<minor_version()>
-
-Returns the minor version number.
-
-=cut
-
-sub minor_version {
-    my $self = shift;
-
-    $self->{VERSION} =~ m/^\d+\.(\d+)\./;
-
-    return $1;
-}
-
-=item C<patch_version()>
-
-Returns the patch version number.
-
-=cut
-
-sub patch_version {
-    my $self = shift;
-
-    $self->{VERSION} =~ m/^\d+\.\d+\.(\d+)/;
-
-    return $1;
-}
-
-=item C<push_op($op)>
-
-Adds C<$op> to the end of the op list.
-
-=cut
-
-sub push_op {
-    my ( $self, $op ) = @_;
-
-    push @{ $self->{OPS} }, $op;
-}
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item C<Parrot::Op>
-
-=item C<Parrot::OpTrans>
-
-=item F<tools/build/ops2c.pl>
-
-=item F<tools/build/ops2pm.pl>
-
-=item F<tools/build/pbc2c.pl>
-
-=back
-
-=cut
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/gsoc_threads/lib/Parrot/OpsRenumber.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/OpsRenumber.pm	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,190 +0,0 @@
-# Copyright (C) 2007, Parrot Foundation.
-# $Id$
-package Parrot::OpsRenumber;
-use strict;
-use warnings;
-use lib qw ( lib );
-use base qw( Parrot::Ops2pm::Base );
-
-=head1 NAME
-
-Parrot::OpsRenumber - Methods holding functionality for F<tools/dev/opsrenumber.pl>.
-
-=head1 SYNOPSIS
-
-    use Parrot::OpsRenumber;
-
-    $self = Parrot::OpsRenumber->new( {
-        argv            => [ @ARGV ],
-        moddir          => "lib/Parrot/OpLib",
-        module          => "core.pm",
-        inc_dir         => "include/parrot/oplib",
-        inc_f           => "ops.h",
-        script          => "tools/dev/opsrenumber.pl",
-    } );
-
-    $self->prepare_ops();
-    $self->renum_op_map_file();
-
-=cut
-
-=head1 DESCRIPTION
-
-Parrot::OpsRenumber provides methods called by F<tools/dev/opsrenumber.pl>.
-
-=head1 METHODS
-
-=head2 C<new()>
-
-Inherited from Parrot::Ops2pm::Base and documented in
-F<lib/Parrot/Ops2pm/Base.pm>.
-
-=head2 C<prepare_ops()>
-
-Inherited from Parrot::Ops2pm::Base and documented in
-F<lib/Parrot/Ops2pm/Base.pm>.
-
-=head2 C<renum_op_map_file()>
-
-=over 4
-
-=item * Purpose
-
-This method renumbers F<src/ops/ops.num> based on the already
-existing file of that name and additional F<.ops> files.
-
-=item * Arguments
-
-Two scalars.  First is Parrot major version number.  Second is optional:
-string holding name of an F<.ops> file; defaults to F<src/ops/ops.num>.
-(Implicitly requires that the C<argv> and C<script> elements were provided to
-the constructor.)
-
-=item * Return Value
-
-Returns true value upon success.
-
-=back
-
-=cut
-
-
-my $OPSENUM_PREAMBLE =<<END;
-/* ex: set ro ft=c:
- * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
- *
- * This file is generated automatically from 'lib/Parrot/OpsRenumber.pm'.
- *
- * Any changes made here will be lost!
- *
- */
-#ifndef OPSENUM_H_GUARD
-#define OPSENUM_H_GUARD
-enum OPS_ENUM {
-END
-
-my $OPSENUM_POSTAMBLE =<<END;
-};
-#endif /* OPSENUM_H_GUARD */
-/* GENERATED BY lib/Parrot/OpsRenumber.pm */
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
-END
-
-sub renum_op_map_file {
-    my $self = shift;
-
-    my $file = $self->{num_file};
-
-    # We open up the currently existing ops.num and file and read it
-    # line-by-line.  That file is basically divided into two halves
-    # separated by the ###DYNAMIC### line.  Above that line are found
-    # (a) # inline comments and
-    # (b) the first 7, never-to-be-altered opcodes.
-    # Below that line are all the remaining opcodes.  All opcode lines
-    # match the pattern /^(\w+)\s+(\d+)$/.  Everything above the line gets
-    # pushed into @lines and, if it's an opcode line, gets split and
-    # pushed into %fixed as well.  Nothing happens to the (opcode) lines
-    # below the DYNAMIC line.
-
-    my ( $name, $number, @lines, %seen, %fixed, $fix );
-    $fix = 1;
-    open my $OP, '<', $file
-        or die "Can't open $file, error $!";
-    while (<$OP>) {
-        push @lines, $_ if $fix;
-        chomp;
-        $fix = 0 if /^###DYNAMIC###/;
-        s/#.*$//;
-        s/\s*$//;
-        s/^\s*//;
-        next unless $_;
-        ( $name, $number ) = split( /\s+/, $_ );
-        $seen{$name}  = 1;
-        $fixed{$name} = $number if $fix;
-    }
-    close $OP;
-
-    # Now we re-open the very same file we just read -- this time for
-    # writing.  We directly print all the lines in @lines, i.e., those
-    # above the DYNAMIC line.  For the purpose of renumbering, we create
-    # an index $n.
-
-    my $opsenumfn = $self->{opsenum_file};
-    open my $OPSENUM, '>', $opsenumfn or die "Can't open $opsenumfn, error $!";
-    print $OPSENUM $OPSENUM_PREAMBLE;
-    open $OP, '>', $file
-        or die "Can't open $file, error $!";
-    print $OP @lines;
-    my ($n);
-
-    # We can't use all autogenerated ops from oplib/core
-    # there are unwanted permutations like 'add_i_ic_ic
-    # which aren't opcodes but calculated at compile-time.
-
-    # The ops element is set by prepare_ops(), which is inherited from
-    # Parrot::Ops2pm::Base.  prepare_ops(), in turn, works off
-    # Parrot::OpsFile.
-
-    # So whether a particular opcode will continue to appear in ops.num
-    # depends entirely on whether or not it's found in
-    # @{ $self->{ops}->{OPS} }.  If a particular opcode has been deleted or
-    # gone missing from that array, then it won't appear in the new
-    # ops.num.
-
-    for ( @{ $self->{ops}->{OPS} } ) {
-
-        # To account for the number of opcodes above the line, we'll
-        # increment the index by one for every element in %fixed.
-
-        if ( defined $fixed{ $_->full_name } ) {
-            $n = $fixed{ $_->full_name };
-        }
-
-        # For all other opcodes, we'll print the opcode, increment the
-        # index, then print the index on that same line.
-
-        elsif ( $seen{ $_->full_name } ) {
-            printf $OP "%-31s%4d\n", $_->full_name, ++$n;
-            printf $OPSENUM "    enum_ops_%-31s= %4d,\n", $_->full_name, $n;
-        }
-    }
-    close $OP;
-    print $OPSENUM $OPSENUM_POSTAMBLE;
-    close $OPSENUM;
-
-    return 1;
-}
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/lib/Parrot/Test/Pod.pm
==============================================================================
--- branches/gsoc_threads/lib/Parrot/Test/Pod.pm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/lib/Parrot/Test/Pod.pm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -72,11 +72,23 @@
                         | t/configure/testlib/cdefectivefoobar
                         | t/configure/testlib/bdefectivefoobar
                         | examples/config/file/configwithfatalstep
+                        | compilers/opsc
                     }x
                 ) {
                     delete $files_needing_analysis->{ $file };
                     next SECOND_FILE;
                 }
+
+                # read first line. If it contains "nqp" remove file from test.
+                my $fh;
+                open $fh, '<', $full_file or croak "Can't opend file $full_file $!";
+                my $line = <$fh>;
+                close $fh;
+
+                if ($line =~ m/ nqp | use \s v6 /x) {
+                    delete $files_needing_analysis->{ $file };
+                    next SECOND_FILE;
+                }
             }
         }
         nstore $files_needing_analysis, $sto;
@@ -198,7 +210,7 @@
             @files = @{ $self->{argv} };
         }
         else {
-            print STDERR "\nFinding files with POD, this may take a minute.\n";
+            print STDERR "\n# Finding files with POD, this may take a minute.\n";
             @files = (
                 keys(%{ $self->{manifest} }),
                 keys(%{ $self->{manifest_gen} })

Modified: branches/gsoc_threads/runtime/parrot/library/Archive/Tar.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/Archive/Tar.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/Archive/Tar.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -14,6 +14,7 @@
 =cut
 
 .include 'stat.pasm'
+.loadlib 'io_ops'
 
 =head3 Class Archive;Tar;File
 
@@ -438,8 +439,11 @@
 .sub '_error' :method
     .param pmc args :slurpy
     $S0 = join '', args
-    printerr $S0
-    printerr "\n"
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'($S0)
+    $P1.'print'("\n")
 .end
 
 =back

Modified: branches/gsoc_threads/runtime/parrot/library/Archive/Zip.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/Archive/Zip.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/Archive/Zip.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -13,6 +13,8 @@
 
 =cut
 
+.loadlib 'sys_ops'
+.loadlib 'io_ops'
 .include 'stat.pasm'
 .include 'tm.pasm'
 
@@ -43,8 +45,11 @@
 .sub '_printError'
     .param pmc args :slurpy
     $S0 = join '', args
-    printerr $S0
-    printerr "\n"
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'($S0)
+    $P1.'print'("\n")
 .end
 
 .sub '_ioError' :method
@@ -388,11 +393,11 @@
 .sub '_refreshLocalFileHeader' :method
     .param pmc fh
     .local int here
-    here = tell fh
+    here = fh.'tell'()
     $P0 = getattribute self, 'writeLocalHeaderRelativeOffset'
     $I0 = $P0
     $I0 += SIGNATURE_LENGTH
-    seek fh, $I0, 0
+    fh.'seek'($I0, 0)
     .local string header, fileName, localExtraField
     .const string VERSION = 20
     header = self.'pack_v'(VERSION)
@@ -428,7 +433,7 @@
     if $I0 goto L2
     .tailcall self.'_ioError'('re-writing local header')
   L2:
-    seek fh, here, 0
+    fh.'seek'(here, 0)
     .return (AZ_OK)
 .end
 
@@ -597,7 +602,7 @@
     .return ('', AZ_OK)
   L1:
     $P0 = self.'fh'()
-    $S0 = read $P0, chunkSize
+    $S0 = $P0.'read'(chunkSize)
     unless $S0 == '' goto L2
     $I0 = self.'_ioError'("reading data")
     .return ($S0, $I0)
@@ -647,7 +652,7 @@
     .return ($I0)
   L1:
     $P0 = self.'fh'()
-    seek $P0, 0, 0
+    $P0.'seek'(0, 0)
     .return (AZ_OK)
 .end
 

Modified: branches/gsoc_threads/runtime/parrot/library/CGI/QueryHash.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/CGI/QueryHash.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/CGI/QueryHash.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -69,9 +69,11 @@
         .local int len
         content_length  = my_env['CONTENT_LENGTH']
         len             = content_length
-        in              = getstdin
-        query           = read in, len
-        close in
+        $P0             = getinterp
+        .include 'stdio.pasm'
+        in              = $P0.'stdhandle'(.PIO_STDIN_FILENO)
+        query           = in.'read'(len)
+        in.'close'()
         #_dumper( query, 'queryPOST:' )
         query_hash = parse( query )
 

Modified: branches/gsoc_threads/runtime/parrot/library/Config/JSON.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/Config/JSON.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/Config/JSON.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -25,7 +25,8 @@
     .local string text
     .local pmc fh
 
-    fh = open filename, 'r'
+    fh = new ['FileHandle']
+    fh.'open'(filename, 'r')
     if fh goto slurp_file
     $P0 = new 'Exception'
     $S0 = concat "Can't open file: ", filename
@@ -75,10 +76,11 @@
     output = _json( config, expanded )
 
     # write out the file..
-    $P1 = open filename, 'w'
+    $P1 = new ['FileHandle']
+    $P1.'open'(filename, 'w')
     print $P1, output
     print $P1, "\n"
-    close $P1
+    $P1.'close'()
 
 .end
 

Modified: branches/gsoc_threads/runtime/parrot/library/Configure/genfile.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/Configure/genfile.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/Configure/genfile.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -38,6 +38,7 @@
 
 =cut
 
+.loadlib 'sys_ops'
 .include 'sysinfo.pasm'
 
 .sub 'genfile'
@@ -356,13 +357,16 @@
     .param string str
     .param int pos
     .param string msg
-    printerr "in '"
-    printerr str
-    printerr "' at "
-    printerr pos
-    printerr " : "
-    printerr msg
-    printerr "\n"
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("in '")
+    $P1.'print'(str)
+    $P1.'print'("' at ")
+    $P1.'print'(pos)
+    $P1.'print'(" : ")
+    $P1.'print'(msg)
+    $P1.'print'("\n")
 .end
 
 .sub 'interpolate_var'
@@ -401,9 +405,12 @@
     $I1 = $I3
     goto L8
   L7:
-    printerr "\tunknown config: "
-    printerr $S1
-    printerr "\n"
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("\tunknown config: ")
+    $P1.'print'($S1)
+    $P1.'print'("\n")
   L6:
     $I0 = $I3 + 1
     goto L3

Modified: branches/gsoc_threads/runtime/parrot/library/Crow.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/Crow.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/Crow.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -15,8 +15,8 @@
     getopts = new ['Getopt';'Obj']
     getopts.'notOptStop'(1)
 
-    getopts = push 'help|h'
-    getopts = push 'type|t=s'
+    push getopts, 'help|h'
+    push getopts, 'type|t=s'
 
     .local pmc opts
     opts = getopts.'get_options'(args)
@@ -65,7 +65,8 @@
     .local pmc newsfile
     .local string buf, news, start
 
-    newsfile = open 'NEWS', 'r'
+    newsfile = new ['FileHandle']
+    newsfile.'open'('NEWS', 'r')
 
     ## find the start of the news item for this version
     start    = concat 'New in ', version
@@ -73,12 +74,12 @@
   before:
     $I0 = newsfile.'eof'()
     if $I0 goto err_news
-    buf      = readline newsfile
+    buf      = newsfile.'readline'()
     $I0      = index buf, start
     if  $I0 != 0 goto before
 
   blank:
-    buf      = readline newsfile
+    buf      = newsfile.'readline'()
     $I0      = index buf, "\n"
     if  $I0 == 0 goto blank
     $I0      = index buf, "\r"
@@ -86,7 +87,7 @@
     news    .= buf
 
   item:
-    buf      = readline newsfile
+    buf      = newsfile.'readline'()
     $I0      = index buf, "\n"
     if  $I0 == 0 goto done
     $I0      = index buf, "\r"

Modified: branches/gsoc_threads/runtime/parrot/library/Digest/MD5.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/Digest/MD5.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/Digest/MD5.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -49,6 +49,8 @@
 
 =cut
 
+.loadlib 'bit_ops'
+
 ###########################################################################
 # Export function entries to globals
 

Modified: branches/gsoc_threads/runtime/parrot/library/HTTP/Message.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/HTTP/Message.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/HTTP/Message.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -20,6 +20,8 @@
 
 .namespace ['HTTP';'Date']
 
+.loadlib 'io_ops' # XXX avoids segfaults for some reason (see TT #1663)
+.loadlib 'sys_ops'
 .include 'tm.pasm'
 
 .sub 'time2str'
@@ -171,10 +173,11 @@
 .include 'cclass.pasm'
 
 .sub '' :init :load :anon
-    load_bytecode 'URI.pir'
+    load_bytecode 'URI.pbc'
     $P0 = subclass ['HTTP';'Message'], ['HTTP';'Request']
     $P0.'add_attribute'('method')
     $P0.'add_attribute'('uri')
+    $P0.'add_attribute'('proxy')
 .end
 
 =item method
@@ -195,6 +198,17 @@
     .return ($P0)
 .end
 
+.sub 'proxy' :method
+    .param pmc val              :optional
+    .param int has_val          :opt_flag
+    unless has_val goto L1
+    setattribute self, 'proxy', val
+    .return ()
+  L1:
+    $P0 = getattribute self, 'proxy'
+    .return ($P0)
+.end
+
 =item GET
 
 =cut
@@ -467,7 +481,7 @@
   L2:
     $S0 = $P0
     .local pmc encode
-    encode = get_hll_global  ['MIME';'Base64'], 'encode_base64'
+    encode = get_hll_global ['MIME';'Base64'], 'encode_base64'
     $S0 = encode($S0)
     $I1 = length $S0
     $I0 = 0

Deleted: branches/gsoc_threads/runtime/parrot/library/LWP.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/LWP.pir	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,851 +0,0 @@
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-LWP - The World-Wide Web library for Parrot
-
-=head2 DESCRIPTION
-
-Simplified port of LWP (version 5.834)
-see http://search.cpan.org/~gaas/libwww-perl/
-
-=head3 Class LWP;UserAgent
-
-=over 4
-
-=cut
-
-.namespace ['LWP';'UserAgent']
-
-.sub '' :init :load :anon
-    load_bytecode 'HTTP/Message.pir'
-    $P0 = newclass ['LWP';'UserAgent']
-    $P0.'add_attribute'('def_headers')
-    $P0.'add_attribute'('show_progress')
-    $P0.'add_attribute'('progress_start')
-    $P0.'add_attribute'('progress_lastp')
-    $P0.'add_attribute'('progress_ani')
-    $P0.'add_attribute'('max_redirect')
-    .globalconst int RC_OK = 200
-    .globalconst int RC_MOVED_PERMANENTLY = 301
-    .globalconst int RC_FOUND = 302
-    .globalconst int RC_SEE_OTHER = 303
-    .globalconst int RC_TEMPORARY_REDIRECT = 307
-    .globalconst int RC_BAD_REQUEST = 400
-    .globalconst int RC_NOT_FOUND = 404
-    .globalconst int RC_INTERNAL_SERVER_ERROR = 500
-    .globalconst int RC_NOT_IMPLEMENTED = 501
-.end
-
-.sub 'init' :vtable :method
-    $P0 = new ['HTTP';'Headers']
-    $P0['User-Agent'] = 'libwww-parrot'
-    setattribute self, 'def_headers', $P0
-    $P0 = box 7
-    setattribute self, 'max_redirect', $P0
-.end
-
-.sub 'send_request' :method
-    .param pmc request
-    .local string method
-    method = request.'method'()
-    .local pmc url
-    url = request.'uri'()
-    .local string scheme
-    scheme = url.'scheme'()
-    self.'progress'('begin', request)
-    .local pmc protocol, response
-    $P0 =get_hll_global ['LWP';'Protocol'], 'create'
-    protocol = $P0(scheme, self)
-    unless null protocol goto L1
-    response = _new_response(request, RC_NOT_IMPLEMENTED, 'Not Implemented')
-    goto L2
-  L1:
-    response = protocol.'request'(request)
-    setattribute response, 'request', request
-    $P0 = get_hll_global ['HTTP';'Date'], 'time2str'
-    $I0 = time
-    $S0 = $P0($I0)
-    response.'push_header'('Client-Date', $S0)
-  L2:
-    self.'progress'('end', response)
-    .return (response)
-.end
-
-.sub 'prepare_request' :method
-    .param pmc request
-    $P0 = request.'method'()
-    unless null $P0 goto L1
-    die "Method missing"
-  L1:
-    $P0 = request.'uri'()
-    unless null $P0 goto L2
-    die "URL missing"
-  L2:
-    $S0 = $P0.'scheme'()
-    unless $S0 == '' goto L3
-    die "URL must be absolute"
-  L3:
-    $P0 = getattribute self, 'def_headers'
-    $P1 = iter $P0
-  L4:
-    unless $P1 goto L5
-    $S0 = shift $P1
-    $S1 = $P0[$S0]
-    request.'push_header'($S0, $S1)
-    goto L4
-  L5:
-.end
-
-.sub 'simple_request' :method
-    .param pmc request
-    unless null request goto L1
-    die "No request object passed in"
-  L1:
-    $I0 = isa request, ['HTTP';'Request']
-    if $I0 goto L2
-    die "You need a ['HTTP';'Request']"
-  L2:
-    self.'prepare_request'(request)
-    .tailcall self.'send_request'(request)
-.end
-
-.sub 'request' :method
-    .param pmc request
-    .param pmc previous         :optional
-    .param int has_previous     :opt_flag
-
-    .local pmc response
-    response = self.'simple_request'(request)
-    unless has_previous goto L1
-    response.'previous'(previous)
-  L1:
-
-    .local int redirect
-    $P0 = response.'redirect'()
-    redirect = elements $P0
-    .local int max_redirect
-    $P0 = getattribute self, 'max_redirect'
-    max_redirect = $P0
-    unless redirect >= max_redirect goto L2
-    $S0 = 'Redirect loop detected (max_redirect = '
-    $S1 = max_redirect
-    $S0 .= $S1
-    $S0 .= ')'
-    response.'push_header'('Client-Warning', $S0)
-    .return (response)
-  L2:
-
-    .local int code
-    code = response.'code'()
-
-    if code == RC_MOVED_PERMANENTLY goto L3
-    if code == RC_FOUND goto L3
-    if code == RC_SEE_OTHER goto L3
-    if code == RC_TEMPORARY_REDIRECT goto L3
-    goto L4
-  L3:
-    .local pmc referral
-    referral = clone request
-    # These headers should never be forwarded
-    referral.'remove_header'('Host')
-    referral.'remove_header'('Cookie')
-
-    # work in progress
-
-    .local string referral_uri
-    referral_uri = response.'get_header'('Location')
-    $P0 = get_hll_global ['URI'], 'new_from_string'
-    $P1 = $P0(referral_uri)
-    $S0 = $P1.'scheme'()
-    unless $S0 == '' goto L5
-    $P2 = new 'StringBuilder'
-    $P3 = request.'uri'()
-    $S0 = $P3.'scheme'()
-    push $P2, $S0
-    push $P2, '://'
-    $S0 = request.'get_header'('Host')
-    push $P2, $S0
-    push $P2, referral_uri
-    $P1 = $P0($P2)
-  L5:
-    setattribute referral, 'uri', $P1
-
-    # work in progress
-
-    $I0 = self.'redirect_ok'(referral, response)
-    if $I0 goto L6
-    .return (response)
-  L6:
-    .tailcall self.'request'(referral, response)
-  L4:
-
-    # work in progress
-
-    .return (response)
-.end
-
-=item get
-
-=cut
-
-.sub 'get' :method
-    .param pmc args :slurpy
-    .param pmc kv :slurpy :named
-    .local pmc request
-    $P0 = get_hll_global ['HTTP';'Request'], 'GET'
-    request = $P0(args :flat, kv :flat :named)
-    .tailcall self.'request'(request)
-.end
-
-=item post
-
-=cut
-
-.sub 'post' :method
-    .param pmc args :slurpy
-    .param pmc kv :slurpy :named
-    .local pmc request
-    $P0 = get_hll_global ['HTTP';'Request'], 'POST'
-    request = $P0(args :flat, kv :flat :named)
-    .tailcall self.'request'(request)
-.end
-
-=item put
-
-=cut
-
-.sub 'put' :method
-    .param pmc args :slurpy
-    .param pmc kv :slurpy :named
-    .local pmc request
-    $P0 = get_hll_global ['HTTP';'Request'], 'PUT'
-    request = $P0(args :flat, kv :flat :named)
-    .tailcall self.'request'(request)
-.end
-
-=item delete
-
-=cut
-
-.sub 'delete' :method
-    .param pmc args :slurpy
-    .param pmc kv :slurpy :named
-    .local pmc request
-    $P0 = get_hll_global ['HTTP';'Request'], 'DELETE'
-    request = $P0(args :flat, kv :flat :named)
-    .tailcall self.'request'(request)
-.end
-
-.sub 'progress' :method
-    .param string status
-    .param pmc msg
-    $P0 = getattribute self, 'show_progress'
-    if null $P0 goto L1
-    unless $P0 goto L1
-    unless status == 'begin' goto L2
-    printerr "** "
-    $P0 = getattribute msg, 'method'
-    printerr $P0
-    printerr " "
-    $P0 = getattribute msg, 'uri'
-    printerr $P0
-    printerr " ==> "
-    $N1 = time
-    $P0 = box $N1
-    setattribute self, 'progress_start', $P0
-    $P0 = box ''
-    setattribute self, 'progress_lastp', $P0
-    $P0 = box 0
-    setattribute self, 'progress_ani', $P0
-    goto L1
-  L2:
-    unless status == 'end' goto L3
-    $P0 = getattribute self, 'progress_start'
-    $N1 = $P0
-    $N2 = time
-    null $P0
-    setattribute self, 'progress_start', $P0
-    setattribute self, 'progress_lastp', $P0
-    setattribute self, 'progress_ani', $P0
-    $S0 = msg.'status_line'()
-    printerr $S0
-    $N0 =$N2 - $N1
-    $I0 = $N0
-    unless $I0 goto L4
-    printerr " ("
-    printerr $I0
-    printerr "s)"
-  L4:
-    printerr "\n"
-    goto L1
-  L3:
-    unless status == 'tick' goto L5
-    $P0 = getattribute self, 'progress_ani'
-    inc $P0
-    $P0 %= 4
-    $P1 = split '', '-\|/'
-    $S0 = $P1[$P0]
-    printerr $S0
-    printerr "\b"
-    goto L1
-  L5:
-    $N0 = status
-    $N0 *= 100
-    $P0 = new 'FixedFloatArray'
-    set $P0, 1
-    $P0[0] = $N0
-    $S1 = sprintf '%3.0f%%', $P0
-    $P0 = getattribute self, 'progress_lastp'
-    $S0 = $P0
-    if $S0 == $S1 goto L1
-    set $P0, $S1
-    printerr $S1
-    printerr "\b\b\b\b"
-  L1:
-.end
-
-.sub 'redirect_ok' :method
-    .param pmc new_request
-    .param pmc response
-    $P0 = response.'request'()
-    $S0 = $P0.'method'()
-    if $S0 == 'GET' goto L1
-    if $S0 == 'HEAD' goto L1
-    .return (0)
-  L1:
-    # work in progress
-    .return (1)
-.end
-
-=item max_redirect
-
-=cut
-
-.sub 'max_redirect' :method
-    .param pmc val
-    setattribute self, 'max_redirect', val
-.end
-
-=item show_progress
-
-=cut
-
-.sub 'show_progress' :method
-    .param pmc val
-    setattribute self, 'show_progress', val
-.end
-
-=item agent
-
-=cut
-
-.sub 'agent' :method
-    .param string val
-    $P0 = getattribute self, 'def_headers'
-    $P0['User-Agent'] = val
-.end
-
-=item env_provy
-
-=cut
-
-.sub 'env_proxy' :method
-    $P0 = new 'Env'
-    $P1 = iter $P0
-  L1:
-    unless $P1 goto L2
-    $S0 = shift $P1
-    $S1 = downcase $S0
-
-    # work in progress
-
-    goto L1
-  L2:
-.end
-
-.sub '_new_response'
-    .param pmc request
-    .param pmc code
-    .param pmc message
-    .local pmc response
-    response = new ['HTTP';'Response']
-    setattribute response, 'code', code
-    setattribute response, 'message', message
-    setattribute response, 'request', request
-    $P0 = get_hll_global ['HTTP';'Date'], 'time2str'
-    $I0 = time
-    $S0 = $P0($I0)
-    response.'push_header'('Client-Date', $S0)
-    response.'push_header'('Client-Warning', "Internal response")
-    response.'push_header'('Content-Type', 'text/plain')
-    $S0 = code
-    $S0 .= ' '
-    $S1 = message
-    $S0 .= $S1
-    $S0 .= "\n"
-    $P0 = box $S0
-    setattribute response, 'content', $P0
-    .return (response)
-.end
-
-=back
-
-=head3 Class LWP;Protocol
-
-=over 4
-
-=cut
-
-.namespace ['LWP';'Protocol']
-
-.sub '' :init :load :anon
-    $P0 = newclass ['LWP';'Protocol']
-    $P0.'add_attribute'('scheme')
-    $P0.'add_attribute'('ua')
-.end
-
-=item create
-
-=cut
-
-.sub 'create'
-    .param string scheme
-    .param pmc ua
-    $P1 = new 'Key'
-    set $P1, 'LWP'
-    $P2 = new 'Key'
-    set $P2, 'Protocol'
-    push $P1, $P2
-    $P3 = new 'Key'
-    set $P3, scheme
-    push $P1, $P3
-    $P0 = get_class $P1
-    unless null $P0 goto L1
-    .return ($P0)
-  L1:
-    .local pmc protocol
-    protocol = new $P0
-    $P0 = box scheme
-    setattribute protocol, 'scheme', $P0
-    setattribute protocol, 'ua', ua
-    .return (protocol)
-.end
-
-=item scheme
-
-=cut
-
-.sub 'scheme' :method
-    $P0 = getattribute self, 'scheme'
-    .return ($P0)
-.end
-
-=item ua
-
-=cut
-
-.sub 'ua' :method
-    $P0 = getattribute self, 'ua'
-    .return ($P0)
-.end
-
-.sub 'request' :method
-    .param pmc args :slurpy
-    die 'LWP::Protocol::request() needs to be overridden in subclasses'
-.end
-
-=back
-
-=head3 Class LWP;Protocol;file
-
-=cut
-
-.namespace ['LWP';'Protocol';'file']
-
-.include 'stat.pasm'
-
-.sub '' :init :load :anon
-    $P0 = subclass ['LWP';'Protocol'], ['LWP';'Protocol';'file']
-.end
-
-.sub 'request' :method
-    .param pmc request
-    load_bytecode 'osutils.pbc'
-    .local string method
-    method = request.'method'()
-    $P0 = get_hll_global ['LWP';'Protocol';'file'], method
-    unless null $P0 goto L1
-    $P0 = new ['HTTP';'Response']
-    $P1 = box RC_BAD_REQUEST
-    setattribute $P0, 'code', $P1
-    $S0 = "Library does not allow method " . method
-    $S0 .= " for 'file:' URLs"
-    $P1 = box $S0
-    setattribute $P0, 'message', $P1
-    .return ($P0)
-  L1:
-    .local pmc url
-    url = request.'uri'()
-    .local string scheme
-    scheme = url.'scheme'()
-    if scheme == 'file' goto L2
-    $P0 = new ['HTTP';'Response']
-    $P1 = box RC_INTERNAL_SERVER_ERROR
-    setattribute $P0, 'code', $P1
-    $S0 = "LWP::Protocol::file::request called for '" . scheme
-    $S0 .= "'"
-    $P1 = box $S0
-    setattribute $P0, 'message', $P1
-    .return ($P0)
-  L2:
-    .tailcall $P0(self, request)
-.end
-
-.sub 'HEAD' :method :nsentry
-    .param pmc request
-    .tailcall self.'GET'(request)
-.end
-
-.sub 'GET' :method :nsentry
-    .param pmc request
-    .local pmc response
-    response = new ['HTTP';'Response']
-    .local string method
-    method = request.'method'()
-    .local pmc url
-    url = request.'uri'()
-    .local string path
-    path = url.'path'()
-
-    $I0 = stat path, .STAT_EXISTS
-    if $I0 goto L1
-    $P0 = box RC_NOT_FOUND
-    setattribute response, 'code', $P0
-    $S0 = "File `" . path
-    $S0 .= "' does not exist"
-    $P0 = box $S0
-    setattribute response, 'message', $P0
-    .return (response)
-  L1:
-
-    .local int mtime
-    mtime = stat path, .STAT_MODIFYTIME
-    $P0 = get_hll_global ['HTTP';'Date'], 'time2str'
-    $S0 = $P0(mtime)
-    response.'push_header'('Last-Modified', $S0)
-    .local int filesize
-    filesize = stat path, .STAT_FILESIZE
-    response.'push_header'('Content-Length', filesize)
-
-    if method == 'HEAD' goto L2
-    push_eh _handler
-    $S0 = slurp(path)
-    pop_eh
-    $P0 = box $S0
-    setattribute response, 'content', $P0
-  L2:
-    $P0 = box RC_OK
-    setattribute response, 'code', $P0
-    .return (response)
-
-  _handler:
-    .local pmc ex
-    .get_results (ex)
-    $P0 = box RC_INTERNAL_SERVER_ERROR
-    setattribute response, 'code', $P0
-    $S0 = ex
-    $P0 = box $S0
-    setattribute response, 'message', $P0
-    .return (response)
-.end
-
-.sub 'PUT' :method :nsentry
-    .param pmc request
-    .local pmc response
-    response = new ['HTTP';'Response']
-    .local pmc url
-    url = request.'uri'()
-    .local string path
-    path = url.'path'()
-    .local string content
-    content = request.'content'()
-
-    push_eh _handler
-    $S0 = spew(path, content)
-    pop_eh
-
-    $P0 = box RC_OK
-    setattribute response, 'code', $P0
-    .return (response)
-
-  _handler:
-    .local pmc ex
-    .get_results (ex)
-    $P0 = box RC_INTERNAL_SERVER_ERROR
-    setattribute response, 'code', $P0
-    $S0 = ex
-    $P0 = box $S0
-    setattribute response, 'message', $P0
-    .return (response)
-.end
-
-.sub 'DELETE' :method :nsentry
-    .param pmc request
-    .local pmc response
-    response = new ['HTTP';'Response']
-    .local pmc url
-    url = request.'uri'()
-    .local string path
-    path = url.'path'()
-
-    $I0 = stat path, .STAT_EXISTS
-    if $I0 goto L1
-    $P0 = box RC_NOT_FOUND
-    setattribute response, 'code', $P0
-    $S0 = "File `" . path
-    $S0 .= "' does not exist"
-    $P0 = box $S0
-    setattribute response, 'message', $P0
-    .return (response)
-  L1:
-
-    push_eh _handler
-    $S0 = unlink(path)
-    pop_eh
-
-    $P0 = box RC_OK
-    setattribute response, 'code', $P0
-    .return (response)
-
-  _handler:
-    .local pmc ex
-    .get_results (ex)
-    $P0 = box RC_INTERNAL_SERVER_ERROR
-    setattribute response, 'code', $P0
-    $S0 = ex
-    $P0 = box $S0
-    setattribute response, 'message', $P0
-    .return (response)
-.end
-
-=head3 Class LWP;Protocol;http
-
-=cut
-
-.namespace ['LWP';'Protocol';'http']
-
-.include 'socket.pasm'
-
-.sub '' :init :load :anon
-    $P0 = subclass ['LWP';'Protocol'], ['LWP';'Protocol';'http']
-.end
-
-.sub '_new_socket' :method
-    .param string host
-    .param int port
-    .local pmc sock, addr
-    sock = new 'Socket'
-    sock.'socket'(.PIO_PF_INET, .PIO_SOCK_STREAM, .PIO_PROTO_TCP)
-    addr = sock.'sockaddr'(host, port)
-    sock.'connect'(addr)
-    .return (sock)
-.end
-
-.sub '_fixup_header' :method
-    .param pmc headers
-    .param pmc url
-    .local string host
-    host = url.'authority'()
-    headers['Host'] = host
-.end
-
-.sub '_format_request'
-    .param string method
-    .param string uri
-    .param pmc headers
-    .const string CRLF = "\r\n"
-    $P0 = new 'StringBuilder'
-    push $P0, method
-    push $P0, ' '
-    push $P0, uri
-    push $P0, ' HTTP/1.1'
-    push $P0, CRLF
-    $P1 = iter headers
-  L1:
-    unless $P1 goto L2
-    $S0 = shift $P1
-    $S1 = headers[$S0]
-    push $P0, $S0
-    push $P0, ': '
-    push $P0, $S1
-    push $P0, CRLF
-    goto L1
-  L2:
-    push $P0, CRLF
-    .return ($P0)
-.end
-
-.sub '_parse_response_headers' :method
-    .param pmc response
-    .param string str
-    .local string sep
-    sep = "\r\n"
-    $I0 = index str, "\r"
-    unless $I0 < 0 goto L0
-    sep = "\n"
-  L0:
-    $S0 = sep . sep
-    $I0 = index str, $S0
-    if $I0 < 0 goto L1
-    str = substr str, 0, $I0
-  L1:
-
-    $P0 = split sep, str
-    .local string status_line
-    status_line = shift $P0
-    $I0 = index status_line, " "
-    if $I0 < 0 goto L2
-    $S0 = substr status_line, 0, $I0
-    $P1 = box $S0
-    setattribute response, 'protocol', $P1
-    $I1 = $I0 + 1
-    $I0 = index status_line, " ", $I1
-    if $I0 < 0 goto L2
-    $I2 = $I0 - $I1
-    $S0 = substr status_line, $I1, $I2
-    $P1 = box $S0
-    setattribute response, 'code', $P1
-    inc $I0
-    $S0 = substr status_line, $I0
-    $P1 = box $S0
-    setattribute response, 'message', $P1
-
-    $P3 = new ['HTTP';'Headers']
-  L3:
-    unless $P0 goto L4
-    $S0 = shift $P0
-    $I0 = index $S0, ": "
-    if $I0 < 0 goto L3
-    $S1 = substr $S0, 0, $I0
-    $I0 += 2
-    $S2 = substr $S0, $I0
-    $P3[$S1] = $S2
-    goto L3
-  L4:
-    setattribute response, 'headers', $P3
-
-    $I0 = length str
-    .return ($I0)
-  L2:
-    .return (0)
-.end
-
-.sub '_parse_response_content' :method
-    .param pmc response
-    .param string str
-    $I0 = index str, "\r\n\r\n"
-    if $I0 < 0 goto L1
-    $I0 += 4
-    $S0 = substr str, $I0
-    $P0 = box $S0
-    setattribute response, 'content', $P0
-    goto L2
-  L1:
-    $I0 = index str, "\n\n"
-    if $I0 < 0 goto L1
-    $I0 += 2
-    $S0 = substr str, $I0
-    $P0 = box $S0
-    setattribute response, 'content', $P0
-  L2:
-.end
-
-.sub 'request' :method
-    .param pmc request
-
-    .local string method
-    method = request.'method'()
-    .local pmc url
-    url = request.'uri'()
-    .local string host, port, fullpath
-    host = url.'host'()
-    port = url.'port'()
-    fullpath = url.'path_query'()
-    $I0 = index fullpath, '/'
-    if $I0 == 0 goto L1
-    fullpath = '/' . fullpath
-  L1:
-
-    # connect to remote site
-    .local pmc sock
-    sock = self.'_new_socket'(host, port)
-
-    .local pmc request_headers
-    request_headers = request.'headers'()
-    self.'_fixup_header'(request_headers, url)
-
-    .local pmc ua
-    ua = self.'ua'()
-    $S0 = _format_request(method, fullpath, request_headers)
-    sock.'send'($S0)
-
-    .local string content
-    content = request.'content'()
-    unless content goto L11
-    .local int content_length
-    content_length = length content
-    $I0 = 0
-  L12:
-    unless $I0 < content_length goto L11
-    $S0 = substr content, $I0, 8192
-    $I1 = sock.'send'($S0)
-    $I0 += $I1
-    $N0 = $I0 / content_length
-    goto L12
-  L11:
-
-    .local pmc response
-    response = new ['HTTP';'Response']
-    .local pmc buf
-    buf = new 'StringBuilder'
-    .local int header_length
-    content_length = 0
-  L21:
-    ua.'progress'('tick', request)
-    $S0 = sock.'recv'()
-    if $S0 == '' goto L22
-    push buf, $S0
-    header_length = self.'_parse_response_headers'(response, buf)
-    $I0 = response.'is_success'()
-    unless $I0 goto L22
-    $S0 = response.'get_header'('Content-Length')
-    if $S0 == '' goto L21
-    content_length = $S0
-  L23:
-    $I0 = buf.'get_string_length'()
-    $I0 -= header_length
-    $N0 = $I0 / content_length
-    ua.'progress'($N0, request)
-    $S0 = sock.'recv'()
-    if $S0 == '' goto L22
-    push buf, $S0
-    goto L23
-  L22:
-    sock.'close'()
-    self.'_parse_response_content'(response, buf)
-    .return (response)
-.end
-
-=head1 AUTHOR
-
-Francois Perrad
-
-=cut
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/runtime/parrot/library/LWP/Protocol.pir (from r47544, trunk/runtime/parrot/library/LWP/Protocol.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/runtime/parrot/library/LWP/Protocol.pir	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/runtime/parrot/library/LWP/Protocol.pir)
@@ -0,0 +1,538 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+LWP - The World-Wide Web library for Parrot
+
+=head2 DESCRIPTION
+
+Simplified port of LWP (version 5.834)
+see http://search.cpan.org/~gaas/libwww-perl/
+
+=head3 Class LWP;Protocol
+
+=over 4
+
+=cut
+
+.namespace ['LWP';'Protocol']
+
+.sub '' :init :load :anon
+    load_bytecode 'HTTP/Message.pbc'
+    $P0 = newclass ['LWP';'Protocol']
+    $P0.'add_attribute'('scheme')
+    $P0.'add_attribute'('ua')
+.end
+
+=item create
+
+=cut
+
+.sub 'create'
+    .param string scheme
+    .param pmc ua
+    $P1 = new 'Key'
+    set $P1, 'LWP'
+    $P2 = new 'Key'
+    set $P2, 'Protocol'
+    push $P1, $P2
+    $P3 = new 'Key'
+    set $P3, scheme
+    push $P1, $P3
+    $P0 = get_class $P1
+    unless null $P0 goto L1
+    .return ($P0)
+  L1:
+    .local pmc protocol
+    protocol = new $P0
+    $P0 = box scheme
+    setattribute protocol, 'scheme', $P0
+    setattribute protocol, 'ua', ua
+    .return (protocol)
+.end
+
+=item scheme
+
+=cut
+
+.sub 'scheme' :method
+    $P0 = getattribute self, 'scheme'
+    .return ($P0)
+.end
+
+=item ua
+
+=cut
+
+.sub 'ua' :method
+    $P0 = getattribute self, 'ua'
+    .return ($P0)
+.end
+
+.sub 'request' :method
+    .param pmc args :slurpy
+    die 'LWP::Protocol::request() needs to be overridden in subclasses'
+.end
+
+=back
+
+=head3 Class LWP;Protocol;file
+
+=over 4
+
+=cut
+
+.namespace ['LWP';'Protocol';'file']
+
+.loadlib 'io_ops'
+.include 'stat.pasm'
+
+.sub '' :init :load :anon
+    $P0 = subclass ['LWP';'Protocol'], ['LWP';'Protocol';'file']
+    .globalconst int RC_OK = 200
+    .globalconst int RC_BAD_REQUEST = 400
+    .globalconst int RC_NOT_FOUND = 404
+    .globalconst int RC_INTERNAL_SERVER_ERROR = 500
+.end
+
+=item request
+
+=cut
+
+.sub 'request' :method
+    .param pmc request
+    .param pmc proxy
+    if null proxy goto L1
+    $P0 = new ['HTTP';'Response']
+    $P1 = box RC_BAD_REQUEST
+    setattribute $P0, 'code', $P1
+    $P1 = box 'You can not proxy through the filesystem'
+    setattribute $P0, 'message', $P1
+    .return ($P0)
+  L1:
+    load_bytecode 'osutils.pbc'
+    .local string method
+    method = request.'method'()
+    $P0 = get_hll_global ['LWP';'Protocol';'file'], method
+    unless null $P0 goto L2
+    $P0 = new ['HTTP';'Response']
+    $P1 = box RC_BAD_REQUEST
+    setattribute $P0, 'code', $P1
+    $S0 = "Library does not allow method " . method
+    $S0 .= " for 'file:' URLs"
+    $P1 = box $S0
+    setattribute $P0, 'message', $P1
+    .return ($P0)
+  L2:
+    .local pmc url
+    url = request.'uri'()
+    .local string scheme
+    scheme = url.'scheme'()
+    if scheme == 'file' goto L3
+    $P0 = new ['HTTP';'Response']
+    $P1 = box RC_INTERNAL_SERVER_ERROR
+    setattribute $P0, 'code', $P1
+    $S0 = "LWP::Protocol::file::request called for '" . scheme
+    $S0 .= "'"
+    $P1 = box $S0
+    setattribute $P0, 'message', $P1
+    .return ($P0)
+  L3:
+    .tailcall $P0(self, request)
+.end
+
+.sub 'HEAD' :method :nsentry
+    .param pmc request
+    .tailcall self.'GET'(request)
+.end
+
+.sub 'GET' :method :nsentry
+    .param pmc request
+    .local pmc response
+    response = new ['HTTP';'Response']
+    .local string method
+    method = request.'method'()
+    .local pmc url
+    url = request.'uri'()
+    .local string path
+    path = url.'path'()
+
+    $I0 = stat path, .STAT_EXISTS
+    if $I0 goto L1
+    $P0 = box RC_NOT_FOUND
+    setattribute response, 'code', $P0
+    $S0 = "File `" . path
+    $S0 .= "' does not exist"
+    $P0 = box $S0
+    setattribute response, 'message', $P0
+    .return (response)
+  L1:
+
+    .local int mtime
+    mtime = stat path, .STAT_MODIFYTIME
+    $P0 = get_hll_global ['HTTP';'Date'], 'time2str'
+    $S0 = $P0(mtime)
+    response.'push_header'('Last-Modified', $S0)
+    .local int filesize
+    filesize = stat path, .STAT_FILESIZE
+    response.'push_header'('Content-Length', filesize)
+
+    if method == 'HEAD' goto L2
+    push_eh _handler
+    $S0 = slurp(path)
+    pop_eh
+    $P0 = box $S0
+    setattribute response, 'content', $P0
+  L2:
+    $P0 = box RC_OK
+    setattribute response, 'code', $P0
+    .return (response)
+
+  _handler:
+    .local pmc ex
+    .get_results (ex)
+    $P0 = box RC_INTERNAL_SERVER_ERROR
+    setattribute response, 'code', $P0
+    $S0 = ex
+    $P0 = box $S0
+    setattribute response, 'message', $P0
+    .return (response)
+.end
+
+.sub 'PUT' :method :nsentry
+    .param pmc request
+    .local pmc response
+    response = new ['HTTP';'Response']
+    .local pmc url
+    url = request.'uri'()
+    .local string path
+    path = url.'path'()
+    .local string content
+    content = request.'content'()
+
+    push_eh _handler
+    $S0 = spew(path, content)
+    pop_eh
+
+    $P0 = box RC_OK
+    setattribute response, 'code', $P0
+    .return (response)
+
+  _handler:
+    .local pmc ex
+    .get_results (ex)
+    $P0 = box RC_INTERNAL_SERVER_ERROR
+    setattribute response, 'code', $P0
+    $S0 = ex
+    $P0 = box $S0
+    setattribute response, 'message', $P0
+    .return (response)
+.end
+
+.sub 'DELETE' :method :nsentry
+    .param pmc request
+    .local pmc response
+    response = new ['HTTP';'Response']
+    .local pmc url
+    url = request.'uri'()
+    .local string path
+    path = url.'path'()
+
+    $I0 = stat path, .STAT_EXISTS
+    if $I0 goto L1
+    $P0 = box RC_NOT_FOUND
+    setattribute response, 'code', $P0
+    $S0 = "File `" . path
+    $S0 .= "' does not exist"
+    $P0 = box $S0
+    setattribute response, 'message', $P0
+    .return (response)
+  L1:
+
+    push_eh _handler
+    $S0 = unlink(path)
+    pop_eh
+
+    $P0 = box RC_OK
+    setattribute response, 'code', $P0
+    .return (response)
+
+  _handler:
+    .local pmc ex
+    .get_results (ex)
+    $P0 = box RC_INTERNAL_SERVER_ERROR
+    setattribute response, 'code', $P0
+    $S0 = ex
+    $P0 = box $S0
+    setattribute response, 'message', $P0
+    .return (response)
+.end
+
+=back
+
+=head3 Class LWP;Protocol;http
+
+=over 4
+
+=cut
+
+.namespace ['LWP';'Protocol';'http']
+
+.include 'socket.pasm'
+
+.sub '' :init :load :anon
+    $P0 = subclass ['LWP';'Protocol'], ['LWP';'Protocol';'http']
+.end
+
+.sub '_new_socket' :method
+    .param string host
+    .param int port
+    .local pmc sock, addr
+    sock = new 'Socket'
+    sock.'socket'(.PIO_PF_INET, .PIO_SOCK_STREAM, .PIO_PROTO_TCP)
+    addr = sock.'sockaddr'(host, port)
+    sock.'connect'(addr)
+    .return (sock)
+.end
+
+.sub '_fixup_header' :method
+    .param pmc headers
+    .param pmc url
+    .param pmc proxy
+    # Extract 'Host' header
+    .local string host
+    host = url.'authority'()
+    $I0 = index host, '@'
+    if $I0 < 0 goto L1
+    .local string userinfo
+    userinfo = substr host, 0, $I0
+    inc $I0
+    host = substr host, $I1
+    $S0 = headers['Authorization']
+    unless $S0 == '' goto L1
+    load_bytecode 'MIME/Base64.pbc'
+    $P0 = get_hll_global ['MIME';'Base64'], 'encode_base64'
+    $S0 = $P0(userinfo)
+    $S0 = 'Basic ' . $S0
+    headers['Authorization'] = $S0
+  L1:
+    headers['Host'] = host
+    if null proxy goto L2
+    userinfo = proxy.'userinfo'()
+    if userinfo == '' goto L2
+    load_bytecode 'MIME/Base64.pbc'
+    $P0 = get_hll_global ['MIME';'Base64'], 'encode_base64'
+    $S0 = $P0(userinfo)
+    $S0 = 'Basic ' . $S0
+    headers['Proxy-Authorization'] = $S0
+  L2:
+.end
+
+.sub '_format_request'
+    .param string method
+    .param string uri
+    .param pmc headers
+    .const string CRLF = "\r\n"
+    $P0 = new 'StringBuilder'
+    push $P0, method
+    push $P0, ' '
+    push $P0, uri
+    push $P0, ' HTTP/1.1'
+    push $P0, CRLF
+    $P1 = iter headers
+  L1:
+    unless $P1 goto L2
+    $S0 = shift $P1
+    $S1 = headers[$S0]
+    push $P0, $S0
+    push $P0, ': '
+    push $P0, $S1
+    push $P0, CRLF
+    goto L1
+  L2:
+    push $P0, CRLF
+    .return ($P0)
+.end
+
+.sub '_parse_response_headers' :method
+    .param pmc response
+    .param string str
+    .local string sep
+    sep = "\r\n"
+    $I0 = index str, "\r"
+    unless $I0 < 0 goto L0
+    sep = "\n"
+  L0:
+    $S0 = sep . sep
+    $I0 = index str, $S0
+    if $I0 < 0 goto L1
+    str = substr str, 0, $I0
+  L1:
+
+    $P0 = split sep, str
+    .local string status_line
+    status_line = shift $P0
+    $I0 = index status_line, " "
+    if $I0 < 0 goto L2
+    $S0 = substr status_line, 0, $I0
+    $P1 = box $S0
+    setattribute response, 'protocol', $P1
+    $I1 = $I0 + 1
+    $I0 = index status_line, " ", $I1
+    if $I0 < 0 goto L2
+    $I2 = $I0 - $I1
+    $S0 = substr status_line, $I1, $I2
+    $P1 = box $S0
+    setattribute response, 'code', $P1
+    inc $I0
+    $S0 = substr status_line, $I0
+    $P1 = box $S0
+    setattribute response, 'message', $P1
+
+    $P3 = new ['HTTP';'Headers']
+  L3:
+    unless $P0 goto L4
+    $S0 = shift $P0
+    $I0 = index $S0, ": "
+    if $I0 < 0 goto L3
+    $S1 = substr $S0, 0, $I0
+    $I0 += 2
+    $S2 = substr $S0, $I0
+    $P3[$S1] = $S2
+    goto L3
+  L4:
+    setattribute response, 'headers', $P3
+
+    $I0 = length str
+    .return ($I0)
+  L2:
+    .return (0)
+.end
+
+.sub '_parse_response_content' :method
+    .param pmc response
+    .param string str
+    $I0 = index str, "\r\n\r\n"
+    if $I0 < 0 goto L1
+    $I0 += 4
+    goto L2
+  L1:
+    $I0 = index str, "\n\n"
+    if $I0 < 0 goto L3
+    $I0 += 2
+  L2:
+    $S0 = substr str, $I0
+    $P0 = box $S0
+    setattribute response, 'content', $P0
+  L3:
+.end
+
+=item request
+
+=cut
+
+.sub 'request' :method
+    .param pmc request
+    .param pmc proxy
+
+    .local string method
+    method = request.'method'()
+    .local pmc url
+    url = request.'uri'()
+    .local string host, port, fullpath
+    if null proxy goto L1
+    # proxy is an URL to an HTTP server which will proxy this request
+    host = proxy.'host'()
+    port = proxy.'port'()
+    unless method == 'CONNECT' goto L3
+    fullpath = url.'host'()
+    fullpath .= ':'
+    $S0 = url.'port'()
+    fullpath .= $S0
+    goto L2
+  L3:
+    fullpath = url
+    goto L2
+  L1:
+    host = url.'host'()
+    port = url.'port'()
+    fullpath = url.'path_query'()
+    $I0 = index fullpath, '/'
+    if $I0 == 0 goto L2
+    fullpath = '/' . fullpath
+  L2:
+
+    # connect to remote site
+    .local pmc sock
+    sock = self.'_new_socket'(host, port)
+
+    .local pmc request_headers
+    request_headers = request.'headers'()
+    self.'_fixup_header'(request_headers, url, proxy)
+
+    .local pmc ua
+    ua = self.'ua'()
+    $S0 = _format_request(method, fullpath, request_headers)
+    sock.'send'($S0)
+
+    .local string content
+    content = request.'content'()
+    unless content goto L11
+    .local int content_length
+    content_length = length content
+    $I0 = 0
+  L12:
+    unless $I0 < content_length goto L11
+    $S0 = substr content, $I0, 8192
+    $I1 = sock.'send'($S0)
+    $I0 += $I1
+    $N0 = $I0 / content_length
+    goto L12
+  L11:
+
+    .local pmc response
+    response = new ['HTTP';'Response']
+    .local pmc buf
+    buf = new 'StringBuilder'
+    .local int header_length
+    content_length = 0
+  L21:
+    ua.'progress'('tick', request)
+    $S0 = sock.'recv'()
+    if $S0 == '' goto L22
+    push buf, $S0
+    header_length = self.'_parse_response_headers'(response, buf)
+    $I0 = response.'is_success'()
+    unless $I0 goto L22
+    $S0 = response.'get_header'('Content-Length')
+    if $S0 == '' goto L21
+    content_length = $S0
+  L23:
+    $I0 = buf.'get_string_length'()
+    $I0 -= header_length
+    $N0 = $I0 / content_length
+    ua.'progress'($N0, request)
+    $S0 = sock.'recv'()
+    if $S0 == '' goto L22
+    push buf, $S0
+    goto L23
+  L22:
+    sock.'close'()
+    self.'_parse_response_content'(response, buf)
+    .return (response)
+.end
+
+=back
+
+=head1 AUTHOR
+
+Francois Perrad
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/runtime/parrot/library/LWP/UserAgent.pir (from r47544, trunk/runtime/parrot/library/LWP/UserAgent.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/runtime/parrot/library/LWP/UserAgent.pir	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/runtime/parrot/library/LWP/UserAgent.pir)
@@ -0,0 +1,554 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+LWP - The World-Wide Web library for Parrot
+
+=head2 DESCRIPTION
+
+Simplified port of LWP (version 5.834)
+see http://search.cpan.org/~gaas/libwww-perl/
+
+=head3 Class LWP;UserAgent
+
+=over 4
+
+=cut
+
+.namespace ['LWP';'UserAgent']
+.loadlib 'io_ops'
+
+.sub '' :init :load :anon
+    load_bytecode 'URI.pbc'
+    load_bytecode 'HTTP/Message.pbc'
+    load_bytecode 'LWP/Protocol.pbc'
+    $P0 = newclass ['LWP';'UserAgent']
+    $P0.'add_attribute'('def_headers')
+    $P0.'add_attribute'('show_progress')
+    $P0.'add_attribute'('progress_start')
+    $P0.'add_attribute'('progress_lastp')
+    $P0.'add_attribute'('progress_ani')
+    $P0.'add_attribute'('max_redirect')
+    $P0.'add_attribute'('proxy')
+    $P0.'add_attribute'('no_proxy')
+    .globalconst int RC_MOVED_PERMANENTLY = 301
+    .globalconst int RC_FOUND = 302
+    .globalconst int RC_SEE_OTHER = 303
+    .globalconst int RC_TEMPORARY_REDIRECT = 307
+    .globalconst int RC_UNAUTHORIZED = 401
+    .globalconst int RC_PROXY_AUTHENTICATION_REQUIRED = 407
+    .globalconst int RC_NOT_IMPLEMENTED = 501
+.end
+
+.sub 'init' :vtable :method
+    $P0 = new ['HTTP';'Headers']
+    $P0['User-Agent'] = 'libwww-parrot'
+    setattribute self, 'def_headers', $P0
+    $P0 = box 7
+    setattribute self, 'max_redirect', $P0
+    $P0 = new 'Hash'
+    setattribute self, 'proxy', $P0
+    $P0 = new 'ResizableStringArray'
+    setattribute self, 'no_proxy', $P0
+.end
+
+.sub 'send_request' :method
+    .param pmc request
+    .local string method
+    method = request.'method'()
+    .local pmc url
+    url = request.'uri'()
+    .local string scheme
+    scheme = url.'scheme'()
+    self.'progress'('begin', request)
+    .local pmc proxy
+    proxy = request.'proxy'()
+    if null proxy goto L1
+    scheme = proxy.'scheme'()
+  L1:
+    .local pmc protocol, response
+    $P0 =get_hll_global ['LWP';'Protocol'], 'create'
+    protocol = $P0(scheme, self)
+    unless null protocol goto L2
+    response = _new_response(request, RC_NOT_IMPLEMENTED, 'Not Implemented')
+    goto L3
+  L2:
+    response = protocol.'request'(request, proxy)
+    setattribute response, 'request', request
+    $P0 = get_hll_global ['HTTP';'Date'], 'time2str'
+    $I0 = time
+    $S0 = $P0($I0)
+    response.'push_header'('Client-Date', $S0)
+  L3:
+    self.'progress'('end', response)
+    .return (response)
+.end
+
+.sub 'prepare_request' :method
+    .param pmc request
+    $P0 = request.'method'()
+    unless null $P0 goto L1
+    die "Method missing"
+  L1:
+    $P0 = request.'uri'()
+    unless null $P0 goto L2
+    die "URL missing"
+  L2:
+    $S0 = $P0.'scheme'()
+    unless $S0 == '' goto L3
+    die "URL must be absolute"
+  L3:
+    self.'_need_proxy'(request)
+    $P0 = getattribute self, 'def_headers'
+    $P1 = iter $P0
+  L4:
+    unless $P1 goto L5
+    $S0 = shift $P1
+    $S1 = $P0[$S0]
+    request.'push_header'($S0, $S1)
+    goto L4
+  L5:
+.end
+
+.sub 'simple_request' :method
+    .param pmc request
+    unless null request goto L1
+    die "No request object passed in"
+  L1:
+    $I0 = isa request, ['HTTP';'Request']
+    if $I0 goto L2
+    die "You need a ['HTTP';'Request']"
+  L2:
+    self.'prepare_request'(request)
+    .tailcall self.'send_request'(request)
+.end
+
+.sub 'request' :method
+    .param pmc request
+    .param pmc previous         :optional
+    .param int has_previous     :opt_flag
+
+    .local pmc response
+    response = self.'simple_request'(request)
+    unless has_previous goto L1
+    response.'previous'(previous)
+  L1:
+
+    .local int redirect
+    $P0 = response.'redirect'()
+    redirect = elements $P0
+    .local int max_redirect
+    $P0 = getattribute self, 'max_redirect'
+    max_redirect = $P0
+    unless redirect >= max_redirect goto L2
+    $S0 = 'Redirect loop detected (max_redirect = '
+    $S1 = max_redirect
+    $S0 .= $S1
+    $S0 .= ')'
+    response.'push_header'('Client-Warning', $S0)
+    .return (response)
+  L2:
+
+    .local int code
+    code = response.'code'()
+
+    if code == RC_MOVED_PERMANENTLY goto L3
+    if code == RC_FOUND goto L3
+    if code == RC_SEE_OTHER goto L3
+    if code == RC_TEMPORARY_REDIRECT goto L3
+    goto L4
+  L3:
+    .local pmc referral
+    referral = clone request
+    # These headers should never be forwarded
+    referral.'remove_header'('Host')
+    referral.'remove_header'('Cookie')
+
+    # work in progress
+
+    .local string referral_uri
+    referral_uri = response.'get_header'('Location')
+    $P0 = get_hll_global ['URI'], 'new_from_string'
+    $P1 = $P0(referral_uri)
+    $S0 = $P1.'scheme'()
+    unless $S0 == '' goto L5
+    $P2 = new 'StringBuilder'
+    $P3 = request.'uri'()
+    $S0 = $P3.'scheme'()
+    push $P2, $S0
+    push $P2, '://'
+    $S0 = request.'get_header'('Host')
+    push $P2, $S0
+    push $P2, referral_uri
+    $P1 = $P0($P2)
+  L5:
+    setattribute referral, 'uri', $P1
+
+    # work in progress
+
+    $I0 = self.'redirect_ok'(referral, response)
+    if $I0 goto L6
+    .return (response)
+  L6:
+    .tailcall self.'request'(referral, response)
+
+  L4:
+    .local int proxy
+    proxy = 0
+    .local string ch_header
+    ch_header = 'WWW-Authenticate'
+    if code == RC_UNAUTHORIZED goto L11
+    proxy = 1
+    ch_header = 'Proxy-Authenticate'
+    if code == RC_PROXY_AUTHENTICATION_REQUIRED goto L11
+    goto L12
+  L11:
+    .local string challenge
+    challenge = response.'get_header'(ch_header)
+    unless challenge == '' goto L13
+    response.'push_header'('Client-Warning', 'Missing Authenticate header')
+    .return (response)
+  L13:
+
+    # work in progress
+    print "# "
+    say challenge
+
+  L12:
+    .return (response)
+.end
+
+=item get
+
+=cut
+
+.sub 'get' :method
+    .param pmc args :slurpy
+    .param pmc kv :slurpy :named
+    .local pmc request
+    $P0 = get_hll_global ['HTTP';'Request'], 'GET'
+    request = $P0(args :flat, kv :flat :named)
+    .tailcall self.'request'(request)
+.end
+
+=item head
+
+=cut
+
+.sub 'head' :method
+    .param pmc args :slurpy
+    .param pmc kv :slurpy :named
+    .local pmc request
+    $P0 = get_hll_global ['HTTP';'Request'], 'HEAD'
+    request = $P0(args :flat, kv :flat :named)
+    .tailcall self.'request'(request)
+.end
+
+=item post
+
+=cut
+
+.sub 'post' :method
+    .param pmc args :slurpy
+    .param pmc kv :slurpy :named
+    .local pmc request
+    $P0 = get_hll_global ['HTTP';'Request'], 'POST'
+    request = $P0(args :flat, kv :flat :named)
+    .tailcall self.'request'(request)
+.end
+
+=item put
+
+=cut
+
+.sub 'put' :method
+    .param pmc args :slurpy
+    .param pmc kv :slurpy :named
+    .local pmc request
+    $P0 = get_hll_global ['HTTP';'Request'], 'PUT'
+    request = $P0(args :flat, kv :flat :named)
+    .tailcall self.'request'(request)
+.end
+
+=item delete
+
+=cut
+
+.sub 'delete' :method
+    .param pmc args :slurpy
+    .param pmc kv :slurpy :named
+    .local pmc request
+    $P0 = get_hll_global ['HTTP';'Request'], 'DELETE'
+    request = $P0(args :flat, kv :flat :named)
+    .tailcall self.'request'(request)
+.end
+
+.sub 'progress' :method
+    .param string status
+    .param pmc msg
+    $P0 = getattribute self, 'show_progress'
+    if null $P0 goto L1
+    unless $P0 goto L1
+    unless status == 'begin' goto L2
+    printerr "** "
+    $P0 = getattribute msg, 'method'
+    printerr $P0
+    printerr " "
+    $P0 = getattribute msg, 'uri'
+    printerr $P0
+    printerr " ==> "
+    $N1 = time
+    $P0 = box $N1
+    setattribute self, 'progress_start', $P0
+    $P0 = box ''
+    setattribute self, 'progress_lastp', $P0
+    $P0 = box 0
+    setattribute self, 'progress_ani', $P0
+    goto L1
+  L2:
+    unless status == 'end' goto L3
+    $P0 = getattribute self, 'progress_start'
+    $N1 = $P0
+    $N2 = time
+    null $P0
+    setattribute self, 'progress_start', $P0
+    setattribute self, 'progress_lastp', $P0
+    setattribute self, 'progress_ani', $P0
+    $S0 = msg.'status_line'()
+    printerr $S0
+    $N0 =$N2 - $N1
+    $I0 = $N0
+    unless $I0 goto L4
+    printerr " ("
+    printerr $I0
+    printerr "s)"
+  L4:
+    printerr "\n"
+    goto L1
+  L3:
+    unless status == 'tick' goto L5
+    $P0 = getattribute self, 'progress_ani'
+    inc $P0
+    $P0 %= 4
+    $P1 = split '', '-\|/'
+    $S0 = $P1[$P0]
+    printerr $S0
+    printerr "\b"
+    goto L1
+  L5:
+    $N0 = status
+    $N0 *= 100
+    $P0 = new 'FixedFloatArray'
+    set $P0, 1
+    $P0[0] = $N0
+    $S1 = sprintf '%3.0f%%', $P0
+    $P0 = getattribute self, 'progress_lastp'
+    $S0 = $P0
+    if $S0 == $S1 goto L1
+    set $P0, $S1
+    printerr $S1
+    printerr "\b\b\b\b"
+  L1:
+.end
+
+.sub 'redirect_ok' :method
+    .param pmc new_request
+    .param pmc response
+    $P0 = response.'request'()
+    $S0 = $P0.'method'()
+    if $S0 == 'GET' goto L1
+    if $S0 == 'HEAD' goto L1
+    .return (0)
+  L1:
+    # work in progress
+    .return (1)
+.end
+
+=item max_redirect
+
+=cut
+
+.sub 'max_redirect' :method
+    .param pmc val
+    setattribute self, 'max_redirect', val
+.end
+
+=item show_progress
+
+=cut
+
+.sub 'show_progress' :method
+    .param pmc val
+    setattribute self, 'show_progress', val
+.end
+
+=item agent
+
+=cut
+
+.sub 'agent' :method
+    .param string val
+    $P0 = getattribute self, 'def_headers'
+    $P0['User-Agent'] = val
+.end
+
+.sub '_need_proxy' :method
+    .param pmc req
+    $P0 = req.'proxy'()
+    unless null $P0 goto L1
+    .local pmc uri
+    uri = req.'uri'()
+    .local string scheme
+    scheme = uri.'scheme'()
+    $P0 = getattribute self, 'proxy'
+    .local string proxy
+    proxy = $P0[scheme]
+    unless proxy goto L1
+    .local string host
+    host = uri.'host'()
+    $P0 = getattribute self, 'no_proxy'
+    $P1 = iter $P0
+  L2:
+    unless $P1 goto L3
+    $S0 = shift $P1
+    $I0 = index host, $S0
+    if $I0 < 0 goto L2
+    goto L1
+  L3:
+    $P0 = get_hll_global ['URI'], 'new_from_string'
+    $P0 = $P0(proxy)
+    req.'proxy'($P0)
+  L1:
+.end
+
+=item env_provy
+
+=cut
+
+.sub 'env_proxy' :method
+    $P0 = new 'Env'
+    $P1 = iter $P0
+  L1:
+    unless $P1 goto L2
+    $S0 = shift $P1
+    $S1 = downcase $S0
+    $I0 = index $S1, '_proxy'
+    if $I0 < 0 goto L1
+    $S2 = $P0[$S0]
+    unless $S1 == 'no_proxy' goto L3
+    $P2 = split ',', $S2
+    $P3 = iter $P2
+  L4:
+    unless $P3 goto L1
+    $S0 = shift $P3
+    $S0 = trim($S0)
+    self.'no_proxy'($S0)
+    goto L4
+  L3:
+    $S3 = substr $S1, 0, $I0
+    # Ignore xxx_proxy variables if xxx isn't a supported protocol
+    $P11 = new 'Key'
+    set $P11, 'LWP'
+    $P12 = new 'Key'
+    set $P12, 'Protocol'
+    push $P11, $P12
+    $P13 = new 'Key'
+    set $P13, $S3
+    push $P11, $P13
+    $P10 = get_class $P11
+    if null $P10 goto L1
+    self.'proxy'($S3, $S2)
+    goto L1
+  L2:
+.end
+
+.include 'cclass.pasm'
+
+.sub 'trim' :anon
+    .param string str
+    $I0 = length str
+    $I0 = find_not_cclass .CCLASS_WHITESPACE, str, 0, $I0
+    str = substr str, $I0
+    $I0 = length str
+  L1:
+    dec $I0
+    unless $I0 > 0 goto L2
+    $I1 = is_cclass .CCLASS_WHITESPACE, str, $I0
+    if $I1 != 0 goto L1
+  L2:
+    inc $I0
+    str = substr str, 0, $I0
+    .return (str)
+.end
+
+=item proxy
+
+=cut
+
+.sub 'proxy' :method
+    .param string scheme
+    .param string url
+    $P0 = getattribute self, 'proxy'
+    $P0[scheme] = url
+.end
+
+=item no_proxy
+
+=cut
+
+.sub 'no_proxy' :method
+    .param pmc args :slurpy
+    $I0 = elements args
+    if $I0 goto L1
+    $P0 = new 'ResizableStringArray'
+    setattribute self, 'no_proxy', $P0
+    goto L2
+  L1:
+    $P0 = getattribute self, 'no_proxy'
+  L3:
+    unless args goto L2
+    $S0 = shift args
+    push $P0, $S0
+    goto L3
+  L2:
+.end
+
+.sub '_new_response'
+    .param pmc request
+    .param pmc code
+    .param pmc message
+    .local pmc response
+    response = new ['HTTP';'Response']
+    setattribute response, 'code', code
+    setattribute response, 'message', message
+    setattribute response, 'request', request
+    $P0 = get_hll_global ['HTTP';'Date'], 'time2str'
+    $I0 = time
+    $S0 = $P0($I0)
+    response.'push_header'('Client-Date', $S0)
+    response.'push_header'('Client-Warning', "Internal response")
+    response.'push_header'('Content-Type', 'text/plain')
+    $S0 = code
+    $S0 .= ' '
+    $S1 = message
+    $S0 .= $S1
+    $S0 .= "\n"
+    $P0 = box $S0
+    setattribute response, 'content', $P0
+    .return (response)
+.end
+
+=back
+
+=head1 AUTHOR
+
+Francois Perrad
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gsoc_threads/runtime/parrot/library/PGE/Util.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/PGE/Util.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/PGE/Util.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -132,7 +132,10 @@
     message .= $S0
     message .= "\n"
   emit_message:
-    printerr message
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'(message)
 
     mob.'to'(pos)
     .return (mob)

Modified: branches/gsoc_threads/runtime/parrot/library/Stream/ParrotIO.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/Stream/ParrotIO.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/Stream/ParrotIO.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -56,7 +56,8 @@
     .param string mode
     .local pmc pio
 
-    open pio, name, mode
+    pio = new ['FileHandle']
+    pio.'open'(name, mode)
     assign self, pio
 .end
 
@@ -100,7 +101,7 @@
 
     bs = self."blockSize"()
     pio = self."source"()
-    read str, pio, bs
+    str = pio.'read'(bs)
     length $I0, str
     if $I0 > 0 goto OK
     self."close"()

Modified: branches/gsoc_threads/runtime/parrot/library/TAP/Harness.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/TAP/Harness.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/TAP/Harness.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -226,7 +226,7 @@
     .param pmc parser
     $P0 = parser.'delete_spool'()
     if null $P0 goto L1
-    close $P0
+    $P0.'close'()
   L1:
 .end
 

Modified: branches/gsoc_threads/runtime/parrot/library/TAP/Parser.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/TAP/Parser.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/TAP/Parser.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -908,14 +908,14 @@
     push_eh _handler
     $P0.'open'(filename, 'r')
     pop_eh
-    $S0 = readline $P0
+    $S0 = $P0.'readline'()
     $I0 = index $S0, '#!'
     unless $I0 == 0 goto L1
-    close $P0
+    $P0.'close'()
     $S0 = _get_exec($S0)
     .tailcall self.'exec'($S0, filename)
   L1:
-    seek $P0, 0, 0
+    $P0.'seek'(0, 0)
     setattribute self, 'stream', $P0
     .return ()
   _handler:
@@ -1010,7 +1010,7 @@
     st = box 'INIT'
     .lex 'state', st
   L2:
-    $S0 = readline stream
+    $S0 = stream.'readline'()
     if $S0 == '' goto L3
     $S0 = chomp($S0)
     .local pmc token
@@ -1034,7 +1034,7 @@
     .yield (token)
     goto L2
   L3:
-    close stream
+    stream.'close'()
     $I0 = can stream, 'exit_status'
     unless $I0 goto L7
     $I0 = stream.'exit_status'()
@@ -1085,9 +1085,12 @@
     set st, $S0
     goto L5
   L2:
-    printerr "Unhandled token type: "
-    printerr type
-    printerr "\n"
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("Unhandled token type: ")
+    $P1.'print'(type)
+    $P1.'print'("\n")
   L5:
 .end
 

Modified: branches/gsoc_threads/runtime/parrot/library/Test/Builder/Output.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/Test/Builder/Output.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/Test/Builder/Output.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -57,14 +57,18 @@
 	.local pmc output
 	.local pmc diag_output
 
+        .include 'stdio.pasm'
+
 	output = args['output']
 	unless null output goto CHECK_ERROR_OUTPUT
-	getstdout output
+        $P0 = getinterp
+        output = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
 
   CHECK_ERROR_OUTPUT:
 	diag_output = args['diag_output']
 	unless null diag_output goto SET_OUTPUT
-	getstderr diag_output
+        $P0 = getinterp
+        diag_output = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
 
   SET_OUTPUT:
 	setattribute self, "output", output
@@ -144,7 +148,7 @@
     if i == 0 goto LINE_OK
   	line       = lines[i]
   	first_char = substr line, 0, 1
-	eq_str first_char, '#', LINE_OK
+	if first_char == '#' goto LINE_OK
 
 	.local string new_line
 	new_line = '# '
@@ -184,7 +188,7 @@
 
 	.local string first_char
 	first_char = substr message, 0, 1
-	eq_str first_char, '#', WRITE_MESSAGE
+	if first_char == '#' goto WRITE_MESSAGE
 
 	first_char = '# '
 	concat first_char, message

Modified: branches/gsoc_threads/runtime/parrot/library/URI.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/URI.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/URI.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -280,16 +280,45 @@
     $P0 = subclass ['URI';'_generic'], ['URI';'_server']
 .end
 
+=item userinfo
+
+=cut
+
+.sub 'userinfo' :method
+    $S0 = self.'authority'()
+    $I0 = index $S0, '@'
+    if $I0 < 0 goto L1
+    $S0 = substr $S0, 0, $I0
+    .return ($S0)
+  L1:
+    .return ('')
+.end
+
 =item host
 
 =cut
 
 .sub 'host' :method
     $S0 = self.'authority'()
-    $I0 = index $S0, ':'
+    $I0 = index $S0, '@'
     if $I0 < 0 goto L1
-    $S0 = substr $S0, 0, $I0
+    inc $I0
+    $S0 = substr $S0, $I0
   L1:
+    .local int pos, lastpos
+    lastpos = length $S0
+    pos = 0
+  L2:
+    pos = index $S0, ':', pos
+    if pos < 0 goto L3
+    $I1 = pos
+    inc pos
+    $I0 = is_cclass .CCLASS_NUMERIC, $S0, pos
+    unless $I0 goto L2
+    $I0 = find_not_cclass .CCLASS_NUMERIC, $S0, pos, lastpos
+    unless $I0 == lastpos goto L2
+    $S0 = substr $S0, 0, $I1
+  L3:
     .return ($S0)
 .end
 
@@ -301,8 +330,10 @@
     $S0 = self.'authority'()
     .local int pos, lastpos
     lastpos = length $S0
-    pos = index $S0, ':'
-    if pos < 0 goto L1
+    pos = 0
+  L1:
+    pos = index $S0, ':', pos
+    if pos < 0 goto L2
     inc pos
     $I0 = is_cclass .CCLASS_NUMERIC, $S0, pos
     unless $I0 goto L1
@@ -310,7 +341,7 @@
     unless $I0 == lastpos goto L1
     $S1 = substr $S0, pos
     .return ($S1)
-  L1:
+  L2:
     .tailcall self.'default_port'()
 .end
 

Modified: branches/gsoc_threads/runtime/parrot/library/distutils.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/distutils.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/distutils.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -132,6 +132,31 @@
 
 =head2 EXAMPLES
 
+    $ cat hello.pir
+    .sub 'main' :main
+        say 'hello world!'
+    .end
+
+    $ cat setup.pir
+    .sub 'main' :main
+        .param pmc args
+        $S0 = shift args
+        load_bytecode 'distutils.pbc'
+
+        $P0 = new 'Hash'
+        $P1 = new 'Hash'
+        $P1['hello.pbc'] = 'hello.pir'
+        $P0['pbc_pir'] = $P1
+        $P2 = new 'Hash'
+        $P2['parrot-hello'] = 'hello.pbc'
+        $P0['installable_pbc'] = $P2
+        .tailcall setup(args :flat, $P0 :flat :named)
+    .end
+
+    $ parrot setup.pir
+    $ parrot setup.pir install
+    $ parrot setup clean
+
 L<http://github.com/fperrad/parrot-MT19937/blob/master/setup.pir>
 
 L<http://github.com/fperrad/markdown/blob/master/setup.pir>
@@ -172,6 +197,9 @@
 
 =cut
 
+.loadlib 'io_ops' # workaround TT #1663
+.loadlib 'sys_ops'
+
 .sub '__onload' :load :init :anon
     load_bytecode 'osutils.pbc'
     $P0 = new 'Hash'
@@ -340,7 +368,7 @@
     run_step('usage', kv :flat :named)
   L12:
     pop_eh
-    end
+    .return ()
   _handler:
     .local pmc ex
     .get_results (ex)
@@ -1057,8 +1085,6 @@
     .param string cflags
     .param string ldflags
     mkpath('dynext', 1 :named('verbose'))
-    .local pmc cores
-    cores = get_cores()
     .local string load_ext
     load_ext = get_load_ext()
     $P0 = iter hash
@@ -1067,18 +1093,10 @@
     .local string ops, src
     ops = shift $P0
     src = hash[ops]
-    $P1 = iter cores
-  L3:
-    unless $P1 goto L4
-    .local string core, suffix
-    core = shift $P1
-    suffix = cores[core]
-    $S0 = _mk_path_dynops(ops, suffix, load_ext)
+    $S0 = _mk_path_dynops(ops, load_ext)
     $I0 = newer($S0, src)
-    if $I0 goto L3
-    __build_dynops(src, ops, core, suffix, cflags, ldflags)
-    goto L3
-  L4:
+    if $I0 goto L1
+    __build_dynops(src, ops, cflags, ldflags)
     goto L1
   L2:
 .end
@@ -1086,31 +1104,24 @@
 .sub '__build_dynops' :anon
     .param string src
     .param string ops
-    .param string core
-    .param string suffix
     .param string cflags
     .param string ldflags
     .local pmc config
     config = get_config()
     .local string cmd
-    cmd = config['perl']
-    cmd .= " "
-    $S0 = get_tool('build/ops2c.pl')
-    cmd .= $S0
-    cmd .= " "
-    cmd .= core
+    cmd = get_executable('ops2c')
     cmd .= " --dynamic "
     cmd .= src
     system(cmd, 1 :named('verbose'))
 
     $S0 = config['o']
-    $S1 = _mk_path_gen_dynops(src, ops, suffix, $S0)
-    $S2 = _mk_path_gen_dynops(src, ops, suffix, '.c')
+    $S1 = _mk_path_gen_dynops(src, ops, $S0)
+    $S2 = _mk_path_gen_dynops(src, ops, '.c')
     __compile_cc($S1, $S2, cflags)
 
     .local string dynext
     $S0 = config['load_ext']
-    dynext = _mk_path_dynops(ops, suffix, $S0)
+    dynext = _mk_path_dynops(ops, $S0)
     cmd = config['ld']
     cmd .= " "
     $S0 = config['ld_out']
@@ -1118,7 +1129,7 @@
     cmd .= dynext
     cmd .= " "
     $S0 = config['o']
-    $S0 = _mk_path_gen_dynops(src, ops, suffix, $S0)
+    $S0 = _mk_path_gen_dynops(src, ops, $S0)
     cmd .= $S0
     cmd .= " "
     $S0 = get_ldflags()
@@ -1176,10 +1187,8 @@
 
 .sub '_mk_path_dynops' :anon
     .param string ops
-    .param string suffix
     .param string load_ext
     $S0 = "dynext/" . ops
-    $S0 .= suffix
     $S0 .= load_ext
     .return ($S0)
 .end
@@ -1187,22 +1196,14 @@
 .sub '_mk_path_gen_dynops' :anon
     .param string src
     .param string ops
-    .param string suffix
     .param string ext
     $S0 = dirname(src)
     $S0 .= "/"
     $S0 .= ops
-    $S0 .= suffix
     $S0 .= ext
     .return ($S0)
 .end
 
-.sub 'get_cores'
-    $P0 = new 'Hash'
-    $P0['C'] = ''
-    .return ($P0)
-.end
-
 =item dynpmc
 
 hash
@@ -1711,8 +1712,6 @@
 
 .sub 'clean_dynops'
     .param pmc hash
-    .local pmc cores
-    cores = get_cores()
     .local string load_ext, obj
     load_ext = get_load_ext()
     obj = get_obj()
@@ -1722,22 +1721,14 @@
     .local string ops, src
     ops = shift $P0
     src = hash[ops]
-    $P1 = iter cores
-  L3:
-    unless $P1 goto L4
-    .local string core, suffix
-    core = shift $P1
-    suffix = cores[core]
-    $S0 = _mk_path_dynops(ops, suffix, load_ext)
+    $S0 = _mk_path_dynops(ops, load_ext)
     unlink($S0, 1 :named('verbose'))
-    $S0 = _mk_path_gen_dynops(src, ops, suffix, '.c')
+    $S0 = _mk_path_gen_dynops(src, ops, '.c')
     unlink($S0, 1 :named('verbose'))
-    $S0 = _mk_path_gen_dynops(src, ops, suffix, '.h')
+    $S0 = _mk_path_gen_dynops(src, ops, '.h')
     unlink($S0, 1 :named('verbose'))
-    $S0 = _mk_path_gen_dynops(src, ops, suffix, obj)
+    $S0 = _mk_path_gen_dynops(src, ops, obj)
     unlink($S0, 1 :named('verbose'))
-    goto L3
-  L4:
     goto L1
   L2:
 .end
@@ -2152,9 +2143,10 @@
     set $P0, 1
     $P0[0] = archive
     push contents, $P0
-    load_bytecode 'LWP.pir'
+    load_bytecode 'LWP/UserAgent.pir'
     .local pmc ua, response
     ua = new ['LWP';'UserAgent']
+    ua.'env_proxy'()
     ua.'show_progress'(1)
     $S0 = kv['smolder_url']
     response = ua.'post'($S0, contents :flat, 'form-data' :named('Content-Type'), 'close' :named('Connection'))
@@ -2406,26 +2398,17 @@
 .sub 'get_install_dynops' :anon
     .param pmc files
     .param pmc hash
-    .local string libdir, load_ext, ops, suffix
+    .local string libdir, load_ext, ops
     libdir = get_libdir()
     load_ext = get_load_ext()
-    .local pmc cores
-    cores = get_cores()
     $P0 = iter hash
   L1:
     unless $P0 goto L2
     ops = shift $P0
-    $P1 = iter cores
-  L3:
-    unless $P1 goto L4
-    $S0 = shift $P1
-    suffix = cores[$S0]
-    $S1 = _mk_path_dynops(ops, suffix, load_ext)
+    $S1 = _mk_path_dynops(ops, load_ext)
     $S2 = libdir . "/"
     $S2 .= $S1
     files[$S2] = $S1
-    goto L3
-  L4:
     goto L1
   L2:
 .end
@@ -3724,7 +3707,8 @@
 .end
 
 .sub 'get_timestamp' :anon
-    $P0 = open 'date --rfc-2822', 'rp'
+    $P0 = new 'FileHandle'
+    $P0.'open'('date --rfc-2822', 'rp')
     $S0 = $P0.'readline'()
     $P0.'close'()
     $S0 = chopn $S0, 1
@@ -4526,7 +4510,8 @@
     system(cmd, verbose :named('verbose'), 1 :named('ignore_error'))
     unlink(srcname, verbose :named('verbose'))
 
-    $P0 = open exename, 'rp'
+    $P0 = new 'FileHandle'
+    $P0.'open'(exename, 'rp')
     $S0 = $P0.'readall'()
     $P0.'close'()
 
@@ -4563,6 +4548,36 @@
     .return ($I0)
 .end
 
+=item runtests
+
+=cut
+
+.sub 'runtests' :multi()
+    .param pmc files :slurpy
+    .param pmc opts :slurpy :named
+    load_bytecode 'TAP/Harness.pbc'
+    .local pmc harness
+    harness = new ['TAP';'Harness']
+    harness.'process_args'(opts)
+    .local pmc aggregate
+    aggregate = harness.'runtests'(files)
+    $I0 = aggregate.'has_errors'()
+    unless $I0 goto L1
+    $I0 = exists opts['ignore_error']
+    unless $I0 goto L2
+    $I0 = opts['ignore_error']
+    if $I0 goto L1
+  L2:
+    die "test fails"
+  L1:
+.end
+
+.sub 'runtests' :multi(ResizableStringArray,Hash)
+    .param pmc array
+    .param pmc hash
+    .tailcall runtests(array :flat, hash :flat :named)
+.end
+
 =back
 
 =head1 AUTHOR

Modified: branches/gsoc_threads/runtime/parrot/library/osutils.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/osutils.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/osutils.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -45,6 +45,7 @@
     .return ($I0)
 .end
 
+.loadlib 'io_ops'
 .include 'stat.pasm'
 
 .sub 'file_exists'

Modified: branches/gsoc_threads/runtime/parrot/library/parrotlib.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/parrotlib.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/parrotlib.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -127,32 +127,46 @@
 .sub dynext_location
     .param string request
     .param string ext
+
+    .local pmc    os
     .local string name
 
+    $P0 = loadlib 'os'
+    os = new ['OS']
+
     name = request
-    stat $I0, name, 0
-    if $I0 goto END
+    push_eh FILE_NOT_FOUND_1
+    # OS.stat throws on file not found
+    os.'stat'(name)
+    goto END
 
+FILE_NOT_FOUND_1:
     name = concat request, ext
-    stat $I0, name, 0
-    if $I0 goto END
+    push_eh FILE_NOT_FOUND_2
+    os.'stat'(name)
+    goto END
 
+FILE_NOT_FOUND_2:
     name = concat "runtime/parrot/dynext/", request
-    stat $I0, name, 0
-    if $I0 goto END
+    push_eh FILE_NOT_FOUND_3
+    os.'stat'(name)
+    goto END
 
+FILE_NOT_FOUND_3:
     name = concat "runtime/parrot/dynext/", request
     name = concat name, ext
-    stat $I0, name, 0
-    if $I0 goto END
+    push_eh FILE_NOT_FOUND_4
+    os.'stat'(name)
+    goto END
 
+FILE_NOT_FOUND_4:
     # file not found, give the OS a chance to locate it
     name = concat request, ext
+    .return (name)
 
 END:
-    .begin_return
-    .set_return name
-    .end_return
+    pop_eh
+    .return (name)
 .end
 
 
@@ -187,10 +201,18 @@
     path = $P0
 
     $S0 = concat path, name
-    stat $I0, $S0, 0
-    if $I0 goto OK
+    $P0 = loadlib 'os'
+    $P0 = new ['OS']
+    push_eh FILE_NOT_FOUND
+        # OS.stat throws on file not found
+        $P0.'stat'($S0)
+    pop_eh
+    goto END
+
+FILE_NOT_FOUND:
     null $S0
-OK:
+
+END:
     .begin_return
     .set_return $S0
     .end_return

Modified: branches/gsoc_threads/runtime/parrot/library/pcre.pir
==============================================================================
--- branches/gsoc_threads/runtime/parrot/library/pcre.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/runtime/parrot/library/pcre.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -45,6 +45,7 @@
 
 =cut
 
+.loadlib 'sys_ops'
 .include "sysinfo.pasm"
 
 .sub init

Modified: branches/gsoc_threads/src/call/context.c
==============================================================================
--- branches/gsoc_threads/src/call/context.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/call/context.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -518,7 +518,7 @@
     ARGIN_NULLOK(PMC *old))
 {
     ASSERT_ARGS(Parrot_alloc_context)
-    PMC            *pmcctx = Parrot_pmc_new(interp, enum_class_CallContext);
+    PMC * const pmcctx = Parrot_pmc_new(interp, enum_class_CallContext);
 
     allocate_registers(interp, pmcctx, number_regs_used);
     init_context(interp, pmcctx, old);
@@ -544,7 +544,7 @@
 Parrot_pcc_allocate_empty_context(PARROT_INTERP, ARGIN_NULLOK(PMC *old))
 {
     ASSERT_ARGS(Parrot_pcc_allocate_empty_context)
-    PMC            *pmcctx = Parrot_pmc_new(interp, enum_class_CallContext);
+    PMC * const pmcctx = Parrot_pmc_new(interp, enum_class_CallContext);
 
     init_context(interp, pmcctx, old);
 
@@ -622,8 +622,9 @@
 Parrot_clear_i(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_clear_i)
+    const UINTVAL regs_used = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_INT);
     UINTVAL i;
-    for (i = 0; i < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_INT); ++i)
+    for (i = 0; i < regs_used; ++i)
         REG_INT(interp, i) = 0;
 }
 
@@ -643,8 +644,9 @@
 Parrot_clear_s(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_clear_s)
+    const UINTVAL regs_used = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_STR);
     UINTVAL i;
-    for (i = 0; i < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_STR); ++i)
+    for (i = 0; i < regs_used; ++i)
         REG_STR(interp, i) = NULL;
 }
 
@@ -664,8 +666,9 @@
 Parrot_clear_p(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_clear_p)
+    const UINTVAL regs_used = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_PMC);
     UINTVAL i;
-    for (i = 0; i < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_PMC); ++i)
+    for (i = 0; i < regs_used; ++i)
         REG_PMC(interp, i) = PMCNULL;
 }
 
@@ -685,8 +688,9 @@
 Parrot_clear_n(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_clear_n)
+    const UINTVAL regs_used = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_NUM);
     UINTVAL i;
-    for (i = 0; i < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_NUM); ++i)
+    for (i = 0; i < regs_used; ++i)
         REG_NUM(interp, i) = 0.0;
 }
 

Modified: branches/gsoc_threads/src/debug.c
==============================================================================
--- branches/gsoc_threads/src/debug.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/debug.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -2481,8 +2481,7 @@
                                      " :unused040",
                                      " :optional",
                                      " :opt_flag",
-                                     " :named",
-                                     NULL
+                                     " :named"
         };
 
 
@@ -2503,7 +2502,7 @@
 
             /* Add flags, if we have any. */
             {
-                int flag_idx = 0;
+                unsigned int flag_idx = 0;
                 int flags = sig_value;
 
                 /* End when we run out of flags, off the end of flag_names, or
@@ -2511,10 +2510,12 @@
                  * 100 is just an estimate of all buf lengths added together.
                  */
                 while (flags && idx < sizeof (buf) - 100) {
-                    const char * const flag_string
-                                    = (specialop == 2  && STREQ(flag_names[flag_idx], " :flat"))
+                    const char * const flag_string =
+                            flag_idx < (sizeof flag_names / sizeof (char *))
+                                ? (specialop == 2  && STREQ(flag_names[flag_idx], " :flat"))
                                     ? " :slurpy"
-                                    : flag_names[flag_idx];
+                                    : flag_names[flag_idx]
+                                : (const char *) NULL;
 
                     if (! flag_string)
                         break;
@@ -3070,6 +3071,7 @@
 
 */
 
+PARROT_EXPORT
 void
 PDB_print(PARROT_INTERP, ARGIN(const char *command))
 {
@@ -3182,6 +3184,7 @@
 
 */
 
+PARROT_EXPORT
 void
 PDB_backtrace(PARROT_INTERP)
 {

Modified: branches/gsoc_threads/src/dynoplibs/Defines.in
==============================================================================
--- branches/gsoc_threads/src/dynoplibs/Defines.in	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/dynoplibs/Defines.in	Thu Jun 10 21:09:12 2010	(r47545)
@@ -2,6 +2,11 @@
     $(DYNEXT_DIR)/obscure_ops$(LOAD_EXT) \
     $(DYNEXT_DIR)/math_ops$(LOAD_EXT) \
     $(DYNEXT_DIR)/deprecated_ops$(LOAD_EXT) \
+    $(DYNEXT_DIR)/trans_ops$(LOAD_EXT) \
+    $(DYNEXT_DIR)/bit_ops$(LOAD_EXT) \
+    $(DYNEXT_DIR)/debug_ops$(LOAD_EXT) \
+    $(DYNEXT_DIR)/sys_ops$(LOAD_EXT) \
+    $(DYNEXT_DIR)/io_ops$(LOAD_EXT) \
 
 DYNOPLIBS_CLEANUPS = \
     src/dynoplibs/*.c \

Modified: branches/gsoc_threads/src/dynoplibs/Rules.in
==============================================================================
--- branches/gsoc_threads/src/dynoplibs/Rules.in	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/dynoplibs/Rules.in	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,6 +7,8 @@
     $(PARROT_H_HEADERS) \
     include/parrot/runcore_api.h
 
+#########################
+
 $(DYNEXT_DIR)/obscure_ops$(LOAD_EXT): src/dynoplibs/obscure_ops$(O) $(LIBPARROT)
 	$(LD) @ld_out@$@ src/dynoplibs/obscure_ops$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -17,23 +19,25 @@
 
 src/dynoplibs/obscure_ops.h: src/dynoplibs/obscure_ops.c
 
-src/dynoplibs/obscure_ops.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/obscure.ops
+src/dynoplibs/obscure_ops.c: src/dynoplibs/obscure.ops $(OPS2C)
+	$(OPS2C) --dynamic src/dynoplibs/obscure.ops --quiet
 
+#########################
 
 $(DYNEXT_DIR)/math_ops$(LOAD_EXT): src/dynoplibs/math_ops$(O) $(LIBPARROT)
 	$(LD) @ld_out@$@ src/dynoplibs/math_ops$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
 #IF(cygwin or hpux):	$(CHMOD) 0775 $@
 
-src/dynoplibs/math_ops.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/math.ops
+src/dynoplibs/math_ops.c: src/dynoplibs/math.ops $(OPS2C)
+	$(OPS2C) --dynamic src/dynoplibs/math.ops --quiet
 
 src/dynoplibs/math_ops$(O): $(DYNOP_O_DEPS) \
     src/dynoplibs/math_ops.c src/dynoplibs/math_ops.h
 
 src/dynoplibs/math_ops.h: src/dynoplibs/math_ops.c
 
+#########################
 
 $(DYNEXT_DIR)/deprecated_ops$(LOAD_EXT): src/dynoplibs/deprecated_ops$(O) $(LIBPARROT)
 	$(LD) @ld_out@$@ src/dynoplibs/deprecated_ops$(O) $(LINKARGS)
@@ -45,5 +49,81 @@
 
 src/dynoplibs/deprecated_ops.h: src/dynoplibs/deprecated_ops.c
 
-src/dynoplibs/deprecated_ops.c: src/dynoplibs/deprecated.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/deprecated.ops
+src/dynoplibs/deprecated_ops.c: src/dynoplibs/deprecated.ops $(OPS2C)
+	$(OPS2C) --dynamic src/dynoplibs/deprecated.ops --quiet
+
+#########################
+
+$(DYNEXT_DIR)/trans_ops$(LOAD_EXT): src/dynoplibs/trans_ops$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/trans_ops$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/trans_ops$(O): $(DYNOP_O_DEPS) \
+    src/dynoplibs/trans_ops.c src/dynoplibs/trans_ops.h
+
+src/dynoplibs/trans_ops.h: src/dynoplibs/trans_ops.c
+
+src/dynoplibs/trans_ops.c: src/dynoplibs/trans.ops $(OPS2C)
+	$(OPS2C) --dynamic src/dynoplibs/trans.ops --quiet
+
+#########################
+
+$(DYNEXT_DIR)/bit_ops$(LOAD_EXT): src/dynoplibs/bit_ops$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/bit_ops$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/bit_ops$(O): $(DYNOP_O_DEPS) \
+    src/dynoplibs/bit_ops.c src/dynoplibs/bit_ops.h
+
+src/dynoplibs/bit_ops.h: src/dynoplibs/bit_ops.c
+
+src/dynoplibs/bit_ops.c: src/dynoplibs/bit.ops $(OPS2C)
+	$(OPS2C) --dynamic src/dynoplibs/bit.ops --quiet
+
+#########################
+
+$(DYNEXT_DIR)/debug_ops$(LOAD_EXT): src/dynoplibs/debug_ops$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/debug_ops$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/debug_ops$(O): $(DYNOP_O_DEPS) \
+    src/dynoplibs/debug_ops.c src/dynoplibs/debug_ops.h
+
+src/dynoplibs/debug_ops.h: src/dynoplibs/debug_ops.c
+
+src/dynoplibs/debug_ops.c: src/dynoplibs/debug.ops $(OPS2C)
+	$(OPS2C) --dynamic src/dynoplibs/debug.ops --quiet
+
+#########################
+
+$(DYNEXT_DIR)/sys_ops$(LOAD_EXT): src/dynoplibs/sys_ops$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/sys_ops$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/sys_ops$(O): $(DYNOP_O_DEPS) \
+    src/dynoplibs/sys_ops.c src/dynoplibs/sys_ops.h
+
+src/dynoplibs/sys_ops.h: src/dynoplibs/sys_ops.c
+
+src/dynoplibs/sys_ops.c: src/dynoplibs/sys.ops $(OPS2C)
+	$(OPS2C) --dynamic src/dynoplibs/sys.ops --quiet
+
+#########################
+
+$(DYNEXT_DIR)/io_ops$(LOAD_EXT): src/dynoplibs/io_ops$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/io_ops$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/io_ops$(O): $(DYNOP_O_DEPS) \
+    src/dynoplibs/io_ops.c src/dynoplibs/io_ops.h
+
+src/dynoplibs/io_ops.h: src/dynoplibs/io_ops.c
+
+src/dynoplibs/io_ops.c: src/dynoplibs/io.ops $(OPS2C)
+	$(OPS2C) --dynamic src/dynoplibs/io.ops --quiet
+

Copied: branches/gsoc_threads/src/dynoplibs/bit.ops (from r47544, trunk/src/dynoplibs/bit.ops)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/dynoplibs/bit.ops	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/dynoplibs/bit.ops)
@@ -0,0 +1,542 @@
+/*
+ * $Id$
+** bit.ops
+*/
+
+BEGIN_OPS_PREAMBLE
+ /* Signed shift operator that is compatible with PMC shifts.  This is
+  * guaranteed to produce the same result as bitwise_left_shift_internal modulo
+  * word size, ignoring the fact that Parrot integers are always signed.  This
+  * usually gives the same answer regardless whether you shift PMC operands and
+  * then assign to an I-reg, or move the operands to I-regs and do the shift
+  * there -- except when the true result is between 2^{w-1} and 2^w (where w is
+  * the word size), in which case the high order bit is taken as the sign,
+  * giving a truncated result that is 2^w lower.
+  */
+#define bit_shift_left(number, bits) \
+    ((bits) >= 8*INTVAL_SIZE     ? 0                    \
+     : (bits) >= 0               ? (number) << (bits)   \
+     : (bits) > -8*INTVAL_SIZE   ? (number) >> -(bits)   \
+     : 0)
+
+END_OPS_PREAMBLE
+
+=head1 NAME
+
+bit.ops - Bitwise Opcodes Dynoplib
+
+=head1 DESCRIPTION
+
+Operations that deal with bits directly, either individually
+or in groups.
+
+The variant with an appended B<s> like B<bands> work on strings.
+
+=over 4
+
+=cut
+
+########################################
+
+=item B<band>(invar PMC, in INT)
+
+=item B<band>(invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<and> of the corresponding bits
+from $1 and $2.
+
+=item B<band>(invar PMC, invar PMC, in INT)
+
+=item B<band>(invar PMC, invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<and> of the corresponding bits
+from $2 and $3.
+
+=cut
+
+inline op band(invar PMC, in INT) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    const INTVAL b = a & $2;
+    VTABLE_set_integer_native(interp, $1, b);
+}
+
+inline op band(invar PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    const INTVAL b = VTABLE_get_integer(interp, $2);
+    VTABLE_set_integer_native(interp, $1, a & b);
+}
+
+inline op band(invar PMC, invar PMC, in INT) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    VTABLE_set_integer_native(interp, $1, a & $3);
+}
+
+inline op band(invar PMC, invar PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    const INTVAL b = VTABLE_get_integer(interp, $3);
+    VTABLE_set_integer_native(interp, $1, a & b);
+}
+
+=item B<bands>(invar PMC, in STR)
+
+=item B<bands>(invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<and> of the corresponding bits
+from $1 and $2.
+
+=item B<bands>(out STR, in STR, in STR)
+
+=item B<bands>(invar PMC, invar PMC, in STR)
+
+=item B<bands>(invar PMC, invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<and> of the corresponding bits
+from $2 and $3.
+
+=cut
+
+inline op bands(invar PMC, in STR) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, $2);
+    VTABLE_set_string_native(interp, $1, b);
+}
+
+inline op bands(invar PMC, invar PMC) :base_core {
+    STRING * a = VTABLE_get_string(interp, $1);
+    STRING * const b = VTABLE_get_string(interp, $2);
+    a = Parrot_str_bitwise_and(interp, a, b);
+    VTABLE_set_string_native(interp, $1, a);
+}
+
+inline op bands(out STR, in STR, in STR) :base_core {
+    $1 = Parrot_str_bitwise_and(interp, $2, $3);
+}
+
+inline op bands(invar PMC, invar PMC, in STR) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, $3);
+    VTABLE_set_string_native(interp, $1, b);
+}
+
+inline op bands(invar PMC, invar PMC, invar PMC) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = VTABLE_get_string(interp, $3);
+    STRING * const c = Parrot_str_bitwise_and(interp, a, b);
+    VTABLE_set_string_native(interp, $1, c);
+}
+
+########################################
+
+=item B<bor>(invar PMC, in INT)
+
+=item B<bor>(invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<or> of the corresponding bits
+from $1 and $2.
+
+=item B<bor>(invar PMC, invar PMC, in INT)
+
+=item B<bor>(invar PMC, invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<or> of the corresponding bits
+from $2 and $3.
+
+=cut
+
+inline op bor(invar PMC, in INT) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    VTABLE_set_integer_native(interp, $1, a | $2);
+}
+
+inline op bor(invar PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    const INTVAL b = VTABLE_get_integer(interp, $2);
+    VTABLE_set_integer_native(interp, $1, a | b);
+}
+
+inline op bor(invar PMC, invar PMC, in INT) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    VTABLE_set_integer_native(interp, $1, a | $3);
+}
+
+inline op bor(invar PMC, invar PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    const INTVAL b = VTABLE_get_integer(interp, $3);
+    VTABLE_set_integer_native(interp, $1, a | b);
+}
+
+########################################
+
+=item B<bors>(invar PMC, in STR)
+
+=item B<bors>(invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<or> of the corresponding bits
+from $1 and $2.
+
+=item B<bors>(out STR, in STR, in STR)
+
+=item B<bors>(invar PMC, invar PMC, in STR)
+
+=item B<bors>(invar PMC, invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<or> of the corresponding bits
+from $2 and $3.
+
+=cut
+
+inline op bors(invar PMC, in STR) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = Parrot_str_bitwise_or(interp, a, $2);
+    VTABLE_set_string_native(interp, $1, b);
+}
+
+inline op bors(invar PMC, invar PMC) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = VTABLE_get_string(interp, $2);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
+    VTABLE_set_string_native(interp, $1, c);
+}
+
+inline op bors(out STR, in STR, in STR) :base_core {
+    $1 = Parrot_str_bitwise_or(interp, $2, $3);
+}
+
+inline op bors(invar PMC, invar PMC, in STR) :base_core {
+    STRING * const b = VTABLE_get_string(interp, $2);
+    STRING * const c = Parrot_str_bitwise_or(interp, b, $3);
+    VTABLE_set_string_native(interp, $1, c);
+}
+
+inline op bors(invar PMC, invar PMC, invar PMC) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = VTABLE_get_string(interp, $3);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
+    VTABLE_set_string_native(interp, $1, c);
+}
+
+########################################
+
+=item B<shl>(invar PMC, in INT)
+
+=item B<shl>(invar PMC, invar PMC)
+
+Shift left $1 by $2 bits.
+
+=item B<shl>(invar PMC, invar PMC, in INT)
+
+=item B<shl>(invar PMC, invar PMC, invar PMC)
+
+Set $1 to the value of $2 shifted left by $3 bits.
+
+=cut
+
+inline op shl(invar PMC, in INT) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    const INTVAL b = bit_shift_left(a, $2);
+    VTABLE_set_integer_native(interp, $1, b);
+}
+
+inline op shl(invar PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    const INTVAL b = VTABLE_get_integer(interp, $2);
+    const INTVAL c = bit_shift_left(a, b);
+    VTABLE_set_integer_native(interp, $1, c);
+}
+
+inline op shl(invar PMC, invar PMC, in INT) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    const INTVAL b = bit_shift_left(a, $3);
+    VTABLE_set_integer_native(interp, $1, b);
+}
+
+inline op shl(invar PMC, invar PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    const INTVAL b = VTABLE_get_integer(interp, $3);
+    const INTVAL c = bit_shift_left(a, b);
+    VTABLE_set_integer_native(interp, $1, c);
+}
+
+########################################
+
+=item B<shr>(invar PMC, in INT)
+
+=item B<shr>(invar PMC, invar PMC)
+
+Shift right $1 by $2 bits.
+
+=item B<shr>(invar PMC, invar PMC, in INT)
+
+=item B<shr>(invar PMC, invar PMC, invar PMC)
+
+Set $1 to the value of $2 shifted right by $3 bits.
+
+=cut
+
+inline op shr(invar PMC, in INT) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    const INTVAL b = bit_shift_left(a, -$2);
+    VTABLE_set_integer_native(interp, $1, b);
+}
+
+inline op shr(invar PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    const INTVAL b = VTABLE_get_integer(interp, $2);
+    const INTVAL c = bit_shift_left(a, -b);
+    VTABLE_set_integer_native(interp, $1, c);
+}
+
+inline op shr(invar PMC, invar PMC, in INT) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    const INTVAL c = bit_shift_left(a, -$3);
+    VTABLE_set_integer_native(interp, $1, c);
+}
+
+inline op shr(invar PMC, invar PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    const INTVAL b = VTABLE_get_integer(interp, $3);
+    const INTVAL c = bit_shift_left(a, -b);
+    VTABLE_set_integer_native(interp, $1, c);
+}
+
+########################################
+
+=item B<bnot>(inout INT)
+
+=item B<bnot>(invar PMC)
+
+Sets $1 to C<bitwise not> $1 inplace.
+
+=item B<bnot>(out INT, in INT)
+
+=item B<bnot>(out PMC, invar PMC)
+
+=cut
+
+inline op bnot(inout INT) :base_core {
+    $1 = ~ $1;
+}
+
+inline op bnot(out INT, in INT) :base_core {
+    $1 = ~ $2;
+}
+
+inline op bnot(invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $1);
+    VTABLE_set_integer_native(interp, $1, ~a);
+}
+
+inline op bnot(out PMC, invar PMC) :base_core {
+    const INTVAL a = VTABLE_get_integer(interp, $2);
+    PMC * const b = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
+    VTABLE_set_integer_native(interp, b, ~a);
+    $1 = b;
+}
+
+=item B<bnots>(invar PMC)
+
+=item B<bnots>(out STR, in STR)
+
+=item B<bnots>(out PMC, invar PMC)
+
+=cut
+
+inline op bnots(out STR, in STR) :base_core {
+    $1 = Parrot_str_bitwise_not(interp, $2);
+}
+
+inline op bnots(invar PMC) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = Parrot_str_bitwise_not(interp, a);
+    VTABLE_set_string_native(interp, $1, b);
+}
+
+inline op bnots(out PMC, invar PMC) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = Parrot_str_bitwise_not(interp, a);
+    VTABLE_set_string_native(interp, $1, b);
+}
+
+########################################
+
+=item B<lsr>(invar PMC, in INT)
+
+=item B<lsr>(invar PMC, invar PMC)
+
+Shift $1 logically shifted right by $2 bits.
+
+=item B<lsr>(invar PMC, invar PMC, in INT)
+
+=item B<lsr>(invar PMC, invar PMC, invar PMC)
+
+Set $1 to the value of $2 logically shifted right by $3 bits.
+
+=cut
+
+inline op lsr(invar PMC, in INT) :base_core {
+    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $1);
+    const UINTVAL b = a >> $2;
+    VTABLE_set_integer_native(interp, $1, (INTVAL)b);
+}
+
+inline op lsr(invar PMC, invar PMC) :base_core {
+    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $1);
+    const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, $2);
+    const UINTVAL c = a >> b;
+    VTABLE_set_integer_native(interp, $1, (INTVAL)c);
+}
+
+inline op lsr(invar PMC, invar PMC, in INT) :base_core {
+    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $2);
+    const UINTVAL b = (UINTVAL)$3;
+    const UINTVAL c = a >> b;
+    VTABLE_set_integer_native(interp, $1, (INTVAL)c);
+}
+
+inline op lsr(invar PMC, invar PMC, invar PMC) :base_core {
+    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $2);
+    const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, $3);
+    const UINTVAL c = a >> b;
+    VTABLE_set_integer_native(interp, $3, (INTVAL)c);
+}
+
+=item B<rot>(out INT, in INT, in INT, inconst INT)
+
+Rotate $2 left or right by $3 and place result in $1.
+$4 is the amount of bits to rotate, 32 bit on a 32-bit CPU and 32 or 64
+on a 64-bit CPU. If the rotate count is negative a rotate right by ($3+$4)
+is performed.
+
+=cut
+
+inline op rot(out INT, in INT, in INT, inconst INT) {
+    const INTVAL r = $2;
+    INTVAL s = $3;
+    const INTVAL w = $4;
+    INTVAL d, t;
+    if (s < 0)
+        s += w;
+    d = r << s;
+    t = w - s;
+    t = (INTVAL)((UINTVAL)r >> t);
+    d |= t;
+    $1 = d;
+}
+
+########################################
+
+=item B<bxor>(invar PMC, in INT)
+
+=item B<bxor>(invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<xor> of the corresponding bits
+from $1 and $2.
+
+=item B<bxor>(invar PMC, invar PMC, in INT)
+
+=item B<bxor>(invar PMC, invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<xor> of the corresponding bits
+from $2 and $3.
+
+=cut
+
+inline op bxor(invar PMC, in INT) :base_core {
+    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $1);
+    const UINTVAL b = a ^ $2;
+    VTABLE_set_integer_native(interp, $1, (INTVAL)b);
+}
+
+inline op bxor(invar PMC, invar PMC) :base_core {
+    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $1);
+    const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, $2);
+    const UINTVAL c = a ^ b;
+    VTABLE_set_integer_native(interp, $1, (INTVAL)c);
+}
+
+inline op bxor(invar PMC, invar PMC, in INT) :base_core {
+    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $2);
+    const UINTVAL b = a ^ $3;
+    VTABLE_set_integer_native(interp, $1, (INTVAL)b);
+}
+
+inline op bxor(invar PMC, invar PMC, invar PMC) :base_core {
+    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $2);
+    const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, $3);
+    const UINTVAL c = a ^ b;
+    VTABLE_set_integer_native(interp, $1, (INTVAL)c);
+}
+
+########################################
+
+=item B<bxors>(invar PMC, in STR)
+
+=item B<bxors>(invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<xor> of the corresponding bits
+from $1 and $2.
+
+=item B<bxors>(out STR, in STR, in STR)
+
+=item B<bxors>(invar PMC, invar PMC, in STR)
+
+=item B<bxors>(invar PMC, invar PMC, invar PMC)
+
+Set the bits of $1 according to the B<xor> of the corresponding bits
+from $2 and $3.
+
+=cut
+
+inline op bxors(invar PMC, in STR) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, $2);
+    VTABLE_set_string_native(interp, $1, b);
+}
+
+inline op bxors(invar PMC, invar PMC) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = VTABLE_get_string(interp, $2);
+    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
+    VTABLE_set_string_native(interp, $1, c);
+}
+
+inline op bxors(out STR, in STR, in STR) :base_core {
+    $1 = Parrot_str_bitwise_xor(interp, $2, $3);
+}
+
+inline op bxors(invar PMC, invar PMC, in STR) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, $3);
+    VTABLE_set_string_native(interp, $1, b);
+}
+
+inline op bxors(invar PMC, invar PMC, invar PMC) :base_core {
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = VTABLE_get_string(interp, $3);
+    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
+    VTABLE_set_string_native(interp, $1, c);
+}
+
+=back
+
+=cut
+
+###############################################################################
+
+=head1 COPYRIGHT
+
+Copyright (C) 2001-2010, Parrot Foundation.
+
+=head1 LICENSE
+
+This program is free software. It is subject to the same license
+as the Parrot interpreter itself.
+
+=cut
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/gsoc_threads/src/dynoplibs/debug.ops (from r47544, trunk/src/dynoplibs/debug.ops)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/dynoplibs/debug.ops	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/dynoplibs/debug.ops)
@@ -0,0 +1,146 @@
+/*
+ * $Id$
+ * Copyright (C) 2002-2008, Parrot Foundation.
+ */
+
+/*
+** debug.ops
+*/
+
+=head1 NAME
+
+debug.ops - Debugging Opcodes
+
+=cut
+
+=head1 DESCRIPTION
+
+Parrot debugger
+
+=cut
+
+=head1 HISTORY
+
+Initial version by Daniel Grunblatt on 2002.5.19
+
+=cut
+
+###############################################################################
+
+=head2 Parrot debug operations
+
+=over 4
+
+=cut
+
+########################################
+
+=item B<debug_init>()
+
+Init the Parrot debugger, must be called before any other debug op.
+
+=cut
+
+op debug_init() :base_debug {
+    Parrot_debugger_init(interp);
+}
+
+########################################
+
+=item B<debug_load>(inconst STR)
+
+Load a Parrot source file for the current program.
+
+=cut
+
+op debug_load(inconst STR) :base_debug {
+    Parrot_debugger_load(interp, $1);
+}
+
+########################################
+
+=item B<debug_break>()
+
+Break execution and drop into the debugger.
+If we are already into the debugger and is the first time we are
+called set a breakpoint.
+
+When you re run/continue the program begin debugged it will pay
+no attention to the debug ops.
+
+=cut
+
+op debug_break() :base_debug {
+    Parrot_debugger_break(interp, cur_opcode);
+}
+
+########################################
+
+=item B<debug_print>()
+
+Print all the Parrot registers at once.
+
+=cut
+
+op debug_print() :base_debug {
+    if (!interp->pdb) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_INVALID_OPERATION,
+            "Initialize debugger with debug_init before using debug_print");
+        goto ADDRESS(handler);
+    }
+
+    if (!(interp->pdb->state & PDB_BREAK)) {
+        PDB_print(interp, "I");
+        PDB_print(interp, "N");
+        PDB_print(interp, "S");
+        PDB_print(interp, "P");
+    }
+}
+
+=item B<backtrace>()
+
+Print a backtrace.
+
+=cut
+
+op backtrace() :base_debug {
+    PDB_backtrace(interp);
+}
+
+#######################################
+
+=item B<getline>(out INT)
+
+Get the current line number.
+
+=cut
+
+inline op getline(out INT) {
+    Parrot_Context_info info;
+    Parrot_Context_get_info(interp, CURRENT_CONTEXT(interp), &info);
+    $1 = info.line;
+}
+
+=item B<getfile>(out STR)
+
+Get the name of the current file.
+
+=cut
+
+inline op getfile(out STR) {
+    Parrot_Context_info info;
+    Parrot_Context_get_info(interp, CURRENT_CONTEXT(interp), &info);
+    $1 = info.file;
+}
+
+=back
+
+=cut
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/gsoc_threads/src/dynoplibs/deprecated.ops
==============================================================================
--- branches/gsoc_threads/src/dynoplibs/deprecated.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/dynoplibs/deprecated.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -30,25 +30,25 @@
 
 =cut
 
-op exchange(inout INT, inout INT) :base_core {
+op exchange(inout INT, inout INT) :deprecated {
     const INTVAL temp = $1;
     $1 = $2;
     $2 = temp;
 }
 
-op exchange(inout PMC, inout PMC) :base_core {
+op exchange(inout PMC, inout PMC) :deprecated {
     PMC * const temp = $1;
     $1 = $2;
     $2 = temp;
 }
 
-op exchange(inout NUM, inout NUM) :base_core {
+op exchange(inout NUM, inout NUM) :deprecated {
     FLOATVAL temp = $1;
     $1 = $2;
     $2 = temp;
 }
 
-op exchange(inout STR, inout STR) :base_core {
+op exchange(inout STR, inout STR) :deprecated {
     STRING * const temp = $1;
     $1 = $2;
     $2 = temp;
@@ -62,7 +62,7 @@
 
 =cut
 
-inline op setp_ind(in INT, invar PMC) :base_ref {
+inline op setp_ind(in INT, invar PMC) :deprecated {
     if ($1 < 0 || $1 >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_PMC(interp, $1) = $2;
@@ -76,7 +76,7 @@
 
 =cut
 
-inline op setn_ind(in INT, in NUM) :base_ref {
+inline op setn_ind(in INT, in NUM) :deprecated {
     if ($1 < 0 || $1 >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_NUM(interp, $1) = $2;
@@ -90,7 +90,7 @@
 
 =cut
 
-inline op sets_ind(in INT, in STR) :base_ref {
+inline op sets_ind(in INT, in STR) :deprecated {
     if ($1 < 0 || $1 >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_STR(interp, $1) = $2;
@@ -104,7 +104,7 @@
 
 =cut
 
-inline op seti_ind(in INT, in INT) :base_ref {
+inline op seti_ind(in INT, in INT) :deprecated {
     if ($1 < 0 || $1 >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_INT(interp, $1) = $2;
@@ -128,19 +128,19 @@
 
 =cut
 
-inline op cleari() :base_core {
+inline op cleari() :deprecated {
     Parrot_clear_i(interp);
 }
 
-inline op clearn() :base_core {
+inline op clearn() :deprecated {
     Parrot_clear_n(interp);
 }
 
-inline op clears() :base_core {
+inline op clears() :deprecated {
     Parrot_clear_s(interp);
 }
 
-inline op clearp() :base_core {
+inline op clearp() :deprecated {
     Parrot_clear_p(interp);
 }
 

Copied: branches/gsoc_threads/src/dynoplibs/io.ops (from r47544, trunk/src/dynoplibs/io.ops)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/dynoplibs/io.ops	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/dynoplibs/io.ops)
@@ -0,0 +1,342 @@
+/*
+ * $Id$
+ * Copyright (C) 2010, Parrot Foundation.
+** io.ops
+*/
+
+=head1 NAME
+
+io.ops - Extended I/O Dynops
+
+=head1 DESCRIPTION
+
+A richer I/O API than that available in core Parrot.
+
+=over 4
+
+=cut
+
+BEGIN_OPS_PREAMBLE
+#include "../io/io_private.h"
+END_OPS_PREAMBLE
+
+##########################################
+
+=item B<stat>(out INT, in STR, in INT)
+
+=item B<stat>(out INT, in INT, in INT)
+
+Stat the file. Return stat element $3 for file $2 into $1. The queryable
+items currently are:
+
+ EXISTS     0
+ FILESIZE   1
+ ISDIR      2
+ ISDEV      3
+ CREATETIME 4 (Time file was created)
+ ACCESSTIME 5 (Time file was last accessed)
+ MODIFYTIME 6 (Time file data was changed)
+ CHANGETIME 7 (Time file metadata was changed)
+ BACKUPTIME 8 (Time of last backup)
+ UID        9
+ GID        10
+
+
+=cut
+
+op stat(out INT, in STR, in INT) {
+    $1 = Parrot_stat_info_intval(interp, $2, $3);
+}
+
+op stat(out INT, in INT, in INT) {
+    $1 = Parrot_fstat_info_intval(interp, $2, $3);
+}
+
+##########################################
+
+=item B<read>(out STR, in INT)
+
+Read up to N bytes from standard input stream
+
+=item B<read>(out STR, invar PMC, in INT)
+
+Read up to N bytes from IO PMC stream.
+
+=cut
+
+op read(out STR, in INT) :base_io {
+    $1 = Parrot_io_reads(interp, _PIO_STDIN(interp), (size_t)$2);
+}
+
+op read(out STR, invar PMC, in INT) :base_io {
+    $1 = Parrot_io_reads(interp, $2, (size_t)$3);
+}
+
+=item B<readline>(out STR, invar PMC)
+
+Read a line up to EOL from filehandle $2.
+This switches the filehandle to linebuffer-mode.
+
+=cut
+
+inline op readline(out STR, invar PMC) :base_io {
+    $1 = Parrot_io_readline(interp, $2);
+}
+
+##########################################
+
+=item B<printerr>(in INT)
+
+=item B<printerr>(in NUM)
+
+=item B<printerr>(in STR)
+
+=item B<printerr>(invar PMC)
+
+Print $1 to standard error.
+
+=cut
+
+op printerr(in INT) :base_io {
+    Parrot_io_eprintf(interp, INTVAL_FMT, $1);
+}
+
+op printerr(in NUM) :base_io {
+    Parrot_io_eprintf(interp, FLOATVAL_FMT, $1);
+}
+
+op printerr(in STR) :base_io {
+    STRING * const s = $1;
+    if (s && Parrot_str_byte_length(interp, s))
+        Parrot_io_putps(interp, _PIO_STDERR(interp), s);
+}
+
+op printerr(invar PMC) :base_io {
+    PMC * const p = $1;
+    STRING * const s = (VTABLE_get_string(interp, p));
+    if (s)
+        Parrot_io_putps(interp, _PIO_STDERR(interp), s);
+}
+
+##########################################
+
+=item B<seek>(invar PMC, in INT, in INT)
+
+seek:
+Set file position to offset $2 on IO stream $1. 'whence' is
+indicated by the value in $3. The valid values for 'whence' are:
+
+ Value      Meaning
+ 0          Seek from the beginning of the file
+ 1          Seek from the current position
+ 2          Seek from the end of the file
+
+[ Note: the above values for 'whence' is just an educated guess
+at this point ]
+
+=item B<seek>(invar PMC, in INT, in INT, in INT)
+
+64bit seek:
+Set file position to offset ($2 << 32 | $3) on IO stream $1. 'whence' is
+indicated by the value in $4. This allows 64-bit seeks with only 32-bit
+INTVALS.
+
+=cut
+
+op seek(invar PMC, in INT, in INT) :base_io {
+    if ($1) {
+        if (Parrot_io_seek(interp, $1, Parrot_io_make_offset($2), $3) < 0) {
+            opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+                EXCEPTION_PIO_ERROR,
+                "seek failed (32bit)");
+            goto ADDRESS(handler);
+        }
+    }
+}
+
+op seek(invar PMC, in INT, in INT, in INT) :base_io {
+    if ($1) {
+        if (Parrot_io_seek(interp, $1, Parrot_io_make_offset32($2, $3), $4) < 0) {
+            opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+                EXCEPTION_PIO_ERROR,
+                "seek failed (64bit)");
+            goto ADDRESS(handler);
+        }
+    }
+}
+
+=item B<tell>(out INT, invar PMC)
+
+tell:
+Get the current file position of stream $2 and store it in $1.
+On systems where INTVAL is 32bit the result will be truncated if the
+position is beyond 2 GiB
+
+=item B<tell>(out INT, out INT, invar PMC)
+
+64bit tell:
+Get the current file positon of stream $3 in two parts of 32-bit each
+($1 = pos >> 32, $2 = pos & 0xffffffff).
+
+=cut
+
+op tell(out INT, invar PMC) :base_io {
+    if ($2)
+        $1 = (INTVAL)Parrot_io_tell(interp, $2);
+}
+
+op tell(out INT, out INT, invar PMC) :base_io {
+    if ($3) {
+        PIOOFF_T pos;
+        pos = Parrot_io_tell(interp, $3);
+        $1 = (INTVAL)(pos >> 31);
+        $2 = (INTVAL)(pos & 0xffffffff);
+    }
+}
+
+##########################################
+
+=item B<peek>(out STR)
+
+Returns the next byte from standard input, but does not
+remove it from the stream.
+
+=item B<peek>(out STR, invar PMC)
+
+Reads the next byte from an IO PMC, but does not
+remove it from the stream.
+
+=cut
+
+op peek(out STR) :base_io {
+    STRING ** const s = &$1;
+
+    *s = NULL;
+    if (Parrot_io_peek(interp, _PIO_STDIN(interp), s) < 0) {
+        $1 = STRINGNULL;
+    }
+}
+
+op peek(out STR, invar PMC) :base_io {
+    STRING ** const s = &$1;
+
+    *s = NULL;
+    if (Parrot_io_peek(interp, $2, s) < 0) {
+        $1 = STRINGNULL;
+    }
+}
+
+#########################################
+
+=item B<open>(out PMC, in STR, in STR)
+
+Open URL (file, address, database, in core image) named $2 with
+a mode string in $3 and create an IO object in $1.
+
+The mode consists of a string of characters specified in any order:
+
+ r : read
+ w : write
+ a : append (Note: you must specify "wa", not just "a")
+ p : pipe
+
+=item B<open>(out PMC, in STR)
+
+Open URL (file, address, database, in core image) named $2 with
+read mode and create an IO object in $1.
+
+=cut
+
+inline op open(out PMC, in STR, in STR) :filesys_open {
+    if (STRING_IS_NULL($2) || STRING_IS_NULL($3)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_UNEXPECTED_NULL, "Invalid open");
+        goto ADDRESS(handler);
+    }
+    else {
+        $1 = Parrot_io_open(interp, PMCNULL, $2, $3);
+        PARROT_ASSERT(! PMC_IS_NULL($1));
+    }
+}
+
+inline op open(out PMC, in STR) :filesys_open {
+    if (STRING_IS_NULL($2)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_UNEXPECTED_NULL, "Invalid open");
+        goto ADDRESS(handler);
+    }
+    else {
+        $1 = Parrot_io_open(interp, PMCNULL, $2, NULL);
+        PARROT_ASSERT(! PMC_IS_NULL($1));
+    }
+}
+
+########################################
+
+=item B<close>(invar PMC)
+
+Close IO object $1
+
+=cut
+
+inline op close(invar PMC) :base_io {
+    Parrot_io_close(interp, $1);
+}
+
+########################################
+
+=item B<fdopen>(out PMC, in INT, in STR)
+
+Create ParrotIO object in $1 as a copy of file descriptor $2.
+
+=cut
+
+inline op fdopen(out PMC, in INT, in STR) :filesys_open {
+    $1 = Parrot_io_fdopen(interp, PMCNULL, (PIOHANDLE)$2, $3);
+    if (!$1)
+        $1 = Parrot_pmc_new(interp, enum_class_Undef);
+}
+
+#########################################
+
+=item B<setstdin>(invar PMC)
+
+Sets the standard input for a bare C<read> op to go to the supplied PMC.
+Call C<getstdin> first if you care about retaining the previous PMC.
+
+=item B<setstdout>(invar PMC)
+
+Sets the standard output for a bare C<print> op to go to the supplied PMC.
+Call C<getstdout> first if you care about retaining the previous PMC.
+
+=item B<setstderr>(invar PMC)
+
+Sets the standard error for a bare C<printerr> op to go to the supplied PMC.
+Call C<getstderr> first if you care about retaining the previous PMC.
+
+=cut
+
+inline op setstdin(invar PMC) :base_io {
+    _PIO_STDIN(interp) = $1;
+}
+
+inline op setstdout(invar PMC) :base_io {
+    _PIO_STDOUT(interp) = $1;
+}
+
+inline op setstderr(invar PMC) :base_io {
+    _PIO_STDERR(interp) = $1;
+}
+
+########################################
+
+=back
+
+=cut
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/gsoc_threads/src/dynoplibs/math.ops
==============================================================================
--- branches/gsoc_threads/src/dynoplibs/math.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/dynoplibs/math.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -25,7 +25,169 @@
 
 =cut
 
-=over
+=head2 General Math
+
+=over 4
+
+=cut
+
+########################################
+
+=item B<cmod>(out INT, in INT, in INT)
+
+=item B<cmod>(invar PMC, invar PMC, in INT)
+
+=item B<cmod>(invar PMC, invar PMC, invar PMC)
+
+NOTE: This "uncorrected mod" algorithm uses the C language's built-in
+mod operator (x % y), which is
+
+    ... the remainder when x is divided by y, and thus is zero
+    when y divides x exactly.
+    ...
+    The direction of truncation for / and the sign of the result
+    for % are machine-dependent for negative operands, as is the
+    action taken on overflow or underflow.
+                                                     -- [1], page 41
+
+Also:
+
+    ... if the second operand is 0, the result is undefined.
+    Otherwise, it is always true that (a/b)*b + a%b is equal to z. If
+    both operands are non-negative, then the remainder is non-
+    negative and smaller than the divisor; if not, it is guaranteed
+    only that the absolute value of the remainder is smaller than
+    the absolute value of the divisor.
+                                                     -- [1], page 205
+
+This op is provided for those who need it (such as speed-sensitive
+applications with heavy use of mod, but using it only with positive
+arguments), but a more mathematically useful mod based on ** floor(x/y)
+and defined with y == 0 is provided by the mod op.
+
+  [1] Brian W. Kernighan and Dennis M. Ritchie, *The C Programming
+      Language*, Second Edition. Prentice Hall, 1988.
+
+If the denominator is zero, a 'Divide by zero' exception is thrown.
+
+=cut
+
+inline op cmod(out INT, in INT, in INT) :base_core {
+    INTVAL den = $3;
+    if ($3 == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");
+        goto ADDRESS(handler);
+    }
+    $1 = $2 % den;
+}
+
+inline op cmod(invar PMC, invar PMC, in INT) :base_core {
+    INTVAL result;
+
+    if ($3 == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");
+        goto ADDRESS(handler);
+    }
+
+    result = VTABLE_get_integer(interp, $2) % $3;
+
+    $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
+    VTABLE_set_integer_native(interp, $1, result);
+}
+
+inline op cmod(invar PMC, invar PMC, invar PMC) :base_core {
+    INTVAL result;
+    INTVAL value = VTABLE_get_integer(interp, $3);
+
+    if (value == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");
+        goto ADDRESS(handler);
+    }
+
+    result = VTABLE_get_integer(interp, $2) % value;
+
+    $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
+    VTABLE_set_integer_native(interp, $1, result);
+}
+
+########################################
+
+=item B<cmod>(out NUM, in NUM, in NUM)
+
+=item B<cmod>(invar PMC, invar PMC, in NUM)
+
+NOTE: This "uncorrected mod" algorithm uses the built-in C math library's
+fmod() function, which computes
+
+    ... the remainder of dividing x by y. The return value is
+    x - n * y, where n is the quotient of x / y, rounded towards
+    zero to an integer.
+                                -- fmod() manpage on RedHat Linux 7.0
+
+In addition, fmod() returns
+
+    the remainder, unless y is zero, when the function fails and
+    errno is set.
+
+According to page 251 of [1], the result when y is zero is implementation-
+defined.
+
+This op is provided for those who need it, but a more mathematically
+useful numeric mod based on floor(x/y) instead of truncate(x/y) and
+defined with y == 0 is provided by the mod op.
+
+  [1] Brian W. Kernighan and Dennis M. Ritchie, *The C Programming
+      Language*, Second Edition. Prentice Hall, 1988.
+
+If the denominator is zero, a 'Divide by zero' exception is thrown.
+
+=cut
+
+inline op cmod(out NUM, in NUM, in NUM) :base_core {
+    FLOATVAL den = $3;
+    if (FLOAT_IS_ZERO($3)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");
+        goto ADDRESS(handler);
+    }
+    $1 = fmod($2, den);
+}
+
+inline op cmod(invar PMC, invar PMC, in NUM) :base_core {
+    FLOATVAL result;
+    FLOATVAL value = $3;
+
+    if (FLOAT_IS_ZERO(value)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");
+        goto ADDRESS(handler);
+    }
+
+    result = fmod(VTABLE_get_integer(interp, $2), value);
+
+    $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
+    VTABLE_set_integer_native(interp, $1, (INTVAL) result);
+}
+
+=back
+
+=cut
+
+###############################################################################
+
+=head2 Pseudorandom number operations
+
+These operations perform various pseudorandom number operations.
+
+=over 4
 
 =item B<rand>(out NUM)
 
@@ -109,6 +271,8 @@
 
 =back
 
+=cut
+
 =head1 COPYRIGHT
 
 Copyright (C) 2001-2009, Parrot Foundation.

Copied: branches/gsoc_threads/src/dynoplibs/sys.ops (from r47544, trunk/src/dynoplibs/sys.ops)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/dynoplibs/sys.ops	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/dynoplibs/sys.ops)
@@ -0,0 +1,280 @@
+/*
+ * $Id$
+** sys.ops
+*/
+
+=head1 NAME
+
+sys.ops - System Interaction Dynops
+
+=head1 DESCRIPTION
+
+Operations that allow the user to interact with the system.
+
+=over 4
+
+=cut
+
+BEGIN_OPS_PREAMBLE
+
+#ifdef PARROT_HAS_HEADER_SYSUTSNAME
+#  include <sys/utsname.h>
+#endif
+
+END_OPS_PREAMBLE
+
+########################################
+
+=item B<gmtime>(out STR, in INT)
+
+Take the integer, which represents GMT epoch-seconds, and turn it into a
+formatted string.
+
+=item B<localtime>(out STR, in INT)
+
+Take the integer, which represents GMT epoch-seconds, and turn it into a
+formatted string. The time is adjusted to localtime before formatting.
+
+=item B<decodetime>(out PMC, in INT)
+
+Take the integer, which represents GMT epoch-seconds, and return an Array
+PMC which represents the decoded time. The array elements are
+(include "tm.pasm" for the constants):
+
+=over 4
+
+=item 0, .TM_SEC
+
+Seconds (0-60)
+
+=item 1, .TM_MIN
+
+Minutes (0-59)
+
+=item 2, .TM_HOUR
+
+Hours (0-23)
+
+=item 3, .TM_MDAY
+
+Day of month (1-31)
+
+=item 4, .TM_MON
+
+Month of year (1-12) (Note, B<actual> month, not month - 1)
+
+=item 5, .TM_YEAR
+
+Year (note, B<actual> year. The year 2004 comes back as 2004, not 104)
+
+=item 6, .TM_WDAY
+
+Day of week. Sunday is day 0
+
+=item 7, .TM_YDAY
+
+Day of year (0-365)
+
+=item 8, .TM_ISDST
+
+Daylight savings/summer time in effect
+
+=back
+
+Timezone name will be GMT and offset will be 0, since the time is taken and
+decoded as GMT.
+
+=item B<decodelocaltime>(out PMC, in INT)
+
+Take the passed in  integer, which represents GMT epoch-seconds, and return
+an array as in decodetime. The time is first shifted to localtime before
+decoding.
+
+=cut
+
+op gmtime(out STR, in INT) {
+    struct tm tm;
+    const time_t t = (time_t) $2;
+    char resultbuffer[26];
+    Parrot_gmtime_r(&t, &tm);
+    Parrot_asctime_r(&tm, resultbuffer);
+    $1 = Parrot_str_new(interp, resultbuffer, 25);
+}
+
+op localtime(out STR, in INT) {
+    struct tm tm;
+    const time_t t = (time_t) $2;
+    char resultbuffer[26];
+    Parrot_localtime_r(&t, &tm);
+    Parrot_asctime_r(&tm, resultbuffer);
+    $1 = Parrot_str_new(interp, resultbuffer, 25);
+}
+
+op decodetime(out PMC, in INT) {
+    struct tm tm;
+    const time_t t = (time_t) $2;
+    Parrot_gmtime_r(&t, &tm);
+    $1 = Parrot_tm_to_array(interp, &tm);
+}
+
+op decodelocaltime(out PMC, in INT) {
+    struct tm tm;
+    const time_t t = (time_t) $2;
+    Parrot_localtime_r(&t, &tm);
+    $1 = Parrot_tm_to_array(interp, &tm);
+}
+
+########################################
+
+=item B<sysinfo>(out STR, in INT)
+
+Return system information. The values it returns depends on what you
+ask. They are:
+
+=over 4
+
+=item C<PARROT_INTSIZE> The size of a platform integer
+
+=item C<PARROT_FLOATSIZE> The size of a platform float
+
+=item C<PARROT_POINTERSIZE> The size of a platform pointer (Largest possible data pointer)
+
+=item C<PARROT_INTMAX> The maximum value of a platform integer
+
+=item C<PARROT_INTMIN> The minimum value of a platform integer
+
+=back
+
+=item B<sysinfo>(out INT, in INT)
+
+Return system information. The values it returns depends on what you
+ask. They are:
+
+=over 4
+
+=item C<PARROT_OS> The OS name
+
+This is something like "OS X", "MacOS", "Windows", or "VMS".
+
+=item C<PARROT_OS_VERSION> The OS version string
+
+This is the current (hopefully) OS Version. For OSes that have plain
+version numbers it will be the version number. For OSes that name
+their versions, it will be the version name.
+
+On HP/UX, this may be something like 11.2, while on Windows it may be
+"95", "98", "2000", "NT", "ME", or "XP".
+
+=item C<PARROT_OS_VERSION_NUMBER> The OS version number string
+
+On OSes that don't name themselves, this will be the same as what's
+returned in the OS version string. On OSes that I<do> name themselves,
+this will be a more specific version number. In all cases it is OS
+dependent.
+
+=item C<CPU_ARCH> The CPU architecture
+
+The name of the CPU family, such as "VAX", "Alpha", "PPC", or "x86".
+
+=item C<CPU_TYPE> The CPU model
+
+The model name of the current system's CPU. This is something like
+"EV68", "Athlon", or "Pentium III".
+
+=back
+
+Note that some of these values may be set at Parrot compile time,
+rather than at runtime, if the system has no reliable way to fetch the
+data dynamically, or if there is no way the value can change. Also,
+the value returned may be somewhat misleading--Parrot running under a
+VirtualPC window will report "Windows" as its OS and "x86" as its CPU,
+even if it's really running on an OS X system.
+
+=cut
+
+inline op sysinfo(out STR, in INT) {
+    switch ($2) {
+      case PARROT_OS:
+        $1 = Parrot_str_new_constant(interp, BUILD_OS_NAME);
+        break;
+
+#ifdef PARROT_HAS_HEADER_SYSUTSNAME
+      case PARROT_OS_VERSION:
+        {
+            struct utsname info;
+            if (uname(&info) == 0) {
+                $1 = string_make(interp, info.version, strlen(info.version), "ascii", 0);
+            }
+        }
+        break;
+
+      case PARROT_OS_VERSION_NUMBER:
+        {
+            struct utsname info;
+            if (uname(&info) == 0) {
+                $1 = string_make(interp, info.release, strlen(info.version), "ascii", 0);
+            }
+        }
+        break;
+#endif
+
+      case CPU_ARCH:
+        $1 = string_make(interp, PARROT_CPU_ARCH, sizeof (PARROT_CPU_ARCH) - 1, "ascii", 0);
+        break;
+
+      case CPU_TYPE:
+      default:
+        $1 = string_from_literal(interp, "");
+        break;
+    }
+}
+
+inline op sysinfo(out INT, in INT) {
+    switch ($2) {
+      case PARROT_INTSIZE:
+        $1 = sizeof (INTVAL);
+        break;
+
+      case PARROT_FLOATSIZE:
+        $1 = sizeof (FLOATVAL);
+        break;
+
+      case PARROT_POINTERSIZE:
+        $1 = sizeof (void *);
+        break;
+
+      case PARROT_INTMIN:
+        $1 = PARROT_INTVAL_MIN;
+        break;
+
+      case PARROT_INTMAX:
+        $1 = PARROT_INTVAL_MAX;
+        break;
+
+      default:
+        $1 = -1;
+        break;
+    }
+}
+
+###############################################################################
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (C) 2010, Parrot Foundation.
+
+=head1 LICENSE
+
+This program is free software. It is subject to the same license
+as the Parrot interp itself.
+
+=cut
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/gsoc_threads/src/dynoplibs/trans.ops (from r47544, trunk/src/dynoplibs/trans.ops)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/dynoplibs/trans.ops	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/dynoplibs/trans.ops)
@@ -0,0 +1,320 @@
+/*
+ * $Id$
+ * trans.ops
+ */
+
+=head1 NAME
+
+trans.ops - Transcendental Opcodes
+
+=head1 DESCRIPTION
+
+Addition library of operations to perform various transcendental operations such
+as logarithmics and trigonometrics.
+
+To use this library of ops, add this directive to your PIR:
+
+  .loadlib 'trans_ops'
+
+=over 4
+
+=cut
+
+########################################
+
+=item B<acos>(out NUM, in NUM)
+
+Set $1 to the arc cosine (in radians) of $2.
+
+=cut
+
+inline op acos(out NUM, in NUM) :base_math {
+    $1 = acos((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<asec>(out NUM, in NUM)
+
+Set $1 to the arc secant (in radians) of $2.
+
+=cut
+
+inline op asec(out NUM, in NUM) :base_math {
+    $1 = acos(((FLOATVAL)1) / ((FLOATVAL)$2));
+}
+
+########################################
+
+
+=item B<asin>(out NUM, in NUM)
+
+Set $1 to the arc sine (in radians) of $2.
+
+=cut
+
+inline op asin(out NUM, in NUM) :base_math {
+    $1 = asin((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<atan>(out NUM, in NUM)
+
+=item B<atan>(out NUM, in NUM, in NUM)
+
+The two-argument versions set $1 to the arc tangent (in radians) of $2.
+
+The three-argument versions set $1 to the arc tangent (in radians) of
+$2 / $3, taking account of the signs of the arguments in determining the
+quadrant of the result.
+
+=cut
+
+inline op atan(out NUM, in NUM) :base_math {
+    $1 = atan((FLOATVAL)$2);
+}
+
+inline op atan(out NUM, in NUM, in NUM) :base_math {
+    $1 = atan2((FLOATVAL)$2, (FLOATVAL)$3);
+}
+
+########################################
+
+=item B<cos>(out NUM, in NUM)
+
+Set $1 to the cosine of $2 (given in radians).
+
+=cut
+
+inline op cos(out NUM, in NUM) :base_math {
+    $1 = cos((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<cosh>(out NUM, in NUM)
+
+Set $1 to the hyperbolic cosine of $2 (given in radians).
+
+=cut
+
+inline op cosh(out NUM, in NUM) :base_math {
+    $1 = cosh((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<exp>(out NUM, in NUM)
+
+Set $1 to I<e> raised to the power $2. I<e> is the base of the natural
+logarithm.
+
+=cut
+
+inline op exp(out NUM, in NUM) :base_math {
+    $1 = exp((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<ln>(out NUM, in NUM)
+
+Set $1 to the natural (base I<e>) logarithm of $2.
+
+=cut
+
+inline op ln(out NUM, in NUM) :base_math {
+    $1 = log((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<log10>(out NUM, in NUM)
+
+Set $1 to the base 10 logarithm of $2.
+
+=cut
+
+inline op log10(out NUM, in NUM) :base_math {
+    $1 = log10((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<log2>(out NUM, in NUM)
+
+Set $1 to the base 2 logarithm of $2.
+
+=cut
+
+op log2(out NUM, in NUM) :base_math {
+    FLOATVAL temp = log((FLOATVAL)2.0);
+    $1 = log((FLOATVAL)$2) / temp;
+}
+
+########################################
+
+=item B<sec>(out NUM, in NUM)
+
+Set $1 to the secant of $2 (given in radians).
+
+=cut
+
+inline op sec(out NUM, in NUM) :base_math {
+    $1 = ((FLOATVAL)1) / cos((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<sech>(out NUM, in NUM)
+
+Set $1 to the hyperbolic secant of $2 (given in radians).
+
+=cut
+
+inline op sech(out NUM, in NUM) :base_math {
+    $1 = ((FLOATVAL)1) / cosh((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<sin>(out NUM, in NUM)
+
+Set $1 to the sine of $2 (given in radians).
+
+=cut
+
+inline op sin(out NUM, in NUM) :base_math {
+    $1 = sin((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<sinh>(out NUM, in NUM)
+
+Set $1 to the hyperbolic sine of $2 (given in radians).
+
+=cut
+
+inline op sinh(out NUM, in NUM) :base_math {
+    $1 = sinh((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<tan>(out NUM, in NUM)
+
+Set $1 to the tangent of $2 (given in radians).
+
+=cut
+
+inline op tan(out NUM, in NUM) :base_math {
+    $1 = tan((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<tanh>(out NUM, in NUM)
+
+Set $1 to the hyperbolic tangent of $2 (given in radians).
+
+=cut
+
+inline op tanh(out NUM, in NUM) :base_math {
+    $1 = tanh((FLOATVAL)$2);
+}
+
+=item B<pow>(out NUM, in NUM, in NUM)
+
+=item B<pow>(out NUM, in NUM, in INT)
+
+=item B<pow>(invar PMC, invar PMC, invar PMC)
+
+=item B<pow>(invar PMC, invar PMC, in INT)
+
+=item B<pow>(invar PMC, invar PMC, in NUM)
+
+Set $1 to $2 raised to the power $3.
+
+=cut
+
+inline op pow(out NUM, in NUM, in NUM) :base_core {
+    $1 = pow((FLOATVAL)$2, (FLOATVAL)$3);
+}
+
+inline op pow(invar PMC, invar PMC, invar PMC) :base_core {
+    const FLOATVAL a = VTABLE_get_number(interp, $2);
+    const FLOATVAL b = VTABLE_get_number(interp, $3);
+    const FLOATVAL c = pow(a, b);
+    if (PMC_IS_NULL($1))
+        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
+    else
+        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
+    VTABLE_set_number_native(interp, $1, c);
+}
+
+inline op pow(invar PMC, invar PMC, in INT) :base_core {
+    const FLOATVAL a = VTABLE_get_number(interp, $2);
+    const FLOATVAL b = (FLOATVAL)$3;
+    const FLOATVAL c = pow(a, b);
+    if (PMC_IS_NULL($1))
+        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
+    else
+        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
+    VTABLE_set_number_native(interp, $1, c);
+}
+
+inline op pow(invar PMC, invar PMC, in NUM) :base_core {
+    const FLOATVAL a = VTABLE_get_number(interp, $2);
+    const FLOATVAL c = pow(a, $3);
+    if (PMC_IS_NULL($1))
+        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
+    else
+        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
+    VTABLE_set_number_native(interp, $1, c);
+}
+
+inline op pow(out NUM, in NUM, in INT) :base_core {
+    FLOATVAL n2 = $2;
+    FLOATVAL res = 1.0;
+    INTVAL   e  = $3;
+    int s = 1;
+    if (e != 0) {
+        if (e < 0) {
+            s = -1;
+            e = -e;
+        }
+    }
+    while (e) {
+        if (e & 1) {
+            res *= n2;
+        }
+        n2 *= n2;
+        e >>= 1;
+    }
+    if (s < 0) {
+        res = 1.0/res;
+    }
+    $1 = res;
+}
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (C) 2010-2010, Parrot Foundation.
+
+=head1 LICENSE
+
+This program is free software. It is subject to the same license
+as the Parrot interpreter itself.
+
+=cut
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/gsoc_threads/src/embed.c
==============================================================================
--- branches/gsoc_threads/src/embed.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/embed.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -281,6 +281,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 Parrot_Int
 Parrot_test_flag(PARROT_INTERP, Parrot_Int flag)
 {
@@ -300,6 +301,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 Parrot_UInt
 Parrot_test_debug(PARROT_INTERP, Parrot_UInt flag)
 {
@@ -319,6 +321,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 Parrot_UInt
 Parrot_test_trace(PARROT_INTERP, Parrot_UInt flag)
 {

Modified: branches/gsoc_threads/src/exceptions.c
==============================================================================
--- branches/gsoc_threads/src/exceptions.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/exceptions.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -68,7 +68,7 @@
         long error, ARGIN_NULLOK(STRING *msg))
 {
     ASSERT_ARGS(Parrot_ex_build_exception)
-    PMC *exception = Parrot_pmc_new(interp, enum_class_Exception);
+    PMC * const exception = Parrot_pmc_new(interp, enum_class_Exception);
 
     VTABLE_set_integer_keyed_str(interp, exception, CONST_STRING(interp, "severity"), severity);
     VTABLE_set_integer_keyed_str(interp, exception, CONST_STRING(interp, "type"), error);
@@ -206,7 +206,13 @@
 {
     ASSERT_ARGS(Parrot_ex_throw_from_op)
     opcode_t   *address;
-    PMC * const handler = Parrot_cx_find_handler_local(interp, exception);
+    PMC        *handler;
+
+    /* Note the thrower. */
+    VTABLE_set_attr_str(interp, exception, CONST_STRING(interp, "thrower"), CURRENT_CONTEXT(interp));
+
+    /* Locate the handler, if there is one. */
+    handler = Parrot_cx_find_handler_local(interp, exception);
     if (PMC_IS_NULL(handler)) {
         STRING * const message     = VTABLE_get_string(interp, exception);
         const INTVAL   severity    = VTABLE_get_integer_keyed_str(interp, exception, CONST_STRING(interp, "severity"));
@@ -354,10 +360,8 @@
     }
 
     /* Note the thrower.
-     * XXX TT #596 - pass in current context instead when we have context PMCs. */
-    /* Don't split line. It will break CONST_STRING handling */
-    VTABLE_set_attr_str(interp, exception, CONST_STRING(interp, "thrower"), Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp)));
-
+     * Don't split line. It will break CONST_STRING handling. */
+    VTABLE_set_attr_str(interp, exception, CONST_STRING(interp, "thrower"), CURRENT_CONTEXT(interp));
 
     /* it's a C exception handler */
     if (PObj_get_FLAGS(handler) & SUB_FLAG_C_HANDLER) {
@@ -680,9 +684,9 @@
 
 */
 
+PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 PARROT_COLD
-PARROT_EXPORT
 void
 do_panic(NULLOK_INTERP, ARGIN_NULLOK(const char *message),
          ARGIN_NULLOK(const char *file), unsigned int line)

Modified: branches/gsoc_threads/src/gc/gc_private.h
==============================================================================
--- branches/gsoc_threads/src/gc/gc_private.h	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/gc/gc_private.h	Thu Jun 10 21:09:12 2010	(r47545)
@@ -352,7 +352,7 @@
     ARGMOD(Memory_Pools *mem_pools),
     int flag,
     ARGIN_NULLOK(void *arg),
-    ARGIN(pool_iter_fn func))
+    NOTNULL(pool_iter_fn func))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(5)

Modified: branches/gsoc_threads/src/gc/mark_sweep.c
==============================================================================
--- branches/gsoc_threads/src/gc/mark_sweep.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/gc/mark_sweep.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -840,7 +840,7 @@
 header_pools_iterate_callback(PARROT_INTERP,
         ARGMOD(Memory_Pools *mem_pools),
         int flag, ARGIN_NULLOK(void *arg),
-        ARGIN(pool_iter_fn func))
+        NOTNULL(pool_iter_fn func))
 {
     ASSERT_ARGS(header_pools_iterate_callback)
 

Modified: branches/gsoc_threads/src/hash.c
==============================================================================
--- branches/gsoc_threads/src/hash.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/hash.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -375,7 +375,7 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
 size_t
 key_hash_int(SHIM_INTERP, ARGIN_NULLOK(const void *value), size_t seed)
 {
@@ -396,7 +396,7 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
 int
 int_compare(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
 {
@@ -1121,8 +1121,7 @@
 */
 
 void
-parrot_chash_destroy_values(PARROT_INTERP, ARGMOD(Hash *hash),
-    NOTNULL(value_free func))
+parrot_chash_destroy_values(PARROT_INTERP, ARGMOD(Hash *hash), NOTNULL(value_free func))
 {
     ASSERT_ARGS(parrot_chash_destroy_values)
     UINTVAL i;

Modified: branches/gsoc_threads/src/interp/inter_misc.c
==============================================================================
--- branches/gsoc_threads/src/interp/inter_misc.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/interp/inter_misc.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -27,10 +27,6 @@
 
 #include "parrot/has_header.h"
 
-#ifdef PARROT_HAS_HEADER_SYSUTSNAME
-#  include <sys/utsname.h>
-#endif
-
 /* HEADERIZER HFILE: include/parrot/interpreter.h */
 
 /*
@@ -169,7 +165,7 @@
 Parrot_compile_file(PARROT_INTERP, ARGIN(const char *fullname), ARGOUT(STRING **error))
 {
     ASSERT_ARGS(Parrot_compile_file)
-    return IMCC_compile_file_s(interp, fullname, error);
+    return imcc_compile_file(interp, fullname, error);
 }
 
 /*
@@ -365,105 +361,6 @@
 }
 
 /*
-
-=item C<INTVAL sysinfo_i(PARROT_INTERP, INTVAL info_wanted)>
-
-Returns the system info.
-
-C<info_wanted> is one of:
-
-    PARROT_INTSIZE
-    PARROT_FLOATSIZE
-    PARROT_POINTERSIZE
-    PARROT_INTMAX
-    PARROT_INTMIN
-
-In unknown info is requested then -1 is returned.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-INTVAL
-sysinfo_i(SHIM_INTERP, INTVAL info_wanted)
-{
-    ASSERT_ARGS(sysinfo_i)
-    switch (info_wanted) {
-      case PARROT_INTSIZE:
-        return sizeof (INTVAL);
-      case PARROT_FLOATSIZE:
-        return sizeof (FLOATVAL);
-      case PARROT_POINTERSIZE:
-        return sizeof (void *);
-      case PARROT_INTMIN:
-        return PARROT_INTVAL_MIN;
-      case PARROT_INTMAX:
-        return PARROT_INTVAL_MAX;
-      default:
-        return -1;
-    }
-}
-
-/*
-
-=item C<STRING * sysinfo_s(PARROT_INTERP, INTVAL info_wanted)>
-
-Returns the system info string.
-
-C<info_wanted> is one of:
-
-    PARROT_OS
-    PARROT_OS_VERSION
-    PARROT_OS_VERSION_NUMBER
-    CPU_ARCH
-    CPU_TYPE
-
-If unknown info is requested then an empty string is returned.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING *
-sysinfo_s(PARROT_INTERP, INTVAL info_wanted)
-{
-    ASSERT_ARGS(sysinfo_s)
-    switch (info_wanted) {
-      case PARROT_OS:
-        return Parrot_str_new_constant(interp, BUILD_OS_NAME);
-      case PARROT_OS_VERSION:
-#ifdef PARROT_HAS_HEADER_SYSUTSNAME
-        {
-            struct utsname info;
-            if (uname(&info) == 0) {
-                return string_make(interp, info.version, strlen(info.version), "ascii", 0);
-            }
-        }
-#endif
-        break;
-      case PARROT_OS_VERSION_NUMBER:
-#ifdef PARROT_HAS_HEADER_SYSUTSNAME
-        {
-            struct utsname info;
-            if (uname(&info) == 0) {
-                return string_make(interp, info.release, strlen(info.version), "ascii", 0);
-            }
-        }
-#endif
-        break;
-      case CPU_ARCH:
-        return string_make(interp, PARROT_CPU_ARCH, sizeof (PARROT_CPU_ARCH) - 1, "ascii", 0);
-      case CPU_TYPE:
-      default:
-        break;
-    }
-    return CONST_STRING(interp, "");
-}
-
-/*
  * Local variables:
  *   c-file-style: "parrot"
  * End:

Modified: branches/gsoc_threads/src/io/api.c
==============================================================================
--- branches/gsoc_threads/src/io/api.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/io/api.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -888,6 +888,7 @@
 
 */
 
+PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PIOOFF_T
 Parrot_io_make_offset32(INTVAL hi, INTVAL lo)

Modified: branches/gsoc_threads/src/library.c
==============================================================================
--- branches/gsoc_threads/src/library.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/library.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -809,6 +809,7 @@
     ASSERT_ARGS(Parrot_get_runtime_prefix)
     char * const env = Parrot_getenv(interp, CONST_STRING(interp, "PARROT_RUNTIME"));
 
+    Parrot_warn_deprecated(interp, "Parrot_get_runtime_prefix is deprecated TT #1191");
     if (env)
         return env;
     else {

Modified: branches/gsoc_threads/src/longopt.c
==============================================================================
--- branches/gsoc_threads/src/longopt.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/longopt.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2007, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -25,6 +25,7 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+PARROT_WARN_UNUSED_RESULT
 static int longopt_get_longopt(PARROT_INTERP,
     int argc,
     ARGIN(const char* argv[]),
@@ -36,6 +37,7 @@
         __attribute__nonnull__(5)
         FUNC_MODIFIES(* info_buf);
 
+PARROT_WARN_UNUSED_RESULT
 static int longopt_get_shortopt(PARROT_INTERP,
     int argc,
     ARGIN(const char* argv[]),
@@ -64,6 +66,57 @@
 
 /*
 
+=item C<const struct longopt_opt_decl * Parrot_cmd_options(void)>
+
+Set up the const struct declaration for cmd_options
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PARROT_CONST_FUNCTION
+const struct longopt_opt_decl *
+Parrot_cmd_options(void)
+{
+    ASSERT_ARGS(Parrot_cmd_options)
+    static const struct longopt_opt_decl cmd_options[] = {
+        { '.', '.', (OPTION_flags)0, { "--wait" } },
+        { 'D', 'D', OPTION_optional_FLAG, { "--parrot-debug" } },
+        { 'E', 'E', (OPTION_flags)0, { "--pre-process-only" } },
+        { 'G', 'G', (OPTION_flags)0, { "--no-gc" } },
+        { '\0', OPT_HASH_SEED, OPTION_required_FLAG, { "--hash-seed" } },
+        { 'I', 'I', OPTION_required_FLAG, { "--include" } },
+        { 'L', 'L', OPTION_required_FLAG, { "--library" } },
+        { 'O', 'O', OPTION_optional_FLAG, { "--optimize" } },
+        { 'R', 'R', OPTION_required_FLAG, { "--runcore" } },
+        { 'g', 'g', OPTION_required_FLAG, { "--gc" } },
+        { 'V', 'V', (OPTION_flags)0, { "--version" } },
+        { 'X', 'X', OPTION_required_FLAG, { "--dynext" } },
+        { '\0', OPT_DESTROY_FLAG, (OPTION_flags)0,
+                                     { "--leak-test", "--destroy-at-end" } },
+        { '\0', OPT_GC_DEBUG, (OPTION_flags)0, { "--gc-debug" } },
+        { 'a', 'a', (OPTION_flags)0, { "--pasm" } },
+        { 'c', 'c', (OPTION_flags)0, { "--pbc" } },
+        { 'd', 'd', OPTION_optional_FLAG, { "--imcc-debug" } },
+        { '\0', OPT_HELP_DEBUG, (OPTION_flags)0, { "--help-debug" } },
+        { 'h', 'h', (OPTION_flags)0, { "--help" } },
+        { 'o', 'o', OPTION_required_FLAG, { "--output" } },
+        { '\0', OPT_PBC_OUTPUT, (OPTION_flags)0, { "--output-pbc" } },
+        { 'r', 'r', (OPTION_flags)0, { "--run-pbc" } },
+        { '\0', OPT_RUNTIME_PREFIX, (OPTION_flags)0, { "--runtime-prefix" } },
+        { 't', 't', OPTION_optional_FLAG, { "--trace" } },
+        { 'v', 'v', (OPTION_flags)0, { "--verbose" } },
+        { 'w', 'w', (OPTION_flags)0, { "--warnings" } },
+        { 'y', 'y', (OPTION_flags)0, { "--yydebug" } },
+        { 0, 0, (OPTION_flags)0, { NULL } }
+    };
+    return cmd_options;
+}
+
+/*
+
 =item C<int longopt_get(PARROT_INTERP, int argc, const char* argv[], const
 struct longopt_opt_decl options[], struct longopt_opt_info* info_buf)>
 
@@ -83,6 +136,7 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 int
 longopt_get(PARROT_INTERP, int argc, ARGIN(const char* argv[]),
             ARGIN(const struct longopt_opt_decl options[]),
@@ -134,6 +188,7 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static int
 longopt_get_longopt(PARROT_INTERP, int argc, ARGIN(const char* argv[]),
                     ARGIN(const struct longopt_opt_decl options[]),
@@ -231,6 +286,7 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static int
 longopt_get_shortopt(PARROT_INTERP, int argc, ARGIN(const char* argv[]),
                      ARGIN(const struct longopt_opt_decl options[]),

Modified: branches/gsoc_threads/src/main.c
==============================================================================
--- branches/gsoc_threads/src/main.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/main.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -45,17 +45,20 @@
 static void Parrot_version(void);
 PARROT_CAN_RETURN_NULL
 static const char * parseflags(PARROT_INTERP,
-    ARGMOD(int *argc),
-    ARGMOD(const char **argv[]),
+    int argc,
+    ARGIN(const char *argv[]),
+    ARGOUT(int *pgm_argc),
+    ARGOUT(const char ***pgm_argv),
     ARGMOD(Parrot_Run_core_t *core),
     ARGMOD(Parrot_trace_flags *trace))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
         __attribute__nonnull__(5)
-        FUNC_MODIFIES(*argc)
-        FUNC_MODIFIES(*argv[])
+        __attribute__nonnull__(6)
+        __attribute__nonnull__(7)
+        FUNC_MODIFIES(*pgm_argc)
+        FUNC_MODIFIES(*pgm_argv)
         FUNC_MODIFIES(*core)
         FUNC_MODIFIES(*trace);
 
@@ -76,8 +79,9 @@
 #define ASSERT_ARGS_Parrot_version __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_parseflags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(argc) \
     , PARROT_ASSERT_ARG(argv) \
+    , PARROT_ASSERT_ARG(pgm_argc) \
+    , PARROT_ASSERT_ARG(pgm_argv) \
     , PARROT_ASSERT_ARG(core) \
     , PARROT_ASSERT_ARG(trace))
 #define ASSERT_ARGS_parseflags_minimal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -101,11 +105,13 @@
 int
 main(int argc, const char *argv[])
 {
-    int         stacktop;
-    const char *sourcefile;
-    const char *execname;
-    Interp     *interp;
-    int         status;
+    int          stacktop;
+    const char  *sourcefile;
+    const char  *execname;
+    Interp      *interp;
+    int          status;
+    int          pir_argc;
+    const char **pir_argv;
 
     Parrot_Run_core_t  core  = PARROT_SLOW_CORE;
     Parrot_trace_flags trace = PARROT_NO_TRACE;
@@ -129,66 +135,28 @@
 
     /* Now initialize interpreter */
     initialize_interpreter(interp, (void*)&stacktop);
-    imcc_initialize(interp);
 
     /* Parse flags */
-    sourcefile = parseflags(interp, &argc, &argv, &core, &trace);
+    sourcefile = parseflags(interp, argc, argv, &pir_argc, &pir_argv, &core, &trace);
 
     Parrot_set_trace(interp, trace);
     Parrot_set_run_core(interp, (Parrot_Run_core_t) core);
     Parrot_set_executable_name(interp, Parrot_str_new(interp, execname, 0));
 
-    status     = imcc_run(interp, sourcefile, argc, argv);
-    UNUSED(status);
+    status = imcc_run(interp, sourcefile, argc, argv);
+
+    if (status)
+        imcc_run_pbc(interp, interp->output_file, pir_argc, pir_argv);
 
     /* Clean-up after ourselves */
     Parrot_destroy(interp);
     Parrot_exit(interp, 0);
 }
 
-#define OPT_GC_DEBUG       128
-#define OPT_DESTROY_FLAG   129
-#define OPT_HELP_DEBUG     130
-#define OPT_PBC_OUTPUT     131
-#define OPT_RUNTIME_PREFIX 132
-#define OPT_HASH_SEED      133
-
 #define SET_FLAG(flag)   Parrot_set_flag(interp, (flag))
 #define SET_DEBUG(flag)  Parrot_set_debug(interp, (flag))
 #define SET_TRACE(flag)  Parrot_set_trace(interp, (flag))
 
-static struct longopt_opt_decl options[] = {
-    { '.', '.', (OPTION_flags)0, { "--wait" } },
-    { 'D', 'D', OPTION_optional_FLAG, { "--parrot-debug" } },
-    { 'E', 'E', (OPTION_flags)0, { "--pre-process-only" } },
-    { 'G', 'G', (OPTION_flags)0, { "--no-gc" } },
-    { '\0', OPT_HASH_SEED, OPTION_required_FLAG, { "--hash-seed" } },
-    { 'I', 'I', OPTION_required_FLAG, { "--include" } },
-    { 'L', 'L', OPTION_required_FLAG, { "--library" } },
-    { 'O', 'O', OPTION_optional_FLAG, { "--optimize" } },
-    { 'R', 'R', OPTION_required_FLAG, { "--runcore" } },
-    { 'g', 'g', OPTION_required_FLAG, { "--gc" } },
-    { 'V', 'V', (OPTION_flags)0, { "--version" } },
-    { 'X', 'X', OPTION_required_FLAG, { "--dynext" } },
-    { '\0', OPT_DESTROY_FLAG, (OPTION_flags)0,
-                                 { "--leak-test", "--destroy-at-end" } },
-    { '\0', OPT_GC_DEBUG, (OPTION_flags)0, { "--gc-debug" } },
-    { 'a', 'a', (OPTION_flags)0, { "--pasm" } },
-    { 'c', 'c', (OPTION_flags)0, { "--pbc" } },
-    { 'd', 'd', OPTION_optional_FLAG, { "--imcc-debug" } },
-    { '\0', OPT_HELP_DEBUG, (OPTION_flags)0, { "--help-debug" } },
-    { 'h', 'h', (OPTION_flags)0, { "--help" } },
-    { 'o', 'o', OPTION_required_FLAG, { "--output" } },
-    { '\0', OPT_PBC_OUTPUT, (OPTION_flags)0, { "--output-pbc" } },
-    { 'r', 'r', (OPTION_flags)0, { "--run-pbc" } },
-    { '\0', OPT_RUNTIME_PREFIX, (OPTION_flags)0, { "--runtime-prefix" } },
-    { 't', 't', OPTION_optional_FLAG, { "--trace" } },
-    { 'v', 'v', (OPTION_flags)0, { "--verbose" } },
-    { 'w', 'w', (OPTION_flags)0, { "--warnings" } },
-    { 'y', 'y', (OPTION_flags)0, { "--yydebug" } },
-    { 0, 0, (OPTION_flags)0, { NULL } }
-};
-
 /*
 
 =item C<static int is_all_hex_digits(const char *s)>
@@ -423,8 +391,9 @@
 
 /*
 
-=item C<static const char * parseflags(PARROT_INTERP, int *argc, const char
-**argv[], Parrot_Run_core_t *core, Parrot_trace_flags *trace)>
+=item C<static const char * parseflags(PARROT_INTERP, int argc, const char
+*argv[], int *pgm_argc, const char ***pgm_argv, Parrot_Run_core_t *core,
+Parrot_trace_flags *trace)>
 
 Parse Parrot's command line for options and set appropriate flags.
 
@@ -435,26 +404,20 @@
 PARROT_CAN_RETURN_NULL
 static const char *
 parseflags(PARROT_INTERP,
-        ARGMOD(int *argc), ARGMOD(const char **argv[]),
+        int argc, ARGIN(const char *argv[]),
+        ARGOUT(int *pgm_argc), ARGOUT(const char ***pgm_argv),
         ARGMOD(Parrot_Run_core_t *core), ARGMOD(Parrot_trace_flags *trace))
 {
     ASSERT_ARGS(parseflags)
     struct longopt_opt_info opt  = LONGOPT_OPT_INFO_INIT;
     int                     status;
-    /* g++ complains if we cast char** to const char** directly. However, nobody
-       ever complains if you const to void* first. Sure we lose a certain
-       amount of compiler-enforced type safety, but this is a rare occasion
-       with a very long explanatory comment. */
-    const char ** const _tempargv = (const char **)((void *)*argv);
 
-    if (*argc == 1) {
+    if (argc == 1) {
         usage(stderr);
         exit(EXIT_SUCCESS);
     }
 
-    imcc_start_handling_flags(interp);
-
-    while ((status = longopt_get(interp, *argc, _tempargv, options, &opt)) > 0) {
+    while ((status = longopt_get(interp, argc, argv, Parrot_cmd_options(), &opt)) > 0) {
         switch (opt.opt_id) {
           case 'R':
             if (STREQ(opt.opt_arg, "slow") || STREQ(opt.opt_arg, "bounds"))
@@ -544,16 +507,19 @@
             Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
                     PARROT_LIB_PATH_DYNEXT);
             break;
+          case 'w':
+            /* FIXME It's not best way to set warnings... */
+            Parrot_setwarnings(interp, PARROT_WARNINGS_ALL_FLAG);
+            break;
+          case 'o':
+            interp->output_file = opt.opt_arg;
+            break;
+          case OPT_PBC_OUTPUT:
+            if (!interp->output_file)
+                interp->output_file = "-";
           default:
-            /* Delegate handling of IMCC flags to IMCC */
-            if (imcc_handle_flag(interp, &opt, core))
-                break;
-
-            /* PIRC flags handling goes here */
-            fprintf(stderr,
-                    "main: Invalid flag '%s' used.\n\nhelp: parrot -h\n",
-                    (*argv)[0]);
-            exit(EXIT_FAILURE);
+            /* languages handle their arguments later (after being initialized) */
+            break;
         }
     }
 
@@ -564,7 +530,7 @@
     }
 
     /* reached the end of the option list and consumed all of argv */
-    if (*argc == opt.opt_index) {
+    if (argc == opt.opt_index) {
         if (interp->output_file) {
             fprintf(stderr, "Missing program name or argument for -o\n");
         }
@@ -576,10 +542,10 @@
         exit(EXIT_FAILURE);
     }
 
-    *argc -= opt.opt_index;
-    *argv += opt.opt_index;
+    *pgm_argc = argc - opt.opt_index;
+    *pgm_argv = argv + opt.opt_index;
 
-    return (*argv)[0];
+    return (*pgm_argv)[0];
 }
 /*
 

Modified: branches/gsoc_threads/src/oo.c
==============================================================================
--- branches/gsoc_threads/src/oo.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/oo.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -156,6 +156,9 @@
 
 Lookup a class object from a namespace, string, or key PMC.
 
+TODO: This function is terribly inefficient. It needs to be refactored in a
+major way
+
 =cut
 
 */
@@ -169,51 +172,52 @@
     ASSERT_ARGS(Parrot_oo_get_class)
     PMC *classobj = PMCNULL;
 
-    if (!PMC_IS_NULL(key)) {
-        if (PObj_is_class_TEST(key))
-            classobj = key;
-        else {
-            /* Fast select of behavior based on type of the lookup key */
-            switch (key->vtable->base_type) {
-              case enum_class_NameSpace:
-                classobj = VTABLE_get_class(interp, key);
-                break;
-              case enum_class_String:
-              case enum_class_Key:
-              case enum_class_ResizableStringArray:
-                {
-                    PMC * const hll_ns = VTABLE_get_pmc_keyed_int(interp,
-                                            interp->HLL_namespace,
-                                            Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp)));
-                    PMC * const ns     = Parrot_get_namespace_keyed(interp,
-                                            hll_ns, key);
+    if (PMC_IS_NULL(key))
+        return PMCNULL;
 
-                    if (!PMC_IS_NULL(ns))
-                        classobj = VTABLE_get_class(interp, ns);
-                }
-              default:
-                break;
+    if (PObj_is_class_TEST(key))
+        classobj = key;
+    else {
+        /* Fast select of behavior based on type of the lookup key */
+        switch (key->vtable->base_type) {
+          case enum_class_NameSpace:
+            classobj = VTABLE_get_class(interp, key);
+            break;
+          case enum_class_String:
+          case enum_class_Key:
+          case enum_class_ResizableStringArray:
+            {
+                PMC * const hll_ns = VTABLE_get_pmc_keyed_int(interp,
+                                        interp->HLL_namespace,
+                                        Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp)));
+                PMC * const ns     = Parrot_get_namespace_keyed(interp,
+                                        hll_ns, key);
+
+                if (!PMC_IS_NULL(ns))
+                    classobj = VTABLE_get_class(interp, ns);
             }
+          default:
+            break;
         }
+    }
 
-        /* If the PMCProxy doesn't exist yet for the given key, we look up the
-           type ID here and create a new one */
-        if (PMC_IS_NULL(classobj)) {
-            INTVAL type;
-            const INTVAL base_type = key->vtable->base_type;
-
-            /* This is a hack! All PMCs should be able to be handled through
-               a single codepath, and all of them should be able to avoid
-               stringification because it's so imprecise. */
-            if (base_type == enum_class_Key
-             || base_type == enum_class_ResizableStringArray
-             || base_type == enum_class_String)
-                type = Parrot_pmc_get_type(interp, key);
-            else
-                type = Parrot_pmc_get_type_str(interp, VTABLE_get_string(interp, key));
+    /* If the PMCProxy doesn't exist yet for the given key, we look up the
+       type ID here and create a new one */
+    if (PMC_IS_NULL(classobj)) {
+        INTVAL type;
+        const INTVAL base_type = key->vtable->base_type;
+
+        /* This is a hack! All PMCs should be able to be handled through
+           a single codepath, and all of them should be able to avoid
+           stringification because it's so imprecise. */
+        if (base_type == enum_class_Key
+         || base_type == enum_class_ResizableStringArray
+         || base_type == enum_class_String)
+            type = Parrot_pmc_get_type(interp, key);
+        else
+            type = Parrot_pmc_get_type_str(interp, VTABLE_get_string(interp, key));
 
-            classobj = get_pmc_proxy(interp, type);
-        }
+        classobj = get_pmc_proxy(interp, type);
     }
 
     return classobj;
@@ -264,7 +268,6 @@
     /* Now clone attributes list.class. */
     cloned_guts               = (Parrot_Object_attributes *) PMC_data(cloned);
     cloned_guts->_class       = obj->_class;
-    cloned_guts->attrib_store = NULL; /* XXX Do we need to set ->attrib_store twice? */
     cloned_guts->attrib_store = VTABLE_clone(interp, obj->attrib_store);
     num_attrs                 = VTABLE_elements(interp, cloned_guts->attrib_store);
     for (i = 0; i < num_attrs; ++i) {
@@ -350,7 +353,8 @@
 
 =item C<PMC * Parrot_oo_get_class_str(PARROT_INTERP, STRING *name)>
 
-Lookup a class object from a builtin string.
+Lookup a class object from the string C<name>. If the metaobject is found,
+return it. Otherwise, create a new PMCProxy for the type ID number.
 
 =cut
 
@@ -388,7 +392,7 @@
 
 =item C<PMC * Parrot_oo_newclass_from_str(PARROT_INTERP, STRING *name)>
 
-Create a new class object from a string name.
+Create a new Class PMC for a new type of the given C<name>.
 
 =cut
 
@@ -419,7 +423,8 @@
 =item C<PMC * Parrot_oo_find_vtable_override_for_class(PARROT_INTERP, PMC
 *classobj, STRING *name)>
 
-Lookup a vtable override in a specific class object.
+Find the vtable override with the specified C<name> in the given C<classobj>
+metaobject.
 
 =cut
 

Modified: branches/gsoc_threads/src/ops/bit.ops
==============================================================================
--- branches/gsoc_threads/src/ops/bit.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/bit.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -32,6 +32,9 @@
 
 The variant with an appended B<s> like B<bands> work on strings.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =over 4
 
 =cut
@@ -40,19 +43,11 @@
 
 =item B<band>(inout INT, in INT)
 
-=item B<band>(invar PMC, in INT)
-
-=item B<band>(invar PMC, invar PMC)
-
 Set the bits of $1 according to the B<and> of the corresponding bits
 from $1 and $2.
 
 =item B<band>(out INT, in INT, in INT)
 
-=item B<band>(invar PMC, invar PMC, in INT)
-
-=item B<band>(invar PMC, invar PMC, invar PMC)
-
 Set the bits of $1 according to the B<and> of the corresponding bits
 from $2 and $3.
 
@@ -62,156 +57,19 @@
     $1 &= $2;
 }
 
-inline op band(invar PMC, in INT) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    const INTVAL b = a & $2;
-    VTABLE_set_integer_native(interp, $1, b);
-}
-
-inline op band(invar PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    const INTVAL b = VTABLE_get_integer(interp, $2);
-    VTABLE_set_integer_native(interp, $1, a & b);
-}
-
 inline op band(out INT, in INT, in INT) :base_core {
     $1 = $2 & $3;
 }
 
-inline op band(invar PMC, invar PMC, in INT) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    VTABLE_set_integer_native(interp, $1, a & $3);
-}
-
-inline op band(invar PMC, invar PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    const INTVAL b = VTABLE_get_integer(interp, $3);
-    VTABLE_set_integer_native(interp, $1, a & b);
-}
-
-=item B<bands>(invar PMC, in STR)
-
-=item B<bands>(invar PMC, invar PMC)
-
-Set the bits of $1 according to the B<and> of the corresponding bits
-from $1 and $2.
-
-=item B<bands>(out STR, in STR, in STR)
-
-=item B<bands>(invar PMC, invar PMC, in STR)
-
-=item B<bands>(invar PMC, invar PMC, invar PMC)
-
-Set the bits of $1 according to the B<and> of the corresponding bits
-from $2 and $3.
-
-=cut
-
-inline op bands(invar PMC, in STR) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_and(interp, a, $2);
-    VTABLE_set_string_native(interp, $1, b);
-}
-
-inline op bands(invar PMC, invar PMC) :base_core {
-    STRING * a = VTABLE_get_string(interp, $1);
-    STRING * const b = VTABLE_get_string(interp, $2);
-    a = Parrot_str_bitwise_and(interp, a, b);
-    VTABLE_set_string_native(interp, $1, a);
-}
-
-inline op bands(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_and(interp, $2, $3);
-}
-
-inline op bands(invar PMC, invar PMC, in STR) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = Parrot_str_bitwise_and(interp, a, $3);
-    VTABLE_set_string_native(interp, $1, b);
-}
-
-inline op bands(invar PMC, invar PMC, invar PMC) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_and(interp, a, b);
-    VTABLE_set_string_native(interp, $1, c);
-}
-
-########################################
-
-=item B<bnot>(inout INT)
-
-=item B<bnot>(invar PMC)
-
-Sets $1 to C<bitwise not> $1 inplace.
-
-=item B<bnot>(out INT, in INT)
-
-=item B<bnot>(out PMC, invar PMC)
-
-=cut
-
-inline op bnot(inout INT) :base_core {
-    $1 = ~ $1;
-}
-
-inline op bnot(out INT, in INT) :base_core {
-    $1 = ~ $2;
-}
-
-inline op bnot(invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    VTABLE_set_integer_native(interp, $1, ~a);
-}
-
-inline op bnot(out PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    PMC * const b = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
-    VTABLE_set_integer_native(interp, b, ~a);
-    $1 = b;
-}
-
-=item B<bnots>(invar PMC)
-
-=item B<bnots>(out STR, in STR)
-
-=item B<bnots>(out PMC, invar PMC)
-
-=cut
-
-inline op bnots(out STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_not(interp, $2);
-}
-
-inline op bnots(invar PMC) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_not(interp, a);
-    VTABLE_set_string_native(interp, $1, b);
-}
-
-inline op bnots(out PMC, invar PMC) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = Parrot_str_bitwise_not(interp, a);
-    VTABLE_set_string_native(interp, $1, b);
-}
-
 ########################################
 
 =item B<bor>(inout INT, in INT)
 
-=item B<bor>(invar PMC, in INT)
-
-=item B<bor>(invar PMC, invar PMC)
-
 Set the bits of $1 according to the B<or> of the corresponding bits
 from $1 and $2.
 
 =item B<bor>(out INT, in INT, in INT)
 
-=item B<bor>(invar PMC, invar PMC, in INT)
-
-=item B<bor>(invar PMC, invar PMC, invar PMC)
-
 Set the bits of $1 according to the B<or> of the corresponding bits
 from $2 and $3.
 
@@ -221,96 +79,18 @@
     $1 |= $2;
 }
 
-inline op bor(invar PMC, in INT) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    VTABLE_set_integer_native(interp, $1, a | $2);
-}
-
-inline op bor(invar PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    const INTVAL b = VTABLE_get_integer(interp, $2);
-    VTABLE_set_integer_native(interp, $1, a | b);
-}
-
 inline op bor(out INT, in INT, in INT) :base_core {
     $1 = $2 | $3;
 }
 
-inline op bor(invar PMC, invar PMC, in INT) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    VTABLE_set_integer_native(interp, $1, a | $3);
-}
-
-inline op bor(invar PMC, invar PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    const INTVAL b = VTABLE_get_integer(interp, $3);
-    VTABLE_set_integer_native(interp, $1, a | b);
-}
-
-=item B<bors>(invar PMC, in STR)
-
-=item B<bors>(invar PMC, invar PMC)
-
-Set the bits of $1 according to the B<or> of the corresponding bits
-from $1 and $2.
-
-=item B<bors>(out STR, in STR, in STR)
-
-=item B<bors>(invar PMC, invar PMC, in STR)
-
-=item B<bors>(invar PMC, invar PMC, invar PMC)
-
-Set the bits of $1 according to the B<or> of the corresponding bits
-from $2 and $3.
-
-=cut
-
-inline op bors(invar PMC, in STR) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_or(interp, a, $2);
-    VTABLE_set_string_native(interp, $1, b);
-}
-
-inline op bors(invar PMC, invar PMC) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
-    VTABLE_set_string_native(interp, $1, c);
-}
-
-inline op bors(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_or(interp, $2, $3);
-}
-
-inline op bors(invar PMC, invar PMC, in STR) :base_core {
-    STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_or(interp, b, $3);
-    VTABLE_set_string_native(interp, $1, c);
-}
-
-inline op bors(invar PMC, invar PMC, invar PMC) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
-    VTABLE_set_string_native(interp, $1, c);
-}
-
 ########################################
 
 =item B<shl>(inout INT, in INT)
 
-=item B<shl>(invar PMC, in INT)
-
-=item B<shl>(invar PMC, invar PMC)
-
 Shift left $1 by $2 bits.
 
 =item B<shl>(out INT, in INT, in INT)
 
-=item B<shl>(invar PMC, invar PMC, in INT)
-
-=item B<shl>(invar PMC, invar PMC, invar PMC)
-
 Set $1 to the value of $2 shifted left by $3 bits.
 
 =cut
@@ -319,52 +99,18 @@
     $1 = bit_shift_left($1, $2);
 }
 
-inline op shl(invar PMC, in INT) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    const INTVAL b = bit_shift_left(a, $2);
-    VTABLE_set_integer_native(interp, $1, b);
-}
-
-inline op shl(invar PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    const INTVAL b = VTABLE_get_integer(interp, $2);
-    const INTVAL c = bit_shift_left(a, b);
-    VTABLE_set_integer_native(interp, $1, c);
-}
-
 inline op shl(out INT, in INT, in INT) :base_core {
     $1 = bit_shift_left($2, $3);
 }
 
-inline op shl(invar PMC, invar PMC, in INT) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    const INTVAL b = bit_shift_left(a, $3);
-    VTABLE_set_integer_native(interp, $1, b);
-}
-
-inline op shl(invar PMC, invar PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    const INTVAL b = VTABLE_get_integer(interp, $3);
-    const INTVAL c = bit_shift_left(a, b);
-    VTABLE_set_integer_native(interp, $1, c);
-}
-
 ########################################
 
 =item B<shr>(inout INT, in INT)
 
-=item B<shr>(invar PMC, in INT)
-
-=item B<shr>(invar PMC, invar PMC)
-
 Shift right $1 by $2 bits.
 
 =item B<shr>(out INT, in INT, in INT)
 
-=item B<shr>(invar PMC, invar PMC, in INT)
-
-=item B<shr>(invar PMC, invar PMC, invar PMC)
-
 Set $1 to the value of $2 shifted right by $3 bits.
 
 =cut
@@ -374,53 +120,19 @@
     $1 = bit_shift_left($1, signed_shift);
 }
 
-inline op shr(invar PMC, in INT) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    const INTVAL b = bit_shift_left(a, -$2);
-    VTABLE_set_integer_native(interp, $1, b);
-}
-
-inline op shr(invar PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $1);
-    const INTVAL b = VTABLE_get_integer(interp, $2);
-    const INTVAL c = bit_shift_left(a, -b);
-    VTABLE_set_integer_native(interp, $1, c);
-}
-
 inline op shr(out INT, in INT, in INT) :base_core {
     const INTVAL signed_shift = -$3;
     $1 = bit_shift_left($2, signed_shift);
 }
 
-inline op shr(invar PMC, invar PMC, in INT) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    const INTVAL c = bit_shift_left(a, -$3);
-    VTABLE_set_integer_native(interp, $1, c);
-}
-
-inline op shr(invar PMC, invar PMC, invar PMC) :base_core {
-    const INTVAL a = VTABLE_get_integer(interp, $2);
-    const INTVAL b = VTABLE_get_integer(interp, $3);
-    const INTVAL c = bit_shift_left(a, -b);
-    VTABLE_set_integer_native(interp, $1, c);
-}
-
 ########################################
 
 =item B<lsr>(out INT, in INT)
 
-=item B<lsr>(invar PMC, in INT)
-
-=item B<lsr>(invar PMC, invar PMC)
-
 Shift $1 logically shifted right by $2 bits.
 
 =item B<lsr>(out INT, in INT, in INT)
 
-=item B<lsr>(invar PMC, invar PMC, in INT)
-
-=item B<lsr>(invar PMC, invar PMC, invar PMC)
-
 Set $1 to the value of $2 logically shifted right by $3 bits.
 
 =cut
@@ -431,77 +143,19 @@
     $1 = (INTVAL)b;
 }
 
-inline op lsr(invar PMC, in INT) :base_core {
-    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $1);
-    const UINTVAL b = a >> $2;
-    VTABLE_set_integer_native(interp, $1, (INTVAL)b);
-}
-
-inline op lsr(invar PMC, invar PMC) :base_core {
-    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $1);
-    const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, $2);
-    const UINTVAL c = a >> b;
-    VTABLE_set_integer_native(interp, $1, (INTVAL)c);
-}
-
 inline op lsr(out INT, in INT, in INT) :base_core {
     $1 = (INTVAL)((UINTVAL)$2 >> $3);
 }
 
-inline op lsr(invar PMC, invar PMC, in INT) :base_core {
-    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $2);
-    const UINTVAL b = (UINTVAL)$3;
-    const UINTVAL c = a >> b;
-    VTABLE_set_integer_native(interp, $1, (INTVAL)c);
-}
-
-inline op lsr(invar PMC, invar PMC, invar PMC) :base_core {
-    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $2);
-    const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, $3);
-    const UINTVAL c = a >> b;
-    VTABLE_set_integer_native(interp, $3, (INTVAL)c);
-}
-
-=item B<rot>(out INT, in INT, in INT, inconst INT)
-
-Rotate $2 left or right by $3 and place result in $1.
-$4 is the amount of bits to rotate, 32 bit on a 32-bit CPU and 32 or 64
-on a 64-bit CPU. If the rotate count is negative a rotate right by ($3+$4)
-is performed.
-
-=cut
-
-inline op rot(out INT, in INT, in INT, inconst INT) {
-    const INTVAL r = $2;
-    INTVAL s = $3;
-    const INTVAL w = $4;
-    INTVAL d, t;
-    if (s < 0)
-        s += w;
-    d = r << s;
-    t = w - s;
-    t = (INTVAL)((UINTVAL)r >> t);
-    d |= t;
-    $1 = d;
-}
-
 ########################################
 
 =item B<bxor>(inout INT, in INT)
 
-=item B<bxor>(invar PMC, in INT)
-
-=item B<bxor>(invar PMC, invar PMC)
-
 Set the bits of $1 according to the B<xor> of the corresponding bits
 from $1 and $2.
 
 =item B<bxor>(out INT, in INT, in INT)
 
-=item B<bxor>(invar PMC, invar PMC, in INT)
-
-=item B<bxor>(invar PMC, invar PMC, invar PMC)
-
 Set the bits of $1 according to the B<xor> of the corresponding bits
 from $2 and $3.
 
@@ -511,84 +165,10 @@
     $1 ^= $2;
 }
 
-inline op bxor(invar PMC, in INT) :base_core {
-    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $1);
-    const UINTVAL b = a ^ $2;
-    VTABLE_set_integer_native(interp, $1, (INTVAL)b);
-}
-
-inline op bxor(invar PMC, invar PMC) :base_core {
-    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $1);
-    const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, $2);
-    const UINTVAL c = a ^ b;
-    VTABLE_set_integer_native(interp, $1, (INTVAL)c);
-}
-
 inline op bxor(out INT, in INT, in INT) :base_core {
     $1 = $2 ^ $3;
 }
 
-inline op bxor(invar PMC, invar PMC, in INT) :base_core {
-    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $2);
-    const UINTVAL b = a ^ $3;
-    VTABLE_set_integer_native(interp, $1, (INTVAL)b);
-}
-
-inline op bxor(invar PMC, invar PMC, invar PMC) :base_core {
-    const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, $2);
-    const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, $3);
-    const UINTVAL c = a ^ b;
-    VTABLE_set_integer_native(interp, $1, (INTVAL)c);
-}
-
-=item B<bxors>(invar PMC, in STR)
-
-=item B<bxors>(invar PMC, invar PMC)
-
-Set the bits of $1 according to the B<xor> of the corresponding bits
-from $1 and $2.
-
-=item B<bxors>(out STR, in STR, in STR)
-
-=item B<bxors>(invar PMC, invar PMC, in STR)
-
-=item B<bxors>(invar PMC, invar PMC, invar PMC)
-
-Set the bits of $1 according to the B<xor> of the corresponding bits
-from $2 and $3.
-
-=cut
-
-inline op bxors(invar PMC, in STR) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_xor(interp, a, $2);
-    VTABLE_set_string_native(interp, $1, b);
-}
-
-inline op bxors(invar PMC, invar PMC) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
-    VTABLE_set_string_native(interp, $1, c);
-}
-
-inline op bxors(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_xor(interp, $2, $3);
-}
-
-inline op bxors(invar PMC, invar PMC, in STR) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = Parrot_str_bitwise_xor(interp, a, $3);
-    VTABLE_set_string_native(interp, $1, b);
-}
-
-inline op bxors(invar PMC, invar PMC, invar PMC) :base_core {
-    STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
-    VTABLE_set_string_native(interp, $1, c);
-}
-
 =back
 
 =cut

Modified: branches/gsoc_threads/src/ops/cmp.ops
==============================================================================
--- branches/gsoc_threads/src/ops/cmp.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/cmp.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -15,6 +15,9 @@
 Some of these operations affect control flow directly; others
 do not.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =cut
 
 ###############################################################################

Modified: branches/gsoc_threads/src/ops/core.ops
==============================================================================
--- branches/gsoc_threads/src/ops/core.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/core.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -26,6 +26,9 @@
 Core operations are primarily flow control and interpreter
 introspection.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =cut
 
 # ' for emacs
@@ -379,6 +382,8 @@
     PMC      * const signature = Parrot_pcc_get_signature(interp,
                                     CURRENT_CONTEXT(interp));
 
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), dest);
+
     if (!PMC_IS_NULL(signature))
         Parrot_pcc_set_object(interp, signature, NULL);
     interp->current_cont   = NEED_CONTINUATION;
@@ -393,6 +398,8 @@
     PMC * const signature  = Parrot_pcc_get_signature(interp,
                                     CURRENT_CONTEXT(interp));
 
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), dest);
+
     if (!PMC_IS_NULL(signature))
         Parrot_pcc_set_object(interp, signature, NULL);
     interp->current_cont   = $2;
@@ -535,6 +542,7 @@
             PARROT_ERRORS_RESULT_COUNT_FLAG);
 
     argc = VTABLE_elements(interp, signature);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), PMCNULL);
     goto OFFSET(argc + 2);
 }
 
@@ -819,7 +827,8 @@
     opcode_t        *dest;
     opcode_t * const ret       = expr NEXT();
     PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
-    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit, $1, NULL);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit,
+                                                           CONTROL_EXIT, NULL);
 
     VTABLE_set_pointer(interp, resume, ret);
 
@@ -1103,7 +1112,7 @@
 
 op sweep(inconst INT) {
     if ($1)
-        Parrot_gc_mark_and_sweep(interp, 0);
+        Parrot_gc_mark_and_sweep(interp, GC_trace_normal_FLAG);
     else
         if (Parrot_gc_impatient_pmcs(interp))
             Parrot_gc_mark_and_sweep(interp, GC_lazy_FLAG);

Copied: branches/gsoc_threads/src/ops/core_ops.c (from r47544, trunk/src/ops/core_ops.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/ops/core_ops.c	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/ops/core_ops.c)
@@ -0,0 +1,25182 @@
+
+/* ex: set ro:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from 'src/ops/core.ops' (and possibly other
+ * .ops files). by ops2c.nqp.
+ *
+ * Any changes made here will be lost!  To regenerate this file after making
+ * changes to any ops, use the bootstap-ops makefile target.
+ *
+ */
+
+#include "parrot/oplib/core_ops.h"
+#include "pmc/pmc_parrotlibrary.h"
+#include "pmc/pmc_callcontext.h"
+
+
+/* defines - Ops::Trans::C */
+#undef CONST
+#define REL_PC     ((size_t)(cur_opcode - (opcode_t *)interp->code->base.data))
+#define CUR_OPCODE cur_opcode
+#define IREG(i) (CUR_CTX->bp.regs_i[cur_opcode[i]])
+#define NREG(i) (CUR_CTX->bp.regs_n[-1L - cur_opcode[i]])
+#define PREG(i) (CUR_CTX->bp_ps.regs_p[-1L - cur_opcode[i]])
+#define SREG(i) (CUR_CTX->bp_ps.regs_s[cur_opcode[i]])
+#define CONST(i) Parrot_pcc_get_constants(interp, interp->ctx)[cur_opcode[i]]
+
+static int get_op(PARROT_INTERP, const char * name, int full);
+
+
+
+
+#include "parrot/dynext.h"
+#include "parrot/embed.h"
+#include "parrot/runcore_api.h"
+#include "pmc/pmc_continuation.h"
+#include "pmc/pmc_parrotlibrary.h"
+
+
+ /* Signed shift operator that is compatible with PMC shifts.  This is
+  * guaranteed to produce the same result as bitwise_left_shift_internal modulo
+  * word size, ignoring the fact that Parrot integers are always signed.  This
+  * usually gives the same answer regardless whether you shift PMC operands and
+  * then assign to an I-reg, or move the operands to I-regs and do the shift
+  * there -- except when the true result is between 2^{w-1} and 2^w (where w is
+  * the word size), in which case the high order bit is taken as the sign,
+  * giving a truncated result that is 2^w lower.
+  */
+#define bit_shift_left(number, bits) \
+    ((bits) >= 8*INTVAL_SIZE     ? 0                    \
+     : (bits) >= 0               ? (number) << (bits)   \
+     : (bits) > -8*INTVAL_SIZE   ? (number) >> -(bits)   \
+     : 0)
+
+
+#include "../io/io_private.h"
+
+
+#if PARROT_HAS_ICU
+#  include <unicode/uchar.h>
+#endif
+
+
+
+INTVAL core_numops = 1084;
+
+/*
+** Op Function Table:
+*/
+
+static op_func_t core_op_func_table[1084] = {
+  Parrot_end,                                        /*      0 */
+  Parrot_noop,                                       /*      1 */
+  Parrot_check_events,                               /*      2 */
+  Parrot_check_events__,                             /*      3 */
+  Parrot_wrapper__,                                  /*      4 */
+  Parrot_load_bytecode_s,                            /*      5 */
+  Parrot_load_bytecode_sc,                           /*      6 */
+  Parrot_load_language_s,                            /*      7 */
+  Parrot_load_language_sc,                           /*      8 */
+  Parrot_branch_i,                                   /*      9 */
+  Parrot_branch_ic,                                  /*     10 */
+  Parrot_local_branch_p_i,                           /*     11 */
+  Parrot_local_branch_p_ic,                          /*     12 */
+  Parrot_local_return_p,                             /*     13 */
+  Parrot_jump_i,                                     /*     14 */
+  Parrot_jump_ic,                                    /*     15 */
+  Parrot_enternative,                                /*     16 */
+  Parrot_if_i_ic,                                    /*     17 */
+  Parrot_if_n_ic,                                    /*     18 */
+  Parrot_if_s_ic,                                    /*     19 */
+  Parrot_if_p_ic,                                    /*     20 */
+  Parrot_unless_i_ic,                                /*     21 */
+  Parrot_unless_n_ic,                                /*     22 */
+  Parrot_unless_s_ic,                                /*     23 */
+  Parrot_unless_p_ic,                                /*     24 */
+  Parrot_invokecc_p,                                 /*     25 */
+  Parrot_invoke_p_p,                                 /*     26 */
+  Parrot_yield,                                      /*     27 */
+  Parrot_tailcall_p,                                 /*     28 */
+  Parrot_returncc,                                   /*     29 */
+  Parrot_capture_lex_p,                              /*     30 */
+  Parrot_newclosure_p_p,                             /*     31 */
+  Parrot_set_args_pc,                                /*     32 */
+  Parrot_get_params_pc,                              /*     33 */
+  Parrot_set_returns_pc,                             /*     34 */
+  Parrot_get_results_pc,                             /*     35 */
+  Parrot_set_result_info_p,                          /*     36 */
+  Parrot_set_result_info_pc,                         /*     37 */
+  Parrot_result_info_p,                              /*     38 */
+  Parrot_set_addr_i_ic,                              /*     39 */
+  Parrot_set_addr_p_ic,                              /*     40 */
+  Parrot_set_addr_p_i,                               /*     41 */
+  Parrot_get_addr_i_p,                               /*     42 */
+  Parrot_schedule_p,                                 /*     43 */
+  Parrot_addhandler_p,                               /*     44 */
+  Parrot_push_eh_ic,                                 /*     45 */
+  Parrot_push_eh_p,                                  /*     46 */
+  Parrot_pop_eh,                                     /*     47 */
+  Parrot_throw_p,                                    /*     48 */
+  Parrot_throw_p_p,                                  /*     49 */
+  Parrot_rethrow_p,                                  /*     50 */
+  Parrot_count_eh_i,                                 /*     51 */
+  Parrot_die_s,                                      /*     52 */
+  Parrot_die_sc,                                     /*     53 */
+  Parrot_die_p,                                      /*     54 */
+  Parrot_die_pc,                                     /*     55 */
+  Parrot_die_i_i,                                    /*     56 */
+  Parrot_die_ic_i,                                   /*     57 */
+  Parrot_die_i_ic,                                   /*     58 */
+  Parrot_die_ic_ic,                                  /*     59 */
+  Parrot_exit_i,                                     /*     60 */
+  Parrot_exit_ic,                                    /*     61 */
+  Parrot_debug_i,                                    /*     62 */
+  Parrot_debug_ic,                                   /*     63 */
+  Parrot_bounds_i,                                   /*     64 */
+  Parrot_bounds_ic,                                  /*     65 */
+  Parrot_profile_i,                                  /*     66 */
+  Parrot_profile_ic,                                 /*     67 */
+  Parrot_trace_i,                                    /*     68 */
+  Parrot_trace_ic,                                   /*     69 */
+  Parrot_gc_debug_i,                                 /*     70 */
+  Parrot_gc_debug_ic,                                /*     71 */
+  Parrot_interpinfo_i_i,                             /*     72 */
+  Parrot_interpinfo_i_ic,                            /*     73 */
+  Parrot_interpinfo_p_i,                             /*     74 */
+  Parrot_interpinfo_p_ic,                            /*     75 */
+  Parrot_interpinfo_s_i,                             /*     76 */
+  Parrot_interpinfo_s_ic,                            /*     77 */
+  Parrot_warningson_i,                               /*     78 */
+  Parrot_warningson_ic,                              /*     79 */
+  Parrot_warningsoff_i,                              /*     80 */
+  Parrot_warningsoff_ic,                             /*     81 */
+  Parrot_errorson_i,                                 /*     82 */
+  Parrot_errorson_ic,                                /*     83 */
+  Parrot_errorsoff_i,                                /*     84 */
+  Parrot_errorsoff_ic,                               /*     85 */
+  Parrot_runinterp_p_i,                              /*     86 */
+  Parrot_runinterp_p_ic,                             /*     87 */
+  Parrot_getinterp_p,                                /*     88 */
+  Parrot_sweep_ic,                                   /*     89 */
+  Parrot_collect,                                    /*     90 */
+  Parrot_sweepoff,                                   /*     91 */
+  Parrot_sweepon,                                    /*     92 */
+  Parrot_collectoff,                                 /*     93 */
+  Parrot_collecton,                                  /*     94 */
+  Parrot_needs_destroy_p,                            /*     95 */
+  Parrot_loadlib_p_s,                                /*     96 */
+  Parrot_loadlib_p_sc,                               /*     97 */
+  Parrot_loadlib_p_s_p,                              /*     98 */
+  Parrot_loadlib_p_sc_p,                             /*     99 */
+  Parrot_loadlib_p_s_pc,                             /*    100 */
+  Parrot_loadlib_p_sc_pc,                            /*    101 */
+  Parrot_dlfunc_p_p_s_s,                             /*    102 */
+  Parrot_dlfunc_p_p_sc_s,                            /*    103 */
+  Parrot_dlfunc_p_p_s_sc,                            /*    104 */
+  Parrot_dlfunc_p_p_sc_sc,                           /*    105 */
+  Parrot_dlvar_p_p_s,                                /*    106 */
+  Parrot_dlvar_p_p_sc,                               /*    107 */
+  Parrot_compreg_s_p,                                /*    108 */
+  Parrot_compreg_sc_p,                               /*    109 */
+  Parrot_compreg_p_s,                                /*    110 */
+  Parrot_compreg_p_sc,                               /*    111 */
+  Parrot_new_callback_p_p_p_s,                       /*    112 */
+  Parrot_new_callback_p_p_p_sc,                      /*    113 */
+  Parrot_annotations_p,                              /*    114 */
+  Parrot_annotations_p_s,                            /*    115 */
+  Parrot_annotations_p_sc,                           /*    116 */
+  Parrot_band_i_i,                                   /*    117 */
+  Parrot_band_i_ic,                                  /*    118 */
+  Parrot_band_i_i_i,                                 /*    119 */
+  Parrot_band_i_ic_i,                                /*    120 */
+  Parrot_band_i_i_ic,                                /*    121 */
+  Parrot_bor_i_i,                                    /*    122 */
+  Parrot_bor_i_ic,                                   /*    123 */
+  Parrot_bor_i_i_i,                                  /*    124 */
+  Parrot_bor_i_ic_i,                                 /*    125 */
+  Parrot_bor_i_i_ic,                                 /*    126 */
+  Parrot_shl_i_i,                                    /*    127 */
+  Parrot_shl_i_ic,                                   /*    128 */
+  Parrot_shl_i_i_i,                                  /*    129 */
+  Parrot_shl_i_ic_i,                                 /*    130 */
+  Parrot_shl_i_i_ic,                                 /*    131 */
+  Parrot_shr_i_i,                                    /*    132 */
+  Parrot_shr_i_ic,                                   /*    133 */
+  Parrot_shr_i_i_i,                                  /*    134 */
+  Parrot_shr_i_ic_i,                                 /*    135 */
+  Parrot_shr_i_i_ic,                                 /*    136 */
+  Parrot_lsr_i_i,                                    /*    137 */
+  Parrot_lsr_i_ic,                                   /*    138 */
+  Parrot_lsr_i_i_i,                                  /*    139 */
+  Parrot_lsr_i_ic_i,                                 /*    140 */
+  Parrot_lsr_i_i_ic,                                 /*    141 */
+  Parrot_bxor_i_i,                                   /*    142 */
+  Parrot_bxor_i_ic,                                  /*    143 */
+  Parrot_bxor_i_i_i,                                 /*    144 */
+  Parrot_bxor_i_ic_i,                                /*    145 */
+  Parrot_bxor_i_i_ic,                                /*    146 */
+  Parrot_eq_i_i_ic,                                  /*    147 */
+  Parrot_eq_ic_i_ic,                                 /*    148 */
+  Parrot_eq_i_ic_ic,                                 /*    149 */
+  Parrot_eq_n_n_ic,                                  /*    150 */
+  Parrot_eq_nc_n_ic,                                 /*    151 */
+  Parrot_eq_n_nc_ic,                                 /*    152 */
+  Parrot_eq_s_s_ic,                                  /*    153 */
+  Parrot_eq_sc_s_ic,                                 /*    154 */
+  Parrot_eq_s_sc_ic,                                 /*    155 */
+  Parrot_eq_p_p_ic,                                  /*    156 */
+  Parrot_eq_p_i_ic,                                  /*    157 */
+  Parrot_eq_p_ic_ic,                                 /*    158 */
+  Parrot_eq_p_n_ic,                                  /*    159 */
+  Parrot_eq_p_nc_ic,                                 /*    160 */
+  Parrot_eq_p_s_ic,                                  /*    161 */
+  Parrot_eq_p_sc_ic,                                 /*    162 */
+  Parrot_eq_str_p_p_ic,                              /*    163 */
+  Parrot_eq_num_p_p_ic,                              /*    164 */
+  Parrot_eq_addr_s_s_ic,                             /*    165 */
+  Parrot_eq_addr_sc_s_ic,                            /*    166 */
+  Parrot_eq_addr_s_sc_ic,                            /*    167 */
+  Parrot_eq_addr_sc_sc_ic,                           /*    168 */
+  Parrot_eq_addr_p_p_ic,                             /*    169 */
+  Parrot_ne_i_i_ic,                                  /*    170 */
+  Parrot_ne_ic_i_ic,                                 /*    171 */
+  Parrot_ne_i_ic_ic,                                 /*    172 */
+  Parrot_ne_n_n_ic,                                  /*    173 */
+  Parrot_ne_nc_n_ic,                                 /*    174 */
+  Parrot_ne_n_nc_ic,                                 /*    175 */
+  Parrot_ne_s_s_ic,                                  /*    176 */
+  Parrot_ne_sc_s_ic,                                 /*    177 */
+  Parrot_ne_s_sc_ic,                                 /*    178 */
+  Parrot_ne_p_p_ic,                                  /*    179 */
+  Parrot_ne_p_i_ic,                                  /*    180 */
+  Parrot_ne_p_ic_ic,                                 /*    181 */
+  Parrot_ne_p_n_ic,                                  /*    182 */
+  Parrot_ne_p_nc_ic,                                 /*    183 */
+  Parrot_ne_p_s_ic,                                  /*    184 */
+  Parrot_ne_p_sc_ic,                                 /*    185 */
+  Parrot_ne_str_p_p_ic,                              /*    186 */
+  Parrot_ne_num_p_p_ic,                              /*    187 */
+  Parrot_ne_addr_s_s_ic,                             /*    188 */
+  Parrot_ne_addr_sc_s_ic,                            /*    189 */
+  Parrot_ne_addr_s_sc_ic,                            /*    190 */
+  Parrot_ne_addr_sc_sc_ic,                           /*    191 */
+  Parrot_ne_addr_p_p_ic,                             /*    192 */
+  Parrot_lt_i_i_ic,                                  /*    193 */
+  Parrot_lt_ic_i_ic,                                 /*    194 */
+  Parrot_lt_i_ic_ic,                                 /*    195 */
+  Parrot_lt_n_n_ic,                                  /*    196 */
+  Parrot_lt_nc_n_ic,                                 /*    197 */
+  Parrot_lt_n_nc_ic,                                 /*    198 */
+  Parrot_lt_s_s_ic,                                  /*    199 */
+  Parrot_lt_sc_s_ic,                                 /*    200 */
+  Parrot_lt_s_sc_ic,                                 /*    201 */
+  Parrot_lt_p_p_ic,                                  /*    202 */
+  Parrot_lt_p_i_ic,                                  /*    203 */
+  Parrot_lt_p_ic_ic,                                 /*    204 */
+  Parrot_lt_p_n_ic,                                  /*    205 */
+  Parrot_lt_p_nc_ic,                                 /*    206 */
+  Parrot_lt_p_s_ic,                                  /*    207 */
+  Parrot_lt_p_sc_ic,                                 /*    208 */
+  Parrot_lt_str_p_p_ic,                              /*    209 */
+  Parrot_lt_num_p_p_ic,                              /*    210 */
+  Parrot_le_i_i_ic,                                  /*    211 */
+  Parrot_le_ic_i_ic,                                 /*    212 */
+  Parrot_le_i_ic_ic,                                 /*    213 */
+  Parrot_le_n_n_ic,                                  /*    214 */
+  Parrot_le_nc_n_ic,                                 /*    215 */
+  Parrot_le_n_nc_ic,                                 /*    216 */
+  Parrot_le_s_s_ic,                                  /*    217 */
+  Parrot_le_sc_s_ic,                                 /*    218 */
+  Parrot_le_s_sc_ic,                                 /*    219 */
+  Parrot_le_p_p_ic,                                  /*    220 */
+  Parrot_le_p_i_ic,                                  /*    221 */
+  Parrot_le_p_ic_ic,                                 /*    222 */
+  Parrot_le_p_n_ic,                                  /*    223 */
+  Parrot_le_p_nc_ic,                                 /*    224 */
+  Parrot_le_p_s_ic,                                  /*    225 */
+  Parrot_le_p_sc_ic,                                 /*    226 */
+  Parrot_le_str_p_p_ic,                              /*    227 */
+  Parrot_le_num_p_p_ic,                              /*    228 */
+  Parrot_gt_p_p_ic,                                  /*    229 */
+  Parrot_gt_p_i_ic,                                  /*    230 */
+  Parrot_gt_p_ic_ic,                                 /*    231 */
+  Parrot_gt_p_n_ic,                                  /*    232 */
+  Parrot_gt_p_nc_ic,                                 /*    233 */
+  Parrot_gt_p_s_ic,                                  /*    234 */
+  Parrot_gt_p_sc_ic,                                 /*    235 */
+  Parrot_gt_str_p_p_ic,                              /*    236 */
+  Parrot_gt_num_p_p_ic,                              /*    237 */
+  Parrot_ge_p_p_ic,                                  /*    238 */
+  Parrot_ge_p_i_ic,                                  /*    239 */
+  Parrot_ge_p_ic_ic,                                 /*    240 */
+  Parrot_ge_p_n_ic,                                  /*    241 */
+  Parrot_ge_p_nc_ic,                                 /*    242 */
+  Parrot_ge_p_s_ic,                                  /*    243 */
+  Parrot_ge_p_sc_ic,                                 /*    244 */
+  Parrot_ge_str_p_p_ic,                              /*    245 */
+  Parrot_ge_num_p_p_ic,                              /*    246 */
+  Parrot_if_null_p_ic,                               /*    247 */
+  Parrot_if_null_s_ic,                               /*    248 */
+  Parrot_unless_null_p_ic,                           /*    249 */
+  Parrot_unless_null_s_ic,                           /*    250 */
+  Parrot_cmp_i_i_i,                                  /*    251 */
+  Parrot_cmp_i_ic_i,                                 /*    252 */
+  Parrot_cmp_i_i_ic,                                 /*    253 */
+  Parrot_cmp_i_n_n,                                  /*    254 */
+  Parrot_cmp_i_nc_n,                                 /*    255 */
+  Parrot_cmp_i_n_nc,                                 /*    256 */
+  Parrot_cmp_i_s_s,                                  /*    257 */
+  Parrot_cmp_i_sc_s,                                 /*    258 */
+  Parrot_cmp_i_s_sc,                                 /*    259 */
+  Parrot_cmp_i_p_p,                                  /*    260 */
+  Parrot_cmp_i_p_i,                                  /*    261 */
+  Parrot_cmp_i_p_ic,                                 /*    262 */
+  Parrot_cmp_i_p_n,                                  /*    263 */
+  Parrot_cmp_i_p_nc,                                 /*    264 */
+  Parrot_cmp_i_p_s,                                  /*    265 */
+  Parrot_cmp_i_p_sc,                                 /*    266 */
+  Parrot_cmp_str_i_p_p,                              /*    267 */
+  Parrot_cmp_num_i_p_p,                              /*    268 */
+  Parrot_cmp_pmc_p_p_p,                              /*    269 */
+  Parrot_issame_i_p_p,                               /*    270 */
+  Parrot_issame_i_s_s,                               /*    271 */
+  Parrot_issame_i_sc_s,                              /*    272 */
+  Parrot_issame_i_s_sc,                              /*    273 */
+  Parrot_issame_i_sc_sc,                             /*    274 */
+  Parrot_isntsame_i_p_p,                             /*    275 */
+  Parrot_isntsame_i_s_s,                             /*    276 */
+  Parrot_isntsame_i_sc_s,                            /*    277 */
+  Parrot_isntsame_i_s_sc,                            /*    278 */
+  Parrot_isntsame_i_sc_sc,                           /*    279 */
+  Parrot_istrue_i_p,                                 /*    280 */
+  Parrot_isfalse_i_p,                                /*    281 */
+  Parrot_isnull_i_p,                                 /*    282 */
+  Parrot_isnull_i_pc,                                /*    283 */
+  Parrot_isnull_i_s,                                 /*    284 */
+  Parrot_isnull_i_sc,                                /*    285 */
+  Parrot_isgt_i_p_p,                                 /*    286 */
+  Parrot_isge_i_p_p,                                 /*    287 */
+  Parrot_isle_i_i_i,                                 /*    288 */
+  Parrot_isle_i_ic_i,                                /*    289 */
+  Parrot_isle_i_i_ic,                                /*    290 */
+  Parrot_isle_i_n_n,                                 /*    291 */
+  Parrot_isle_i_nc_n,                                /*    292 */
+  Parrot_isle_i_n_nc,                                /*    293 */
+  Parrot_isle_i_s_s,                                 /*    294 */
+  Parrot_isle_i_sc_s,                                /*    295 */
+  Parrot_isle_i_s_sc,                                /*    296 */
+  Parrot_isle_i_p_p,                                 /*    297 */
+  Parrot_islt_i_i_i,                                 /*    298 */
+  Parrot_islt_i_ic_i,                                /*    299 */
+  Parrot_islt_i_i_ic,                                /*    300 */
+  Parrot_islt_i_n_n,                                 /*    301 */
+  Parrot_islt_i_nc_n,                                /*    302 */
+  Parrot_islt_i_n_nc,                                /*    303 */
+  Parrot_islt_i_s_s,                                 /*    304 */
+  Parrot_islt_i_sc_s,                                /*    305 */
+  Parrot_islt_i_s_sc,                                /*    306 */
+  Parrot_islt_i_p_p,                                 /*    307 */
+  Parrot_iseq_i_i_i,                                 /*    308 */
+  Parrot_iseq_i_ic_i,                                /*    309 */
+  Parrot_iseq_i_i_ic,                                /*    310 */
+  Parrot_iseq_i_n_n,                                 /*    311 */
+  Parrot_iseq_i_nc_n,                                /*    312 */
+  Parrot_iseq_i_n_nc,                                /*    313 */
+  Parrot_iseq_i_s_s,                                 /*    314 */
+  Parrot_iseq_i_sc_s,                                /*    315 */
+  Parrot_iseq_i_s_sc,                                /*    316 */
+  Parrot_iseq_i_p_p,                                 /*    317 */
+  Parrot_isne_i_i_i,                                 /*    318 */
+  Parrot_isne_i_ic_i,                                /*    319 */
+  Parrot_isne_i_i_ic,                                /*    320 */
+  Parrot_isne_i_n_n,                                 /*    321 */
+  Parrot_isne_i_nc_n,                                /*    322 */
+  Parrot_isne_i_n_nc,                                /*    323 */
+  Parrot_isne_i_s_s,                                 /*    324 */
+  Parrot_isne_i_sc_s,                                /*    325 */
+  Parrot_isne_i_s_sc,                                /*    326 */
+  Parrot_isne_i_p_p,                                 /*    327 */
+  Parrot_and_i_i_i,                                  /*    328 */
+  Parrot_and_i_ic_i,                                 /*    329 */
+  Parrot_and_i_i_ic,                                 /*    330 */
+  Parrot_and_p_p_p,                                  /*    331 */
+  Parrot_not_i,                                      /*    332 */
+  Parrot_not_i_i,                                    /*    333 */
+  Parrot_not_p,                                      /*    334 */
+  Parrot_not_p_p,                                    /*    335 */
+  Parrot_or_i_i_i,                                   /*    336 */
+  Parrot_or_i_ic_i,                                  /*    337 */
+  Parrot_or_i_i_ic,                                  /*    338 */
+  Parrot_or_p_p_p,                                   /*    339 */
+  Parrot_xor_i_i_i,                                  /*    340 */
+  Parrot_xor_i_ic_i,                                 /*    341 */
+  Parrot_xor_i_i_ic,                                 /*    342 */
+  Parrot_xor_p_p_p,                                  /*    343 */
+  Parrot_print_i,                                    /*    344 */
+  Parrot_print_ic,                                   /*    345 */
+  Parrot_print_n,                                    /*    346 */
+  Parrot_print_nc,                                   /*    347 */
+  Parrot_print_s,                                    /*    348 */
+  Parrot_print_sc,                                   /*    349 */
+  Parrot_print_p,                                    /*    350 */
+  Parrot_say_i,                                      /*    351 */
+  Parrot_say_ic,                                     /*    352 */
+  Parrot_say_n,                                      /*    353 */
+  Parrot_say_nc,                                     /*    354 */
+  Parrot_say_s,                                      /*    355 */
+  Parrot_say_sc,                                     /*    356 */
+  Parrot_say_p,                                      /*    357 */
+  Parrot_print_p_i,                                  /*    358 */
+  Parrot_print_p_ic,                                 /*    359 */
+  Parrot_print_p_n,                                  /*    360 */
+  Parrot_print_p_nc,                                 /*    361 */
+  Parrot_print_p_s,                                  /*    362 */
+  Parrot_print_p_sc,                                 /*    363 */
+  Parrot_print_p_p,                                  /*    364 */
+  Parrot_getstdin_p,                                 /*    365 */
+  Parrot_getstdout_p,                                /*    366 */
+  Parrot_getstderr_p,                                /*    367 */
+  Parrot_abs_i,                                      /*    368 */
+  Parrot_abs_n,                                      /*    369 */
+  Parrot_abs_i_i,                                    /*    370 */
+  Parrot_abs_n_n,                                    /*    371 */
+  Parrot_abs_p,                                      /*    372 */
+  Parrot_abs_p_p,                                    /*    373 */
+  Parrot_add_i_i,                                    /*    374 */
+  Parrot_add_i_ic,                                   /*    375 */
+  Parrot_add_n_n,                                    /*    376 */
+  Parrot_add_n_nc,                                   /*    377 */
+  Parrot_add_p_p,                                    /*    378 */
+  Parrot_add_p_i,                                    /*    379 */
+  Parrot_add_p_ic,                                   /*    380 */
+  Parrot_add_p_n,                                    /*    381 */
+  Parrot_add_p_nc,                                   /*    382 */
+  Parrot_add_i_i_i,                                  /*    383 */
+  Parrot_add_i_ic_i,                                 /*    384 */
+  Parrot_add_i_i_ic,                                 /*    385 */
+  Parrot_add_n_n_n,                                  /*    386 */
+  Parrot_add_n_nc_n,                                 /*    387 */
+  Parrot_add_n_n_nc,                                 /*    388 */
+  Parrot_add_p_p_p,                                  /*    389 */
+  Parrot_add_p_p_i,                                  /*    390 */
+  Parrot_add_p_p_ic,                                 /*    391 */
+  Parrot_add_p_p_n,                                  /*    392 */
+  Parrot_add_p_p_nc,                                 /*    393 */
+  Parrot_dec_i,                                      /*    394 */
+  Parrot_dec_n,                                      /*    395 */
+  Parrot_dec_p,                                      /*    396 */
+  Parrot_div_i_i,                                    /*    397 */
+  Parrot_div_i_ic,                                   /*    398 */
+  Parrot_div_n_n,                                    /*    399 */
+  Parrot_div_n_nc,                                   /*    400 */
+  Parrot_div_p_p,                                    /*    401 */
+  Parrot_div_p_i,                                    /*    402 */
+  Parrot_div_p_ic,                                   /*    403 */
+  Parrot_div_p_n,                                    /*    404 */
+  Parrot_div_p_nc,                                   /*    405 */
+  Parrot_div_i_i_i,                                  /*    406 */
+  Parrot_div_i_ic_i,                                 /*    407 */
+  Parrot_div_i_i_ic,                                 /*    408 */
+  Parrot_div_i_ic_ic,                                /*    409 */
+  Parrot_div_n_n_n,                                  /*    410 */
+  Parrot_div_n_nc_n,                                 /*    411 */
+  Parrot_div_n_n_nc,                                 /*    412 */
+  Parrot_div_n_nc_nc,                                /*    413 */
+  Parrot_div_p_p_p,                                  /*    414 */
+  Parrot_div_p_p_i,                                  /*    415 */
+  Parrot_div_p_p_ic,                                 /*    416 */
+  Parrot_div_p_p_n,                                  /*    417 */
+  Parrot_div_p_p_nc,                                 /*    418 */
+  Parrot_fdiv_i_i,                                   /*    419 */
+  Parrot_fdiv_i_ic,                                  /*    420 */
+  Parrot_fdiv_n_n,                                   /*    421 */
+  Parrot_fdiv_n_nc,                                  /*    422 */
+  Parrot_fdiv_p_p,                                   /*    423 */
+  Parrot_fdiv_p_i,                                   /*    424 */
+  Parrot_fdiv_p_ic,                                  /*    425 */
+  Parrot_fdiv_p_n,                                   /*    426 */
+  Parrot_fdiv_p_nc,                                  /*    427 */
+  Parrot_fdiv_i_i_i,                                 /*    428 */
+  Parrot_fdiv_i_ic_i,                                /*    429 */
+  Parrot_fdiv_i_i_ic,                                /*    430 */
+  Parrot_fdiv_n_n_n,                                 /*    431 */
+  Parrot_fdiv_n_nc_n,                                /*    432 */
+  Parrot_fdiv_n_n_nc,                                /*    433 */
+  Parrot_fdiv_p_p_p,                                 /*    434 */
+  Parrot_fdiv_p_p_i,                                 /*    435 */
+  Parrot_fdiv_p_p_ic,                                /*    436 */
+  Parrot_fdiv_p_p_n,                                 /*    437 */
+  Parrot_fdiv_p_p_nc,                                /*    438 */
+  Parrot_ceil_n,                                     /*    439 */
+  Parrot_ceil_i_n,                                   /*    440 */
+  Parrot_ceil_n_n,                                   /*    441 */
+  Parrot_floor_n,                                    /*    442 */
+  Parrot_floor_i_n,                                  /*    443 */
+  Parrot_floor_n_n,                                  /*    444 */
+  Parrot_inc_i,                                      /*    445 */
+  Parrot_inc_n,                                      /*    446 */
+  Parrot_inc_p,                                      /*    447 */
+  Parrot_mod_i_i,                                    /*    448 */
+  Parrot_mod_i_ic,                                   /*    449 */
+  Parrot_mod_n_n,                                    /*    450 */
+  Parrot_mod_n_nc,                                   /*    451 */
+  Parrot_mod_p_p,                                    /*    452 */
+  Parrot_mod_p_i,                                    /*    453 */
+  Parrot_mod_p_ic,                                   /*    454 */
+  Parrot_mod_p_n,                                    /*    455 */
+  Parrot_mod_p_nc,                                   /*    456 */
+  Parrot_mod_i_i_i,                                  /*    457 */
+  Parrot_mod_i_ic_i,                                 /*    458 */
+  Parrot_mod_i_i_ic,                                 /*    459 */
+  Parrot_mod_n_n_n,                                  /*    460 */
+  Parrot_mod_n_nc_n,                                 /*    461 */
+  Parrot_mod_n_n_nc,                                 /*    462 */
+  Parrot_mod_p_p_p,                                  /*    463 */
+  Parrot_mod_p_p_i,                                  /*    464 */
+  Parrot_mod_p_p_ic,                                 /*    465 */
+  Parrot_mod_p_p_n,                                  /*    466 */
+  Parrot_mod_p_p_nc,                                 /*    467 */
+  Parrot_mul_i_i,                                    /*    468 */
+  Parrot_mul_i_ic,                                   /*    469 */
+  Parrot_mul_n_n,                                    /*    470 */
+  Parrot_mul_n_nc,                                   /*    471 */
+  Parrot_mul_p_p,                                    /*    472 */
+  Parrot_mul_p_i,                                    /*    473 */
+  Parrot_mul_p_ic,                                   /*    474 */
+  Parrot_mul_p_n,                                    /*    475 */
+  Parrot_mul_p_nc,                                   /*    476 */
+  Parrot_mul_i_i_i,                                  /*    477 */
+  Parrot_mul_i_ic_i,                                 /*    478 */
+  Parrot_mul_i_i_ic,                                 /*    479 */
+  Parrot_mul_n_n_n,                                  /*    480 */
+  Parrot_mul_n_nc_n,                                 /*    481 */
+  Parrot_mul_n_n_nc,                                 /*    482 */
+  Parrot_mul_p_p_p,                                  /*    483 */
+  Parrot_mul_p_p_i,                                  /*    484 */
+  Parrot_mul_p_p_ic,                                 /*    485 */
+  Parrot_mul_p_p_n,                                  /*    486 */
+  Parrot_mul_p_p_nc,                                 /*    487 */
+  Parrot_neg_i,                                      /*    488 */
+  Parrot_neg_n,                                      /*    489 */
+  Parrot_neg_p,                                      /*    490 */
+  Parrot_neg_i_i,                                    /*    491 */
+  Parrot_neg_n_n,                                    /*    492 */
+  Parrot_neg_p_p,                                    /*    493 */
+  Parrot_sub_i_i,                                    /*    494 */
+  Parrot_sub_i_ic,                                   /*    495 */
+  Parrot_sub_n_n,                                    /*    496 */
+  Parrot_sub_n_nc,                                   /*    497 */
+  Parrot_sub_p_p,                                    /*    498 */
+  Parrot_sub_p_i,                                    /*    499 */
+  Parrot_sub_p_ic,                                   /*    500 */
+  Parrot_sub_p_n,                                    /*    501 */
+  Parrot_sub_p_nc,                                   /*    502 */
+  Parrot_sub_i_i_i,                                  /*    503 */
+  Parrot_sub_i_ic_i,                                 /*    504 */
+  Parrot_sub_i_i_ic,                                 /*    505 */
+  Parrot_sub_n_n_n,                                  /*    506 */
+  Parrot_sub_n_nc_n,                                 /*    507 */
+  Parrot_sub_n_n_nc,                                 /*    508 */
+  Parrot_sub_p_p_p,                                  /*    509 */
+  Parrot_sub_p_p_i,                                  /*    510 */
+  Parrot_sub_p_p_ic,                                 /*    511 */
+  Parrot_sub_p_p_n,                                  /*    512 */
+  Parrot_sub_p_p_nc,                                 /*    513 */
+  Parrot_sqrt_n_n,                                   /*    514 */
+  Parrot_callmethodcc_p_s,                           /*    515 */
+  Parrot_callmethodcc_p_sc,                          /*    516 */
+  Parrot_callmethodcc_p_p,                           /*    517 */
+  Parrot_callmethod_p_s_p,                           /*    518 */
+  Parrot_callmethod_p_sc_p,                          /*    519 */
+  Parrot_callmethod_p_p_p,                           /*    520 */
+  Parrot_tailcallmethod_p_s,                         /*    521 */
+  Parrot_tailcallmethod_p_sc,                        /*    522 */
+  Parrot_tailcallmethod_p_p,                         /*    523 */
+  Parrot_addmethod_p_s_p,                            /*    524 */
+  Parrot_addmethod_p_sc_p,                           /*    525 */
+  Parrot_can_i_p_s,                                  /*    526 */
+  Parrot_can_i_p_sc,                                 /*    527 */
+  Parrot_does_i_p_s,                                 /*    528 */
+  Parrot_does_i_p_sc,                                /*    529 */
+  Parrot_does_i_p_p,                                 /*    530 */
+  Parrot_does_i_p_pc,                                /*    531 */
+  Parrot_isa_i_p_s,                                  /*    532 */
+  Parrot_isa_i_p_sc,                                 /*    533 */
+  Parrot_isa_i_p_p,                                  /*    534 */
+  Parrot_isa_i_p_pc,                                 /*    535 */
+  Parrot_newclass_p_s,                               /*    536 */
+  Parrot_newclass_p_sc,                              /*    537 */
+  Parrot_newclass_p_p,                               /*    538 */
+  Parrot_newclass_p_pc,                              /*    539 */
+  Parrot_subclass_p_p,                               /*    540 */
+  Parrot_subclass_p_pc,                              /*    541 */
+  Parrot_subclass_p_p_s,                             /*    542 */
+  Parrot_subclass_p_pc_s,                            /*    543 */
+  Parrot_subclass_p_p_sc,                            /*    544 */
+  Parrot_subclass_p_pc_sc,                           /*    545 */
+  Parrot_subclass_p_p_p,                             /*    546 */
+  Parrot_subclass_p_pc_p,                            /*    547 */
+  Parrot_subclass_p_p_pc,                            /*    548 */
+  Parrot_subclass_p_pc_pc,                           /*    549 */
+  Parrot_subclass_p_s,                               /*    550 */
+  Parrot_subclass_p_sc,                              /*    551 */
+  Parrot_subclass_p_s_s,                             /*    552 */
+  Parrot_subclass_p_sc_s,                            /*    553 */
+  Parrot_subclass_p_s_sc,                            /*    554 */
+  Parrot_subclass_p_sc_sc,                           /*    555 */
+  Parrot_subclass_p_s_p,                             /*    556 */
+  Parrot_subclass_p_sc_p,                            /*    557 */
+  Parrot_subclass_p_s_pc,                            /*    558 */
+  Parrot_subclass_p_sc_pc,                           /*    559 */
+  Parrot_get_class_p_s,                              /*    560 */
+  Parrot_get_class_p_sc,                             /*    561 */
+  Parrot_get_class_p_p,                              /*    562 */
+  Parrot_get_class_p_pc,                             /*    563 */
+  Parrot_class_p_p,                                  /*    564 */
+  Parrot_addparent_p_p,                              /*    565 */
+  Parrot_removeparent_p_p,                           /*    566 */
+  Parrot_addrole_p_p,                                /*    567 */
+  Parrot_addattribute_p_s,                           /*    568 */
+  Parrot_addattribute_p_sc,                          /*    569 */
+  Parrot_removeattribute_p_s,                        /*    570 */
+  Parrot_removeattribute_p_sc,                       /*    571 */
+  Parrot_getattribute_p_p_s,                         /*    572 */
+  Parrot_getattribute_p_p_sc,                        /*    573 */
+  Parrot_getattribute_p_p_p_s,                       /*    574 */
+  Parrot_getattribute_p_p_pc_s,                      /*    575 */
+  Parrot_getattribute_p_p_p_sc,                      /*    576 */
+  Parrot_getattribute_p_p_pc_sc,                     /*    577 */
+  Parrot_setattribute_p_s_p,                         /*    578 */
+  Parrot_setattribute_p_sc_p,                        /*    579 */
+  Parrot_setattribute_p_p_s_p,                       /*    580 */
+  Parrot_setattribute_p_pc_s_p,                      /*    581 */
+  Parrot_setattribute_p_p_sc_p,                      /*    582 */
+  Parrot_setattribute_p_pc_sc_p,                     /*    583 */
+  Parrot_inspect_p_p,                                /*    584 */
+  Parrot_inspect_p_pc,                               /*    585 */
+  Parrot_inspect_p_p_s,                              /*    586 */
+  Parrot_inspect_p_pc_s,                             /*    587 */
+  Parrot_inspect_p_p_sc,                             /*    588 */
+  Parrot_inspect_p_pc_sc,                            /*    589 */
+  Parrot_new_p_s,                                    /*    590 */
+  Parrot_new_p_sc,                                   /*    591 */
+  Parrot_new_p_s_p,                                  /*    592 */
+  Parrot_new_p_sc_p,                                 /*    593 */
+  Parrot_new_p_s_pc,                                 /*    594 */
+  Parrot_new_p_sc_pc,                                /*    595 */
+  Parrot_new_p_p,                                    /*    596 */
+  Parrot_new_p_pc,                                   /*    597 */
+  Parrot_new_p_p_p,                                  /*    598 */
+  Parrot_new_p_pc_p,                                 /*    599 */
+  Parrot_new_p_p_pc,                                 /*    600 */
+  Parrot_new_p_pc_pc,                                /*    601 */
+  Parrot_root_new_p_p,                               /*    602 */
+  Parrot_root_new_p_pc,                              /*    603 */
+  Parrot_root_new_p_p_p,                             /*    604 */
+  Parrot_root_new_p_pc_p,                            /*    605 */
+  Parrot_root_new_p_p_pc,                            /*    606 */
+  Parrot_root_new_p_pc_pc,                           /*    607 */
+  Parrot_typeof_s_p,                                 /*    608 */
+  Parrot_typeof_p_p,                                 /*    609 */
+  Parrot_get_repr_s_p,                               /*    610 */
+  Parrot_find_method_p_p_s,                          /*    611 */
+  Parrot_find_method_p_p_sc,                         /*    612 */
+  Parrot_defined_i_p,                                /*    613 */
+  Parrot_defined_i_p_ki,                             /*    614 */
+  Parrot_defined_i_p_kic,                            /*    615 */
+  Parrot_defined_i_p_k,                              /*    616 */
+  Parrot_defined_i_p_kc,                             /*    617 */
+  Parrot_exists_i_p_ki,                              /*    618 */
+  Parrot_exists_i_p_kic,                             /*    619 */
+  Parrot_exists_i_p_k,                               /*    620 */
+  Parrot_exists_i_p_kc,                              /*    621 */
+  Parrot_delete_p_k,                                 /*    622 */
+  Parrot_delete_p_kc,                                /*    623 */
+  Parrot_delete_p_ki,                                /*    624 */
+  Parrot_delete_p_kic,                               /*    625 */
+  Parrot_elements_i_p,                               /*    626 */
+  Parrot_push_p_i,                                   /*    627 */
+  Parrot_push_p_ic,                                  /*    628 */
+  Parrot_push_p_n,                                   /*    629 */
+  Parrot_push_p_nc,                                  /*    630 */
+  Parrot_push_p_s,                                   /*    631 */
+  Parrot_push_p_sc,                                  /*    632 */
+  Parrot_push_p_p,                                   /*    633 */
+  Parrot_pop_i_p,                                    /*    634 */
+  Parrot_pop_n_p,                                    /*    635 */
+  Parrot_pop_s_p,                                    /*    636 */
+  Parrot_pop_p_p,                                    /*    637 */
+  Parrot_unshift_p_i,                                /*    638 */
+  Parrot_unshift_p_ic,                               /*    639 */
+  Parrot_unshift_p_n,                                /*    640 */
+  Parrot_unshift_p_nc,                               /*    641 */
+  Parrot_unshift_p_s,                                /*    642 */
+  Parrot_unshift_p_sc,                               /*    643 */
+  Parrot_unshift_p_p,                                /*    644 */
+  Parrot_shift_i_p,                                  /*    645 */
+  Parrot_shift_n_p,                                  /*    646 */
+  Parrot_shift_s_p,                                  /*    647 */
+  Parrot_shift_p_p,                                  /*    648 */
+  Parrot_splice_p_p_i_i,                             /*    649 */
+  Parrot_splice_p_p_ic_i,                            /*    650 */
+  Parrot_splice_p_p_i_ic,                            /*    651 */
+  Parrot_splice_p_p_ic_ic,                           /*    652 */
+  Parrot_setprop_p_s_p,                              /*    653 */
+  Parrot_setprop_p_sc_p,                             /*    654 */
+  Parrot_getprop_p_s_p,                              /*    655 */
+  Parrot_getprop_p_sc_p,                             /*    656 */
+  Parrot_delprop_p_s,                                /*    657 */
+  Parrot_delprop_p_sc,                               /*    658 */
+  Parrot_prophash_p_p,                               /*    659 */
+  Parrot_freeze_s_p,                                 /*    660 */
+  Parrot_thaw_p_s,                                   /*    661 */
+  Parrot_thaw_p_sc,                                  /*    662 */
+  Parrot_add_multi_s_s_p,                            /*    663 */
+  Parrot_add_multi_sc_s_p,                           /*    664 */
+  Parrot_add_multi_s_sc_p,                           /*    665 */
+  Parrot_add_multi_sc_sc_p,                          /*    666 */
+  Parrot_find_multi_p_s_s,                           /*    667 */
+  Parrot_find_multi_p_sc_s,                          /*    668 */
+  Parrot_find_multi_p_s_sc,                          /*    669 */
+  Parrot_find_multi_p_sc_sc,                         /*    670 */
+  Parrot_register_p,                                 /*    671 */
+  Parrot_unregister_p,                               /*    672 */
+  Parrot_box_p_i,                                    /*    673 */
+  Parrot_box_p_ic,                                   /*    674 */
+  Parrot_box_p_n,                                    /*    675 */
+  Parrot_box_p_nc,                                   /*    676 */
+  Parrot_box_p_s,                                    /*    677 */
+  Parrot_box_p_sc,                                   /*    678 */
+  Parrot_iter_p_p,                                   /*    679 */
+  Parrot_morph_p_p,                                  /*    680 */
+  Parrot_morph_p_pc,                                 /*    681 */
+  Parrot_clone_s_s,                                  /*    682 */
+  Parrot_clone_s_sc,                                 /*    683 */
+  Parrot_set_i_i,                                    /*    684 */
+  Parrot_set_i_ic,                                   /*    685 */
+  Parrot_set_i_n,                                    /*    686 */
+  Parrot_set_i_nc,                                   /*    687 */
+  Parrot_set_i_s,                                    /*    688 */
+  Parrot_set_i_sc,                                   /*    689 */
+  Parrot_set_n_n,                                    /*    690 */
+  Parrot_set_n_nc,                                   /*    691 */
+  Parrot_set_n_i,                                    /*    692 */
+  Parrot_set_n_ic,                                   /*    693 */
+  Parrot_set_n_s,                                    /*    694 */
+  Parrot_set_n_sc,                                   /*    695 */
+  Parrot_set_n_p,                                    /*    696 */
+  Parrot_set_s_p,                                    /*    697 */
+  Parrot_set_s_s,                                    /*    698 */
+  Parrot_set_s_sc,                                   /*    699 */
+  Parrot_set_s_i,                                    /*    700 */
+  Parrot_set_s_ic,                                   /*    701 */
+  Parrot_set_s_n,                                    /*    702 */
+  Parrot_set_s_nc,                                   /*    703 */
+  Parrot_set_p_pc,                                   /*    704 */
+  Parrot_set_p_p,                                    /*    705 */
+  Parrot_set_p_i,                                    /*    706 */
+  Parrot_set_p_ic,                                   /*    707 */
+  Parrot_set_p_n,                                    /*    708 */
+  Parrot_set_p_nc,                                   /*    709 */
+  Parrot_set_p_s,                                    /*    710 */
+  Parrot_set_p_sc,                                   /*    711 */
+  Parrot_set_i_p,                                    /*    712 */
+  Parrot_assign_p_p,                                 /*    713 */
+  Parrot_assign_p_i,                                 /*    714 */
+  Parrot_assign_p_ic,                                /*    715 */
+  Parrot_assign_p_n,                                 /*    716 */
+  Parrot_assign_p_nc,                                /*    717 */
+  Parrot_assign_p_s,                                 /*    718 */
+  Parrot_assign_p_sc,                                /*    719 */
+  Parrot_assign_s_s,                                 /*    720 */
+  Parrot_assign_s_sc,                                /*    721 */
+  Parrot_setref_p_p,                                 /*    722 */
+  Parrot_deref_p_p,                                  /*    723 */
+  Parrot_set_p_ki_i,                                 /*    724 */
+  Parrot_set_p_kic_i,                                /*    725 */
+  Parrot_set_p_ki_ic,                                /*    726 */
+  Parrot_set_p_kic_ic,                               /*    727 */
+  Parrot_set_p_ki_n,                                 /*    728 */
+  Parrot_set_p_kic_n,                                /*    729 */
+  Parrot_set_p_ki_nc,                                /*    730 */
+  Parrot_set_p_kic_nc,                               /*    731 */
+  Parrot_set_p_ki_s,                                 /*    732 */
+  Parrot_set_p_kic_s,                                /*    733 */
+  Parrot_set_p_ki_sc,                                /*    734 */
+  Parrot_set_p_kic_sc,                               /*    735 */
+  Parrot_set_p_ki_p,                                 /*    736 */
+  Parrot_set_p_kic_p,                                /*    737 */
+  Parrot_set_i_p_ki,                                 /*    738 */
+  Parrot_set_i_p_kic,                                /*    739 */
+  Parrot_set_n_p_ki,                                 /*    740 */
+  Parrot_set_n_p_kic,                                /*    741 */
+  Parrot_set_s_p_ki,                                 /*    742 */
+  Parrot_set_s_p_kic,                                /*    743 */
+  Parrot_set_p_p_ki,                                 /*    744 */
+  Parrot_set_p_p_kic,                                /*    745 */
+  Parrot_set_p_k_i,                                  /*    746 */
+  Parrot_set_p_kc_i,                                 /*    747 */
+  Parrot_set_p_k_ic,                                 /*    748 */
+  Parrot_set_p_kc_ic,                                /*    749 */
+  Parrot_set_p_k_n,                                  /*    750 */
+  Parrot_set_p_kc_n,                                 /*    751 */
+  Parrot_set_p_k_nc,                                 /*    752 */
+  Parrot_set_p_kc_nc,                                /*    753 */
+  Parrot_set_p_k_s,                                  /*    754 */
+  Parrot_set_p_kc_s,                                 /*    755 */
+  Parrot_set_p_k_sc,                                 /*    756 */
+  Parrot_set_p_kc_sc,                                /*    757 */
+  Parrot_set_p_k_p,                                  /*    758 */
+  Parrot_set_p_kc_p,                                 /*    759 */
+  Parrot_set_i_p_k,                                  /*    760 */
+  Parrot_set_i_p_kc,                                 /*    761 */
+  Parrot_set_n_p_k,                                  /*    762 */
+  Parrot_set_n_p_kc,                                 /*    763 */
+  Parrot_set_s_p_k,                                  /*    764 */
+  Parrot_set_s_p_kc,                                 /*    765 */
+  Parrot_set_p_p_k,                                  /*    766 */
+  Parrot_set_p_p_kc,                                 /*    767 */
+  Parrot_clone_p_p,                                  /*    768 */
+  Parrot_clone_p_p_p,                                /*    769 */
+  Parrot_clone_p_p_pc,                               /*    770 */
+  Parrot_copy_p_p,                                   /*    771 */
+  Parrot_null_s,                                     /*    772 */
+  Parrot_null_i,                                     /*    773 */
+  Parrot_null_p,                                     /*    774 */
+  Parrot_null_n,                                     /*    775 */
+  Parrot_ord_i_s,                                    /*    776 */
+  Parrot_ord_i_sc,                                   /*    777 */
+  Parrot_ord_i_s_i,                                  /*    778 */
+  Parrot_ord_i_sc_i,                                 /*    779 */
+  Parrot_ord_i_s_ic,                                 /*    780 */
+  Parrot_ord_i_sc_ic,                                /*    781 */
+  Parrot_chr_s_i,                                    /*    782 */
+  Parrot_chr_s_ic,                                   /*    783 */
+  Parrot_chopn_s_s_i,                                /*    784 */
+  Parrot_chopn_s_sc_i,                               /*    785 */
+  Parrot_chopn_s_s_ic,                               /*    786 */
+  Parrot_chopn_s_sc_ic,                              /*    787 */
+  Parrot_concat_s_s,                                 /*    788 */
+  Parrot_concat_s_sc,                                /*    789 */
+  Parrot_concat_p_p,                                 /*    790 */
+  Parrot_concat_p_s,                                 /*    791 */
+  Parrot_concat_p_sc,                                /*    792 */
+  Parrot_concat_s_s_s,                               /*    793 */
+  Parrot_concat_s_sc_s,                              /*    794 */
+  Parrot_concat_s_s_sc,                              /*    795 */
+  Parrot_concat_p_p_s,                               /*    796 */
+  Parrot_concat_p_p_sc,                              /*    797 */
+  Parrot_concat_p_p_p,                               /*    798 */
+  Parrot_repeat_s_s_i,                               /*    799 */
+  Parrot_repeat_s_sc_i,                              /*    800 */
+  Parrot_repeat_s_s_ic,                              /*    801 */
+  Parrot_repeat_s_sc_ic,                             /*    802 */
+  Parrot_repeat_p_p_i,                               /*    803 */
+  Parrot_repeat_p_p_ic,                              /*    804 */
+  Parrot_repeat_p_p_p,                               /*    805 */
+  Parrot_repeat_p_i,                                 /*    806 */
+  Parrot_repeat_p_ic,                                /*    807 */
+  Parrot_repeat_p_p,                                 /*    808 */
+  Parrot_length_i_s,                                 /*    809 */
+  Parrot_length_i_sc,                                /*    810 */
+  Parrot_bytelength_i_s,                             /*    811 */
+  Parrot_bytelength_i_sc,                            /*    812 */
+  Parrot_pin_s,                                      /*    813 */
+  Parrot_unpin_s,                                    /*    814 */
+  Parrot_substr_s_s_i,                               /*    815 */
+  Parrot_substr_s_sc_i,                              /*    816 */
+  Parrot_substr_s_s_ic,                              /*    817 */
+  Parrot_substr_s_sc_ic,                             /*    818 */
+  Parrot_substr_s_s_i_i,                             /*    819 */
+  Parrot_substr_s_sc_i_i,                            /*    820 */
+  Parrot_substr_s_s_ic_i,                            /*    821 */
+  Parrot_substr_s_sc_ic_i,                           /*    822 */
+  Parrot_substr_s_s_i_ic,                            /*    823 */
+  Parrot_substr_s_sc_i_ic,                           /*    824 */
+  Parrot_substr_s_s_ic_ic,                           /*    825 */
+  Parrot_substr_s_sc_ic_ic,                          /*    826 */
+  Parrot_substr_s_p_i_i,                             /*    827 */
+  Parrot_substr_s_p_ic_i,                            /*    828 */
+  Parrot_substr_s_p_i_ic,                            /*    829 */
+  Parrot_substr_s_p_ic_ic,                           /*    830 */
+  Parrot_replace_s_s_i_i_s,                          /*    831 */
+  Parrot_replace_s_sc_i_i_s,                         /*    832 */
+  Parrot_replace_s_s_ic_i_s,                         /*    833 */
+  Parrot_replace_s_sc_ic_i_s,                        /*    834 */
+  Parrot_replace_s_s_i_ic_s,                         /*    835 */
+  Parrot_replace_s_sc_i_ic_s,                        /*    836 */
+  Parrot_replace_s_s_ic_ic_s,                        /*    837 */
+  Parrot_replace_s_sc_ic_ic_s,                       /*    838 */
+  Parrot_replace_s_s_i_i_sc,                         /*    839 */
+  Parrot_replace_s_sc_i_i_sc,                        /*    840 */
+  Parrot_replace_s_s_ic_i_sc,                        /*    841 */
+  Parrot_replace_s_sc_ic_i_sc,                       /*    842 */
+  Parrot_replace_s_s_i_ic_sc,                        /*    843 */
+  Parrot_replace_s_sc_i_ic_sc,                       /*    844 */
+  Parrot_replace_s_s_ic_ic_sc,                       /*    845 */
+  Parrot_replace_s_sc_ic_ic_sc,                      /*    846 */
+  Parrot_index_i_s_s,                                /*    847 */
+  Parrot_index_i_sc_s,                               /*    848 */
+  Parrot_index_i_s_sc,                               /*    849 */
+  Parrot_index_i_sc_sc,                              /*    850 */
+  Parrot_index_i_s_s_i,                              /*    851 */
+  Parrot_index_i_sc_s_i,                             /*    852 */
+  Parrot_index_i_s_sc_i,                             /*    853 */
+  Parrot_index_i_sc_sc_i,                            /*    854 */
+  Parrot_index_i_s_s_ic,                             /*    855 */
+  Parrot_index_i_sc_s_ic,                            /*    856 */
+  Parrot_index_i_s_sc_ic,                            /*    857 */
+  Parrot_index_i_sc_sc_ic,                           /*    858 */
+  Parrot_sprintf_s_s_p,                              /*    859 */
+  Parrot_sprintf_s_sc_p,                             /*    860 */
+  Parrot_sprintf_p_p_p,                              /*    861 */
+  Parrot_new_s,                                      /*    862 */
+  Parrot_new_s_i,                                    /*    863 */
+  Parrot_new_s_ic,                                   /*    864 */
+  Parrot_stringinfo_i_s_i,                           /*    865 */
+  Parrot_stringinfo_i_sc_i,                          /*    866 */
+  Parrot_stringinfo_i_s_ic,                          /*    867 */
+  Parrot_stringinfo_i_sc_ic,                         /*    868 */
+  Parrot_upcase_s_s,                                 /*    869 */
+  Parrot_upcase_s_sc,                                /*    870 */
+  Parrot_downcase_s_s,                               /*    871 */
+  Parrot_downcase_s_sc,                              /*    872 */
+  Parrot_titlecase_s_s,                              /*    873 */
+  Parrot_titlecase_s_sc,                             /*    874 */
+  Parrot_join_s_s_p,                                 /*    875 */
+  Parrot_join_s_sc_p,                                /*    876 */
+  Parrot_split_p_s_s,                                /*    877 */
+  Parrot_split_p_sc_s,                               /*    878 */
+  Parrot_split_p_s_sc,                               /*    879 */
+  Parrot_split_p_sc_sc,                              /*    880 */
+  Parrot_charset_i_s,                                /*    881 */
+  Parrot_charset_i_sc,                               /*    882 */
+  Parrot_charsetname_s_i,                            /*    883 */
+  Parrot_charsetname_s_ic,                           /*    884 */
+  Parrot_find_charset_i_s,                           /*    885 */
+  Parrot_find_charset_i_sc,                          /*    886 */
+  Parrot_trans_charset_s_s_i,                        /*    887 */
+  Parrot_trans_charset_s_sc_i,                       /*    888 */
+  Parrot_trans_charset_s_s_ic,                       /*    889 */
+  Parrot_trans_charset_s_sc_ic,                      /*    890 */
+  Parrot_encoding_i_s,                               /*    891 */
+  Parrot_encoding_i_sc,                              /*    892 */
+  Parrot_encodingname_s_i,                           /*    893 */
+  Parrot_encodingname_s_ic,                          /*    894 */
+  Parrot_find_encoding_i_s,                          /*    895 */
+  Parrot_find_encoding_i_sc,                         /*    896 */
+  Parrot_trans_encoding_s_s_i,                       /*    897 */
+  Parrot_trans_encoding_s_sc_i,                      /*    898 */
+  Parrot_trans_encoding_s_s_ic,                      /*    899 */
+  Parrot_trans_encoding_s_sc_ic,                     /*    900 */
+  Parrot_is_cclass_i_i_s_i,                          /*    901 */
+  Parrot_is_cclass_i_ic_s_i,                         /*    902 */
+  Parrot_is_cclass_i_i_sc_i,                         /*    903 */
+  Parrot_is_cclass_i_ic_sc_i,                        /*    904 */
+  Parrot_is_cclass_i_i_s_ic,                         /*    905 */
+  Parrot_is_cclass_i_ic_s_ic,                        /*    906 */
+  Parrot_is_cclass_i_i_sc_ic,                        /*    907 */
+  Parrot_is_cclass_i_ic_sc_ic,                       /*    908 */
+  Parrot_find_cclass_i_i_s_i_i,                      /*    909 */
+  Parrot_find_cclass_i_ic_s_i_i,                     /*    910 */
+  Parrot_find_cclass_i_i_sc_i_i,                     /*    911 */
+  Parrot_find_cclass_i_ic_sc_i_i,                    /*    912 */
+  Parrot_find_cclass_i_i_s_ic_i,                     /*    913 */
+  Parrot_find_cclass_i_ic_s_ic_i,                    /*    914 */
+  Parrot_find_cclass_i_i_sc_ic_i,                    /*    915 */
+  Parrot_find_cclass_i_ic_sc_ic_i,                   /*    916 */
+  Parrot_find_cclass_i_i_s_i_ic,                     /*    917 */
+  Parrot_find_cclass_i_ic_s_i_ic,                    /*    918 */
+  Parrot_find_cclass_i_i_sc_i_ic,                    /*    919 */
+  Parrot_find_cclass_i_ic_sc_i_ic,                   /*    920 */
+  Parrot_find_cclass_i_i_s_ic_ic,                    /*    921 */
+  Parrot_find_cclass_i_ic_s_ic_ic,                   /*    922 */
+  Parrot_find_cclass_i_i_sc_ic_ic,                   /*    923 */
+  Parrot_find_cclass_i_ic_sc_ic_ic,                  /*    924 */
+  Parrot_find_not_cclass_i_i_s_i_i,                  /*    925 */
+  Parrot_find_not_cclass_i_ic_s_i_i,                 /*    926 */
+  Parrot_find_not_cclass_i_i_sc_i_i,                 /*    927 */
+  Parrot_find_not_cclass_i_ic_sc_i_i,                /*    928 */
+  Parrot_find_not_cclass_i_i_s_ic_i,                 /*    929 */
+  Parrot_find_not_cclass_i_ic_s_ic_i,                /*    930 */
+  Parrot_find_not_cclass_i_i_sc_ic_i,                /*    931 */
+  Parrot_find_not_cclass_i_ic_sc_ic_i,               /*    932 */
+  Parrot_find_not_cclass_i_i_s_i_ic,                 /*    933 */
+  Parrot_find_not_cclass_i_ic_s_i_ic,                /*    934 */
+  Parrot_find_not_cclass_i_i_sc_i_ic,                /*    935 */
+  Parrot_find_not_cclass_i_ic_sc_i_ic,               /*    936 */
+  Parrot_find_not_cclass_i_i_s_ic_ic,                /*    937 */
+  Parrot_find_not_cclass_i_ic_s_ic_ic,               /*    938 */
+  Parrot_find_not_cclass_i_i_sc_ic_ic,               /*    939 */
+  Parrot_find_not_cclass_i_ic_sc_ic_ic,              /*    940 */
+  Parrot_escape_s_s,                                 /*    941 */
+  Parrot_compose_s_s,                                /*    942 */
+  Parrot_compose_s_sc,                               /*    943 */
+  Parrot_spawnw_i_s,                                 /*    944 */
+  Parrot_spawnw_i_sc,                                /*    945 */
+  Parrot_spawnw_i_p,                                 /*    946 */
+  Parrot_err_i,                                      /*    947 */
+  Parrot_err_s,                                      /*    948 */
+  Parrot_err_s_i,                                    /*    949 */
+  Parrot_err_s_ic,                                   /*    950 */
+  Parrot_time_i,                                     /*    951 */
+  Parrot_time_n,                                     /*    952 */
+  Parrot_sleep_i,                                    /*    953 */
+  Parrot_sleep_ic,                                   /*    954 */
+  Parrot_sleep_n,                                    /*    955 */
+  Parrot_sleep_nc,                                   /*    956 */
+  Parrot_store_lex_s_p,                              /*    957 */
+  Parrot_store_lex_sc_p,                             /*    958 */
+  Parrot_store_dynamic_lex_s_p,                      /*    959 */
+  Parrot_store_dynamic_lex_sc_p,                     /*    960 */
+  Parrot_find_lex_p_s,                               /*    961 */
+  Parrot_find_lex_p_sc,                              /*    962 */
+  Parrot_find_dynamic_lex_p_s,                       /*    963 */
+  Parrot_find_dynamic_lex_p_sc,                      /*    964 */
+  Parrot_find_caller_lex_p_s,                        /*    965 */
+  Parrot_find_caller_lex_p_sc,                       /*    966 */
+  Parrot_get_namespace_p,                            /*    967 */
+  Parrot_get_namespace_p_p,                          /*    968 */
+  Parrot_get_namespace_p_pc,                         /*    969 */
+  Parrot_get_hll_namespace_p,                        /*    970 */
+  Parrot_get_hll_namespace_p_p,                      /*    971 */
+  Parrot_get_hll_namespace_p_pc,                     /*    972 */
+  Parrot_get_root_namespace_p,                       /*    973 */
+  Parrot_get_root_namespace_p_p,                     /*    974 */
+  Parrot_get_root_namespace_p_pc,                    /*    975 */
+  Parrot_get_global_p_s,                             /*    976 */
+  Parrot_get_global_p_sc,                            /*    977 */
+  Parrot_get_global_p_p_s,                           /*    978 */
+  Parrot_get_global_p_pc_s,                          /*    979 */
+  Parrot_get_global_p_p_sc,                          /*    980 */
+  Parrot_get_global_p_pc_sc,                         /*    981 */
+  Parrot_get_hll_global_p_s,                         /*    982 */
+  Parrot_get_hll_global_p_sc,                        /*    983 */
+  Parrot_get_hll_global_p_p_s,                       /*    984 */
+  Parrot_get_hll_global_p_pc_s,                      /*    985 */
+  Parrot_get_hll_global_p_p_sc,                      /*    986 */
+  Parrot_get_hll_global_p_pc_sc,                     /*    987 */
+  Parrot_get_root_global_p_s,                        /*    988 */
+  Parrot_get_root_global_p_sc,                       /*    989 */
+  Parrot_get_root_global_p_p_s,                      /*    990 */
+  Parrot_get_root_global_p_pc_s,                     /*    991 */
+  Parrot_get_root_global_p_p_sc,                     /*    992 */
+  Parrot_get_root_global_p_pc_sc,                    /*    993 */
+  Parrot_set_global_s_p,                             /*    994 */
+  Parrot_set_global_sc_p,                            /*    995 */
+  Parrot_set_global_p_s_p,                           /*    996 */
+  Parrot_set_global_pc_s_p,                          /*    997 */
+  Parrot_set_global_p_sc_p,                          /*    998 */
+  Parrot_set_global_pc_sc_p,                         /*    999 */
+  Parrot_set_hll_global_s_p,                         /*   1000 */
+  Parrot_set_hll_global_sc_p,                        /*   1001 */
+  Parrot_set_hll_global_p_s_p,                       /*   1002 */
+  Parrot_set_hll_global_pc_s_p,                      /*   1003 */
+  Parrot_set_hll_global_p_sc_p,                      /*   1004 */
+  Parrot_set_hll_global_pc_sc_p,                     /*   1005 */
+  Parrot_set_root_global_s_p,                        /*   1006 */
+  Parrot_set_root_global_sc_p,                       /*   1007 */
+  Parrot_set_root_global_p_s_p,                      /*   1008 */
+  Parrot_set_root_global_pc_s_p,                     /*   1009 */
+  Parrot_set_root_global_p_sc_p,                     /*   1010 */
+  Parrot_set_root_global_pc_sc_p,                    /*   1011 */
+  Parrot_find_name_p_s,                              /*   1012 */
+  Parrot_find_name_p_sc,                             /*   1013 */
+  Parrot_find_sub_not_null_p_s,                      /*   1014 */
+  Parrot_find_sub_not_null_p_sc,                     /*   1015 */
+  Parrot_trap,                                       /*   1016 */
+  Parrot_set_label_p_ic,                             /*   1017 */
+  Parrot_get_label_i_p,                              /*   1018 */
+  Parrot_fetch_p_p_p_p,                              /*   1019 */
+  Parrot_fetch_p_pc_p_p,                             /*   1020 */
+  Parrot_fetch_p_p_pc_p,                             /*   1021 */
+  Parrot_fetch_p_pc_pc_p,                            /*   1022 */
+  Parrot_fetch_p_p_p_pc,                             /*   1023 */
+  Parrot_fetch_p_pc_p_pc,                            /*   1024 */
+  Parrot_fetch_p_p_pc_pc,                            /*   1025 */
+  Parrot_fetch_p_pc_pc_pc,                           /*   1026 */
+  Parrot_fetch_p_p_i_p,                              /*   1027 */
+  Parrot_fetch_p_pc_i_p,                             /*   1028 */
+  Parrot_fetch_p_p_ic_p,                             /*   1029 */
+  Parrot_fetch_p_pc_ic_p,                            /*   1030 */
+  Parrot_fetch_p_p_i_pc,                             /*   1031 */
+  Parrot_fetch_p_pc_i_pc,                            /*   1032 */
+  Parrot_fetch_p_p_ic_pc,                            /*   1033 */
+  Parrot_fetch_p_pc_ic_pc,                           /*   1034 */
+  Parrot_fetch_p_p_s_p,                              /*   1035 */
+  Parrot_fetch_p_pc_s_p,                             /*   1036 */
+  Parrot_fetch_p_p_sc_p,                             /*   1037 */
+  Parrot_fetch_p_pc_sc_p,                            /*   1038 */
+  Parrot_fetch_p_p_s_pc,                             /*   1039 */
+  Parrot_fetch_p_pc_s_pc,                            /*   1040 */
+  Parrot_fetch_p_p_sc_pc,                            /*   1041 */
+  Parrot_fetch_p_pc_sc_pc,                           /*   1042 */
+  Parrot_vivify_p_p_p_p,                             /*   1043 */
+  Parrot_vivify_p_pc_p_p,                            /*   1044 */
+  Parrot_vivify_p_p_pc_p,                            /*   1045 */
+  Parrot_vivify_p_pc_pc_p,                           /*   1046 */
+  Parrot_vivify_p_p_p_pc,                            /*   1047 */
+  Parrot_vivify_p_pc_p_pc,                           /*   1048 */
+  Parrot_vivify_p_p_pc_pc,                           /*   1049 */
+  Parrot_vivify_p_pc_pc_pc,                          /*   1050 */
+  Parrot_vivify_p_p_i_p,                             /*   1051 */
+  Parrot_vivify_p_pc_i_p,                            /*   1052 */
+  Parrot_vivify_p_p_ic_p,                            /*   1053 */
+  Parrot_vivify_p_pc_ic_p,                           /*   1054 */
+  Parrot_vivify_p_p_i_pc,                            /*   1055 */
+  Parrot_vivify_p_pc_i_pc,                           /*   1056 */
+  Parrot_vivify_p_p_ic_pc,                           /*   1057 */
+  Parrot_vivify_p_pc_ic_pc,                          /*   1058 */
+  Parrot_vivify_p_p_s_p,                             /*   1059 */
+  Parrot_vivify_p_pc_s_p,                            /*   1060 */
+  Parrot_vivify_p_p_sc_p,                            /*   1061 */
+  Parrot_vivify_p_pc_sc_p,                           /*   1062 */
+  Parrot_vivify_p_p_s_pc,                            /*   1063 */
+  Parrot_vivify_p_pc_s_pc,                           /*   1064 */
+  Parrot_vivify_p_p_sc_pc,                           /*   1065 */
+  Parrot_vivify_p_pc_sc_pc,                          /*   1066 */
+  Parrot_new_p_s_i,                                  /*   1067 */
+  Parrot_new_p_sc_i,                                 /*   1068 */
+  Parrot_new_p_s_ic,                                 /*   1069 */
+  Parrot_new_p_sc_ic,                                /*   1070 */
+  Parrot_new_p_p_i,                                  /*   1071 */
+  Parrot_new_p_pc_i,                                 /*   1072 */
+  Parrot_new_p_p_ic,                                 /*   1073 */
+  Parrot_new_p_pc_ic,                                /*   1074 */
+  Parrot_root_new_p_p_i,                             /*   1075 */
+  Parrot_root_new_p_pc_i,                            /*   1076 */
+  Parrot_root_new_p_p_ic,                            /*   1077 */
+  Parrot_root_new_p_pc_ic,                           /*   1078 */
+  Parrot_find_codepoint_i_s,                         /*   1079 */
+  Parrot_find_codepoint_i_sc,                        /*   1080 */
+  Parrot_finalize_p,                                 /*   1081 */
+  Parrot_finalize_pc,                                /*   1082 */
+
+  NULL /* NULL function pointer */
+};
+
+
+
+/*
+** Op Info Table:
+*/
+
+static op_info_t core_op_info_table[1084] = {
+  { /* 0 */
+    /* type PARROT_INLINE_OP, */
+    "end",
+    "end",
+    "Parrot_end",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 1 */
+    /* type PARROT_INLINE_OP, */
+    "noop",
+    "noop",
+    "Parrot_noop",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 2 */
+    /* type PARROT_INLINE_OP, */
+    "check_events",
+    "check_events",
+    "Parrot_check_events",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 3 */
+    /* type PARROT_INLINE_OP, */
+    "check_events__",
+    "check_events__",
+    "Parrot_check_events__",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 4 */
+    /* type PARROT_INLINE_OP, */
+    "wrapper__",
+    "wrapper__",
+    "Parrot_wrapper__",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 5 */
+    /* type PARROT_INLINE_OP, */
+    "load_bytecode",
+    "load_bytecode_s",
+    "Parrot_load_bytecode_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 6 */
+    /* type PARROT_INLINE_OP, */
+    "load_bytecode",
+    "load_bytecode_sc",
+    "Parrot_load_bytecode_sc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 7 */
+    /* type PARROT_INLINE_OP, */
+    "load_language",
+    "load_language_s",
+    "Parrot_load_language_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 8 */
+    /* type PARROT_INLINE_OP, */
+    "load_language",
+    "load_language_sc",
+    "Parrot_load_language_sc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 9 */
+    /* type PARROT_INLINE_OP, */
+    "branch",
+    "branch_i",
+    "Parrot_branch_i",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 1 }
+  },
+  { /* 10 */
+    /* type PARROT_INLINE_OP, */
+    "branch",
+    "branch_ic",
+    "Parrot_branch_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 1 }
+  },
+  { /* 11 */
+    /* type PARROT_INLINE_OP, */
+    "local_branch",
+    "local_branch_p_i",
+    "Parrot_local_branch_p_i",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 12 */
+    /* type PARROT_INLINE_OP, */
+    "local_branch",
+    "local_branch_p_ic",
+    "Parrot_local_branch_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 13 */
+    /* type PARROT_INLINE_OP, */
+    "local_return",
+    "local_return_p",
+    "Parrot_local_return_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 14 */
+    /* type PARROT_INLINE_OP, */
+    "jump",
+    "jump_i",
+    "Parrot_jump_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 1 }
+  },
+  { /* 15 */
+    /* type PARROT_INLINE_OP, */
+    "jump",
+    "jump_ic",
+    "Parrot_jump_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 1 }
+  },
+  { /* 16 */
+    /* type PARROT_FUNCTION_OP, */
+    "enternative",
+    "enternative",
+    "Parrot_enternative",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 17 */
+    /* type PARROT_INLINE_OP, */
+    "if",
+    "if_i_ic",
+    "Parrot_if_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 18 */
+    /* type PARROT_INLINE_OP, */
+    "if",
+    "if_n_ic",
+    "Parrot_if_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 19 */
+    /* type PARROT_FUNCTION_OP, */
+    "if",
+    "if_s_ic",
+    "Parrot_if_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 20 */
+    /* type PARROT_FUNCTION_OP, */
+    "if",
+    "if_p_ic",
+    "Parrot_if_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 21 */
+    /* type PARROT_INLINE_OP, */
+    "unless",
+    "unless_i_ic",
+    "Parrot_unless_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 22 */
+    /* type PARROT_INLINE_OP, */
+    "unless",
+    "unless_n_ic",
+    "Parrot_unless_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 23 */
+    /* type PARROT_FUNCTION_OP, */
+    "unless",
+    "unless_s_ic",
+    "Parrot_unless_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 24 */
+    /* type PARROT_FUNCTION_OP, */
+    "unless",
+    "unless_p_ic",
+    "Parrot_unless_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 25 */
+    /* type PARROT_INLINE_OP, */
+    "invokecc",
+    "invokecc_p",
+    "Parrot_invokecc_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 26 */
+    /* type PARROT_INLINE_OP, */
+    "invoke",
+    "invoke_p_p",
+    "Parrot_invoke_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 27 */
+    /* type PARROT_INLINE_OP, */
+    "yield",
+    "yield",
+    "Parrot_yield",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 28 */
+    /* type PARROT_INLINE_OP, */
+    "tailcall",
+    "tailcall_p",
+    "Parrot_tailcall_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 29 */
+    /* type PARROT_INLINE_OP, */
+    "returncc",
+    "returncc",
+    "Parrot_returncc",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 30 */
+    /* type PARROT_INLINE_OP, */
+    "capture_lex",
+    "capture_lex_p",
+    "Parrot_capture_lex_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 31 */
+    /* type PARROT_INLINE_OP, */
+    "newclosure",
+    "newclosure_p_p",
+    "Parrot_newclosure_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 32 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_args",
+    "set_args_pc",
+    "Parrot_set_args_pc",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    2,
+    { PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 33 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_params",
+    "get_params_pc",
+    "Parrot_get_params_pc",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    2,
+    { PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 34 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_returns",
+    "set_returns_pc",
+    "Parrot_set_returns_pc",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    2,
+    { PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 35 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_results",
+    "get_results_pc",
+    "Parrot_get_results_pc",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    2,
+    { PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 36 */
+    /* type PARROT_INLINE_OP, */
+    "set_result_info",
+    "set_result_info_p",
+    "Parrot_set_result_info_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 37 */
+    /* type PARROT_INLINE_OP, */
+    "set_result_info",
+    "set_result_info_pc",
+    "Parrot_set_result_info_pc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 38 */
+    /* type PARROT_INLINE_OP, */
+    "result_info",
+    "result_info_p",
+    "Parrot_result_info_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 39 */
+    /* type PARROT_INLINE_OP, */
+    "set_addr",
+    "set_addr_i_ic",
+    "Parrot_set_addr_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 40 */
+    /* type PARROT_INLINE_OP, */
+    "set_addr",
+    "set_addr_p_ic",
+    "Parrot_set_addr_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 41 */
+    /* type PARROT_INLINE_OP, */
+    "set_addr",
+    "set_addr_p_i",
+    "Parrot_set_addr_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 42 */
+    /* type PARROT_INLINE_OP, */
+    "get_addr",
+    "get_addr_i_p",
+    "Parrot_get_addr_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 43 */
+    /* type PARROT_INLINE_OP, */
+    "schedule",
+    "schedule_p",
+    "Parrot_schedule_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 44 */
+    /* type PARROT_INLINE_OP, */
+    "addhandler",
+    "addhandler_p",
+    "Parrot_addhandler_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 45 */
+    /* type PARROT_INLINE_OP, */
+    "push_eh",
+    "push_eh_ic",
+    "Parrot_push_eh_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 1 }
+  },
+  { /* 46 */
+    /* type PARROT_INLINE_OP, */
+    "push_eh",
+    "push_eh_p",
+    "Parrot_push_eh_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 47 */
+    /* type PARROT_INLINE_OP, */
+    "pop_eh",
+    "pop_eh",
+    "Parrot_pop_eh",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 48 */
+    /* type PARROT_INLINE_OP, */
+    "throw",
+    "throw_p",
+    "Parrot_throw_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 49 */
+    /* type PARROT_INLINE_OP, */
+    "throw",
+    "throw_p_p",
+    "Parrot_throw_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 50 */
+    /* type PARROT_INLINE_OP, */
+    "rethrow",
+    "rethrow_p",
+    "Parrot_rethrow_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 51 */
+    /* type PARROT_INLINE_OP, */
+    "count_eh",
+    "count_eh_i",
+    "Parrot_count_eh_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 52 */
+    /* type PARROT_INLINE_OP, */
+    "die",
+    "die_s",
+    "Parrot_die_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 53 */
+    /* type PARROT_INLINE_OP, */
+    "die",
+    "die_sc",
+    "Parrot_die_sc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 54 */
+    /* type PARROT_INLINE_OP, */
+    "die",
+    "die_p",
+    "Parrot_die_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 55 */
+    /* type PARROT_INLINE_OP, */
+    "die",
+    "die_pc",
+    "Parrot_die_pc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 56 */
+    /* type PARROT_INLINE_OP, */
+    "die",
+    "die_i_i",
+    "Parrot_die_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 57 */
+    /* type PARROT_INLINE_OP, */
+    "die",
+    "die_ic_i",
+    "Parrot_die_ic_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 58 */
+    /* type PARROT_INLINE_OP, */
+    "die",
+    "die_i_ic",
+    "Parrot_die_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 59 */
+    /* type PARROT_INLINE_OP, */
+    "die",
+    "die_ic_ic",
+    "Parrot_die_ic_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 60 */
+    /* type PARROT_INLINE_OP, */
+    "exit",
+    "exit_i",
+    "Parrot_exit_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 61 */
+    /* type PARROT_INLINE_OP, */
+    "exit",
+    "exit_ic",
+    "Parrot_exit_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 62 */
+    /* type PARROT_INLINE_OP, */
+    "debug",
+    "debug_i",
+    "Parrot_debug_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 63 */
+    /* type PARROT_INLINE_OP, */
+    "debug",
+    "debug_ic",
+    "Parrot_debug_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 64 */
+    /* type PARROT_INLINE_OP, */
+    "bounds",
+    "bounds_i",
+    "Parrot_bounds_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 65 */
+    /* type PARROT_INLINE_OP, */
+    "bounds",
+    "bounds_ic",
+    "Parrot_bounds_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 66 */
+    /* type PARROT_INLINE_OP, */
+    "profile",
+    "profile_i",
+    "Parrot_profile_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 67 */
+    /* type PARROT_INLINE_OP, */
+    "profile",
+    "profile_ic",
+    "Parrot_profile_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 68 */
+    /* type PARROT_INLINE_OP, */
+    "trace",
+    "trace_i",
+    "Parrot_trace_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 69 */
+    /* type PARROT_INLINE_OP, */
+    "trace",
+    "trace_ic",
+    "Parrot_trace_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 70 */
+    /* type PARROT_INLINE_OP, */
+    "gc_debug",
+    "gc_debug_i",
+    "Parrot_gc_debug_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 71 */
+    /* type PARROT_INLINE_OP, */
+    "gc_debug",
+    "gc_debug_ic",
+    "Parrot_gc_debug_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 72 */
+    /* type PARROT_FUNCTION_OP, */
+    "interpinfo",
+    "interpinfo_i_i",
+    "Parrot_interpinfo_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 73 */
+    /* type PARROT_FUNCTION_OP, */
+    "interpinfo",
+    "interpinfo_i_ic",
+    "Parrot_interpinfo_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 74 */
+    /* type PARROT_FUNCTION_OP, */
+    "interpinfo",
+    "interpinfo_p_i",
+    "Parrot_interpinfo_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 75 */
+    /* type PARROT_FUNCTION_OP, */
+    "interpinfo",
+    "interpinfo_p_ic",
+    "Parrot_interpinfo_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 76 */
+    /* type PARROT_FUNCTION_OP, */
+    "interpinfo",
+    "interpinfo_s_i",
+    "Parrot_interpinfo_s_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 77 */
+    /* type PARROT_FUNCTION_OP, */
+    "interpinfo",
+    "interpinfo_s_ic",
+    "Parrot_interpinfo_s_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 78 */
+    /* type PARROT_INLINE_OP, */
+    "warningson",
+    "warningson_i",
+    "Parrot_warningson_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 79 */
+    /* type PARROT_INLINE_OP, */
+    "warningson",
+    "warningson_ic",
+    "Parrot_warningson_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 80 */
+    /* type PARROT_INLINE_OP, */
+    "warningsoff",
+    "warningsoff_i",
+    "Parrot_warningsoff_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 81 */
+    /* type PARROT_INLINE_OP, */
+    "warningsoff",
+    "warningsoff_ic",
+    "Parrot_warningsoff_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 82 */
+    /* type PARROT_INLINE_OP, */
+    "errorson",
+    "errorson_i",
+    "Parrot_errorson_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 83 */
+    /* type PARROT_INLINE_OP, */
+    "errorson",
+    "errorson_ic",
+    "Parrot_errorson_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 84 */
+    /* type PARROT_INLINE_OP, */
+    "errorsoff",
+    "errorsoff_i",
+    "Parrot_errorsoff_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 85 */
+    /* type PARROT_INLINE_OP, */
+    "errorsoff",
+    "errorsoff_ic",
+    "Parrot_errorsoff_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 86 */
+    /* type PARROT_FUNCTION_OP, */
+    "runinterp",
+    "runinterp_p_i",
+    "Parrot_runinterp_p_i",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 87 */
+    /* type PARROT_FUNCTION_OP, */
+    "runinterp",
+    "runinterp_p_ic",
+    "Parrot_runinterp_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 88 */
+    /* type PARROT_FUNCTION_OP, */
+    "getinterp",
+    "getinterp_p",
+    "Parrot_getinterp_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 89 */
+    /* type PARROT_FUNCTION_OP, */
+    "sweep",
+    "sweep_ic",
+    "Parrot_sweep_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 90 */
+    /* type PARROT_FUNCTION_OP, */
+    "collect",
+    "collect",
+    "Parrot_collect",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 91 */
+    /* type PARROT_FUNCTION_OP, */
+    "sweepoff",
+    "sweepoff",
+    "Parrot_sweepoff",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 92 */
+    /* type PARROT_FUNCTION_OP, */
+    "sweepon",
+    "sweepon",
+    "Parrot_sweepon",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 93 */
+    /* type PARROT_FUNCTION_OP, */
+    "collectoff",
+    "collectoff",
+    "Parrot_collectoff",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 94 */
+    /* type PARROT_FUNCTION_OP, */
+    "collecton",
+    "collecton",
+    "Parrot_collecton",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 95 */
+    /* type PARROT_FUNCTION_OP, */
+    "needs_destroy",
+    "needs_destroy_p",
+    "Parrot_needs_destroy_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 96 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_s",
+    "Parrot_loadlib_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 97 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_sc",
+    "Parrot_loadlib_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 98 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_s_p",
+    "Parrot_loadlib_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 99 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_sc_p",
+    "Parrot_loadlib_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 100 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_s_pc",
+    "Parrot_loadlib_p_s_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 101 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_sc_pc",
+    "Parrot_loadlib_p_sc_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 102 */
+    /* type PARROT_FUNCTION_OP, */
+    "dlfunc",
+    "dlfunc_p_p_s_s",
+    "Parrot_dlfunc_p_p_s_s",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 103 */
+    /* type PARROT_FUNCTION_OP, */
+    "dlfunc",
+    "dlfunc_p_p_sc_s",
+    "Parrot_dlfunc_p_p_sc_s",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 104 */
+    /* type PARROT_FUNCTION_OP, */
+    "dlfunc",
+    "dlfunc_p_p_s_sc",
+    "Parrot_dlfunc_p_p_s_sc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 105 */
+    /* type PARROT_FUNCTION_OP, */
+    "dlfunc",
+    "dlfunc_p_p_sc_sc",
+    "Parrot_dlfunc_p_p_sc_sc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 106 */
+    /* type PARROT_FUNCTION_OP, */
+    "dlvar",
+    "dlvar_p_p_s",
+    "Parrot_dlvar_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 107 */
+    /* type PARROT_FUNCTION_OP, */
+    "dlvar",
+    "dlvar_p_p_sc",
+    "Parrot_dlvar_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 108 */
+    /* type PARROT_INLINE_OP, */
+    "compreg",
+    "compreg_s_p",
+    "Parrot_compreg_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 109 */
+    /* type PARROT_INLINE_OP, */
+    "compreg",
+    "compreg_sc_p",
+    "Parrot_compreg_sc_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 110 */
+    /* type PARROT_INLINE_OP, */
+    "compreg",
+    "compreg_p_s",
+    "Parrot_compreg_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 111 */
+    /* type PARROT_INLINE_OP, */
+    "compreg",
+    "compreg_p_sc",
+    "Parrot_compreg_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 112 */
+    /* type PARROT_FUNCTION_OP, */
+    "new_callback",
+    "new_callback_p_p_p_s",
+    "Parrot_new_callback_p_p_p_s",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 113 */
+    /* type PARROT_FUNCTION_OP, */
+    "new_callback",
+    "new_callback_p_p_p_sc",
+    "Parrot_new_callback_p_p_p_sc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 114 */
+    /* type PARROT_INLINE_OP, */
+    "annotations",
+    "annotations_p",
+    "Parrot_annotations_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 115 */
+    /* type PARROT_INLINE_OP, */
+    "annotations",
+    "annotations_p_s",
+    "Parrot_annotations_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 116 */
+    /* type PARROT_INLINE_OP, */
+    "annotations",
+    "annotations_p_sc",
+    "Parrot_annotations_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 117 */
+    /* type PARROT_INLINE_OP, */
+    "band",
+    "band_i_i",
+    "Parrot_band_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 118 */
+    /* type PARROT_INLINE_OP, */
+    "band",
+    "band_i_ic",
+    "Parrot_band_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 119 */
+    /* type PARROT_INLINE_OP, */
+    "band",
+    "band_i_i_i",
+    "Parrot_band_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 120 */
+    /* type PARROT_INLINE_OP, */
+    "band",
+    "band_i_ic_i",
+    "Parrot_band_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 121 */
+    /* type PARROT_INLINE_OP, */
+    "band",
+    "band_i_i_ic",
+    "Parrot_band_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 122 */
+    /* type PARROT_INLINE_OP, */
+    "bor",
+    "bor_i_i",
+    "Parrot_bor_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 123 */
+    /* type PARROT_INLINE_OP, */
+    "bor",
+    "bor_i_ic",
+    "Parrot_bor_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 124 */
+    /* type PARROT_INLINE_OP, */
+    "bor",
+    "bor_i_i_i",
+    "Parrot_bor_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 125 */
+    /* type PARROT_INLINE_OP, */
+    "bor",
+    "bor_i_ic_i",
+    "Parrot_bor_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 126 */
+    /* type PARROT_INLINE_OP, */
+    "bor",
+    "bor_i_i_ic",
+    "Parrot_bor_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 127 */
+    /* type PARROT_INLINE_OP, */
+    "shl",
+    "shl_i_i",
+    "Parrot_shl_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 128 */
+    /* type PARROT_INLINE_OP, */
+    "shl",
+    "shl_i_ic",
+    "Parrot_shl_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 129 */
+    /* type PARROT_INLINE_OP, */
+    "shl",
+    "shl_i_i_i",
+    "Parrot_shl_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 130 */
+    /* type PARROT_INLINE_OP, */
+    "shl",
+    "shl_i_ic_i",
+    "Parrot_shl_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 131 */
+    /* type PARROT_INLINE_OP, */
+    "shl",
+    "shl_i_i_ic",
+    "Parrot_shl_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 132 */
+    /* type PARROT_INLINE_OP, */
+    "shr",
+    "shr_i_i",
+    "Parrot_shr_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 133 */
+    /* type PARROT_INLINE_OP, */
+    "shr",
+    "shr_i_ic",
+    "Parrot_shr_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 134 */
+    /* type PARROT_INLINE_OP, */
+    "shr",
+    "shr_i_i_i",
+    "Parrot_shr_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 135 */
+    /* type PARROT_INLINE_OP, */
+    "shr",
+    "shr_i_ic_i",
+    "Parrot_shr_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 136 */
+    /* type PARROT_INLINE_OP, */
+    "shr",
+    "shr_i_i_ic",
+    "Parrot_shr_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 137 */
+    /* type PARROT_INLINE_OP, */
+    "lsr",
+    "lsr_i_i",
+    "Parrot_lsr_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 138 */
+    /* type PARROT_INLINE_OP, */
+    "lsr",
+    "lsr_i_ic",
+    "Parrot_lsr_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 139 */
+    /* type PARROT_INLINE_OP, */
+    "lsr",
+    "lsr_i_i_i",
+    "Parrot_lsr_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 140 */
+    /* type PARROT_INLINE_OP, */
+    "lsr",
+    "lsr_i_ic_i",
+    "Parrot_lsr_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 141 */
+    /* type PARROT_INLINE_OP, */
+    "lsr",
+    "lsr_i_i_ic",
+    "Parrot_lsr_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 142 */
+    /* type PARROT_INLINE_OP, */
+    "bxor",
+    "bxor_i_i",
+    "Parrot_bxor_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 143 */
+    /* type PARROT_INLINE_OP, */
+    "bxor",
+    "bxor_i_ic",
+    "Parrot_bxor_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 144 */
+    /* type PARROT_INLINE_OP, */
+    "bxor",
+    "bxor_i_i_i",
+    "Parrot_bxor_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 145 */
+    /* type PARROT_INLINE_OP, */
+    "bxor",
+    "bxor_i_ic_i",
+    "Parrot_bxor_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 146 */
+    /* type PARROT_INLINE_OP, */
+    "bxor",
+    "bxor_i_i_ic",
+    "Parrot_bxor_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 147 */
+    /* type PARROT_INLINE_OP, */
+    "eq",
+    "eq_i_i_ic",
+    "Parrot_eq_i_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 148 */
+    /* type PARROT_INLINE_OP, */
+    "eq",
+    "eq_ic_i_ic",
+    "Parrot_eq_ic_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 149 */
+    /* type PARROT_INLINE_OP, */
+    "eq",
+    "eq_i_ic_ic",
+    "Parrot_eq_i_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 150 */
+    /* type PARROT_INLINE_OP, */
+    "eq",
+    "eq_n_n_ic",
+    "Parrot_eq_n_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 151 */
+    /* type PARROT_INLINE_OP, */
+    "eq",
+    "eq_nc_n_ic",
+    "Parrot_eq_nc_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_NC, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 152 */
+    /* type PARROT_INLINE_OP, */
+    "eq",
+    "eq_n_nc_ic",
+    "Parrot_eq_n_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 153 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_s_s_ic",
+    "Parrot_eq_s_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 154 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_sc_s_ic",
+    "Parrot_eq_sc_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 155 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_s_sc_ic",
+    "Parrot_eq_s_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 156 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_p_p_ic",
+    "Parrot_eq_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 157 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_p_i_ic",
+    "Parrot_eq_p_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 158 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_p_ic_ic",
+    "Parrot_eq_p_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 159 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_p_n_ic",
+    "Parrot_eq_p_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 160 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_p_nc_ic",
+    "Parrot_eq_p_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 161 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_p_s_ic",
+    "Parrot_eq_p_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 162 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq",
+    "eq_p_sc_ic",
+    "Parrot_eq_p_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 163 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq_str",
+    "eq_str_p_p_ic",
+    "Parrot_eq_str_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 164 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq_num",
+    "eq_num_p_p_ic",
+    "Parrot_eq_num_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 165 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq_addr",
+    "eq_addr_s_s_ic",
+    "Parrot_eq_addr_s_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 166 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq_addr",
+    "eq_addr_sc_s_ic",
+    "Parrot_eq_addr_sc_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 167 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq_addr",
+    "eq_addr_s_sc_ic",
+    "Parrot_eq_addr_s_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 168 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq_addr",
+    "eq_addr_sc_sc_ic",
+    "Parrot_eq_addr_sc_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 169 */
+    /* type PARROT_FUNCTION_OP, */
+    "eq_addr",
+    "eq_addr_p_p_ic",
+    "Parrot_eq_addr_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 170 */
+    /* type PARROT_INLINE_OP, */
+    "ne",
+    "ne_i_i_ic",
+    "Parrot_ne_i_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 171 */
+    /* type PARROT_INLINE_OP, */
+    "ne",
+    "ne_ic_i_ic",
+    "Parrot_ne_ic_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 172 */
+    /* type PARROT_INLINE_OP, */
+    "ne",
+    "ne_i_ic_ic",
+    "Parrot_ne_i_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 173 */
+    /* type PARROT_INLINE_OP, */
+    "ne",
+    "ne_n_n_ic",
+    "Parrot_ne_n_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 174 */
+    /* type PARROT_INLINE_OP, */
+    "ne",
+    "ne_nc_n_ic",
+    "Parrot_ne_nc_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_NC, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 175 */
+    /* type PARROT_INLINE_OP, */
+    "ne",
+    "ne_n_nc_ic",
+    "Parrot_ne_n_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 176 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_s_s_ic",
+    "Parrot_ne_s_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 177 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_sc_s_ic",
+    "Parrot_ne_sc_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 178 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_s_sc_ic",
+    "Parrot_ne_s_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 179 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_p_p_ic",
+    "Parrot_ne_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 180 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_p_i_ic",
+    "Parrot_ne_p_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 181 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_p_ic_ic",
+    "Parrot_ne_p_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 182 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_p_n_ic",
+    "Parrot_ne_p_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 183 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_p_nc_ic",
+    "Parrot_ne_p_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 184 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_p_s_ic",
+    "Parrot_ne_p_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 185 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne",
+    "ne_p_sc_ic",
+    "Parrot_ne_p_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 186 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne_str",
+    "ne_str_p_p_ic",
+    "Parrot_ne_str_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 187 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne_num",
+    "ne_num_p_p_ic",
+    "Parrot_ne_num_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 188 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne_addr",
+    "ne_addr_s_s_ic",
+    "Parrot_ne_addr_s_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 189 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne_addr",
+    "ne_addr_sc_s_ic",
+    "Parrot_ne_addr_sc_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 190 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne_addr",
+    "ne_addr_s_sc_ic",
+    "Parrot_ne_addr_s_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 191 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne_addr",
+    "ne_addr_sc_sc_ic",
+    "Parrot_ne_addr_sc_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 192 */
+    /* type PARROT_FUNCTION_OP, */
+    "ne_addr",
+    "ne_addr_p_p_ic",
+    "Parrot_ne_addr_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 193 */
+    /* type PARROT_INLINE_OP, */
+    "lt",
+    "lt_i_i_ic",
+    "Parrot_lt_i_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 194 */
+    /* type PARROT_INLINE_OP, */
+    "lt",
+    "lt_ic_i_ic",
+    "Parrot_lt_ic_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 195 */
+    /* type PARROT_INLINE_OP, */
+    "lt",
+    "lt_i_ic_ic",
+    "Parrot_lt_i_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 196 */
+    /* type PARROT_INLINE_OP, */
+    "lt",
+    "lt_n_n_ic",
+    "Parrot_lt_n_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 197 */
+    /* type PARROT_INLINE_OP, */
+    "lt",
+    "lt_nc_n_ic",
+    "Parrot_lt_nc_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_NC, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 198 */
+    /* type PARROT_INLINE_OP, */
+    "lt",
+    "lt_n_nc_ic",
+    "Parrot_lt_n_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 199 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_s_s_ic",
+    "Parrot_lt_s_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 200 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_sc_s_ic",
+    "Parrot_lt_sc_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 201 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_s_sc_ic",
+    "Parrot_lt_s_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 202 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_p_p_ic",
+    "Parrot_lt_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 203 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_p_i_ic",
+    "Parrot_lt_p_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 204 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_p_ic_ic",
+    "Parrot_lt_p_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 205 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_p_n_ic",
+    "Parrot_lt_p_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 206 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_p_nc_ic",
+    "Parrot_lt_p_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 207 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_p_s_ic",
+    "Parrot_lt_p_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 208 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt",
+    "lt_p_sc_ic",
+    "Parrot_lt_p_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 209 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt_str",
+    "lt_str_p_p_ic",
+    "Parrot_lt_str_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 210 */
+    /* type PARROT_FUNCTION_OP, */
+    "lt_num",
+    "lt_num_p_p_ic",
+    "Parrot_lt_num_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 211 */
+    /* type PARROT_INLINE_OP, */
+    "le",
+    "le_i_i_ic",
+    "Parrot_le_i_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 212 */
+    /* type PARROT_INLINE_OP, */
+    "le",
+    "le_ic_i_ic",
+    "Parrot_le_ic_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 213 */
+    /* type PARROT_INLINE_OP, */
+    "le",
+    "le_i_ic_ic",
+    "Parrot_le_i_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 214 */
+    /* type PARROT_INLINE_OP, */
+    "le",
+    "le_n_n_ic",
+    "Parrot_le_n_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 215 */
+    /* type PARROT_INLINE_OP, */
+    "le",
+    "le_nc_n_ic",
+    "Parrot_le_nc_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_NC, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 216 */
+    /* type PARROT_INLINE_OP, */
+    "le",
+    "le_n_nc_ic",
+    "Parrot_le_n_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 217 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_s_s_ic",
+    "Parrot_le_s_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 218 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_sc_s_ic",
+    "Parrot_le_sc_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 219 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_s_sc_ic",
+    "Parrot_le_s_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 220 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_p_p_ic",
+    "Parrot_le_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 221 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_p_i_ic",
+    "Parrot_le_p_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 222 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_p_ic_ic",
+    "Parrot_le_p_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 223 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_p_n_ic",
+    "Parrot_le_p_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 224 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_p_nc_ic",
+    "Parrot_le_p_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 225 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_p_s_ic",
+    "Parrot_le_p_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 226 */
+    /* type PARROT_FUNCTION_OP, */
+    "le",
+    "le_p_sc_ic",
+    "Parrot_le_p_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 227 */
+    /* type PARROT_FUNCTION_OP, */
+    "le_str",
+    "le_str_p_p_ic",
+    "Parrot_le_str_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 228 */
+    /* type PARROT_FUNCTION_OP, */
+    "le_num",
+    "le_num_p_p_ic",
+    "Parrot_le_num_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 229 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt",
+    "gt_p_p_ic",
+    "Parrot_gt_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 230 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt",
+    "gt_p_i_ic",
+    "Parrot_gt_p_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 231 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt",
+    "gt_p_ic_ic",
+    "Parrot_gt_p_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 232 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt",
+    "gt_p_n_ic",
+    "Parrot_gt_p_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 233 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt",
+    "gt_p_nc_ic",
+    "Parrot_gt_p_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 234 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt",
+    "gt_p_s_ic",
+    "Parrot_gt_p_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 235 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt",
+    "gt_p_sc_ic",
+    "Parrot_gt_p_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 236 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt_str",
+    "gt_str_p_p_ic",
+    "Parrot_gt_str_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 237 */
+    /* type PARROT_FUNCTION_OP, */
+    "gt_num",
+    "gt_num_p_p_ic",
+    "Parrot_gt_num_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 238 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge",
+    "ge_p_p_ic",
+    "Parrot_ge_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 239 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge",
+    "ge_p_i_ic",
+    "Parrot_ge_p_i_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 240 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge",
+    "ge_p_ic_ic",
+    "Parrot_ge_p_ic_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 241 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge",
+    "ge_p_n_ic",
+    "Parrot_ge_p_n_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 242 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge",
+    "ge_p_nc_ic",
+    "Parrot_ge_p_nc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 243 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge",
+    "ge_p_s_ic",
+    "Parrot_ge_p_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 244 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge",
+    "ge_p_sc_ic",
+    "Parrot_ge_p_sc_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 245 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge_str",
+    "ge_str_p_p_ic",
+    "Parrot_ge_str_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 246 */
+    /* type PARROT_FUNCTION_OP, */
+    "ge_num",
+    "ge_num_p_p_ic",
+    "Parrot_ge_num_p_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 1 }
+  },
+  { /* 247 */
+    /* type PARROT_FUNCTION_OP, */
+    "if_null",
+    "if_null_p_ic",
+    "Parrot_if_null_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 248 */
+    /* type PARROT_FUNCTION_OP, */
+    "if_null",
+    "if_null_s_ic",
+    "Parrot_if_null_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 249 */
+    /* type PARROT_FUNCTION_OP, */
+    "unless_null",
+    "unless_null_p_ic",
+    "Parrot_unless_null_p_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 250 */
+    /* type PARROT_FUNCTION_OP, */
+    "unless_null",
+    "unless_null_s_ic",
+    "Parrot_unless_null_s_ic",
+    /* "",  body */
+    PARROT_JUMP_RELATIVE,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 251 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_i_i",
+    "Parrot_cmp_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 252 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_ic_i",
+    "Parrot_cmp_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 253 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_i_ic",
+    "Parrot_cmp_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 254 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_n_n",
+    "Parrot_cmp_i_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 255 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_nc_n",
+    "Parrot_cmp_i_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 256 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_n_nc",
+    "Parrot_cmp_i_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 257 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_s_s",
+    "Parrot_cmp_i_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 258 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_sc_s",
+    "Parrot_cmp_i_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 259 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_s_sc",
+    "Parrot_cmp_i_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 260 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_p_p",
+    "Parrot_cmp_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 261 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_p_i",
+    "Parrot_cmp_i_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 262 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_p_ic",
+    "Parrot_cmp_i_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 263 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_p_n",
+    "Parrot_cmp_i_p_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 264 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_p_nc",
+    "Parrot_cmp_i_p_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 265 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_p_s",
+    "Parrot_cmp_i_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 266 */
+    /* type PARROT_INLINE_OP, */
+    "cmp",
+    "cmp_i_p_sc",
+    "Parrot_cmp_i_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 267 */
+    /* type PARROT_INLINE_OP, */
+    "cmp_str",
+    "cmp_str_i_p_p",
+    "Parrot_cmp_str_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 268 */
+    /* type PARROT_INLINE_OP, */
+    "cmp_num",
+    "cmp_num_i_p_p",
+    "Parrot_cmp_num_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 269 */
+    /* type PARROT_INLINE_OP, */
+    "cmp_pmc",
+    "cmp_pmc_p_p_p",
+    "Parrot_cmp_pmc_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 270 */
+    /* type PARROT_INLINE_OP, */
+    "issame",
+    "issame_i_p_p",
+    "Parrot_issame_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 271 */
+    /* type PARROT_INLINE_OP, */
+    "issame",
+    "issame_i_s_s",
+    "Parrot_issame_i_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 272 */
+    /* type PARROT_INLINE_OP, */
+    "issame",
+    "issame_i_sc_s",
+    "Parrot_issame_i_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 273 */
+    /* type PARROT_INLINE_OP, */
+    "issame",
+    "issame_i_s_sc",
+    "Parrot_issame_i_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 274 */
+    /* type PARROT_INLINE_OP, */
+    "issame",
+    "issame_i_sc_sc",
+    "Parrot_issame_i_sc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 275 */
+    /* type PARROT_INLINE_OP, */
+    "isntsame",
+    "isntsame_i_p_p",
+    "Parrot_isntsame_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 276 */
+    /* type PARROT_INLINE_OP, */
+    "isntsame",
+    "isntsame_i_s_s",
+    "Parrot_isntsame_i_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 277 */
+    /* type PARROT_INLINE_OP, */
+    "isntsame",
+    "isntsame_i_sc_s",
+    "Parrot_isntsame_i_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 278 */
+    /* type PARROT_INLINE_OP, */
+    "isntsame",
+    "isntsame_i_s_sc",
+    "Parrot_isntsame_i_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 279 */
+    /* type PARROT_INLINE_OP, */
+    "isntsame",
+    "isntsame_i_sc_sc",
+    "Parrot_isntsame_i_sc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 280 */
+    /* type PARROT_INLINE_OP, */
+    "istrue",
+    "istrue_i_p",
+    "Parrot_istrue_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 281 */
+    /* type PARROT_INLINE_OP, */
+    "isfalse",
+    "isfalse_i_p",
+    "Parrot_isfalse_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 282 */
+    /* type PARROT_INLINE_OP, */
+    "isnull",
+    "isnull_i_p",
+    "Parrot_isnull_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 283 */
+    /* type PARROT_INLINE_OP, */
+    "isnull",
+    "isnull_i_pc",
+    "Parrot_isnull_i_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 284 */
+    /* type PARROT_INLINE_OP, */
+    "isnull",
+    "isnull_i_s",
+    "Parrot_isnull_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 285 */
+    /* type PARROT_INLINE_OP, */
+    "isnull",
+    "isnull_i_sc",
+    "Parrot_isnull_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 286 */
+    /* type PARROT_INLINE_OP, */
+    "isgt",
+    "isgt_i_p_p",
+    "Parrot_isgt_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 287 */
+    /* type PARROT_INLINE_OP, */
+    "isge",
+    "isge_i_p_p",
+    "Parrot_isge_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 288 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_i_i",
+    "Parrot_isle_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 289 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_ic_i",
+    "Parrot_isle_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 290 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_i_ic",
+    "Parrot_isle_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 291 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_n_n",
+    "Parrot_isle_i_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 292 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_nc_n",
+    "Parrot_isle_i_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 293 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_n_nc",
+    "Parrot_isle_i_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 294 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_s_s",
+    "Parrot_isle_i_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 295 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_sc_s",
+    "Parrot_isle_i_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 296 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_s_sc",
+    "Parrot_isle_i_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 297 */
+    /* type PARROT_INLINE_OP, */
+    "isle",
+    "isle_i_p_p",
+    "Parrot_isle_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 298 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_i_i",
+    "Parrot_islt_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 299 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_ic_i",
+    "Parrot_islt_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 300 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_i_ic",
+    "Parrot_islt_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 301 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_n_n",
+    "Parrot_islt_i_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 302 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_nc_n",
+    "Parrot_islt_i_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 303 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_n_nc",
+    "Parrot_islt_i_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 304 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_s_s",
+    "Parrot_islt_i_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 305 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_sc_s",
+    "Parrot_islt_i_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 306 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_s_sc",
+    "Parrot_islt_i_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 307 */
+    /* type PARROT_INLINE_OP, */
+    "islt",
+    "islt_i_p_p",
+    "Parrot_islt_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 308 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_i_i",
+    "Parrot_iseq_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 309 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_ic_i",
+    "Parrot_iseq_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 310 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_i_ic",
+    "Parrot_iseq_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 311 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_n_n",
+    "Parrot_iseq_i_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 312 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_nc_n",
+    "Parrot_iseq_i_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 313 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_n_nc",
+    "Parrot_iseq_i_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 314 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_s_s",
+    "Parrot_iseq_i_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 315 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_sc_s",
+    "Parrot_iseq_i_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 316 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_s_sc",
+    "Parrot_iseq_i_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 317 */
+    /* type PARROT_INLINE_OP, */
+    "iseq",
+    "iseq_i_p_p",
+    "Parrot_iseq_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 318 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_i_i",
+    "Parrot_isne_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 319 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_ic_i",
+    "Parrot_isne_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 320 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_i_ic",
+    "Parrot_isne_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 321 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_n_n",
+    "Parrot_isne_i_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 322 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_nc_n",
+    "Parrot_isne_i_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 323 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_n_nc",
+    "Parrot_isne_i_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 324 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_s_s",
+    "Parrot_isne_i_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 325 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_sc_s",
+    "Parrot_isne_i_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 326 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_s_sc",
+    "Parrot_isne_i_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 327 */
+    /* type PARROT_INLINE_OP, */
+    "isne",
+    "isne_i_p_p",
+    "Parrot_isne_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 328 */
+    /* type PARROT_INLINE_OP, */
+    "and",
+    "and_i_i_i",
+    "Parrot_and_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 329 */
+    /* type PARROT_INLINE_OP, */
+    "and",
+    "and_i_ic_i",
+    "Parrot_and_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 330 */
+    /* type PARROT_INLINE_OP, */
+    "and",
+    "and_i_i_ic",
+    "Parrot_and_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 331 */
+    /* type PARROT_INLINE_OP, */
+    "and",
+    "and_p_p_p",
+    "Parrot_and_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 332 */
+    /* type PARROT_INLINE_OP, */
+    "not",
+    "not_i",
+    "Parrot_not_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 333 */
+    /* type PARROT_INLINE_OP, */
+    "not",
+    "not_i_i",
+    "Parrot_not_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 334 */
+    /* type PARROT_INLINE_OP, */
+    "not",
+    "not_p",
+    "Parrot_not_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 335 */
+    /* type PARROT_INLINE_OP, */
+    "not",
+    "not_p_p",
+    "Parrot_not_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 336 */
+    /* type PARROT_INLINE_OP, */
+    "or",
+    "or_i_i_i",
+    "Parrot_or_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 337 */
+    /* type PARROT_INLINE_OP, */
+    "or",
+    "or_i_ic_i",
+    "Parrot_or_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 338 */
+    /* type PARROT_INLINE_OP, */
+    "or",
+    "or_i_i_ic",
+    "Parrot_or_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 339 */
+    /* type PARROT_INLINE_OP, */
+    "or",
+    "or_p_p_p",
+    "Parrot_or_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 340 */
+    /* type PARROT_INLINE_OP, */
+    "xor",
+    "xor_i_i_i",
+    "Parrot_xor_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 341 */
+    /* type PARROT_INLINE_OP, */
+    "xor",
+    "xor_i_ic_i",
+    "Parrot_xor_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 342 */
+    /* type PARROT_INLINE_OP, */
+    "xor",
+    "xor_i_i_ic",
+    "Parrot_xor_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 343 */
+    /* type PARROT_INLINE_OP, */
+    "xor",
+    "xor_p_p_p",
+    "Parrot_xor_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 344 */
+    /* type PARROT_INLINE_OP, */
+    "print",
+    "print_i",
+    "Parrot_print_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 345 */
+    /* type PARROT_INLINE_OP, */
+    "print",
+    "print_ic",
+    "Parrot_print_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 346 */
+    /* type PARROT_INLINE_OP, */
+    "print",
+    "print_n",
+    "Parrot_print_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 347 */
+    /* type PARROT_INLINE_OP, */
+    "print",
+    "print_nc",
+    "Parrot_print_nc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 348 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_s",
+    "Parrot_print_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 349 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_sc",
+    "Parrot_print_sc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 350 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_p",
+    "Parrot_print_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 351 */
+    /* type PARROT_INLINE_OP, */
+    "say",
+    "say_i",
+    "Parrot_say_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 352 */
+    /* type PARROT_INLINE_OP, */
+    "say",
+    "say_ic",
+    "Parrot_say_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 353 */
+    /* type PARROT_INLINE_OP, */
+    "say",
+    "say_n",
+    "Parrot_say_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 354 */
+    /* type PARROT_INLINE_OP, */
+    "say",
+    "say_nc",
+    "Parrot_say_nc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 355 */
+    /* type PARROT_FUNCTION_OP, */
+    "say",
+    "say_s",
+    "Parrot_say_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 356 */
+    /* type PARROT_FUNCTION_OP, */
+    "say",
+    "say_sc",
+    "Parrot_say_sc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 357 */
+    /* type PARROT_FUNCTION_OP, */
+    "say",
+    "say_p",
+    "Parrot_say_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 358 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_p_i",
+    "Parrot_print_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 359 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_p_ic",
+    "Parrot_print_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 360 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_p_n",
+    "Parrot_print_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 361 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_p_nc",
+    "Parrot_print_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 362 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_p_s",
+    "Parrot_print_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 363 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_p_sc",
+    "Parrot_print_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 364 */
+    /* type PARROT_FUNCTION_OP, */
+    "print",
+    "print_p_p",
+    "Parrot_print_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 365 */
+    /* type PARROT_INLINE_OP, */
+    "getstdin",
+    "getstdin_p",
+    "Parrot_getstdin_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 366 */
+    /* type PARROT_INLINE_OP, */
+    "getstdout",
+    "getstdout_p",
+    "Parrot_getstdout_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 367 */
+    /* type PARROT_INLINE_OP, */
+    "getstderr",
+    "getstderr_p",
+    "Parrot_getstderr_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 368 */
+    /* type PARROT_INLINE_OP, */
+    "abs",
+    "abs_i",
+    "Parrot_abs_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 369 */
+    /* type PARROT_INLINE_OP, */
+    "abs",
+    "abs_n",
+    "Parrot_abs_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 370 */
+    /* type PARROT_INLINE_OP, */
+    "abs",
+    "abs_i_i",
+    "Parrot_abs_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 371 */
+    /* type PARROT_INLINE_OP, */
+    "abs",
+    "abs_n_n",
+    "Parrot_abs_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 372 */
+    /* type PARROT_INLINE_OP, */
+    "abs",
+    "abs_p",
+    "Parrot_abs_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 373 */
+    /* type PARROT_INLINE_OP, */
+    "abs",
+    "abs_p_p",
+    "Parrot_abs_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 374 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_i_i",
+    "Parrot_add_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 375 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_i_ic",
+    "Parrot_add_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 376 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_n_n",
+    "Parrot_add_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 377 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_n_nc",
+    "Parrot_add_n_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 378 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_p",
+    "Parrot_add_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 379 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_i",
+    "Parrot_add_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 380 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_ic",
+    "Parrot_add_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 381 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_n",
+    "Parrot_add_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 382 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_nc",
+    "Parrot_add_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 383 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_i_i_i",
+    "Parrot_add_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 384 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_i_ic_i",
+    "Parrot_add_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 385 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_i_i_ic",
+    "Parrot_add_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 386 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_n_n_n",
+    "Parrot_add_n_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 387 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_n_nc_n",
+    "Parrot_add_n_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 388 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_n_n_nc",
+    "Parrot_add_n_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 389 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_p_p",
+    "Parrot_add_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 390 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_p_i",
+    "Parrot_add_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 391 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_p_ic",
+    "Parrot_add_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 392 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_p_n",
+    "Parrot_add_p_p_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 393 */
+    /* type PARROT_INLINE_OP, */
+    "add",
+    "add_p_p_nc",
+    "Parrot_add_p_p_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 394 */
+    /* type PARROT_INLINE_OP, */
+    "dec",
+    "dec_i",
+    "Parrot_dec_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 395 */
+    /* type PARROT_INLINE_OP, */
+    "dec",
+    "dec_n",
+    "Parrot_dec_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 396 */
+    /* type PARROT_INLINE_OP, */
+    "dec",
+    "dec_p",
+    "Parrot_dec_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 397 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_i_i",
+    "Parrot_div_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 398 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_i_ic",
+    "Parrot_div_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 399 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_n_n",
+    "Parrot_div_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 400 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_n_nc",
+    "Parrot_div_n_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 401 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_p",
+    "Parrot_div_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 402 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_i",
+    "Parrot_div_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 403 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_ic",
+    "Parrot_div_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 404 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_n",
+    "Parrot_div_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 405 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_nc",
+    "Parrot_div_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 406 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_i_i_i",
+    "Parrot_div_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 407 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_i_ic_i",
+    "Parrot_div_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 408 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_i_i_ic",
+    "Parrot_div_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 409 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_i_ic_ic",
+    "Parrot_div_i_ic_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 410 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_n_n_n",
+    "Parrot_div_n_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 411 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_n_nc_n",
+    "Parrot_div_n_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 412 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_n_n_nc",
+    "Parrot_div_n_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 413 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_n_nc_nc",
+    "Parrot_div_n_nc_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 414 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_p_p",
+    "Parrot_div_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 415 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_p_i",
+    "Parrot_div_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 416 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_p_ic",
+    "Parrot_div_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 417 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_p_n",
+    "Parrot_div_p_p_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 418 */
+    /* type PARROT_INLINE_OP, */
+    "div",
+    "div_p_p_nc",
+    "Parrot_div_p_p_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 419 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_i_i",
+    "Parrot_fdiv_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 420 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_i_ic",
+    "Parrot_fdiv_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 421 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_n_n",
+    "Parrot_fdiv_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 422 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_n_nc",
+    "Parrot_fdiv_n_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 423 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_p",
+    "Parrot_fdiv_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 424 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_i",
+    "Parrot_fdiv_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 425 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_ic",
+    "Parrot_fdiv_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 426 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_n",
+    "Parrot_fdiv_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 427 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_nc",
+    "Parrot_fdiv_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 428 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_i_i_i",
+    "Parrot_fdiv_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 429 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_i_ic_i",
+    "Parrot_fdiv_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 430 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_i_i_ic",
+    "Parrot_fdiv_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 431 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_n_n_n",
+    "Parrot_fdiv_n_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 432 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_n_nc_n",
+    "Parrot_fdiv_n_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 433 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_n_n_nc",
+    "Parrot_fdiv_n_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 434 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_p_p",
+    "Parrot_fdiv_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 435 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_p_i",
+    "Parrot_fdiv_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 436 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_p_ic",
+    "Parrot_fdiv_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 437 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_p_n",
+    "Parrot_fdiv_p_p_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 438 */
+    /* type PARROT_INLINE_OP, */
+    "fdiv",
+    "fdiv_p_p_nc",
+    "Parrot_fdiv_p_p_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 439 */
+    /* type PARROT_INLINE_OP, */
+    "ceil",
+    "ceil_n",
+    "Parrot_ceil_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 440 */
+    /* type PARROT_INLINE_OP, */
+    "ceil",
+    "ceil_i_n",
+    "Parrot_ceil_i_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 441 */
+    /* type PARROT_INLINE_OP, */
+    "ceil",
+    "ceil_n_n",
+    "Parrot_ceil_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 442 */
+    /* type PARROT_INLINE_OP, */
+    "floor",
+    "floor_n",
+    "Parrot_floor_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 443 */
+    /* type PARROT_INLINE_OP, */
+    "floor",
+    "floor_i_n",
+    "Parrot_floor_i_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 444 */
+    /* type PARROT_INLINE_OP, */
+    "floor",
+    "floor_n_n",
+    "Parrot_floor_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 445 */
+    /* type PARROT_INLINE_OP, */
+    "inc",
+    "inc_i",
+    "Parrot_inc_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 446 */
+    /* type PARROT_INLINE_OP, */
+    "inc",
+    "inc_n",
+    "Parrot_inc_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 447 */
+    /* type PARROT_INLINE_OP, */
+    "inc",
+    "inc_p",
+    "Parrot_inc_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 448 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_i_i",
+    "Parrot_mod_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 449 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_i_ic",
+    "Parrot_mod_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 450 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_n_n",
+    "Parrot_mod_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 451 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_n_nc",
+    "Parrot_mod_n_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 452 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_p",
+    "Parrot_mod_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 453 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_i",
+    "Parrot_mod_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 454 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_ic",
+    "Parrot_mod_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 455 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_n",
+    "Parrot_mod_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 456 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_nc",
+    "Parrot_mod_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 457 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_i_i_i",
+    "Parrot_mod_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 458 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_i_ic_i",
+    "Parrot_mod_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 459 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_i_i_ic",
+    "Parrot_mod_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 460 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_n_n_n",
+    "Parrot_mod_n_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 461 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_n_nc_n",
+    "Parrot_mod_n_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 462 */
+    /* type PARROT_FUNCTION_OP, */
+    "mod",
+    "mod_n_n_nc",
+    "Parrot_mod_n_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 463 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_p_p",
+    "Parrot_mod_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 464 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_p_i",
+    "Parrot_mod_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 465 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_p_ic",
+    "Parrot_mod_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 466 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_p_n",
+    "Parrot_mod_p_p_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 467 */
+    /* type PARROT_INLINE_OP, */
+    "mod",
+    "mod_p_p_nc",
+    "Parrot_mod_p_p_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 468 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_i_i",
+    "Parrot_mul_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 469 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_i_ic",
+    "Parrot_mul_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 470 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_n_n",
+    "Parrot_mul_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 471 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_n_nc",
+    "Parrot_mul_n_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 472 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_p",
+    "Parrot_mul_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 473 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_i",
+    "Parrot_mul_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 474 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_ic",
+    "Parrot_mul_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 475 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_n",
+    "Parrot_mul_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 476 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_nc",
+    "Parrot_mul_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 477 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_i_i_i",
+    "Parrot_mul_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 478 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_i_ic_i",
+    "Parrot_mul_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 479 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_i_i_ic",
+    "Parrot_mul_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 480 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_n_n_n",
+    "Parrot_mul_n_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 481 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_n_nc_n",
+    "Parrot_mul_n_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 482 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_n_n_nc",
+    "Parrot_mul_n_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 483 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_p_p",
+    "Parrot_mul_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 484 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_p_i",
+    "Parrot_mul_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 485 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_p_ic",
+    "Parrot_mul_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 486 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_p_n",
+    "Parrot_mul_p_p_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 487 */
+    /* type PARROT_INLINE_OP, */
+    "mul",
+    "mul_p_p_nc",
+    "Parrot_mul_p_p_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 488 */
+    /* type PARROT_INLINE_OP, */
+    "neg",
+    "neg_i",
+    "Parrot_neg_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 489 */
+    /* type PARROT_INLINE_OP, */
+    "neg",
+    "neg_n",
+    "Parrot_neg_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 490 */
+    /* type PARROT_INLINE_OP, */
+    "neg",
+    "neg_p",
+    "Parrot_neg_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 491 */
+    /* type PARROT_INLINE_OP, */
+    "neg",
+    "neg_i_i",
+    "Parrot_neg_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 492 */
+    /* type PARROT_INLINE_OP, */
+    "neg",
+    "neg_n_n",
+    "Parrot_neg_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 493 */
+    /* type PARROT_INLINE_OP, */
+    "neg",
+    "neg_p_p",
+    "Parrot_neg_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 494 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_i_i",
+    "Parrot_sub_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 495 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_i_ic",
+    "Parrot_sub_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 496 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_n_n",
+    "Parrot_sub_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 497 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_n_nc",
+    "Parrot_sub_n_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 498 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_p",
+    "Parrot_sub_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 499 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_i",
+    "Parrot_sub_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 500 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_ic",
+    "Parrot_sub_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 501 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_n",
+    "Parrot_sub_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 502 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_nc",
+    "Parrot_sub_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 503 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_i_i_i",
+    "Parrot_sub_i_i_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 504 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_i_ic_i",
+    "Parrot_sub_i_ic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 505 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_i_i_ic",
+    "Parrot_sub_i_i_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 506 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_n_n_n",
+    "Parrot_sub_n_n_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 507 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_n_nc_n",
+    "Parrot_sub_n_nc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 508 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_n_n_nc",
+    "Parrot_sub_n_n_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 509 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_p_p",
+    "Parrot_sub_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 510 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_p_i",
+    "Parrot_sub_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 511 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_p_ic",
+    "Parrot_sub_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 512 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_p_n",
+    "Parrot_sub_p_p_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 513 */
+    /* type PARROT_INLINE_OP, */
+    "sub",
+    "sub_p_p_nc",
+    "Parrot_sub_p_p_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 514 */
+    /* type PARROT_INLINE_OP, */
+    "sqrt",
+    "sqrt_n_n",
+    "Parrot_sqrt_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 515 */
+    /* type PARROT_FUNCTION_OP, */
+    "callmethodcc",
+    "callmethodcc_p_s",
+    "Parrot_callmethodcc_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 516 */
+    /* type PARROT_FUNCTION_OP, */
+    "callmethodcc",
+    "callmethodcc_p_sc",
+    "Parrot_callmethodcc_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 517 */
+    /* type PARROT_FUNCTION_OP, */
+    "callmethodcc",
+    "callmethodcc_p_p",
+    "Parrot_callmethodcc_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 518 */
+    /* type PARROT_FUNCTION_OP, */
+    "callmethod",
+    "callmethod_p_s_p",
+    "Parrot_callmethod_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 519 */
+    /* type PARROT_FUNCTION_OP, */
+    "callmethod",
+    "callmethod_p_sc_p",
+    "Parrot_callmethod_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 520 */
+    /* type PARROT_FUNCTION_OP, */
+    "callmethod",
+    "callmethod_p_p_p",
+    "Parrot_callmethod_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 521 */
+    /* type PARROT_FUNCTION_OP, */
+    "tailcallmethod",
+    "tailcallmethod_p_s",
+    "Parrot_tailcallmethod_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 522 */
+    /* type PARROT_FUNCTION_OP, */
+    "tailcallmethod",
+    "tailcallmethod_p_sc",
+    "Parrot_tailcallmethod_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 523 */
+    /* type PARROT_FUNCTION_OP, */
+    "tailcallmethod",
+    "tailcallmethod_p_p",
+    "Parrot_tailcallmethod_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 524 */
+    /* type PARROT_INLINE_OP, */
+    "addmethod",
+    "addmethod_p_s_p",
+    "Parrot_addmethod_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 525 */
+    /* type PARROT_INLINE_OP, */
+    "addmethod",
+    "addmethod_p_sc_p",
+    "Parrot_addmethod_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 526 */
+    /* type PARROT_INLINE_OP, */
+    "can",
+    "can_i_p_s",
+    "Parrot_can_i_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 527 */
+    /* type PARROT_INLINE_OP, */
+    "can",
+    "can_i_p_sc",
+    "Parrot_can_i_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 528 */
+    /* type PARROT_INLINE_OP, */
+    "does",
+    "does_i_p_s",
+    "Parrot_does_i_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 529 */
+    /* type PARROT_INLINE_OP, */
+    "does",
+    "does_i_p_sc",
+    "Parrot_does_i_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 530 */
+    /* type PARROT_INLINE_OP, */
+    "does",
+    "does_i_p_p",
+    "Parrot_does_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 531 */
+    /* type PARROT_INLINE_OP, */
+    "does",
+    "does_i_p_pc",
+    "Parrot_does_i_p_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 532 */
+    /* type PARROT_INLINE_OP, */
+    "isa",
+    "isa_i_p_s",
+    "Parrot_isa_i_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 533 */
+    /* type PARROT_INLINE_OP, */
+    "isa",
+    "isa_i_p_sc",
+    "Parrot_isa_i_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 534 */
+    /* type PARROT_INLINE_OP, */
+    "isa",
+    "isa_i_p_p",
+    "Parrot_isa_i_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 535 */
+    /* type PARROT_INLINE_OP, */
+    "isa",
+    "isa_i_p_pc",
+    "Parrot_isa_i_p_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 536 */
+    /* type PARROT_INLINE_OP, */
+    "newclass",
+    "newclass_p_s",
+    "Parrot_newclass_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 537 */
+    /* type PARROT_INLINE_OP, */
+    "newclass",
+    "newclass_p_sc",
+    "Parrot_newclass_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 538 */
+    /* type PARROT_INLINE_OP, */
+    "newclass",
+    "newclass_p_p",
+    "Parrot_newclass_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 539 */
+    /* type PARROT_INLINE_OP, */
+    "newclass",
+    "newclass_p_pc",
+    "Parrot_newclass_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 540 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_p",
+    "Parrot_subclass_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 541 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_pc",
+    "Parrot_subclass_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 542 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_p_s",
+    "Parrot_subclass_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 543 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_pc_s",
+    "Parrot_subclass_p_pc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 544 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_p_sc",
+    "Parrot_subclass_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 545 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_pc_sc",
+    "Parrot_subclass_p_pc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 546 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_p_p",
+    "Parrot_subclass_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 547 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_pc_p",
+    "Parrot_subclass_p_pc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 548 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_p_pc",
+    "Parrot_subclass_p_p_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 549 */
+    /* type PARROT_INLINE_OP, */
+    "subclass",
+    "subclass_p_pc_pc",
+    "Parrot_subclass_p_pc_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 550 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_s",
+    "Parrot_subclass_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 551 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_sc",
+    "Parrot_subclass_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 552 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_s_s",
+    "Parrot_subclass_p_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 553 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_sc_s",
+    "Parrot_subclass_p_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 554 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_s_sc",
+    "Parrot_subclass_p_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 555 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_sc_sc",
+    "Parrot_subclass_p_sc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 556 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_s_p",
+    "Parrot_subclass_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 557 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_sc_p",
+    "Parrot_subclass_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 558 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_s_pc",
+    "Parrot_subclass_p_s_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 559 */
+    /* type PARROT_FUNCTION_OP, */
+    "subclass",
+    "subclass_p_sc_pc",
+    "Parrot_subclass_p_sc_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 560 */
+    /* type PARROT_INLINE_OP, */
+    "get_class",
+    "get_class_p_s",
+    "Parrot_get_class_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 561 */
+    /* type PARROT_INLINE_OP, */
+    "get_class",
+    "get_class_p_sc",
+    "Parrot_get_class_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 562 */
+    /* type PARROT_INLINE_OP, */
+    "get_class",
+    "get_class_p_p",
+    "Parrot_get_class_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 563 */
+    /* type PARROT_INLINE_OP, */
+    "get_class",
+    "get_class_p_pc",
+    "Parrot_get_class_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 564 */
+    /* type PARROT_INLINE_OP, */
+    "class",
+    "class_p_p",
+    "Parrot_class_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 565 */
+    /* type PARROT_INLINE_OP, */
+    "addparent",
+    "addparent_p_p",
+    "Parrot_addparent_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 566 */
+    /* type PARROT_INLINE_OP, */
+    "removeparent",
+    "removeparent_p_p",
+    "Parrot_removeparent_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 567 */
+    /* type PARROT_INLINE_OP, */
+    "addrole",
+    "addrole_p_p",
+    "Parrot_addrole_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 568 */
+    /* type PARROT_INLINE_OP, */
+    "addattribute",
+    "addattribute_p_s",
+    "Parrot_addattribute_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 569 */
+    /* type PARROT_INLINE_OP, */
+    "addattribute",
+    "addattribute_p_sc",
+    "Parrot_addattribute_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 570 */
+    /* type PARROT_FUNCTION_OP, */
+    "removeattribute",
+    "removeattribute_p_s",
+    "Parrot_removeattribute_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 571 */
+    /* type PARROT_FUNCTION_OP, */
+    "removeattribute",
+    "removeattribute_p_sc",
+    "Parrot_removeattribute_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 572 */
+    /* type PARROT_INLINE_OP, */
+    "getattribute",
+    "getattribute_p_p_s",
+    "Parrot_getattribute_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 573 */
+    /* type PARROT_INLINE_OP, */
+    "getattribute",
+    "getattribute_p_p_sc",
+    "Parrot_getattribute_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 574 */
+    /* type PARROT_INLINE_OP, */
+    "getattribute",
+    "getattribute_p_p_p_s",
+    "Parrot_getattribute_p_p_p_s",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 575 */
+    /* type PARROT_INLINE_OP, */
+    "getattribute",
+    "getattribute_p_p_pc_s",
+    "Parrot_getattribute_p_p_pc_s",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 576 */
+    /* type PARROT_INLINE_OP, */
+    "getattribute",
+    "getattribute_p_p_p_sc",
+    "Parrot_getattribute_p_p_p_sc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 577 */
+    /* type PARROT_INLINE_OP, */
+    "getattribute",
+    "getattribute_p_p_pc_sc",
+    "Parrot_getattribute_p_p_pc_sc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 578 */
+    /* type PARROT_INLINE_OP, */
+    "setattribute",
+    "setattribute_p_s_p",
+    "Parrot_setattribute_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 579 */
+    /* type PARROT_INLINE_OP, */
+    "setattribute",
+    "setattribute_p_sc_p",
+    "Parrot_setattribute_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 580 */
+    /* type PARROT_INLINE_OP, */
+    "setattribute",
+    "setattribute_p_p_s_p",
+    "Parrot_setattribute_p_p_s_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 581 */
+    /* type PARROT_INLINE_OP, */
+    "setattribute",
+    "setattribute_p_pc_s_p",
+    "Parrot_setattribute_p_pc_s_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 582 */
+    /* type PARROT_INLINE_OP, */
+    "setattribute",
+    "setattribute_p_p_sc_p",
+    "Parrot_setattribute_p_p_sc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 583 */
+    /* type PARROT_INLINE_OP, */
+    "setattribute",
+    "setattribute_p_pc_sc_p",
+    "Parrot_setattribute_p_pc_sc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 584 */
+    /* type PARROT_INLINE_OP, */
+    "inspect",
+    "inspect_p_p",
+    "Parrot_inspect_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 585 */
+    /* type PARROT_INLINE_OP, */
+    "inspect",
+    "inspect_p_pc",
+    "Parrot_inspect_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 586 */
+    /* type PARROT_INLINE_OP, */
+    "inspect",
+    "inspect_p_p_s",
+    "Parrot_inspect_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 587 */
+    /* type PARROT_INLINE_OP, */
+    "inspect",
+    "inspect_p_pc_s",
+    "Parrot_inspect_p_pc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 588 */
+    /* type PARROT_INLINE_OP, */
+    "inspect",
+    "inspect_p_p_sc",
+    "Parrot_inspect_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 589 */
+    /* type PARROT_INLINE_OP, */
+    "inspect",
+    "inspect_p_pc_sc",
+    "Parrot_inspect_p_pc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 590 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_s",
+    "Parrot_new_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 591 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_sc",
+    "Parrot_new_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 592 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_s_p",
+    "Parrot_new_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 593 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_sc_p",
+    "Parrot_new_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 594 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_s_pc",
+    "Parrot_new_p_s_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 595 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_sc_pc",
+    "Parrot_new_p_sc_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 596 */
+    /* type PARROT_INLINE_OP, */
+    "new",
+    "new_p_p",
+    "Parrot_new_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 597 */
+    /* type PARROT_INLINE_OP, */
+    "new",
+    "new_p_pc",
+    "Parrot_new_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 598 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_p_p",
+    "Parrot_new_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 599 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_pc_p",
+    "Parrot_new_p_pc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 600 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_p_pc",
+    "Parrot_new_p_p_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 601 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_pc_pc",
+    "Parrot_new_p_pc_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 602 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_p",
+    "Parrot_root_new_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 603 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_pc",
+    "Parrot_root_new_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 604 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_p_p",
+    "Parrot_root_new_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 605 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_pc_p",
+    "Parrot_root_new_p_pc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 606 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_p_pc",
+    "Parrot_root_new_p_p_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 607 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_pc_pc",
+    "Parrot_root_new_p_pc_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 608 */
+    /* type PARROT_INLINE_OP, */
+    "typeof",
+    "typeof_s_p",
+    "Parrot_typeof_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 609 */
+    /* type PARROT_INLINE_OP, */
+    "typeof",
+    "typeof_p_p",
+    "Parrot_typeof_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 610 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_repr",
+    "get_repr_s_p",
+    "Parrot_get_repr_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 611 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_method",
+    "find_method_p_p_s",
+    "Parrot_find_method_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 612 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_method",
+    "find_method_p_p_sc",
+    "Parrot_find_method_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 613 */
+    /* type PARROT_INLINE_OP, */
+    "defined",
+    "defined_i_p",
+    "Parrot_defined_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 614 */
+    /* type PARROT_INLINE_OP, */
+    "defined",
+    "defined_i_p_ki",
+    "Parrot_defined_i_p_ki",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KI },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 615 */
+    /* type PARROT_INLINE_OP, */
+    "defined",
+    "defined_i_p_kic",
+    "Parrot_defined_i_p_kic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KIC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 616 */
+    /* type PARROT_INLINE_OP, */
+    "defined",
+    "defined_i_p_k",
+    "Parrot_defined_i_p_k",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_K },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 617 */
+    /* type PARROT_INLINE_OP, */
+    "defined",
+    "defined_i_p_kc",
+    "Parrot_defined_i_p_kc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 618 */
+    /* type PARROT_INLINE_OP, */
+    "exists",
+    "exists_i_p_ki",
+    "Parrot_exists_i_p_ki",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KI },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 619 */
+    /* type PARROT_INLINE_OP, */
+    "exists",
+    "exists_i_p_kic",
+    "Parrot_exists_i_p_kic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KIC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 620 */
+    /* type PARROT_INLINE_OP, */
+    "exists",
+    "exists_i_p_k",
+    "Parrot_exists_i_p_k",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_K },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 621 */
+    /* type PARROT_INLINE_OP, */
+    "exists",
+    "exists_i_p_kc",
+    "Parrot_exists_i_p_kc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 622 */
+    /* type PARROT_INLINE_OP, */
+    "delete",
+    "delete_p_k",
+    "Parrot_delete_p_k",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_K },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 623 */
+    /* type PARROT_INLINE_OP, */
+    "delete",
+    "delete_p_kc",
+    "Parrot_delete_p_kc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_KC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 624 */
+    /* type PARROT_INLINE_OP, */
+    "delete",
+    "delete_p_ki",
+    "Parrot_delete_p_ki",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_KI },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 625 */
+    /* type PARROT_INLINE_OP, */
+    "delete",
+    "delete_p_kic",
+    "Parrot_delete_p_kic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_KIC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 626 */
+    /* type PARROT_INLINE_OP, */
+    "elements",
+    "elements_i_p",
+    "Parrot_elements_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 627 */
+    /* type PARROT_INLINE_OP, */
+    "push",
+    "push_p_i",
+    "Parrot_push_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 628 */
+    /* type PARROT_INLINE_OP, */
+    "push",
+    "push_p_ic",
+    "Parrot_push_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 629 */
+    /* type PARROT_INLINE_OP, */
+    "push",
+    "push_p_n",
+    "Parrot_push_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 630 */
+    /* type PARROT_INLINE_OP, */
+    "push",
+    "push_p_nc",
+    "Parrot_push_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 631 */
+    /* type PARROT_INLINE_OP, */
+    "push",
+    "push_p_s",
+    "Parrot_push_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 632 */
+    /* type PARROT_INLINE_OP, */
+    "push",
+    "push_p_sc",
+    "Parrot_push_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 633 */
+    /* type PARROT_INLINE_OP, */
+    "push",
+    "push_p_p",
+    "Parrot_push_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 634 */
+    /* type PARROT_INLINE_OP, */
+    "pop",
+    "pop_i_p",
+    "Parrot_pop_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 635 */
+    /* type PARROT_INLINE_OP, */
+    "pop",
+    "pop_n_p",
+    "Parrot_pop_n_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 636 */
+    /* type PARROT_INLINE_OP, */
+    "pop",
+    "pop_s_p",
+    "Parrot_pop_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 637 */
+    /* type PARROT_INLINE_OP, */
+    "pop",
+    "pop_p_p",
+    "Parrot_pop_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 638 */
+    /* type PARROT_INLINE_OP, */
+    "unshift",
+    "unshift_p_i",
+    "Parrot_unshift_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 639 */
+    /* type PARROT_INLINE_OP, */
+    "unshift",
+    "unshift_p_ic",
+    "Parrot_unshift_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 640 */
+    /* type PARROT_INLINE_OP, */
+    "unshift",
+    "unshift_p_n",
+    "Parrot_unshift_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 641 */
+    /* type PARROT_INLINE_OP, */
+    "unshift",
+    "unshift_p_nc",
+    "Parrot_unshift_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 642 */
+    /* type PARROT_INLINE_OP, */
+    "unshift",
+    "unshift_p_s",
+    "Parrot_unshift_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 643 */
+    /* type PARROT_INLINE_OP, */
+    "unshift",
+    "unshift_p_sc",
+    "Parrot_unshift_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 644 */
+    /* type PARROT_INLINE_OP, */
+    "unshift",
+    "unshift_p_p",
+    "Parrot_unshift_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 645 */
+    /* type PARROT_INLINE_OP, */
+    "shift",
+    "shift_i_p",
+    "Parrot_shift_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 646 */
+    /* type PARROT_INLINE_OP, */
+    "shift",
+    "shift_n_p",
+    "Parrot_shift_n_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 647 */
+    /* type PARROT_INLINE_OP, */
+    "shift",
+    "shift_s_p",
+    "Parrot_shift_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 648 */
+    /* type PARROT_INLINE_OP, */
+    "shift",
+    "shift_p_p",
+    "Parrot_shift_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 649 */
+    /* type PARROT_INLINE_OP, */
+    "splice",
+    "splice_p_p_i_i",
+    "Parrot_splice_p_p_i_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 650 */
+    /* type PARROT_INLINE_OP, */
+    "splice",
+    "splice_p_p_ic_i",
+    "Parrot_splice_p_p_ic_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 651 */
+    /* type PARROT_INLINE_OP, */
+    "splice",
+    "splice_p_p_i_ic",
+    "Parrot_splice_p_p_i_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 652 */
+    /* type PARROT_INLINE_OP, */
+    "splice",
+    "splice_p_p_ic_ic",
+    "Parrot_splice_p_p_ic_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 653 */
+    /* type PARROT_FUNCTION_OP, */
+    "setprop",
+    "setprop_p_s_p",
+    "Parrot_setprop_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 654 */
+    /* type PARROT_FUNCTION_OP, */
+    "setprop",
+    "setprop_p_sc_p",
+    "Parrot_setprop_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 655 */
+    /* type PARROT_FUNCTION_OP, */
+    "getprop",
+    "getprop_p_s_p",
+    "Parrot_getprop_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 656 */
+    /* type PARROT_FUNCTION_OP, */
+    "getprop",
+    "getprop_p_sc_p",
+    "Parrot_getprop_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 657 */
+    /* type PARROT_FUNCTION_OP, */
+    "delprop",
+    "delprop_p_s",
+    "Parrot_delprop_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 658 */
+    /* type PARROT_FUNCTION_OP, */
+    "delprop",
+    "delprop_p_sc",
+    "Parrot_delprop_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 659 */
+    /* type PARROT_FUNCTION_OP, */
+    "prophash",
+    "prophash_p_p",
+    "Parrot_prophash_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 660 */
+    /* type PARROT_FUNCTION_OP, */
+    "freeze",
+    "freeze_s_p",
+    "Parrot_freeze_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 661 */
+    /* type PARROT_FUNCTION_OP, */
+    "thaw",
+    "thaw_p_s",
+    "Parrot_thaw_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 662 */
+    /* type PARROT_FUNCTION_OP, */
+    "thaw",
+    "thaw_p_sc",
+    "Parrot_thaw_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 663 */
+    /* type PARROT_INLINE_OP, */
+    "add_multi",
+    "add_multi_s_s_p",
+    "Parrot_add_multi_s_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 664 */
+    /* type PARROT_INLINE_OP, */
+    "add_multi",
+    "add_multi_sc_s_p",
+    "Parrot_add_multi_sc_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 665 */
+    /* type PARROT_INLINE_OP, */
+    "add_multi",
+    "add_multi_s_sc_p",
+    "Parrot_add_multi_s_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 666 */
+    /* type PARROT_INLINE_OP, */
+    "add_multi",
+    "add_multi_sc_sc_p",
+    "Parrot_add_multi_sc_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 667 */
+    /* type PARROT_INLINE_OP, */
+    "find_multi",
+    "find_multi_p_s_s",
+    "Parrot_find_multi_p_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 668 */
+    /* type PARROT_INLINE_OP, */
+    "find_multi",
+    "find_multi_p_sc_s",
+    "Parrot_find_multi_p_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 669 */
+    /* type PARROT_INLINE_OP, */
+    "find_multi",
+    "find_multi_p_s_sc",
+    "Parrot_find_multi_p_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 670 */
+    /* type PARROT_INLINE_OP, */
+    "find_multi",
+    "find_multi_p_sc_sc",
+    "Parrot_find_multi_p_sc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 671 */
+    /* type PARROT_FUNCTION_OP, */
+    "register",
+    "register_p",
+    "Parrot_register_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 672 */
+    /* type PARROT_FUNCTION_OP, */
+    "unregister",
+    "unregister_p",
+    "Parrot_unregister_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 673 */
+    /* type PARROT_FUNCTION_OP, */
+    "box",
+    "box_p_i",
+    "Parrot_box_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 674 */
+    /* type PARROT_FUNCTION_OP, */
+    "box",
+    "box_p_ic",
+    "Parrot_box_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 675 */
+    /* type PARROT_FUNCTION_OP, */
+    "box",
+    "box_p_n",
+    "Parrot_box_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 676 */
+    /* type PARROT_FUNCTION_OP, */
+    "box",
+    "box_p_nc",
+    "Parrot_box_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 677 */
+    /* type PARROT_FUNCTION_OP, */
+    "box",
+    "box_p_s",
+    "Parrot_box_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 678 */
+    /* type PARROT_FUNCTION_OP, */
+    "box",
+    "box_p_sc",
+    "Parrot_box_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 679 */
+    /* type PARROT_INLINE_OP, */
+    "iter",
+    "iter_p_p",
+    "Parrot_iter_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 680 */
+    /* type PARROT_INLINE_OP, */
+    "morph",
+    "morph_p_p",
+    "Parrot_morph_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 681 */
+    /* type PARROT_INLINE_OP, */
+    "morph",
+    "morph_p_pc",
+    "Parrot_morph_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 682 */
+    /* type PARROT_INLINE_OP, */
+    "clone",
+    "clone_s_s",
+    "Parrot_clone_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 683 */
+    /* type PARROT_INLINE_OP, */
+    "clone",
+    "clone_s_sc",
+    "Parrot_clone_s_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 684 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_i",
+    "Parrot_set_i_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 685 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_ic",
+    "Parrot_set_i_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 686 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_n",
+    "Parrot_set_i_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 687 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_nc",
+    "Parrot_set_i_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 688 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_s",
+    "Parrot_set_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 689 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_sc",
+    "Parrot_set_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 690 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_n",
+    "Parrot_set_n_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 691 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_nc",
+    "Parrot_set_n_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 692 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_i",
+    "Parrot_set_n_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 693 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_ic",
+    "Parrot_set_n_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 694 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_s",
+    "Parrot_set_n_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 695 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_sc",
+    "Parrot_set_n_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 696 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_p",
+    "Parrot_set_n_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_N, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 697 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_p",
+    "Parrot_set_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 698 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_s",
+    "Parrot_set_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 699 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_sc",
+    "Parrot_set_s_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 700 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_i",
+    "Parrot_set_s_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 701 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_ic",
+    "Parrot_set_s_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 702 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_n",
+    "Parrot_set_s_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 703 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_nc",
+    "Parrot_set_s_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_NC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 704 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_pc",
+    "Parrot_set_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 705 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_p",
+    "Parrot_set_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 706 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_i",
+    "Parrot_set_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 707 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_ic",
+    "Parrot_set_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 708 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_n",
+    "Parrot_set_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 709 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_nc",
+    "Parrot_set_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 710 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_s",
+    "Parrot_set_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 711 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_sc",
+    "Parrot_set_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 712 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_p",
+    "Parrot_set_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 713 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_p_p",
+    "Parrot_assign_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 714 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_p_i",
+    "Parrot_assign_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 715 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_p_ic",
+    "Parrot_assign_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 716 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_p_n",
+    "Parrot_assign_p_n",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 717 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_p_nc",
+    "Parrot_assign_p_nc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 718 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_p_s",
+    "Parrot_assign_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 719 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_p_sc",
+    "Parrot_assign_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 720 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_s_s",
+    "Parrot_assign_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 721 */
+    /* type PARROT_INLINE_OP, */
+    "assign",
+    "assign_s_sc",
+    "Parrot_assign_s_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 722 */
+    /* type PARROT_INLINE_OP, */
+    "setref",
+    "setref_p_p",
+    "Parrot_setref_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 723 */
+    /* type PARROT_INLINE_OP, */
+    "deref",
+    "deref_p_p",
+    "Parrot_deref_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 724 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_ki_i",
+    "Parrot_set_p_ki_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 725 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kic_i",
+    "Parrot_set_p_kic_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 726 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_ki_ic",
+    "Parrot_set_p_ki_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 727 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kic_ic",
+    "Parrot_set_p_kic_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 728 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_ki_n",
+    "Parrot_set_p_ki_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 729 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kic_n",
+    "Parrot_set_p_kic_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 730 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_ki_nc",
+    "Parrot_set_p_ki_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 731 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kic_nc",
+    "Parrot_set_p_kic_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 732 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_ki_s",
+    "Parrot_set_p_ki_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 733 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kic_s",
+    "Parrot_set_p_kic_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 734 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_ki_sc",
+    "Parrot_set_p_ki_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 735 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kic_sc",
+    "Parrot_set_p_kic_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 736 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_ki_p",
+    "Parrot_set_p_ki_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 737 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kic_p",
+    "Parrot_set_p_kic_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 738 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_p_ki",
+    "Parrot_set_i_p_ki",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KI },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 739 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_p_kic",
+    "Parrot_set_i_p_kic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KIC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 740 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_p_ki",
+    "Parrot_set_n_p_ki",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_P, PARROT_ARG_KI },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 741 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_p_kic",
+    "Parrot_set_n_p_kic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_P, PARROT_ARG_KIC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 742 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_p_ki",
+    "Parrot_set_s_p_ki",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_KI },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 743 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_p_kic",
+    "Parrot_set_s_p_kic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_KIC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 744 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_p_ki",
+    "Parrot_set_p_p_ki",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_KI },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 745 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_p_kic",
+    "Parrot_set_p_p_kic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_KIC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 746 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_k_i",
+    "Parrot_set_p_k_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 747 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kc_i",
+    "Parrot_set_p_kc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 748 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_k_ic",
+    "Parrot_set_p_k_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 749 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kc_ic",
+    "Parrot_set_p_kc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 750 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_k_n",
+    "Parrot_set_p_k_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 751 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kc_n",
+    "Parrot_set_p_kc_n",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_N },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 752 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_k_nc",
+    "Parrot_set_p_k_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 753 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kc_nc",
+    "Parrot_set_p_kc_nc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 754 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_k_s",
+    "Parrot_set_p_k_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 755 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kc_s",
+    "Parrot_set_p_kc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 756 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_k_sc",
+    "Parrot_set_p_k_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 757 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kc_sc",
+    "Parrot_set_p_kc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 758 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_k_p",
+    "Parrot_set_p_k_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 759 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_kc_p",
+    "Parrot_set_p_kc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 760 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_p_k",
+    "Parrot_set_i_p_k",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_K },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 761 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_i_p_kc",
+    "Parrot_set_i_p_kc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 762 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_p_k",
+    "Parrot_set_n_p_k",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_P, PARROT_ARG_K },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 763 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_n_p_kc",
+    "Parrot_set_n_p_kc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_N, PARROT_ARG_P, PARROT_ARG_KC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 764 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_p_k",
+    "Parrot_set_s_p_k",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_K },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 765 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_s_p_kc",
+    "Parrot_set_s_p_kc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_KC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 766 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_p_k",
+    "Parrot_set_p_p_k",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_K },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 767 */
+    /* type PARROT_INLINE_OP, */
+    "set",
+    "set_p_p_kc",
+    "Parrot_set_p_p_kc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_KC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 768 */
+    /* type PARROT_INLINE_OP, */
+    "clone",
+    "clone_p_p",
+    "Parrot_clone_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 769 */
+    /* type PARROT_INLINE_OP, */
+    "clone",
+    "clone_p_p_p",
+    "Parrot_clone_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 770 */
+    /* type PARROT_INLINE_OP, */
+    "clone",
+    "clone_p_p_pc",
+    "Parrot_clone_p_p_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 771 */
+    /* type PARROT_INLINE_OP, */
+    "copy",
+    "copy_p_p",
+    "Parrot_copy_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 772 */
+    /* type PARROT_INLINE_OP, */
+    "null",
+    "null_s",
+    "Parrot_null_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 773 */
+    /* type PARROT_INLINE_OP, */
+    "null",
+    "null_i",
+    "Parrot_null_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 774 */
+    /* type PARROT_INLINE_OP, */
+    "null",
+    "null_p",
+    "Parrot_null_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 775 */
+    /* type PARROT_INLINE_OP, */
+    "null",
+    "null_n",
+    "Parrot_null_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 776 */
+    /* type PARROT_INLINE_OP, */
+    "ord",
+    "ord_i_s",
+    "Parrot_ord_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 777 */
+    /* type PARROT_INLINE_OP, */
+    "ord",
+    "ord_i_sc",
+    "Parrot_ord_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 778 */
+    /* type PARROT_INLINE_OP, */
+    "ord",
+    "ord_i_s_i",
+    "Parrot_ord_i_s_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 779 */
+    /* type PARROT_INLINE_OP, */
+    "ord",
+    "ord_i_sc_i",
+    "Parrot_ord_i_sc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 780 */
+    /* type PARROT_INLINE_OP, */
+    "ord",
+    "ord_i_s_ic",
+    "Parrot_ord_i_s_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 781 */
+    /* type PARROT_INLINE_OP, */
+    "ord",
+    "ord_i_sc_ic",
+    "Parrot_ord_i_sc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 782 */
+    /* type PARROT_INLINE_OP, */
+    "chr",
+    "chr_s_i",
+    "Parrot_chr_s_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 783 */
+    /* type PARROT_INLINE_OP, */
+    "chr",
+    "chr_s_ic",
+    "Parrot_chr_s_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 784 */
+    /* type PARROT_INLINE_OP, */
+    "chopn",
+    "chopn_s_s_i",
+    "Parrot_chopn_s_s_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 785 */
+    /* type PARROT_INLINE_OP, */
+    "chopn",
+    "chopn_s_sc_i",
+    "Parrot_chopn_s_sc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 786 */
+    /* type PARROT_INLINE_OP, */
+    "chopn",
+    "chopn_s_s_ic",
+    "Parrot_chopn_s_s_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 787 */
+    /* type PARROT_INLINE_OP, */
+    "chopn",
+    "chopn_s_sc_ic",
+    "Parrot_chopn_s_sc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 788 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_s_s",
+    "Parrot_concat_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 789 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_s_sc",
+    "Parrot_concat_s_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 790 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_p_p",
+    "Parrot_concat_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 791 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_p_s",
+    "Parrot_concat_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 792 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_p_sc",
+    "Parrot_concat_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 793 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_s_s_s",
+    "Parrot_concat_s_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 794 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_s_sc_s",
+    "Parrot_concat_s_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 795 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_s_s_sc",
+    "Parrot_concat_s_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 796 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_p_p_s",
+    "Parrot_concat_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 797 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_p_p_sc",
+    "Parrot_concat_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 798 */
+    /* type PARROT_INLINE_OP, */
+    "concat",
+    "concat_p_p_p",
+    "Parrot_concat_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 799 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_s_s_i",
+    "Parrot_repeat_s_s_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 800 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_s_sc_i",
+    "Parrot_repeat_s_sc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 801 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_s_s_ic",
+    "Parrot_repeat_s_s_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 802 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_s_sc_ic",
+    "Parrot_repeat_s_sc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 803 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_p_p_i",
+    "Parrot_repeat_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 804 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_p_p_ic",
+    "Parrot_repeat_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 805 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_p_p_p",
+    "Parrot_repeat_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 806 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_p_i",
+    "Parrot_repeat_p_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 807 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_p_ic",
+    "Parrot_repeat_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 808 */
+    /* type PARROT_INLINE_OP, */
+    "repeat",
+    "repeat_p_p",
+    "Parrot_repeat_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 809 */
+    /* type PARROT_INLINE_OP, */
+    "length",
+    "length_i_s",
+    "Parrot_length_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 810 */
+    /* type PARROT_INLINE_OP, */
+    "length",
+    "length_i_sc",
+    "Parrot_length_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 811 */
+    /* type PARROT_INLINE_OP, */
+    "bytelength",
+    "bytelength_i_s",
+    "Parrot_bytelength_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 812 */
+    /* type PARROT_INLINE_OP, */
+    "bytelength",
+    "bytelength_i_sc",
+    "Parrot_bytelength_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 813 */
+    /* type PARROT_FUNCTION_OP, */
+    "pin",
+    "pin_s",
+    "Parrot_pin_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 814 */
+    /* type PARROT_FUNCTION_OP, */
+    "unpin",
+    "unpin_s",
+    "Parrot_unpin_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_INOUT },
+    { 0 }
+  },
+  { /* 815 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_s_i",
+    "Parrot_substr_s_s_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 816 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_sc_i",
+    "Parrot_substr_s_sc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 817 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_s_ic",
+    "Parrot_substr_s_s_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 818 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_sc_ic",
+    "Parrot_substr_s_sc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 819 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_s_i_i",
+    "Parrot_substr_s_s_i_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 820 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_sc_i_i",
+    "Parrot_substr_s_sc_i_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 821 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_s_ic_i",
+    "Parrot_substr_s_s_ic_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 822 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_sc_ic_i",
+    "Parrot_substr_s_sc_ic_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 823 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_s_i_ic",
+    "Parrot_substr_s_s_i_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 824 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_sc_i_ic",
+    "Parrot_substr_s_sc_i_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 825 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_s_ic_ic",
+    "Parrot_substr_s_s_ic_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 826 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_sc_ic_ic",
+    "Parrot_substr_s_sc_ic_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 827 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_p_i_i",
+    "Parrot_substr_s_p_i_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 828 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_p_ic_i",
+    "Parrot_substr_s_p_ic_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 829 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_p_i_ic",
+    "Parrot_substr_s_p_i_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 830 */
+    /* type PARROT_INLINE_OP, */
+    "substr",
+    "substr_s_p_ic_ic",
+    "Parrot_substr_s_p_ic_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 831 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_s_i_i_s",
+    "Parrot_replace_s_s_i_i_s",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 832 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_sc_i_i_s",
+    "Parrot_replace_s_sc_i_i_s",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 833 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_s_ic_i_s",
+    "Parrot_replace_s_s_ic_i_s",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 834 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_sc_ic_i_s",
+    "Parrot_replace_s_sc_ic_i_s",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 835 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_s_i_ic_s",
+    "Parrot_replace_s_s_i_ic_s",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 836 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_sc_i_ic_s",
+    "Parrot_replace_s_sc_i_ic_s",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 837 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_s_ic_ic_s",
+    "Parrot_replace_s_s_ic_ic_s",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 838 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_sc_ic_ic_s",
+    "Parrot_replace_s_sc_ic_ic_s",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 839 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_s_i_i_sc",
+    "Parrot_replace_s_s_i_i_sc",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 840 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_sc_i_i_sc",
+    "Parrot_replace_s_sc_i_i_sc",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 841 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_s_ic_i_sc",
+    "Parrot_replace_s_s_ic_i_sc",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 842 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_sc_ic_i_sc",
+    "Parrot_replace_s_sc_ic_i_sc",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 843 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_s_i_ic_sc",
+    "Parrot_replace_s_s_i_ic_sc",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 844 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_sc_i_ic_sc",
+    "Parrot_replace_s_sc_i_ic_sc",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 845 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_s_ic_ic_sc",
+    "Parrot_replace_s_s_ic_ic_sc",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 846 */
+    /* type PARROT_INLINE_OP, */
+    "replace",
+    "replace_s_sc_ic_ic_sc",
+    "Parrot_replace_s_sc_ic_ic_sc",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 847 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_s_s",
+    "Parrot_index_i_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 848 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_sc_s",
+    "Parrot_index_i_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 849 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_s_sc",
+    "Parrot_index_i_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 850 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_sc_sc",
+    "Parrot_index_i_sc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 851 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_s_s_i",
+    "Parrot_index_i_s_s_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 852 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_sc_s_i",
+    "Parrot_index_i_sc_s_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 853 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_s_sc_i",
+    "Parrot_index_i_s_sc_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 854 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_sc_sc_i",
+    "Parrot_index_i_sc_sc_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 855 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_s_s_ic",
+    "Parrot_index_i_s_s_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 856 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_sc_s_ic",
+    "Parrot_index_i_sc_s_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 857 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_s_sc_ic",
+    "Parrot_index_i_s_sc_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 858 */
+    /* type PARROT_INLINE_OP, */
+    "index",
+    "index_i_sc_sc_ic",
+    "Parrot_index_i_sc_sc_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 859 */
+    /* type PARROT_INLINE_OP, */
+    "sprintf",
+    "sprintf_s_s_p",
+    "Parrot_sprintf_s_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 860 */
+    /* type PARROT_INLINE_OP, */
+    "sprintf",
+    "sprintf_s_sc_p",
+    "Parrot_sprintf_s_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 861 */
+    /* type PARROT_INLINE_OP, */
+    "sprintf",
+    "sprintf_p_p_p",
+    "Parrot_sprintf_p_p_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 862 */
+    /* type PARROT_INLINE_OP, */
+    "new",
+    "new_s",
+    "Parrot_new_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 863 */
+    /* type PARROT_INLINE_OP, */
+    "new",
+    "new_s_i",
+    "Parrot_new_s_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 864 */
+    /* type PARROT_INLINE_OP, */
+    "new",
+    "new_s_ic",
+    "Parrot_new_s_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 865 */
+    /* type PARROT_INLINE_OP, */
+    "stringinfo",
+    "stringinfo_i_s_i",
+    "Parrot_stringinfo_i_s_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 866 */
+    /* type PARROT_INLINE_OP, */
+    "stringinfo",
+    "stringinfo_i_sc_i",
+    "Parrot_stringinfo_i_sc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 867 */
+    /* type PARROT_INLINE_OP, */
+    "stringinfo",
+    "stringinfo_i_s_ic",
+    "Parrot_stringinfo_i_s_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 868 */
+    /* type PARROT_INLINE_OP, */
+    "stringinfo",
+    "stringinfo_i_sc_ic",
+    "Parrot_stringinfo_i_sc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 869 */
+    /* type PARROT_INLINE_OP, */
+    "upcase",
+    "upcase_s_s",
+    "Parrot_upcase_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 870 */
+    /* type PARROT_INLINE_OP, */
+    "upcase",
+    "upcase_s_sc",
+    "Parrot_upcase_s_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 871 */
+    /* type PARROT_INLINE_OP, */
+    "downcase",
+    "downcase_s_s",
+    "Parrot_downcase_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 872 */
+    /* type PARROT_INLINE_OP, */
+    "downcase",
+    "downcase_s_sc",
+    "Parrot_downcase_s_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 873 */
+    /* type PARROT_INLINE_OP, */
+    "titlecase",
+    "titlecase_s_s",
+    "Parrot_titlecase_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 874 */
+    /* type PARROT_INLINE_OP, */
+    "titlecase",
+    "titlecase_s_sc",
+    "Parrot_titlecase_s_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 875 */
+    /* type PARROT_FUNCTION_OP, */
+    "join",
+    "join_s_s_p",
+    "Parrot_join_s_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 876 */
+    /* type PARROT_FUNCTION_OP, */
+    "join",
+    "join_s_sc_p",
+    "Parrot_join_s_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 877 */
+    /* type PARROT_FUNCTION_OP, */
+    "split",
+    "split_p_s_s",
+    "Parrot_split_p_s_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 878 */
+    /* type PARROT_FUNCTION_OP, */
+    "split",
+    "split_p_sc_s",
+    "Parrot_split_p_sc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 879 */
+    /* type PARROT_FUNCTION_OP, */
+    "split",
+    "split_p_s_sc",
+    "Parrot_split_p_s_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 880 */
+    /* type PARROT_FUNCTION_OP, */
+    "split",
+    "split_p_sc_sc",
+    "Parrot_split_p_sc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 881 */
+    /* type PARROT_FUNCTION_OP, */
+    "charset",
+    "charset_i_s",
+    "Parrot_charset_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 882 */
+    /* type PARROT_FUNCTION_OP, */
+    "charset",
+    "charset_i_sc",
+    "Parrot_charset_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 883 */
+    /* type PARROT_FUNCTION_OP, */
+    "charsetname",
+    "charsetname_s_i",
+    "Parrot_charsetname_s_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 884 */
+    /* type PARROT_FUNCTION_OP, */
+    "charsetname",
+    "charsetname_s_ic",
+    "Parrot_charsetname_s_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 885 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_charset",
+    "find_charset_i_s",
+    "Parrot_find_charset_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 886 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_charset",
+    "find_charset_i_sc",
+    "Parrot_find_charset_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 887 */
+    /* type PARROT_FUNCTION_OP, */
+    "trans_charset",
+    "trans_charset_s_s_i",
+    "Parrot_trans_charset_s_s_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 888 */
+    /* type PARROT_FUNCTION_OP, */
+    "trans_charset",
+    "trans_charset_s_sc_i",
+    "Parrot_trans_charset_s_sc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 889 */
+    /* type PARROT_FUNCTION_OP, */
+    "trans_charset",
+    "trans_charset_s_s_ic",
+    "Parrot_trans_charset_s_s_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 890 */
+    /* type PARROT_FUNCTION_OP, */
+    "trans_charset",
+    "trans_charset_s_sc_ic",
+    "Parrot_trans_charset_s_sc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 891 */
+    /* type PARROT_FUNCTION_OP, */
+    "encoding",
+    "encoding_i_s",
+    "Parrot_encoding_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 892 */
+    /* type PARROT_FUNCTION_OP, */
+    "encoding",
+    "encoding_i_sc",
+    "Parrot_encoding_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 893 */
+    /* type PARROT_FUNCTION_OP, */
+    "encodingname",
+    "encodingname_s_i",
+    "Parrot_encodingname_s_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 894 */
+    /* type PARROT_FUNCTION_OP, */
+    "encodingname",
+    "encodingname_s_ic",
+    "Parrot_encodingname_s_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 895 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_encoding",
+    "find_encoding_i_s",
+    "Parrot_find_encoding_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 896 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_encoding",
+    "find_encoding_i_sc",
+    "Parrot_find_encoding_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 897 */
+    /* type PARROT_FUNCTION_OP, */
+    "trans_encoding",
+    "trans_encoding_s_s_i",
+    "Parrot_trans_encoding_s_s_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 898 */
+    /* type PARROT_FUNCTION_OP, */
+    "trans_encoding",
+    "trans_encoding_s_sc_i",
+    "Parrot_trans_encoding_s_sc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 899 */
+    /* type PARROT_FUNCTION_OP, */
+    "trans_encoding",
+    "trans_encoding_s_s_ic",
+    "Parrot_trans_encoding_s_s_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 900 */
+    /* type PARROT_FUNCTION_OP, */
+    "trans_encoding",
+    "trans_encoding_s_sc_ic",
+    "Parrot_trans_encoding_s_sc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 901 */
+    /* type PARROT_INLINE_OP, */
+    "is_cclass",
+    "is_cclass_i_i_s_i",
+    "Parrot_is_cclass_i_i_s_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 902 */
+    /* type PARROT_INLINE_OP, */
+    "is_cclass",
+    "is_cclass_i_ic_s_i",
+    "Parrot_is_cclass_i_ic_s_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 903 */
+    /* type PARROT_INLINE_OP, */
+    "is_cclass",
+    "is_cclass_i_i_sc_i",
+    "Parrot_is_cclass_i_i_sc_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 904 */
+    /* type PARROT_INLINE_OP, */
+    "is_cclass",
+    "is_cclass_i_ic_sc_i",
+    "Parrot_is_cclass_i_ic_sc_i",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 905 */
+    /* type PARROT_INLINE_OP, */
+    "is_cclass",
+    "is_cclass_i_i_s_ic",
+    "Parrot_is_cclass_i_i_s_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 906 */
+    /* type PARROT_INLINE_OP, */
+    "is_cclass",
+    "is_cclass_i_ic_s_ic",
+    "Parrot_is_cclass_i_ic_s_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 907 */
+    /* type PARROT_INLINE_OP, */
+    "is_cclass",
+    "is_cclass_i_i_sc_ic",
+    "Parrot_is_cclass_i_i_sc_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 908 */
+    /* type PARROT_INLINE_OP, */
+    "is_cclass",
+    "is_cclass_i_ic_sc_ic",
+    "Parrot_is_cclass_i_ic_sc_ic",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 909 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_i_s_i_i",
+    "Parrot_find_cclass_i_i_s_i_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 910 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_ic_s_i_i",
+    "Parrot_find_cclass_i_ic_s_i_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 911 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_i_sc_i_i",
+    "Parrot_find_cclass_i_i_sc_i_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 912 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_ic_sc_i_i",
+    "Parrot_find_cclass_i_ic_sc_i_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 913 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_i_s_ic_i",
+    "Parrot_find_cclass_i_i_s_ic_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 914 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_ic_s_ic_i",
+    "Parrot_find_cclass_i_ic_s_ic_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 915 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_i_sc_ic_i",
+    "Parrot_find_cclass_i_i_sc_ic_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 916 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_ic_sc_ic_i",
+    "Parrot_find_cclass_i_ic_sc_ic_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 917 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_i_s_i_ic",
+    "Parrot_find_cclass_i_i_s_i_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 918 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_ic_s_i_ic",
+    "Parrot_find_cclass_i_ic_s_i_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 919 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_i_sc_i_ic",
+    "Parrot_find_cclass_i_i_sc_i_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 920 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_ic_sc_i_ic",
+    "Parrot_find_cclass_i_ic_sc_i_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 921 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_i_s_ic_ic",
+    "Parrot_find_cclass_i_i_s_ic_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 922 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_ic_s_ic_ic",
+    "Parrot_find_cclass_i_ic_s_ic_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 923 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_i_sc_ic_ic",
+    "Parrot_find_cclass_i_i_sc_ic_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 924 */
+    /* type PARROT_INLINE_OP, */
+    "find_cclass",
+    "find_cclass_i_ic_sc_ic_ic",
+    "Parrot_find_cclass_i_ic_sc_ic_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 925 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_i_s_i_i",
+    "Parrot_find_not_cclass_i_i_s_i_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 926 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_ic_s_i_i",
+    "Parrot_find_not_cclass_i_ic_s_i_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 927 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_i_sc_i_i",
+    "Parrot_find_not_cclass_i_i_sc_i_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 928 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_ic_sc_i_i",
+    "Parrot_find_not_cclass_i_ic_sc_i_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 929 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_i_s_ic_i",
+    "Parrot_find_not_cclass_i_i_s_ic_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 930 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_ic_s_ic_i",
+    "Parrot_find_not_cclass_i_ic_s_ic_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 931 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_i_sc_ic_i",
+    "Parrot_find_not_cclass_i_i_sc_ic_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 932 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_ic_sc_ic_i",
+    "Parrot_find_not_cclass_i_ic_sc_ic_i",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 933 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_i_s_i_ic",
+    "Parrot_find_not_cclass_i_i_s_i_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 934 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_ic_s_i_ic",
+    "Parrot_find_not_cclass_i_ic_s_i_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 935 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_i_sc_i_ic",
+    "Parrot_find_not_cclass_i_i_sc_i_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 936 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_ic_sc_i_ic",
+    "Parrot_find_not_cclass_i_ic_sc_i_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 937 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_i_s_ic_ic",
+    "Parrot_find_not_cclass_i_i_s_ic_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 938 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_ic_s_ic_ic",
+    "Parrot_find_not_cclass_i_ic_s_ic_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 939 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_i_sc_ic_ic",
+    "Parrot_find_not_cclass_i_i_sc_ic_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 940 */
+    /* type PARROT_INLINE_OP, */
+    "find_not_cclass",
+    "find_not_cclass_i_ic_sc_ic_ic",
+    "Parrot_find_not_cclass_i_ic_sc_ic_ic",
+    /* "",  body */
+    0,
+    6,
+    { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
+  },
+  { /* 941 */
+    /* type PARROT_FUNCTION_OP, */
+    "escape",
+    "escape_s_s",
+    "Parrot_escape_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 942 */
+    /* type PARROT_FUNCTION_OP, */
+    "compose",
+    "compose_s_s",
+    "Parrot_compose_s_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 943 */
+    /* type PARROT_FUNCTION_OP, */
+    "compose",
+    "compose_s_sc",
+    "Parrot_compose_s_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 944 */
+    /* type PARROT_INLINE_OP, */
+    "spawnw",
+    "spawnw_i_s",
+    "Parrot_spawnw_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 945 */
+    /* type PARROT_INLINE_OP, */
+    "spawnw",
+    "spawnw_i_sc",
+    "Parrot_spawnw_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 946 */
+    /* type PARROT_INLINE_OP, */
+    "spawnw",
+    "spawnw_i_p",
+    "Parrot_spawnw_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 947 */
+    /* type PARROT_INLINE_OP, */
+    "err",
+    "err_i",
+    "Parrot_err_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 948 */
+    /* type PARROT_FUNCTION_OP, */
+    "err",
+    "err_s",
+    "Parrot_err_s",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 949 */
+    /* type PARROT_FUNCTION_OP, */
+    "err",
+    "err_s_i",
+    "Parrot_err_s_i",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 950 */
+    /* type PARROT_FUNCTION_OP, */
+    "err",
+    "err_s_ic",
+    "Parrot_err_s_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 951 */
+    /* type PARROT_INLINE_OP, */
+    "time",
+    "time_i",
+    "Parrot_time_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 952 */
+    /* type PARROT_INLINE_OP, */
+    "time",
+    "time_n",
+    "Parrot_time_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 953 */
+    /* type PARROT_INLINE_OP, */
+    "sleep",
+    "sleep_i",
+    "Parrot_sleep_i",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_I },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 954 */
+    /* type PARROT_INLINE_OP, */
+    "sleep",
+    "sleep_ic",
+    "Parrot_sleep_ic",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 955 */
+    /* type PARROT_INLINE_OP, */
+    "sleep",
+    "sleep_n",
+    "Parrot_sleep_n",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_N },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 956 */
+    /* type PARROT_INLINE_OP, */
+    "sleep",
+    "sleep_nc",
+    "Parrot_sleep_nc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_NC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 957 */
+    /* type PARROT_FUNCTION_OP, */
+    "store_lex",
+    "store_lex_s_p",
+    "Parrot_store_lex_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 958 */
+    /* type PARROT_FUNCTION_OP, */
+    "store_lex",
+    "store_lex_sc_p",
+    "Parrot_store_lex_sc_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 959 */
+    /* type PARROT_FUNCTION_OP, */
+    "store_dynamic_lex",
+    "store_dynamic_lex_s_p",
+    "Parrot_store_dynamic_lex_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 960 */
+    /* type PARROT_FUNCTION_OP, */
+    "store_dynamic_lex",
+    "store_dynamic_lex_sc_p",
+    "Parrot_store_dynamic_lex_sc_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 961 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_lex",
+    "find_lex_p_s",
+    "Parrot_find_lex_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 962 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_lex",
+    "find_lex_p_sc",
+    "Parrot_find_lex_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 963 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_dynamic_lex",
+    "find_dynamic_lex_p_s",
+    "Parrot_find_dynamic_lex_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 964 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_dynamic_lex",
+    "find_dynamic_lex_p_sc",
+    "Parrot_find_dynamic_lex_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 965 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_caller_lex",
+    "find_caller_lex_p_s",
+    "Parrot_find_caller_lex_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 966 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_caller_lex",
+    "find_caller_lex_p_sc",
+    "Parrot_find_caller_lex_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 967 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_namespace",
+    "get_namespace_p",
+    "Parrot_get_namespace_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 968 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_namespace",
+    "get_namespace_p_p",
+    "Parrot_get_namespace_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 969 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_namespace",
+    "get_namespace_p_pc",
+    "Parrot_get_namespace_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 970 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_namespace",
+    "get_hll_namespace_p",
+    "Parrot_get_hll_namespace_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 971 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_namespace",
+    "get_hll_namespace_p_p",
+    "Parrot_get_hll_namespace_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 972 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_namespace",
+    "get_hll_namespace_p_pc",
+    "Parrot_get_hll_namespace_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 973 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_namespace",
+    "get_root_namespace_p",
+    "Parrot_get_root_namespace_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT },
+    { 0 }
+  },
+  { /* 974 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_namespace",
+    "get_root_namespace_p_p",
+    "Parrot_get_root_namespace_p_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 975 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_namespace",
+    "get_root_namespace_p_pc",
+    "Parrot_get_root_namespace_p_pc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 976 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_global",
+    "get_global_p_s",
+    "Parrot_get_global_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 977 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_global",
+    "get_global_p_sc",
+    "Parrot_get_global_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 978 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_global",
+    "get_global_p_p_s",
+    "Parrot_get_global_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 979 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_global",
+    "get_global_p_pc_s",
+    "Parrot_get_global_p_pc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 980 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_global",
+    "get_global_p_p_sc",
+    "Parrot_get_global_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 981 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_global",
+    "get_global_p_pc_sc",
+    "Parrot_get_global_p_pc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 982 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_global",
+    "get_hll_global_p_s",
+    "Parrot_get_hll_global_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 983 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_global",
+    "get_hll_global_p_sc",
+    "Parrot_get_hll_global_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 984 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_global",
+    "get_hll_global_p_p_s",
+    "Parrot_get_hll_global_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 985 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_global",
+    "get_hll_global_p_pc_s",
+    "Parrot_get_hll_global_p_pc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 986 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_global",
+    "get_hll_global_p_p_sc",
+    "Parrot_get_hll_global_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 987 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_hll_global",
+    "get_hll_global_p_pc_sc",
+    "Parrot_get_hll_global_p_pc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 988 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_global",
+    "get_root_global_p_s",
+    "Parrot_get_root_global_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 989 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_global",
+    "get_root_global_p_sc",
+    "Parrot_get_root_global_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 990 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_global",
+    "get_root_global_p_p_s",
+    "Parrot_get_root_global_p_p_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 991 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_global",
+    "get_root_global_p_pc_s",
+    "Parrot_get_root_global_p_pc_s",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 992 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_global",
+    "get_root_global_p_p_sc",
+    "Parrot_get_root_global_p_p_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 993 */
+    /* type PARROT_FUNCTION_OP, */
+    "get_root_global",
+    "get_root_global_p_pc_sc",
+    "Parrot_get_root_global_p_pc_sc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 994 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_global",
+    "set_global_s_p",
+    "Parrot_set_global_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 995 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_global",
+    "set_global_sc_p",
+    "Parrot_set_global_sc_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 996 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_global",
+    "set_global_p_s_p",
+    "Parrot_set_global_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 997 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_global",
+    "set_global_pc_s_p",
+    "Parrot_set_global_pc_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 998 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_global",
+    "set_global_p_sc_p",
+    "Parrot_set_global_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 999 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_global",
+    "set_global_pc_sc_p",
+    "Parrot_set_global_pc_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1000 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_hll_global",
+    "set_hll_global_s_p",
+    "Parrot_set_hll_global_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1001 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_hll_global",
+    "set_hll_global_sc_p",
+    "Parrot_set_hll_global_sc_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1002 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_hll_global",
+    "set_hll_global_p_s_p",
+    "Parrot_set_hll_global_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1003 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_hll_global",
+    "set_hll_global_pc_s_p",
+    "Parrot_set_hll_global_pc_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1004 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_hll_global",
+    "set_hll_global_p_sc_p",
+    "Parrot_set_hll_global_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1005 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_hll_global",
+    "set_hll_global_pc_sc_p",
+    "Parrot_set_hll_global_pc_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1006 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_root_global",
+    "set_root_global_s_p",
+    "Parrot_set_root_global_s_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1007 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_root_global",
+    "set_root_global_sc_p",
+    "Parrot_set_root_global_sc_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1008 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_root_global",
+    "set_root_global_p_s_p",
+    "Parrot_set_root_global_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1009 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_root_global",
+    "set_root_global_pc_s_p",
+    "Parrot_set_root_global_pc_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1010 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_root_global",
+    "set_root_global_p_sc_p",
+    "Parrot_set_root_global_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1011 */
+    /* type PARROT_FUNCTION_OP, */
+    "set_root_global",
+    "set_root_global_pc_sc_p",
+    "Parrot_set_root_global_pc_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1012 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_name",
+    "find_name_p_s",
+    "Parrot_find_name_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1013 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_name",
+    "find_name_p_sc",
+    "Parrot_find_name_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1014 */
+    /* type PARROT_INLINE_OP, */
+    "find_sub_not_null",
+    "find_sub_not_null_p_s",
+    "Parrot_find_sub_not_null_p_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1015 */
+    /* type PARROT_INLINE_OP, */
+    "find_sub_not_null",
+    "find_sub_not_null_p_sc",
+    "Parrot_find_sub_not_null_p_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1016 */
+    /* type PARROT_FUNCTION_OP, */
+    "trap",
+    "trap",
+    "Parrot_trap",
+    /* "",  body */
+    0,
+    1,
+    { (arg_type_t) 0 },
+    { (arg_dir_t) 0 },
+    { 0 }
+  },
+  { /* 1017 */
+    /* type PARROT_INLINE_OP, */
+    "set_label",
+    "set_label_p_ic",
+    "Parrot_set_label_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 1018 */
+    /* type PARROT_INLINE_OP, */
+    "get_label",
+    "get_label_i_p",
+    "Parrot_get_label_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1019 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_p_p",
+    "Parrot_fetch_p_p_p_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1020 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_p_p",
+    "Parrot_fetch_p_pc_p_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1021 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_pc_p",
+    "Parrot_fetch_p_p_pc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1022 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_pc_p",
+    "Parrot_fetch_p_pc_pc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1023 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_p_pc",
+    "Parrot_fetch_p_p_p_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1024 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_p_pc",
+    "Parrot_fetch_p_pc_p_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1025 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_pc_pc",
+    "Parrot_fetch_p_p_pc_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1026 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_pc_pc",
+    "Parrot_fetch_p_pc_pc_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1027 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_i_p",
+    "Parrot_fetch_p_p_i_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1028 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_i_p",
+    "Parrot_fetch_p_pc_i_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1029 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_ic_p",
+    "Parrot_fetch_p_p_ic_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1030 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_ic_p",
+    "Parrot_fetch_p_pc_ic_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1031 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_i_pc",
+    "Parrot_fetch_p_p_i_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1032 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_i_pc",
+    "Parrot_fetch_p_pc_i_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1033 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_ic_pc",
+    "Parrot_fetch_p_p_ic_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1034 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_ic_pc",
+    "Parrot_fetch_p_pc_ic_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1035 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_s_p",
+    "Parrot_fetch_p_p_s_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1036 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_s_p",
+    "Parrot_fetch_p_pc_s_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1037 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_sc_p",
+    "Parrot_fetch_p_p_sc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1038 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_sc_p",
+    "Parrot_fetch_p_pc_sc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1039 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_s_pc",
+    "Parrot_fetch_p_p_s_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1040 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_s_pc",
+    "Parrot_fetch_p_pc_s_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1041 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_p_sc_pc",
+    "Parrot_fetch_p_p_sc_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1042 */
+    /* type PARROT_INLINE_OP, */
+    "fetch",
+    "fetch_p_pc_sc_pc",
+    "Parrot_fetch_p_pc_sc_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1043 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_p_p",
+    "Parrot_vivify_p_p_p_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1044 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_p_p",
+    "Parrot_vivify_p_pc_p_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1045 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_pc_p",
+    "Parrot_vivify_p_p_pc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1046 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_pc_p",
+    "Parrot_vivify_p_pc_pc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1047 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_p_pc",
+    "Parrot_vivify_p_p_p_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1048 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_p_pc",
+    "Parrot_vivify_p_pc_p_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1049 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_pc_pc",
+    "Parrot_vivify_p_p_pc_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1050 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_pc_pc",
+    "Parrot_vivify_p_pc_pc_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1051 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_i_p",
+    "Parrot_vivify_p_p_i_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1052 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_i_p",
+    "Parrot_vivify_p_pc_i_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1053 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_ic_p",
+    "Parrot_vivify_p_p_ic_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1054 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_ic_p",
+    "Parrot_vivify_p_pc_ic_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1055 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_i_pc",
+    "Parrot_vivify_p_p_i_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1056 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_i_pc",
+    "Parrot_vivify_p_pc_i_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1057 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_ic_pc",
+    "Parrot_vivify_p_p_ic_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1058 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_ic_pc",
+    "Parrot_vivify_p_pc_ic_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1059 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_s_p",
+    "Parrot_vivify_p_p_s_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1060 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_s_p",
+    "Parrot_vivify_p_pc_s_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1061 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_sc_p",
+    "Parrot_vivify_p_p_sc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1062 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_sc_p",
+    "Parrot_vivify_p_pc_sc_p",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1063 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_s_pc",
+    "Parrot_vivify_p_p_s_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1064 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_s_pc",
+    "Parrot_vivify_p_pc_s_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1065 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_p_sc_pc",
+    "Parrot_vivify_p_p_sc_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1066 */
+    /* type PARROT_INLINE_OP, */
+    "vivify",
+    "vivify_p_pc_sc_pc",
+    "Parrot_vivify_p_pc_sc_pc",
+    /* "",  body */
+    0,
+    5,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
+  },
+  { /* 1067 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_s_i",
+    "Parrot_new_p_s_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1068 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_sc_i",
+    "Parrot_new_p_sc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1069 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_s_ic",
+    "Parrot_new_p_s_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1070 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_sc_ic",
+    "Parrot_new_p_sc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1071 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_p_i",
+    "Parrot_new_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1072 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_pc_i",
+    "Parrot_new_p_pc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1073 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_p_ic",
+    "Parrot_new_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1074 */
+    /* type PARROT_FUNCTION_OP, */
+    "new",
+    "new_p_pc_ic",
+    "Parrot_new_p_pc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1075 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_p_i",
+    "Parrot_root_new_p_p_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1076 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_pc_i",
+    "Parrot_root_new_p_pc_i",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1077 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_p_ic",
+    "Parrot_root_new_p_p_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1078 */
+    /* type PARROT_FUNCTION_OP, */
+    "root_new",
+    "root_new_p_pc_ic",
+    "Parrot_root_new_p_pc_ic",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 1079 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_codepoint",
+    "find_codepoint_i_s",
+    "Parrot_find_codepoint_i_s",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1080 */
+    /* type PARROT_FUNCTION_OP, */
+    "find_codepoint",
+    "find_codepoint_i_sc",
+    "Parrot_find_codepoint_i_sc",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 1081 */
+    /* type PARROT_FUNCTION_OP, */
+    "finalize",
+    "finalize_p",
+    "Parrot_finalize_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 1082 */
+    /* type PARROT_FUNCTION_OP, */
+    "finalize",
+    "finalize_pc",
+    "Parrot_finalize_pc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+
+};
+
+
+/*
+** Op Function Definitions:
+*/
+
+opcode_t *
+Parrot_end(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_noop(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+
+return (opcode_t *)cur_opcode + 1;}
+
+opcode_t *
+Parrot_check_events(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const next =cur_opcode + 1;
+    Parrot_cx_check_tasks(interp, interp->scheduler);return (opcode_t *)next;   /* force this being a branch op */
+}
+
+opcode_t *
+Parrot_check_events__(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const _this = CUR_OPCODE;
+    /* Restore op_func_table. */
+    disable_event_checking(interp);
+    Parrot_cx_handle_tasks(interp, interp->scheduler);return (opcode_t *)_this;   /* force this being a branch op */
+}
+
+opcode_t *
+Parrot_wrapper__(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t *pc = CUR_OPCODE;
+    DO_OP(pc, interp);return (opcode_t *)pc;
+}
+
+opcode_t *
+Parrot_load_bytecode_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_load_bytecode(interp, SREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_load_bytecode_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_load_bytecode(interp, CONST(1)->u.string);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_load_language_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_load_language(interp, SREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_load_language_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_load_language(interp, CONST(1)->u.string);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_branch_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);return (opcode_t *)cur_opcode + IREG(1);
+}
+
+opcode_t *
+Parrot_branch_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);return (opcode_t *)cur_opcode + cur_opcode[1];
+}
+
+opcode_t *
+Parrot_local_branch_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL return_addr;
+    opcode_t * const dest =cur_opcode + 3;
+
+    if (PMC_IS_NULL(PREG(1)) || PREG(1)->vtable->base_type != enum_class_ResizableIntegerArray) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
+            EXCEPTION_INVALID_OPERATION,
+            "Must pass a valid integer array to 'local_branch'");return (opcode_t *)handler;
+    }
+
+    return_addr = PTR2INTVAL(dest);
+    VTABLE_push_integer(interp, PREG(1), return_addr);return (opcode_t *)cur_opcode + IREG(2);
+}
+
+opcode_t *
+Parrot_local_branch_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL return_addr;
+    opcode_t * const dest =cur_opcode + 3;
+
+    if (PMC_IS_NULL(PREG(1)) || PREG(1)->vtable->base_type != enum_class_ResizableIntegerArray) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
+            EXCEPTION_INVALID_OPERATION,
+            "Must pass a valid integer array to 'local_branch'");return (opcode_t *)handler;
+    }
+
+    return_addr = PTR2INTVAL(dest);
+    VTABLE_push_integer(interp, PREG(1), return_addr);return (opcode_t *)cur_opcode + cur_opcode[2];
+}
+
+opcode_t *
+Parrot_local_return_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL return_addr;
+    opcode_t *next;
+    opcode_t * const dest =cur_opcode + 2;
+
+    if (PMC_IS_NULL(PREG(1)) || PREG(1)->vtable->base_type != enum_class_ResizableIntegerArray) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
+            EXCEPTION_INVALID_OPERATION,
+            "Must pass a valid integer array to 'local_return'");return (opcode_t *)handler;
+    }
+
+    return_addr = VTABLE_pop_integer(interp, PREG(1));
+    next = INTVAL2PTR(opcode_t *, return_addr);
+
+    /* The return address must be within the current code segment. */
+    if (! (next >= interp->code->base.data
+           && next < (interp->code->base.data + interp->code->base.size))) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
+            EXCEPTION_INVALID_OPERATION,
+            "Address for 'local_return' must be within the current code segment");return (opcode_t *)handler;
+    }return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_jump_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const loc = INTVAL2PTR(opcode_t *, IREG(1));return (opcode_t *)loc;
+}
+
+opcode_t *
+Parrot_jump_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const loc = INTVAL2PTR(opcode_t *, cur_opcode[1]);return (opcode_t *)loc;
+}
+
+opcode_t *
+Parrot_enternative(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const addr = run_native(interp, CUR_OPCODE,
+            interp->code->base.data);return (opcode_t *)addr;
+}
+
+opcode_t *
+Parrot_if_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) != 0)return (opcode_t *)cur_opcode + cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_if_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (!FLOAT_IS_ZERO(NREG(1)))return (opcode_t *)cur_opcode + cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_if_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_boolean(interp, SREG(1)))return (opcode_t *)cur_opcode + cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_if_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_bool(interp, PREG(1)))return (opcode_t *)cur_opcode + cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unless_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) == 0)return (opcode_t *)cur_opcode + cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unless_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (FLOAT_IS_ZERO(NREG(1)))return (opcode_t *)cur_opcode + cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unless_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (!Parrot_str_boolean(interp, SREG(1)))return (opcode_t *)cur_opcode + cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unless_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (!VTABLE_get_bool(interp, PREG(1)))return (opcode_t *)cur_opcode + cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_invokecc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const p     = PREG(1);
+    opcode_t *dest         =cur_opcode + 2;
+    PMC      * const signature = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), dest);
+
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, NULL);
+    interp->current_cont   = NEED_CONTINUATION;
+    dest                   = VTABLE_invoke(interp, p, dest);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_invoke_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t   *dest       =cur_opcode + 3;
+    PMC * const p          = PREG(1);
+    PMC * const signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), dest);
+
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, NULL);
+    interp->current_cont   = PREG(2);
+
+    dest = VTABLE_invoke(interp, p, dest);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_yield(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t   *dest =cur_opcode + 1;
+    PMC * const p    = Parrot_pcc_get_sub(interp, CURRENT_CONTEXT(interp));
+
+    VTABLE_increment(interp, p);
+    dest = VTABLE_invoke(interp, p, dest);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_tailcall_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const p               = PREG(1);
+    opcode_t   *dest            =cur_opcode + 2;
+    PMC * const ctx             = CURRENT_CONTEXT(interp);
+    PMC * const parent_ctx      = Parrot_pcc_get_caller_ctx(interp, ctx);
+    PMC * const this_call_sig   = Parrot_pcc_get_signature(interp, ctx);
+    PMC * const parent_call_sig = Parrot_pcc_get_signature(interp, parent_ctx);
+    interp->current_cont        = Parrot_pcc_get_continuation(interp, ctx);
+
+    Parrot_pcc_merge_signature_for_tailcall(interp, parent_call_sig, this_call_sig);
+
+    SUB_FLAG_TAILCALL_SET(interp->current_cont);
+    dest = VTABLE_invoke(interp, p, dest);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_returncc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const p = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
+    opcode_t * const dest = VTABLE_invoke(interp, p,cur_opcode + 1);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_capture_lex_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_capture_lex(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_newclosure_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = parrot_new_closure(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_args_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const raw_args = CUR_OPCODE;
+    PMC * const signature = CONST(1)->u.key;
+    PMC * const call_sig = Parrot_pcc_build_sig_object_from_op(interp,
+            PMCNULL, signature, raw_args);
+    const INTVAL argc = VTABLE_elements(interp, signature);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_sig);return (opcode_t *)cur_opcode + argc + 2;
+}
+
+opcode_t *
+Parrot_get_params_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const raw_params  = CUR_OPCODE;
+    PMC      * const signature   = CONST(1)->u.key;
+    PMC      * const ctx         = CURRENT_CONTEXT(interp);
+    PMC      * const ccont       = Parrot_pcc_get_continuation(interp, ctx);
+    PMC      * const caller_ctx  = Parrot_pcc_get_caller_ctx(interp, ctx);
+    PMC      * const call_object = Parrot_pcc_get_signature(interp, caller_ctx);
+    INTVAL argc;
+
+    Parrot_pcc_fill_params_from_op(interp, call_object, signature, raw_params,
+            PARROT_ERRORS_PARAM_COUNT_FLAG);
+
+    /* TODO Factor out with Sub.invoke */
+    if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
+        PObj_get_FLAGS(ccont) &= ~SUB_FLAG_TAILCALL;
+        Parrot_pcc_dec_recursion_depth(interp, ctx);
+        Parrot_pcc_set_caller_ctx(interp, ctx, Parrot_pcc_get_caller_ctx(interp, caller_ctx));
+    }
+    argc = VTABLE_elements(interp, signature);return (opcode_t *)cur_opcode + argc + 2;
+}
+
+opcode_t *
+Parrot_set_returns_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const raw_args  = CUR_OPCODE;
+    PMC      * const signature = CONST(1)->u.key;
+    PMC      * const call_sig  = Parrot_pcc_build_sig_object_from_op(interp,
+                Parrot_pcc_get_signature(interp,
+                Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp))),
+                    signature, raw_args);
+    INTVAL argc;
+
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_sig);
+
+    argc = VTABLE_elements(interp, signature);return (opcode_t *)cur_opcode + argc + 2;
+}
+
+opcode_t *
+Parrot_get_results_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const raw_params  = CUR_OPCODE;
+    PMC      * const signature   = CONST(1)->u.key;
+    PMC             *ctx         = CURRENT_CONTEXT(interp);
+    PMC             *ccont       = Parrot_pcc_get_continuation(interp, ctx);
+    PMC             *call_object = Parrot_pcc_get_signature(interp, ctx);
+
+    INTVAL argc;
+
+    Parrot_pcc_fill_params_from_op(interp, call_object, signature, raw_params,
+            PARROT_ERRORS_RESULT_COUNT_FLAG);
+
+    argc = VTABLE_elements(interp, signature);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), PMCNULL);return (opcode_t *)cur_opcode + argc + 2;
+}
+
+opcode_t *
+Parrot_set_result_info_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const ctx = CURRENT_CONTEXT(interp);
+
+    VTABLE_set_attr_str(interp, ctx,
+            Parrot_str_new_constant(interp, "return_flags"),
+            PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_set_result_info_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const ctx = CURRENT_CONTEXT(interp);
+
+    VTABLE_set_attr_str(interp, ctx,
+            Parrot_str_new_constant(interp, "return_flags"),
+            CONST(1)->u.key);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_result_info_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const caller_ctx = Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
+    PMC * const sig        = VTABLE_get_attr_str(interp, caller_ctx,
+            Parrot_str_new_constant(interp, "return_flags"));
+
+    /* If no elements, hand back empty array; otherwise PMC. */
+    if (!sig)
+        PREG(1) = Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
+    else
+        PREG(1) = sig;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_set_addr_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PTR2INTVAL(CUR_OPCODE + cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_addr_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_pointer(interp, PREG(1), (CUR_OPCODE + cur_opcode[2]));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_addr_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_pointer(interp, PREG(1), (void*)IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_addr_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    void *ptr = VTABLE_get_pointer(interp, PREG(2));
+    IREG(1)        = (INTVAL)ptr;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_schedule_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_cx_schedule_task(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_addhandler_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_cx_add_handler(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_push_eh_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const eh = Parrot_pmc_new(interp, enum_class_ExceptionHandler);
+    VTABLE_set_pointer(interp, eh, CUR_OPCODE + cur_opcode[1]);
+    Parrot_cx_add_handler_local(interp, eh);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_push_eh_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_cx_add_handler_local(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_pop_eh(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_cx_delete_handler_local(interp,
+            Parrot_str_new_constant(interp, "exception"));
+
+return (opcode_t *)cur_opcode + 1;}
+
+opcode_t *
+Parrot_throw_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * except = PREG(1);
+    opcode_t *dest;
+    opcode_t * const ret    =cur_opcode + 2;
+    PMC      * const resume = pmc_new(interp, enum_class_Continuation);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
+    if (PMC_IS_NULL(except) || except->vtable->base_type != enum_class_Exception)
+        except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
+                EXCEPTION_UNIMPLEMENTED,
+                Parrot_str_new_constant(interp, "Not a throwable object"));
+
+    VTABLE_set_attr_str(interp, except, Parrot_str_new_constant(interp, "resume"), resume);
+    dest = Parrot_ex_throw_from_op(interp, except, ret);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_throw_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * dest;
+    PMC * except = PREG(1);
+    if (PMC_IS_NULL(except) || except->vtable->base_type != enum_class_Exception)
+        except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
+                EXCEPTION_UNIMPLEMENTED,
+                Parrot_str_new_constant(interp, "Not a throwable object"));
+    dest = Parrot_ex_throw_from_op(interp, PREG(1),
+                                VTABLE_get_pointer(interp, PREG(2)));return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_rethrow_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * dest;
+    if (PMC_IS_NULL(PREG(1)) || PREG(1)->vtable->base_type != enum_class_Exception) {
+        opcode_t * const ret    =cur_opcode + 2;
+        PMC      * const except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
+                EXCEPTION_UNIMPLEMENTED,
+                Parrot_str_new_constant(interp, "Not a throwable object"));
+        dest = Parrot_ex_throw_from_op(interp, except, ret);return (opcode_t *)dest;
+    }
+    dest = Parrot_ex_rethrow_from_op(interp, PREG(1));return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_count_eh_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_cx_count_handlers_local(interp,
+            Parrot_str_new_constant(interp, "exception"));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_die_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t        *dest;
+    opcode_t * const ret       =cur_opcode + 2;
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_error,
+                                    CONTROL_ERROR, SREG(1));
+
+    VTABLE_set_pointer(interp, resume, ret);
+
+    VTABLE_set_attr_str(interp, exception,
+                        Parrot_str_new_constant(interp, "resume"), resume);
+    dest = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_die_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t        *dest;
+    opcode_t * const ret       =cur_opcode + 2;
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_error,
+                                    CONTROL_ERROR, CONST(1)->u.string);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
+    VTABLE_set_attr_str(interp, exception,
+                        Parrot_str_new_constant(interp, "resume"), resume);
+    dest = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_die_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t        *dest;
+    opcode_t * const ret       =cur_opcode + 2;
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    STRING   * const msg       = PMC_IS_NULL(PREG(1)) ? NULL : VTABLE_get_string(interp, PREG(1));
+    PMC      * const exception =
+        Parrot_ex_build_exception(interp, EXCEPT_error, CONTROL_ERROR, msg);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
+    VTABLE_set_attr_str(interp, exception,
+                        Parrot_str_new_constant(interp, "resume"), resume);
+    dest = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_die_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t        *dest;
+    opcode_t * const ret       =cur_opcode + 2;
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    STRING   * const msg       = PMC_IS_NULL(CONST(1)->u.key) ? NULL : VTABLE_get_string(interp, CONST(1)->u.key);
+    PMC      * const exception =
+        Parrot_ex_build_exception(interp, EXCEPT_error, CONTROL_ERROR, msg);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
+    VTABLE_set_attr_str(interp, exception,
+                        Parrot_str_new_constant(interp, "resume"), resume);
+    dest = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_die_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) == EXCEPT_doomed)
+        _exit(IREG(2));
+    else {
+        opcode_t * const ret       =cur_opcode + 3;
+        PMC      * const exception = Parrot_ex_build_exception(interp, IREG(1), IREG(2), NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+    }
+}
+
+opcode_t *
+Parrot_die_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] == EXCEPT_doomed)
+        _exit(IREG(2));
+    else {
+        opcode_t * const ret       =cur_opcode + 3;
+        PMC      * const exception = Parrot_ex_build_exception(interp, cur_opcode[1], IREG(2), NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+    }
+}
+
+opcode_t *
+Parrot_die_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) == EXCEPT_doomed)
+        _exit(cur_opcode[2]);
+    else {
+        opcode_t * const ret       =cur_opcode + 3;
+        PMC      * const exception = Parrot_ex_build_exception(interp, IREG(1), cur_opcode[2], NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+    }
+}
+
+opcode_t *
+Parrot_die_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] == EXCEPT_doomed)
+        _exit(cur_opcode[2]);
+    else {
+        opcode_t * const ret       =cur_opcode + 3;
+        PMC      * const exception = Parrot_ex_build_exception(interp, cur_opcode[1], cur_opcode[2], NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+    }
+}
+
+opcode_t *
+Parrot_exit_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t        *dest;
+    opcode_t * const ret       =cur_opcode + 2;
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit,
+                                                           CONTROL_EXIT, NULL);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
+    VTABLE_set_attr_str(interp, exception,
+                        Parrot_str_new_constant(interp, "resume"), resume);
+    VTABLE_set_integer_keyed_str(interp, exception,
+        Parrot_str_new_constant(interp, "exit_code"), IREG(1));
+    dest = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_exit_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t        *dest;
+    opcode_t * const ret       =cur_opcode + 2;
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit,
+                                                           CONTROL_EXIT, NULL);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
+    VTABLE_set_attr_str(interp, exception,
+                        Parrot_str_new_constant(interp, "resume"), resume);
+    VTABLE_set_integer_keyed_str(interp, exception,
+        Parrot_str_new_constant(interp, "exit_code"), cur_opcode[1]);
+    dest = Parrot_ex_throw_from_op(interp, exception, ret);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_debug_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) != 0) { Interp_debug_SET(interp,   IREG(1)); }
+    else         { Interp_debug_CLEAR(interp, PARROT_ALL_DEBUG_FLAGS); }interp->resume_offset = REL_PC + 2; interp->resume_flag = 1;return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_debug_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] != 0) { Interp_debug_SET(interp,   cur_opcode[1]); }
+    else         { Interp_debug_CLEAR(interp, PARROT_ALL_DEBUG_FLAGS); }interp->resume_offset = REL_PC + 2; interp->resume_flag = 1;return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_bounds_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) != 0) { Parrot_set_flag(interp,   PARROT_BOUNDS_FLAG); }
+    else         { Interp_flags_CLEAR(interp, PARROT_BOUNDS_FLAG); }interp->resume_offset = REL_PC + 2; interp->resume_flag = 1;return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_bounds_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] != 0) { Parrot_set_flag(interp,   PARROT_BOUNDS_FLAG); }
+    else         { Interp_flags_CLEAR(interp, PARROT_BOUNDS_FLAG); }interp->resume_offset = REL_PC + 2; interp->resume_flag = 1;return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_profile_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) != 0) { Parrot_set_flag(interp,   PARROT_PROFILE_FLAG); }
+    else         { Interp_flags_CLEAR(interp, PARROT_PROFILE_FLAG); }interp->resume_offset = REL_PC + 2; interp->resume_flag = 1;return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_profile_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] != 0) { Parrot_set_flag(interp,   PARROT_PROFILE_FLAG); }
+    else         { Interp_flags_CLEAR(interp, PARROT_PROFILE_FLAG); }interp->resume_offset = REL_PC + 2; interp->resume_flag = 1;return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_trace_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) != 0) { Parrot_set_trace(interp,   IREG(1)); }
+    else         { Parrot_clear_trace(interp, PARROT_ALL_TRACE_FLAGS); }interp->resume_offset = REL_PC + 2; interp->resume_flag = 1;return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_trace_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] != 0) { Parrot_set_trace(interp,   cur_opcode[1]); }
+    else         { Parrot_clear_trace(interp, PARROT_ALL_TRACE_FLAGS); }interp->resume_offset = REL_PC + 2; interp->resume_flag = 1;return (opcode_t *)0;
+}
+
+opcode_t *
+Parrot_gc_debug_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) != 0) { Interp_flags_SET(interp,   PARROT_GC_DEBUG_FLAG); }
+    else         { Interp_flags_CLEAR(interp, PARROT_GC_DEBUG_FLAG); }
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_gc_debug_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] != 0) { Interp_flags_SET(interp,   PARROT_GC_DEBUG_FLAG); }
+    else         { Interp_flags_CLEAR(interp, PARROT_GC_DEBUG_FLAG); }
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_interpinfo_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = interpinfo(interp, IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_interpinfo_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = interpinfo(interp, cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_interpinfo_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = interpinfo_p(interp, IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_interpinfo_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = interpinfo_p(interp, cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_interpinfo_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const s = interpinfo_s(interp, IREG(2));
+    SREG(1) = s;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_interpinfo_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const s = interpinfo_s(interp, cur_opcode[2]);
+    SREG(1) = s;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_warningson_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PARROT_WARNINGS_on(interp, IREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_warningson_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PARROT_WARNINGS_on(interp, cur_opcode[1]);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_warningsoff_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PARROT_WARNINGS_off(interp, IREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_warningsoff_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PARROT_WARNINGS_off(interp, cur_opcode[1]);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_errorson_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PARROT_ERRORS_on(interp, IREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_errorson_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PARROT_ERRORS_on(interp, cur_opcode[1]);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_errorsoff_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PARROT_ERRORS_off(interp, IREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_errorsoff_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PARROT_ERRORS_off(interp, cur_opcode[1]);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_runinterp_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Interp * const new_interp = (Interp *)VTABLE_get_pointer(interp, PREG(1));
+    Interp_flags_SET(new_interp, PARROT_EXTERN_CODE_FLAG);
+    Parrot_switch_to_cs(new_interp, interp->code, 1);
+    runops(new_interp, REL_PC + IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_runinterp_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Interp * const new_interp = (Interp *)VTABLE_get_pointer(interp, PREG(1));
+    Interp_flags_SET(new_interp, PARROT_EXTERN_CODE_FLAG);
+    Parrot_switch_to_cs(new_interp, interp->code, 1);
+    runops(new_interp, REL_PC + cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_getinterp_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, interp->iglobals,
+           IGLOBALS_INTERPRETER);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_sweep_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1])
+        Parrot_gc_mark_and_sweep(interp, GC_trace_normal_FLAG);
+    else
+        if (Parrot_gc_impatient_pmcs(interp))
+            Parrot_gc_mark_and_sweep(interp, GC_lazy_FLAG);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_collect(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_gc_compact_memory_pool(interp);
+
+return (opcode_t *)cur_opcode + 1;}
+
+opcode_t *
+Parrot_sweepoff(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_block_GC_mark(interp);
+
+return (opcode_t *)cur_opcode + 1;}
+
+opcode_t *
+Parrot_sweepon(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_unblock_GC_mark(interp);
+
+return (opcode_t *)cur_opcode + 1;}
+
+opcode_t *
+Parrot_collectoff(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_block_GC_sweep(interp);
+
+return (opcode_t *)cur_opcode + 1;}
+
+opcode_t *
+Parrot_collecton(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_unblock_GC_sweep(interp);
+
+return (opcode_t *)cur_opcode + 1;}
+
+opcode_t *
+Parrot_needs_destroy_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_gc_pmc_needs_early_collection(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_loadlib_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_load_lib(interp, SREG(2), NULL);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_loadlib_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_load_lib(interp, CONST(2)->u.string, NULL);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_loadlib_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_load_lib(interp, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_loadlib_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_load_lib(interp, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_loadlib_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_load_lib(interp, SREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_loadlib_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_load_lib(interp, CONST(2)->u.string, CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_dlfunc_p_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    char * const  name      = Parrot_str_to_cstring(interp, (SREG(3)));
+    void         *dl_handle = NULL;
+    void         *ptr       = NULL;
+    funcptr_t     p;
+
+    if (!PMC_IS_NULL(PREG(2))
+    && PREG(2)->vtable->base_type == enum_class_ParrotLibrary
+    && VTABLE_defined(interp, PREG(2))) {
+        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
+    }
+
+    ptr = Parrot_dlsym(dl_handle, name);
+    p = D2FPTR(ptr);
+
+    if (p == NULLfunc) {
+        const char * err = Parrot_dlerror();
+        Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG,
+                "Symbol '%s' not found: %s\n", name, err ? err : "unknown reason");
+        PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
+    }
+    else {
+        PREG(1) = Parrot_pmc_new(interp, enum_class_NCI);
+        VTABLE_set_pointer_keyed_str(interp, PREG(1), SREG(4), F2DPTR(p));
+    }
+    Parrot_str_free_cstring(name);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_dlfunc_p_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    char * const  name      = Parrot_str_to_cstring(interp, (CONST(3)->u.string));
+    void         *dl_handle = NULL;
+    void         *ptr       = NULL;
+    funcptr_t     p;
+
+    if (!PMC_IS_NULL(PREG(2))
+    && PREG(2)->vtable->base_type == enum_class_ParrotLibrary
+    && VTABLE_defined(interp, PREG(2))) {
+        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
+    }
+
+    ptr = Parrot_dlsym(dl_handle, name);
+    p = D2FPTR(ptr);
+
+    if (p == NULLfunc) {
+        const char * err = Parrot_dlerror();
+        Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG,
+                "Symbol '%s' not found: %s\n", name, err ? err : "unknown reason");
+        PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
+    }
+    else {
+        PREG(1) = Parrot_pmc_new(interp, enum_class_NCI);
+        VTABLE_set_pointer_keyed_str(interp, PREG(1), SREG(4), F2DPTR(p));
+    }
+    Parrot_str_free_cstring(name);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_dlfunc_p_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    char * const  name      = Parrot_str_to_cstring(interp, (SREG(3)));
+    void         *dl_handle = NULL;
+    void         *ptr       = NULL;
+    funcptr_t     p;
+
+    if (!PMC_IS_NULL(PREG(2))
+    && PREG(2)->vtable->base_type == enum_class_ParrotLibrary
+    && VTABLE_defined(interp, PREG(2))) {
+        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
+    }
+
+    ptr = Parrot_dlsym(dl_handle, name);
+    p = D2FPTR(ptr);
+
+    if (p == NULLfunc) {
+        const char * err = Parrot_dlerror();
+        Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG,
+                "Symbol '%s' not found: %s\n", name, err ? err : "unknown reason");
+        PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
+    }
+    else {
+        PREG(1) = Parrot_pmc_new(interp, enum_class_NCI);
+        VTABLE_set_pointer_keyed_str(interp, PREG(1), CONST(4)->u.string, F2DPTR(p));
+    }
+    Parrot_str_free_cstring(name);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_dlfunc_p_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    char * const  name      = Parrot_str_to_cstring(interp, (CONST(3)->u.string));
+    void         *dl_handle = NULL;
+    void         *ptr       = NULL;
+    funcptr_t     p;
+
+    if (!PMC_IS_NULL(PREG(2))
+    && PREG(2)->vtable->base_type == enum_class_ParrotLibrary
+    && VTABLE_defined(interp, PREG(2))) {
+        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
+    }
+
+    ptr = Parrot_dlsym(dl_handle, name);
+    p = D2FPTR(ptr);
+
+    if (p == NULLfunc) {
+        const char * err = Parrot_dlerror();
+        Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG,
+                "Symbol '%s' not found: %s\n", name, err ? err : "unknown reason");
+        PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
+    }
+    else {
+        PREG(1) = Parrot_pmc_new(interp, enum_class_NCI);
+        VTABLE_set_pointer_keyed_str(interp, PREG(1), CONST(4)->u.string, F2DPTR(p));
+    }
+    Parrot_str_free_cstring(name);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_dlvar_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    char * const  name      = Parrot_str_to_cstring(interp, (SREG(3)));
+    void *        dl_handle = NULL;
+    void *        p         = NULL;
+
+    if (!PMC_IS_NULL(PREG(2))
+    && PREG(2)->vtable->base_type == enum_class_ParrotLibrary
+    && VTABLE_defined(interp, PREG(2))) {
+        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
+    }
+
+    p = Parrot_dlsym(dl_handle, name);
+
+    if (p == NULL) {
+        const char * const err = Parrot_dlerror();
+        Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG,
+                "Symbol '%s' not found: %s\n", name, err ? err : "unknown reason");
+        PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
+    }
+    else {
+        /* At this point we have the symbol's address. We just need to build
+           a PMC with it so we can get and set the value */
+        PREG(1) = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
+        VTABLE_set_pointer(interp, PREG(1), p);
+    }
+    Parrot_str_free_cstring(name);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_dlvar_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    char * const  name      = Parrot_str_to_cstring(interp, (CONST(3)->u.string));
+    void *        dl_handle = NULL;
+    void *        p         = NULL;
+
+    if (!PMC_IS_NULL(PREG(2))
+    && PREG(2)->vtable->base_type == enum_class_ParrotLibrary
+    && VTABLE_defined(interp, PREG(2))) {
+        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
+    }
+
+    p = Parrot_dlsym(dl_handle, name);
+
+    if (p == NULL) {
+        const char * const err = Parrot_dlerror();
+        Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG,
+                "Symbol '%s' not found: %s\n", name, err ? err : "unknown reason");
+        PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
+    }
+    else {
+        /* At this point we have the symbol's address. We just need to build
+           a PMC with it so we can get and set the value */
+        PREG(1) = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
+        VTABLE_set_pointer(interp, PREG(1), p);
+    }
+    Parrot_str_free_cstring(name);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_compreg_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const compreg_hash = VTABLE_get_pmc_keyed_int(interp,
+            interp->iglobals, IGLOBALS_COMPREG_HASH);
+    VTABLE_set_pmc_keyed_str(interp, compreg_hash, SREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_compreg_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const compreg_hash = VTABLE_get_pmc_keyed_int(interp,
+            interp->iglobals, IGLOBALS_COMPREG_HASH);
+    VTABLE_set_pmc_keyed_str(interp, compreg_hash, CONST(1)->u.string, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_compreg_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const compreg_hash = VTABLE_get_pmc_keyed_int(interp,
+            interp->iglobals, IGLOBALS_COMPREG_HASH);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, compreg_hash, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_compreg_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const compreg_hash = VTABLE_get_pmc_keyed_int(interp,
+            interp->iglobals, IGLOBALS_COMPREG_HASH);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, compreg_hash, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_new_callback_p_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_make_cb(interp, PREG(2), PREG(3), SREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_new_callback_p_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_make_cb(interp, PREG(2), PREG(3), CONST(4)->u.string);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_annotations_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (interp->code->annotations) {
+        const opcode_t cur_pos = (cur_opcode + 2) - interp->code->base.data;
+        PREG(1) = PackFile_Annotations_lookup(interp, interp->code->annotations,
+                cur_pos, NULL);
+    }
+    else {
+        PREG(1) = Parrot_pmc_new(interp, enum_class_Hash);
+    }
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_annotations_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (interp->code->annotations) {
+        const opcode_t cur_pos = (cur_opcode + 3) - interp->code->base.data;
+        PREG(1) = PackFile_Annotations_lookup(interp, interp->code->annotations,
+                cur_pos, SREG(2));
+    }
+    else {
+        PREG(1) = PMCNULL;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_annotations_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (interp->code->annotations) {
+        const opcode_t cur_pos = (cur_opcode + 3) - interp->code->base.data;
+        PREG(1) = PackFile_Annotations_lookup(interp, interp->code->annotations,
+                cur_pos, CONST(2)->u.string);
+    }
+    else {
+        PREG(1) = PMCNULL;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_band_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) &= IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_band_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) &= cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_band_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) & IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_band_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] & IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_band_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) & cur_opcode[3];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_bor_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) |= IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_bor_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) |= cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_bor_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) | IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_bor_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] | IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_bor_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) | cur_opcode[3];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_shl_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = bit_shift_left(IREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_shl_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = bit_shift_left(IREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_shl_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = bit_shift_left(IREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_shl_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = bit_shift_left(cur_opcode[2], IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_shl_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = bit_shift_left(IREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_shr_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL signed_shift = -IREG(2);
+    IREG(1) = bit_shift_left(IREG(1), signed_shift);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_shr_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL signed_shift = -cur_opcode[2];
+    IREG(1) = bit_shift_left(IREG(1), signed_shift);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_shr_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL signed_shift = -IREG(3);
+    IREG(1) = bit_shift_left(IREG(2), signed_shift);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_shr_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL signed_shift = -IREG(3);
+    IREG(1) = bit_shift_left(cur_opcode[2], signed_shift);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_shr_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL signed_shift = -cur_opcode[3];
+    IREG(1) = bit_shift_left(IREG(2), signed_shift);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lsr_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const UINTVAL a = (UINTVAL)IREG(1);
+    const UINTVAL b = a >> IREG(2);
+    IREG(1) = (INTVAL)b;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_lsr_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const UINTVAL a = (UINTVAL)IREG(1);
+    const UINTVAL b = a >> cur_opcode[2];
+    IREG(1) = (INTVAL)b;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_lsr_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (INTVAL)((UINTVAL)IREG(2) >> IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lsr_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (INTVAL)((UINTVAL)cur_opcode[2] >> IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lsr_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (INTVAL)((UINTVAL)IREG(2) >> cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_bxor_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) ^= IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_bxor_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) ^= cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_bxor_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) ^ IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_bxor_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] ^ IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_bxor_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) ^ cur_opcode[3];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) == IREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] == IREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) == cur_opcode[2]) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (NREG(1) == NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_nc_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(1)->u.number == NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (NREG(1) == CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_equal(interp, SREG(1), SREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_equal(interp, CONST(1)->u.string, SREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_equal(interp, SREG(1), CONST(2)->u.string)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_is_equal(interp, PREG(1), PREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, IREG(2));
+
+    if (VTABLE_is_equal(interp, PREG(1), temp)) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
+
+    if (VTABLE_is_equal(interp, PREG(1), temp)) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    /*
+     * the get_number and get_string should probably
+     * be also replaced with code like above, as
+     * overriding the compare multi subs wouldn't
+     * have any effect with the current code
+     */
+    if (VTABLE_get_number(interp, PREG(1)) == NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    /*
+     * the get_number and get_string should probably
+     * be also replaced with code like above, as
+     * overriding the compare multi subs wouldn't
+     * have any effect with the current code
+     */
+    if (VTABLE_get_number(interp, PREG(1)) == CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_equal(interp, VTABLE_get_string(interp, PREG(1)), SREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_equal(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_is_equal_string(interp, PREG(1), PREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_is_equal_num(interp, PREG(1), PREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_addr_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (SREG(1) == SREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_addr_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(1)->u.string == SREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_addr_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (SREG(1) == CONST(2)->u.string) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_addr_sc_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(1)->u.string == CONST(2)->u.string) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_eq_addr_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(1) == PREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) != IREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] != IREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) != cur_opcode[2]) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (NREG(1) != NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_nc_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(1)->u.number != NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (NREG(1) != CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_not_equal(interp, SREG(1), SREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_not_equal(interp, CONST(1)->u.string, SREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_not_equal(interp, SREG(1), CONST(2)->u.string)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (!VTABLE_is_equal(interp, PREG(1), PREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, IREG(2));
+
+    if (!VTABLE_is_equal(interp, PREG(1), temp)) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
+
+    if (!VTABLE_is_equal(interp, PREG(1), temp)) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) != NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) != CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_not_equal(interp, VTABLE_get_string(interp, PREG(1)), SREG(2))) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_not_equal(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) != 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) != 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_addr_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (SREG(1) != SREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_addr_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(1)->u.string != SREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_addr_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (SREG(1) != CONST(2)->u.string) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_addr_sc_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(1)->u.string != CONST(2)->u.string) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ne_addr_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(1) != PREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) < IREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] < IREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) < cur_opcode[2]) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (NREG(1) < NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_nc_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(1)->u.number < NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (NREG(1) < CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, SREG(1), SREG(2)) < 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, CONST(1)->u.string, SREG(2)) < 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, SREG(1), CONST(2)->u.string) < 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp(interp, PREG(1), PREG(2)) < 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, IREG(2));
+
+    if (VTABLE_cmp(interp, PREG(1), temp) < 0) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
+
+    if (VTABLE_cmp(interp, PREG(1), temp) < 0) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) < NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) < CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), SREG(2)) < 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string) < 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) < 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_lt_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) < 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) <= IREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[1] <= IREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(1) <= cur_opcode[2]) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (NREG(1) <= NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_nc_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(1)->u.number <= NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (NREG(1) <= CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, SREG(1), SREG(2)) <= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, CONST(1)->u.string, SREG(2)) <= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, SREG(1), CONST(2)->u.string) <= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp(interp, PREG(1), PREG(2)) <= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, IREG(2));
+
+    if (VTABLE_cmp(interp, PREG(1), temp) <= 0) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
+
+    if (VTABLE_cmp(interp, PREG(1), temp) <= 0) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) <= NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) <= CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), SREG(2)) <= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string) <= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) <= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_le_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) <= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp(interp, PREG(1), PREG(2)) > 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, IREG(2));
+
+    if (VTABLE_cmp(interp, PREG(1), temp) > 0) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
+
+    if (VTABLE_cmp(interp, PREG(1), temp) > 0) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) > NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) > CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), SREG(2)) > 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string) > 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) > 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_gt_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) > 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp(interp, PREG(1), PREG(2)) >= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, IREG(2));
+
+    if (VTABLE_cmp(interp, PREG(1), temp) >= 0) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
+
+    if (VTABLE_cmp(interp, PREG(1), temp) >= 0) {
+        Parrot_pmc_free_temporary(interp, temp);return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+    Parrot_pmc_free_temporary(interp, temp);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) >= NREG(2)) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_number(interp, PREG(1)) >= CONST(2)->u.number) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), SREG(2)) >= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string) >= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) >= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ge_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) >= 0) {return (opcode_t *)cur_opcode + cur_opcode[3];
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_if_null_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PMC_IS_NULL(PREG(1))) {return (opcode_t *)cur_opcode + cur_opcode[2];
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_if_null_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (STRING_IS_NULL(SREG(1))) {return (opcode_t *)cur_opcode + cur_opcode[2];
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unless_null_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (!PMC_IS_NULL(PREG(1))) {return (opcode_t *)cur_opcode + cur_opcode[2];
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unless_null_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (!STRING_IS_NULL(SREG(1))) {return (opcode_t *)cur_opcode + cur_opcode[2];
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_cmp_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) < IREG(3) ? -1 :
+         IREG(2) > IREG(3) ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] < IREG(3) ? -1 :
+         cur_opcode[2] > IREG(3) ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) < cur_opcode[3] ? -1 :
+         IREG(2) > cur_opcode[3] ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) < NREG(3) ? -1 :
+         NREG(2) > NREG(3) ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.number < NREG(3) ? -1 :
+         CONST(2)->u.number > NREG(3) ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) < CONST(3)->u.number ? -1 :
+         NREG(2) > CONST(3)->u.number ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, SREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, CONST(2)->u.string, SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, SREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_cmp(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL l = VTABLE_get_integer(interp, PREG(2));
+    IREG(1) = l < IREG(3) ? -1 :
+         l > IREG(3) ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL l = VTABLE_get_integer(interp, PREG(2));
+    IREG(1) = l < cur_opcode[3] ? -1 :
+         l > cur_opcode[3] ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const FLOATVAL l = VTABLE_get_number(interp, PREG(2));
+    IREG(1) = l < NREG(3) ? -1 :
+         l > NREG(3) ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const FLOATVAL l = VTABLE_get_number(interp, PREG(2));
+    IREG(1) = l < CONST(3)->u.number ? -1 :
+         l > CONST(3)->u.number ? +1 :
+         0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING* const l = VTABLE_get_string(interp, PREG(2));
+    IREG(1) = Parrot_str_compare(interp, l, SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_i_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING* const l = VTABLE_get_string(interp, PREG(2));
+    IREG(1) = Parrot_str_compare(interp, l, CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_str_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_cmp_string(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_num_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_cmp_num(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_cmp_pmc_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_cmp_pmc(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_issame_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(2) == PREG(3))
+        IREG(1) = 1;
+    else
+        IREG(1) = VTABLE_is_same(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_issame_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = SREG(2) == SREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_issame_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.string == SREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_issame_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = SREG(2) == CONST(3)->u.string;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_issame_i_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.string == CONST(3)->u.string;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isntsame_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(2) == PREG(3))
+        IREG(1) = 0;
+    else
+        IREG(1) = !VTABLE_is_same(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isntsame_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = SREG(2) != SREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isntsame_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.string != SREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isntsame_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = SREG(2) != CONST(3)->u.string;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isntsame_i_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.string != CONST(3)->u.string;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_istrue_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_get_bool(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_isfalse_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = !VTABLE_get_bool(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_isnull_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_isnull_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(CONST(2)->u.key);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_isnull_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = STRING_IS_NULL(SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_isnull_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = STRING_IS_NULL(CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_isgt_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (VTABLE_cmp(interp, PREG(2), PREG(3)) > 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isge_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (VTABLE_cmp(interp, PREG(2), PREG(3)) >= 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) <= IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] <= IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) <= cur_opcode[3];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) <= NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.number <= NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) <= CONST(3)->u.number;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, SREG(2), SREG(3)) <= 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, CONST(2)->u.string, SREG(3)) <= 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, SREG(2), CONST(3)->u.string) <= 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isle_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (VTABLE_cmp(interp, PREG(2), PREG(3)) <= 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (IREG(2) < IREG(3)) ? 1 : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (cur_opcode[2] < IREG(3)) ? 1 : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (IREG(2) < cur_opcode[3]) ? 1 : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) < NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.number < NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) < CONST(3)->u.number;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, SREG(2), SREG(3)) < 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, CONST(2)->u.string, SREG(3)) < 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_compare(interp, SREG(2), CONST(3)->u.string) < 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_islt_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (VTABLE_cmp(interp, PREG(2), PREG(3)) < 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (IREG(2) == IREG(3)) ? 1 : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (cur_opcode[2] == IREG(3)) ? 1 : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (IREG(2) == cur_opcode[3]) ? 1 : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) == NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.number == NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) == CONST(3)->u.number;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (Parrot_str_equal(interp, SREG(2), SREG(3)) ? 1 : 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (Parrot_str_equal(interp, CONST(2)->u.string, SREG(3)) ? 1 : 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (Parrot_str_equal(interp, SREG(2), CONST(3)->u.string) ? 1 : 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_iseq_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (&PREG(2) == &PREG(3))
+        IREG(1) = 1;
+    else
+        IREG(1) = VTABLE_is_equal(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (IREG(2) == IREG(3)) ? 0 : 1;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (cur_opcode[2] == IREG(3)) ? 0 : 1;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (IREG(2) == cur_opcode[3]) ? 0 : 1;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) != NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(2)->u.number != NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = NREG(2) != CONST(3)->u.number;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (Parrot_str_not_equal(interp, SREG(2), SREG(3)) ? 1 : 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (Parrot_str_not_equal(interp, CONST(2)->u.string, SREG(3)) ? 1 : 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (Parrot_str_not_equal(interp, SREG(2), CONST(3)->u.string) ? 1 : 0);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isne_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (&PREG(2) == &PREG(3))
+        IREG(1) = 0;
+    else
+        IREG(1) = !VTABLE_is_equal(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_and_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) ? IREG(3) : IREG(2);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_and_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] ? IREG(3) : cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_and_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) ? cur_opcode[3] : IREG(2);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_and_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_logical_and(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_not_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = ! IREG(1);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_not_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = ! IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_not_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_logical_not(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_not_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_logical_not(interp, PREG(2), PREG(1));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_or_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) ? IREG(2) : IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_or_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] ? cur_opcode[2] : IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_or_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) ? IREG(2) : cur_opcode[3];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_or_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_logical_or(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_xor_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (IREG(2) && ! IREG(3)) ? IREG(2) : (IREG(3) && ! IREG(2)) ? IREG(3) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_xor_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (cur_opcode[2] && ! IREG(3)) ? cur_opcode[2] : (IREG(3) && ! cur_opcode[2]) ? IREG(3) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_xor_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (IREG(2) && ! cur_opcode[3]) ? IREG(2) : (cur_opcode[3] && ! IREG(2)) ? cur_opcode[3] : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_xor_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_logical_xor(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_print_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_io_printf(interp, INTVAL_FMT, (INTVAL)IREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_print_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_io_printf(interp, INTVAL_FMT, (INTVAL)cur_opcode[1]);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_print_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#ifdef PARROT_HAS_NEGATIVE_ZERO
+    Parrot_io_printf(interp, FLOATVAL_FMT, NREG(1));
+#else
+    /* Workaround for older msvcrt and openbsd. TT #313 */
+    if (Parrot_is_nzero(NREG(1))) {
+        Parrot_io_printf(interp, "-0");
+    }
+    else {
+        Parrot_io_printf(interp, FLOATVAL_FMT, NREG(1));
+    }
+#endif
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_print_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#ifdef PARROT_HAS_NEGATIVE_ZERO
+    Parrot_io_printf(interp, FLOATVAL_FMT, CONST(1)->u.number);
+#else
+    /* Workaround for older msvcrt and openbsd. TT #313 */
+    if (Parrot_is_nzero(CONST(1)->u.number)) {
+        Parrot_io_printf(interp, "-0");
+    }
+    else {
+        Parrot_io_printf(interp, FLOATVAL_FMT, CONST(1)->u.number);
+    }
+#endif
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_print_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const s = SREG(1);
+    if (s && Parrot_str_byte_length(interp, s))
+        Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_print_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const s = CONST(1)->u.string;
+    if (s && Parrot_str_byte_length(interp, s))
+        Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_print_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const p = PREG(1);
+    STRING * const s = (VTABLE_get_string(interp, p));
+    if (s)
+        Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_say_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_io_printf(interp, INTVAL_FMT "\n", (INTVAL)IREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_say_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_io_printf(interp, INTVAL_FMT "\n", (INTVAL)cur_opcode[1]);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_say_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#ifdef PARROT_HAS_NEGATIVE_ZERO
+    Parrot_io_printf(interp, FLOATVAL_FMT "\n", NREG(1));
+#else
+    /* Workaround for older msvcrt and openbsd. TT #313 */
+    if (Parrot_is_nzero(NREG(1))) {
+        Parrot_io_printf(interp, "-0\n");
+    }
+    else {
+        Parrot_io_printf(interp, FLOATVAL_FMT "\n", NREG(1));
+    }
+#endif
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_say_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#ifdef PARROT_HAS_NEGATIVE_ZERO
+    Parrot_io_printf(interp, FLOATVAL_FMT "\n", CONST(1)->u.number);
+#else
+    /* Workaround for older msvcrt and openbsd. TT #313 */
+    if (Parrot_is_nzero(CONST(1)->u.number)) {
+        Parrot_io_printf(interp, "-0\n");
+    }
+    else {
+        Parrot_io_printf(interp, FLOATVAL_FMT "\n", CONST(1)->u.number);
+    }
+#endif
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_say_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const s = SREG(1);
+    if (s && Parrot_str_byte_length(interp, s))
+        Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
+    Parrot_io_putps(interp, _PIO_STDOUT(interp), Parrot_str_new_constant(interp, "\n"));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_say_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const s = CONST(1)->u.string;
+    if (s && Parrot_str_byte_length(interp, s))
+        Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
+    Parrot_io_putps(interp, _PIO_STDOUT(interp), Parrot_str_new_constant(interp, "\n"));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_say_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const p = PREG(1);
+
+    if (PMC_IS_NULL(p)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 2,
+             EXCEPTION_UNEXPECTED_NULL,
+            "Null PMC in say");return (opcode_t *)handler;
+    }
+    else {
+        STRING * const s = VTABLE_get_string(interp, p);
+        if (s)
+            Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
+        Parrot_io_putps(interp, _PIO_STDOUT(interp), Parrot_str_new_constant(interp, "\n"));
+    }
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_print_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(1)) {
+        STRING * const s = Parrot_str_from_int(interp, IREG(2));
+        Parrot_io_putps(interp, PREG(1), s);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_print_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(1)) {
+        STRING * const s = Parrot_str_from_int(interp, cur_opcode[2]);
+        Parrot_io_putps(interp, PREG(1), s);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_print_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(1)) {
+        STRING * const s = Parrot_sprintf_c(interp, FLOATVAL_FMT, NREG(2));
+        Parrot_io_putps(interp, PREG(1), s);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_print_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(1)) {
+        STRING * const s = Parrot_sprintf_c(interp, FLOATVAL_FMT, CONST(2)->u.number);
+        Parrot_io_putps(interp, PREG(1), s);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_print_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (SREG(2) && PREG(1)) {
+        Parrot_io_putps(interp, PREG(1), SREG(2));
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_print_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(2)->u.string && PREG(1)) {
+        Parrot_io_putps(interp, PREG(1), CONST(2)->u.string);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_print_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PREG(2) && PREG(1)) {
+        STRING * const s = VTABLE_get_string(interp, PREG(2));
+        Parrot_io_putps(interp, PREG(1), s);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_getstdin_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = _PIO_STDIN(interp);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_getstdout_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = _PIO_STDOUT(interp);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_getstderr_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = _PIO_STDERR(interp);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_abs_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = abs(IREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_abs_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = fabs(NREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_abs_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = abs(IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_abs_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = fabs(NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_abs_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_absolute(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_abs_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_absolute(interp, PREG(2), PREG(1));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) += IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) += cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) += NREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) += CONST(2)->u.number;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_add(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_add_int(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_add_int(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_add_float(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_add_float(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) + IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] + IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) + cur_opcode[3];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = NREG(2) + NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = CONST(2)->u.number + NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = NREG(2) + CONST(3)->u.number;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_add(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_add_int(interp, PREG(2), IREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_add_int(interp, PREG(2), cur_opcode[3], PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_add_float(interp, PREG(2), NREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_add_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_dec_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1)--;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_dec_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1)--;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_dec_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_decrement(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_div_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL den = IREG(2);
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    IREG(1) /= den;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL den = cur_opcode[2];
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    IREG(1) /= den;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = NREG(2);
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) /= den;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = CONST(2)->u.number;
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) /= den;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_divide(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_divide_int(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_divide_int(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_divide_float(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_divide_float(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_div_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL den = IREG(3);
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    IREG(1) = IREG(2) / den;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL den = IREG(3);
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    IREG(1) = cur_opcode[2] / den;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL den = cur_opcode[3];
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    IREG(1) = IREG(2) / den;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL den = cur_opcode[3];
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    IREG(1) = cur_opcode[2] / den;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = NREG(3);
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = NREG(2) / den;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = NREG(3);
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = CONST(2)->u.number / den;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = CONST(3)->u.number;
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = NREG(2) / den;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_n_nc_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = CONST(3)->u.number;
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = CONST(2)->u.number / den;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_divide(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_divide_int(interp, PREG(2), IREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_divide_int(interp, PREG(2), cur_opcode[3], PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_divide_float(interp, PREG(2), NREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_div_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_divide_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL   den = IREG(2);
+    FLOATVAL f;
+
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+
+    f  = floor(IREG(1) / den);
+    IREG(1) = (INTVAL)f;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL   den = cur_opcode[2];
+    FLOATVAL f;
+
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+
+    f  = floor(IREG(1) / den);
+    IREG(1) = (INTVAL)f;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = NREG(2);
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = floor(NREG(1) / den);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = CONST(2)->u.number;
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = floor(NREG(1) / den);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_floor_divide(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_floor_divide_int(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_floor_divide_int(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_floor_divide_float(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_floor_divide_float(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fdiv_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL   den = IREG(3);
+    FLOATVAL f;
+
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+
+    f  = floor(IREG(2) / den);
+    IREG(1) = (INTVAL)f;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL   den = IREG(3);
+    FLOATVAL f;
+
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+
+    f  = floor(cur_opcode[2] / den);
+    IREG(1) = (INTVAL)f;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    INTVAL   den = cur_opcode[3];
+    FLOATVAL f;
+
+    if (den == 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+
+    f  = floor(IREG(2) / den);
+    IREG(1) = (INTVAL)f;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = NREG(3);
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = floor(NREG(2) / den);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = NREG(3);
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = floor(CONST(2)->u.number / den);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL den = CONST(3)->u.number;
+    if (FLOAT_IS_ZERO(den)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_DIV_BY_ZERO,
+            "Divide by zero");return (opcode_t *)handler;
+    }
+    NREG(1) = floor(NREG(2) / den);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_floor_divide(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_floor_divide_int(interp, PREG(2), IREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_floor_divide_int(interp, PREG(2), cur_opcode[3], PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_floor_divide_float(interp, PREG(2), NREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_fdiv_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_floor_divide_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ceil_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = ceil(NREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_ceil_i_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL f = ceil(NREG(2));
+    IREG(1)         = (INTVAL)f;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_ceil_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = ceil(NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_floor_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = floor(NREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_floor_i_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    FLOATVAL f = floor(NREG(2));
+    IREG(1)         = (INTVAL)f;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_floor_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = floor(NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_inc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1)++;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_inc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1)++;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_inc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_increment(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_mod_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = intval_mod(IREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = intval_mod(IREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = floatval_mod(NREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = floatval_mod(NREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_modulus(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_modulus_int(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_modulus_int(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_modulus_float(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_modulus_float(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mod_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = intval_mod(IREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = intval_mod(cur_opcode[2], IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = intval_mod(IREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = floatval_mod(NREG(2), NREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = floatval_mod(CONST(2)->u.number, NREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = floatval_mod(NREG(2), CONST(3)->u.number);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_modulus(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_modulus_int(interp, PREG(2), IREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_modulus_int(interp, PREG(2), cur_opcode[3], PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_modulus_float(interp, PREG(2), NREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mod_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_modulus_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) *= IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) *= cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) *= NREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) *= CONST(2)->u.number;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_multiply(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_multiply_int(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_multiply_int(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_multiply_float(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_multiply_float(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_mul_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) * IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] * IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) * cur_opcode[3];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = NREG(2) * NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = CONST(2)->u.number * NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = NREG(2) * CONST(3)->u.number;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_multiply(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_multiply_int(interp, PREG(2), IREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_multiply_int(interp, PREG(2), cur_opcode[3], PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_multiply_float(interp, PREG(2), NREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_mul_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_multiply_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_neg_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = - IREG(1);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_neg_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = - NREG(1);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_neg_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_neg(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_neg_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = - IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_neg_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = - NREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_neg_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_neg(interp, PREG(2), PREG(1));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) -= IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) -= cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) -= NREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) -= CONST(2)->u.number;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_subtract(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_subtract_int(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_subtract_int(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_subtract_float(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_subtract_float(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_sub_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) - IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2] - IREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2) - cur_opcode[3];
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = NREG(2) - NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = CONST(2)->u.number - NREG(3);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = NREG(2) - CONST(3)->u.number;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_subtract(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_subtract_int(interp, PREG(2), IREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_subtract_int(interp, PREG(2), cur_opcode[3], PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_subtract_float(interp, PREG(2), NREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sub_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_subtract_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sqrt_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = sqrt((FLOATVAL)NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_callmethodcc_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const object     = PREG(1);
+    STRING   * const meth       = SREG(2);
+    opcode_t * const next       =cur_opcode + 3;
+
+    PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
+    opcode_t *dest              = NULL;
+    PMC      * const signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
+    if (PMC_IS_NULL(method_pmc)) {
+        PMC * const _class = VTABLE_get_class(interp, object);
+        if (PMC_IS_NULL(_class)) {
+            dest = Parrot_ex_throw_from_op_args(interp, next,
+                EXCEPTION_METHOD_NOT_FOUND,
+                "Method '%Ss' not found for non-object", meth);
+        }
+        else {
+            dest = Parrot_ex_throw_from_op_args(interp, next,
+                EXCEPTION_METHOD_NOT_FOUND,
+                "Method '%Ss' not found for invocant of class '%Ss'", meth,
+                VTABLE_get_string(interp, _class));
+        }
+    }
+    else {
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
+        interp->current_cont   = NEED_CONTINUATION;
+        dest                   = VTABLE_invoke(interp, method_pmc, next);
+    }return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_callmethodcc_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const object     = PREG(1);
+    STRING   * const meth       = CONST(2)->u.string;
+    opcode_t * const next       =cur_opcode + 3;
+
+    PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
+    opcode_t *dest              = NULL;
+    PMC      * const signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
+    if (PMC_IS_NULL(method_pmc)) {
+        PMC * const _class = VTABLE_get_class(interp, object);
+        if (PMC_IS_NULL(_class)) {
+            dest = Parrot_ex_throw_from_op_args(interp, next,
+                EXCEPTION_METHOD_NOT_FOUND,
+                "Method '%Ss' not found for non-object", meth);
+        }
+        else {
+            dest = Parrot_ex_throw_from_op_args(interp, next,
+                EXCEPTION_METHOD_NOT_FOUND,
+                "Method '%Ss' not found for invocant of class '%Ss'", meth,
+                VTABLE_get_string(interp, _class));
+        }
+    }
+    else {
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
+        interp->current_cont   = NEED_CONTINUATION;
+        dest                   = VTABLE_invoke(interp, method_pmc, next);
+    }return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_callmethodcc_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t        *dest;
+    opcode_t * const next  =cur_opcode + 3;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, PREG(1));
+    interp->current_cont   = NEED_CONTINUATION;
+    dest                   = VTABLE_invoke(interp, PREG(2), next);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_callmethod_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const object     = PREG(1);
+    STRING   * const meth       = SREG(2);
+    opcode_t * const next       =cur_opcode + 4;
+
+    PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
+    opcode_t *dest              = NULL;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
+    if (PMC_IS_NULL(method_pmc)) {
+        dest = Parrot_ex_throw_from_op_args(interp, next, EXCEPTION_METHOD_NOT_FOUND,
+            "Method '%Ss' not found for invocant of class '%Ss'", meth,
+            VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
+    }
+    else {
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
+        interp->current_cont = PREG(3);
+        dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
+    }return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_callmethod_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const object     = PREG(1);
+    STRING   * const meth       = CONST(2)->u.string;
+    opcode_t * const next       =cur_opcode + 4;
+
+    PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
+    opcode_t *dest              = NULL;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
+    if (PMC_IS_NULL(method_pmc)) {
+        dest = Parrot_ex_throw_from_op_args(interp, next, EXCEPTION_METHOD_NOT_FOUND,
+            "Method '%Ss' not found for invocant of class '%Ss'", meth,
+            VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
+    }
+    else {
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
+        interp->current_cont = PREG(3);
+        dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
+    }return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_callmethod_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const object     = PREG(1);
+    PMC      * const method_pmc = PREG(2);
+    opcode_t * const next       =cur_opcode + 4;
+
+    opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, object);
+    interp->current_cont = PREG(3);
+    dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_tailcallmethod_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const next       =cur_opcode + 3;
+    PMC      * const object     = PREG(1);
+    STRING   * const meth       = SREG(2);
+    PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
+
+    opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    if (PMC_IS_NULL(method_pmc)) {
+        dest = Parrot_ex_throw_from_op_args(interp, next, EXCEPTION_METHOD_NOT_FOUND,
+            "Method '%Ss' not found for invocant of class '%Ss'", meth,
+            VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
+    }
+    else {
+        interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
+        PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
+        dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
+    }return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_tailcallmethod_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const next       =cur_opcode + 3;
+    PMC      * const object     = PREG(1);
+    STRING   * const meth       = CONST(2)->u.string;
+    PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
+
+    opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    if (PMC_IS_NULL(method_pmc)) {
+        dest = Parrot_ex_throw_from_op_args(interp, next, EXCEPTION_METHOD_NOT_FOUND,
+            "Method '%Ss' not found for invocant of class '%Ss'", meth,
+            VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
+    }
+    else {
+        interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
+        PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
+        dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
+    }return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_tailcallmethod_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const next       =cur_opcode + 3;
+    PMC      * const object     = PREG(1);
+    PMC      * const method_pmc = PREG(2);
+
+    opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
+
+    interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
+    PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
+
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, object);
+    dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);return (opcode_t *)dest;
+}
+
+opcode_t *
+Parrot_addmethod_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_add_method(interp, PREG(1), SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_addmethod_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_add_method(interp, PREG(1), CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_can_i_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_can(interp, PREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_can_i_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_can(interp, PREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_does_i_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = SREG(3) ? VTABLE_does(interp, PREG(2), SREG(3)) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_does_i_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(3)->u.string ? VTABLE_does(interp, PREG(2), CONST(3)->u.string) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_does_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PREG(3) ? VTABLE_does_pmc(interp, PREG(2), PREG(3)) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_does_i_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(3)->u.key ? VTABLE_does_pmc(interp, PREG(2), CONST(3)->u.key) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isa_i_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = SREG(3) ? VTABLE_isa(interp, PREG(2), SREG(3)) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isa_i_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(3)->u.string ? VTABLE_isa(interp, PREG(2), CONST(3)->u.string) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isa_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PREG(3) ? VTABLE_isa_pmc(interp, PREG(2), PREG(3)) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_isa_i_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = CONST(3)->u.key ? VTABLE_isa_pmc(interp, PREG(2), CONST(3)->u.key) : 0;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_newclass_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const name = Parrot_pmc_new(interp, enum_class_String);
+    VTABLE_set_string_native(interp, name, SREG(2));
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, name);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_newclass_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const name = Parrot_pmc_new(interp, enum_class_String);
+    VTABLE_set_string_native(interp, name, CONST(2)->u.string);
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, name);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_newclass_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_newclass_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, CONST(2)->u.key);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_subclass_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
+    opcode_t * const next         =cur_opcode + 3;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, PREG(2)));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_pmc_new(interp, enum_class_Class);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
+    opcode_t * const next         =cur_opcode + 3;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, CONST(2)->u.key));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_pmc_new(interp, enum_class_Class);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t * handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, PREG(2)));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_oo_newclass_from_str(interp, SREG(3));
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t * handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, CONST(2)->u.key));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_oo_newclass_from_str(interp, SREG(3));
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t * handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, PREG(2)));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_oo_newclass_from_str(interp, CONST(3)->u.string);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t * handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, CONST(2)->u.key));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_oo_newclass_from_str(interp, CONST(3)->u.string);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, PREG(2)));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, PREG(3));
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, CONST(2)->u.key));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, PREG(3));
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, PREG(2)));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, CONST(3)->u.key);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", VTABLE_get_string(interp, CONST(2)->u.key));return (opcode_t *)handler;
+    }
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, CONST(3)->u.key);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
+    opcode_t * const next         =cur_opcode + 3;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", SREG(2));return (opcode_t *)handler;
+    }
+
+    PREG(1) = Parrot_pmc_new(interp, enum_class_Class);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
+    opcode_t * const next         =cur_opcode + 3;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", CONST(2)->u.string);return (opcode_t *)handler;
+    }
+
+    PREG(1) = Parrot_pmc_new(interp, enum_class_Class);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", SREG(2));return (opcode_t *)handler;
+    }
+
+    PREG(1)  = Parrot_oo_newclass_from_str(interp, SREG(3));
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", CONST(2)->u.string);return (opcode_t *)handler;
+    }
+
+    PREG(1)  = Parrot_oo_newclass_from_str(interp, SREG(3));
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", SREG(2));return (opcode_t *)handler;
+    }
+
+    PREG(1)  = Parrot_oo_newclass_from_str(interp, CONST(3)->u.string);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", CONST(2)->u.string);return (opcode_t *)handler;
+    }
+
+    PREG(1)  = Parrot_oo_newclass_from_str(interp, CONST(3)->u.string);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", SREG(2));return (opcode_t *)handler;
+    }
+
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, PREG(3));
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", CONST(2)->u.string);return (opcode_t *)handler;
+    }
+
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, PREG(3));
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", SREG(2));return (opcode_t *)handler;
+    }
+
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, CONST(3)->u.key);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_subclass_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
+    opcode_t * const next         =cur_opcode + 4;
+
+    if (PMC_IS_NULL(parent_class)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' doesn't exist", CONST(2)->u.string);return (opcode_t *)handler;
+    }
+
+    PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, CONST(3)->u.key);
+    VTABLE_add_parent(interp, PREG(1), parent_class);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_get_class_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_oo_get_class_str(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_class_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_class_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_oo_get_class(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_class_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_oo_get_class(interp, CONST(2)->u.key);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_class_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_class(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_addparent_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_add_parent(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_removeparent_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_remove_parent(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_addrole_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_add_role(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_addattribute_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const class_name  = string_from_literal(interp, "Class");
+    STRING * const role_name   = string_from_literal(interp, "Role");
+
+    if (VTABLE_isa(interp, PREG(1), class_name) || VTABLE_isa(interp, PREG(1), role_name))
+        VTABLE_add_attribute(interp, PREG(1), SREG(2), PMCNULL);
+    else {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+            EXCEPTION_INVALID_OPERATION,
+            "Cannot add attribute to non-class");return (opcode_t *)handler;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_addattribute_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const class_name  = string_from_literal(interp, "Class");
+    STRING * const role_name   = string_from_literal(interp, "Role");
+
+    if (VTABLE_isa(interp, PREG(1), class_name) || VTABLE_isa(interp, PREG(1), role_name))
+        VTABLE_add_attribute(interp, PREG(1), CONST(2)->u.string, PMCNULL);
+    else {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+            EXCEPTION_INVALID_OPERATION,
+            "Cannot add attribute to non-class");return (opcode_t *)handler;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_removeattribute_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_remove_attribute(interp, PREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_removeattribute_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_remove_attribute(interp, PREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_getattribute_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_attr_str(interp, PREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_getattribute_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_attr_str(interp, PREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_getattribute_p_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_attr_keyed(interp, PREG(2), PREG(3), SREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_getattribute_p_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_attr_keyed(interp, PREG(2), CONST(3)->u.key, SREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_getattribute_p_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_attr_keyed(interp, PREG(2), PREG(3), CONST(4)->u.string);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_getattribute_p_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_attr_keyed(interp, PREG(2), CONST(3)->u.key, CONST(4)->u.string);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_setattribute_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_attr_str(interp, PREG(1), SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_setattribute_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_attr_str(interp, PREG(1), CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_setattribute_p_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_attr_keyed(interp, PREG(1), PREG(2), SREG(3), PREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_setattribute_p_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_attr_keyed(interp, PREG(1), CONST(2)->u.key, SREG(3), PREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_setattribute_p_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_attr_keyed(interp, PREG(1), PREG(2), CONST(3)->u.string, PREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_setattribute_p_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_attr_keyed(interp, PREG(1), CONST(2)->u.key, CONST(3)->u.string, PREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_inspect_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_inspect(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_inspect_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_inspect(interp, CONST(2)->u.key);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_inspect_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_inspect_str(interp, PREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_inspect_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_inspect_str(interp, CONST(2)->u.key, SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_inspect_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_inspect_str(interp, PREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_inspect_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_inspect_str(interp, CONST(2)->u.key, CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = SREG(2);
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, PMCNULL);
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new(interp, type);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_new_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = CONST(2)->u.string;
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, PMCNULL);
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new(interp, type);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_new_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = SREG(2);
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, PREG(3));
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init(interp, type, PREG(3));
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = CONST(2)->u.string;
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, PREG(3));
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init(interp, type, PREG(3));
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = SREG(2);
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, CONST(3)->u.key);
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init(interp, type, CONST(3)->u.key);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = CONST(2)->u.string;
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, CONST(3)->u.key);
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init(interp, type, CONST(3)->u.key);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const name_key = PREG(2);
+    PMC * const _class   = Parrot_oo_get_class(interp, name_key);
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, PMCNULL);
+    else {
+        const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new(interp, type);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_new_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const name_key = CONST(2)->u.key;
+    PMC * const _class   = Parrot_oo_get_class(interp, name_key);
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, PMCNULL);
+    else {
+        const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new(interp, type);
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_new_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const name_key = PREG(2);
+    PMC * const _class   = Parrot_oo_get_class(interp, name_key);
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, PREG(3));
+    else {
+        const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init(interp, type, PREG(3));
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const name_key = CONST(2)->u.key;
+    PMC * const _class   = Parrot_oo_get_class(interp, name_key);
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, PREG(3));
+    else {
+        const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init(interp, type, PREG(3));
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const name_key = PREG(2);
+    PMC * const _class   = Parrot_oo_get_class(interp, name_key);
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, CONST(3)->u.key);
+    else {
+        const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init(interp, type, CONST(3)->u.key);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const name_key = CONST(2)->u.key;
+    PMC * const _class   = Parrot_oo_get_class(interp, name_key);
+
+    if (!PMC_IS_NULL(_class))
+        PREG(1) = VTABLE_instantiate(interp, _class, CONST(3)->u.key);
+    else {
+        const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+        if (type <= 0) {
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init(interp, type, CONST(3)->u.key);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_root_new_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const key      = PREG(2);
+    PMC * const root_ns  = interp->root_namespace;
+    PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
+    PMC * classobj       = PMCNULL;
+
+    if (!PMC_IS_NULL(ns))
+        classobj = Parrot_oo_get_class(interp, ns);
+    if (!PMC_IS_NULL(classobj))
+        PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+    else {
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_root_new_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const key      = CONST(2)->u.key;
+    PMC * const root_ns  = interp->root_namespace;
+    PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
+    PMC * classobj       = PMCNULL;
+
+    if (!PMC_IS_NULL(ns))
+        classobj = Parrot_oo_get_class(interp, ns);
+    if (!PMC_IS_NULL(classobj))
+        PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+    else {
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 3,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_root_new_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const key      = PREG(2);
+    PMC * const root_ns  = interp->root_namespace;
+    PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
+    PMC * classobj       = PMCNULL;
+
+    if (!PMC_IS_NULL(ns))
+        classobj = Parrot_oo_get_class(interp, ns);
+    if (!PMC_IS_NULL(classobj))
+        PREG(1) = VTABLE_instantiate(interp, classobj, PREG(3));
+    else {
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_root_new_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const key      = CONST(2)->u.key;
+    PMC * const root_ns  = interp->root_namespace;
+    PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
+    PMC * classobj       = PMCNULL;
+
+    if (!PMC_IS_NULL(ns))
+        classobj = Parrot_oo_get_class(interp, ns);
+    if (!PMC_IS_NULL(classobj))
+        PREG(1) = VTABLE_instantiate(interp, classobj, PREG(3));
+    else {
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_root_new_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const key      = PREG(2);
+    PMC * const root_ns  = interp->root_namespace;
+    PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
+    PMC * classobj       = PMCNULL;
+
+    if (!PMC_IS_NULL(ns))
+        classobj = Parrot_oo_get_class(interp, ns);
+    if (!PMC_IS_NULL(classobj))
+        PREG(1) = VTABLE_instantiate(interp, classobj, CONST(3)->u.key);
+    else {
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_root_new_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const key      = CONST(2)->u.key;
+    PMC * const root_ns  = interp->root_namespace;
+    PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
+    PMC * classobj       = PMCNULL;
+
+    if (!PMC_IS_NULL(ns))
+        classobj = Parrot_oo_get_class(interp, ns);
+    if (!PMC_IS_NULL(classobj))
+        PREG(1) = VTABLE_instantiate(interp, classobj, CONST(3)->u.key);
+    else {
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_typeof_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_name(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_typeof_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_class(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_repr_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_get_repr(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_method_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const resume =cur_opcode + 4;
+    PREG(1) = VTABLE_find_method(interp, PREG(2), SREG(3));
+    if (PMC_IS_NULL(PREG(1)) || !VTABLE_defined(interp, PREG(1))) {
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, resume,
+            EXCEPTION_METHOD_NOT_FOUND,
+            "Method '%Ss' not found for invocant of class '%Ss'", SREG(3),
+            VTABLE_get_string(interp, VTABLE_get_class(interp, PREG(2))));return (opcode_t *)dest;
+    }return (opcode_t *)resume;
+}
+
+opcode_t *
+Parrot_find_method_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t * const resume =cur_opcode + 4;
+    PREG(1) = VTABLE_find_method(interp, PREG(2), CONST(3)->u.string);
+    if (PMC_IS_NULL(PREG(1)) || !VTABLE_defined(interp, PREG(1))) {
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, resume,
+            EXCEPTION_METHOD_NOT_FOUND,
+            "Method '%Ss' not found for invocant of class '%Ss'", CONST(3)->u.string,
+            VTABLE_get_string(interp, VTABLE_get_class(interp, PREG(2))));return (opcode_t *)dest;
+    }return (opcode_t *)resume;
+}
+
+opcode_t *
+Parrot_defined_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_defined_i_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined_keyed_int(interp, PREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_defined_i_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined_keyed_int(interp, PREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_defined_i_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined_keyed(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_defined_i_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined_keyed(interp, PREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_exists_i_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_exists_keyed_int(interp, PREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_exists_i_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_exists_keyed_int(interp, PREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_exists_i_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0: VTABLE_exists_keyed(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_exists_i_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = PMC_IS_NULL(PREG(2)) ? 0: VTABLE_exists_keyed(interp, PREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_delete_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_delete_keyed(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_delete_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_delete_keyed(interp, PREG(1), CONST(2)->u.key);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_delete_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_delete_keyed_int(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_delete_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_delete_keyed_int(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_elements_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_elements(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_push_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_push_integer(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_push_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_push_integer(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_push_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_push_float(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_push_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_push_float(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_push_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_push_string(interp, PREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_push_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_push_string(interp, PREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_push_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_push_pmc(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_pop_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_pop_integer(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_pop_n_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = VTABLE_pop_float(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_pop_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_pop_string(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_pop_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_pop_pmc(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unshift_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_unshift_integer(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unshift_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_unshift_integer(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unshift_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_unshift_float(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unshift_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_unshift_float(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unshift_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_unshift_string(interp, PREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unshift_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_unshift_string(interp, PREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_unshift_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_unshift_pmc(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_shift_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_shift_integer(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_shift_n_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = VTABLE_shift_float(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_shift_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_shift_string(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_shift_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_shift_pmc(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_splice_p_p_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_splice(interp, PREG(1), PREG(2), IREG(3), IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_splice_p_p_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_splice(interp, PREG(1), PREG(2), cur_opcode[3], IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_splice_p_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_splice(interp, PREG(1), PREG(2), IREG(3), cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_splice_p_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_splice(interp, PREG(1), PREG(2), cur_opcode[3], cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_setprop_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_setprop(interp, PREG(1), SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_setprop_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_setprop(interp, PREG(1), CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_getprop_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_getprop(interp, PREG(3), SREG(2));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_getprop_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_getprop(interp, PREG(3), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_delprop_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_delprop(interp, PREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_delprop_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_delprop(interp, PREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_prophash_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_getprops(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_freeze_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_freeze(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_thaw_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_thaw(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_thaw_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_thaw(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_add_multi_s_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_mmd_add_multi_from_long_sig(interp, SREG(1), SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_multi_sc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_mmd_add_multi_from_long_sig(interp, CONST(1)->u.string, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_multi_s_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_mmd_add_multi_from_long_sig(interp, SREG(1), CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_add_multi_sc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_mmd_add_multi_from_long_sig(interp, CONST(1)->u.string, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_find_multi_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_mmd_find_multi_from_long_sig(interp, SREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_find_multi_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_mmd_find_multi_from_long_sig(interp, CONST(2)->u.string, SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_find_multi_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_mmd_find_multi_from_long_sig(interp, SREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_find_multi_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_mmd_find_multi_from_long_sig(interp, CONST(2)->u.string, CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_register_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_pmc_gc_register(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_unregister_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_pmc_gc_unregister(interp, PREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_box_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+    VTABLE_set_integer_native(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_box_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+    VTABLE_set_integer_native(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_box_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
+    VTABLE_set_number_native(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_box_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
+    VTABLE_set_number_native(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_box_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
+    VTABLE_set_string_native(interp, PREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_box_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
+    VTABLE_set_string_native(interp, PREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_iter_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_iter(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_morph_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_morph(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_morph_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_morph(interp, PREG(1), CONST(2)->u.key);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_clone_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    /* cloning a NULL STRING produces an empty STRING; TT #964 */
+    SREG(1) = STRING_IS_NULL(SREG(2))
+       ? Parrot_str_new(interp, NULL, 0)
+       : SREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_clone_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    /* cloning a NULL STRING produces an empty STRING; TT #964 */
+    SREG(1) = STRING_IS_NULL(CONST(2)->u.string)
+       ? Parrot_str_new(interp, NULL, 0)
+       : CONST(2)->u.string;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_i_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (INTVAL)(NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_i_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (INTVAL)(CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_to_int(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_to_int(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = NREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = CONST(2)->u.number;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_n_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = (FLOATVAL)IREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = (FLOATVAL)cur_opcode[2];
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_n_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = Parrot_str_to_num(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_n_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = Parrot_str_to_num(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_n_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = VTABLE_get_number(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_get_string(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = SREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = CONST(2)->u.string;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_from_int(interp, IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_from_int(interp, cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_s_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_from_num(interp, NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_s_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_from_num(interp, CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = CONST(2)->u.key;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = PREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_native(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_native(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_native(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_native(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_native(interp, PREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_native(interp, PREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_get_integer(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_assign_pmc(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_native(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_native(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_native(interp, PREG(1), NREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_native(interp, PREG(1), CONST(2)->u.number);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_assign_string_native(interp, PREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_assign_string_native(interp, PREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = SREG(2);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_assign_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = CONST(2)->u.string;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_setref_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_pmc(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_deref_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_p_ki_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_keyed_int(interp, PREG(1), IREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_keyed_int(interp, PREG(1), cur_opcode[2], IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_ki_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_keyed_int(interp, PREG(1), IREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_keyed_int(interp, PREG(1), cur_opcode[2], cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_ki_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_keyed_int(interp, PREG(1), IREG(2), NREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kic_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_keyed_int(interp, PREG(1), cur_opcode[2], NREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_ki_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_keyed_int(interp, PREG(1), IREG(2), CONST(3)->u.number);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kic_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_keyed_int(interp, PREG(1), cur_opcode[2], CONST(3)->u.number);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_ki_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_keyed_int(interp, PREG(1), IREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_keyed_int(interp, PREG(1), cur_opcode[2], SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_ki_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_keyed_int(interp, PREG(1), IREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_keyed_int(interp, PREG(1), cur_opcode[2], CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_ki_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_pmc_keyed_int(interp, PREG(1), IREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_pmc_keyed_int(interp, PREG(1), cur_opcode[2], PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_i_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_get_integer_keyed_int(interp, PREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_i_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_get_integer_keyed_int(interp, PREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_n_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = VTABLE_get_number_keyed_int(interp, PREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_n_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = VTABLE_get_number_keyed_int(interp, PREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_s_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_get_string_keyed_int(interp, PREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_s_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_get_string_keyed_int(interp, PREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_k_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_keyed(interp, PREG(1), PREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_keyed(interp, PREG(1), CONST(2)->u.key, IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_k_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_keyed(interp, PREG(1), PREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_integer_keyed(interp, PREG(1), CONST(2)->u.key, cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_k_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_keyed(interp, PREG(1), PREG(2), NREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_keyed(interp, PREG(1), CONST(2)->u.key, NREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_k_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_keyed(interp, PREG(1), PREG(2), CONST(3)->u.number);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kc_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_number_keyed(interp, PREG(1), CONST(2)->u.key, CONST(3)->u.number);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_k_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_keyed(interp, PREG(1), PREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_keyed(interp, PREG(1), CONST(2)->u.key, SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_k_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_keyed(interp, PREG(1), PREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_keyed(interp, PREG(1), CONST(2)->u.key, CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_k_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_pmc_keyed(interp, PREG(1), PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_kc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_pmc_keyed(interp, PREG(1), CONST(2)->u.key, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_i_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_get_integer_keyed(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_i_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = VTABLE_get_integer_keyed(interp, PREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_n_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = VTABLE_get_number_keyed(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_n_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = VTABLE_get_number_keyed(interp, PREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_s_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_get_string_keyed(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_s_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_get_string_keyed(interp, PREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_p_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_clone_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_clone(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_clone_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_clone_pmc(interp, PREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_clone_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_clone_pmc(interp, PREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_copy_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (PMC_IS_NULL(PREG(1))) {
+        opcode_t * const dest =cur_opcode + 3;
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
+                EXCEPTION_NULL_REG_ACCESS, "Null PMC in copy");return (opcode_t *)handler;
+    }
+    else {
+        PMC   * const clone = VTABLE_clone(interp, PREG(2));
+        /* Preserve the metadata on the destination. */
+        PMC   * const meta  = VTABLE_getprops(interp, PREG(1));
+
+        /* avoid leaks and unreachable memory by destroying the destination PMC */
+        Parrot_pmc_destroy(interp, PREG(1));
+
+        /* the source PMC knows how to clone itself, but we must reuse the
+         * destination header */
+        memmove(PREG(1), clone, sizeof (PMC));
+
+        /* don't let the clone's destruction destroy the destination's data */
+        PObj_custom_destroy_CLEAR(clone);
+        PMC_data(clone)        = NULL;
+        PMC_metadata(clone)    = NULL;
+
+        /* Restore metadata. */
+        if (!PMC_IS_NULL(meta)) {
+            PMC * const iter = VTABLE_get_iter(interp, meta);
+            while (VTABLE_get_bool(interp, iter)) {
+                STRING * const key = VTABLE_shift_string(interp, iter);
+                PMC * const value  = VTABLE_get_pmc_keyed_str(interp, meta, key);
+                VTABLE_setprop(interp, PREG(1), key, value);
+            }
+        }
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_null_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = STRINGNULL;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_null_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = 0;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_null_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = PMCNULL;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_null_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = 0;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_ord_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = string_ord(interp, SREG(2), 0);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_ord_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = string_ord(interp, CONST(2)->u.string, 0);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_ord_i_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = string_ord(interp, SREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ord_i_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = string_ord(interp, CONST(2)->u.string, IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ord_i_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = string_ord(interp, SREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_ord_i_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = string_ord(interp, CONST(2)->u.string, cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_chr_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const s = string_chr(interp, (UINTVAL)IREG(2));
+    SREG(1) = s;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_chr_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const s = string_chr(interp, (UINTVAL)cur_opcode[2]);
+    SREG(1) = s;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_chopn_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_chopn(interp, SREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_chopn_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_chopn(interp, CONST(2)->u.string, IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_chopn_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_chopn(interp, SREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_chopn_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_chopn(interp, CONST(2)->u.string, cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_concat_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_concat(interp, SREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_concat_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_concat(interp, SREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_concat_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_concatenate(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_concat_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_concatenate_str(interp, PREG(1), SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_concat_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_concatenate_str(interp, PREG(1), CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_concat_s_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_concat(interp, SREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_concat_s_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_concat(interp, CONST(2)->u.string, SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_concat_s_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_concat(interp, SREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_concat_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_concatenate_str(interp, PREG(2), SREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_concat_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_concatenate_str(interp, PREG(2), CONST(3)->u.string, PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_concat_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_concatenate(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_repeat_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(3) < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_NEG_REPEAT,
+                "Cannot repeat with negative arg");return (opcode_t *)handler;
+    }
+    SREG(1) = Parrot_str_repeat(interp, SREG(2), (UINTVAL)IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_repeat_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(3) < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_NEG_REPEAT,
+                "Cannot repeat with negative arg");return (opcode_t *)handler;
+    }
+    SREG(1) = Parrot_str_repeat(interp, CONST(2)->u.string, (UINTVAL)IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_repeat_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[3] < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_NEG_REPEAT,
+                "Cannot repeat with negative arg");return (opcode_t *)handler;
+    }
+    SREG(1) = Parrot_str_repeat(interp, SREG(2), (UINTVAL)cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_repeat_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[3] < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_NEG_REPEAT,
+                "Cannot repeat with negative arg");return (opcode_t *)handler;
+    }
+    SREG(1) = Parrot_str_repeat(interp, CONST(2)->u.string, (UINTVAL)cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_repeat_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (IREG(3) < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_NEG_REPEAT,
+                "Cannot repeat with negative arg");return (opcode_t *)handler;
+    }
+    PREG(1) = VTABLE_repeat_int(interp, PREG(2), IREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_repeat_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (cur_opcode[3] < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_NEG_REPEAT,
+                "Cannot repeat with negative arg");return (opcode_t *)handler;
+    }
+    PREG(1) = VTABLE_repeat_int(interp, PREG(2), cur_opcode[3], PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_repeat_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (VTABLE_get_integer(interp, PREG(3)) < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_NEG_REPEAT,
+                "Cannot repeat with negative arg");return (opcode_t *)handler;
+    }
+    PREG(1) = VTABLE_repeat(interp, PREG(2), PREG(3), PREG(1));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_repeat_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_repeat_int(interp, PREG(1), IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_repeat_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_repeat_int(interp, PREG(1), cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_repeat_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_i_repeat(interp, PREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_length_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_length(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_length_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_length(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_bytelength_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_byte_length(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_bytelength_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_byte_length(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_pin_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_str_pin(interp, SREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_unpin_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    Parrot_str_unpin(interp, SREG(1));
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_substr_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL len = Parrot_str_byte_length(interp, SREG(2));
+    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), len);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_substr_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL len = Parrot_str_byte_length(interp, CONST(2)->u.string);
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), len);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_substr_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL len = Parrot_str_byte_length(interp, SREG(2));
+    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], len);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_substr_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL len = Parrot_str_byte_length(interp, CONST(2)->u.string);
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], len);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_substr_s_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_p_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_substr_str(interp, PREG(2), IREG(3), IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_p_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_substr_str(interp, PREG(2), cur_opcode[3], IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_substr_str(interp, PREG(2), IREG(3), cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_substr_s_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = VTABLE_substr_str(interp, PREG(2), cur_opcode[3], cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_replace_s_s_i_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), IREG(4), SREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_sc_i_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, IREG(3), IREG(4), SREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_s_ic_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], IREG(4), SREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_sc_ic_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, cur_opcode[3], IREG(4), SREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_s_i_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), cur_opcode[4], SREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_sc_i_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, IREG(3), cur_opcode[4], SREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_s_ic_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], cur_opcode[4], SREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_sc_ic_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, cur_opcode[3], cur_opcode[4], SREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_s_i_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), IREG(4), CONST(5)->u.string);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_sc_i_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, IREG(3), IREG(4), CONST(5)->u.string);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_s_ic_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], IREG(4), CONST(5)->u.string);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_sc_ic_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, cur_opcode[3], IREG(4), CONST(5)->u.string);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_s_i_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), cur_opcode[4], CONST(5)->u.string);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_sc_i_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, IREG(3), cur_opcode[4], CONST(5)->u.string);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_s_ic_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], cur_opcode[4], CONST(5)->u.string);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_replace_s_sc_ic_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, cur_opcode[3], cur_opcode[4], CONST(5)->u.string);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_index_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (SREG(2) && SREG(3)) ? Parrot_str_find_index(interp, SREG(2), SREG(3), 0) : -1;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_index_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (CONST(2)->u.string && SREG(3)) ? Parrot_str_find_index(interp, CONST(2)->u.string, SREG(3), 0) : -1;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_index_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (SREG(2) && CONST(3)->u.string) ? Parrot_str_find_index(interp, SREG(2), CONST(3)->u.string, 0) : -1;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_index_i_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (CONST(2)->u.string && CONST(3)->u.string) ? Parrot_str_find_index(interp, CONST(2)->u.string, CONST(3)->u.string, 0) : -1;
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_index_i_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (SREG(2) && SREG(3)) ? Parrot_str_find_index(interp, SREG(2), SREG(3), IREG(4)) : -1;
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_index_i_sc_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (CONST(2)->u.string && SREG(3)) ? Parrot_str_find_index(interp, CONST(2)->u.string, SREG(3), IREG(4)) : -1;
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_index_i_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (SREG(2) && CONST(3)->u.string) ? Parrot_str_find_index(interp, SREG(2), CONST(3)->u.string, IREG(4)) : -1;
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_index_i_sc_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (CONST(2)->u.string && CONST(3)->u.string) ? Parrot_str_find_index(interp, CONST(2)->u.string, CONST(3)->u.string, IREG(4)) : -1;
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_index_i_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (SREG(2) && SREG(3)) ? Parrot_str_find_index(interp, SREG(2), SREG(3), cur_opcode[4]) : -1;
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_index_i_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (CONST(2)->u.string && SREG(3)) ? Parrot_str_find_index(interp, CONST(2)->u.string, SREG(3), cur_opcode[4]) : -1;
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_index_i_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (SREG(2) && CONST(3)->u.string) ? Parrot_str_find_index(interp, SREG(2), CONST(3)->u.string, cur_opcode[4]) : -1;
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_index_i_sc_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = (CONST(2)->u.string && CONST(3)->u.string) ? Parrot_str_find_index(interp, CONST(2)->u.string, CONST(3)->u.string, cur_opcode[4]) : -1;
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_sprintf_s_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1)=Parrot_psprintf(interp, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sprintf_s_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1)=Parrot_psprintf(interp, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_sprintf_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_string_native(interp, PREG(1),
+        Parrot_psprintf(interp, VTABLE_get_string(interp, PREG(2)), PREG(3)));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_new_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_new_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_stringinfo_i_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (SREG(2) == NULL)
+        IREG(1) = 0;
+    else {
+        switch (IREG(3)) {
+          case STRINGINFO_HEADER:
+            IREG(1) = PTR2UINTVAL(SREG(2));
+            break;
+          case STRINGINFO_STRSTART:
+            IREG(1) = PTR2UINTVAL(SREG(2)->strstart);
+            break;
+          case STRINGINFO_BUFLEN:
+            IREG(1) = Buffer_buflen(SREG(2));
+            break;
+          case STRINGINFO_FLAGS:
+            IREG(1) = PObj_get_FLAGS(SREG(2));
+            break;
+          case STRINGINFO_BUFUSED:
+            IREG(1) = SREG(2)->bufused;
+            break;
+          case STRINGINFO_STRLEN:
+            IREG(1) = SREG(2)->strlen;
+            break;
+          default:
+            {
+                opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "stringinfo: unknown info type: %d", IREG(3));return (opcode_t *)handler;
+            }
+        }
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_stringinfo_i_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(2)->u.string == NULL)
+        IREG(1) = 0;
+    else {
+        switch (IREG(3)) {
+          case STRINGINFO_HEADER:
+            IREG(1) = PTR2UINTVAL(CONST(2)->u.string);
+            break;
+          case STRINGINFO_STRSTART:
+            IREG(1) = PTR2UINTVAL(CONST(2)->u.string->strstart);
+            break;
+          case STRINGINFO_BUFLEN:
+            IREG(1) = Buffer_buflen(CONST(2)->u.string);
+            break;
+          case STRINGINFO_FLAGS:
+            IREG(1) = PObj_get_FLAGS(CONST(2)->u.string);
+            break;
+          case STRINGINFO_BUFUSED:
+            IREG(1) = CONST(2)->u.string->bufused;
+            break;
+          case STRINGINFO_STRLEN:
+            IREG(1) = CONST(2)->u.string->strlen;
+            break;
+          default:
+            {
+                opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "stringinfo: unknown info type: %d", IREG(3));return (opcode_t *)handler;
+            }
+        }
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_stringinfo_i_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (SREG(2) == NULL)
+        IREG(1) = 0;
+    else {
+        switch (cur_opcode[3]) {
+          case STRINGINFO_HEADER:
+            IREG(1) = PTR2UINTVAL(SREG(2));
+            break;
+          case STRINGINFO_STRSTART:
+            IREG(1) = PTR2UINTVAL(SREG(2)->strstart);
+            break;
+          case STRINGINFO_BUFLEN:
+            IREG(1) = Buffer_buflen(SREG(2));
+            break;
+          case STRINGINFO_FLAGS:
+            IREG(1) = PObj_get_FLAGS(SREG(2));
+            break;
+          case STRINGINFO_BUFUSED:
+            IREG(1) = SREG(2)->bufused;
+            break;
+          case STRINGINFO_STRLEN:
+            IREG(1) = SREG(2)->strlen;
+            break;
+          default:
+            {
+                opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "stringinfo: unknown info type: %d", cur_opcode[3]);return (opcode_t *)handler;
+            }
+        }
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_stringinfo_i_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (CONST(2)->u.string == NULL)
+        IREG(1) = 0;
+    else {
+        switch (cur_opcode[3]) {
+          case STRINGINFO_HEADER:
+            IREG(1) = PTR2UINTVAL(CONST(2)->u.string);
+            break;
+          case STRINGINFO_STRSTART:
+            IREG(1) = PTR2UINTVAL(CONST(2)->u.string->strstart);
+            break;
+          case STRINGINFO_BUFLEN:
+            IREG(1) = Buffer_buflen(CONST(2)->u.string);
+            break;
+          case STRINGINFO_FLAGS:
+            IREG(1) = PObj_get_FLAGS(CONST(2)->u.string);
+            break;
+          case STRINGINFO_BUFUSED:
+            IREG(1) = CONST(2)->u.string->bufused;
+            break;
+          case STRINGINFO_STRLEN:
+            IREG(1) = CONST(2)->u.string->strlen;
+            break;
+          default:
+            {
+                opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "stringinfo: unknown info type: %d", cur_opcode[3]);return (opcode_t *)handler;
+            }
+        }
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_upcase_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_upcase(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_upcase_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_upcase(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_downcase_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_downcase(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_downcase_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_downcase(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_titlecase_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_titlecase(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_titlecase_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_titlecase(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_join_s_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_join(interp, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_join_s_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_join(interp, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_split_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_str_split(interp, SREG(2), SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_split_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_str_split(interp, CONST(2)->u.string, SREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_split_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_str_split(interp, SREG(2), CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_split_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = Parrot_str_split(interp, CONST(2)->u.string, CONST(3)->u.string);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_charset_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_charset_number_of_str(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_charset_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_charset_number_of_str(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_charsetname_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_charset_name(interp, IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_charsetname_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_charset_name(interp, cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_charset_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL n = Parrot_charset_number(interp, SREG(2));
+    if (n < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_INVALID_CHARTYPE,
+                "charset '%Ss' not found", SREG(2));return (opcode_t *)handler;
+    }
+    IREG(1) = n;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_charset_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL n = Parrot_charset_number(interp, CONST(2)->u.string);
+    if (n < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_INVALID_CHARTYPE,
+                "charset '%Ss' not found", CONST(2)->u.string);return (opcode_t *)handler;
+    }
+    IREG(1) = n;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_trans_charset_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_change_charset(interp, SREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_trans_charset_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_change_charset(interp, CONST(2)->u.string, IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_trans_charset_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_change_charset(interp, SREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_trans_charset_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_change_charset(interp, CONST(2)->u.string, cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_encoding_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_encoding_number_of_str(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_encoding_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_encoding_number_of_str(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_encodingname_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_encoding_name(interp, IREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_encodingname_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_encoding_name(interp, cur_opcode[2]);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_encoding_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL n = Parrot_encoding_number(interp, SREG(2));
+    if (n < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
+                "encoding '%Ss' not found", SREG(2));return (opcode_t *)handler;
+    }
+    IREG(1) = n;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_encoding_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const INTVAL n = Parrot_encoding_number(interp, CONST(2)->u.string);
+    if (n < 0) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
+                "encoding '%Ss' not found", CONST(2)->u.string);return (opcode_t *)handler;
+    }
+    IREG(1) = n;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_trans_encoding_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_change_encoding(interp, SREG(2), IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_trans_encoding_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_change_encoding(interp, CONST(2)->u.string, IREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_trans_encoding_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_change_encoding(interp, SREG(2), cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_trans_encoding_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_change_encoding(interp, CONST(2)->u.string, cur_opcode[3]);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_is_cclass_i_i_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_is_cclass(interp, IREG(2), SREG(3), IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_is_cclass_i_ic_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_is_cclass(interp, cur_opcode[2], SREG(3), IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_is_cclass_i_i_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_is_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_is_cclass_i_ic_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_is_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4));
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_is_cclass_i_i_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_is_cclass(interp, IREG(2), SREG(3), cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_is_cclass_i_ic_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_is_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_is_cclass_i_i_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_is_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_is_cclass_i_ic_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_is_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4]);
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_find_cclass_i_i_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, IREG(2), SREG(3), IREG(4), IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_ic_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], SREG(3), IREG(4), IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_i_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4), IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_ic_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4), IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_i_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, IREG(2), SREG(3), cur_opcode[4], IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_ic_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4], IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_i_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4], IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_ic_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4], IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_i_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, IREG(2), SREG(3), IREG(4), cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_ic_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], SREG(3), IREG(4), cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_i_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4), cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_ic_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4), cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_i_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, IREG(2), SREG(3), cur_opcode[4], cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_ic_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4], cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_i_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4], cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_cclass_i_ic_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4], cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_i_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), SREG(3), IREG(4), IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_ic_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], SREG(3), IREG(4), IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_i_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4), IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_ic_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4), IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_i_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), SREG(3), cur_opcode[4], IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_ic_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4], IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_i_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4], IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_ic_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4], IREG(5));
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_i_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), SREG(3), IREG(4), cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_ic_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], SREG(3), IREG(4), cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_i_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4), cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_ic_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4), cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_i_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), SREG(3), cur_opcode[4], cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_ic_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4], cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_i_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4], cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_find_not_cclass_i_ic_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4], cur_opcode[5]);
+
+return (opcode_t *)cur_opcode + 6;}
+
+opcode_t *
+Parrot_escape_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_escape(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_compose_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_compose(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_compose_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    SREG(1) = Parrot_str_compose(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_spawnw_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_Run_OS_Command(interp, SREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_spawnw_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_Run_OS_Command(interp, CONST(2)->u.string);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_spawnw_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_Run_OS_Command_Argv(interp, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_err_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = errno;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_err_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const char * const tmp = strerror(errno);
+    SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_err_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const char * const tmp = strerror(IREG(2));
+    SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_err_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const char * const tmp = strerror(cur_opcode[2]);
+    SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_time_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    IREG(1) = Parrot_intval_time();
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_time_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    NREG(1) = Parrot_floatval_time();
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_sleep_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t *next =cur_opcode + 2;
+    if (IREG(1) < 0) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NEG_SLEEP,
+            "Cannot go back in time");return (opcode_t *)handler;
+    }
+    next = (opcode_t *)Parrot_cx_schedule_sleep(interp, (FLOATVAL) IREG(1), next);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_sleep_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t *next =cur_opcode + 2;
+    if (cur_opcode[1] < 0) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NEG_SLEEP,
+            "Cannot go back in time");return (opcode_t *)handler;
+    }
+    next = (opcode_t *)Parrot_cx_schedule_sleep(interp, (FLOATVAL) cur_opcode[1], next);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_sleep_n(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t *next =cur_opcode + 2;
+    if (NREG(1) < 0.0) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NEG_SLEEP,
+            "Cannot go back in time");return (opcode_t *)handler;
+    }
+    next = (opcode_t *)Parrot_cx_schedule_sleep(interp, NREG(1), next);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_sleep_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t *next =cur_opcode + 2;
+    if (CONST(1)->u.number < 0.0) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, next,
+            EXCEPTION_NEG_SLEEP,
+            "Cannot go back in time");return (opcode_t *)handler;
+    }
+    next = (opcode_t *)Parrot_cx_schedule_sleep(interp, CONST(1)->u.number, next);return (opcode_t *)next;
+}
+
+opcode_t *
+Parrot_store_lex_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC     * const ctx      = CURRENT_CONTEXT(interp);
+    STRING  * const lex_name = SREG(1);
+    PMC     * const lex_pad  = Parrot_find_pad(interp, lex_name, ctx);
+
+    if (PMC_IS_NULL(lex_pad)) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_LEX_NOT_FOUND,
+                "Lexical '%Ss' not found", lex_name);return (opcode_t *)handler;
+    }
+    VTABLE_set_pmc_keyed_str(interp, lex_pad, lex_name, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_store_lex_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC     * const ctx      = CURRENT_CONTEXT(interp);
+    STRING  * const lex_name = CONST(1)->u.string;
+    PMC     * const lex_pad  = Parrot_find_pad(interp, lex_name, ctx);
+
+    if (PMC_IS_NULL(lex_pad)) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_LEX_NOT_FOUND,
+                "Lexical '%Ss' not found", lex_name);return (opcode_t *)handler;
+    }
+    VTABLE_set_pmc_keyed_str(interp, lex_pad, lex_name, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_store_dynamic_lex_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING  * const lex_name = SREG(1);
+    PMC     * const ctx      =
+        Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
+    PMC     * const lex_pad  =
+        PMC_IS_NULL(ctx)
+            ? PMCNULL
+            : Parrot_find_dynamic_pad(interp, lex_name, ctx);
+
+    if (PMC_IS_NULL(lex_pad)) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_LEX_NOT_FOUND,
+                "Lexical '%Ss' not found in dynamic scope", lex_name);return (opcode_t *)handler;
+    }
+    VTABLE_set_pmc_keyed_str(interp, lex_pad, lex_name, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_store_dynamic_lex_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING  * const lex_name = CONST(1)->u.string;
+    PMC     * const ctx      =
+        Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
+    PMC     * const lex_pad  =
+        PMC_IS_NULL(ctx)
+            ? PMCNULL
+            : Parrot_find_dynamic_pad(interp, lex_name, ctx);
+
+    if (PMC_IS_NULL(lex_pad)) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_LEX_NOT_FOUND,
+                "Lexical '%Ss' not found in dynamic scope", lex_name);return (opcode_t *)handler;
+    }
+    VTABLE_set_pmc_keyed_str(interp, lex_pad, lex_name, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_lex_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC     * const ctx      = CURRENT_CONTEXT(interp);
+    STRING  * const lex_name = SREG(2);
+    PMC     * const lex_pad  = Parrot_find_pad(interp, lex_name, ctx);
+
+    PMC * const result =
+        PMC_IS_NULL(lex_pad)
+            ? NULL
+            : VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
+    if (!result) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_LEX_NOT_FOUND,
+                "Lexical '%Ss' not found", lex_name);return (opcode_t *)handler;
+    }
+    PREG(1) = result;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_lex_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC     * const ctx      = CURRENT_CONTEXT(interp);
+    STRING  * const lex_name = CONST(2)->u.string;
+    PMC     * const lex_pad  = Parrot_find_pad(interp, lex_name, ctx);
+
+    PMC * const result =
+        PMC_IS_NULL(lex_pad)
+            ? NULL
+            : VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
+    if (!result) {
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_LEX_NOT_FOUND,
+                "Lexical '%Ss' not found", lex_name);return (opcode_t *)handler;
+    }
+    PREG(1) = result;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_dynamic_lex_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING  * const lex_name = SREG(2);
+    PMC     * const ctx      =
+        Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
+    PMC     * const lex_pad  =
+        PMC_IS_NULL(ctx)
+            ? PMCNULL
+            : Parrot_find_dynamic_pad(interp, lex_name, ctx);
+    PMC     * const result =
+        PMC_IS_NULL(lex_pad)
+            ? PMCNULL
+            : VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
+    PREG(1) = result;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_dynamic_lex_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING  * const lex_name = CONST(2)->u.string;
+    PMC     * const ctx      =
+        Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
+    PMC     * const lex_pad  =
+        PMC_IS_NULL(ctx)
+            ? PMCNULL
+            : Parrot_find_dynamic_pad(interp, lex_name, ctx);
+    PMC     * const result =
+        PMC_IS_NULL(lex_pad)
+            ? PMCNULL
+            : VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
+    PREG(1) = result;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_caller_lex_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING  * const lex_name = SREG(2);
+    PMC     * ctx            = CURRENT_CONTEXT(interp);
+    PMC     * result         = PMCNULL;
+
+    for (ctx = Parrot_pcc_get_caller_ctx(interp, ctx);
+            !PMC_IS_NULL(ctx) && PMC_IS_NULL(result);
+            ctx = Parrot_pcc_get_caller_ctx(interp, ctx))
+    {
+        PMC * const lex_pad = Parrot_find_pad(interp, lex_name, ctx);
+        if (!PMC_IS_NULL(lex_pad)) {
+            result = VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
+        }
+        if (!result) result = PMCNULL;
+    }
+    PREG(1) = result;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_caller_lex_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING  * const lex_name = CONST(2)->u.string;
+    PMC     * ctx            = CURRENT_CONTEXT(interp);
+    PMC     * result         = PMCNULL;
+
+    for (ctx = Parrot_pcc_get_caller_ctx(interp, ctx);
+            !PMC_IS_NULL(ctx) && PMC_IS_NULL(result);
+            ctx = Parrot_pcc_get_caller_ctx(interp, ctx))
+    {
+        PMC * const lex_pad = Parrot_find_pad(interp, lex_name, ctx);
+        if (!PMC_IS_NULL(lex_pad)) {
+            result = VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
+        }
+        if (!result) result = PMCNULL;
+    }
+    PREG(1) = result;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_namespace_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PREG(1) = cur_ns;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_get_namespace_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PMC * const ns     = Parrot_get_namespace_keyed(interp, cur_ns, PREG(2));
+
+    PREG(1) = PMC_IS_NULL(ns) ? PMCNULL : ns;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_namespace_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PMC * const ns     = Parrot_get_namespace_keyed(interp, cur_ns, CONST(2)->u.key);
+
+    PREG(1) = PMC_IS_NULL(ns) ? PMCNULL : ns;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_hll_namespace_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    PREG(1) = hll_ns;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_get_hll_namespace_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    if (PMC_IS_NULL(hll_ns))
+        PREG(1) = PMCNULL;
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, hll_ns, PREG(2));
+        PREG(1) = ns;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_hll_namespace_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    if (PMC_IS_NULL(hll_ns))
+        PREG(1) = PMCNULL;
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, hll_ns, CONST(2)->u.key);
+        PREG(1) = ns;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_root_namespace_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    PREG(1) = root_ns;
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_get_root_namespace_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    if (PMC_IS_NULL(root_ns))
+        PREG(1) = PMCNULL;
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, root_ns, PREG(2));
+        PREG(1) = ns;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_root_namespace_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    if (PMC_IS_NULL(root_ns))
+        PREG(1) = PMCNULL;
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, root_ns, CONST(2)->u.key);
+        PREG(1) = ns;
+    }
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_global_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PREG(1) = Parrot_find_global_op(interp, cur_ns, SREG(2),cur_opcode + 3);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_global_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PREG(1) = Parrot_find_global_op(interp, cur_ns, CONST(2)->u.string,cur_opcode + 3);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_global_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    if (PMC_IS_NULL(cur_ns)) {
+        PREG(1) = PMCNULL;
+    }
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, cur_ns, PREG(2));
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, SREG(3),cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_global_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    if (PMC_IS_NULL(cur_ns)) {
+        PREG(1) = PMCNULL;
+    }
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, cur_ns, CONST(2)->u.key);
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, SREG(3),cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_global_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    if (PMC_IS_NULL(cur_ns)) {
+        PREG(1) = PMCNULL;
+    }
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, cur_ns, PREG(2));
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, CONST(3)->u.string,cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_global_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    if (PMC_IS_NULL(cur_ns)) {
+        PREG(1) = PMCNULL;
+    }
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, cur_ns, CONST(2)->u.key);
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, CONST(3)->u.string,cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_hll_global_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    PREG(1) = Parrot_find_global_op(interp, hll_ns, SREG(2),cur_opcode + 3);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_hll_global_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    PREG(1) = Parrot_find_global_op(interp, hll_ns, CONST(2)->u.string,cur_opcode + 3);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_hll_global_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    if (PMC_IS_NULL(hll_ns)) {
+        PREG(1) = hll_ns;
+    }
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, hll_ns, PREG(2));
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, SREG(3),cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_hll_global_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    if (PMC_IS_NULL(hll_ns)) {
+        PREG(1) = hll_ns;
+    }
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, hll_ns, CONST(2)->u.key);
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, SREG(3),cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_hll_global_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    if (PMC_IS_NULL(hll_ns)) {
+        PREG(1) = hll_ns;
+    }
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, hll_ns, PREG(2));
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, CONST(3)->u.string,cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_hll_global_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    if (PMC_IS_NULL(hll_ns)) {
+        PREG(1) = hll_ns;
+    }
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, hll_ns, CONST(2)->u.key);
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, CONST(3)->u.string,cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_root_global_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    PREG(1) = Parrot_find_global_op(interp, root_ns, SREG(2),cur_opcode + 3);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_root_global_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    PREG(1) = Parrot_find_global_op(interp, root_ns, CONST(2)->u.string,cur_opcode + 3);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_root_global_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    if (PMC_IS_NULL(root_ns))
+        PREG(1) = PMCNULL;
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, root_ns, PREG(2));
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, SREG(3),cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_root_global_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    if (PMC_IS_NULL(root_ns))
+        PREG(1) = PMCNULL;
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, root_ns, CONST(2)->u.key);
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, SREG(3),cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_root_global_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    if (PMC_IS_NULL(root_ns))
+        PREG(1) = PMCNULL;
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, root_ns, PREG(2));
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, CONST(3)->u.string,cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_get_root_global_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    if (PMC_IS_NULL(root_ns))
+        PREG(1) = PMCNULL;
+    else {
+        PMC * const ns = Parrot_get_namespace_keyed(interp, root_ns, CONST(2)->u.key);
+        if (PMC_IS_NULL(ns))
+            PREG(1) = PMCNULL;
+        else
+            PREG(1) = Parrot_find_global_op(interp, ns, CONST(3)->u.string,cur_opcode + 4);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_global_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    Parrot_set_global(interp, cur_ns, SREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_global_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    Parrot_set_global(interp, cur_ns, CONST(1)->u.string, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_global_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PMC * const ns     = Parrot_make_namespace_keyed(interp, cur_ns, PREG(1));
+
+    Parrot_set_global(interp, ns, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_global_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PMC * const ns     = Parrot_make_namespace_keyed(interp, cur_ns, CONST(1)->u.key);
+
+    Parrot_set_global(interp, ns, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_global_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PMC * const ns     = Parrot_make_namespace_keyed(interp, cur_ns, PREG(1));
+
+    Parrot_set_global(interp, ns, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_global_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
+    PMC * const ns     = Parrot_make_namespace_keyed(interp, cur_ns, CONST(1)->u.key);
+
+    Parrot_set_global(interp, ns, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_hll_global_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    Parrot_set_global(interp, hll_ns, SREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_hll_global_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    Parrot_set_global(interp, hll_ns, CONST(1)->u.string, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_hll_global_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    PMC * const ns     = Parrot_make_namespace_keyed(interp, hll_ns, PREG(1));
+
+    Parrot_set_global(interp, ns, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_hll_global_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    PMC * const ns     = Parrot_make_namespace_keyed(interp, hll_ns, CONST(1)->u.key);
+
+    Parrot_set_global(interp, ns, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_hll_global_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    PMC * const ns     = Parrot_make_namespace_keyed(interp, hll_ns, PREG(1));
+
+    Parrot_set_global(interp, ns, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_hll_global_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
+    PMC * const ns     = Parrot_make_namespace_keyed(interp, hll_ns, CONST(1)->u.key);
+
+    Parrot_set_global(interp, ns, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_root_global_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    Parrot_set_global(interp, root_ns, SREG(1), PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_root_global_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    Parrot_set_global(interp, root_ns, CONST(1)->u.string, PREG(2));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_set_root_global_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    PMC * const ns      = Parrot_make_namespace_keyed(interp, root_ns, PREG(1));
+
+    Parrot_set_global(interp, ns, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_root_global_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    PMC * const ns      = Parrot_make_namespace_keyed(interp, root_ns, CONST(1)->u.key);
+
+    Parrot_set_global(interp, ns, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_root_global_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    PMC * const ns      = Parrot_make_namespace_keyed(interp, root_ns, PREG(1));
+
+    Parrot_set_global(interp, ns, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_set_root_global_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const root_ns = interp->root_namespace;
+    PMC * const ns      = Parrot_make_namespace_keyed(interp, root_ns, CONST(1)->u.key);
+
+    Parrot_set_global(interp, ns, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_find_name_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (!SREG(2)) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Tried to find null name");return (opcode_t *)handler;
+    }
+
+    PREG(1) = Parrot_find_name_op(interp, SREG(2),cur_opcode + 3);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_name_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    if (!CONST(2)->u.string) {
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Tried to find null name");return (opcode_t *)handler;
+    }
+
+    PREG(1) = Parrot_find_name_op(interp, CONST(2)->u.string,cur_opcode + 3);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_sub_not_null_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t *dest =cur_opcode + 3;
+    PMC *sub = Parrot_find_name_op(interp, SREG(2), dest);
+
+    if (PMC_IS_NULL(sub)) {
+        opcode_t *handler;
+        Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), dest);
+        handler = Parrot_ex_throw_from_op_args(interp, dest,
+                       EXCEPTION_GLOBAL_NOT_FOUND,
+                       "Could not find sub %Ss", SREG(2));return (opcode_t *)handler;
+    }
+
+    PREG(1) = sub;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_sub_not_null_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    opcode_t *dest =cur_opcode + 3;
+    PMC *sub = Parrot_find_name_op(interp, CONST(2)->u.string, dest);
+
+    if (PMC_IS_NULL(sub)) {
+        opcode_t *handler;
+        Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), dest);
+        handler = Parrot_ex_throw_from_op_args(interp, dest,
+                       EXCEPTION_GLOBAL_NOT_FOUND,
+                       "Could not find sub %Ss", CONST(2)->u.string);return (opcode_t *)handler;
+    }
+
+    PREG(1) = sub;
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_trap(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#if defined(__GNUC__) && defined(i386)
+    __asm__("int3");       /* opcode 0xcc */
+#endif
+#if defined(__GNUC__) && defined(PPC)
+    __asm__("trap");       /* opcode tr 31, 0, 0 */
+#endif
+
+return (opcode_t *)cur_opcode + 1;}
+
+opcode_t *
+Parrot_set_label_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    VTABLE_set_pointer(interp, PREG(1), (CUR_OPCODE + cur_opcode[2]));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_label_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    void * const ptr = VTABLE_get_pointer(interp, PREG(2));
+    IREG(1) =  PTR2INTVAL(ptr);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_fetch_p_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, PREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, PREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3]);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_ic_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_ic_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3]);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), SREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), SREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3));
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_fetch_p_pc_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string);
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+        VTABLE_set_pmc_keyed(interp, PREG(2), PREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, PREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+        VTABLE_set_pmc_keyed(interp, CONST(2)->u.key, PREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+        VTABLE_set_pmc_keyed(interp, PREG(2), CONST(3)->u.key, PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+        VTABLE_set_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key, PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+        VTABLE_set_pmc_keyed(interp, PREG(2), PREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, PREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+        VTABLE_set_pmc_keyed(interp, CONST(2)->u.key, PREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+        VTABLE_set_pmc_keyed(interp, PREG(2), CONST(3)->u.key, PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+        VTABLE_set_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key, PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_int(interp, PREG(2), IREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_int(interp, PREG(2), cur_opcode[3], PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3]);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3], PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_int(interp, PREG(2), IREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_ic_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_int(interp, PREG(2), cur_opcode[3], PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_ic_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3]);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3], PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), SREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_str(interp, PREG(2), SREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string, PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, PREG(4));
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, PREG(4)));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string, PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), SREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_str(interp, PREG(2), SREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3));
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3), PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string, PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_vivify_p_pc_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string);
+
+    if (PMC_IS_NULL(PREG(1))) {
+        PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
+        if (!PMC_IS_NULL(classobj))
+            PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
+        else {
+            const INTVAL type = Parrot_pmc_get_type(interp, CONST(4)->u.key);
+            if (type <= 0) {
+                opcode_t *dest = Parrot_ex_throw_from_op_args(
+                    interp,cur_opcode + 5, EXCEPTION_NO_CLASS,
+                    "Class '%Ss' not found", VTABLE_get_repr(interp, CONST(4)->u.key));return (opcode_t *)dest;
+            }
+
+            PREG(1) = Parrot_pmc_new(interp, type);
+        }
+
+        VTABLE_set_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string, PREG(1));
+    }
+
+return (opcode_t *)cur_opcode + 5;}
+
+opcode_t *
+Parrot_new_p_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = SREG(2);
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class)) {
+        PMC *initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+        VTABLE_set_integer_native(interp, initial, IREG(3));
+        PREG(1) = VTABLE_instantiate(interp, _class, initial);
+    }
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, IREG(3));
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = CONST(2)->u.string;
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class)) {
+        PMC *initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+        VTABLE_set_integer_native(interp, initial, IREG(3));
+        PREG(1) = VTABLE_instantiate(interp, _class, initial);
+    }
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, IREG(3));
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = SREG(2);
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class)) {
+        PMC *initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+        VTABLE_set_integer_native(interp, initial, cur_opcode[3]);
+        PREG(1) = VTABLE_instantiate(interp, _class, initial);
+    }
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, cur_opcode[3]);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    STRING * const name   = CONST(2)->u.string;
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class)) {
+        PMC *initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+        VTABLE_set_integer_native(interp, initial, cur_opcode[3]);
+        PREG(1) = VTABLE_instantiate(interp, _class, initial);
+    }
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);return (opcode_t *)dest;
+        }
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, cur_opcode[3]);
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const  name_key = PREG(2);
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const _class = Parrot_oo_get_class(interp, name_key);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, IREG(3));
+            PREG(1) = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, IREG(3));
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_pc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const  name_key = CONST(2)->u.key;
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const _class = Parrot_oo_get_class(interp, name_key);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, IREG(3));
+            PREG(1) = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, IREG(3));
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const  name_key = PREG(2);
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const _class = Parrot_oo_get_class(interp, name_key);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, cur_opcode[3]);
+            PREG(1) = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, cur_opcode[3]);
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_new_p_pc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const  name_key = CONST(2)->u.key;
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const _class = Parrot_oo_get_class(interp, name_key);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, cur_opcode[3]);
+            PREG(1) = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, cur_opcode[3]);
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_root_new_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const  name_key = PREG(2);
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const root_ns  = interp->root_namespace;
+        PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, name_key);
+        PMC * const _class   = Parrot_oo_get_class(interp, ns);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, IREG(3));
+            PREG(1) = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, IREG(3));
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_root_new_p_pc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const  name_key = CONST(2)->u.key;
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const root_ns  = interp->root_namespace;
+        PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, name_key);
+        PMC * const _class   = Parrot_oo_get_class(interp, ns);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, IREG(3));
+            PREG(1) = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, IREG(3));
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_root_new_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const  name_key = PREG(2);
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const root_ns  = interp->root_namespace;
+        PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, name_key);
+        PMC * const _class   = Parrot_oo_get_class(interp, ns);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, cur_opcode[3]);
+            PREG(1) = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, cur_opcode[3]);
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_root_new_p_pc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    PMC * const  name_key = CONST(2)->u.key;
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const root_ns  = interp->root_namespace;
+        PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, name_key);
+        PMC * const _class   = Parrot_oo_get_class(interp, ns);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, cur_opcode[3]);
+            PREG(1) = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        PREG(1) = Parrot_pmc_new_init_int(interp, type, cur_opcode[3]);
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp,cur_opcode + 4,
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));return (opcode_t *)dest;
+    }
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_find_codepoint_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#if PARROT_HAS_ICU
+    UErrorCode   err       = U_ZERO_ERROR;
+    char * const cstr      = Parrot_str_to_cstring(interp, SREG(2));
+    UChar32      codepoint = u_charFromName(U_EXTENDED_CHAR_NAME, cstr, &err);
+    Parrot_str_free_cstring(cstr);
+    IREG(1) = U_SUCCESS(err) ? (INTVAL) codepoint : -1;
+#else
+    opcode_t * const dest =cur_opcode + 3;
+    Parrot_ex_throw_from_op_args(interp, dest, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_find_codepoint_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#if PARROT_HAS_ICU
+    UErrorCode   err       = U_ZERO_ERROR;
+    char * const cstr      = Parrot_str_to_cstring(interp, CONST(2)->u.string);
+    UChar32      codepoint = u_charFromName(U_EXTENDED_CHAR_NAME, cstr, &err);
+    Parrot_str_free_cstring(cstr);
+    IREG(1) = U_SUCCESS(err) ? (INTVAL) codepoint : -1;
+#else
+    opcode_t * const dest =cur_opcode + 3;
+    Parrot_ex_throw_from_op_args(interp, dest, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_finalize_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    /* Go to the next op after loop unrolling */
+    opcode_t * const dest =cur_opcode + 2;
+    PMC *eh = PMCNULL;
+    if (!PMC_IS_NULL(PREG(1))) {
+        /* If isa ExceptionHandler, use it. If isa Exception, get its active handler */
+        if (VTABLE_isa(interp, PREG(1), Parrot_str_new_constant(interp, "ExceptionHandler")))
+            eh = PREG(1);
+        else if (VTABLE_isa(interp, PREG(1), Parrot_str_new_constant(interp, "Exception"))) {
+            PMC *iter = VTABLE_get_attr_str(interp,
+                                            PREG(1), Parrot_str_new_constant(interp, "handler_iter"));
+            if (!PMC_IS_NULL(iter))
+                eh = VTABLE_get_pmc_keyed_int(interp, iter, -1);
+        }
+    }
+    if (!PMC_IS_NULL(eh)) {
+        /* Get the runloop_id from the continuation and jump to it. */
+        Parrot_runloop *rl = interp->current_runloop;
+        INTVAL rid;
+        Parrot_pcc_invoke_method_from_c_args(interp,
+                                             eh, Parrot_str_new_constant(interp, "rid"),
+                                             "->I", &rid);
+        while (rl && rl->id != rid)
+            rl = rl->prev;
+        if (rl) {
+            if (rl != interp->current_runloop) {
+                rl->handler_start = dest;
+                longjmp(rl->resume, 3);
+            }
+        }
+        else
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION, "missing runloop");
+    }
+
+return (opcode_t *)cur_opcode + 2;}
+
+opcode_t *
+Parrot_finalize_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    /* Go to the next op after loop unrolling */
+    opcode_t * const dest =cur_opcode + 2;
+    PMC *eh = PMCNULL;
+    if (!PMC_IS_NULL(CONST(1)->u.key)) {
+        /* If isa ExceptionHandler, use it. If isa Exception, get its active handler */
+        if (VTABLE_isa(interp, CONST(1)->u.key, Parrot_str_new_constant(interp, "ExceptionHandler")))
+            eh = CONST(1)->u.key;
+        else if (VTABLE_isa(interp, CONST(1)->u.key, Parrot_str_new_constant(interp, "Exception"))) {
+            PMC *iter = VTABLE_get_attr_str(interp,
+                                            CONST(1)->u.key, Parrot_str_new_constant(interp, "handler_iter"));
+            if (!PMC_IS_NULL(iter))
+                eh = VTABLE_get_pmc_keyed_int(interp, iter, -1);
+        }
+    }
+    if (!PMC_IS_NULL(eh)) {
+        /* Get the runloop_id from the continuation and jump to it. */
+        Parrot_runloop *rl = interp->current_runloop;
+        INTVAL rid;
+        Parrot_pcc_invoke_method_from_c_args(interp,
+                                             eh, Parrot_str_new_constant(interp, "rid"),
+                                             "->I", &rid);
+        while (rl && rl->id != rid)
+            rl = rl->prev;
+        if (rl) {
+            if (rl != interp->current_runloop) {
+                rl->handler_start = dest;
+                longjmp(rl->resume, 3);
+            }
+        }
+        else
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION, "missing runloop");
+    }
+
+return (opcode_t *)cur_opcode + 2;}
+
+
+/*
+** op lib descriptor:
+*/
+
+static op_lib_t core_op_lib = {
+  "core",               /* name */
+  "",             /* suffix */
+  PARROT_FUNCTION_CORE,                       /* core_type = PARROT_XX_CORE */
+  0,                                /* flags */
+  2,    /* major_version */
+  4,    /* minor_version */
+  0,    /* patch_version */
+  1083,             /* op_count */
+  core_op_info_table,       /* op_info_table */
+  core_op_func_table,       /* op_func_table */
+  get_op          /* op_code() */ 
+};
+
+/*
+** Op lookup function:
+*/
+
+#define OP_HASH_SIZE 3041
+
+/* we could calculate a prime somewhat bigger than
+ * n of fullnames + n of names
+ * for now this should be ok
+ *
+ * look up an op_code: at first call to op_code() a hash
+ * of short and full opcode names is created
+ * hash functions are from imcc, thanks to Melvin.
+ */
+
+
+typedef struct hop {
+    op_info_t * info;
+    struct hop *next;
+} HOP;
+static HOP **hop;
+
+static void hop_init(PARROT_INTERP);
+static size_t hash_str(const char *str);
+static void store_op(PARROT_INTERP, op_info_t *info, int full);
+
+/* XXX on changing interpreters, this should be called,
+   through a hook */
+
+static void hop_deinit(PARROT_INTERP);
+
+/*
+ * find a short or full opcode
+ * usage:
+ *
+ * interp->op_lib->op_code("set", 0)
+ * interp->op_lib->op_code("set_i_i", 1)
+ *
+ * returns >= 0 (found idx into info_table), -1 if not
+ */
+
+static size_t hash_str(const char *str) {
+    size_t      key = 0;
+    const char *s   = str;
+
+    while (*s) {
+        key *= 65599;
+        key += *s++;
+    }
+
+    return key;
+}
+
+static void store_op(PARROT_INTERP, op_info_t *info, int full) {
+    HOP * const p     = mem_gc_allocate_zeroed_typed(interp, HOP);
+    const size_t hidx =
+        hash_str(full ? info->full_name : info->name) % OP_HASH_SIZE;
+
+    p->info   = info;
+    p->next   = hop[hidx];
+    hop[hidx] = p;
+}
+static int get_op(PARROT_INTERP, const char * name, int full) {
+    const HOP * p;
+    const size_t hidx = hash_str(name) % OP_HASH_SIZE;
+    if (!hop) {
+        hop = mem_gc_allocate_n_zeroed_typed(interp, OP_HASH_SIZE,HOP *);
+        hop_init(interp);
+    }
+    for (p = hop[hidx]; p; p = p->next) {
+        if(STREQ(name, full ? p->info->full_name : p->info->name))
+            return p->info - core_op_lib.op_info_table;
+    }
+    return -1;
+}
+static void hop_init(PARROT_INTERP) {
+    size_t i;
+    op_info_t * const info = core_op_lib.op_info_table;
+    /* store full names */
+    for (i = 0; i < core_op_lib.op_count; i++)
+        store_op(interp, info + i, 1);
+    /* plus one short name */
+    for (i = 0; i < core_op_lib.op_count; i++)
+        if (get_op(interp, info[i].name, 0) == -1)
+            store_op(interp, info + i, 0);
+}
+static void hop_deinit(PARROT_INTERP)
+{
+    if (hop) {
+        size_t i;
+        for (i = 0; i < OP_HASH_SIZE; i++) {
+            HOP *p = hop[i];
+            while (p) {
+                HOP * const next = p->next;
+                mem_gc_free(interp, p);
+                p = next;
+            }
+        }
+        mem_sys_free(hop);
+        hop = NULL;
+    }
+}
+op_lib_t *
+Parrot_DynOp_core_2_4_0(PARROT_INTERP, long init) {
+    /* initialize and return op_lib ptr */
+    if (init == 1) {
+
+        return &core_op_lib;
+    }
+    /* set op_lib to the passed ptr (in init) */
+    else if (init) {
+
+    }
+    /* deinit - free resources */
+    else {
+        hop_deinit(interp);
+    }
+    return NULL;
+}
+
+
+/*
+ * dynamic lib load function - called once
+ */
+ PMC*
+Parrot_lib_core_ops_load(PARROT_INTERP);
+
+ PMC*
+Parrot_lib_core_ops_load(PARROT_INTERP)
+
+{
+    PMC *const lib = Parrot_pmc_new(interp, enum_class_ParrotLibrary);
+    ((Parrot_ParrotLibrary_attributes*)PMC_data(lib))->oplib_init = (void *) Parrot_DynOp_core_2_4_0;
+    dynop_register(interp, lib);
+    return lib;
+}
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ *   buffer-read-only: t
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Deleted: branches/gsoc_threads/src/ops/debug.ops
==============================================================================
--- branches/gsoc_threads/src/ops/debug.ops	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,146 +0,0 @@
-/*
- * $Id$
- * Copyright (C) 2002-2008, Parrot Foundation.
- */
-
-/*
-** debug.ops
-*/
-
-=head1 NAME
-
-debug.ops - Debugging Opcodes
-
-=cut
-
-=head1 DESCRIPTION
-
-Parrot debugger
-
-=cut
-
-=head1 HISTORY
-
-Initial version by Daniel Grunblatt on 2002.5.19
-
-=cut
-
-###############################################################################
-
-=head2 Parrot debug operations
-
-=over 4
-
-=cut
-
-########################################
-
-=item B<debug_init>()
-
-Init the Parrot debugger, must be called before any other debug op.
-
-=cut
-
-op debug_init() :base_debug {
-    Parrot_debugger_init(interp);
-}
-
-########################################
-
-=item B<debug_load>(inconst STR)
-
-Load a Parrot source file for the current program.
-
-=cut
-
-op debug_load(inconst STR) :base_debug {
-    Parrot_debugger_load(interp, $1);
-}
-
-########################################
-
-=item B<debug_break>()
-
-Break execution and drop into the debugger.
-If we are already into the debugger and is the first time we are
-called set a breakpoint.
-
-When you re run/continue the program begin debugged it will pay
-no attention to the debug ops.
-
-=cut
-
-op debug_break() :base_debug {
-    Parrot_debugger_break(interp, cur_opcode);
-}
-
-########################################
-
-=item B<debug_print>()
-
-Print all the Parrot registers at once.
-
-=cut
-
-op debug_print() :base_debug {
-    if (!interp->pdb) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-            EXCEPTION_INVALID_OPERATION,
-            "Initialize debugger with debug_init before using debug_print");
-        goto ADDRESS(handler);
-    }
-
-    if (!(interp->pdb->state & PDB_BREAK)) {
-        PDB_print(interp, "I");
-        PDB_print(interp, "N");
-        PDB_print(interp, "S");
-        PDB_print(interp, "P");
-    }
-}
-
-=item B<backtrace>()
-
-Print a backtrace.
-
-=cut
-
-op backtrace() :base_debug {
-    PDB_backtrace(interp);
-}
-
-#######################################
-
-=item B<getline>(out INT)
-
-Get the current line number.
-
-=cut
-
-inline op getline(out INT) {
-    Parrot_Context_info info;
-    Parrot_Context_get_info(interp, CURRENT_CONTEXT(interp), &info);
-    $1 = info.line;
-}
-
-=item B<getfile>(out STR)
-
-Get the name of the current file.
-
-=cut
-
-inline op getfile(out STR) {
-    Parrot_Context_info info;
-    Parrot_Context_get_info(interp, CURRENT_CONTEXT(interp), &info);
-    $1 = info.file;
-}
-
-=back
-
-=cut
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/gsoc_threads/src/ops/experimental.ops
==============================================================================
--- branches/gsoc_threads/src/ops/experimental.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/experimental.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -27,6 +27,8 @@
 If you rely on any of these opcodes, please open a
 Trac ticket at L<https://trac.parrot.org/>.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
 
 =cut
 
@@ -367,15 +369,16 @@
 #endif
 }
 
-=item B<unroll>(in PMC)
+=item B<finalize>(in PMC)
 
-Exception handling done, unroll possible inner runloops left. $1 is the
-Exception handled or the ExceptionHandler that is handling it.
+Finalize exception handling, freeing any information needed to resume
+the handled exception, like inner runloops.
+$1 is the Exception handled or the ExceptionHandler that is handling it.
 EXPERIMENTAL. Handle with care.
 
 =cut
 
-op unroll(in PMC) {
+op finalize(in PMC) {
     /* Go to the next op after loop unrolling */
     opcode_t * const dest = expr NEXT();
     PMC *eh = PMCNULL;

Modified: branches/gsoc_threads/src/ops/io.ops
==============================================================================
--- branches/gsoc_threads/src/ops/io.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/io.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,149 +19,19 @@
 
 Parrot's IO API
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =cut
 
 ###############################################################################
 
 =head2 Parrot IO API Operations
 
-
 =over 4
 
 =cut
 
-
-########################################
-
-=item B<close>(invar PMC)
-
-Close IO object $1
-
-=cut
-
-inline op close(invar PMC) :base_io {
-    Parrot_io_close(interp, $1);
-}
-
-########################################
-
-=item B<fdopen>(out PMC, in INT, in STR)
-
-Create ParrotIO object in $1 as a copy of file descriptor $2.
-
-=cut
-
-inline op fdopen(out PMC, in INT, in STR) :filesys_open {
-    $1 = Parrot_io_fdopen(interp, PMCNULL, (PIOHANDLE)$2, $3);
-    if (!$1)
-        $1 = Parrot_pmc_new(interp, enum_class_Undef);
-}
-
-=item B<getstdin>(out PMC)
-
-Create a new ParrotIO object for the stdin file descriptor and
-store it in $1
-
-=item B<getstdout>(out PMC)
-
-Create a new ParrotIO object for the stdout file descriptor and
-store it in $1
-
-=item B<getstderr>(out PMC)
-
-Create a new ParrotIO object for the stderr file descriptor and
-store it in $1
-
-=cut
-
-inline op getstdin(out PMC) :base_io {
-    $1 = _PIO_STDIN(interp);
-}
-
-inline op getstdout(out PMC) :base_io {
-    $1 = _PIO_STDOUT(interp);
-}
-
-inline op getstderr(out PMC) :base_io {
-    $1 = _PIO_STDERR(interp);
-}
-
-#########################################
-
-=item B<setstdin>(invar PMC)
-
-Sets the standard input for a bare C<read> op to go to the supplied PMC.
-Call C<getstdin> first if you care about retaining the previous PMC.
-
-=item B<setstdout>(invar PMC)
-
-Sets the standard output for a bare C<print> op to go to the supplied PMC.
-Call C<getstdout> first if you care about retaining the previous PMC.
-
-=item B<setstderr>(invar PMC)
-
-Sets the standard error for a bare C<printerr> op to go to the supplied PMC.
-Call C<getstderr> first if you care about retaining the previous PMC.
-
-=cut
-
-inline op setstdin(invar PMC) :base_io {
-    _PIO_STDIN(interp) = $1;
-}
-
-inline op setstdout(invar PMC) :base_io {
-    _PIO_STDOUT(interp) = $1;
-}
-
-inline op setstderr(invar PMC) :base_io {
-    _PIO_STDERR(interp) = $1;
-}
-
-#########################################
-
-=item B<open>(out PMC, in STR, in STR)
-
-Open URL (file, address, database, in core image) named $2 with
-a mode string in $3 and create an IO object in $1.
-
-The mode consists of a string of characters specified in any order:
-
- r : read
- w : write
- a : append (Note: you must specify "wa", not just "a")
- p : pipe
-
-=item B<open>(out PMC, in STR)
-
-Open URL (file, address, database, in core image) named $2 with
-read mode and create an IO object in $1.
-
-=cut
-
-inline op open(out PMC, in STR, in STR) :filesys_open {
-    if (STRING_IS_NULL($2) || STRING_IS_NULL($3)) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-            EXCEPTION_UNEXPECTED_NULL, "Invalid open");
-        goto ADDRESS(handler);
-    }
-    else {
-        $1 = Parrot_io_open(interp, PMCNULL, $2, $3);
-        PARROT_ASSERT(! PMC_IS_NULL($1));
-    }
-}
-
-inline op open(out PMC, in STR) :filesys_open {
-    if (STRING_IS_NULL($2)) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-            EXCEPTION_UNEXPECTED_NULL, "Invalid open");
-        goto ADDRESS(handler);
-    }
-    else {
-        $1 = Parrot_io_open(interp, PMCNULL, $2, NULL);
-        PARROT_ASSERT(! PMC_IS_NULL($1));
-    }
-}
-
 ########################################
 
 =item B<print>(in INT)
@@ -266,41 +136,6 @@
 
 ##########################################
 
-=item B<printerr>(in INT)
-
-=item B<printerr>(in NUM)
-
-=item B<printerr>(in STR)
-
-=item B<printerr>(invar PMC)
-
-Print $1 to standard error.
-
-=cut
-
-op printerr(in INT) :base_io {
-    Parrot_io_eprintf(interp, INTVAL_FMT, $1);
-}
-
-op printerr(in NUM) :base_io {
-    Parrot_io_eprintf(interp, FLOATVAL_FMT, $1);
-}
-
-op printerr(in STR) :base_io {
-    STRING * const s = $1;
-    if (s && Parrot_str_byte_length(interp, s))
-        Parrot_io_putps(interp, _PIO_STDERR(interp), s);
-}
-
-op printerr(invar PMC) :base_io {
-    PMC * const p = $1;
-    STRING * const s = (VTABLE_get_string(interp, p));
-    if (s)
-        Parrot_io_putps(interp, _PIO_STDERR(interp), s);
-}
-
-##########################################
-
 =item B<print>(invar PMC, in INT)
 
 =item B<print>(invar PMC, in NUM)
@@ -340,183 +175,35 @@
     }
 }
 
-##########################################
-
-=item B<read>(out STR, in INT)
-
-Read up to N bytes from standard input stream
-
-=item B<read>(out STR, invar PMC, in INT)
-
-Read up to N bytes from IO PMC stream.
-
-=cut
-
-op read(out STR, in INT) :base_io {
-    $1 = Parrot_io_reads(interp, _PIO_STDIN(interp), (size_t)$2);
-}
-
-op read(out STR, invar PMC, in INT) :base_io {
-    $1 = Parrot_io_reads(interp, $2, (size_t)$3);
-}
-
-=item B<readline>(out STR, invar PMC)
-
-Read a line up to EOL from filehandle $2.
-This switches the filehandle to linebuffer-mode.
-
-=cut
-
-inline op readline(out STR, invar PMC) :base_io {
-    $1 = Parrot_io_readline(interp, $2);
-}
-
-##########################################
-
-=item B<peek>(out STR)
-
-Returns the next byte from standard input, but does not
-remove it from the stream.
-
-=item B<peek>(out STR, invar PMC)
-
-Reads the next byte from an IO PMC, but does not
-remove it from the stream.
-
-=cut
-
-op peek(out STR) :base_io {
-    STRING ** const s = &$1;
-
-    *s = NULL;
-    if (Parrot_io_peek(interp, _PIO_STDIN(interp), s) < 0) {
-        $1 = STRINGNULL;
-    }
-}
-
-op peek(out STR, invar PMC) :base_io {
-    STRING ** const s = &$1;
-
-    *s = NULL;
-    if (Parrot_io_peek(interp, $2, s) < 0) {
-        $1 = STRINGNULL;
-    }
-}
-
-##########################################
-
-=item B<stat>(out INT, in STR, in INT)
-
-=item B<stat>(out INT, in INT, in INT)
-
-Stat the file. Return stat element $3 for file $2 into $1. The queryable
-items currently are:
-
- EXISTS     0
- FILESIZE   1
- ISDIR      2
- ISDEV      3
- CREATETIME 4 (Time file was created)
- ACCESSTIME 5 (Time file was last accessed)
- MODIFYTIME 6 (Time file data was changed)
- CHANGETIME 7 (Time file metadata was changed)
- BACKUPTIME 8 (Time of last backup)
- UID        9
- GID        10
-
-
-=cut
-
-op stat(out INT, in STR, in INT) {
-    $1 = Parrot_stat_info_intval(interp, $2, $3);
-}
+=item B<getstdin>(out PMC)
 
-op stat(out INT, in INT, in INT) {
-    $1 = Parrot_fstat_info_intval(interp, $2, $3);
-}
+Create a new ParrotIO object for the stdin file descriptor and
+store it in $1
 
+=item B<getstdout>(out PMC)
 
-##########################################
+Create a new ParrotIO object for the stdout file descriptor and
+store it in $1
 
-=item B<seek>(invar PMC, in INT, in INT)
+=item B<getstderr>(out PMC)
 
-seek:
-Set file position to offset $2 on IO stream $1. 'whence' is
-indicated by the value in $3. The valid values for 'whence' are:
-
- Value      Meaning
- 0          Seek from the beginning of the file
- 1          Seek from the current position
- 2          Seek from the end of the file
-
-[ Note: the above values for 'whence' is just an educated guess
-at this point ]
-
-=item B<seek>(invar PMC, in INT, in INT, in INT)
-
-64bit seek:
-Set file position to offset ($2 << 32 | $3) on IO stream $1. 'whence' is
-indicated by the value in $4. This allows 64-bit seeks with only 32-bit
-INTVALS.
+Create a new ParrotIO object for the stderr file descriptor and
+store it in $1
 
 =cut
 
-op seek(invar PMC, in INT, in INT) :base_io {
-    if ($1) {
-        if (Parrot_io_seek(interp, $1, Parrot_io_make_offset($2), $3) < 0) {
-            opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-                EXCEPTION_PIO_ERROR,
-                "seek failed (32bit)");
-            goto ADDRESS(handler);
-        }
-    }
-}
-
-op seek(invar PMC, in INT, in INT, in INT) :base_io {
-    if ($1) {
-        if (Parrot_io_seek(interp, $1, Parrot_io_make_offset32($2, $3), $4) < 0) {
-            opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-                EXCEPTION_PIO_ERROR,
-                "seek failed (64bit)");
-            goto ADDRESS(handler);
-        }
-    }
+inline op getstdin(out PMC) :base_io {
+    $1 = _PIO_STDIN(interp);
 }
 
-=item B<tell>(out INT, invar PMC)
-
-tell:
-Get the current file position of stream $2 and store it in $1.
-On systems where INTVAL is 32bit the result will be truncated if the
-position is beyond 2 GiB
-
-=item B<tell>(out INT, out INT, invar PMC)
-
-64bit tell:
-Get the current file positon of stream $3 in two parts of 32-bit each
-($1 = pos >> 32, $2 = pos & 0xffffffff).
-
-=cut
-
-op tell(out INT, invar PMC) :base_io {
-    if ($2)
-        $1 = (INTVAL)Parrot_io_tell(interp, $2);
+inline op getstdout(out PMC) :base_io {
+    $1 = _PIO_STDOUT(interp);
 }
 
-op tell(out INT, out INT, invar PMC) :base_io {
-    if ($3) {
-        PIOOFF_T pos;
-        pos = Parrot_io_tell(interp, $3);
-        $1 = (INTVAL)(pos >> 31);
-        $2 = (INTVAL)(pos & 0xffffffff);
-    }
+inline op getstderr(out PMC) :base_io {
+    $1 = _PIO_STDERR(interp);
 }
 
-=back
-
-=cut
-
-
 ###############################################################################
 
 /*

Modified: branches/gsoc_threads/src/ops/math.ops
==============================================================================
--- branches/gsoc_threads/src/ops/math.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/math.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -11,8 +11,11 @@
 
 =head1 DESCRIPTION
 
-Operations that perform some sort of mathematics, including both basic
-math and transcendental functions.
+Operations that perform basic mathematics. See F<src/dynoplibs/> for more
+advanced operations.
+
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
 
 =head2 Arithmetic operations
 
@@ -137,152 +140,6 @@
 
 ########################################
 
-=item B<cmod>(out INT, in INT, in INT)
-
-=item B<cmod>(invar PMC, invar PMC, in INT)
-
-=item B<cmod>(invar PMC, invar PMC, invar PMC)
-
-NOTE: This "uncorrected mod" algorithm uses the C language's built-in
-mod operator (x % y), which is
-
-    ... the remainder when x is divided by y, and thus is zero
-    when y divides x exactly.
-    ...
-    The direction of truncation for / and the sign of the result
-    for % are machine-dependent for negative operands, as is the
-    action taken on overflow or underflow.
-                                                     -- [1], page 41
-
-Also:
-
-    ... if the second operand is 0, the result is undefined.
-    Otherwise, it is always true that (a/b)*b + a%b is equal to z. If
-    both operands are non-negative, then the remainder is non-
-    negative and smaller than the divisor; if not, it is guaranteed
-    only that the absolute value of the remainder is smaller than
-    the absolute value of the divisor.
-                                                     -- [1], page 205
-
-This op is provided for those who need it (such as speed-sensitive
-applications with heavy use of mod, but using it only with positive
-arguments), but a more mathematically useful mod based on ** floor(x/y)
-and defined with y == 0 is provided by the mod op.
-
-  [1] Brian W. Kernighan and Dennis M. Ritchie, *The C Programming
-      Language*, Second Edition. Prentice Hall, 1988.
-
-If the denominator is zero, a 'Divide by zero' exception is thrown.
-
-=cut
-
-inline op cmod(out INT, in INT, in INT) :base_core {
-    INTVAL den = $3;
-    if ($3 == 0) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-            EXCEPTION_DIV_BY_ZERO,
-            "Divide by zero");
-        goto ADDRESS(handler);
-    }
-    $1 = $2 % den;
-}
-
-inline op cmod(invar PMC, invar PMC, in INT) :base_core {
-    INTVAL result;
-
-    if ($3 == 0) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-            EXCEPTION_DIV_BY_ZERO,
-            "Divide by zero");
-        goto ADDRESS(handler);
-    }
-
-    result = VTABLE_get_integer(interp, $2) % $3;
-
-    $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
-    VTABLE_set_integer_native(interp, $1, result);
-}
-
-inline op cmod(invar PMC, invar PMC, invar PMC) :base_core {
-    INTVAL result;
-    INTVAL value = VTABLE_get_integer(interp, $3);
-
-    if (value == 0) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-            EXCEPTION_DIV_BY_ZERO,
-            "Divide by zero");
-        goto ADDRESS(handler);
-    }
-
-    result = VTABLE_get_integer(interp, $2) % value;
-
-    $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
-    VTABLE_set_integer_native(interp, $1, result);
-}
-
-########################################
-
-=item B<cmod>(out NUM, in NUM, in NUM)
-
-=item B<cmod>(invar PMC, invar PMC, in NUM)
-
-NOTE: This "uncorrected mod" algorithm uses the built-in C math library's
-fmod() function, which computes
-
-    ... the remainder of dividing x by y. The return value is
-    x - n * y, where n is the quotient of x / y, rounded towards
-    zero to an integer.
-                                -- fmod() manpage on RedHat Linux 7.0
-
-In addition, fmod() returns
-
-    the remainder, unless y is zero, when the function fails and
-    errno is set.
-
-According to page 251 of [1], the result when y is zero is implementation-
-defined.
-
-This op is provided for those who need it, but a more mathematically
-useful numeric mod based on floor(x/y) instead of truncate(x/y) and
-defined with y == 0 is provided by the mod op.
-
-  [1] Brian W. Kernighan and Dennis M. Ritchie, *The C Programming
-      Language*, Second Edition. Prentice Hall, 1988.
-
-If the denominator is zero, a 'Divide by zero' exception is thrown.
-
-=cut
-
-inline op cmod(out NUM, in NUM, in NUM) :base_core {
-    FLOATVAL den = $3;
-    if (FLOAT_IS_ZERO($3)) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-            EXCEPTION_DIV_BY_ZERO,
-            "Divide by zero");
-        goto ADDRESS(handler);
-    }
-    $1 = fmod($2, den);
-}
-
-inline op cmod(invar PMC, invar PMC, in NUM) :base_core {
-    FLOATVAL result;
-    FLOATVAL value = $3;
-
-    if (FLOAT_IS_ZERO(value)) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
-            EXCEPTION_DIV_BY_ZERO,
-            "Divide by zero");
-        goto ADDRESS(handler);
-    }
-
-    result = fmod(VTABLE_get_integer(interp, $2), value);
-
-    $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
-    VTABLE_set_integer_native(interp, $1, (INTVAL) result);
-}
-
-########################################
-
 =item B<dec>(inout INT)
 
 =item B<dec>(inout NUM)
@@ -787,82 +644,6 @@
 
 ########################################
 
-=item B<pow>(out NUM, in NUM, in NUM)
-
-=item B<pow>(out NUM, in NUM, in INT)
-
-=item B<pow>(invar PMC, invar PMC, invar PMC)
-
-=item B<pow>(invar PMC, invar PMC, in INT)
-
-=item B<pow>(invar PMC, invar PMC, in NUM)
-
-Set $1 to $2 raised to the power $3.
-
-=cut
-
-inline op pow(out NUM, in NUM, in NUM) :base_core {
-    $1 = pow((FLOATVAL)$2, (FLOATVAL)$3);
-}
-
-inline op pow(invar PMC, invar PMC, invar PMC) :base_core {
-    const FLOATVAL a = VTABLE_get_number(interp, $2);
-    const FLOATVAL b = VTABLE_get_number(interp, $3);
-    const FLOATVAL c = pow(a, b);
-    if (PMC_IS_NULL($1))
-        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
-    else
-        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
-    VTABLE_set_number_native(interp, $1, c);
-}
-
-inline op pow(invar PMC, invar PMC, in INT) :base_core {
-    const FLOATVAL a = VTABLE_get_number(interp, $2);
-    const FLOATVAL b = (FLOATVAL)$3;
-    const FLOATVAL c = pow(a, b);
-    if (PMC_IS_NULL($1))
-        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
-    else
-        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
-    VTABLE_set_number_native(interp, $1, c);
-}
-
-inline op pow(invar PMC, invar PMC, in NUM) :base_core {
-    const FLOATVAL a = VTABLE_get_number(interp, $2);
-    const FLOATVAL c = pow(a, $3);
-    if (PMC_IS_NULL($1))
-        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
-    else
-        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
-    VTABLE_set_number_native(interp, $1, c);
-}
-
-inline op pow(out NUM, in NUM, in INT) :base_core {
-    FLOATVAL n2 = $2;
-    FLOATVAL res = 1.0;
-    INTVAL   e  = $3;
-    int s = 1;
-    if (e != 0) {
-        if (e < 0) {
-            s = -1;
-            e = -e;
-        }
-    }
-    while (e) {
-        if (e & 1) {
-            res *= n2;
-        }
-        n2 *= n2;
-        e >>= 1;
-    }
-    if (s < 0) {
-        res = 1.0/res;
-    }
-    $1 = res;
-}
-
-########################################
-
 =item B<sub>(inout INT, in INT)
 
 =item B<sub>(inout NUM, in NUM)
@@ -945,228 +726,6 @@
 
 =cut
 
-
-
-###############################################################################
-
-=head2 Transcendental mathematical operations
-
-These operations perform various transcendental operations such as logarithmics
-and trigonometrics.
-
-=over 4
-
-=cut
-
-########################################
-
-=item B<acos>(out NUM, in NUM)
-
-Set $1 to the arc cosine (in radians) of $2.
-
-=cut
-
-inline op acos(out NUM, in NUM) :base_math {
-    $1 = acos((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<asec>(out NUM, in NUM)
-
-Set $1 to the arc secant (in radians) of $2.
-
-=cut
-
-inline op asec(out NUM, in NUM) :base_math {
-    $1 = acos(((FLOATVAL)1) / ((FLOATVAL)$2));
-}
-
-########################################
-
-
-=item B<asin>(out NUM, in NUM)
-
-Set $1 to the arc sine (in radians) of $2.
-
-=cut
-
-inline op asin(out NUM, in NUM) :base_math {
-    $1 = asin((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<atan>(out NUM, in NUM)
-
-=item B<atan>(out NUM, in NUM, in NUM)
-
-The two-argument versions set $1 to the arc tangent (in radians) of $2.
-
-The three-argument versions set $1 to the arc tangent (in radians) of
-$2 / $3, taking account of the signs of the arguments in determining the
-quadrant of the result.
-
-=cut
-
-inline op atan(out NUM, in NUM) :base_math {
-    $1 = atan((FLOATVAL)$2);
-}
-
-inline op atan(out NUM, in NUM, in NUM) :base_math {
-    $1 = atan2((FLOATVAL)$2, (FLOATVAL)$3);
-}
-
-########################################
-
-=item B<cos>(out NUM, in NUM)
-
-Set $1 to the cosine of $2 (given in radians).
-
-=cut
-
-inline op cos(out NUM, in NUM) :base_math {
-    $1 = cos((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<cosh>(out NUM, in NUM)
-
-Set $1 to the hyperbolic cosine of $2 (given in radians).
-
-=cut
-
-inline op cosh(out NUM, in NUM) :base_math {
-    $1 = cosh((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<exp>(out NUM, in NUM)
-
-Set $1 to I<e> raised to the power $2. I<e> is the base of the natural
-logarithm.
-
-=cut
-
-inline op exp(out NUM, in NUM) :base_math {
-    $1 = exp((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<ln>(out NUM, in NUM)
-
-Set $1 to the natural (base I<e>) logarithm of $2.
-
-=cut
-
-inline op ln(out NUM, in NUM) :base_math {
-    $1 = log((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<log10>(out NUM, in NUM)
-
-Set $1 to the base 10 logarithm of $2.
-
-=cut
-
-inline op log10(out NUM, in NUM) :base_math {
-    $1 = log10((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<log2>(out NUM, in NUM)
-
-Set $1 to the base 2 logarithm of $2.
-
-=cut
-
-op log2(out NUM, in NUM) :base_math {
-    FLOATVAL temp = log((FLOATVAL)2.0);
-    $1 = log((FLOATVAL)$2) / temp;
-}
-
-########################################
-
-=item B<sec>(out NUM, in NUM)
-
-Set $1 to the secant of $2 (given in radians).
-
-=cut
-
-inline op sec(out NUM, in NUM) :base_math {
-    $1 = ((FLOATVAL)1) / cos((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<sech>(out NUM, in NUM)
-
-Set $1 to the hyperbolic secant of $2 (given in radians).
-
-=cut
-
-inline op sech(out NUM, in NUM) :base_math {
-    $1 = ((FLOATVAL)1) / cosh((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<sin>(out NUM, in NUM)
-
-Set $1 to the sine of $2 (given in radians).
-
-=cut
-
-inline op sin(out NUM, in NUM) :base_math {
-    $1 = sin((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<sinh>(out NUM, in NUM)
-
-Set $1 to the hyperbolic sine of $2 (given in radians).
-
-=cut
-
-inline op sinh(out NUM, in NUM) :base_math {
-    $1 = sinh((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<tan>(out NUM, in NUM)
-
-Set $1 to the tangent of $2 (given in radians).
-
-=cut
-
-inline op tan(out NUM, in NUM) :base_math {
-    $1 = tan((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<tanh>(out NUM, in NUM)
-
-Set $1 to the hyperbolic tangent of $2 (given in radians).
-
-=cut
-
-inline op tanh(out NUM, in NUM) :base_math {
-    $1 = tanh((FLOATVAL)$2);
-}
-
-=back
-
-=cut
-
 ###############################################################################
 
 =head1 COPYRIGHT

Modified: branches/gsoc_threads/src/ops/object.ops
==============================================================================
--- branches/gsoc_threads/src/ops/object.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/object.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -14,6 +14,9 @@
 
 Parrot's library of object ops
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =over 4
 
 =cut
@@ -56,6 +59,8 @@
     PMC      * const signature  = Parrot_pcc_get_signature(interp,
                                     CURRENT_CONTEXT(interp));
 
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
     if (PMC_IS_NULL(method_pmc)) {
         PMC * const _class = VTABLE_get_class(interp, object);
         if (PMC_IS_NULL(_class)) {
@@ -85,6 +90,8 @@
     PMC      *       signature  = Parrot_pcc_get_signature(interp,
                                     CURRENT_CONTEXT(interp));
 
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
     if (!PMC_IS_NULL(signature))
         Parrot_pcc_set_object(interp, signature, $1);
     interp->current_cont   = NEED_CONTINUATION;
@@ -103,6 +110,7 @@
     PMC      *       signature  = Parrot_pcc_get_signature(interp,
                                     CURRENT_CONTEXT(interp));
 
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
 
     if (PMC_IS_NULL(method_pmc)) {
         dest = Parrot_ex_throw_from_op_args(interp, next, EXCEPTION_METHOD_NOT_FOUND,
@@ -127,6 +135,8 @@
     PMC      *       signature  = Parrot_pcc_get_signature(interp,
                                     CURRENT_CONTEXT(interp));
 
+    Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), next);
+
     if (!PMC_IS_NULL(signature))
         Parrot_pcc_set_object(interp, signature, object);
     interp->current_cont = $3;

Deleted: branches/gsoc_threads/src/ops/ops.num
==============================================================================
--- branches/gsoc_threads/src/ops/ops.num	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,1224 +0,0 @@
-# This file provides opcode name->number mapping, so we can nail down
-# the op numbers for the core opcodes in a particular version of the
-# bytecode and provide backward-compatibility for bytecode.
-#
-# The format of this file is simple:
-#
-# opcode_name (whitespace) opcode_number
-#
-# The opcode name is the full and complete name of the
-# opcode--i.e. for the "add N1, N2, N3" op the name is add_n_n_n, not
-# add.
-#
-# The numbering of opcodes whose names are *not* in this file begins
-# immediately after the highest-numbered opcode in this file,
-# regardless of what order it is found in. There should be *no* holes
-# in the numbering!
-
-# Please note that only opcodes from experimental.ops are included
-# in the core.pm, if they are missing here.
-
-# Note that end must always be op 0.
-end                               0
-# the following ops are enums in oplib.h
-noop                              1
-check_events                      2
-check_events__                    3
-wrapper__                         4
-###DYNAMIC### other ops
-load_bytecode_s                   5
-load_bytecode_sc                  6
-load_language_s                   7
-load_language_sc                  8
-branch_i                          9
-branch_ic                        10
-local_branch_p_i                 11
-local_branch_p_ic                12
-local_return_p                   13
-jump_i                           14
-jump_ic                          15
-enternative                      16
-if_i_ic                          17
-if_n_ic                          18
-if_s_ic                          19
-if_p_ic                          20
-unless_i_ic                      21
-unless_n_ic                      22
-unless_s_ic                      23
-unless_p_ic                      24
-invokecc_p                       25
-invoke_p_p                       26
-yield                            27
-tailcall_p                       28
-returncc                         29
-capture_lex_p                    30
-newclosure_p_p                   31
-set_args_pc                      32
-get_params_pc                    33
-set_returns_pc                   34
-get_results_pc                   35
-set_result_info_p                36
-set_result_info_pc               37
-result_info_p                    38
-set_addr_i_ic                    39
-set_addr_p_ic                    40
-set_addr_p_i                     41
-get_addr_i_p                     42
-schedule_p                       43
-addhandler_p                     44
-push_eh_ic                       45
-push_eh_p                        46
-pop_eh                           47
-throw_p                          48
-throw_p_p                        49
-rethrow_p                        50
-count_eh_i                       51
-die_s                            52
-die_sc                           53
-die_p                            54
-die_pc                           55
-die_i_i                          56
-die_ic_i                         57
-die_i_ic                         58
-die_ic_ic                        59
-exit_i                           60
-exit_ic                          61
-debug_i                          62
-debug_ic                         63
-bounds_i                         64
-bounds_ic                        65
-profile_i                        66
-profile_ic                       67
-trace_i                          68
-trace_ic                         69
-gc_debug_i                       70
-gc_debug_ic                      71
-interpinfo_i_i                   72
-interpinfo_i_ic                  73
-interpinfo_p_i                   74
-interpinfo_p_ic                  75
-interpinfo_s_i                   76
-interpinfo_s_ic                  77
-warningson_i                     78
-warningson_ic                    79
-warningsoff_i                    80
-warningsoff_ic                   81
-errorson_i                       82
-errorson_ic                      83
-errorsoff_i                      84
-errorsoff_ic                     85
-runinterp_p_i                    86
-runinterp_p_ic                   87
-getinterp_p                      88
-sweep_ic                         89
-collect                          90
-sweepoff                         91
-sweepon                          92
-collectoff                       93
-collecton                        94
-needs_destroy_p                  95
-loadlib_p_s                      96
-loadlib_p_sc                     97
-loadlib_p_s_p                    98
-loadlib_p_sc_p                   99
-loadlib_p_s_pc                  100
-loadlib_p_sc_pc                 101
-dlfunc_p_p_s_s                  102
-dlfunc_p_p_sc_s                 103
-dlfunc_p_p_s_sc                 104
-dlfunc_p_p_sc_sc                105
-dlvar_p_p_s                     106
-dlvar_p_p_sc                    107
-compreg_s_p                     108
-compreg_sc_p                    109
-compreg_p_s                     110
-compreg_p_sc                    111
-new_callback_p_p_p_s            112
-new_callback_p_p_p_sc           113
-annotations_p                   114
-annotations_p_s                 115
-annotations_p_sc                116
-band_i_i                        117
-band_i_ic                       118
-band_p_i                        119
-band_p_ic                       120
-band_p_p                        121
-band_i_i_i                      122
-band_i_ic_i                     123
-band_i_i_ic                     124
-band_p_p_i                      125
-band_p_p_ic                     126
-band_p_p_p                      127
-bands_p_s                       128
-bands_p_sc                      129
-bands_p_p                       130
-bands_s_s_s                     131
-bands_s_sc_s                    132
-bands_s_s_sc                    133
-bands_p_p_s                     134
-bands_p_p_sc                    135
-bands_p_p_p                     136
-bnot_i                          137
-bnot_i_i                        138
-bnot_p                          139
-bnot_p_p                        140
-bnots_s_s                       141
-bnots_s_sc                      142
-bnots_p                         143
-bnots_p_p                       144
-bor_i_i                         145
-bor_i_ic                        146
-bor_p_i                         147
-bor_p_ic                        148
-bor_p_p                         149
-bor_i_i_i                       150
-bor_i_ic_i                      151
-bor_i_i_ic                      152
-bor_p_p_i                       153
-bor_p_p_ic                      154
-bor_p_p_p                       155
-bors_p_s                        156
-bors_p_sc                       157
-bors_p_p                        158
-bors_s_s_s                      159
-bors_s_sc_s                     160
-bors_s_s_sc                     161
-bors_p_p_s                      162
-bors_p_p_sc                     163
-bors_p_p_p                      164
-shl_i_i                         165
-shl_i_ic                        166
-shl_p_i                         167
-shl_p_ic                        168
-shl_p_p                         169
-shl_i_i_i                       170
-shl_i_ic_i                      171
-shl_i_i_ic                      172
-shl_p_p_i                       173
-shl_p_p_ic                      174
-shl_p_p_p                       175
-shr_i_i                         176
-shr_i_ic                        177
-shr_p_i                         178
-shr_p_ic                        179
-shr_p_p                         180
-shr_i_i_i                       181
-shr_i_ic_i                      182
-shr_i_i_ic                      183
-shr_p_p_i                       184
-shr_p_p_ic                      185
-shr_p_p_p                       186
-lsr_i_i                         187
-lsr_i_ic                        188
-lsr_p_i                         189
-lsr_p_ic                        190
-lsr_p_p                         191
-lsr_i_i_i                       192
-lsr_i_ic_i                      193
-lsr_i_i_ic                      194
-lsr_p_p_i                       195
-lsr_p_p_ic                      196
-lsr_p_p_p                       197
-rot_i_i_i_ic                    198
-rot_i_ic_i_ic                   199
-rot_i_i_ic_ic                   200
-bxor_i_i                        201
-bxor_i_ic                       202
-bxor_p_i                        203
-bxor_p_ic                       204
-bxor_p_p                        205
-bxor_i_i_i                      206
-bxor_i_ic_i                     207
-bxor_i_i_ic                     208
-bxor_p_p_i                      209
-bxor_p_p_ic                     210
-bxor_p_p_p                      211
-bxors_p_s                       212
-bxors_p_sc                      213
-bxors_p_p                       214
-bxors_s_s_s                     215
-bxors_s_sc_s                    216
-bxors_s_s_sc                    217
-bxors_p_p_s                     218
-bxors_p_p_sc                    219
-bxors_p_p_p                     220
-eq_i_i_ic                       221
-eq_ic_i_ic                      222
-eq_i_ic_ic                      223
-eq_n_n_ic                       224
-eq_nc_n_ic                      225
-eq_n_nc_ic                      226
-eq_s_s_ic                       227
-eq_sc_s_ic                      228
-eq_s_sc_ic                      229
-eq_p_p_ic                       230
-eq_p_i_ic                       231
-eq_p_ic_ic                      232
-eq_p_n_ic                       233
-eq_p_nc_ic                      234
-eq_p_s_ic                       235
-eq_p_sc_ic                      236
-eq_str_p_p_ic                   237
-eq_num_p_p_ic                   238
-eq_addr_s_s_ic                  239
-eq_addr_sc_s_ic                 240
-eq_addr_s_sc_ic                 241
-eq_addr_sc_sc_ic                242
-eq_addr_p_p_ic                  243
-ne_i_i_ic                       244
-ne_ic_i_ic                      245
-ne_i_ic_ic                      246
-ne_n_n_ic                       247
-ne_nc_n_ic                      248
-ne_n_nc_ic                      249
-ne_s_s_ic                       250
-ne_sc_s_ic                      251
-ne_s_sc_ic                      252
-ne_p_p_ic                       253
-ne_p_i_ic                       254
-ne_p_ic_ic                      255
-ne_p_n_ic                       256
-ne_p_nc_ic                      257
-ne_p_s_ic                       258
-ne_p_sc_ic                      259
-ne_str_p_p_ic                   260
-ne_num_p_p_ic                   261
-ne_addr_s_s_ic                  262
-ne_addr_sc_s_ic                 263
-ne_addr_s_sc_ic                 264
-ne_addr_sc_sc_ic                265
-ne_addr_p_p_ic                  266
-lt_i_i_ic                       267
-lt_ic_i_ic                      268
-lt_i_ic_ic                      269
-lt_n_n_ic                       270
-lt_nc_n_ic                      271
-lt_n_nc_ic                      272
-lt_s_s_ic                       273
-lt_sc_s_ic                      274
-lt_s_sc_ic                      275
-lt_p_p_ic                       276
-lt_p_i_ic                       277
-lt_p_ic_ic                      278
-lt_p_n_ic                       279
-lt_p_nc_ic                      280
-lt_p_s_ic                       281
-lt_p_sc_ic                      282
-lt_str_p_p_ic                   283
-lt_num_p_p_ic                   284
-le_i_i_ic                       285
-le_ic_i_ic                      286
-le_i_ic_ic                      287
-le_n_n_ic                       288
-le_nc_n_ic                      289
-le_n_nc_ic                      290
-le_s_s_ic                       291
-le_sc_s_ic                      292
-le_s_sc_ic                      293
-le_p_p_ic                       294
-le_p_i_ic                       295
-le_p_ic_ic                      296
-le_p_n_ic                       297
-le_p_nc_ic                      298
-le_p_s_ic                       299
-le_p_sc_ic                      300
-le_str_p_p_ic                   301
-le_num_p_p_ic                   302
-gt_p_p_ic                       303
-gt_p_i_ic                       304
-gt_p_ic_ic                      305
-gt_p_n_ic                       306
-gt_p_nc_ic                      307
-gt_p_s_ic                       308
-gt_p_sc_ic                      309
-gt_str_p_p_ic                   310
-gt_num_p_p_ic                   311
-ge_p_p_ic                       312
-ge_p_i_ic                       313
-ge_p_ic_ic                      314
-ge_p_n_ic                       315
-ge_p_nc_ic                      316
-ge_p_s_ic                       317
-ge_p_sc_ic                      318
-ge_str_p_p_ic                   319
-ge_num_p_p_ic                   320
-if_null_p_ic                    321
-if_null_s_ic                    322
-unless_null_p_ic                323
-unless_null_s_ic                324
-cmp_i_i_i                       325
-cmp_i_ic_i                      326
-cmp_i_i_ic                      327
-cmp_i_n_n                       328
-cmp_i_nc_n                      329
-cmp_i_n_nc                      330
-cmp_i_s_s                       331
-cmp_i_sc_s                      332
-cmp_i_s_sc                      333
-cmp_i_p_p                       334
-cmp_i_p_i                       335
-cmp_i_p_ic                      336
-cmp_i_p_n                       337
-cmp_i_p_nc                      338
-cmp_i_p_s                       339
-cmp_i_p_sc                      340
-cmp_str_i_p_p                   341
-cmp_num_i_p_p                   342
-cmp_pmc_p_p_p                   343
-issame_i_p_p                    344
-issame_i_s_s                    345
-issame_i_sc_s                   346
-issame_i_s_sc                   347
-issame_i_sc_sc                  348
-isntsame_i_p_p                  349
-isntsame_i_s_s                  350
-isntsame_i_sc_s                 351
-isntsame_i_s_sc                 352
-isntsame_i_sc_sc                353
-istrue_i_p                      354
-isfalse_i_p                     355
-isnull_i_p                      356
-isnull_i_pc                     357
-isnull_i_s                      358
-isnull_i_sc                     359
-isgt_i_p_p                      360
-isge_i_p_p                      361
-isle_i_i_i                      362
-isle_i_ic_i                     363
-isle_i_i_ic                     364
-isle_i_n_n                      365
-isle_i_nc_n                     366
-isle_i_n_nc                     367
-isle_i_s_s                      368
-isle_i_sc_s                     369
-isle_i_s_sc                     370
-isle_i_p_p                      371
-islt_i_i_i                      372
-islt_i_ic_i                     373
-islt_i_i_ic                     374
-islt_i_n_n                      375
-islt_i_nc_n                     376
-islt_i_n_nc                     377
-islt_i_s_s                      378
-islt_i_sc_s                     379
-islt_i_s_sc                     380
-islt_i_p_p                      381
-iseq_i_i_i                      382
-iseq_i_ic_i                     383
-iseq_i_i_ic                     384
-iseq_i_n_n                      385
-iseq_i_nc_n                     386
-iseq_i_n_nc                     387
-iseq_i_s_s                      388
-iseq_i_sc_s                     389
-iseq_i_s_sc                     390
-iseq_i_p_p                      391
-isne_i_i_i                      392
-isne_i_ic_i                     393
-isne_i_i_ic                     394
-isne_i_n_n                      395
-isne_i_nc_n                     396
-isne_i_n_nc                     397
-isne_i_s_s                      398
-isne_i_sc_s                     399
-isne_i_s_sc                     400
-isne_i_p_p                      401
-and_i_i_i                       402
-and_i_ic_i                      403
-and_i_i_ic                      404
-and_p_p_p                       405
-not_i                           406
-not_i_i                         407
-not_p                           408
-not_p_p                         409
-or_i_i_i                        410
-or_i_ic_i                       411
-or_i_i_ic                       412
-or_p_p_p                        413
-xor_i_i_i                       414
-xor_i_ic_i                      415
-xor_i_i_ic                      416
-xor_p_p_p                       417
-debug_init                      418
-debug_load_sc                   419
-debug_break                     420
-debug_print                     421
-backtrace                       422
-getline_i                       423
-getfile_s                       424
-close_p                         425
-fdopen_p_i_s                    426
-fdopen_p_ic_s                   427
-fdopen_p_i_sc                   428
-fdopen_p_ic_sc                  429
-getstdin_p                      430
-getstdout_p                     431
-getstderr_p                     432
-setstdin_p                      433
-setstdout_p                     434
-setstderr_p                     435
-open_p_s_s                      436
-open_p_sc_s                     437
-open_p_s_sc                     438
-open_p_sc_sc                    439
-open_p_s                        440
-open_p_sc                       441
-print_i                         442
-print_ic                        443
-print_n                         444
-print_nc                        445
-print_s                         446
-print_sc                        447
-print_p                         448
-say_i                           449
-say_ic                          450
-say_n                           451
-say_nc                          452
-say_s                           453
-say_sc                          454
-say_p                           455
-printerr_i                      456
-printerr_ic                     457
-printerr_n                      458
-printerr_nc                     459
-printerr_s                      460
-printerr_sc                     461
-printerr_p                      462
-print_p_i                       463
-print_p_ic                      464
-print_p_n                       465
-print_p_nc                      466
-print_p_s                       467
-print_p_sc                      468
-print_p_p                       469
-read_s_i                        470
-read_s_ic                       471
-read_s_p_i                      472
-read_s_p_ic                     473
-readline_s_p                    474
-peek_s                          475
-peek_s_p                        476
-stat_i_s_i                      477
-stat_i_sc_i                     478
-stat_i_s_ic                     479
-stat_i_sc_ic                    480
-stat_i_i_i                      481
-stat_i_ic_i                     482
-stat_i_i_ic                     483
-stat_i_ic_ic                    484
-seek_p_i_i                      485
-seek_p_ic_i                     486
-seek_p_i_ic                     487
-seek_p_ic_ic                    488
-seek_p_i_i_i                    489
-seek_p_ic_i_i                   490
-seek_p_i_ic_i                   491
-seek_p_ic_ic_i                  492
-seek_p_i_i_ic                   493
-seek_p_ic_i_ic                  494
-seek_p_i_ic_ic                  495
-seek_p_ic_ic_ic                 496
-tell_i_p                        497
-tell_i_i_p                      498
-abs_i                           499
-abs_n                           500
-abs_i_i                         501
-abs_n_n                         502
-abs_p                           503
-abs_p_p                         504
-add_i_i                         505
-add_i_ic                        506
-add_n_n                         507
-add_n_nc                        508
-add_p_p                         509
-add_p_i                         510
-add_p_ic                        511
-add_p_n                         512
-add_p_nc                        513
-add_i_i_i                       514
-add_i_ic_i                      515
-add_i_i_ic                      516
-add_n_n_n                       517
-add_n_nc_n                      518
-add_n_n_nc                      519
-add_p_p_p                       520
-add_p_p_i                       521
-add_p_p_ic                      522
-add_p_p_n                       523
-add_p_p_nc                      524
-cmod_i_i_i                      525
-cmod_i_ic_i                     526
-cmod_i_i_ic                     527
-cmod_p_p_i                      528
-cmod_p_p_ic                     529
-cmod_p_p_p                      530
-cmod_n_n_n                      531
-cmod_n_nc_n                     532
-cmod_n_n_nc                     533
-cmod_p_p_n                      534
-cmod_p_p_nc                     535
-dec_i                           536
-dec_n                           537
-dec_p                           538
-div_i_i                         539
-div_i_ic                        540
-div_n_n                         541
-div_n_nc                        542
-div_p_p                         543
-div_p_i                         544
-div_p_ic                        545
-div_p_n                         546
-div_p_nc                        547
-div_i_i_i                       548
-div_i_ic_i                      549
-div_i_i_ic                      550
-div_i_ic_ic                     551
-div_n_n_n                       552
-div_n_nc_n                      553
-div_n_n_nc                      554
-div_n_nc_nc                     555
-div_p_p_p                       556
-div_p_p_i                       557
-div_p_p_ic                      558
-div_p_p_n                       559
-div_p_p_nc                      560
-fdiv_i_i                        561
-fdiv_i_ic                       562
-fdiv_n_n                        563
-fdiv_n_nc                       564
-fdiv_p_p                        565
-fdiv_p_i                        566
-fdiv_p_ic                       567
-fdiv_p_n                        568
-fdiv_p_nc                       569
-fdiv_i_i_i                      570
-fdiv_i_ic_i                     571
-fdiv_i_i_ic                     572
-fdiv_n_n_n                      573
-fdiv_n_nc_n                     574
-fdiv_n_n_nc                     575
-fdiv_p_p_p                      576
-fdiv_p_p_i                      577
-fdiv_p_p_ic                     578
-fdiv_p_p_n                      579
-fdiv_p_p_nc                     580
-ceil_n                          581
-ceil_i_n                        582
-ceil_n_n                        583
-floor_n                         584
-floor_i_n                       585
-floor_n_n                       586
-inc_i                           587
-inc_n                           588
-inc_p                           589
-mod_i_i                         590
-mod_i_ic                        591
-mod_n_n                         592
-mod_n_nc                        593
-mod_p_p                         594
-mod_p_i                         595
-mod_p_ic                        596
-mod_p_n                         597
-mod_p_nc                        598
-mod_i_i_i                       599
-mod_i_ic_i                      600
-mod_i_i_ic                      601
-mod_n_n_n                       602
-mod_n_nc_n                      603
-mod_n_n_nc                      604
-mod_p_p_p                       605
-mod_p_p_i                       606
-mod_p_p_ic                      607
-mod_p_p_n                       608
-mod_p_p_nc                      609
-mul_i_i                         610
-mul_i_ic                        611
-mul_n_n                         612
-mul_n_nc                        613
-mul_p_p                         614
-mul_p_i                         615
-mul_p_ic                        616
-mul_p_n                         617
-mul_p_nc                        618
-mul_i_i_i                       619
-mul_i_ic_i                      620
-mul_i_i_ic                      621
-mul_n_n_n                       622
-mul_n_nc_n                      623
-mul_n_n_nc                      624
-mul_p_p_p                       625
-mul_p_p_i                       626
-mul_p_p_ic                      627
-mul_p_p_n                       628
-mul_p_p_nc                      629
-neg_i                           630
-neg_n                           631
-neg_p                           632
-neg_i_i                         633
-neg_n_n                         634
-neg_p_p                         635
-pow_n_n_n                       636
-pow_n_nc_n                      637
-pow_n_n_nc                      638
-pow_p_p_p                       639
-pow_p_p_i                       640
-pow_p_p_ic                      641
-pow_p_p_n                       642
-pow_p_p_nc                      643
-pow_n_n_i                       644
-pow_n_nc_i                      645
-pow_n_n_ic                      646
-pow_n_nc_ic                     647
-sub_i_i                         648
-sub_i_ic                        649
-sub_n_n                         650
-sub_n_nc                        651
-sub_p_p                         652
-sub_p_i                         653
-sub_p_ic                        654
-sub_p_n                         655
-sub_p_nc                        656
-sub_i_i_i                       657
-sub_i_ic_i                      658
-sub_i_i_ic                      659
-sub_n_n_n                       660
-sub_n_nc_n                      661
-sub_n_n_nc                      662
-sub_p_p_p                       663
-sub_p_p_i                       664
-sub_p_p_ic                      665
-sub_p_p_n                       666
-sub_p_p_nc                      667
-sqrt_n_n                        668
-acos_n_n                        669
-asec_n_n                        670
-asin_n_n                        671
-atan_n_n                        672
-atan_n_n_n                      673
-atan_n_nc_n                     674
-atan_n_n_nc                     675
-cos_n_n                         676
-cosh_n_n                        677
-exp_n_n                         678
-ln_n_n                          679
-log10_n_n                       680
-log2_n_n                        681
-sec_n_n                         682
-sech_n_n                        683
-sin_n_n                         684
-sinh_n_n                        685
-tan_n_n                         686
-tanh_n_n                        687
-callmethodcc_p_s                688
-callmethodcc_p_sc               689
-callmethodcc_p_p                690
-callmethod_p_s_p                691
-callmethod_p_sc_p               692
-callmethod_p_p_p                693
-tailcallmethod_p_s              694
-tailcallmethod_p_sc             695
-tailcallmethod_p_p              696
-addmethod_p_s_p                 697
-addmethod_p_sc_p                698
-can_i_p_s                       699
-can_i_p_sc                      700
-does_i_p_s                      701
-does_i_p_sc                     702
-does_i_p_p                      703
-does_i_p_pc                     704
-isa_i_p_s                       705
-isa_i_p_sc                      706
-isa_i_p_p                       707
-isa_i_p_pc                      708
-newclass_p_s                    709
-newclass_p_sc                   710
-newclass_p_p                    711
-newclass_p_pc                   712
-subclass_p_p                    713
-subclass_p_pc                   714
-subclass_p_p_s                  715
-subclass_p_pc_s                 716
-subclass_p_p_sc                 717
-subclass_p_pc_sc                718
-subclass_p_p_p                  719
-subclass_p_pc_p                 720
-subclass_p_p_pc                 721
-subclass_p_pc_pc                722
-subclass_p_s                    723
-subclass_p_sc                   724
-subclass_p_s_s                  725
-subclass_p_sc_s                 726
-subclass_p_s_sc                 727
-subclass_p_sc_sc                728
-subclass_p_s_p                  729
-subclass_p_sc_p                 730
-subclass_p_s_pc                 731
-subclass_p_sc_pc                732
-get_class_p_s                   733
-get_class_p_sc                  734
-get_class_p_p                   735
-get_class_p_pc                  736
-class_p_p                       737
-addparent_p_p                   738
-removeparent_p_p                739
-addrole_p_p                     740
-addattribute_p_s                741
-addattribute_p_sc               742
-removeattribute_p_s             743
-removeattribute_p_sc            744
-getattribute_p_p_s              745
-getattribute_p_p_sc             746
-getattribute_p_p_p_s            747
-getattribute_p_p_pc_s           748
-getattribute_p_p_p_sc           749
-getattribute_p_p_pc_sc          750
-setattribute_p_s_p              751
-setattribute_p_sc_p             752
-setattribute_p_p_s_p            753
-setattribute_p_pc_s_p           754
-setattribute_p_p_sc_p           755
-setattribute_p_pc_sc_p          756
-inspect_p_p                     757
-inspect_p_pc                    758
-inspect_p_p_s                   759
-inspect_p_pc_s                  760
-inspect_p_p_sc                  761
-inspect_p_pc_sc                 762
-new_p_s                         763
-new_p_sc                        764
-new_p_s_p                       765
-new_p_sc_p                      766
-new_p_s_pc                      767
-new_p_sc_pc                     768
-new_p_p                         769
-new_p_pc                        770
-new_p_p_p                       771
-new_p_pc_p                      772
-new_p_p_pc                      773
-new_p_pc_pc                     774
-root_new_p_p                    775
-root_new_p_pc                   776
-root_new_p_p_p                  777
-root_new_p_pc_p                 778
-root_new_p_p_pc                 779
-root_new_p_pc_pc                780
-typeof_s_p                      781
-typeof_p_p                      782
-get_repr_s_p                    783
-find_method_p_p_s               784
-find_method_p_p_sc              785
-defined_i_p                     786
-defined_i_p_ki                  787
-defined_i_p_kic                 788
-defined_i_p_k                   789
-defined_i_p_kc                  790
-exists_i_p_ki                   791
-exists_i_p_kic                  792
-exists_i_p_k                    793
-exists_i_p_kc                   794
-delete_p_k                      795
-delete_p_kc                     796
-delete_p_ki                     797
-delete_p_kic                    798
-elements_i_p                    799
-push_p_i                        800
-push_p_ic                       801
-push_p_n                        802
-push_p_nc                       803
-push_p_s                        804
-push_p_sc                       805
-push_p_p                        806
-pop_i_p                         807
-pop_n_p                         808
-pop_s_p                         809
-pop_p_p                         810
-unshift_p_i                     811
-unshift_p_ic                    812
-unshift_p_n                     813
-unshift_p_nc                    814
-unshift_p_s                     815
-unshift_p_sc                    816
-unshift_p_p                     817
-shift_i_p                       818
-shift_n_p                       819
-shift_s_p                       820
-shift_p_p                       821
-splice_p_p_i_i                  822
-splice_p_p_ic_i                 823
-splice_p_p_i_ic                 824
-splice_p_p_ic_ic                825
-setprop_p_s_p                   826
-setprop_p_sc_p                  827
-getprop_p_s_p                   828
-getprop_p_sc_p                  829
-delprop_p_s                     830
-delprop_p_sc                    831
-prophash_p_p                    832
-freeze_s_p                      833
-thaw_p_s                        834
-thaw_p_sc                       835
-add_multi_s_s_p                 836
-add_multi_sc_s_p                837
-add_multi_s_sc_p                838
-add_multi_sc_sc_p               839
-find_multi_p_s_s                840
-find_multi_p_sc_s               841
-find_multi_p_s_sc               842
-find_multi_p_sc_sc              843
-register_p                      844
-unregister_p                    845
-box_p_i                         846
-box_p_ic                        847
-box_p_n                         848
-box_p_nc                        849
-box_p_s                         850
-box_p_sc                        851
-iter_p_p                        852
-morph_p_p                       853
-morph_p_pc                      854
-clone_s_s                       855
-clone_s_sc                      856
-set_i_i                         857
-set_i_ic                        858
-set_i_n                         859
-set_i_nc                        860
-set_i_s                         861
-set_i_sc                        862
-set_n_n                         863
-set_n_nc                        864
-set_n_i                         865
-set_n_ic                        866
-set_n_s                         867
-set_n_sc                        868
-set_n_p                         869
-set_s_p                         870
-set_s_s                         871
-set_s_sc                        872
-set_s_i                         873
-set_s_ic                        874
-set_s_n                         875
-set_s_nc                        876
-set_p_pc                        877
-set_p_p                         878
-set_p_i                         879
-set_p_ic                        880
-set_p_n                         881
-set_p_nc                        882
-set_p_s                         883
-set_p_sc                        884
-set_i_p                         885
-assign_p_p                      886
-assign_p_i                      887
-assign_p_ic                     888
-assign_p_n                      889
-assign_p_nc                     890
-assign_p_s                      891
-assign_p_sc                     892
-assign_s_s                      893
-assign_s_sc                     894
-setref_p_p                      895
-deref_p_p                       896
-set_p_ki_i                      897
-set_p_kic_i                     898
-set_p_ki_ic                     899
-set_p_kic_ic                    900
-set_p_ki_n                      901
-set_p_kic_n                     902
-set_p_ki_nc                     903
-set_p_kic_nc                    904
-set_p_ki_s                      905
-set_p_kic_s                     906
-set_p_ki_sc                     907
-set_p_kic_sc                    908
-set_p_ki_p                      909
-set_p_kic_p                     910
-set_i_p_ki                      911
-set_i_p_kic                     912
-set_n_p_ki                      913
-set_n_p_kic                     914
-set_s_p_ki                      915
-set_s_p_kic                     916
-set_p_p_ki                      917
-set_p_p_kic                     918
-set_p_k_i                       919
-set_p_kc_i                      920
-set_p_k_ic                      921
-set_p_kc_ic                     922
-set_p_k_n                       923
-set_p_kc_n                      924
-set_p_k_nc                      925
-set_p_kc_nc                     926
-set_p_k_s                       927
-set_p_kc_s                      928
-set_p_k_sc                      929
-set_p_kc_sc                     930
-set_p_k_p                       931
-set_p_kc_p                      932
-set_i_p_k                       933
-set_i_p_kc                      934
-set_n_p_k                       935
-set_n_p_kc                      936
-set_s_p_k                       937
-set_s_p_kc                      938
-set_p_p_k                       939
-set_p_p_kc                      940
-clone_p_p                       941
-clone_p_p_p                     942
-clone_p_p_pc                    943
-copy_p_p                        944
-null_s                          945
-null_i                          946
-null_p                          947
-null_n                          948
-ord_i_s                         949
-ord_i_sc                        950
-ord_i_s_i                       951
-ord_i_sc_i                      952
-ord_i_s_ic                      953
-ord_i_sc_ic                     954
-chr_s_i                         955
-chr_s_ic                        956
-chopn_s_s_i                     957
-chopn_s_sc_i                    958
-chopn_s_s_ic                    959
-chopn_s_sc_ic                   960
-concat_s_s                      961
-concat_s_sc                     962
-concat_p_p                      963
-concat_p_s                      964
-concat_p_sc                     965
-concat_s_s_s                    966
-concat_s_sc_s                   967
-concat_s_s_sc                   968
-concat_p_p_s                    969
-concat_p_p_sc                   970
-concat_p_p_p                    971
-repeat_s_s_i                    972
-repeat_s_sc_i                   973
-repeat_s_s_ic                   974
-repeat_s_sc_ic                  975
-repeat_p_p_i                    976
-repeat_p_p_ic                   977
-repeat_p_p_p                    978
-repeat_p_i                      979
-repeat_p_ic                     980
-repeat_p_p                      981
-length_i_s                      982
-length_i_sc                     983
-bytelength_i_s                  984
-bytelength_i_sc                 985
-pin_s                           986
-unpin_s                         987
-substr_s_s_i                    988
-substr_s_sc_i                   989
-substr_s_s_ic                   990
-substr_s_sc_ic                  991
-substr_s_s_i_i                  992
-substr_s_sc_i_i                 993
-substr_s_s_ic_i                 994
-substr_s_sc_ic_i                995
-substr_s_s_i_ic                 996
-substr_s_sc_i_ic                997
-substr_s_s_ic_ic                998
-substr_s_sc_ic_ic               999
-substr_s_p_i_i                 1000
-substr_s_p_ic_i                1001
-substr_s_p_i_ic                1002
-substr_s_p_ic_ic               1003
-replace_s_s_i_i_s              1004
-replace_s_sc_i_i_s             1005
-replace_s_s_ic_i_s             1006
-replace_s_sc_ic_i_s            1007
-replace_s_s_i_ic_s             1008
-replace_s_sc_i_ic_s            1009
-replace_s_s_ic_ic_s            1010
-replace_s_sc_ic_ic_s           1011
-replace_s_s_i_i_sc             1012
-replace_s_sc_i_i_sc            1013
-replace_s_s_ic_i_sc            1014
-replace_s_sc_ic_i_sc           1015
-replace_s_s_i_ic_sc            1016
-replace_s_sc_i_ic_sc           1017
-replace_s_s_ic_ic_sc           1018
-replace_s_sc_ic_ic_sc          1019
-index_i_s_s                    1020
-index_i_sc_s                   1021
-index_i_s_sc                   1022
-index_i_sc_sc                  1023
-index_i_s_s_i                  1024
-index_i_sc_s_i                 1025
-index_i_s_sc_i                 1026
-index_i_sc_sc_i                1027
-index_i_s_s_ic                 1028
-index_i_sc_s_ic                1029
-index_i_s_sc_ic                1030
-index_i_sc_sc_ic               1031
-sprintf_s_s_p                  1032
-sprintf_s_sc_p                 1033
-sprintf_p_p_p                  1034
-new_s                          1035
-new_s_i                        1036
-new_s_ic                       1037
-stringinfo_i_s_i               1038
-stringinfo_i_sc_i              1039
-stringinfo_i_s_ic              1040
-stringinfo_i_sc_ic             1041
-upcase_s_s                     1042
-upcase_s_sc                    1043
-downcase_s_s                   1044
-downcase_s_sc                  1045
-titlecase_s_s                  1046
-titlecase_s_sc                 1047
-join_s_s_p                     1048
-join_s_sc_p                    1049
-split_p_s_s                    1050
-split_p_sc_s                   1051
-split_p_s_sc                   1052
-split_p_sc_sc                  1053
-charset_i_s                    1054
-charset_i_sc                   1055
-charsetname_s_i                1056
-charsetname_s_ic               1057
-find_charset_i_s               1058
-find_charset_i_sc              1059
-trans_charset_s_s_i            1060
-trans_charset_s_sc_i           1061
-trans_charset_s_s_ic           1062
-trans_charset_s_sc_ic          1063
-encoding_i_s                   1064
-encoding_i_sc                  1065
-encodingname_s_i               1066
-encodingname_s_ic              1067
-find_encoding_i_s              1068
-find_encoding_i_sc             1069
-trans_encoding_s_s_i           1070
-trans_encoding_s_sc_i          1071
-trans_encoding_s_s_ic          1072
-trans_encoding_s_sc_ic         1073
-is_cclass_i_i_s_i              1074
-is_cclass_i_ic_s_i             1075
-is_cclass_i_i_sc_i             1076
-is_cclass_i_ic_sc_i            1077
-is_cclass_i_i_s_ic             1078
-is_cclass_i_ic_s_ic            1079
-is_cclass_i_i_sc_ic            1080
-is_cclass_i_ic_sc_ic           1081
-find_cclass_i_i_s_i_i          1082
-find_cclass_i_ic_s_i_i         1083
-find_cclass_i_i_sc_i_i         1084
-find_cclass_i_ic_sc_i_i        1085
-find_cclass_i_i_s_ic_i         1086
-find_cclass_i_ic_s_ic_i        1087
-find_cclass_i_i_sc_ic_i        1088
-find_cclass_i_ic_sc_ic_i       1089
-find_cclass_i_i_s_i_ic         1090
-find_cclass_i_ic_s_i_ic        1091
-find_cclass_i_i_sc_i_ic        1092
-find_cclass_i_ic_sc_i_ic       1093
-find_cclass_i_i_s_ic_ic        1094
-find_cclass_i_ic_s_ic_ic       1095
-find_cclass_i_i_sc_ic_ic       1096
-find_cclass_i_ic_sc_ic_ic      1097
-find_not_cclass_i_i_s_i_i      1098
-find_not_cclass_i_ic_s_i_i     1099
-find_not_cclass_i_i_sc_i_i     1100
-find_not_cclass_i_ic_sc_i_i    1101
-find_not_cclass_i_i_s_ic_i     1102
-find_not_cclass_i_ic_s_ic_i    1103
-find_not_cclass_i_i_sc_ic_i    1104
-find_not_cclass_i_ic_sc_ic_i   1105
-find_not_cclass_i_i_s_i_ic     1106
-find_not_cclass_i_ic_s_i_ic    1107
-find_not_cclass_i_i_sc_i_ic    1108
-find_not_cclass_i_ic_sc_i_ic   1109
-find_not_cclass_i_i_s_ic_ic    1110
-find_not_cclass_i_ic_s_ic_ic   1111
-find_not_cclass_i_i_sc_ic_ic   1112
-find_not_cclass_i_ic_sc_ic_ic  1113
-escape_s_s                     1114
-compose_s_s                    1115
-compose_s_sc                   1116
-spawnw_i_s                     1117
-spawnw_i_sc                    1118
-spawnw_i_p                     1119
-err_i                          1120
-err_s                          1121
-err_s_i                        1122
-err_s_ic                       1123
-time_i                         1124
-time_n                         1125
-gmtime_s_i                     1126
-gmtime_s_ic                    1127
-localtime_s_i                  1128
-localtime_s_ic                 1129
-decodetime_p_i                 1130
-decodetime_p_ic                1131
-decodelocaltime_p_i            1132
-decodelocaltime_p_ic           1133
-sysinfo_s_i                    1134
-sysinfo_s_ic                   1135
-sysinfo_i_i                    1136
-sysinfo_i_ic                   1137
-sleep_i                        1138
-sleep_ic                       1139
-sleep_n                        1140
-sleep_nc                       1141
-store_lex_s_p                  1142
-store_lex_sc_p                 1143
-store_dynamic_lex_s_p          1144
-store_dynamic_lex_sc_p         1145
-find_lex_p_s                   1146
-find_lex_p_sc                  1147
-find_dynamic_lex_p_s           1148
-find_dynamic_lex_p_sc          1149
-find_caller_lex_p_s            1150
-find_caller_lex_p_sc           1151
-get_namespace_p                1152
-get_namespace_p_p              1153
-get_namespace_p_pc             1154
-get_hll_namespace_p            1155
-get_hll_namespace_p_p          1156
-get_hll_namespace_p_pc         1157
-get_root_namespace_p           1158
-get_root_namespace_p_p         1159
-get_root_namespace_p_pc        1160
-get_global_p_s                 1161
-get_global_p_sc                1162
-get_global_p_p_s               1163
-get_global_p_pc_s              1164
-get_global_p_p_sc              1165
-get_global_p_pc_sc             1166
-get_hll_global_p_s             1167
-get_hll_global_p_sc            1168
-get_hll_global_p_p_s           1169
-get_hll_global_p_pc_s          1170
-get_hll_global_p_p_sc          1171
-get_hll_global_p_pc_sc         1172
-get_root_global_p_s            1173
-get_root_global_p_sc           1174
-get_root_global_p_p_s          1175
-get_root_global_p_pc_s         1176
-get_root_global_p_p_sc         1177
-get_root_global_p_pc_sc        1178
-set_global_s_p                 1179
-set_global_sc_p                1180
-set_global_p_s_p               1181
-set_global_pc_s_p              1182
-set_global_p_sc_p              1183
-set_global_pc_sc_p             1184
-set_hll_global_s_p             1185
-set_hll_global_sc_p            1186
-set_hll_global_p_s_p           1187
-set_hll_global_pc_s_p          1188
-set_hll_global_p_sc_p          1189
-set_hll_global_pc_sc_p         1190
-set_root_global_s_p            1191
-set_root_global_sc_p           1192
-set_root_global_p_s_p          1193
-set_root_global_pc_s_p         1194
-set_root_global_p_sc_p         1195
-set_root_global_pc_sc_p        1196
-find_name_p_s                  1197
-find_name_p_sc                 1198
-find_sub_not_null_p_s          1199
-find_sub_not_null_p_sc         1200

Modified: branches/gsoc_threads/src/ops/pmc.ops
==============================================================================
--- branches/gsoc_threads/src/ops/pmc.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/pmc.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -15,6 +15,9 @@
 Operations that deal with PMCs, including creation and
 destruction, manipulation, and introspection.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =cut
 
 ###############################################################################

Modified: branches/gsoc_threads/src/ops/set.ops
==============================================================================
--- branches/gsoc_threads/src/ops/set.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/set.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -11,6 +11,9 @@
 
 These operations all set registers to various values.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =over 4
 
 =cut

Modified: branches/gsoc_threads/src/ops/string.ops
==============================================================================
--- branches/gsoc_threads/src/ops/string.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/string.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -12,6 +12,9 @@
 Operations that work on strings, whether constructing, modifying
 or examining them.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =over 4
 
 =cut

Modified: branches/gsoc_threads/src/ops/sys.ops
==============================================================================
--- branches/gsoc_threads/src/ops/sys.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/sys.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -11,6 +11,9 @@
 
 Operations that allow the user to interact with the system.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =over 4
 
 =cut
@@ -107,172 +110,6 @@
 
 ########################################
 
-=item B<gmtime>(out STR, in INT)
-
-Take the integer, which represents GMT epoch-seconds, and turn it into a
-formatted string.
-
-=item B<localtime>(out STR, in INT)
-
-Take the integer, which represents GMT epoch-seconds, and turn it into a
-formatted string. The time is adjusted to localtime before formatting.
-
-=item B<decodetime>(out PMC, in INT)
-
-Take the integer, which represents GMT epoch-seconds, and return an Array
-PMC which represents the decoded time. The array elements are
-(include "tm.pasm" for the constants):
-
-=over 4
-
-=item 0, .TM_SEC
-
-Seconds (0-60)
-
-=item 1, .TM_MIN
-
-Minutes (0-59)
-
-=item 2, .TM_HOUR
-
-Hours (0-23)
-
-=item 3, .TM_MDAY
-
-Day of month (1-31)
-
-=item 4, .TM_MON
-
-Month of year (1-12) (Note, B<actual> month, not month - 1)
-
-=item 5, .TM_YEAR
-
-Year (note, B<actual> year. The year 2004 comes back as 2004, not 104)
-
-=item 6, .TM_WDAY
-
-Day of week. Sunday is day 0
-
-=item 7, .TM_YDAY
-
-Day of year (0-365)
-
-=item 8, .TM_ISDST
-
-Daylight savings/summer time in effect
-
-=back
-
-Timezone name will be GMT and offset will be 0, since the time is taken and
-decoded as GMT.
-
-=item B<decodelocaltime>(out PMC, in INT)
-
-Take the passed in  integer, which represents GMT epoch-seconds, and return
-an array as in decodetime. The time is first shifted to localtime before
-decoding.
-
-=cut
-
-op gmtime(out STR, in INT) {
-    struct tm tm;
-    const time_t t = (time_t) $2;
-    char resultbuffer[26];
-    Parrot_gmtime_r(&t, &tm);
-    Parrot_asctime_r(&tm, resultbuffer);
-    $1 = Parrot_str_new(interp, resultbuffer, 25);
-}
-
-op localtime(out STR, in INT) {
-    struct tm tm;
-    const time_t t = (time_t) $2;
-    char resultbuffer[26];
-    Parrot_localtime_r(&t, &tm);
-    Parrot_asctime_r(&tm, resultbuffer);
-    $1 = Parrot_str_new(interp, resultbuffer, 25);
-}
-
-op decodetime(out PMC, in INT) {
-    struct tm tm;
-    const time_t t = (time_t) $2;
-    Parrot_gmtime_r(&t, &tm);
-    $1 = tm_to_array(interp, &tm);
-}
-
-op decodelocaltime(out PMC, in INT) {
-    struct tm tm;
-    const time_t t = (time_t) $2;
-    Parrot_localtime_r(&t, &tm);
-    $1 = tm_to_array(interp, &tm);
-}
-
-########################################
-
-=item B<sysinfo>(out STR, in INT)
-
-=item B<sysinfo>(out INT, in INT)
-
-Return system information. The values it returns depends on what you
-ask. They are:
-
-=over 4
-
-=item 1 The size of a platform integer
-
-=item 2 The size of a platform float
-
-=item 3 The size of a platform pointer. (Largest possible data pointer)
-
-=item 4 The OS name
-
-This is something like "OS X", "MacOS", "Windows", or "VMS".
-
-=item 5 The OS version string
-
-This is the current (hopefully) OS Version. For OSes that have plain
-version numbers it will be the version number. For OSes that name
-their versions, it will be the version name.
-
-On HP/UX, this may be something like 11.2, while on Windows it may be
-"95", "98", "2000", "NT", "ME", or "XP".
-
-=item 6 The OS version number string
-
-On OSes that don't name themselves, this will be the same as what's
-returned in the OS version string. On OSes that I<do> name themselves,
-this will be a more specific version number. In all cases it is OS
-dependent.
-
-=item 7 The CPU architecture
-
-The name of the CPU family, such as "VAX", "Alpha", "PPC", or "x86".
-
-=item 8 The CPU model
-
-The model name of the current system's CPU. This is something like
-"EV68", "Athlon", or "Pentium III".
-
-=back
-
-Note that some of these values may be set at Parrot compile time,
-rather than at runtime, if the system has no reliable way to fetch the
-data dynamically, or if there is no way the value can change. Also,
-the value returned may be somewhat misleading--Parrot running under a
-VirtualPC window will report "Windows" as its OS and "x86" as its CPU,
-even if it's really running on an OS X system.
-
-=cut
-
-inline op sysinfo(out STR, in INT) {
-    $1 = sysinfo_s(interp, $2);
-}
-
-inline op sysinfo(out INT, in INT) {
-    $1 = sysinfo_i(interp, $2);
-}
-
-########################################
-
 =item B<sleep>(in INT)
 
 =item B<sleep>(in NUM)

Modified: branches/gsoc_threads/src/ops/var.ops
==============================================================================
--- branches/gsoc_threads/src/ops/var.ops	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/ops/var.ops	Thu Jun 10 21:09:12 2010	(r47545)
@@ -12,6 +12,9 @@
 These operations deal with both lexical and global variables,
 as well as the symbol tables that contain them.
 
+When making changes to any ops file, run C<make bootstrap-ops> to regenerate
+all generated ops files.
+
 =cut
 
 ###############################################################################
@@ -482,7 +485,9 @@
     PMC *sub = Parrot_find_name_op(interp, $2, dest);
 
     if (PMC_IS_NULL(sub)) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t *handler;
+        Parrot_pcc_set_pc_func(interp, CURRENT_CONTEXT(interp), dest);
+        handler = Parrot_ex_throw_from_op_args(interp, dest,
                        EXCEPTION_GLOBAL_NOT_FOUND,
                        "Could not find sub %Ss", $2);
         goto ADDRESS(handler);
@@ -496,7 +501,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/gsoc_threads/src/packdump.c
==============================================================================
--- branches/gsoc_threads/src/packdump.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/packdump.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -379,7 +379,6 @@
     for (i = 0; i < ft->fixup_count; ++i) {
         Parrot_io_printf(interp, "\t#%d\n", (int) i);
         switch (ft->fixups[i].type) {
-          case enum_fixup_label:
           case enum_fixup_sub:
             Parrot_io_printf(interp,
                         "\ttype => %d offs => %8d name => '%s',\n",

Modified: branches/gsoc_threads/src/packfile.c
==============================================================================
--- branches/gsoc_threads/src/packfile.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/packfile.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -3331,7 +3331,6 @@
         /* fixup_entry type */
         ++size;
         switch (ft->fixups[i].type) {
-          case enum_fixup_label:
           case enum_fixup_sub:
             size += PF_size_cstring(ft->fixups[i].name);
             ++size; /* offset */
@@ -3373,7 +3372,6 @@
     for (i = 0; i < ft->fixup_count; ++i) {
         *cursor++ = (opcode_t) ft->fixups[i].type;
         switch (ft->fixups[i].type) {
-          case enum_fixup_label:
           case enum_fixup_sub:
             cursor    = PF_store_cstring(cursor, ft->fixups[i].name);
             *cursor++ = ft->fixups[i].offset;
@@ -3470,7 +3468,6 @@
         entry->type = PF_fetch_opcode(pf, &cursor);
 
         switch (entry->type) {
-          case enum_fixup_label:
           case enum_fixup_sub:
             entry->name   = PF_fetch_cstring(interp, pf, &cursor);
             entry->offset = PF_fetch_opcode(pf, &cursor);
@@ -4671,7 +4668,7 @@
     else {
         STRING *err;
         PackFile_ByteCode * const cs =
-            (PackFile_ByteCode *)IMCC_compile_file_s(interp,
+            (PackFile_ByteCode *)Parrot_compile_file(interp,
                 filename, &err);
         Parrot_str_free_cstring(filename);
 

Modified: branches/gsoc_threads/src/packfile/pf_items.c
==============================================================================
--- branches/gsoc_threads/src/packfile/pf_items.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/packfile/pf_items.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1216,7 +1216,10 @@
     ASSERT_ARGS(PF_fetch_string)
     STRING   *s;
     UINTVAL   flags;
+    UINTVAL   encoding_nr;
     UINTVAL   charset_nr;
+    const ENCODING *encoding;
+    const CHARSET  *charset;
     size_t    size;
     const int wordsize          = pf ? pf->header->wordsize : sizeof (opcode_t);
     opcode_t  flag_charset_word = PF_fetch_opcode(pf, cursor);
@@ -1224,20 +1227,31 @@
     if (flag_charset_word == -1)
         return STRINGNULL;
 
-    /* decode flags and charset */
+    /* decode flags, charset and encoding */
     flags         = (flag_charset_word & 0x1 ? PObj_constant_FLAG : 0) |
                     (flag_charset_word & 0x2 ? PObj_private7_FLAG : 0) ;
-    charset_nr    = flag_charset_word >> 8;
+    encoding_nr   = (flag_charset_word >> 16);
+    charset_nr    = (flag_charset_word >> 8) & 0xFF;
 
 
     size = (size_t)PF_fetch_opcode(pf, cursor);
 
     TRACE_PRINTF(("PF_fetch_string(): flags=0x%04x, ", flags));
+    TRACE_PRINTF(("encoding_nr=%ld, ", encoding_nr));
     TRACE_PRINTF(("charset_nr=%ld, ", charset_nr));
     TRACE_PRINTF(("size=%ld.\n", size));
 
-    s = string_make_from_charset(interp, (const char *)*cursor,
-                        size, charset_nr, flags);
+    encoding = Parrot_get_encoding(interp, encoding_nr);
+    charset  = Parrot_get_charset(interp, charset_nr);
+    if (!encoding)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+                    "Invalid encoding number '%d' specified", encoding_nr);
+    if (!charset)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+                    "Invalid charset number '%d' specified", charset_nr);
+
+    s = Parrot_str_new_init(interp, (const char *)*cursor, size,
+            encoding, charset, flags);
 
     /* print only printable characters */
     TRACE_PRINTF_VAL(("PF_fetch_string(): string is '%s' at 0x%x\n",
@@ -1298,8 +1312,9 @@
      * see also PF_fetch_string
      */
 
-    /* encode charset_nr and flags into the same word for a 33% savings on constant overhead */
-    *cursor++ = (Parrot_charset_number_of_str(NULL, s) << 8)         |
+    /* encode charset_nr, encoding_nr and flags into the same word */
+    *cursor++ = (Parrot_encoding_number_of_str(NULL, s) << 16)       |
+                (Parrot_charset_number_of_str(NULL, s) << 8)         |
                 (PObj_get_FLAGS(s) & PObj_constant_FLAG ? 0x1 : 0x0) |
                 (PObj_get_FLAGS(s) & PObj_private7_FLAG ? 0x2 : 0x0) ;
     *cursor++ = s->bufused;
@@ -1355,7 +1370,8 @@
 
 */
 
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
+PARROT_WARN_UNUSED_RESULT
 size_t
 PF_size_strlen(const UINTVAL len)
 {

Modified: branches/gsoc_threads/src/parrot_debugger.c
==============================================================================
--- branches/gsoc_threads/src/parrot_debugger.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/parrot_debugger.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -140,8 +140,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
-#include "../compilers/imcc/imc.h"
-#include "../compilers/imcc/parser.h"
+#include "parrot/parrot.h"
 #include "parrot/embed.h"
 #include "parrot/debugger.h"
 #include "parrot/runcore_api.h"
@@ -206,34 +205,13 @@
             PackFile_fixup_subs(interp, PBC_MAIN, NULL);
         }
         else {
-            void            *yyscanner;
-            Parrot_PackFile  pf        = PackFile_new(interp, 0);
-            int              pasm_file = 0;
-
-            do_yylex_init(interp, &yyscanner);
+            STRING          *errmsg = NULL;
+            Parrot_PackFile  pf     = PackFile_new(interp, 0);
 
             Parrot_pbc_load(interp, pf);
-
-            IMCC_push_parser_state(interp);
-            IMCC_INFO(interp)->state->file = mem_sys_strdup(filename);
-
-            if (!(imc_yyin_set(fopen(filename, "r"), yyscanner)))    {
-                IMCC_fatal_standalone(interp, EXCEPTION_PIO_ERROR,
-                        "Error reading source file %s.\n",
-                        filename);
-            }
-
-            if (ext && STREQ(ext, ".pasm"))
-                pasm_file = 1;
-
-            emit_open(interp, 1, NULL);
-            IMCC_INFO(interp)->state->pasm_file = pasm_file;
-            yyparse(yyscanner, interp);
-            imc_compile_all_units(interp);
-
-            imc_cleanup(interp, yyscanner);
-
-            fclose(imc_yyin_get(yyscanner));
+            Parrot_compile_file(interp, filename, &errmsg);
+            if (errmsg)
+                Parrot_ex_throw_from_c_args(interp, NULL, 1, "%S", errmsg);
             PackFile_fixup_subs(interp, PBC_POSTCOMP, NULL);
 
             /* load the source for debugger list */

Modified: branches/gsoc_threads/src/pbc_merge.c
==============================================================================
--- branches/gsoc_threads/src/pbc_merge.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pbc_merge.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -523,9 +523,6 @@
 
             /* Set new offset and bytecode pointer. */
             switch (copy->type) {
-                case enum_fixup_label:
-                    copy->offset = cur_entry->offset + inputs[i]->code_start;
-                    break;
                 case enum_fixup_sub:
                     copy->offset = cur_entry->offset + inputs[i]->const_start;
                     break;

Modified: branches/gsoc_threads/src/pmc.c
==============================================================================
--- branches/gsoc_threads/src/pmc.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -80,6 +80,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_HOT
 INTVAL
@@ -187,8 +188,7 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_IGNORABLE_RESULT
 PMC *
-Parrot_pmc_reuse(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type,
-    SHIM(UINTVAL flags))
+Parrot_pmc_reuse(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type, SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(Parrot_pmc_reuse)
     pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type);
@@ -292,8 +292,7 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_IGNORABLE_RESULT
 PMC *
-Parrot_pmc_reuse_by_class(PARROT_INTERP, ARGMOD(PMC *pmc), ARGIN(PMC *class_),
-    UINTVAL flags)
+Parrot_pmc_reuse_by_class(PARROT_INTERP, ARGMOD(PMC *pmc), ARGIN(PMC *class_), UINTVAL flags)
 {
     ASSERT_ARGS(Parrot_pmc_reuse_by_class)
     const INTVAL   new_type   = PARROT_CLASS(class_)->id;
@@ -495,6 +494,7 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 PMC *
 Parrot_pmc_new_constant_noinit(PARROT_INTERP, INTVAL base_type)
 {
@@ -771,7 +771,7 @@
 Parrot_pmc_get_type_str(PARROT_INTERP, ARGIN_NULLOK(STRING *name))
 {
     ASSERT_ARGS(Parrot_pmc_get_type_str)
-    if (!name)
+    if (STRING_IS_NULL(name))
         return enum_type_undef;
     else {
         PMC * const classname_hash = interp->class_hash;
@@ -780,7 +780,7 @@
 
         if (!PMC_IS_NULL(item)) {
             /* nested namespace with same name */
-            if (item->vtable->base_type == enum_class_NameSpace)
+            if (PMC_IS_TYPE(item, NameSpace))
                 return enum_type_undef;
             else
                 return VTABLE_get_integer(interp, item);

Modified: branches/gsoc_threads/src/pmc/boolean.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/boolean.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/boolean.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2007, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -35,12 +35,8 @@
 
 */
     VTABLE void init_pmc(PMC *value) {
-        if (!PMC_IS_NULL(value)) {
-            SELF.set_bool(VTABLE_get_bool(INTERP, value));
-        }
-        else {
-            SELF.set_bool(0);
-        }
+        INTVAL v = PMC_IS_NULL(value) ? (INTVAL) 0 : VTABLE_get_bool(INTERP, value);
+        SELF.set_bool(v);
     }
 /*
 

Copied: branches/gsoc_threads/src/pmc/bytebuffer.pmc (from r47544, trunk/src/pmc/bytebuffer.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/pmc/bytebuffer.pmc	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/pmc/bytebuffer.pmc)
@@ -0,0 +1,353 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/bytebuffer.pmc - A byte buffer
+
+=head1 DESCRIPTION
+
+C<ByteBuffer> provides a resizable byte buffer with random access to
+individual bytes and conversions from and to parrot strings.
+
+=cut
+
+*/
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+static STRING * build_string(PARROT_INTERP,
+    ARGIN(const unsigned char *content),
+    INTVAL size,
+    ARGIN_NULLOK(const CHARSET *charset),
+    ARGIN_NULLOK(const ENCODING *encoding))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static INTVAL grow_to(INTVAL position);
+#define ASSERT_ARGS_build_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(content))
+#define ASSERT_ARGS_grow_to __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+pmclass ByteBuffer auto_attrs {
+    ATTR INTVAL allocated_size;
+    ATTR INTVAL size;
+    ATTR STRING *source;
+    ATTR unsigned char *content;
+
+/*
+
+=head2 Vtable functions
+
+=over 4
+
+=item C<void init()>
+
+Create an empty buffer
+
+=item C<void init_int()>
+
+Create a buffer of initial_size capacity.
+
+=item C<void mark()>
+
+Mark the source string if any.
+
+=item C<void destroy()>
+
+Free the buffer when destroying.
+
+=cut
+
+*/
+
+    VTABLE void init() {
+        PObj_custom_mark_destroy_SETALL(SELF);
+    }
+
+    VTABLE void init_int(INTVAL initial_size) {
+        unsigned char *content;
+        STATICSELF.init();
+        SET_ATTR_size(INTERP, SELF, initial_size);
+        SET_ATTR_allocated_size(INTERP, SELF, initial_size);
+        content = (unsigned char *)Parrot_gc_allocate_memory_chunk(INTERP, initial_size);
+        SET_ATTR_content(INTERP, SELF, content);
+    }
+
+    VTABLE void mark() {
+        STRING * source;
+        GET_ATTR_source(INTERP, SELF, source);
+        if (!STRING_IS_NULL(source))
+            Parrot_gc_mark_STRING_alive(INTERP, source);
+    }
+
+    VTABLE void destroy() {
+        INTVAL allocated_size;
+        GET_ATTR_allocated_size(INTERP, SELF, allocated_size);
+        if (allocated_size) {
+            unsigned char *content;
+            GET_ATTR_content(INTERP, SELF, content);
+            Parrot_gc_free_memory_chunk(INTERP, content);
+        }
+    }
+
+/*
+
+=item C<INTVAL elements()>
+
+Get current size.
+
+=cut
+
+*/
+
+    VTABLE INTVAL elements() {
+        INTVAL size;
+        GET_ATTR_size(INTERP, SELF, size);
+        return size;
+    }
+
+/*
+
+=item C<void set_string_native()>
+
+Reset the buffer with the content of the string.
+
+=cut
+
+*/
+
+    VTABLE void set_string_native(STRING *new_string) {
+        INTVAL allocated_size;
+        GET_ATTR_allocated_size(INTERP, SELF, allocated_size);
+        if (allocated_size) {
+            unsigned char *content;
+            GET_ATTR_content(INTERP, SELF, content);
+            Parrot_gc_free_memory_chunk(INTERP, content);
+            SET_ATTR_allocated_size(INTERP, SELF, 0);
+        }
+        SET_ATTR_source(INTERP, SELF, new_string);
+        SET_ATTR_size(INTERP, SELF, Parrot_str_byte_length(INTERP, new_string));
+        SET_ATTR_content(INTERP, SELF, (unsigned char *)new_string->strstart);
+    }
+
+/*
+
+=item C<INTVAL get_integer_keyed_int()>
+
+Get the value of the byte at position or 0 if out of bounds.
+
+=cut
+
+*/
+
+    VTABLE INTVAL get_integer_keyed_int(INTVAL position) {
+        INTVAL size;
+        unsigned char *content;
+        GET_ATTR_size(INTERP, SELF, size);
+        GET_ATTR_content(INTERP, SELF, content);
+        return (position >= 0 && position < size) ? content[position] : (INTVAL) 0;
+    }
+
+/*
+
+=item C<void set_integer_keyed_int()>
+
+Set the value of the byte at position.
+
+=cut
+
+*/
+
+    VTABLE void set_integer_keyed_int(INTVAL position, INTVAL value) {
+        unsigned char *content;
+        INTVAL size, allocated_size;
+        if (position < 0)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+                "Negative position not allowed");
+
+        GET_ATTR_allocated_size(INTERP, SELF, allocated_size);
+        if (position >= allocated_size) {
+            INTVAL newsize = grow_to(position);
+            if (allocated_size == 0) {
+                INTVAL copysize = newsize;
+                STRING * source;
+                content = (unsigned char *)Parrot_gc_allocate_memory_chunk(INTERP, newsize);
+                GET_ATTR_source(INTERP, SELF, source);
+                if (!STRING_IS_NULL(source)) {
+                    INTVAL srclen = Parrot_str_byte_length(INTERP, source);
+                    if (srclen < copysize)
+                        copysize = srclen;
+                    memcpy(content, source->strstart, copysize);
+                    SET_ATTR_source(INTERP, SELF, STRINGNULL);
+                }
+            }
+            else {
+                GET_ATTR_content(INTERP, SELF, content);
+                content = (unsigned char *)
+                    Parrot_gc_reallocate_memory_chunk(INTERP, content, newsize);
+            }
+
+            SET_ATTR_content(INTERP, SELF, content);
+            SET_ATTR_allocated_size(INTERP, SELF, newsize);
+        }
+        else
+            GET_ATTR_content(INTERP, SELF, content);
+
+        GET_ATTR_size(INTERP, SELF, size);
+        if (position >= size) {
+            size = position + 1;
+            SET_ATTR_size(INTERP, SELF, size);
+        }
+        content[position] = value;
+    }
+
+/*
+
+=item C<PMC *get_iter()>
+
+Return a new Iterator for this PMC.
+
+=cut
+
+*/
+
+    VTABLE PMC *get_iter() {
+        return Parrot_pmc_new_init(INTERP, enum_class_ArrayIterator, SELF);
+    }
+
+/*
+
+=back
+
+=head2 Methods
+
+=over 4
+
+=item C<get_string(string charset, string encoding)>
+
+Create a string with the buffer content and the charset and encoding
+specified.
+
+=cut
+
+*/
+
+    METHOD get_string(STRING *charsetname, STRING *encodingname) {
+        STRING *result;
+        unsigned char *content;
+        INTVAL size;
+        const CHARSET *charset = Parrot_get_charset(INTERP,
+            Parrot_charset_number(INTERP, charsetname));
+        const ENCODING *encoding = Parrot_get_encoding(INTERP,
+            Parrot_encoding_number(INTERP, encodingname));
+        GET_ATTR_content(INTERP, SELF, content);
+        GET_ATTR_size(INTERP, SELF, size);
+        result = build_string(INTERP, content, size, charset, encoding);
+        RETURN(STRING *result);
+    }
+
+/*
+
+=item C<get_string_as(string as)>
+
+Create a string with the buffer content and the same charset and encoding
+as the string argument.
+
+=cut
+
+*/
+
+    METHOD get_string_as(STRING *as :optional) {
+        STRING *result;
+        unsigned char *content;
+        INTVAL size;
+        const CHARSET* charset = STRING_IS_NULL(as) ? PARROT_DEFAULT_CHARSET : as->charset;
+        const ENCODING *encoding = STRING_IS_NULL(as) ? PARROT_DEFAULT_ENCODING : as->encoding;
+        GET_ATTR_content(INTERP, SELF, content);
+        GET_ATTR_size(INTERP, SELF, size);
+        result = build_string(INTERP, content, size, charset, encoding);
+        RETURN(STRING *result);
+    }
+
+} /* pmclass end */
+
+/*
+
+=back
+
+=head2 Auxiliar functions
+
+=over 4
+
+=item C<static INTVAL grow_to(INTVAL position)>
+
+Calculate new size enough for using position and with some margin to
+decrease the number of reallocations.
+
+=item C<static STRING * build_string(PARROT_INTERP, const unsigned char
+*content, INTVAL size, const CHARSET *charset, const ENCODING *encoding)>
+
+Build a string fro the buffer content with the charset and encoding specified.
+
+=cut
+
+*/
+
+static INTVAL
+grow_to(INTVAL position)
+{
+    ASSERT_ARGS(grow_to)
+
+    const UINTVAL blocksize = 2048;
+    UINTVAL minsize = position + 1;
+    return (INTVAL) (minsize < 64 ? 64 :
+           minsize < 256 ? 256 :
+           minsize < 1024 ? 1024 :
+           ((minsize + blocksize - 1) / blocksize) * blocksize);
+}
+
+PARROT_CANNOT_RETURN_NULL
+static STRING *
+build_string(PARROT_INTERP, ARGIN(const unsigned char *content),
+        INTVAL size,
+        ARGIN_NULLOK(const CHARSET *charset),
+        ARGIN_NULLOK(const ENCODING *encoding))
+{
+    ASSERT_ARGS(build_string)
+    STRING *result;
+    if (charset == NULL)
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+                "Invalid charset");
+    if (encoding == NULL)
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+                "Invalid encoding");
+    result = Parrot_str_new_init(interp, (const char *)content, size, encoding, charset, 0);
+    if (!CHARSET_VALIDATE(interp, result))
+        Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_STRING_REPRESENTATION,
+                "Invalid buffer content");
+    return result;
+}
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/gsoc_threads/src/pmc/callcontext.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/callcontext.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/callcontext.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -79,6 +79,13 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+static void ensure_positionals_storage_ap(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL size,
+    INTVAL allocated_positionals)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 PARROT_CANNOT_RETURN_NULL
 static Pcc_cell* get_cell_at(PARROT_INTERP, ARGIN(PMC *self), INTVAL key)
         __attribute__nonnull__(1)
@@ -121,6 +128,9 @@
 #define ASSERT_ARGS_ensure_positionals_storage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_ensure_positionals_storage_ap __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
 #define ASSERT_ARGS_get_cell_at __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self))
@@ -146,14 +156,24 @@
 ensure_positionals_storage(PARROT_INTERP, ARGIN(PMC *self), INTVAL size)
 {
     ASSERT_ARGS(ensure_positionals_storage)
-    INTVAL num_positionals, allocated_positionals;
-    Pcc_cell *array, *new_array;
+    INTVAL allocated_positionals;
 
     GETATTR_CallContext_allocated_positionals(interp, self, allocated_positionals);
 
     if (size <= allocated_positionals)
         return;
 
+    ensure_positionals_storage_ap(interp, self, size, allocated_positionals);
+}
+
+static void
+ensure_positionals_storage_ap(PARROT_INTERP,
+                              ARGIN(PMC *self), INTVAL size, INTVAL allocated_positionals)
+{
+    ASSERT_ARGS(ensure_positionals_storage_ap)
+    INTVAL num_positionals;
+    Pcc_cell *array, *new_array;
+
     if (size < 8)
         size = 8;
 
@@ -934,7 +954,7 @@
         GET_ATTR_allocated_positionals(INTERP, SELF, allocated_positionals);
 
         if (num_pos + 1 > allocated_positionals)
-            ensure_positionals_storage(INTERP, SELF, num_pos + 1);
+            ensure_positionals_storage_ap(INTERP, SELF, num_pos + 1, allocated_positionals);
 
         GET_ATTR_positionals(INTERP, SELF, cells);
         cells[num_pos].u.i      = value;
@@ -976,7 +996,7 @@
         GET_ATTR_allocated_positionals(INTERP, SELF, allocated_positionals);
 
         if (num_pos + 1 > allocated_positionals)
-            ensure_positionals_storage(INTERP, SELF, num_pos + 1);
+            ensure_positionals_storage_ap(INTERP, SELF, num_pos + 1, allocated_positionals);
 
         GET_ATTR_positionals(INTERP, SELF, cells);
         cells[num_pos].u.p      = value;

Modified: branches/gsoc_threads/src/pmc/coroutine.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/coroutine.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/coroutine.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -111,7 +111,6 @@
 */
 
     VTABLE PMC *clone() {
-        STRING     *name;
         PMC * const ret = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
 
         PObj_custom_mark_destroy_SETALL(ret);

Modified: branches/gsoc_threads/src/pmc/exception.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/exception.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/exception.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -52,10 +52,38 @@
 #include "parrot/exceptions.h"
 #include "pmc/pmc_sub.h"
 
+typedef enum {
+    attr_id,
+    attr_birthtime,
+    attr_message,
+    attr_payload,
+    attr_resume,
+    attr_severity,
+    attr_type,
+    attr_exit_code,
+    attr_backtrace,
+    attr_handled,
+    attr_handler_iter,
+    attr_handler_ctx,
+    attr_thrower,
+    attr_NONE = -1
+} AttrEnum;
+
 /* HEADERIZER HFILE: none */
 /* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static AttrEnum getAttrEnum(PARROT_INTERP, ARGIN(const STRING *name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_getAttrEnum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(name))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+
 pmclass Exception auto_attrs {
 
     ATTR INTVAL          id;           /* The task ID in the scheduler. */
@@ -87,16 +115,18 @@
 */
 
     VTABLE void init() {
-        /* Set flags for custom GC mark and destroy. */
+        /* Use custom mark */
         PObj_custom_mark_SET(SELF);
 
-        SET_ATTR_severity(INTERP, SELF, EXCEPT_error);
-        SET_ATTR_handled(INTERP, SELF, 0);
-        SET_ATTR_message(INTERP, SELF, NULL);
+        /* Set default values */
+        SET_ATTR_message(INTERP, SELF, STRINGNULL);
         SET_ATTR_payload(INTERP, SELF, PMCNULL);
         SET_ATTR_resume(INTERP, SELF, PMCNULL);
+        SET_ATTR_severity(INTERP, SELF, EXCEPT_error);
         SET_ATTR_backtrace(INTERP, SELF, PMCNULL);
         SET_ATTR_handler_iter(INTERP, SELF, PMCNULL);
+        SET_ATTR_handler_ctx(INTERP, SELF, PMCNULL);
+        SET_ATTR_thrower(INTERP, SELF, PMCNULL);
     }
 
 /*
@@ -110,34 +140,27 @@
 */
 
     VTABLE void init_pmc(PMC *values) {
-        INTVAL severity_val;
-        STRING *message_val;
+        INTVAL severity_val = EXCEPT_error;
+        STRING *message_val = NULL;
 
         const INTVAL ishash = VTABLE_isa(INTERP, values, CONST_STRING(INTERP, 'Hash'));
 
+        STATICSELF.init();
+
         if (ishash) {
             STRING * const severity = CONST_STRING(INTERP, "severity");
             STRING * const message  = CONST_STRING(INTERP, "message");
             severity_val = VTABLE_get_integer_keyed_str(INTERP, values, severity);
             message_val = VTABLE_get_string_keyed_str(INTERP, values, message);
         }
-        else {
-            severity_val = EXCEPT_error;
+        else
             message_val  = VTABLE_get_string(INTERP, values);
-        }
 
-        /* Set flags for custom GC mark. */
-        PObj_custom_mark_SET(SELF);
-
-        /* Set up the core struct and default values for the exception object. */
+        /* Set up the values for the exception object. */
 
         SET_ATTR_severity(INTERP, SELF, severity_val);
-        SET_ATTR_handled(INTERP, SELF, 0);
-        SET_ATTR_message(INTERP, SELF, message_val);
-        SET_ATTR_payload(INTERP, SELF, PMCNULL);
-        SET_ATTR_resume(INTERP, SELF, PMCNULL);
-        SET_ATTR_backtrace(INTERP, SELF, PMCNULL);
-        SET_ATTR_handler_iter(INTERP, SELF, PMCNULL);
+        if (! STRING_IS_NULL(message_val))
+            SET_ATTR_message(INTERP, SELF, message_val);
 
     }
 
@@ -250,19 +273,20 @@
         STRING * const name = VTABLE_get_string(INTERP, key);
         INTVAL  result = 0;
 
-        if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
+        switch (getAttrEnum(INTERP, name)) {
+          case attr_type:
             GET_ATTR_type(INTERP, SELF, result);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "severity"))) {
+            break;
+          case attr_severity:
             GET_ATTR_severity(INTERP, SELF, result);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "exit_code"))) {
+            break;
+          case attr_exit_code:
             GET_ATTR_exit_code(INTERP, SELF, result);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handled"))) {
+            break;
+          case attr_handled:
             GET_ATTR_handled(INTERP, SELF, result);
-        }
-        else {
+            break;
+          default:
             /* If unknown attribute name, throw an exception. */
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such integer attribute '%S'", name);
@@ -283,20 +307,20 @@
 
     VTABLE INTVAL get_integer_keyed_str(STRING *key) {
         INTVAL result = 0;
-
-        if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "type"))) {
+        switch (getAttrEnum(INTERP, key)) {
+          case attr_type:
             GET_ATTR_type(INTERP, SELF, result);
-        }
-        else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "severity"))) {
+            break;
+          case attr_severity:
             GET_ATTR_severity(INTERP, SELF, result);
-        }
-        else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "exit_code"))) {
+            break;
+          case attr_exit_code:
             GET_ATTR_exit_code(INTERP, SELF, result);
-        }
-        else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "handled"))) {
+            break;
+          case attr_handled:
             GET_ATTR_handled(INTERP, SELF, result);
-        }
-        else {
+            break;
+          default:
             /* If unknown attribute name, throw an exception. */
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such integer attribute '%S'", key);
@@ -400,20 +424,20 @@
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
         STRING * const name = VTABLE_get_string(INTERP, key);
-
-        if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
+        switch (getAttrEnum(INTERP, name)) {
+          case attr_type:
             SET_ATTR_type(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "severity"))) {
+            break;
+          case attr_severity:
             SET_ATTR_severity(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "exit_code"))) {
+            break;
+          case attr_exit_code:
             SET_ATTR_exit_code(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handled"))) {
+            break;
+          case attr_handled:
             SET_ATTR_handled(INTERP, SELF, value);
-        }
-        else {
+            break;
+          default:
             /* If unknown attribute name, throw an exception. */
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such integer attribute '%S'", name);
@@ -431,19 +455,20 @@
 */
 
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
-        if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "type"))) {
+        switch (getAttrEnum(INTERP, key)) {
+          case attr_type:
             SET_ATTR_type(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "severity"))) {
+            break;
+          case attr_severity:
             SET_ATTR_severity(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "exit_code"))) {
+            break;
+          case attr_exit_code:
             SET_ATTR_exit_code(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "handled"))) {
+            break;
+          case attr_handled:
             SET_ATTR_handled(INTERP, SELF, value);
-        }
-        else {
+            break;
+          default:
             /* If unknown attribute name, throw an exception. */
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such integer attribute '%S'", key);
@@ -542,47 +567,68 @@
     VTABLE PMC *get_attr_str(STRING *name) {
         PMC *value = PMCNULL;
 
-        if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
-                INTVAL type;
-                GET_ATTR_type(INTERP, SELF, type);
-                value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, type);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "severity"))) {
-                INTVAL severity;
-                GET_ATTR_severity(INTERP, SELF, severity);
-                value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, severity);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "exit_code"))) {
-                INTVAL exit_code;
-                GET_ATTR_exit_code(INTERP, SELF, exit_code);
-                value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, exit_code);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handled"))) {
-                INTVAL handled;
-                GET_ATTR_handled(INTERP, SELF, handled);
-                value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, handled);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "message"))) {
-                STRING *message = SELF.get_string();
-                value = Parrot_pmc_new(INTERP, enum_class_String);
-                VTABLE_set_string_native(INTERP, value, message);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "payload"))) {
-                GET_ATTR_payload(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "resume"))) {
-                GET_ATTR_resume(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "backtrace"))) {
-                GET_ATTR_backtrace(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handler_iter"))) {
-                GET_ATTR_handler_iter(INTERP, SELF, value);
-        }
-        else {
+        switch (getAttrEnum(INTERP, name)) {
+          case attr_type:
+            {
+            INTVAL type;
+            GET_ATTR_type(INTERP, SELF, type);
+            value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, type);
+            }
+            break;
+          case attr_severity:
+            {
+            INTVAL severity;
+            GET_ATTR_severity(INTERP, SELF, severity);
+            value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, severity);
+            }
+            break;
+          case attr_exit_code:
+            {
+            INTVAL exit_code;
+            GET_ATTR_exit_code(INTERP, SELF, exit_code);
+            value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, exit_code);
+            }
+          case attr_handled:
+            {
+            INTVAL handled;
+            GET_ATTR_handled(INTERP, SELF, handled);
+            value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, handled);
+            }
+            break;
+          case attr_message:
+            {
+            STRING *message = SELF.get_string();
+            value = Parrot_pmc_new(INTERP, enum_class_String);
+            VTABLE_set_string_native(INTERP, value, message);
+            }
+            break;
+          case attr_birthtime:
+            {
+            FLOATVAL birthtime;
+            GET_ATTR_birthtime(INTERP, SELF, birthtime);
+            value = Parrot_pmc_new(INTERP, enum_class_Float);
+            VTABLE_set_number_native(INTERP, value, birthtime);
+            }
+            break;
+          case attr_payload:
+            GET_ATTR_payload(INTERP, SELF, value);
+            break;
+          case attr_resume:
+            GET_ATTR_resume(INTERP, SELF, value);
+            break;
+          case attr_backtrace:
+            GET_ATTR_backtrace(INTERP, SELF, value);
+            break;
+          case attr_handler_iter:
+            GET_ATTR_handler_iter(INTERP, SELF, value);
+            break;
+          case attr_NONE:
             /* If unknown attribute name, throw an exception. */
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such attribute '%S'", name);
+          default:
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+                "Can't get attribute '%S'", name);
         }
 
         return value;
@@ -599,53 +645,60 @@
 */
     VTABLE void set_attr_str(STRING *name, PMC *value) {
 
-        if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
+        switch (getAttrEnum(INTERP, name)) {
+          case attr_type:
+            {
             const INTVAL type = VTABLE_get_integer(INTERP, value);
             SET_ATTR_type(INTERP, SELF, type);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "severity"))) {
+            }
+            break;
+          case attr_severity:
+            {
             const INTVAL severity = VTABLE_get_integer(INTERP, value);
             SET_ATTR_severity(INTERP, SELF, severity);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "exit_code"))) {
+            }
+            break;
+          case attr_exit_code:
+            {
             const INTVAL exit_code = VTABLE_get_integer(INTERP, value);
             SET_ATTR_exit_code(INTERP, SELF, exit_code);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handled"))) {
+            }
+            break;
+          case attr_handled:
+            {
             const INTVAL handled = VTABLE_get_integer(INTERP, value);
             SET_ATTR_handled(INTERP, SELF, handled);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "message"))) {
+            }
+            break;
+          case attr_message:
+            {
             STRING * const message = VTABLE_get_string(INTERP, value);
             SELF.set_string_native(message);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "payload"))) {
+            }
+            break;
+          case attr_payload:
             SET_ATTR_payload(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "resume"))) {
+            break;
+          case attr_resume:
             SET_ATTR_resume(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "backtrace"))) {
+            break;
+          case attr_backtrace:
             SET_ATTR_backtrace(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handler_iter"))) {
+            break;
+          case attr_handler_iter:
             SET_ATTR_handler_iter(INTERP, SELF, value);
-        }
-        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "thrower"))) {
-            /* Ensure it's a ret cont, and extract the from_ctx.
-             * XXX TT #596 - when we have Context PMCs, just take and set that. */
-            if (!PMC_IS_NULL(value) && VTABLE_isa(INTERP, value, CONST_STRING(INTERP, "Continuation"))) {
-                PMC * const ctx = PMC_cont(value)->from_ctx;
-                if (!PMC_IS_NULL(ctx))
-                    SET_ATTR_thrower(INTERP, SELF, ctx);
-            }
-        }
-        else {
+            break;
+          case attr_thrower:
+            SET_ATTR_thrower(INTERP, SELF, value);
+            break;
+          case attr_NONE:
             /* If unknown attribute name, throw an exception. */
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such attribute '%S'", name);
+          default:
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+                "Can't set attribute '%S'", name);
         }
-
     }
 
 /*
@@ -742,10 +795,13 @@
             Parrot_pcc_invoke_method_from_c_args(INTERP, cont->to_ctx, CONST_STRING(INTERP, "backtrace"), "P->P", resume, &result);
         }
         else {
+            /* Hopefully we have a thrower set - our most epic fail fallback is
+             * to just assume the thrower is the current context. */
             PMC *cur_ctx;
-            /* No return continuation. Assuming we're being called  */
             GET_ATTR_thrower(INTERP, SELF, cur_ctx);
-            Parrot_pcc_invoke_method_from_c_args(INTERP, CURRENT_CONTEXT(INTERP), CONST_STRING(INTERP, "backtrace"), "->P", &result);
+            if (PMC_IS_NULL(cur_ctx))
+                cur_ctx = CURRENT_CONTEXT(INTERP);
+            Parrot_pcc_invoke_method_from_c_args(INTERP, cur_ctx, CONST_STRING(INTERP, "backtrace"), "->P", &result);
         }
 
         RETURN(PMC *result);
@@ -763,6 +819,63 @@
 }
 
 /*
+
+=head2 Auxliary functions
+
+=over 4
+
+=item C<static AttrEnum getAttrEnum(PARROT_INTERP, const STRING *name)>
+
+Gets an enumerated value corresponding to the attribute with that name.
+
+=cut
+
+*/
+
+static AttrEnum
+getAttrEnum(PARROT_INTERP, ARGIN(const STRING *name))
+{
+    ASSERT_ARGS(getAttrEnum)
+
+    AttrEnum r;
+    if (Parrot_str_equal(interp, name, CONST_STRING(interp, "birthtime")))
+        r = attr_birthtime;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "message")))
+        r = attr_message;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "payload")))
+        r = attr_payload;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "resume")))
+        r = attr_resume;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "severity")))
+        r = attr_severity;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "type")))
+        r = attr_type;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "exit_code")))
+        r = attr_exit_code;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "backtrace")))
+        r = attr_backtrace;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "handled")))
+        r = attr_handled;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "handler_iter")))
+        r = attr_handler_iter;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "handler_ctx")))
+        r = attr_handler_ctx;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "thrower")))
+        r = attr_thrower;
+    else
+        r = attr_NONE;
+    return r;
+}
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
  * Local variables:
  *   c-file-style: "parrot"
  * End:

Modified: branches/gsoc_threads/src/pmc/filehandle.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/filehandle.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/filehandle.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -698,6 +698,70 @@
         RETURN(INTVAL -1);
     }
 
+/*
+
+=item C<METHOD tell()>
+
+Get the file position of the stream. 2 C<INTVAL>s are returned. The first is
+the position. The second is the position shifted down by 32 bits to handle
+overflows on 32-bit systems.
+
+=cut
+
+*/
+
+    METHOD tell() {
+        PIOOFF_T pos;
+        GET_ATTR_file_pos(INTERP, SELF, pos);
+        RETURN(INTVAL pos, INTVAL pos >> 32);
+    }
+
+/*
+
+=item C<METHOD seek(INTVAL whence, INTVAL offs, INTVAL offs_overflow)>
+
+Set the file position to an offset specified by C<offs> (and optionally
+C<offs_overflow>). C<whence> determines from where in the file the offset is
+taken.
+
+ Whence Value      Meaning
+ 0                 Seek from the beginning of the file
+ 1                 Seek from the current position
+ 2                 Seek from the end of the file
+
+C<offs_overflow> is optional and is used to handle offsets higher than 2Gb on
+32bit systems.
+
+=cut
+
+*/
+
+    METHOD seek(INTVAL whence, INTVAL offs, INTVAL offs_overflow :optional,
+                int has_overflow :opt_flag) {
+        const PIOOFF_T pio_offs = has_overflow ?
+                                    Parrot_io_make_offset32(offs_overflow, offs) :
+                                    offs;
+        if (0 > Parrot_io_seek(INTERP, SELF, pio_offs, whence))
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR, "seek failed");
+    }
+
+/*
+
+=item C<METHOD peek()>
+
+Returns the next byte from the stream, but does not remove it.
+
+=cut
+
+*/
+
+    METHOD peek() {
+        STRING *s = NULL;
+        if (Parrot_io_peek(INTERP, SELF, &s) < 0)
+            RETURN(STRING* STRINGNULL);
+        else
+            RETURN(STRING* s);
+    }
 
 /*
 

Modified: branches/gsoc_threads/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/fixedintegerarray.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/fixedintegerarray.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -21,8 +21,20 @@
 
 /* HEADERIZER HFILE: none */
 /* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static int auxcmpfunc(const INTVAL *i, const INTVAL *j);
+#define ASSERT_ARGS_auxcmpfunc __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+static int
+auxcmpfunc(const INTVAL *i, const INTVAL *j)
+{
+    ASSERT_ARGS(auxcmpfunc)
+    return *i - *j;
+}
+
 pmclass FixedIntegerArray auto_attrs provides array {
     ATTR INTVAL   size;  /* number of INTVALs stored in this array */
     ATTR INTVAL * int_array; /* INTVALs are stored here */
@@ -492,19 +504,23 @@
         SELF.set_pmc_keyed_int(k, value);
     }
 
-    METHOD sort(PMC *cmp_func) {
-        INTVAL *int_array;
+    METHOD sort(PMC *cmp_func :optional) {
         UINTVAL n;
         INTVAL  size;
 
         GET_ATTR_size(INTERP, SELF, size);
-
         n = (UINTVAL)size;
 
         if (n > 1) {
+            INTVAL *int_array;
             GET_ATTR_int_array(INTERP, SELF, int_array);
-            Parrot_quicksort(INTERP, (void**)int_array, n, cmp_func);
+            if (PMC_IS_NULL(cmp_func))
+                qsort(int_array, n, sizeof (INTVAL),
+                        (int (*)(const void *, const void*))auxcmpfunc);
+            else
+                Parrot_quicksort(INTERP, (void**)int_array, n, cmp_func);
         }
+        RETURN(PMC *SELF);
     }
 
 /*

Modified: branches/gsoc_threads/src/pmc/fixedstringarray.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/fixedstringarray.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/fixedstringarray.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -579,7 +579,7 @@
             if (item1 == item2)
                 continue;
 
-            if (item1 == NULL ||  item2 == NULL)
+            if (STRING_IS_NULL(item1) ||  STRING_IS_NULL(item2))
                 return 0;
 
             if (!Parrot_str_equal(INTERP, item1, item2))

Modified: branches/gsoc_threads/src/pmc/imageio.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/imageio.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/imageio.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -423,7 +423,7 @@
     VTABLE void mark() {
         PObj * const buffer = (PObj *)(PARROT_IMAGEIO(SELF)->buffer);
         if (buffer)
-            Parrot_gc_mark_PObj_alive(INTERP, (PObj *)(PARROT_IMAGEIO(SELF)->buffer));
+            Parrot_gc_mark_PObj_alive(INTERP, buffer);
         Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIO(SELF)->todo);
         Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIO(SELF)->seen);
     }

Modified: branches/gsoc_threads/src/pmc/nci.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/nci.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/nci.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -169,6 +169,7 @@
 
 pmclass NCI auto_attrs provides invokable {
     /* NCI thunk handling attributes */
+    /* NCI thunk handling attributes */
     ATTR STRING    *signature;              /* The signature. */
     ATTR void      *func;                   /* Function pointer to call. */
     ATTR PMC       *fb_info;                /* Frame-builder info */

Modified: branches/gsoc_threads/src/pmc/orderedhash.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/orderedhash.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/orderedhash.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -263,7 +263,7 @@
                 PARROT_ORDEREDHASH(SELF);
 
         if (attrs->hash)
-            Parrot_gc_mark_PObj_alive(INTERP, (PObj *)attrs->hash);
+            Parrot_gc_mark_PMC_alive(INTERP, attrs->hash);
 
         /* Don't mark C<first> and C<last>. They are in lookup hash anyway */
     }

Modified: branches/gsoc_threads/src/pmc/parrotinterpreter.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/parrotinterpreter.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/parrotinterpreter.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -844,6 +844,7 @@
 
     METHOD stdhandle(INTVAL fileno, PMC *newhandle :optional) {
         PMC * const handle = Parrot_io_stdhandle(INTERP, fileno, newhandle);
+        Parrot_warn_deprecated(INTERP, "stdhandle method is experimental");
         RETURN(PMC *handle);
     }
 

Modified: branches/gsoc_threads/src/pmc/resizableintegerarray.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/resizableintegerarray.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/resizableintegerarray.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -313,8 +313,12 @@
     }
 
     VTABLE void thaw(PMC *info) {
-        const INTVAL n = VTABLE_shift_integer(INTERP, info);
-        const INTVAL rt = VTABLE_shift_integer(INTERP, info);
+        INTVAL n, rt;
+
+        SUPER(info);
+
+        n = VTABLE_shift_integer(INTERP, info);
+        rt = VTABLE_shift_integer(INTERP, info);
 
         SET_ATTR_size(INTERP, SELF, 0);
         SET_ATTR_resize_threshold(INTERP, SELF, rt);

Modified: branches/gsoc_threads/src/pmc/resizablepmcarray.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/resizablepmcarray.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/resizablepmcarray.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -11,7 +11,7 @@
 This class, ResizablePMCArray, implements an resizable array which stores PMCs.
 It puts things into Integer, Float, or String PMCs as appropriate.
 
-=head2 Functions
+=head2 Vtable Functions
 
 =over 4
 
@@ -25,6 +25,21 @@
 
 /* HEADERIZER HFILE: none */
 /* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_DOES_NOT_RETURN
+static void throw_pop_empty(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+PARROT_DOES_NOT_RETURN
+static void throw_shift_empty(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_throw_pop_empty __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_throw_shift_empty __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
 pmclass ResizablePMCArray extends FixedPMCArray auto_attrs provides array {
@@ -134,8 +149,7 @@
         FLOATVAL  value;
 
         if (0 == size)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                    "ResizablePMCArray: Can't shift from an empty array!");
+            throw_shift_empty(INTERP);
 
         item           = PMC_array(SELF);
         data           = item[0];
@@ -156,8 +170,7 @@
         INTVAL    value;
 
         if (0 == size)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                    "ResizablePMCArray: Can't shift from an empty array!");
+            throw_shift_empty(INTERP);
 
         item           = PMC_array(SELF);
         data           = item[0];
@@ -176,8 +189,7 @@
         PMC   **item;
 
         if (0 == size)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                    "ResizablePMCArray: Can't shift from an empty array!");
+            throw_shift_empty(INTERP);
 
         item           = PMC_array(SELF);
         data           = item[0];
@@ -196,8 +208,7 @@
         STRING  *value;
 
         if (0 == size)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                    "ResizablePMCArray: Can't shift from an empty array!");
+            throw_shift_empty(INTERP);
 
         item           = PMC_array(SELF);
         data           = item[0];
@@ -435,8 +446,7 @@
         PMC     *data;
 
         if (0 == size)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                    "ResizablePMCArray: Can't pop from an empty array!");
+            throw_pop_empty(INTERP);
 
         data           = PMC_array(SELF)[--size];
         PMC_size(SELF) = size;
@@ -450,8 +460,7 @@
         PMC    *data;
 
         if (0 == size)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                    "ResizablePMCArray: Can't pop from an empty array!");
+            throw_pop_empty(INTERP);
 
         data           = PMC_array(SELF)[--size];
         PMC_size(SELF) = size;
@@ -465,8 +474,7 @@
         PMC   *data;
 
         if (0 == size)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                    "ResizablePMCArray: Can't pop from an empty array!");
+            throw_pop_empty(INTERP);
 
         data           = PMC_array(SELF)[--size];
         PMC_size(SELF) = size;
@@ -480,8 +488,7 @@
         PMC    *data;
 
         if (0 == size)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                    "ResizablePMCArray: Can't pop from an empty array!");
+            throw_pop_empty(INTERP);
 
         data           = PMC_array(SELF)[--size];
         PMC_size(SELF) = size;
@@ -604,43 +611,6 @@
 
 /*
 
-=item METHOD append(PMC *other)
-
-Append the other array to this array.
-
-=cut
-
-*/
-
-    METHOD append(PMC *other) {
-
-        const INTVAL n = VTABLE_elements(INTERP, SELF);
-        const INTVAL m = VTABLE_elements(INTERP, other);
-
-        if (!m)
-            RETURN(void);
-
-        /* pre-size it */
-        VTABLE_set_integer_native(INTERP, SELF, n + m);
-
-        if (other->vtable->base_type == SELF->vtable->base_type
-        ||  other->vtable->base_type == enum_class_FixedPMCArray) {
-            PMC ** const other_data = PMC_array(other);
-            PMC ** const this_data  = PMC_array(SELF);
-
-            /* libc is faster at copying data than a manual loop here */
-            memmove(this_data + n, other_data, m  * sizeof (PMC *));
-        }
-        else {
-            PMC ** const this_data = PMC_array(SELF);
-            INTVAL i;
-
-            for (i = 0; i < m; ++i)
-                this_data[n + i] = VTABLE_get_pmc_keyed_int(INTERP, other, i);
-        }
-    }
-/*
-
 =item C<STRING *get_repr()>
 
 Returns the Parrot string representation C<ResizablePMCArray>.
@@ -725,6 +695,50 @@
 
 /*
 
+=back
+
+=head2 Methdos
+
+=over 4
+
+=item METHOD append(PMC *other)
+
+Append the other array to this array.
+
+=cut
+
+*/
+
+    METHOD append(PMC *other) {
+
+        const INTVAL n = VTABLE_elements(INTERP, SELF);
+        const INTVAL m = VTABLE_elements(INTERP, other);
+
+        if (!m)
+            RETURN(void);
+
+        /* pre-size it */
+        VTABLE_set_integer_native(INTERP, SELF, n + m);
+
+        if (other->vtable->base_type == SELF->vtable->base_type
+        ||  other->vtable->base_type == enum_class_FixedPMCArray) {
+            PMC ** const other_data = PMC_array(other);
+            PMC ** const this_data  = PMC_array(SELF);
+
+            /* libc is faster at copying data than a manual loop here */
+            memmove(this_data + n, other_data, m  * sizeof (PMC *));
+        }
+        else {
+            PMC ** const this_data = PMC_array(SELF);
+            INTVAL i;
+
+            for (i = 0; i < m; ++i)
+                this_data[n + i] = VTABLE_get_pmc_keyed_int(INTERP, other, i);
+        }
+    }
+
+/*
+
 =item METHOD PMC* shift()
 
 =item METHOD PMC* pop()
@@ -772,6 +786,42 @@
 
 =back
 
+=head2 Auxiliar functions
+
+=over 4
+
+=item C<static void throw_shift_empty(PARROT_INTERP)>
+
+=item C<static void throw_pop_empty(PARROT_INTERP)>
+
+Throws with the appropiate message.
+
+=cut
+
+*/
+
+PARROT_DOES_NOT_RETURN
+static void
+throw_shift_empty(PARROT_INTERP)
+{
+    ASSERT_ARGS(throw_shift_empty)
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            "ResizablePMCArray: Can't shift from an empty array!");
+}
+
+PARROT_DOES_NOT_RETURN
+static void
+throw_pop_empty(PARROT_INTERP)
+{
+    ASSERT_ARGS(throw_pop_empty)
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            "ResizablePMCArray: Can't pop from an empty array!");
+}
+
+/*
+
+=back
+
 =head1 See also
 
 F<docs/pdds/pdd17_basic_types.pod>.

Modified: branches/gsoc_threads/src/pmc/string.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/string.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/string.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -406,7 +406,7 @@
         const INTVAL k = VTABLE_get_integer(INTERP, key);
 
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        n = Parrot_str_byte_length(INTERP, str_val);
+        n = Parrot_str_length(INTERP, str_val);
 
         return (INTVAL)((k >= 0 && k <= n) || (k < 0 && -k <= n));
     }
@@ -470,7 +470,7 @@
 
     VTABLE void set_string_keyed_int(INTVAL pos, STRING * const value) {
         STRING      *str_val;
-        const INTVAL len = Parrot_str_byte_length(INTERP, value);
+        const INTVAL len = Parrot_str_length(INTERP, value);
         GET_ATTR_str_val(INTERP, SELF, str_val);
         str_val = Parrot_str_replace(INTERP, str_val, pos, len, value);
         SET_ATTR_str_val(INTERP, SELF, str_val);
@@ -506,8 +506,8 @@
 */
 
     METHOD replace(STRING *orig, STRING *_new) {
-        const INTVAL   old_len = Parrot_str_byte_length(INTERP, orig);
-        const INTVAL   new_len = Parrot_str_byte_length(INTERP, _new);
+        const INTVAL   old_len = Parrot_str_length(INTERP, orig);
+        const INTVAL   new_len = Parrot_str_length(INTERP, _new);
         STRING       * s       = VTABLE_get_string(INTERP, SELF);
         INTVAL         i       = 0;
 
@@ -607,7 +607,7 @@
     VTABLE INTVAL elements() {
         STRING *str_val;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        return Parrot_str_byte_length(INTERP, str_val);
+        return Parrot_str_length(INTERP, str_val);
     }
 
     VTABLE PMC *get_iter() {
@@ -691,7 +691,7 @@
         INTVAL         i;
         STRING        *dest;
 
-        const INTVAL len = Parrot_str_byte_length(INTERP, src);
+        const INTVAL len = Parrot_str_length(INTERP, src);
 
         if (!len)
             RETURN(STRING src);
@@ -729,7 +729,7 @@
     METHOD is_integer(STRING *src) {
         INTVAL         i;
         unsigned char *p;
-        const INTVAL   len = Parrot_str_byte_length(INTERP, src);
+        const INTVAL   len = Parrot_str_length(INTERP, src);
 
         if (!len)
             RETURN(INTVAL 0);
@@ -787,7 +787,7 @@
         if (start < 0)
             RETURN(INTVAL res);
 
-        len = Parrot_str_byte_length(INTERP, src);
+        len = Parrot_str_length(INTERP, src);
 
         if (!len)
             RETURN(INTVAL res);
@@ -795,7 +795,7 @@
         if (start >= (INTVAL)len)
             RETURN(INTVAL res);
 
-        if (!Parrot_str_byte_length(INTERP, substring))
+        if (!Parrot_str_length(INTERP, substring))
             RETURN(INTVAL res);
 
         res = CHARSET_RINDEX(INTERP, src, substring, (UINTVAL)start);
@@ -820,7 +820,7 @@
             Parrot_encoding_number(INTERP, encodingname));
         STRING * const src = VTABLE_get_string(INTERP, SELF);
         STRING * const dest = Parrot_str_unescape_string(INTERP, src,
-                charset, encoding);
+                charset, encoding, 0);
         RETURN(STRING *dest);
     }
 

Modified: branches/gsoc_threads/src/pmc/stringbuilder.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/stringbuilder.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/stringbuilder.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -73,32 +73,27 @@
 
         SET_ATTR_buffer(INTERP, SELF, buffer);
 
-        PObj_custom_mark_destroy_SETALL(SELF);
+        PObj_custom_destroy_SET(SELF);
     }
 
 /*
 
-=item C<void mark()>
+=item C<void destroy()>
 
-Marks the StringBuilder as live.
+Free the buffer on destruction.
 
 =cut
 
 */
 
-    VTABLE void mark() {
-    }
-
     VTABLE void destroy() {
-        STRING *buffer;
-
-        if (!PMC_data(SELF))
-            return;
-
-        GET_ATTR_buffer(INTERP, SELF, buffer);
-        if (buffer->_bufstart)
-            mem_gc_free(INTERP, buffer->_bufstart);
-        mem_gc_free(INTERP, buffer);
+        if (PMC_data(SELF)) {
+            STRING *buffer;
+            GET_ATTR_buffer(INTERP, SELF, buffer);
+            if (buffer->_bufstart)
+                mem_gc_free(INTERP, buffer->_bufstart);
+            mem_gc_free(INTERP, buffer);
+        }
     }
 
 /*
@@ -145,18 +140,20 @@
         /* TODO Ask chromatic why in Parrot_str_join he ignored charset */
         cs = Parrot_str_rep_compatible(interp, buffer, s, &enc);
         if (!cs) {
-            cs = Parrot_unicode_charset_ptr;
-            enc = (buffer->encoding == Parrot_utf16_encoding_ptr
-               ||  s->encoding == Parrot_utf16_encoding_ptr
-               ||  buffer->encoding == Parrot_ucs2_encoding_ptr
-               ||  s->encoding == Parrot_ucs2_encoding_ptr)
-                ? Parrot_utf16_encoding_ptr
-                : Parrot_utf8_encoding_ptr;
 
-            buffer = Parrot_unicode_charset_ptr->to_charset(interp, buffer);
-            s      = Parrot_unicode_charset_ptr->to_charset(interp, s);
+            /* Create new temporary string */
+            STRING * const new_buffer = Parrot_unicode_charset_ptr->to_charset(interp, buffer);
+            mem_gc_free(INTERP, buffer->_bufstart);
+            STRUCT_COPY(buffer, new_buffer);
+            buffer->flags     = PObj_is_string_FLAG | PObj_live_FLAG | PObj_external_FLAG;
+
+            buffer->_bufstart = buffer->strstart = mem_gc_allocate_n_typed(INTERP,
+                                                    new_buffer->_buflen, char);
+            mem_sys_memcopy(buffer->_bufstart, new_buffer->_bufstart, new_buffer->_buflen);
 
             SET_ATTR_buffer(INTERP, SELF, buffer);
+
+            s      = Parrot_unicode_charset_ptr->to_charset(interp, s);
         }
 
         /* Calculate (possibly new) total size */
@@ -164,8 +161,9 @@
 
         /* Reallocate if necessary */
         if (total_size > Buffer_buflen(buffer)) {
+            /* Parrot_unicode_charset_ptr can produce NULL buffer */
             buffer->_bufstart = buffer->strstart = mem_gc_realloc_n_typed(INTERP,
-                    buffer->_bufstart, total_size, char);
+                buffer->_bufstart, total_size, char);
             buffer->_buflen   = total_size;
         }
 

Modified: branches/gsoc_threads/src/pmc/sub.pmc
==============================================================================
--- branches/gsoc_threads/src/pmc/sub.pmc	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/pmc/sub.pmc	Thu Jun 10 21:09:12 2010	(r47545)
@@ -954,6 +954,10 @@
 
 Sets the sub that is the outer of this one.
 
+=item C<void set_outer_ctx(PMC *outer_ctx)>
+
+Set the outer context to be used on the next invocation of this sub.
+
 =item C<INTVAL arity()>
 
 Returns the arity of the Sub (the number of arguments, excluding optional and
@@ -1091,6 +1095,13 @@
     }
 
 
+    METHOD set_outer_ctx(PMC *outer_ctx) {
+        Parrot_Sub_attributes *sub;
+        PMC_get_sub(INTERP, SELF, sub);
+        sub->outer_ctx = outer_ctx;
+    }
+
+
     METHOD get_multisig() {
         PMC                   *multisig;
         Parrot_Sub_attributes *sub;

Modified: branches/gsoc_threads/src/runcore/trace.c
==============================================================================
--- branches/gsoc_threads/src/runcore/trace.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/runcore/trace.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -34,12 +34,18 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+PARROT_CANNOT_RETURN_NULL
+static Interp * debugger_or_interp(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING* trace_class_name(PARROT_INTERP, ARGIN(const PMC* pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+#define ASSERT_ARGS_debugger_or_interp __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_trace_class_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
@@ -48,15 +54,17 @@
 
 /*
 
-=item C<Interp * debugger_or_interp(PARROT_INTERP)>
+=item C<static Interp * debugger_or_interp(PARROT_INTERP)>
 
 Get debugger if available
 
 =cut
 */
+
 PARROT_CANNOT_RETURN_NULL
-Interp *
-debugger_or_interp(PARROT_INTERP) {
+static Interp *
+debugger_or_interp(PARROT_INTERP)
+{
     ASSERT_ARGS(debugger_or_interp)
 
     return interp->pdb && interp->pdb->debugger
@@ -231,15 +239,18 @@
             break;
           case KEY_string_FLAG|KEY_register_FLAG:
             {
-            const STRING * const s = REG_STR(interp,
-                 VTABLE_get_integer(interp, key));
-            STRING * const escaped = Parrot_str_escape_truncate(interp, s, 20);
-            if (escaped)
-                len += Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"",
-                    VTABLE_get_integer(interp, key), escaped);
+            const INTVAL keynum = VTABLE_get_integer(interp, key);
+            if (keynum < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_STR)) {
+                const STRING * const s = REG_STR(interp, keynum);
+                STRING * const escaped = Parrot_str_escape_truncate(interp, s, 20);
+                if (escaped)
+                    len += Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"",
+                            keynum, escaped);
+                else
+                    len += Parrot_io_eprintf(debugger, "S%vd=\"(null)\"", keynum);
+            }
             else
-                len += Parrot_io_eprintf(debugger, "S%vd=\"(null)\"",
-                        VTABLE_get_integer(interp, key));
+                len += Parrot_io_eprintf(debugger, "**WRONG KEY STRING REG %d**", keynum);
             }
             break;
           case KEY_pmc_FLAG|KEY_register_FLAG:

Modified: branches/gsoc_threads/src/string/api.c
==============================================================================
--- branches/gsoc_threads/src/string/api.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/string/api.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -450,12 +450,16 @@
     if (!cs) {
         /* upgrade strings for concatenation */
         cs = Parrot_unicode_charset_ptr;
-        enc = (a->encoding == Parrot_utf16_encoding_ptr
-           ||  b->encoding == Parrot_utf16_encoding_ptr
-           ||  a->encoding == Parrot_ucs2_encoding_ptr
-           ||  b->encoding == Parrot_ucs2_encoding_ptr)
-            ? Parrot_utf16_encoding_ptr
-            : Parrot_utf8_encoding_ptr;
+        if (a->encoding == Parrot_ucs4_encoding_ptr
+            || b->encoding == Parrot_ucs4_encoding_ptr)
+            enc = Parrot_ucs4_encoding_ptr;
+        else if (a->encoding == Parrot_utf16_encoding_ptr
+            ||  b->encoding == Parrot_utf16_encoding_ptr
+            ||  a->encoding == Parrot_ucs2_encoding_ptr
+            ||  b->encoding == Parrot_ucs2_encoding_ptr)
+            enc = Parrot_utf16_encoding_ptr;
+        else
+            enc = Parrot_utf8_encoding_ptr;
 
         a = Parrot_unicode_charset_ptr->to_charset(interp, a);
         b = Parrot_unicode_charset_ptr->to_charset(interp, b);
@@ -977,6 +981,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_str_length(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
@@ -2076,8 +2081,6 @@
         else if (Parrot_str_equal(interp, t, CONST_STRING(interp, "-INF"))
              ||  Parrot_str_equal(interp, t, CONST_STRING(interp, "-INFINITY")))
             return PARROT_FLOATVAL_INF_NEGATIVE;
-        else
-            return 0.0;
     }
 
 /* powl() could be used here, but it is an optional POSIX extension that
@@ -2528,7 +2531,7 @@
 /*
 
 =item C<STRING * Parrot_str_unescape_string(PARROT_INTERP, const STRING *src,
-const CHARSET *charset, const ENCODING *encoding)>
+const CHARSET *charset, const ENCODING *encoding, UINTVAL flags)>
 
 EXPERIMENTAL, see TT #1628
 
@@ -2545,12 +2548,13 @@
 STRING *
 Parrot_str_unescape_string(PARROT_INTERP, ARGIN(const STRING *src),
         ARGIN(const CHARSET *charset),
-        ARGIN(const ENCODING *encoding))
+        ARGIN(const ENCODING *encoding),
+        UINTVAL flags)
 {
     ASSERT_ARGS(Parrot_str_unescape_string)
 
     UINTVAL srclen = Parrot_str_byte_length(interp, src);
-    STRING *result = Parrot_gc_new_string_header(interp, 0);
+    STRING *result = Parrot_gc_new_string_header(interp, flags);
     String_iter itersrc;
     String_iter iterdest;
     UINTVAL reserved;
@@ -2613,13 +2617,18 @@
                     }
                     else {
                         /* \xhh 1..2 hex digits */
-                        for (digcount = 0; digcount < 2; ++digcount) {
+                        pending = 1;
+                        for (digcount = 0; digcount < 2;) {
                             if (!isxdigit(c))
                                 break;
                             digbuf[digcount] = c;
+                            ++digcount;
+                            if (itersrc.bytepos >= srclen) {
+                                pending = 0;
+                                break;
+                            }
                             c = itersrc.get_and_advance(interp, &itersrc);
                         }
-                        pending = 1;
                     }
                     if (digcount == 0)
                         throw_illegal_escape(interp);
@@ -3235,7 +3244,8 @@
         mem_sys_memcopy(pos, next->strstart, next->bufused);
         pos += next->bufused;
 
-        PARROT_ASSERT(pos <= res->strstart + Buffer_buflen(res));
+        /* We can consume all buffer and pos will be next-after-end of buffer */
+        PARROT_ASSERT(pos <= res->strstart + Buffer_buflen(res) + 1);
     }
 
     res->bufused  = pos - res->strstart;

Modified: branches/gsoc_threads/src/string/charset.c
==============================================================================
--- branches/gsoc_threads/src/string/charset.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/string/charset.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -23,6 +23,7 @@
 #include "encoding/utf8.h"
 #include "encoding/utf16.h"
 #include "encoding/ucs2.h"
+#include "encoding/ucs4.h"
 
 #include "charset/ascii.h"
 #include "charset/binary.h"
@@ -149,6 +150,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 const CHARSET *
@@ -227,6 +229,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_charset_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
@@ -254,6 +257,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING *
@@ -277,6 +281,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 const CHARSET *
@@ -301,6 +306,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 const char *
@@ -492,6 +498,7 @@
     Parrot_encoding_utf8_init(interp);
     Parrot_encoding_ucs2_init(interp);
     Parrot_encoding_utf16_init(interp);
+    Parrot_encoding_ucs4_init(interp);
 
     Parrot_charset_ascii_init(interp);
     Parrot_charset_iso_8859_1_init(interp);
@@ -539,6 +546,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const CHARSET *
@@ -560,6 +568,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 charset_converter_t
@@ -572,7 +581,7 @@
 
     for (i = 0; i < n; ++i) {
         if (lhs == all_charsets->set[i].charset) {
-            One_charset * const left = all_charsets->set + i;
+            const One_charset * const left = all_charsets->set + i;
             const int nc = left->n_converters;
             int j;
 

Modified: branches/gsoc_threads/src/string/encoding.c
==============================================================================
--- branches/gsoc_threads/src/string/encoding.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/string/encoding.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -43,6 +43,7 @@
 ENCODING *Parrot_utf8_encoding_ptr    = NULL;
 ENCODING *Parrot_ucs2_encoding_ptr    = NULL;
 ENCODING *Parrot_utf16_encoding_ptr   = NULL;
+ENCODING *Parrot_ucs4_encoding_ptr    = NULL;
 
 typedef struct One_encoding {
     NOTNULL(ENCODING *encoding);
@@ -362,7 +363,7 @@
 ENCODING *encoding)>
 
 Registers a character encoding C<encoding> with name C<encodingname>.
-Only allows one of 4 possibilities: fixed_8, utf8, utf16, and ucs2.
+Only allows one of 5 possibilities: fixed_8, utf8, utf16, ucs2 and ucs4.
 
 =cut
 
@@ -399,6 +400,10 @@
         Parrot_ucs2_encoding_ptr = encoding;
         return register_encoding(interp, encodingname, encoding);
     }
+    if (STREQ("ucs4", encodingname)) {
+        Parrot_ucs4_encoding_ptr = encoding;
+        return register_encoding(interp, encodingname, encoding);
+    }
     return 0;
 }
 

Copied: branches/gsoc_threads/src/string/encoding/ucs4.c (from r47544, trunk/src/string/encoding/ucs4.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/string/encoding/ucs4.c	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/string/encoding/ucs4.c)
@@ -0,0 +1,618 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/string/encoding/ucs4.c - UCS-4 encoding
+
+=head1 DESCRIPTION
+
+UCS-4 encoding with the help of the ICU library.
+
+=head2 Functions
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+#include "../unicode.h"
+
+#if !PARROT_HAS_ICU
+PARROT_DOES_NOT_RETURN
+static void no_ICU_lib(PARROT_INTERP) /* HEADERIZER SKIP */
+{
+    Parrot_ex_throw_from_c_args(interp, NULL,
+        EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+}
+#endif
+
+/* HEADERIZER HFILE: src/string/encoding/ucs4.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL find_cclass(PARROT_INTERP,
+    ARGIN(const STRING *s),
+    ARGIN(const INTVAL *typetable),
+    INTVAL flags,
+    UINTVAL pos,
+    UINTVAL end)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static UINTVAL get_byte(PARROT_INTERP,
+    SHIM(const STRING *src),
+    SHIM(UINTVAL offset))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * get_bytes(PARROT_INTERP,
+    SHIM(const STRING *src),
+    SHIM(UINTVAL offset),
+    SHIM(UINTVAL count))
+        __attribute__nonnull__(1);
+
+static UINTVAL get_codepoint(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * get_codepoints(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void iter_init(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    ARGOUT(String_iter *iter))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*iter);
+
+static void set_byte(PARROT_INTERP,
+    SHIM(const STRING *src),
+    SHIM(UINTVAL offset),
+    SHIM(UINTVAL byte))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static UINTVAL ucs4_decode_and_advance(PARROT_INTERP,
+    ARGMOD(String_iter *i))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*i);
+
+static void ucs4_encode_and_advance(PARROT_INTERP,
+    ARGMOD(String_iter *i),
+    UINTVAL c)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*i);
+
+static size_t ucs4_hash(PARROT_INTERP,
+    ARGIN(const STRING *s),
+    size_t hashval)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void ucs4_set_position(PARROT_INTERP,
+    ARGMOD(String_iter *i),
+    UINTVAL n)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*i);
+
+#define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s) \
+    , PARROT_ASSERT_ARG(typetable))
+#define ASSERT_ARGS_get_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_iter_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ucs4_decode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs4_encode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs4_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_ucs4_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(i))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+#include "ucs4.h"
+
+#if PARROT_HAS_ICU
+#  include <unicode/ustring.h>
+#endif
+
+/*
+
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
+
+Converts the string C<src> to this particular encoding.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING *
+to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(to_encoding)
+#if PARROT_HAS_ICU
+    if (src->encoding == Parrot_ucs4_encoding_ptr) {
+        return Parrot_str_clone(interp, src);
+    }
+    else {
+        UINTVAL len = Parrot_str_length(interp, src);
+        STRING *res = Parrot_str_new_init(interp, NULL, len * sizeof (UChar32),
+                           Parrot_ucs4_encoding_ptr, Parrot_unicode_charset_ptr, 0);
+        UChar32 *buf = (UChar32 *) res->strstart;
+        UINTVAL offs;
+        for (offs = 0; offs < len; offs++){
+            buf[offs] = src->encoding->get_codepoint(interp, src, offs);
+        };
+        res->strlen  = len;
+        res->bufused = len * sizeof (UChar32);
+
+        return res;
+    }
+#else
+    UNUSED(src);
+    no_ICU_lib(interp);
+#endif
+
+}
+
+/*
+
+=item C<static UINTVAL get_codepoint(PARROT_INTERP, const STRING *src, UINTVAL
+offset)>
+
+Returns the codepoint in string C<src> at position C<offset>.
+
+=cut
+
+*/
+
+static UINTVAL
+get_codepoint(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
+{
+    ASSERT_ARGS(get_codepoint)
+#if PARROT_HAS_ICU
+    const UChar32 * const s = (const UChar32*) src->strstart;
+    UNUSED(interp);
+    return s[offset];
+#else
+    UNUSED(offset);
+    UNUSED(src);
+    no_ICU_lib(interp);
+#endif
+}
+
+
+/*
+
+=item C<static UINTVAL find_cclass(PARROT_INTERP, const STRING *s, const INTVAL
+*typetable, INTVAL flags, UINTVAL pos, UINTVAL end)>
+
+Stub, the charset level handles this for unicode strings.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL
+find_cclass(PARROT_INTERP, ARGIN(const STRING *s), ARGIN(const INTVAL *typetable),
+INTVAL flags, UINTVAL pos, UINTVAL end)
+{
+    ASSERT_ARGS(find_cclass)
+
+    UNUSED(s);
+    UNUSED(typetable);
+    UNUSED(flags);
+    UNUSED(pos);
+    UNUSED(end);
+
+    Parrot_ex_throw_from_c_args(interp, NULL,
+        EXCEPTION_UNIMPLEMENTED,
+        "No find_cclass support in unicode encoding plugins");
+}
+
+/*
+
+=item C<static UINTVAL get_byte(PARROT_INTERP, const STRING *src, UINTVAL
+offset)>
+
+Returns the byte in string C<src> at position C<offset>.
+
+=cut
+
+*/
+
+static UINTVAL
+get_byte(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset))
+{
+    ASSERT_ARGS(get_byte)
+    Parrot_ex_throw_from_c_args(interp, NULL,
+        EXCEPTION_UNIMPLEMENTED,
+        "No get_byte for UCS-4");
+}
+
+/*
+
+=item C<static void set_byte(PARROT_INTERP, const STRING *src, UINTVAL offset,
+UINTVAL byte)>
+
+Sets, in string C<src> at position C<offset>, the byte C<byte>.
+
+=cut
+
+*/
+
+static void
+set_byte(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset),
+        SHIM(UINTVAL byte))
+{
+    ASSERT_ARGS(set_byte)
+    Parrot_ex_throw_from_c_args(interp, NULL,
+        EXCEPTION_UNIMPLEMENTED,
+        "No set_byte for UCS-4");
+}
+
+/*
+
+=item C<static STRING * get_codepoints(PARROT_INTERP, const STRING *src, UINTVAL
+offset, UINTVAL count)>
+
+Returns the C<count> codepoints stored at position C<offset> in string
+C<src> as a new string.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING *
+get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(get_codepoints)
+#if PARROT_HAS_ICU
+    return Parrot_str_new_init(interp, (char*)src->strstart + offset * sizeof (UChar32),
+                               count * sizeof (UChar32), src->encoding, src->charset, 0);
+#else
+    UNUSED(src);
+    UNUSED(offset);
+    UNUSED(count);
+    no_ICU_lib(interp);
+#endif
+}
+
+/*
+
+=item C<static STRING * get_bytes(PARROT_INTERP, const STRING *src, UINTVAL
+offset, UINTVAL count)>
+
+Returns the bytes in string C<src> at position C<offset> and length C<count>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING *
+get_bytes(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset),
+        SHIM(UINTVAL count))
+{
+    ASSERT_ARGS(get_bytes)
+    Parrot_ex_throw_from_c_args(interp, NULL,
+        EXCEPTION_UNIMPLEMENTED,
+        "No get_bytes for UCS-4");
+}
+
+
+/*
+
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
+
+Returns the number of codepoints in string C<src>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(codepoints)
+#if PARROT_HAS_ICU
+    UNUSED(interp);
+    return src->bufused / sizeof (UChar32);
+#else
+    UNUSED(src);
+    no_ICU_lib(interp);
+#endif
+}
+
+/*
+
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
+
+Returns the number of bytes in string C<src>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(bytes)
+    return src->bufused;
+}
+
+/*
+
+=item C<static UINTVAL ucs4_decode_and_advance(PARROT_INTERP, String_iter *i)>
+
+Moves the string iterator C<i> to the next UCS-4 codepoint.
+
+=cut
+
+*/
+
+static UINTVAL
+ucs4_decode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i))
+{
+    ASSERT_ARGS(ucs4_decode_and_advance)
+#if PARROT_HAS_ICU
+    const UChar32 * const s = (const UChar32 *) i->str->strstart;
+    size_t pos              = i->bytepos / sizeof (UChar32);
+    const UChar32         c = s[pos++];
+    ++i->charpos;
+    i->bytepos = pos * sizeof (UChar32);
+    return c;
+#else
+    UNUSED(i);
+    no_ICU_lib(interp);
+#endif
+}
+
+/*
+
+=item C<static void ucs4_encode_and_advance(PARROT_INTERP, String_iter *i,
+UINTVAL c)>
+
+With the string iterator C<i>, appends the codepoint C<c> and advances to the
+next position in the string.
+
+=cut
+
+*/
+
+static void
+ucs4_encode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL c)
+{
+    ASSERT_ARGS(ucs4_encode_and_advance)
+#if PARROT_HAS_ICU
+    UChar32 *s   = (UChar32 *) i->str->strstart;
+    size_t   pos = i->bytepos / sizeof (UChar32);
+    s[pos++] = (UChar32) c;
+    ++i->charpos;
+    i->bytepos = pos * sizeof (UChar32);
+#else
+    UNUSED(i);
+    no_ICU_lib(interp);
+#endif
+}
+
+#if PARROT_HAS_ICU
+/*
+
+=item C<static size_t ucs4_hash(PARROT_INTERP, const STRING *s, size_t hashval)>
+
+Returns the hashed value of the string, given a seed in hashval.
+
+=cut
+
+*/
+
+static size_t
+ucs4_hash(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval)
+{
+    ASSERT_ARGS(ucs4_hash)
+    const UChar32 *pos = (const UChar32*) s->strstart;
+    UINTVAL len = s->strlen;
+    UNUSED(interp);
+
+    while (len--) {
+        hashval += hashval << 5;
+        hashval += *(pos++);
+    }
+
+    return hashval;
+}
+#endif
+
+/*
+
+=item C<static void ucs4_set_position(PARROT_INTERP, String_iter *i, UINTVAL n)>
+
+Moves the string iterator C<i> to the position C<n> in the string.
+
+=cut
+
+*/
+
+static void
+ucs4_set_position(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL n)
+{
+    ASSERT_ARGS(ucs4_set_position)
+#if PARROT_HAS_ICU
+    i->charpos = n;
+    i->bytepos = n * sizeof (UChar32);
+#else
+    UNUSED(i);
+    UNUSED(n);
+    no_ICU_lib(interp);
+#endif
+}
+
+
+/*
+
+=item C<static void iter_init(PARROT_INTERP, const STRING *src, String_iter
+*iter)>
+
+Initializes for string C<src> the string iterator C<iter>.
+
+=cut
+
+*/
+
+static void
+iter_init(PARROT_INTERP, ARGIN(const STRING *src), ARGOUT(String_iter *iter))
+{
+    ASSERT_ARGS(iter_init)
+#if PARROT_HAS_ICU
+    UNUSED(interp);
+    iter->str             = src;
+    iter->bytepos         = 0;
+    iter->charpos         = 0;
+    iter->get_and_advance = ucs4_decode_and_advance;
+    iter->set_and_advance = ucs4_encode_and_advance;
+    iter->set_position    = ucs4_set_position;
+#else
+    UNUSED(src);
+    UNUSED(iter);
+    no_ICU_lib(interp);
+#endif
+}
+
+/*
+
+=item C<void Parrot_encoding_ucs4_init(PARROT_INTERP)>
+
+Initializes the UCS-4 encoding.
+
+=cut
+
+*/
+
+void
+Parrot_encoding_ucs4_init(PARROT_INTERP)
+{
+    ASSERT_ARGS(Parrot_encoding_ucs4_init)
+    ENCODING * const return_encoding = Parrot_new_encoding(interp);
+
+    static const ENCODING base_encoding = {
+        "ucs4",
+        4, /* Max bytes per codepoint */
+        to_encoding,
+        get_codepoint,
+        get_byte,
+        set_byte,
+        get_codepoints,
+        get_bytes,
+        codepoints,
+        bytes,
+        iter_init,
+        find_cclass,
+#if PARROT_HAS_ICU
+        ucs4_hash
+#else
+        NULL
+#endif
+    };
+    STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
+    Parrot_register_encoding(interp, "ucs4", return_encoding);
+
+    return;
+}
+
+/*
+
+=back
+
+=head1 SEE ALSO
+
+F<src/string/encoding/fixed_8.c>,
+F<src/string/encoding/utf8.c>,
+F<src/string/encoding/utf16.c>,
+F<src/string/encoding/ucs2.c>,
+F<src/string.c>,
+F<include/parrot/string.h>,
+F<docs/string.pod>.
+
+=cut
+
+*/
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/gsoc_threads/src/string/encoding/ucs4.h (from r47544, trunk/src/string/encoding/ucs4.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/src/string/encoding/ucs4.h	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/src/string/encoding/ucs4.h)
@@ -0,0 +1,27 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+*/
+
+#ifndef PARROT_ENCODING_UCS4_H_GUARD
+#define PARROT_ENCODING_UCS4_H_GUARD
+
+/* HEADERIZER BEGIN: src/string/encoding/ucs4.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+void Parrot_encoding_ucs4_init(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_Parrot_encoding_ucs4_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: src/string/encoding/ucs4.c */
+
+#endif /* PARROT_ENCODING_UCS4_H_GUARD */
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/gsoc_threads/src/utils.c
==============================================================================
--- branches/gsoc_threads/src/utils.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/utils.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -62,12 +62,12 @@
 static void next_rand(_rand_buf X);
 static void process_cycle_without_exit(
     int node_index,
-    ARGIN(parrot_prm_context* c))
+    ARGIN(const parrot_prm_context *c))
         __attribute__nonnull__(2);
 
 static void rec_climb_back_and_mark(
     int node_index,
-    ARGIN(parrot_prm_context* c))
+    ARGIN(const parrot_prm_context *c))
         __attribute__nonnull__(2);
 
 #define ASSERT_ARGS__drand48 __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -540,7 +540,7 @@
 
 /*
 
-=item C<PMC* tm_to_array(PARROT_INTERP, const struct tm *tm)>
+=item C<PMC* Parrot_tm_to_array(PARROT_INTERP, const struct tm *tm)>
 
 Helper to convert a B<struct tm *> to an Array
 
@@ -548,12 +548,13 @@
 
 */
 
+PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC*
-tm_to_array(PARROT_INTERP, ARGIN(const struct tm *tm))
+Parrot_tm_to_array(PARROT_INTERP, ARGIN(const struct tm *tm))
 {
-    ASSERT_ARGS(tm_to_array)
+    ASSERT_ARGS(Parrot_tm_to_array)
 
     PMC * const Array = Parrot_pmc_new(interp,
         Parrot_get_ctx_HLL_type(interp, enum_class_FixedIntegerArray));
@@ -664,8 +665,8 @@
 
 /*
 
-=item C<static void rec_climb_back_and_mark(int node_index, parrot_prm_context*
-c)>
+=item C<static void rec_climb_back_and_mark(int node_index, const
+parrot_prm_context *c)>
 
 Recursive function, used by Parrot_register_move to
 climb back the graph of register moves operations.
@@ -689,7 +690,7 @@
 */
 
 static void
-rec_climb_back_and_mark(int node_index, ARGIN(parrot_prm_context* c))
+rec_climb_back_and_mark(int node_index, ARGIN(const parrot_prm_context *c))
 {
     ASSERT_ARGS(rec_climb_back_and_mark)
     const int node = c->dest_regs[node_index];
@@ -715,8 +716,8 @@
 
 /*
 
-=item C<static void process_cycle_without_exit(int node_index,
-parrot_prm_context* c)>
+=item C<static void process_cycle_without_exit(int node_index, const
+parrot_prm_context *c)>
 
 Recursive function, used by Parrot_register_move to handle the case
 of cycles without exits, that are cycles of move ops between registers
@@ -732,7 +733,7 @@
 */
 
 static void
-process_cycle_without_exit(int node_index, ARGIN(parrot_prm_context* c))
+process_cycle_without_exit(int node_index, ARGIN(const parrot_prm_context *c))
 {
     ASSERT_ARGS(process_cycle_without_exit)
     const int pred = c->src_regs[node_index];
@@ -915,6 +916,7 @@
 /* TODO: Macroize COMPARE */
 /* This is an awfully expensive function to call, what with all the */
 /* comparisons that never change. We ought to precompute everything. */
+/* XXX We should be able to guarantee that *a and *b never change via const parameters. */
 static INTVAL
 COMPARE(PARROT_INTERP, ARGIN(void *a), ARGIN(void *b), ARGIN(PMC *cmp))
 {

Modified: branches/gsoc_threads/src/warnings.c
==============================================================================
--- branches/gsoc_threads/src/warnings.c	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/src/warnings.c	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -124,6 +124,30 @@
 
 /*
 
+=item C<void Parrot_warn_deprecated(PARROT_INTERP, const char *message)>
+
+Warn about use of a deprecated feature
+
+C<message> is a C string.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+void
+Parrot_warn_deprecated(PARROT_INTERP, ARGIN(const char *message))
+{
+    ASSERT_ARGS(Parrot_warn_deprecated)
+
+    if (PARROT_WARNINGS_test(interp, PARROT_WARNINGS_DEPRECATED_FLAG)) {
+        STRING *msg = Parrot_sprintf_c(interp, "WARNING: %s\n", message);
+        print_warning(interp, msg);
+    }
+}
+
+/*
+
 =back
 
 =head1 SEE ALSO

Modified: branches/gsoc_threads/t/codingstd/c_function_docs.t
==============================================================================
--- branches/gsoc_threads/t/codingstd/c_function_docs.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/codingstd/c_function_docs.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -91,16 +91,10 @@
 }
 
 __DATA__
-compilers/imcc/parser_util.c
-compilers/imcc/pbc.c
-compilers/imcc/pcc.c
-compilers/imcc/reg_alloc.c
-compilers/imcc/symreg.c
 compilers/pirc/src/pircapi.c
 config/gen/platform/ansi/dl.c
 config/gen/platform/ansi/exec.c
 config/gen/platform/ansi/time.c
-config/gen/platform/darwin/dl.c
 config/gen/platform/darwin/memalign.c
 config/gen/platform/generic/dl.c
 config/gen/platform/generic/exec.c

Modified: branches/gsoc_threads/t/codingstd/linelength.t
==============================================================================
--- branches/gsoc_threads/t/codingstd/linelength.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/codingstd/linelength.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -125,6 +125,8 @@
 compilers/pirc/macro/macroparser.h
 compilers/pirc/src/hdocprep.l
 compilers/pirc/src/hdocprep.c
+# generated files
+src/ops/core_ops.c
 # generated by tools/dev/nci_thunk_gen.pir
 src/nci/core_thunks.c
 src/nci/extra_thunks.c

Modified: branches/gsoc_threads/t/codingstd/perlcritic.t
==============================================================================
--- branches/gsoc_threads/t/codingstd/perlcritic.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/codingstd/perlcritic.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,5 +1,5 @@
 #! perl
-# Copyright (C) 2008-2009, Parrot Foundation.
+# Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -85,6 +85,7 @@
     @files = grep {! m/$filter_languages/}
              map  { $_->path }
              grep { $_->read !~ m/use v6;/ }
+             grep { $_->read !~ m/#! nqp/ }
              $dist->get_perl_language_files();
 }
 else {

Modified: branches/gsoc_threads/t/compilers/imcc/imcpasm/opt1.t
==============================================================================
--- branches/gsoc_threads/t/compilers/imcc/imcpasm/opt1.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/imcc/imcpasm/opt1.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -5,7 +5,7 @@
 use strict;
 use warnings;
 use lib qw( . lib ../lib ../../lib );
-use Parrot::Test tests => 78;
+use Parrot::Test tests => 77;
 use Parrot::Config;
 
 my $output;
@@ -312,22 +312,6 @@
 OUT
 
 ##############################
-pir_2_pasm_is( <<'CODE', <<'OUT', "constant cmod" );
-.sub _main
-   cmod $I0, 33, 10
-   cmod $N0, 33.0, 10.0
-   end
-.end
-CODE
-# IMCC does produce b0rken PASM files
-# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392
-_main:
-   set I0, 3
-   set N0, 3
-   end
-OUT
-
-##############################
 pir_2_pasm_is( <<'CODE', <<'OUT', "constant mod" );
 .sub _main
    mod $I0, 33, 10

Modified: branches/gsoc_threads/t/compilers/imcc/syn/clash.t
==============================================================================
--- branches/gsoc_threads/t/compilers/imcc/syn/clash.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/imcc/syn/clash.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -8,7 +8,7 @@
 
 use Test::More;
 use Parrot::Config;
-use Parrot::Test tests => 17;
+use Parrot::Test tests => 15;
 
 pir_output_is( <<'CODE', <<'OUT', "if/unless" );
 .sub test :main
@@ -210,38 +210,6 @@
 ok
 OUTPUT
 
-pir_output_is( <<'CODE', <<'OUTPUT', "eq_num => eq" );
-.sub test :main
-    .local int i
-    .local int j
-    i = 1
-    j = 1
-    eq_num i, j, ok1
-    print "not "
-ok1:
-    print "ok 1\n"
-    end
-.end
-CODE
-ok 1
-OUTPUT
-
-pir_output_is( <<'CODE', <<'OUTPUT', "eq_num => eq mixed => eq_n_n" );
-.sub test :main
-    .local int i
-    .local num j
-    i = 1
-    j = 1.0
-    eq_num j, i, ok1
-    print "not "
-ok1:
-    print "ok 1\n"
-    end
-.end
-CODE
-ok 1
-OUTPUT
-
 pir_error_output_like( <<'CODE', <<'OUT', "undefined ident" );
 .sub test :main
     print no_such

Modified: branches/gsoc_threads/t/compilers/imcc/syn/const.t
==============================================================================
--- branches/gsoc_threads/t/compilers/imcc/syn/const.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/imcc/syn/const.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -198,7 +198,7 @@
     $S0 = ""
     $I0 = 0
 LOOP:
-    $S0 = concat <<"end"
+    concat $S0, <<"end"
 ending
 end
     inc $I0

Modified: branches/gsoc_threads/t/compilers/imcc/syn/errors.t
==============================================================================
--- branches/gsoc_threads/t/compilers/imcc/syn/errors.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/imcc/syn/errors.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -13,7 +13,7 @@
 plan skip_all => 'No reason to compile invalid PBC here'
     if $ENV{TEST_PROG_ARGS} && $ENV{TEST_PROG_ARGS} =~ m/--run-pbc/;
 
-plan tests => 6;
+plan tests => 7;
 
 ## tests for imcc error messages
 
@@ -87,6 +87,15 @@
 /^error:imcc:syntax error, duplicated IDENTIFIER/
 END_EXPECTED
 
+pir_error_output_like( <<'END_PIR', <<'END_EXPECTED', 'warn about failing .loadlib (TT #437)' );
+.loadlib 'nosuch'
+.sub main :main
+    say "WTF"
+.end
+END_PIR
+/^error:imcc:loadlib.*nosuch/
+END_EXPECTED
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/gsoc_threads/t/compilers/imcc/syn/op.t
==============================================================================
--- branches/gsoc_threads/t/compilers/imcc/syn/op.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/imcc/syn/op.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -4,7 +4,7 @@
 
 .sub test :main
     .include 'test_more.pir'
-    plan(59)
+    plan(58)
 
     test_plus_equal()
     test_minus_equal()
@@ -21,7 +21,6 @@
     test_x_defined()
     test_x_clone()
     test_x_length()
-    test_x_sin()
     test_x_can()
     test_x_isa()
     test_x_add()
@@ -174,11 +173,6 @@
     is($I0, 0, 'x = length')
 .end
 
-.sub test_x_sin
-    $N0 = sin 0
-    is($N0, 0, 'x = sin')
-.end
-
 .sub test_x_can
     $P0 = new 'FileHandle'
     $I0 = can $P0, "puts"

Modified: branches/gsoc_threads/t/compilers/imcc/syn/regressions.t
==============================================================================
--- branches/gsoc_threads/t/compilers/imcc/syn/regressions.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/imcc/syn/regressions.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 21;
+use Parrot::Test tests => 22;
 
 pir_error_output_like( <<'CODE', <<'OUT', 'invalid get_results syntax');
 .sub main :main
@@ -37,6 +37,33 @@
 ok 2 - caught div_n_nc_nc exception
 OUT
 
+pir_output_is( <<'CODE', <<'OUT', 'fold symbolic constants (TT #1652)');
+.sub main :main
+    .const int SECONDS_PER_MINUTE = 60
+    $I0 = 30 * SECONDS_PER_MINUTE
+    say $I0
+
+    .const num DAYS_PER_YEAR = 365.24e0
+    $N0 = DAYS_PER_YEAR * 2.96460137564761618e-03
+    'printf'("%f\n", $N0)
+
+    .const string HI = "Hello "
+    $S0 = concat HI, "World!"
+    say $S0
+.end
+
+.sub 'printf'
+    .param string fmt
+    .param pmc data :slurpy
+    $S0 = sprintf fmt, data
+    print $S0
+.end
+CODE
+1800
+1.082791
+Hello World!
+OUT
+
 pir_output_is( <<'CODE', <<'OUT', 'comments before .param(TT #1035)');
 .sub main :main
   comments(1,2)

Modified: branches/gsoc_threads/t/compilers/imcc/syn/tail.t
==============================================================================
--- branches/gsoc_threads/t/compilers/imcc/syn/tail.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/imcc/syn/tail.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -15,6 +15,7 @@
 $ENV{TEST_PROG_ARGS} = '-Oc';
 
 pir_output_is( <<'CODE', <<'OUT', "tail call optimization, final position" );
+
 .sub _main :main
     $P1 = new 'Integer'
     $P1 = 20
@@ -55,7 +56,7 @@
     $I33 = defined function
     if $I33 goto doit
 bad_func:
-    printerr "_funcall:  Bad function.\n"
+    print "_funcall:  Bad function.\n"
     exit 0
 doit:
     set_args "0x20", argv
@@ -134,7 +135,7 @@
 doit:
     .tailcall function(argv :flat)
 bad_func:
-    printerr "_funcall:  Bad function.\n"
+    print "_funcall:  Bad function.\n"
     exit 0
 .end
 
@@ -207,7 +208,7 @@
     $I33 = defined function
     if $I33 goto doit
 bad_func:
-    printerr "_funcall:  Bad function.\n"
+    print "_funcall:  Bad function.\n"
     exit 0
 doit:
     .tailcall function(argv :flat)
@@ -283,7 +284,7 @@
         print " results]\n"
     .return ($P35 :flat)
 bad_func:
-    printerr "_funcall:  Bad function.\n"
+    print "_funcall:  Bad function.\n"
     exit 0
 .end
 

Copied: branches/gsoc_threads/t/compilers/opsc/01-parse.t (from r47544, trunk/t/compilers/opsc/01-parse.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/compilers/opsc/01-parse.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/compilers/opsc/01-parse.t)
@@ -0,0 +1,205 @@
+#! parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+.include 't/compilers/opsc/common.pir'
+
+.sub 'main' :main
+
+    .include 'test_more.pir'
+    load_bytecode 'opsc.pbc'
+
+    plan(12)
+
+    test_parse_basic_op()
+    test_parse_many_ops()
+    test_parse_header()
+    test_parse_params()
+    test_parse_flags()
+.end
+
+.sub "test_parse_basic_op"
+    .local string buf
+    .local pmc res
+
+    buf = <<"END"
+inline op noop() {
+}
+END
+
+    "_parse_buffer"(buf)
+    is(1, 1, "Simple noop parsed")
+
+    buf = <<"END"
+inline op noop() {
+    foo
+}
+END
+
+    "_parse_buffer"(buf)
+    is(1, 1, "noop body parsed")
+
+    buf = <<"END"
+inline op noop() {
+    foo {
+        bar{};
+    }
+}
+END
+
+    "_parse_buffer"(buf)
+    is(1, 1, "noop nested body parsed")
+
+
+.end
+
+.sub "test_parse_many_ops"
+    .local string buf
+    .local pmc res
+
+    buf = <<"END"
+
+
+=item noop
+
+asdfs
+
+=cut
+
+inline op noop() {
+}
+
+=item halt
+
+asdsad
+
+=cut
+
+inline op halt() {
+}
+
+=head2
+
+ads
+
+=cut
+
+inline op rule_the_world() {
+}
+
+
+END
+
+    res = "_parse_buffer"(buf)
+    is(1, 1, "Multiple ops parsed")
+
+    $I0 = res['body';'op']
+    is($I0, 3, "...and we have 3 ops")
+
+.end
+
+# test parsing ops file header.
+.sub "test_parse_header"
+    .local string buf
+    .local pmc res
+
+    buf = <<"END"
+/*
+ * $Id$
+** core.ops
+*/
+
+BEGIN_OPS_PREAMBLE
+
+#include "parrot/dynext.h"
+#include "parrot/embed.h"
+#include "parrot/runcore_api.h"
+#include "../pmc/pmc_continuation.h"
+#include "../pmc/pmc_parrotlibrary.h"
+
+END_OPS_PREAMBLE
+
+=head1 NAME
+
+core.ops - Core Opcodes
+
+=cut
+
+=head1 DESCRIPTION
+
+Parrot's core library of ops.
+
+Core operations are primarily flow control and interpreter
+introspection.
+
+=cut
+
+inline op noop() {
+}
+
+END
+
+    res = "_parse_buffer"(buf)
+    is(1, 1, "Header parsed")
+
+    $I0 = res['body';'op']
+    is($I0, 1, "...and we have our op")
+
+.end
+
+.sub "test_parse_params"
+    .local string buf
+    .local pmc res
+
+    buf = <<"END"
+
+inline op reserved(inconst INT) {
+    /* reserve 1 entries */
+}
+
+END
+
+    "_parse_buffer"(buf)
+    is(1, 1, "Op with single param parsed")
+
+    buf = <<"END"
+
+inline op add(out INT, inconst INT, inconst INT) {
+}
+
+END
+
+    "_parse_buffer"(buf)
+    is(1, 1, "Op with multiple param parsed")
+
+.end
+
+.sub "test_parse_flags"
+    .local string buf
+    .local pmc res
+
+    buf = <<"END"
+
+inline op hcf() :flow :deprecated {
+}
+
+END
+
+    res = "_parse_buffer"(buf)
+    is(1, 1, "Op with flags parsed")
+
+    .local pmc op
+    op = res['body';'op';0;'op_flag']
+    $S0 = op[0]
+    is($S0, ":flow ", "First flag parsed")
+    $S0 = op[1]
+    is($S0, ":deprecated ", "Second flag parsed")
+.end
+
+# Don't forget to update plan!
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/t/compilers/opsc/02-parse-all-ops.t (from r47544, trunk/t/compilers/opsc/02-parse-all-ops.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/compilers/opsc/02-parse-all-ops.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/compilers/opsc/02-parse-all-ops.t)
@@ -0,0 +1,90 @@
+#! parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+.include 't/compilers/opsc/common.pir'
+
+.sub 'main' :main
+    .include 'test_more.pir'
+    load_bytecode 'opsc.pbc'
+
+    .local int total
+    .local pmc os, all_files, ops_files, dynops_files
+
+    all_files    = new ['ResizablePMCArray']
+    ops_files    = get_ops_from_dir('./src/ops/')
+    dynops_files = get_ops_from_dir('./src/dynoplibs/')
+
+    #prepend the arrays to all_files
+    splice all_files, ops_files, 0, 0
+    splice all_files, dynops_files, 0, 0
+
+    total = elements all_files
+    all_files.'sort'()
+
+    plan(total)
+    test_parse(all_files)
+.end
+
+.sub get_ops_from_dir
+    .param string dir
+    .local pmc files, filtered_files, os, it
+
+    $P0            = loadlib 'os'
+    os             = new ['OS']
+    files          = os.'readdir'(dir)
+    filtered_files = new ['ResizablePMCArray']
+
+    .local int len, is_pmc, total
+    .local string filename, filename_end
+
+    #filter out anything that doesn't end in .ops
+    it = iter files
+  iter_start:
+    unless it goto iter_done
+    filename = shift it
+
+    len = length filename
+    unless len > 4 goto iter_start
+
+    filename_end = substr filename, -4
+    is_pmc = iseq filename_end, ".ops"
+    unless is_pmc goto iter_start
+
+    filename = dir . filename
+    push filtered_files, filename
+    goto iter_start
+
+  iter_done:
+    .return (filtered_files)
+.end
+
+.sub 'test_parse'
+    .param pmc list
+    .local int i
+    .local pmc it
+
+    it = iter list
+  iter_start:
+    unless it goto iter_done
+    $S0 = shift it
+    push_eh fail
+    _parse_one_file($S0)
+    pop_eh
+    ok(1, $S0)
+    goto iter_start
+  fail:
+    ok(0, $S0)
+    goto iter_start
+
+  iter_done:
+
+.end
+
+# Don't forget to update plan!
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/t/compilers/opsc/03-past.t (from r47544, trunk/t/compilers/opsc/03-past.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/compilers/opsc/03-past.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/compilers/opsc/03-past.t)
@@ -0,0 +1,110 @@
+#! ./parrot-nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+
+# "Comprehensive" test for creating PAST for op.
+# Parse single op and check various aspects of created PAST.
+
+pir::load_bytecode('opsc.pbc');
+pir::load_bytecode('dumper.pbc');
+
+plan(26);
+
+my $buf := q|
+BEGIN_OPS_PREAMBLE
+/*
+THE HEADER
+*/
+END_OPS_PREAMBLE
+
+op bar() {
+    # Nothing here
+}
+
+inline op foo(out INT, in PMC, inconst NUM) :flow :deprecated {
+    foo # We don't handle anything in C<body> during parse/past.
+}
+
+|;
+my $compiler := pir::compreg__Ps('Ops');
+
+my $past := $compiler.compile($buf, target => 'past');
+
+ok(1, "PAST::Node created");
+
+my $preambles := $past<preamble>;
+
+ok(~$preambles[0] ~~ /HEADER/, 'Header parsed');
+
+my @ops := @($past<ops>);
+# One "bar" and two "foo"
+ok(+ at ops ==  3, 'We have 3 ops');
+
+my $op := @ops[1];
+ok($op.name == 'foo', "Name parsed");
+
+my %flags := $op<flags>;
+ok(%flags<flow>, ':flow flag parsed');
+ok(%flags<deprecated>, ':deprecated flag parsed');
+ok(%flags == 2, "And there are only 2 flags");
+
+# Check op params
+my @args := $op<args>;
+ok(+ at args == 3, "Got 3 parameters");
+
+my $arg;
+
+$arg := @args[0];
+ok($arg<direction> eq 'out', 'First direction is correct');
+ok($arg<type> eq 'INT', 'First type is correct');
+
+$arg := @args[1];
+ok($arg<direction> eq 'in', 'Second direction is correct');
+ok($arg<type> eq 'PMC', 'Second type is correct');
+
+$arg := @args[2];
+ok($arg<direction> eq 'inconst', 'Third direction is correct');
+ok($arg<type> eq 'NUM', 'Third type is correct');
+
+# Check normalization
+ at args := $op<normalized_args>;
+$arg := @args[0];
+ok($arg<direction> eq 'o', 'First direction is correct');
+ok($arg<type> eq 'i', 'First type is correct');
+ok(!($arg<variant>), 'First arg without variant');
+
+$arg := @args[1];
+ok($arg<direction> eq 'i', 'Second direction is correct');
+ok($arg<type> eq 'p', 'Second type is correct');
+ok($arg<variant> eq 'pc', 'Second variant is correct');
+
+$arg := @args[2];
+ok($arg<direction> eq 'i', 'Third direction is correct');
+ok($arg<type> eq 'nc', 'Third type is correct');
+ok(!($arg<variant>), 'Third arg without variant');
+
+ok( ($op.arg_types).join('_') eq 'i_p_nc', "First variant correct");
+
+
+# Second created op should have _pc_
+$op := @ops[2];
+ok( $op.arg_types.join('_') eq 'i_pc_nc', "Second variant correct");
+
+# Check body munching.
+$op := @ops[0];
+my $goto_offset := 0;
+for @($op) {
+    $goto_offset := $goto_offset || $_<name> eq 'goto_offset';
+}
+ok( $goto_offset, "goto NEXT appended for non :flow ops");
+
+
+# Don't forget to update plan!
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/t/compilers/opsc/04-op.t (from r47544, trunk/t/compilers/opsc/04-op.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/compilers/opsc/04-op.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/compilers/opsc/04-op.t)
@@ -0,0 +1,36 @@
+#!./parrot-nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+# Checking Ops::Op
+
+pir::load_bytecode("opsc.pbc");
+
+plan(7);
+
+my $op := Ops::Op.new(
+    code => 42,
+    name => 'set',
+    type => 'inline',
+    args => <foo bar baz>,
+    flags => hash(),
+    arg_types => <i i ic>,
+);
+
+ok( 1, "Op created");
+
+ok( $op.code == 42,         "... with proper code");
+ok( $op.name eq 'set',      "... with proper name");
+ok( $op.type eq 'inline',   "... with proper type");
+ok( +$op.arg_types == 3,    "... with proper arg_types");
+say('# ' ~ $op.arg_types);
+
+ok( $op.full_name eq 'set_i_i_ic', "full_name is correct");
+
+$op := Ops::Op.new(
+    name => 'set',
+    type => 'inline',
+);
+ok( $op.full_name eq 'set', "Argless op's full_name is correct");
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/t/compilers/opsc/05-oplib.t (from r47544, trunk/t/compilers/opsc/05-oplib.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/compilers/opsc/05-oplib.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/compilers/opsc/05-oplib.t)
@@ -0,0 +1,19 @@
+#!./parrot-nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+# Checking for OpLib num and skip files parsing.
+
+pir::load_bytecode("opsc.pbc");
+
+plan(2);
+
+my $lib := Ops::OpLib.new(
+    :skip_file('src/ops/ops.skip'),
+);
+
+ok( $lib.op_skip_table<abs_i_ic>,       "'abs_i_ic' in skiptable");
+ok( $lib.op_skip_table<ne_nc_nc_ic>,    "'ne_nc_nc_ic' in skiptable");
+#_dumper($lib.skiptable);
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/t/compilers/opsc/06-opsfile.t (from r47544, trunk/t/compilers/opsc/06-opsfile.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/compilers/opsc/06-opsfile.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/compilers/opsc/06-opsfile.t)
@@ -0,0 +1,45 @@
+#!./parrot-nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+pir::load_bytecode("opsc.pbc");
+pir::load_bytecode("nqp-setting.pbc");
+
+plan(7);
+
+my $oplib := Ops::OpLib.new;
+my @files := <
+    src/ops/core.ops
+    src/ops/math.ops
+>;
+
+my $f := Ops::File.new(:oplib($oplib), |@files, :core(1));
+
+my @ops := $f.ops;
+# 84 core
+# 116 math
+# We can generate more than 1 Ops::Op per op due args expansion.
+say( "# Parsed " ~ + at ops);
+# There is more than 200 ops in this 2 files.
+# Feel free to update number if you change them.
+ok(+ at ops == 264, "Ops parsed correctly");
+say('# ' ~ + at ops);
+
+my $op := @ops[0];
+#_dumper($op);
+# First op should be C<end> and has code 0.
+ok($op.name eq 'end',   "First op is end");
+ok($op<code> == 0,      "... with code 0");
+
+$op := @ops[(+ at ops)-1];
+ok($op.name eq 'sqrt',  "Last op is tanh");
+say('# ' ~ $op.name);
+ok($op<code> > 84 + 116,    "... with non zero code");
+
+my $version := join(' ', |$f.version);
+ok( $version ~~ /^\d+ \s \d+ \s \d+$/, "Version parsed");
+say("# $version");
+
+ok( $f.preamble ~~ /pmc_parrotlibrary.h/, "Preamble preserved");
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/t/compilers/opsc/07-emitter.t (from r47544, trunk/t/compilers/opsc/07-emitter.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/compilers/opsc/07-emitter.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/compilers/opsc/07-emitter.t)
@@ -0,0 +1,130 @@
+#! ./parrot-nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+pir::load_bytecode("opsc.pbc");
+
+plan(22);
+
+my $trans := Ops::Trans::C.new();
+
+my @files := <
+    src/ops/io.ops
+    src/ops/sys.ops
+    src/ops/cmp.ops
+>;
+
+my $lib := Ops::OpLib.new();
+my $emitter := Ops::Emitter.new(
+    :ops_file(Ops::File.new(
+        :oplib($lib),
+        :core(1),
+        |@files)
+    ),
+    :trans($trans),
+    :script('ops2c'),
+    :flags(
+        hash( dir => 'tmp/', core => 1 )
+    ),
+);
+
+ok( $emitter, "Emitter created");
+ok( $emitter<include> eq 'parrot/oplib/core_ops.h', 'Include is correct');
+say('# ' ~ $emitter<include>);
+ok( $emitter<func_header> ~~ /^tmp/, 'header file in tmp');
+say('# ' ~ $emitter<func_header>);
+
+#$emitter.print_c_header_file();
+
+my $fh := pir::new__Ps('StringHandle');
+$fh.open('header.h', 'w');
+$emitter.emit_c_op_func_header($fh);
+
+$fh.close();
+my $header := $fh.readall();
+#say($header);
+
+ok($header ~~ /define \s PARROT_OPLIB_CORE_OPS_H_GUARD/, 'Guard generated');
+ok($header ~~ /endif/, 'Close guard generated');
+ok($header ~~ /DO \s NOT \s EDIT \s THIS \s FILE/, 'Preamble generated');
+ok($header ~~ /Parrot_DynOp_core_ \d+ _ \d+ _ \d+/, '... and contains init_func');
+ok($header ~~ /Parrot_err_s_ic/, 'We have proper names of ops functions');
+
+# Testing C emitting.
+#$emitter.print_c_source_file();
+
+$fh := pir::new__Ps('StringHandle');
+$fh.open('core.c', 'w');
+$emitter.emit_c_source_file($fh);
+
+$fh.close();
+my $source := $fh.readall();
+
+ok($source ~~ /DO \s NOT \s EDIT \s THIS \s FILE/, 'Preamble generated');
+ok($source ~~ /Parrot_pcc_get_constants/, 'defines from Trans::C generated');
+ok($source ~~ /io_private.h/, 'Preamble from io.ops preserved');
+
+ok($source ~~ /static \s int \s get_op/, 'Trans::C preamble generated');
+
+ok($source ~~ /PARROT_FUNCTION_CORE/, 'Trans::C core_type preserved');
+ok($source ~~ /static \s size_t \s hash_str/, 'Trans::C op_lookup preserved');
+
+ok($source ~~ /'PREG(1)'/, 'Trans::C arg translation works');
+ok($source ~! /'OP_SIZE'/, 'Trans::C translates OP_SIZE');
+
+# "eq"
+ok($source ~~ /'0,' \s '0,' \s '1'/, "Labels handled correctly");
+
+my $op_body := '
+inline op do_stuff(invar PMC)
+{
+    restart ADDRESS(234);
+}';
+my $new_body := translate_op_body($trans, $op_body);
+my $restart_addr_ok := $new_body ~~ /'return' \s '(' 'opcode_t' \s '*' ')' \s? '234'/;
+ok($restart_addr_ok, "restart ADDRESS() translated ok");
+
+$op_body := '
+inline op branch(in LABEL) :base_loop :flow {
+    goto OFFSET($1);
+}';
+$new_body := translate_op_body($trans, $op_body);
+$restart_addr_ok := $new_body ~~ /'return (opcode_t *)cur_opcode + IREG(1);'/;
+ok($restart_addr_ok, "goto OFFSET() and \$1 translated ok");
+ok($new_body ~~ /'PARROT_JUMP_RELATIVE'/, "jump flags generated");
+
+$op_body := '
+inline op thingy(in PMC) {
+    opcode * next = expr NEXT();
+}';
+$new_body := translate_op_body($trans, $op_body);
+$restart_addr_ok := $new_body ~~ /'cur_opcode + 2;'/;
+ok($restart_addr_ok, "expr NEXT() translated ok");
+
+$op_body := '
+inline op runinterp(in PMC) {
+}';
+$new_body := translate_op_body($trans, $op_body);
+$restart_addr_ok := $new_body ~~ /'PARROT_JUMP_RELATIVE'/;
+ok($restart_addr_ok, "runinterp has PARROT_JUMP_RELATIVE");
+
+#say($source);
+
+sub translate_op_body($trans, $body) {
+    my $file  := Ops::File.new_str(
+        :oplib($lib), $body);
+    my $emitter := Ops::Emitter.new(
+        :ops_file($file),
+        :trans($trans),
+        :script("opsc"),
+        :flags( hash(core => '1') )
+    );
+
+    my $sh := pir::new__Ps('StringHandle');
+    $sh.open('your_bank_account_information.txt', 'w');
+    $emitter.emit_c_source_file($sh);
+    $sh.close();
+    $sh.readall();
+}
+
+# vim: expandtab shiftwidth=4 ft=perl6:

Copied: branches/gsoc_threads/t/compilers/opsc/common.pir (from r47544, trunk/t/compilers/opsc/common.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/compilers/opsc/common.pir	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/compilers/opsc/common.pir)
@@ -0,0 +1,41 @@
+#! parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 COMMON FUNCTIONS FOR TESTING
+
+=cut
+
+.loadlib 'io_ops'
+
+.sub '_parse_buffer'
+    .param string buffer
+
+    .local pmc compiler
+    compiler = compreg 'Ops'
+    .tailcall compiler.'parse'(buffer, 'target'=>'parse')
+.end
+
+.sub '_parse_one_file'
+    .param string filename
+    .local string buf
+
+    buf = '_slurp'(filename)
+    .tailcall '_parse_buffer'(buf)
+.end
+
+
+.sub '_slurp'
+    .param string file
+    .local pmc pio
+    pio  = open file
+    $S0  = pio.'readall'()
+    close pio
+    .return ($S0)
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gsoc_threads/t/compilers/pct/past.t
==============================================================================
--- branches/gsoc_threads/t/compilers/pct/past.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/pct/past.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,7 +7,7 @@
 use warnings;
 use lib qw(t . lib ../lib ../../lib ../../../lib);
 
-use Parrot::Test tests => 10;
+use Parrot::Test tests => 11;
 
 foreach my $name (qw(Node Val Var Op Block Stmts)) {
     my $module = "'PAST';'$name'";
@@ -133,6 +133,36 @@
 }
 OUT
 
+pir_output_is( <<'CODE', <<'OUT', 'PAST::Val constant nodes' );
+.sub 'main' :main
+    load_bytecode 'PCT.pbc'
+
+    .local pmc block
+    $P0 = get_hll_global ['PAST'], 'Block'
+    block = $P0.'new'('name'=>'xyz', 'subid'=>'xyz')
+
+    .local pmc node
+    $P0 = get_hll_global ['PAST'], 'Val'
+    node = $P0.'new'('value'=> 'CONTROL_NEXT', 'returns'=>'!except_types')
+    block.'push'(node)
+
+    .local pmc compiler
+    compiler = get_hll_global ['PAST'], 'Compiler'
+    $S0 = compiler.'compile'(block, 'target'=>'pir')
+    say $S0
+.end
+CODE
+
+.namespace []
+.include "except_types.pasm"
+.sub "xyz"  :subid("xyz")
+.annotate 'line', 0
+    .return (.CONTROL_NEXT)
+.end
+
+
+OUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/gsoc_threads/t/compilers/pct/post.t
==============================================================================
--- branches/gsoc_threads/t/compilers/pct/post.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/pct/post.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -6,7 +6,7 @@
 use strict;
 use warnings;
 use lib qw(t . lib ../lib ../../lib ../../../lib);
-use Parrot::Test tests => 7;
+use Parrot::Test tests => 8;
 
 foreach my $name (qw(Op Ops Sub Label)) {
     my $module = "'POST';'$name'";
@@ -114,6 +114,35 @@
 
 OUT
 
+
+pir_output_is( <<'CODE', <<'OUT', 'Generate directives' );
+.sub _main
+    load_bytecode 'PCT.pbc'
+    load_bytecode 'dumper.pbc'
+    .local pmc node
+    node = new ['POST';'Sub']
+    node.'name'('foo')
+    node.'add_directive'('.include "cclass.pasm"')
+    node.'add_directive'('.include "exception_types.pasm"')
+
+    .local pmc compiler
+    compiler = new ['POST';'Compiler']
+    $S0 = compiler.'to_pir'(node)
+    say $S0
+    .return ()
+.end
+CODE
+
+.namespace []
+.include "cclass.pasm"
+.include "exception_types.pasm"
+.sub "foo"  :subid("post10")
+.end
+
+
+OUT
+
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/gsoc_threads/t/compilers/pge/p5regex/p5rx.t
==============================================================================
--- branches/gsoc_threads/t/compilers/pge/p5regex/p5rx.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/pge/p5regex/p5rx.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -55,6 +55,8 @@
 
 .const int TESTS = 960
 
+.loadlib 'io_ops'
+
 .sub main :main
     load_bytecode 'Test/Builder.pbc'
     load_bytecode 'PGE.pbc'

Modified: branches/gsoc_threads/t/compilers/pge/perl6regex/01-regex.t
==============================================================================
--- branches/gsoc_threads/t/compilers/pge/perl6regex/01-regex.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/compilers/pge/perl6regex/01-regex.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -54,6 +54,8 @@
 
 .const string TESTS = 'no_plan'
 
+.loadlib 'io_ops'
+
 .sub main :main
     load_bytecode 'Test/Builder.pbc'
     load_bytecode 'PGE.pbc'

Copied: branches/gsoc_threads/t/dynoplibs/bit.t (from r47544, trunk/t/dynoplibs/bit.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/bit.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/bit.t)
@@ -0,0 +1,297 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/dynoplibs/bit.t - Bitwise Dynops
+
+=head1 SYNOPSIS
+
+        % prove t/dynoplibs/bit.t
+
+=head1 DESCRIPTION
+
+Tests basic arithmetic on various combinations of Parrot integer and
+number types.
+
+=cut
+
+.loadlib 'bit_ops'
+
+.sub main :main
+    .include 'test_more.pir'
+
+    plan(56)
+
+    bnot_p_p_creates_destination()
+    bands_null_string()
+    bands_2()
+    bands_3()
+    bands_cow()
+    bors_null_string()
+    bors_2()
+    bors_3()
+    bors_cow()
+    bxors_null_string()
+    bxors_2()
+    bxors_3()
+    bxors_cow()
+    bnots_null_string()
+    bnots_2()
+    bnots_cow()
+    # END_OF_TESTS
+
+.end
+
+.sub 'bnot_p_p_creates_destination'
+    $P0 = box 3
+    $P1 = bnot $P0
+    is( $P1, -4, 'bnot_p_p_creates_destination')
+.end
+
+.sub bands_null_string
+    null $S1
+    set $S2, "abc"
+    $S1 = bands $S1, $S2
+    null $S3
+    is( $S1, $S3, 'ok1' )
+
+    set $S1, ""
+    $S1 = bands $S1, $S2
+    nok( $S1, 'ok2' )
+
+    null $S2
+    set $S1, "abc"
+    $S1 = bands $S1, $S2
+    null $S3
+    is( $S1, $S3, 'ok3' )
+
+    set $S2, ""
+    $S1 = bands $S1, $S2
+    nok( $S1, 'ok4' )
+.end
+
+.sub bands_2
+    set $S1, "abc"
+    set $S2, "EE"
+    $S1 = bands $S1, $S2
+    is( $S1, "A@", 'bands 2' )
+    is( $S2, "EE", 'bands 2' )
+.end
+
+.sub bands_3
+    set $S1, "abc"
+    set $S2, "EE"
+    bands $S0, $S1, $S2
+    is( $S0, "A@", 'bands 3' )
+    is( $S1, "abc", 'bands 3' )
+    is( $S2, "EE", 'bands 3' )
+.end
+
+.sub bands_cow
+    set $S1, "foo"
+    substr $S2, $S1, 0, 3
+    $S1 = bands $S1, "bar"
+    is( $S2, "foo", 'bands COW' )
+.end
+
+.sub bors_null_string
+    null $S1
+    null $S2
+    $S1 = bors $S1, $S2
+    null $S3
+    is( $S1, $S3, 'bors NULL string' )
+
+    null $S1
+    set $S2, ""
+    $S1 = bors $S1, $S2
+    null $S3
+    is( $S1, $S3, 'bors NULL string' )
+
+    $S2 = bors $S2, $S1
+    is( $S2, $S3, 'bors NULL string' )
+
+    null $S1
+    set $S2, "def"
+    $S1 = bors $S1, $S2
+    is( $S1, "def", 'bors NULL string' )
+
+    null $S2
+    $S1 = bors $S1, $S2
+    is( $S1, "def", 'bors NULL string' )
+
+    null $S1
+    null $S2
+    bors $S3, $S1, $S2
+    null $S4
+    is( $S3, $S4, 'bors NULL string' )
+
+    set $S1, ""
+    bors $S3, $S1, $S2
+    is( $S3, $S4, 'bors NULL string' )
+
+    bors $S3, $S2, $S1
+    is( $S3, $S4, 'bors NULL string' )
+
+    set $S1, "def"
+    bors $S3, $S1, $S2
+    is( $S3, "def", 'bors NULL string' )
+
+    bors $S3, $S2, $S1
+    is( $S3, "def", 'bors NULL string' )
+.end
+
+.sub bors_2
+    set $S1, "abc"
+    set $S2, "EE"
+    $S1 = bors $S1, $S2
+    is( $S1, "egc", 'bors 2' )
+    is( $S2, "EE", 'bors 2' )
+.end
+
+.sub bors_3
+    set $S1, "abc"
+    set $S2, "EE"
+    bors $S0, $S1, $S2
+    is( $S0, "egc", 'bors 3' )
+    is( $S1, "abc", 'bors 3' )
+    is( $S2, "EE", 'bors 3' )
+.end
+
+.sub bors_cow
+    set $S1, "foo"
+    substr $S2, $S1, 0, 3
+    $S1 = bors $S1, "bar"
+    is( $S2, "foo", 'bors COW' )
+.end
+
+.sub bxors_null_string
+    null $S1
+    null $S2
+    $S1 = bxors $S1, $S2
+    null $S3
+    is( $S1, $S3, 'bxors NULL string' )
+
+    null $S1
+    set $S2, ""
+    $S1 = bxors $S1, $S2
+    null $S3
+    is( $S1, $S3, 'bxors NULL string' )
+
+    $S2 = bxors $S2, $S1
+    is( $S2, $S3, 'bxors NULL string' )
+
+    null $S1
+    set $S2, "abc"
+    $S1 = bxors $S1, $S2
+    is( $S1, "abc", 'bxors NULL string' )
+
+    null $S2
+    $S1 = bxors $S1, $S2
+    is( $S1, "abc", 'bxors NULL string' )
+
+    null $S1
+    null $S2
+    bxors $S3, $S1, $S2
+    null $S4
+    is( $S3, $S4, 'bxors NULL string' )
+
+    set $S1, ""
+    bxors $S3, $S1, $S2
+    is( $S3, $S4, 'bxors NULL string' )
+
+    bxors $S3, $S2, $S1
+    is( $S3, $S4, 'bxors NULL string' )
+
+    set $S1, "abc"
+    bxors $S3, $S1, $S2
+    is( $S3, "abc", 'bxors NULL string' )
+
+    bxors $S3, $S2, $S1
+    is( $S3, "abc", 'bxors NULL string' )
+.end
+
+.sub bxors_2
+    set $S1, "a2c"
+    set $S2, "Dw"
+    $S1 = bxors $S1, $S2
+    is( $S1, "%Ec", 'bxors 2' )
+    is( $S2, "Dw", 'bxors 2' )
+
+    set $S1, "abc"
+    set $S2, "   X"
+    $S1 = bxors $S1, $S2
+    is( $S1, "ABCX", 'bxors 2' )
+    is( $S2, "   X", 'bxors 2' )
+.end
+
+.sub bxors_3
+    set $S1, "a2c"
+    set $S2, "Dw"
+    bxors $S0, $S1, $S2
+    is( $S0, "%Ec", 'bxors 3' )
+    is( $S1, "a2c", 'bxors 3' )
+    is( $S2, "Dw", 'bxors 3' )
+
+    set $S1, "abc"
+    set $S2, "   Y"
+    bxors $S0, $S1, $S2
+    is( $S0, "ABCY", 'bxors 3' )
+    is( $S1, "abc", 'bxors 3' )
+    is( $S2, "   Y", 'bxors 3' )
+.end
+
+.sub bxors_cow
+    set $S1, "foo"
+    substr $S2, $S1, 0, 3
+    $S1 = bxors $S1, "bar"
+    is( $S2, "foo", 'bxors COW' )
+.end
+
+.sub bnots_null_string
+    null $S1
+    null $S2
+    bnots $S1, $S2
+    null $S3
+    is( $S1, $S3, 'bnots NULL string' )
+
+    null $S1
+    set $S2, ""
+    bnots $S1, $S2
+    null $S3
+    is( $S1, $S3, 'bnots NULL string' )
+
+    bnots $S2, $S1
+    is( $S2, $S3, 'bnots NULL string' )
+.end
+
+# This was the previous test used for t/native_pbc/string.t
+.sub bnots_2
+    skip( 4, "No unicode yet" )
+    # getstdout $P0
+    # push $P0, "utf8"
+    # set $S1, "a2c"
+    # bnots $S2, $S1
+    # is( $S1, "a2c", 'bnots 2' )
+    # is( $S2, "\xC2\x9E\xC3\x8D\xC2\x9C", 'bnots 2' )
+    #
+    # bnots $S1, $S1
+    # is( $S1, "\xC2\x9E\xC3\x8D\xC2\x9C", 'bnots 2' )
+    #
+    # bnots $S1, $S1
+    # is( $S1, "a2c", 'bnots 2' )
+.end
+
+.sub bnots_cow
+    set $S1, "foo"
+    substr $S2, $S1, 0, 3
+    bnots $S1, $S1
+    is( $S2, "foo", 'bnots COW' )
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/t/dynoplibs/debug.t (from r47544, trunk/t/dynoplibs/debug.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/debug.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/debug.t)
@@ -0,0 +1,202 @@
+#!perl
+# Copyright (C) 2001-2007, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Test::More;
+use Parrot::Test tests => 8;
+
+=head1 NAME
+
+t/op/debuginfo.t - Debugging Info
+
+=head1 SYNOPSIS
+
+        % prove t/op/debuginfo.t
+
+=head1 DESCRIPTION
+
+Tests the various set and get operations for line, package and file info,
+as well as backtrace tests.
+
+=cut
+
+$ENV{TEST_PROG_ARGS} ||= '';
+my $nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
+    ? "\\(unknown file\\)\n-1" : "debug_\\d+\\.pasm\n\\d";
+
+#SKIP: {
+#skip "disabled on fast-core",1 if $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/;
+
+pasm_output_like( <<'CODE', <<"OUTPUT", "getline, getfile" );
+.loadlib 'debug_ops'
+.pcc_sub main:
+    getfile S0
+    getline I0
+    say S0
+    say I0
+    end
+CODE
+/$nolineno/
+OUTPUT
+
+pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - Null PMC access" );
+.sub main
+    print "ok 1\n"
+    a()
+    print "not ok 10\n"
+.end
+.sub a
+    print "ok 2\n"
+    b()
+    print "not ok 9\n"
+.end
+.sub b
+    print "ok 3\n"
+    c()
+    print "not ok 8\n"
+.end
+.sub c
+    print "ok 4\n"
+    d()
+    print "not ok 7\n"
+.end
+.sub d
+    print "ok 5\n"
+    $P0 = null
+    $P0()
+    print "not ok 6\n"
+.end
+CODE
+/^ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+Null PMC access in invoke\(\)
+current instr\.: 'd' pc (\d+|-1) \(.*?:(\d+|-1)\)
+called from Sub 'c' pc (\d+|-1) \(.*?:(\d+|-1)\)
+called from Sub 'b' pc (\d+|-1) \(.*?:(\d+|-1)\)
+called from Sub 'a' pc (\d+|-1) \(.*?:(\d+|-1)\)
+called from Sub 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
+OUTPUT
+
+pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - method not found" );
+.namespace ["Test1"]
+.sub main
+    print "ok 1\n"
+    foo()
+    print "not ok 5\n"
+.end
+.sub foo
+    print "ok 2\n"
+    $P0 = new 'Integer'
+    print "ok 3\n"
+    $P0."nosuchmethod"()
+    print "not ok 4\n"
+.end
+CODE
+/^ok 1
+ok 2
+ok 3
+Method 'nosuchmethod' not found for invocant of class 'Integer'
+current instr.: 'parrot;Test1;foo' pc (\d+|-1) \(.*?:(\d+|-1)\)
+called from Sub 'parrot;Test1;main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
+OUTPUT
+
+pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - fetch of unknown lexical" );
+.namespace ["Test2"]
+.sub main
+    print "ok 1\n"
+    foo()
+    print "not ok 3\n"
+.end
+.sub foo :lex
+    print "ok 2\n"
+    find_lex $P0, "nosuchlex"
+    print "not ok 3\n"
+.end
+CODE
+/^ok 1
+ok 2
+Lexical 'nosuchlex' not found
+current instr.: 'parrot;Test2;foo' pc (\d+|-1) \(.*?:(\d+|-1)\)
+called from Sub 'parrot;Test2;main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
+OUTPUT
+
+pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - recursion 1" );
+.sub main
+    main()
+.end
+CODE
+/^maximum recursion depth exceeded
+current instr\.: 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)
+called from Sub 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)
+\.\.\. call repeated \d+ times/
+OUTPUT
+
+pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - recursion 2" );
+.sub main
+    rec(91)
+.end
+.sub rec
+    .param int i
+    if i == 0 goto END
+    dec i
+    rec(i)
+    .return()
+END:
+    $P0 = null
+    $P0()
+.end
+CODE
+/^Null PMC access in invoke\(\)
+current instr\.: 'rec' pc (\d+|-1) \(.*?:(\d+|-1)\)
+called from Sub 'rec' pc (\d+|-1) \(.*?:(\d+|-1)\)
+\.\.\. call repeated 90 times
+called from Sub 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
+OUTPUT
+
+$nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
+    ? '\(\(unknown file\):-1\)' : '\(xyz.pir:126\)';
+
+pir_error_output_like( <<'CODE', <<"OUTPUT", "setfile and setline" );
+.sub main :main
+    setfile "xyz.pir"
+    setline 123
+    $S0 = 'hello'
+    $I0 = 456
+    'no_such_function'($S0, $I0)
+.end
+CODE
+/$nolineno/
+OUTPUT
+
+$nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
+    ? '\(\(unknown file\):-1\)' : '\(foo.p6:128\)';
+pir_error_output_like( <<'CODE', <<"OUTPUT", "setfile and setline" );
+.sub main :main
+    setfile "foo.p6"
+    setline 123
+    $P0 = new 'Integer'
+    assign $P0, 9876
+    set_global '$a', $P0
+
+    setline 124
+    $P0 = get_global '$a'
+    $P1 = clone $P0
+    add $P1, 1
+    'nsf'($P1)
+.end
+CODE
+/$nolineno/
+OUTPUT
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/gsoc_threads/t/dynoplibs/io-old.t (from r47544, trunk/t/dynoplibs/io-old.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/io-old.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/io-old.t)
@@ -0,0 +1,91 @@
+#! perl
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+
+use Test::More;
+use Parrot::Test tests => 4;
+use Parrot::Test::Util 'create_tempfile';
+
+=head1 NAME
+
+t/pmc/io.t - IO Ops
+
+=head1 SYNOPSIS
+
+    % prove t/pmc/io.t
+
+=head1 DESCRIPTION
+
+Tests the Parrot IO operations.
+
+=cut
+
+my ($FOO, $temp_file) = create_tempfile( UNLINK => 1 );
+close $FOO;
+
+pasm_error_output_like( <<"CODE", <<'OUTPUT', '32bit seek: exception (ops)' );
+.loadlib 'io_ops'
+   open P0, "$temp_file", 'w'
+   seek P0, -1, 0
+   say "error!"
+   end
+CODE
+/seek failed \(32bit\)/
+OUTPUT
+
+pasm_error_output_like( <<"CODE", <<'OUTPUT', '64bit seek: exception (ops)' );
+.loadlib 'io_ops'
+   open P0, "$temp_file", 'w'
+   seek P0, -1, -1, 0
+   say "error!"
+   end
+CODE
+/seek failed \(64bit\)/
+OUTPUT
+
+pasm_output_is( <<"CODE", <<'OUTPUT', "peek (ops)" );
+.loadlib 'io_ops'
+    open P0, "$temp_file", 'w'
+    print P0, "a line\\n"
+    close P0
+    open P0, "$temp_file", 'r'
+    peek S0, P0
+    print S0
+    peek S1, P0
+    print S1
+    print "\\n"
+    read S2, P0, 2
+    peek S3, P0
+    print S3
+    print "\\n"
+    end
+CODE
+aa
+l
+OUTPUT
+
+pasm_output_is( <<"CODE", <<'OUTPUT', "peek on an empty file (ops)" );
+.loadlib 'io_ops'
+    open P0, "$temp_file", 'w'
+    close P0
+    open P0, "$temp_file", 'r'
+    peek S0, P0
+    eq S0, "", OK1
+    print "not "
+OK1:
+    say "ok 1"
+    end
+CODE
+ok 1
+OUTPUT
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/gsoc_threads/t/dynoplibs/io.t (from r47544, trunk/t/dynoplibs/io.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/io.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/io.t)
@@ -0,0 +1,285 @@
+#!./parrot
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/op/io.t - Testing io opcodes
+
+=head1 SYNOPSIS
+
+    % prove t/op/io.t
+
+=head1 DESCRIPTION
+
+Tests various io opcodes.
+
+=cut
+
+.const int TESTS = 12
+
+.loadlib 'io_ops'
+
+.sub 'main' :main
+    .include 'test_more.pir'
+
+    plan(TESTS)
+
+    read_on_null()
+    open_delegates_to_filehandle_pmc()
+    open_null_filename()
+    open_null_mode()
+    open_pipe_for_reading()
+    getfd_fdopen()
+    printerr_tests()
+    stat_tests()
+
+    # must come after (these don't use test_more)
+    open_pipe_for_writing()
+    read_invalid_fh()
+.end
+
+.sub open_delegates_to_filehandle_pmc
+    load_bytecode 'P6object.pbc'
+
+    .local pmc p6meta, interp, classes, classid
+    p6meta = get_root_global ["parrot"], "P6metaclass"
+    p6meta.'new_class'('Testing')
+
+    interp = getinterp
+    classes = interp[0]
+    classid = classes['Testing']
+    $I0 = classes['FileHandle']
+    set classes['FileHandle'], classid
+
+    $P1 = open '/foo'
+    is($P1,42,'open opcode delegates to the open method on the FileHandle PMC')
+
+    # replace the original, so we don't break other tests
+    set classes['FileHandle'], $I0
+
+.end
+
+.sub 'open_null_filename'
+    push_eh open_null_filename_failed
+    null $S0
+    $P0 = open $S0, 'r'
+    nok(1, 'open with null filename')
+    .return ()
+
+  open_null_filename_failed:
+    ok(1, 'open with null filename')
+.end
+
+.sub 'open_null_mode'
+    push_eh open_null_mode_failed
+    null $S0
+    $P0 = open 'some_name', $S0
+    nok(1, 'open with null mode')
+    .return ()
+
+  open_null_mode_failed:
+    ok(1, 'open with null mode')
+.end
+
+.loadlib 'sys_ops'
+.sub 'tt661_todo_test' :anon
+    # As of r41963, these tests need to be todo'ed at least on Win32. Add new
+    # platforms known to fail.
+    .include 'sysinfo.pasm'
+    $S0 = sysinfo .SYSINFO_PARROT_OS
+    if $S0 == 'MSWin32' goto tt661_todo
+
+    .return (0)
+
+  tt661_todo:
+    .return (1)
+.end
+
+.include 'iglobals.pasm'
+
+.sub 'open_pipe_for_reading'
+    .local pmc interp
+    interp = getinterp
+
+    .local pmc conf
+    conf = interp[.IGLOBALS_CONFIG_HASH]
+
+    .local string command
+    command = conf['build_dir']
+
+    .local string aux
+    aux = conf['slash']
+    command .= aux
+    aux = conf['test_prog']
+    command .= aux
+    aux = conf['exe']
+    command .= aux
+    command .= ' -V'
+
+    .local pmc pipe
+    pipe = open command, 'rp'
+    unless pipe goto open_pipe_for_reading_failed
+    .local string line
+    line = readline pipe
+    line = substr line, 0, 14
+    is('This is Parrot', line, 'open pipe for reading')
+    .return ()
+
+  open_pipe_for_reading_failed:
+    nok(1, 'open pipe for reading')
+    .return ()
+.end
+
+.sub 'open_pipe_for_writing'
+    $I0 = tt661_todo_test()
+    if $I0 goto open_pipe_for_writing_todoed
+    .local pmc interp
+    interp = getinterp
+
+    .local pmc conf
+    conf = interp[.IGLOBALS_CONFIG_HASH]
+
+    .local string command
+    command = conf['build_dir']
+
+    .local string aux
+    aux = conf['slash']
+    command .= aux
+    .local string filename
+    filename .= command
+    filename .= 'examples/pasm/cat.pasm'
+    aux = conf['test_prog']
+    command .= aux
+    aux = conf['exe']
+    command .= aux
+    command .= ' '
+    command .= filename
+
+    .local pmc pipe
+    pipe = open command, 'wp'
+    unless pipe goto open_pipe_for_writing_failed
+
+    pipe.'puts'("ok 9 - open pipe for writing\n")
+    close pipe
+    .return ()
+
+  open_pipe_for_writing_failed:
+    nok(1, 'open pipe for writing')
+    .return ()
+
+  open_pipe_for_writing_todoed:
+    todo(0, 'Unimplemented in this platform, TT #661')
+
+.end
+
+# TT #1178
+.sub 'getfd_fdopen'
+    getstdout $P0
+    $I0 = $P0.'get_fd'()
+    fdopen $P1, $I0, 'w'
+    $I0 = defined $P1
+    ok($I0, 'fdopen - no close')
+.end
+
+.sub 'read_on_null'
+    .const string description = "read on null PMC throws exception"
+    push_eh eh
+    null $P1
+    $S0 = read $P1, 1
+    ok(0, description)
+    goto ret
+  eh:
+    ok(1, description)
+  ret:
+    pop_eh
+    .return ()
+.end
+
+.sub 'read_invalid_fh'
+    $P0 = new ['FileHandle']
+
+    push_eh _readline_handler
+    $S0 = readline $P0
+    print "not "
+
+_readline_handler:
+        print "ok 10\n"
+        pop_eh
+
+    push_eh _read_handler
+    $S0 = read $P0, 1
+    print "not "
+
+_read_handler:
+        print "ok 11\n"
+        pop_eh
+
+    push_eh _print_handler
+    print $P0, "kill me now\n"
+    print "not "
+
+_print_handler:
+        print "ok 12\n"
+        pop_eh
+.end
+
+.sub 'printerr_tests'
+    # temporarily capture stderr
+    $P0 = getstderr
+    $P1 = new ['StringHandle']
+    $S0 = null
+    $P1.'open'($S0, 'w')
+    setstderr $P1
+
+    $P2 = new ['String']
+    $P2 = "This is a test\n"
+    printerr 10
+    printerr "\n"
+    printerr 1.0
+    printerr "\n"
+    printerr "foo"
+    printerr "\n"
+    printerr $P2
+
+    # restore stderr
+    setstderr $P0
+
+    $S0 = $P1.'readall'()
+    is($S0, <<'OUTPUT', 'printerr opcode')
+10
+1
+foo
+This is a test
+OUTPUT
+.end
+
+.sub 'stat_tests'
+    .local pmc pio
+    .local int len
+    .const string description = 'stat failed'
+    .include "stat.pasm"
+  push_eh eh
+    len = stat 'no_such_file', .STAT_FILESIZE
+    ok(0, description)
+    goto ret
+  eh:
+    ok(1, description)
+  ret:
+    pop_eh
+    .return ()
+.end
+
+.namespace ["Testing"]
+
+.sub open :method
+    .param pmc args :slurpy
+    .return(42)
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gsoc_threads/t/dynoplibs/math.t
==============================================================================
--- branches/gsoc_threads/t/dynoplibs/math.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/dynoplibs/math.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -16,11 +16,21 @@
 
 =cut
 
+.macro exception_is ( M )
+    .local pmc exception
+    .local string message
+    .get_results (exception)
+
+    message = exception['message']
+    is( message, .M, .M )
+.endm
+
 .loadlib 'math_ops'
+
 .sub main :main
     .include 'test_more.pir'
     .include 'fp_equality.pasm'
-    plan(20)
+    plan(34)
     ok(1, "load math_ops")
     rand $I0
     test_2_arg_int()
@@ -32,6 +42,15 @@
     test_local_nums()
     test_local_nums_2_arg()
     test_local_ints()
+    test_cmod_n()
+    test_exception_cmod_n_n_n_by_zero()
+    test_exception_cmod_n_nc_n_by_zero()
+    test_exception_cmod_n_n_nc_by_zero()
+    test_cmod()
+    test_cmod_i_i_i_by_zero()
+    test_cmod_i_ic_i_by_zero()
+    test_cmod_i_i_ic_by_zero()
+    test_cmod_float_integer_pmc_nan()
 .end
 
 .sub test_2_arg_int
@@ -178,6 +197,114 @@
 finish:
 .end
 
+.sub test_cmod_n
+    set     $N0, 5.000
+    set     $N1, 3.000
+    cmod    $N2, $N0, $N1
+    is( $N2, "2", 'cmod_n' )
+.end
+
+.sub test_exception_cmod_n_n_n_by_zero
+    push_eh handler
+    set $N0, 0
+    set $N1, 10
+    cmod $N2, $N1, $N0
+  handler:
+    .exception_is( 'Divide by zero' )
+.end
+
+.sub test_exception_cmod_n_nc_n_by_zero
+    push_eh handler
+    set $N0, 0
+    cmod $N2, 10, $N0
+  handler:
+    .exception_is( 'Divide by zero' )
+.end
+
+.sub test_exception_cmod_n_n_nc_by_zero
+    push_eh handler
+    set $N1, 10
+    cmod $N2, $N1, 0
+  handler:
+    .exception_is( 'Divide by zero' )
+.end
+
+.sub 'test_cmod'
+    $I0 = 5
+    $I1 = 3
+    $I2 = cmod $I0, $I1
+    is($I2, 2, 'cmod_i_i_i')
+    is($I0, 5, 'cmod_i_i_i - dividend unchanged')
+    is($I1, 3, 'cmod_i_i_i - divisor unchanged')
+
+    $I0 = 12
+
+    $I1 = cmod $I0, 10
+    is($I1, 2, 'cmod_i_i_ic')
+
+    $I1 = cmod 14, $I0
+    is($I1, 2, 'cmod_i_ic_i')
+
+    $I1 = cmod 13, 11
+    is($I1, 2, 'cmod_i_ic_ic')
+.end
+
+.sub 'test_cmod_i_i_i_by_zero'
+    $I0 = 0
+    $I1 = 10
+    push_eh test_cmod_i_i_i_by_zero_catch
+    $I2 = cmod $I1, $I0
+    pop_eh
+    $I3 = 0
+    goto test_cmod_i_i_i_by_zero_end
+
+  test_cmod_i_i_i_by_zero_catch:
+    $I3 = 1
+
+  test_cmod_i_i_i_by_zero_end:
+    ok($I3, 'cmod_i_i_i by zero')
+.end
+
+.sub 'test_cmod_i_ic_i_by_zero'
+    $I0 = 0
+    push_eh test_cmod_i_ic_i_by_zero_catch
+    $I2 = cmod 10, $I0
+    pop_eh
+    $I3 = 0
+    goto test_cmod_i_ic_i_by_zero_end
+
+  test_cmod_i_ic_i_by_zero_catch:
+    $I3 = 1
+
+  test_cmod_i_ic_i_by_zero_end:
+    ok($I3, 'cmod_i_ic_i by zero')
+.end
+
+.sub 'test_cmod_i_i_ic_by_zero'
+    $I1 = 10
+    push_eh test_cmod_i_i_ic_by_zero_catch
+    $I2 = cmod $I1, 0
+    pop_eh
+    $I3 = 0
+    goto test_cmod_i_i_ic_by_zero_end
+
+  test_cmod_i_i_ic_by_zero_catch:
+    $I3 = 1
+
+  test_cmod_i_i_ic_by_zero_end:
+    ok($I3, 'cmod_i_i_ic by zero')
+.end
+
+.sub test_cmod_float_integer_pmc_nan
+    $P1 = new 'Float'
+    $P2 = new 'Integer'
+    $P2 = 1
+    $N0 = 'NaN'
+    cmod $P1, $P2, $N0
+    #is($P1, 'NaN', 'cmod with Float and Integer PMCs and NaN')
+    todo(0, 'cmod with Float and Integer PMCs and NaN', 'cmod does not play nicely with PMCs and NaN')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/gsoc_threads/t/dynoplibs/obscure.t
==============================================================================
--- branches/gsoc_threads/t/dynoplibs/obscure.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/dynoplibs/obscure.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -17,6 +17,8 @@
 =cut
 
 .loadlib 'obscure_ops'
+.loadlib 'trans_ops'    # needed for atan
+
 .sub main :main
     .include 'fp_equality.pasm'
     .include 'test_more.pir'

Copied: branches/gsoc_threads/t/dynoplibs/pmc_pow.t (from r47544, trunk/t/dynoplibs/pmc_pow.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/pmc_pow.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/pmc_pow.t)
@@ -0,0 +1,84 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/dynoplibs/pmc_pow.t - Test C<pow> on PMCs
+
+=head1 SYNOPSIS
+
+    % prove t/dynoplibs/pmc_pew.t
+
+=head1 DESCRIPTION
+
+Test handling 3-arg C<pow> on PMCs.
+
+=cut
+
+.loadlib 'trans_ops'
+
+.sub main :main
+    .include 'test_more.pir'
+    .include 'iglobals.pasm'
+
+    plan (4)
+
+    # Don't check BigInt or BigNum without gmp
+    .local pmc interp     # a handle to our interpreter object.
+    interp = getinterp
+    .local pmc config
+    config = interp[.IGLOBALS_CONFIG_HASH]
+    .local string gmp
+    gmp = config['gmp']
+
+    test_pow('Integer')
+    test_pow('Float')
+
+    if gmp goto do_big_ones
+        skip( 2, "will not test BigInt or BigNum without gmp" )
+        goto end
+
+  do_big_ones:
+    test_pow('BigInt')
+    test_pow('BigNum')
+
+  end:
+.end
+
+.sub test_pow
+    .param pmc type
+
+    $P0 = new type
+    $P0 = 40
+    $P1 = new type
+    $P1 = 2
+    $P2 = new type
+    $P2 = 115200
+
+    $P99 = $P2
+
+    $S0 = "original dest is untouched in pow for "
+    $S1 = type
+    concat $S0, $S1
+
+    # ignore exceptions
+    push_eh done
+    pow $P2, $P0, $P1
+
+    $I0 = cmp $P99, 115200
+
+    is( $I0, 0, $S0 )
+    goto end
+
+  done:
+    ok(1, 'ignoring exceptions')
+  end:
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/t/dynoplibs/string_pmc_bitwise.t (from r47544, trunk/t/dynoplibs/string_pmc_bitwise.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/string_pmc_bitwise.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/string_pmc_bitwise.t)
@@ -0,0 +1,304 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/dynoplibs/string_pmc_bitwise.t - Bitwise dynops on String PMC
+
+=head1 SYNOPSIS
+
+    % prove t/dynoplibs/string-pmc_bitwise.t
+
+=head1 DESCRIPTION
+
+Test C<bit_ops> dynops lib on C<String> PMC.
+
+=cut
+
+.loadlib 'bit_ops'
+
+.sub main :main
+    .include 'test_more.pir'
+
+    plan(47)
+
+    bands_null_string()
+    test_bands_2()
+    test_bands_3()
+    bors_null_string()
+    test_bors_2()
+    test_bors_3()
+    bxors_null_string()
+    bxors_2()
+    bxors_3()
+    bnots_null_string()
+.end
+
+.sub bands_null_string
+    new $P1, ['String']
+    new $P2, ['String']
+    new $P3, ['String']
+
+    null $S1
+    set $P1, $S1
+
+    set $S2, "abc"
+    set $P2, $S2
+
+    bands $P1, $P2
+
+    null $S3
+    set $P3, $S3
+
+    is( $P1, $P3, 'band null, "abc" -> null' )
+
+    set $P1, ""
+    bands $P1, $P2
+    nok( $P1, 'band "", "abc" -> false' )
+
+    null $S2
+    set $P2, $S2
+    set $P1, "abc"
+
+    bands $P1, $P2
+
+    null $S3
+    set $P3, $S3
+
+    is( $P1, $P3, 'bands "abc", null -> null' )
+
+    set $P2, ""
+    bands $P1, $P2
+    nok( $P1, 'bans "abc", "" -> false' )
+
+.end
+
+.sub test_bands_2
+    new $P1, ['String']
+    new $P2, ['String']
+    set $P1, "abc"
+    set $P2, "EE"
+    bands $P1, $P2
+    is( $P1, "A@", 'bands "abc", "EE" -> "A@"' )
+    is( $P2, "EE", '$2 is unchanged' )
+.end
+
+.sub test_bands_3
+    new $P1, ['String']
+    new $P2, ['String']
+    new $P0, ['String']
+    set $P1, "abc"
+    set $P2, "EE"
+    bands $P0, $P1, $P2
+    is( $P0, "A@",  'bands "abc", "EE" -> "A@"' )
+    is( $P1, "abc", '$2 is unchanged' )
+    is( $P2, "EE",  '$3 is unchanged' )
+.end
+
+.sub bors_null_string
+    new $P1, ['String']
+    new $P2, ['String']
+    new $P3, ['String']
+
+    null $S1
+    null $S2
+    set $P1, $S1
+    set $P2, $S2
+    bors $P1, $P2
+    null $S3
+    set $P3, $S3
+    is( $P1, $P3, 'bors null, null -> null' )
+
+    null $S1
+    set $P1, $S1
+    set $P2, ""
+    bors $P1, $P2
+    null $S3
+    set $P3, $S3
+    is( $P1, $P3, 'bors null, "" -> null' )
+
+    bors $P2, $P1
+    is( $P2, $P3, 'bors "", null -> null' )
+
+    null $S1
+    set $P1, $S1
+    set $P2, "def"
+    bors $P1, $P2
+    is( $P1, "def", 'bors null, "def" -> "def" / true' )
+
+    null $S2
+    set $P2, $S2
+    bors $P1, $P2
+    is( $P1, "def", 'bors "def", null -> "def" / true' )
+
+    null $S1
+    null $S2
+    set $P1, $S1
+    set $P2, $S2
+    bors $P3, $P1, $P2
+    null $S4
+    is( $P3, $S4, 'bors null, null -> null' )
+
+    set $P1, ""
+    bors $P3, $P1, $P2
+    is( $P3, $S4, 'bors "", null -> null' )
+
+    bors $P3, $P2, $P1
+    is( $P3, $S4, 'bors null, "" -> null' )
+
+    set $P1, "def"
+    bors $P3, $P1, $P2
+    is( $P3, "def", 'bors "def", null -> "def"' )
+
+    bors $P3, $P2, $P1
+    is( $P3, "def", 'bors null, "def" -> "def"' )
+.end
+
+.sub test_bors_2
+    new $P1, ['String']
+    new $P2, ['String']
+    set $P1, "abc"
+    set $P2, "EE"
+
+    bors $P1, $P2
+    is( $P1, "egc", 'bors "abc", "EE" -> "egc"' )
+    is( $P2, "EE",  '$2 is unchanged' )
+.end
+
+.sub test_bors_3
+    new $P1, ['String']
+    new $P2, ['String']
+    new $P0, ['String']
+    set $P1, "abc"
+    set $P2, "EE"
+
+    bors $P0, $P1, $P2
+    is( $P0, "egc", 'bors "abc", "EE" -> "egc"' )
+    is( $P1, "abc", '$2 unchanged' )
+    is( $P2, "EE",  '$3 unchanged' )
+.end
+
+.sub bxors_null_string
+    new $P1, ['String']
+    new $P2, ['String']
+    new $P3, ['String']
+    null $S1
+    null $S2
+    set $P1, $S1
+    set $P2, $S2
+    bxors $P1, $P2
+    null $S3
+    is( $P1, $S3, 'bxors null, null -> null' )
+
+    null $S1
+    set $P1, $S1
+    set $P2, ""
+    bxors $P1, $P2
+    null $S3
+    is( $P1, $S3, 'bxors null, "" -> null' )
+
+    bxors $P2, $P1
+    is( $S2, $S3, 'bxors "", null -> null' )
+
+    null $S1
+    set $P1, $S1
+    set $P2, "abc"
+    bxors $P1, $P2
+    is( $P1, "abc", 'bxors null, "abc" -> "abc"' )
+
+    null $S2
+    set $P2, $S2
+    bxors $P1, $P2
+    is( $P1, "abc", 'bxors "abc", "null, -> "abc"' )
+
+    null $S1
+    null $S2
+    set $P1, $S1
+    set $P2, $S2
+    bxors $P3, $P1, $P2
+    null $S4
+    is( $P3, $S4, 'bxors3 null, null -> null' )
+
+    set $P1, ""
+    bxors $P3, $P1, $P2
+    is( $P3, $S4, 'bxors3 "", null -> null' )
+
+    bxors $P3, $P2, $P1
+    is( $P3, $S4, 'bxors3 null, null -> null' )
+
+    set $P1, "abc"
+    bxors $P3, $P1, $P2
+    is( $P3, "abc", 'bxors3 "abc", null -> "abc"' )
+
+    bxors $P3, $P2, $P1
+    is( $P3, "abc", 'bxors3 null, "abc" -> "abc"' )
+.end
+
+.sub bxors_2
+    new $P1, ['String']
+    new $P2, ['String']
+    new $P3, ['String']
+
+    set $P1, "a2c"
+    set $P2, "Dw"
+    bxors $P1, $P2
+    is( $P1, "%Ec", 'bxors "a2c", "Dw" -> "%Ec"' )
+    is( $P2, "Dw", '... $2 unchanged' )
+
+    set $P1, "abc"
+    set $P2, "   X"
+    bxors $P1, $P2
+    is( $P1, "ABCX", 'bxors "abc", "   X" -> "ABCX"' )
+    is( $P2, "   X", '... $2 unchanged' )
+.end
+
+.sub bxors_3
+    new $P1, ['String']
+    new $P2, ['String']
+    new $P0, ['String']
+
+    set $P1, "a2c"
+    set $P2, "Dw"
+    bxors $P0, $P1, $P2
+    is( $P0, "%Ec", 'bxors "a2c", "Dw" -> "%Ec"' )
+    is( $P1, "a2c", '... $2 unchanged' )
+    is( $P2, "Dw",  '... $3 unchanged' )
+
+    set $P1, "abc"
+    set $P2, "   Y"
+    bxors $P0, $P1, $P2
+    is( $P0, "ABCY", 'bxors "abc", "   Y" -> "ABCY"' )
+    is( $P1, "abc",  '... $2 unchanged' )
+    is( $P2, "   Y", '... $3 unchanged' )
+.end
+
+.sub bnots_null_string
+    new $P1, ['String']
+    new $P2, ['String']
+    new $P3, ['String']
+
+    null $S1
+    null $S2
+    set $P1, $S1
+    set $P2, $S2
+    bnots $P1, $P2
+    null $S3
+    is( $P1, $S3, 'bnots null, null -> null' )
+
+    null $S1
+    set $P1, $S1
+    set $P2, ""
+    bnots $P1, $P2
+    null $S3
+    is( $P1, $S3, 'bnots null, "" -> null' )
+
+    bnots $P2, $P1
+    is( $S2, $S3, 'bnots "", null -> null' )
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/t/dynoplibs/sysinfo.t (from r47544, trunk/t/dynoplibs/sysinfo.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/sysinfo.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/sysinfo.t)
@@ -0,0 +1,191 @@
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+# initial work by Brad Gilbert b2gills <at> gmail <dot> com
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+
+use Test::More;
+use Config;
+
+use Parrot::Test tests => 14;
+use Parrot::Config;
+
+
+=head1 NAME
+
+t/op/sysinfo.t - System Info
+
+=head1 SYNOPSIS
+
+        % prove t/op/sysinfo.t
+
+=head1 DESCRIPTION
+
+Tests for basic system information.
+
+=over 4
+
+=item 1 The size of a platform integer
+
+=item 2 The size of a platform float
+
+=item 3 The size of a platform pointer. (Largest possible data pointer)
+
+=item 4 The OS name
+
+=item 5 The OS version string
+
+=item 6 The OS version number string
+
+=item 7 The CPU architecture
+
+=item 8 The CPU model
+
+=item 9, 10 The min and max INTVAL values
+
+=back
+
+=cut
+
+
+my @setup = (
+    { pconfig_key => 'intvalsize',
+      pasm_key    => 1,
+      pir_key     => 'SYSINFO_PARROT_INTSIZE',
+      desc        => 'integer size',
+      reg_type    => 'I',
+    },
+    { pconfig_key => 'doublesize',
+      pasm_key    => 2,
+      pir_key     => 'SYSINFO_PARROT_FLOATSIZE',
+      desc        => 'float size',
+      reg_type    => 'I',
+    },
+    { pconfig_key => 'ptrsize',
+      pasm_key    => 3,
+      pir_key     => 'SYSINFO_PARROT_POINTERSIZE',
+      desc        => 'pointer size',
+      reg_type    => 'I',
+    },
+    { pconfig_key => 'osname',
+      pasm_key    => 4,
+      pir_key     => 'SYSINFO_PARROT_OS',
+      desc        => 'osname',
+      reg_type    => 'S',
+    },
+    { pconfig_key => 'cpuarch',
+      pasm_key    => 7,
+      pir_key     => 'SYSINFO_CPU_ARCH',
+      desc        => 'CPU Arch Family',
+      reg_type    => 'S',
+    },
+);
+
+foreach ( @setup ) {
+    if ( $_->{reg_type} eq 'I' ) {
+        pasm_output_is( <<"CODE", $PConfig{$_->{pconfig_key}}, "PASM sysinfo  $_->{desc}" );
+    .loadlib 'sys_ops'
+    sysinfo_i_ic I1, $_->{pasm_key}
+    print I1
+end
+CODE
+        pir_output_is( <<"CODE", $PConfig{$_->{pconfig_key}}, "PIR sysinfo  $_->{desc}" );
+.loadlib 'sys_ops'
+.include 'sysinfo.pasm'
+.sub main :main
+    \$I0 = sysinfo .$_->{pir_key}
+    print \$I0
+.end
+CODE
+    }
+    else {
+        pasm_output_is( <<"CODE", $PConfig{$_->{pconfig_key}}, "sysinfo $_->{desc}" );
+    .loadlib 'sys_ops'
+    sysinfo_s_ic S1, $_->{pasm_key}
+    print S1
+end
+CODE
+        pir_output_is( <<"CODE", $PConfig{$_->{pconfig_key}}, "PIR sysinfo  $_->{desc}" );
+.loadlib 'sys_ops'
+.include 'sysinfo.pasm'
+.sub main :main
+    \$S0 = sysinfo .$_->{pir_key}
+    print \$S0
+.end
+CODE
+    }
+}
+
+SKIP:
+{
+    $PConfig{osname} eq 'MSWin32'
+        or skip "Tests only meaningful on Win32", 2;
+    SKIP:
+    {
+        eval { require Win32; } or
+            skip "requires package Win32 for these tests", 2;
+
+        my $osname = Win32::GetOSName();
+        $osname = 'WinXP' if $osname =~ m/^WinXP/;
+        TODO: {
+            local $TODO = "Not Currently Implemented";
+            pasm_output_is( <<'CODE', $osname, "sysinfo OS version string" );
+    .loadlib 'sys_ops'
+    sysinfo_s_ic S1, 5
+    print S1
+end
+CODE
+
+            my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();
+
+            pasm_output_is( <<'CODE', "$major.$minor", "sysinfo OS version number string" );
+    .loadlib 'sys_ops'
+    sysinfo_s_ic S1, 6
+    print S1
+end
+CODE
+        } # END todo block
+    } # END inner SKIP block
+} # END outer SKIP block
+
+SKIP:
+{
+    skip "Requires a lot of work to find out the correct answer", 1;
+
+    pasm_output_is( <<'CODE', $PConfig{archname}, "sysinfo CPU Model" );
+   .loadlib 'sys_ops'
+   sysinfo_s_ic S1, 8
+   print S1
+end
+CODE
+}
+
+# 9, 10
+
+SKIP:
+{
+    skip 'Testing only in some known platforms', 1
+        unless $PConfig{osname} eq 'linux';
+
+    pir_output_like( <<'CODE', '/^-[1-9][0-9]*\n[1-9][0-9]*\n$/', 'INTVAL min and max values');
+.loadlib 'sys_ops'
+.include 'sysinfo.pasm'
+.sub main :main
+    $I0 = sysinfo .SYSINFO_PARROT_INTMIN
+    say $I0
+    $I0 = sysinfo .SYSINFO_PARROT_INTMAX
+    say $I0
+.end
+CODE
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/gsoc_threads/t/dynoplibs/time.t (from r47544, trunk/t/dynoplibs/time.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/time.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/time.t)
@@ -0,0 +1,89 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/dynoplibs/time.t - Time Dynops
+
+=cut
+
+.loadlib 'sys_ops'
+
+.sub main :main
+    .include 'test_more.pir'
+
+    plan(10)
+
+    test_gmtime_s_i()
+    test_time_n_vs_time_i()
+    test_decodetime_p_i()
+    test_localtime_s_i()
+    test_decodelocaltime_p_i()
+.end
+
+.sub test_gmtime_s_i
+    $S0 = gmtime 0
+    $I0 = isnull $S0
+    is($I0, 0, "gmtime string is not null")
+    is($S0, "Thu Jan  1 00:00:00 1970\n", "correct epoch")
+    $I1 = length $S0
+    is($I1, 25, "string is the correct length")
+.end
+
+.sub test_time_n_vs_time_i
+    .local int time_int
+    time_int = time
+
+    .local num time_float
+    time_float = time
+
+    # check if time_float is within [time_int - 5;time_int + 5]
+    .local int time_int_lower
+    time_int_lower = time_int - 5
+    if time_float < time_int_lower goto FAIL
+    .local int time_int_upper
+    time_int_upper = time_int + 5
+    if time_float > time_int_upper goto FAIL
+
+    ok(1, "time_n value corresponds to time_i value")
+    .return()
+
+  FAIL:
+    ok(0, "time_n value does not correspond to time_t value")
+    .return()
+.end
+
+.sub test_decodetime_p_i
+    $P0 = decodetime 0
+    $I0 = $P0
+    is($I0, 9, "decodetime result has 9 values")
+    $S0 = typeof $P0
+    # TODO: Actually, this should return whatever HLL type replaces
+    # FixedIntegerArray. We should test this behavior with a new HLL
+    is($S0, "FixedIntegerArray", "decodetime returns the correct PMC type")
+.end
+
+.sub test_localtime_s_i
+    $S0 = localtime 0
+    $I0 = isnull $S0
+    is($I0, 0, "localtime string is not a null string")
+    $I0 = length $S0
+    is($I0, 25, "localtime string is the correct length")
+.end
+
+.sub test_decodelocaltime_p_i
+    $P0 = decodelocaltime 0
+    $I0 = $P0
+    is($I0, 9, "decodelocaltime result has 9 values")
+    $S0 = typeof $P0
+    # TODO: Actually, this should return whatever HLL type replaces
+    # FixedIntegerArray. We should test this behavior with a new HLL
+    is($S0, "FixedIntegerArray", "decodelocaltime returns the correct PMC type")
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/t/dynoplibs/time_old.t (from r47544, trunk/t/dynoplibs/time_old.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/time_old.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/time_old.t)
@@ -0,0 +1,47 @@
+#!perl
+# Copyright (C) 2001-2009, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Test::More;
+use Parrot::Test tests => 1;
+
+=head1 NAME
+
+t/op/time.t - Time and Sleep
+
+=head1 SYNOPSIS
+
+    % prove t/op/time.t
+
+=head1 DESCRIPTION
+
+Tests the C<time> and C<sleep> operations.
+
+=cut
+
+my $year;
+( undef, undef, undef, undef, undef, $year ) = localtime();
+$year += 1900;
+
+# don't run this test 1 tick before the year changes #'
+
+pasm_output_is( <<'CODE', $year, "decodelocaltime" );
+.loadlib 'sys_ops'
+    time I0
+    decodelocaltime P0, I0
+    .include "tm.pasm"
+    set I0, P0[.TM_YEAR]
+    print I0
+    end
+CODE
+
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/gsoc_threads/t/dynoplibs/trans-infnan.t (from r47544, trunk/t/dynoplibs/trans-infnan.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/trans-infnan.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/trans-infnan.t)
@@ -0,0 +1,332 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/dynoplibs/trans-infnan.t - Test Trans Dynops
+
+=head1 SYNOPSIS
+
+    %prove t/dynoplibs/trans-infnan.t
+
+=head1 DESCRIPTION
+
+Tests for C<Inf> and C<NaN> handling of transcendental ops in the C<trans_ops> dynlib.
+
+=cut
+
+.loadlib 'trans_ops'
+
+.sub main :main
+    .include 'test_more.pir'
+    plan(67)
+
+    test_exp()
+    test_sin()
+    test_sinh()
+    test_asin()
+    test_cos()
+    test_cosh()
+    test_acos()
+    test_tan()
+    test_tanh()
+    test_atan()
+    test_cot()
+    test_coth()
+    test_acot()
+    test_sec()
+    test_sech()
+    test_asec()
+    test_ln()
+    test_log10()
+    test_log2()
+    test_pow()
+.end
+
+.sub test_exp
+    $N0 = 'Inf'
+    $N1 = exp $N0
+    is($N1, 'Inf', 'exp: exp Inf')
+    $N0 = '-Inf'
+    $N1 = exp $N0
+    is($N1, 0, '... exp -Inf')
+    $N0 = 'NaN'
+    $N1 = exp $N0
+    is($N1, 'NaN', '... exp NaN')
+.end
+
+.sub test_sin
+    $N0 = 'Inf'
+    $N1 = sin $N0
+    is($N1, 'NaN', 'sin: sin Inf')
+    $N0 = '-Inf'
+    $N1 = sin $N0
+    is($N1, 'NaN', '... sin -Inf')
+    $N0 = 'NaN'
+    $N1 = sin $N0
+    is($N1, 'NaN', '... sin NaN')
+.end
+
+.sub test_sinh
+    $N0 = 'Inf'
+    $N1 = sinh $N0
+    is($N1, 'Inf', 'sinh: sinh Inf')
+    $N0 = '-Inf'
+    $N1 = sinh $N0
+    is($N1, '-Inf', '... sinh -Inf')
+    $N0 = 'NaN'
+    $N1 = sinh $N0
+    is($N1, 'NaN', '... sinh NaN')
+.end
+
+.sub test_asin
+    $N0 = 'Inf'
+    $N1 = asin $N0
+    is($N1, 'NaN', 'asin: asin Inf')
+    $N0 = '-Inf'
+    $N1 = asin $N0
+    is($N1, 'NaN', '... asin -Inf')
+    $N0 = 'NaN'
+    $N1 = asin $N0
+    is($N1, 'NaN', '... asin NaN')
+    $N0 = '-2'
+    $N1 = asin $N0
+    is($N1, 'NaN', '... asin -2')
+    $N0 = '2'
+    $N1 = asin $N0
+    is($N1, 'NaN', '... asin 2')
+.end
+
+.sub test_acos
+    $N0 = 'Inf'
+    $N1 = acos $N0
+    is($N1, 'NaN', 'acos: acos Inf')
+    $N0 = '-Inf'
+    $N1 = acos $N0
+    is($N1, 'NaN', '... acos -Inf')
+    $N0 = 'NaN'
+    $N1 = acos $N0
+    is($N1, 'NaN', '... acos NaN')
+    $N0 = '-2'
+    $N1 = acos $N0
+    is($N1, 'NaN', '... acos -2')
+    $N0 = '2'
+    $N1 = acos $N0
+    is($N1, 'NaN', '... acos 2')
+.end
+
+.sub test_cosh
+    $N0 = 'Inf'
+    $N1 = cosh $N0
+    is($N1, 'Inf', 'cosh: cosh Inf')
+    $N0 = '-Inf'
+    $N1 = cosh $N0
+    is($N1, 'Inf', '... cosh -Inf')
+    $N0 = 'NaN'
+    $N1 = cosh $N0
+    is($N1, 'NaN', '... cosh NaN')
+.end
+
+.sub test_cos
+    $N0 = 'Inf'
+    $N1 = cos $N0
+    is($N1, 'NaN', 'cos: cos Inf')
+    $N0 = '-Inf'
+    $N1 = cos $N0
+    is($N1, 'NaN', '... cos -Inf')
+    $N0 = 'NaN'
+    $N1 = cos $N0
+    is($N1, 'NaN', '... cos NaN')
+.end
+
+.sub test_tan
+    $N0 = 'Inf'
+    $N1 = tan $N0
+    is($N1, 'NaN', 'tan: tan Inf')
+    $N0 = '-Inf'
+    $N1 = tan $N0
+    is($N1, 'NaN', '... tan -Inf')
+    $N0 = 'NaN'
+    $N1 = tan $N0
+    is($N1, 'NaN', '... tan NaN')
+.end
+
+.sub test_tanh
+    $N0 = 'Inf'
+    $N1 = tanh $N0
+    is($N1, 1, 'tanh: tanh Inf')
+    $N0 = '-Inf'
+    $N1 = tanh $N0
+    is($N1, -1, '... tanh -Inf')
+    $N0 = 'NaN'
+    $N1 = tanh $N0
+    is($N1, 'NaN', '... tanh NaN')
+.end
+
+.sub test_atan
+    $N0 = 'Inf'
+    $N1 = atan $N0
+    $P1 = new 'Float'
+    $P1 = $N1
+    is($P1, 1.5707963, 'atan: atan Inf',1e-6)
+
+    $N0 = '-Inf'
+    $N1 = atan $N0
+    $P1 = new 'Float'
+    $P1 = $N1
+    is($P1, -1.5707963, '... atan -Inf',1e-6)
+
+    $N0 = 'NaN'
+    $N1 = atan $N0
+    is($N1, 'NaN', '... atan NaN')
+.end
+
+.sub test_coth
+    $N0 = 'Inf'
+    #$N1 = coth $N0
+    #is($N1, 1, 'coth: coth Inf')
+    todo(0, 'coth Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '-Inf'
+    #$N1 = coth $N0
+    #is($N1, -1, '... coth -Inf')
+    todo(0, 'coth -Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = 'NaN'
+    #$N1 = coth $N0
+    #is($N1, 'NaN', '... coth NaN')
+    todo(0, 'coth NaN', 'cot/coth/acot not implemented for real numbers')
+.end
+
+.sub test_acot
+    $N0 = 'Inf'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', 'acot: acot Inf')
+    todo(0, 'acot Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '-Inf'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', '... acot -Inf')
+    todo(0, 'acot -Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = 'NaN'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', '... acot NaN')
+    todo(0, 'acot NaN', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '-2'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', '... acot -2')
+    todo(0, 'acot -2', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '2'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', '... acot 2')
+    todo(0, 'acot 2', 'cot/coth/acot not implemented for real numbers')
+.end
+
+.sub test_sec
+    $N0 = 'Inf'
+    $N1 = sec $N0
+    is($N1, 'NaN', 'sec: sec Inf')
+    $N0 = '-Inf'
+    $N1 = sec $N0
+    is($N1, 'NaN', '... sec -Inf')
+    $N0 = 'NaN'
+    $N1 = sec $N0
+    is($N1, 'NaN', '... sec NaN')
+.end
+
+.sub test_sech
+    $N0 = 'Inf'
+    $N1 = sech $N0
+    is($N1, 0, 'sech: sech Inf')
+    $N0 = '-Inf'
+    $N1 = sech $N0
+    is($N1, 0, '... sech -Inf')
+    $N0 = 'NaN'
+    $N1 = sech $N0
+    is($N1, 'NaN', '... sech NaN')
+.end
+
+.sub test_asec
+    $N0 = 'Inf'
+    $N1 = asec $N0
+    $P1 = new 'Float'
+    $P1 = $N1
+    is($P1, 1.5707963, 'asec: asec Inf',1e-6)
+    $N0 = '-Inf'
+    $N1 = asec $N0
+    $P1 = $N1
+    is($P1, 1.5707963, '... asec -Inf',1e-6)
+    $N0 = 'NaN'
+    $N1 = asec $N0
+    is($N1, 'NaN', 'asec NaN')
+.end
+
+.sub test_ln
+    $N0 = 'Inf'
+    $N1 = ln $N0
+    is($N1, 'Inf', 'ln: ln Inf')
+    $N0 = '-Inf'
+    $N1 = ln $N0
+    is($N1, 'NaN', '... ln Inf')
+    $N0 = 'NaN'
+    $N1 = ln $N0
+    is($N1, 'NaN', '... ln NaN')
+.end
+
+.sub test_log10
+    $N0 = 'Inf'
+    $N1 = log10 $N0
+    is($N1, 'Inf', 'log10: log10 Inf')
+    $N0 = '-Inf'
+    $N1 = log10 $N0
+    is($N1, 'NaN', '... log10 -Inf')
+    $N0 = 'NaN'
+    $N1 = log10 $N0
+    is($N1, 'NaN', '... log10 NaN')
+.end
+
+.sub test_log2
+    $N0 = 'Inf'
+    $N1 = log2 $N0
+    is($N1, 'Inf', 'log2: log2 Inf')
+    $N0 = '-Inf'
+    $N1 = log2 $N0
+    is($N1, 'NaN', '... log2 -Inf')
+    $N0 = 'NaN'
+    $N1 = log2 $N0
+    is($N1, 'NaN', '... log2 -Inf')
+.end
+
+
+.sub test_cot
+    $N0 = 'Inf'
+    #$N1 = cot $N0
+    #is($N1, 'NaN', 'cot: cot Inf')
+    todo(0, 'cot Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '-Inf'
+    #$N1 = cot $N0
+    #is($N1, 'NaN', '... cot -Inf')
+    todo(0, 'cot -Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = 'NaN'
+    #$N1 = cot $N0
+    #is($N1, 'NaN', '... cot NaN')
+    todo(0, 'cot NaN', 'cot/coth/acot not implemented for real numbers')
+.end
+
+.sub test_pow
+    $N0 = 'Inf'
+    pow $N1, $N0, 2
+    is($N1, 'Inf', 'pow: Inf ^ 2')
+    pow $N1, 2, $N0
+    is($N1, 'Inf', '...: 2 ^ Inf')
+    $N0 = 'NaN'
+    pow $N1, $N0, 2
+    is($N1, 'NaN', '...: NaN ^ 2')
+    pow $N1, 2, $N0
+    is($N1, 'NaN', '...: 2 ^ NaN')
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/gsoc_threads/t/dynoplibs/trans-old.t (from r47544, trunk/t/dynoplibs/trans-old.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/trans-old.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/trans-old.t)
@@ -0,0 +1,565 @@
+#!perl
+# Copyright (C) 2001-2008, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Test::More;
+use Parrot::Test tests => 13;
+use Math::Trig qw( tan sec atan asin acos asec cosh sinh tanh sech );
+
+=head1 NAME
+
+t/op/trans.t - Transcendental Mathematical Ops
+
+=head1 SYNOPSIS
+
+    % prove t/op/trans.t
+
+=head1 DESCRIPTION
+
+Tests the transcendental mathematical operations.
+
+=cut
+
+# This defines two macros:
+# fp_eq N, N, LABEL
+# fp_ne N, N, LABEL
+# which will conditionally branch
+# to LABEL if abs(n,n) < epsilon
+
+pasm_output_is( <<"CODE", <<OUTPUT, "sinh" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 1.0
+        sinh N2, N1
+        .fp_eq_pasm  (N2, 1.175201, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 1
+        sinh N2, I1
+        .fp_eq_pasm  (N2, 1.175201, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "tanh" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 1.0
+        tanh N2, N1
+        .fp_eq_pasm  (N2, 0.761594, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 1
+        tanh N2, I1
+        .fp_eq_pasm  (N2, 0.761594, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "sech" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 1.0
+        sech N2, N1
+        .fp_eq_pasm  (N2, 0.648054, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 1
+        sech N2, I1
+        .fp_eq_pasm  (N2, 0.648054, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, 'atan2' );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N0, 0.0
+        set I0, 0
+        set N1, 1.0
+        set I1, 1
+        set N2, 1.0
+        set I2, 1
+        set I3, -1
+        set N3, -1.0
+
+        atan N4, N1, N2
+        .fp_eq_pasm  (N4, 0.785398, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        atan N4, N1, I2
+        .fp_eq_pasm  (N4, 0.785398, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        atan N4, I1, N2
+        .fp_eq_pasm  (N4, 0.785398, EQ3)
+        print "not "
+EQ3:    print "ok 3\\n"
+
+        atan N4, I1, I2
+        .fp_eq_pasm  (N4, 0.785398, EQ4)
+        print "not "
+EQ4:    print "ok 4\\n"
+
+        atan N4, N3, 1.0
+        .fp_eq_pasm   (N4, -0.785398, EQ5)
+        print "not "
+EQ5:    print "ok 5\\n"
+
+        atan N4, N1, 0
+        .fp_eq_pasm   (N4, 1.570796, EQ6)
+        print "not "
+EQ6:    print "ok 6\\n"
+
+        atan N4, I3, 0.0
+        .fp_eq_pasm   (N4, -1.570796, EQ7)
+        print "not "
+EQ7:    print "ok 7\\n"
+
+        atan N4, I3, -1
+        .fp_eq_pasm   (N4, -2.356194, EQ8)
+        print "not "
+EQ8:    print "ok 8\\n"
+
+        atan N4, 1.0, N3
+        .fp_eq_pasm   (N4, 2.356194, EQ9)
+        print "not "
+EQ9:    print "ok 9\\n"
+
+        atan N4, 1.0, I0
+        .fp_eq_pasm   (N4, 1.570796, EQ10)
+        print "not "
+EQ10:   print "ok 10\\n"
+
+        atan N4, 1, N1
+        .fp_eq_pasm   (N4, 0.785398, EQ11)
+        print "not "
+EQ11:   print "ok 11\\n"
+
+        atan N4, 1, I1
+        .fp_eq_pasm   (N4, 0.785398, EQ12)
+        print "not "
+EQ12:   print "ok 12\\n"
+
+        atan N4, 0.0, 1.0
+        .fp_eq_pasm   (N4, 0.000000, EQ13)
+        print "not "
+EQ13:   print "ok 13\\n"
+
+        atan N4, -1.0, 0
+        .fp_eq_pasm   (N4, -1.570796, EQ14)
+        print "not "
+EQ14:   print "ok 14\\n"
+
+        atan N4, 1, -1.0
+        .fp_eq_pasm   (N4, 2.356194, EQ15)
+        print "not "
+EQ15:   print "ok 15\\n"
+
+        atan N4, 0, 1
+        .fp_eq_pasm   (N4, 0.000000, EQ16)
+        print "not "
+EQ16:   print "ok 16\\n"
+        end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+ok 10
+ok 11
+ok 12
+ok 13
+ok 14
+ok 15
+ok 16
+OUTPUT
+
+pasm_output_is( <<"CODE", <<'OUTPUT', 'atan, part 2' );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        atan N4, -0.0, -0.0
+        .fp_eq_pasm   (N4, -3.1415926, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+        end
+CODE
+ok 1
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "log2" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 10.0
+        log2 N2, N1
+        .fp_eq_pasm  (N2, 3.321928, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 10
+        log2 N2, I1
+        .fp_eq_pasm  (N2, 3.321928, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "log10" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 15.0
+        log10 N2, N1
+        .fp_eq_pasm  (N2, 1.176091, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 15
+        log10 N2, I1
+        .fp_eq_pasm  (N2, 1.176091, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "ln" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 10.0
+        ln N2, N1
+        .fp_eq_pasm  (N2, 2.302585, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 10
+        ln N2, I1
+        .fp_eq_pasm  (N2, 2.302585, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "exp" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 10.0
+        exp N2, N1
+        .fp_eq_pasm  (N2, 22026.465795, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 10
+        exp N2, I1
+        .fp_eq_pasm (N2, 22026.465795, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "pow" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 3.0
+        set I1, 3
+        set N2, 5.0
+        set I2, 5
+        pow N3, N1, N2
+        .fp_eq_pasm  (N3, 243.0, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        pow N3, N1, I2
+        .fp_eq_pasm  (N3, 243.0, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        pow N3, I1, N2
+        .fp_eq_pasm  (N3, 243.0, EQ3)
+        print "not "
+EQ3:    print "ok 3\\n"
+
+        pow N3, I1, I2
+        .fp_eq_pasm  (N3, 243.0, EQ4)
+        print "not "
+EQ4:    print "ok 4\\n"
+
+        set N0, 0.0
+        set I0, 0
+        set N1, 1.0
+        set I1, 1
+        set N2, 4.0
+        set I2, 4
+        pow N3, N2, 2.5
+        .fp_eq_pasm  (N3, 32.0, EQ5)
+        print "not "
+EQ5:    print "ok 5\\n"
+
+        pow N3, N2, -2
+        .fp_eq_pasm  (N3, 0.0625, EQ6)
+        print "not "
+EQ6:    print "ok 6\\n"
+
+        pow N3, I2, 0.5
+        .fp_eq_pasm  (N3, 2.0, EQ7)
+        print "not "
+EQ7:    print "ok 7\\n"
+
+        pow N3, I2, 0
+        .fp_eq_pasm  (N3, 1.0, EQ8)
+        print "not "
+EQ8:    print "ok 8\\n"
+
+        pow N3, 0.0, N2
+        .fp_eq_pasm  (N3, 0.0, EQ9)
+        print "not "
+EQ9:    print "ok 9\\n"
+
+        pow N3, 2.5, 0.0
+        .fp_eq_pasm  (N3, 1.0, EQ10)
+        print "not "
+EQ10:   print "ok 10\\n"
+
+        pow N3, 2.5, I2
+        .fp_eq_pasm  (N3, 39.0625, EQ11)
+        print "not "
+EQ11:   print "ok 11\\n"
+
+        pow N3, 2.0, -4
+        .fp_eq_pasm  (N3, 0.0625, EQ12)
+        print "not "
+EQ12:   print "ok 12\\n"
+
+        pow N3, 0, N2
+        .fp_eq_pasm  (N3, 0.0, EQ13)
+        print "not "
+EQ13:   print "ok 13\\n"
+
+        pow N3, 4, -0.5
+        .fp_eq_pasm  (N3, 0.5, EQ14)
+        print "not "
+EQ14:   print "ok 14\\n"
+
+        pow N3, 4, I2
+        .fp_eq_pasm  (N3, 256.0, EQ15)
+        print "not "
+EQ15:   print "ok 15\\n"
+
+        pow N3, 4, -1
+        .fp_eq_pasm  (N3, 0.25, EQ16)
+        print "not "
+EQ16:   print "ok 16\\n"
+        end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+ok 10
+ok 11
+ok 12
+ok 13
+ok 14
+ok 15
+ok 16
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "sqrt" );
+       .include 'fp_equality.pasm'
+       set N1, 9.0
+       sqrt N2, N1
+       .fp_eq_pasm  (N2, 3.0, EQ1)
+       print "not "
+EQ1:   print "ok 1\\n"
+
+       set I1, 9
+       sqrt N2, I1
+       .fp_eq_pasm  (N2, 3.0, EQ2)
+       print "not "
+EQ2:   print "ok 2\\n"
+
+       end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<'CODE', <<OUTPUT, "pow_n_n_ic" );
+    .loadlib 'trans_ops'
+    set N0, 2.0
+    pow N1, N0, 0
+    print N1
+    print "\n"
+    pow N1, N0, 1
+    print N1
+    print "\n"
+    pow N1, N0, 2
+    print N1
+    print "\n"
+    pow N1, N0, 3
+    print N1
+    print "\n"
+    pow N1, N0, 4
+    print N1
+    print "\n"
+    pow N1, N0, 5
+    print N1
+    print "\n"
+    pow N1, N0, 6
+    print N1
+    print "\n"
+    pow N1, N0, 7
+    print N1
+    print "\n"
+    pow N1, N0, -1
+    print N1
+    print "\n"
+    pow N1, N0, -2
+    print N1
+    print "\n"
+    pow N1, N0, -3
+    print N1
+    print "\n"
+    pow N1, N0, -4
+    print N1
+    print "\n"
+    pow N1, N0, -5
+    end
+CODE
+1
+2
+4
+8
+16
+32
+64
+128
+0.5
+0.25
+0.125
+0.0625
+OUTPUT
+
+pasm_output_is( <<'CODE', <<OUTPUT, "pow_n_n_i" );
+    .loadlib 'trans_ops'
+    set N0, 2.0
+    set I0, 0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    set I0, -1
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    end
+CODE
+1
+2
+4
+8
+16
+32
+64
+0.5
+0.25
+0.125
+0.0625
+0.03125
+0.015625
+OUTPUT
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/gsoc_threads/t/dynoplibs/trans.t (from r47544, trunk/t/dynoplibs/trans.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/dynoplibs/trans.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/dynoplibs/trans.t)
@@ -0,0 +1,314 @@
+#!./parrot
+# Copyright (C) 2001-2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/op/trans.t - Trancendental Mathematical Ops
+
+=head1 SYNOPSIS
+
+        % prove t/op/trans.t
+
+=head1 DESCRIPTION
+
+Tests various transcendental operations
+
+=cut
+
+.loadlib 'trans_ops'
+
+.sub main :main
+    .include 'test_more.pir'
+    .local num epsilon
+    epsilon = _epsilon()
+
+    plan(69)
+
+    test_sin_n(epsilon)
+    test_sin_i(epsilon)
+    test_cos_n(epsilon)
+    test_cos_i(epsilon)
+    test_tan_n(epsilon)
+    test_tan_i(epsilon)
+    test_sec_n(epsilon)
+    test_sec_i(epsilon)
+    test_atan_n(epsilon)
+    test_atan_i(epsilon)
+    test_asin_n(epsilon)
+    test_asin_i(epsilon)
+    test_acos_n(epsilon)
+    test_acos_i(epsilon)
+    test_asec_n(epsilon)
+    test_asec_i(epsilon)
+    test_cosh_n(epsilon)
+    test_cosh_i(epsilon)
+    integer_overflow_with_pow()
+    e_raised_pi_time_i__plus_1_equal_0()
+.end
+
+.sub _pi
+    .return (3.1415926535897)
+.end
+
+.sub _e
+    .return (2.7182818459045)
+.end
+
+.sub _epsilon
+    .return (0.0001)
+.end
+
+.sub test_sin_n
+    .param num epsilon
+
+    $N0 = sin 0.0
+    is($N0, 0.0, "sin(0.0)", epsilon)
+
+    $N0 = sin 1.0
+    is($N0, 0.841471, "sin(1.0)", epsilon)
+
+    $N1 = _pi()
+    $N0 = sin $N1
+    is($N0, 0.0, "sin(pi)", epsilon)
+
+    $N1 = _pi()
+    $N1 = $N1 / 2
+    $N0 = sin $N1
+    is($N0, 1.0, "sin(pi/2)", epsilon)
+.end
+
+.sub test_sin_i
+    .param num epsilon
+
+    $N0 = sin 0
+    is($N0, 0.0, "sin(0)", epsilon)
+
+    $N0 = sin 1
+    is($N0, 0.841471, "sin(1)", epsilon)
+.end
+
+.sub test_cos_n
+    .param num epsilon
+
+    $N0 = cos 0.0
+    is($N0, 1.0, "cos(0.0)", epsilon)
+
+    $N0 = cos 1.0
+    is($N0, 0.540302, "cos(1.0)", epsilon)
+
+    $N1 = _pi()
+    $N0 = cos $N1
+    is($N0, -1.0, "cos(pi)", epsilon)
+
+    $N1 = _pi()
+    $N1 = $N1 / 2
+    $N0 = cos $N1
+    is($N0, 0.0, "cos(pi/2)", epsilon)
+.end
+
+.sub test_cos_i
+    .param num epsilon
+
+    $N0 = cos 0
+    is($N0, 1.0, "cos(0)", epsilon)
+
+    $N0 = cos 1
+    is($N0, 0.540302, "cos(1)", epsilon)
+.end
+
+.sub test_tan_n
+    .param num epsilon
+
+    $N0 = tan 0.0
+    is($N0, 0.0, "tan(0.0)", epsilon)
+
+    $N0 = tan 1.0
+    is($N0, 1.557408, "tan(1.0)", epsilon)
+.end
+
+.sub test_tan_i
+    .param num epsilon
+
+    $N0 = tan 0
+    is($N0, 0.0, "tan(0)", epsilon)
+
+    $N0 = tan 1
+    is($N0, 1.557408, "tan(1)", epsilon)
+.end
+
+.sub test_sec_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = sec $N1
+    is($N2, 1.850816, "sec(1.0)", epsilon)
+.end
+
+.sub test_sec_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = sec $I1
+    is($N1, 1.850816, "sec(1)", epsilon)
+.end
+
+.sub test_atan_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = atan $N1
+    is($N2, 0.785398, "atan(1.0)", epsilon)
+.end
+
+.sub test_atan_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = atan $I1
+    is($N1, 0.785398, "atan(1)", epsilon)
+.end
+
+.sub test_asin_n
+    .param num epsilon
+    .local num pi2
+    pi2 = _pi()
+    pi2 /= 2
+
+    $N1 = 1.0
+    $N2 = asin $N1
+    is($N2, pi2, "asin(1.0)", epsilon)
+.end
+
+.sub test_asin_i
+    .param num epsilon
+    .local num pi2
+    pi2 = _pi()
+    pi2 /= 2
+
+    $I1 = 1
+    $N1 = asin $I1
+    is($N1, pi2, "asin(1)", epsilon)
+.end
+
+.sub test_acos_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = acos $N1
+    is($N2, 0.0, "acos(1.0)", epsilon)
+.end
+
+.sub test_acos_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = acos $I1
+    is($N1, 0.0, "acos(1)", epsilon)
+.end
+
+.sub test_asec_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = asec $N1
+    is($N2, 0.0, "asec(1.0)", epsilon)
+.end
+
+.sub test_asec_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = asec $I1
+    is($N1, 0.0, "asec(1)", epsilon)
+.end
+
+.sub test_cosh_n
+    .param num epsilon
+    .local num result
+
+    $N1 = 1.0
+    $N2 = cosh $N1
+    is($N2, 1.543081, "cosh(1.0)", epsilon)
+.end
+
+.sub test_cosh_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = cosh $I1
+    is($N1, 1.543081, "cosh(1)", epsilon)
+.end
+
+.sub integer_overflow_with_pow
+    .include "iglobals.pasm"
+
+    # Check that we aren't 32-bit INTVALs without GMP
+    .local pmc interp     # a handle to our interpreter object.
+    interp = getinterp
+    .local pmc config
+    config = interp[.IGLOBALS_CONFIG_HASH]
+    .local int intvalsize
+    intvalsize = config['intvalsize']
+    .local int gmp
+    gmp = config['gmp']
+
+    if intvalsize != 4 goto can_test
+    if gmp goto can_test
+        skip(40,'No integer overflow for 32-bit INTVALs without GMP installed')
+        goto end
+
+  can_test:
+
+    .local pmc i1, i2, r
+    i1 = new 'Integer'
+    i2 = new 'Integer'
+    i1 = 2
+    i2 = 1
+    $I1 = 1
+  next:
+    null r
+    r = pow i1, i2
+    $S0 = r
+
+    $I1 = $I1 * 2
+    is( $S0, $I1, 'integer_overflow_with_pow' )
+
+    inc i2
+# XXX: this must be extended to at least 64 bit range
+# when sure that the result is not floating point.
+# In the meantime, make sure it overflows nicely
+# on 32 bit.
+    unless i2 > 40 goto next
+
+  end:
+.end
+
+.macro sprintf_is(fmt, number, message)
+    c = .number
+    $S0 = sprintf .fmt, c
+    $S1 = .message
+    is( $S0, $S1, $S1 )
+.endm
+
+.sub e_raised_pi_time_i__plus_1_equal_0
+    .local pmc c, c2, c3
+    c  = new ['Complex']
+    c2 = new ['Complex']
+    c3 = new ['Complex']
+    # e^(pi * i) + 1 = 0
+    $N0 = atan 1
+    $N0 *= 4
+    c[0] = 0.0
+    c[1] = $N0
+    c2 = c.'exp'()
+    c2 += 1.0
+    .sprintf_is( "%.3f%+.3fi", c2, "0.000+0.000i" )
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+

Modified: branches/gsoc_threads/t/dynpmc/gziphandle.t
==============================================================================
--- branches/gsoc_threads/t/dynpmc/gziphandle.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/dynpmc/gziphandle.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -16,6 +16,8 @@
 
 =cut
 
+.loadlib 'io_ops'
+
 .sub 'main' :main
     .include 'test_more.pir'
     .include 'iglobals.pasm'

Modified: branches/gsoc_threads/t/dynpmc/os.t
==============================================================================
--- branches/gsoc_threads/t/dynpmc/os.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/dynpmc/os.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -295,6 +295,7 @@
     open my $FILE, ">", "____some_test_file";
     close $FILE;
     pir_output_is( <<'CODE', <<"OUT", 'Test OS.rename' );
+.loadlib 'io_ops'
 .sub main :main
     $P0 = loadlib 'os'
     $P1 = new ['OS']

Modified: branches/gsoc_threads/t/examples/pir.t
==============================================================================
--- branches/gsoc_threads/t/examples/pir.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/examples/pir.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 18;
+use Parrot::Test tests => 17;
 use Parrot::Config;
 
 =head1 NAME
@@ -184,7 +184,8 @@
 );
 
 # expected output of a quine is the quine itself
-$expected{'quine_ord.pir'} = Parrot::Test::slurp_file("examples/pir/quine_ord.pir");
+# TODO currently broken
+# $expected{'quine_ord.pir'} = Parrot::Test::slurp_file("examples/pir/quine_ord.pir");
 
 my %skips;
 

Modified: branches/gsoc_threads/t/harness.pir
==============================================================================
--- branches/gsoc_threads/t/harness.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/harness.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -297,7 +297,7 @@
     $I1 = index $S0, '/branches/'
     unless $I1 >= 0 goto L2
     $I1 += 10
-    $I2 = find_not_cclass .CCLASS_WHITESPACE, $S0, $I1, $I0
+    $I2 = find_cclass .CCLASS_WHITESPACE, $S0, $I1, $I0
     $I3 = $I2 - $I1
     $S1 = substr $S0, $I1, $I3
   L2:
@@ -305,7 +305,7 @@
     $P0.'open'('svn status', 'pr')
     $P1 = new 'ResizableStringArray'
   L3:
-    $S0 = readline $P0
+    $S0 = $P0.'readline'()
     if $S0 == '' goto L4
     $I0 = index $S0, 'M'
     unless $I0 == 0 goto L3
@@ -361,10 +361,11 @@
     set $P0, 1
     $P0[0] = 'parrot_test_run.tar.gz'
     push contents, $P0
-    load_bytecode 'LWP.pir'
+    load_bytecode 'LWP/UserAgent.pir'
     .const string url = 'http://smolder.plusthree.com/app/projects/process_add_report/8'
     .local pmc ua, response
     ua = new ['LWP';'UserAgent']
+    ua.'env_proxy'()
     ua.'show_progress'(1)
     response = ua.'post'(url, contents :flat, 'form-data' :named('Content-Type'), 'close' :named('Connection'))
     $I0 = response.'code'()

Modified: branches/gsoc_threads/t/library/coroutine.t
==============================================================================
--- branches/gsoc_threads/t/library/coroutine.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/library/coroutine.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -28,6 +28,8 @@
 
 .const int N_TESTS = 6
 
+.loadlib 'io_ops'
+
 ## Build an N-ary tree (where N is passed as node_width) of the specified depth,
 ## with the leaves being consecutive integer PMCs from start but less than N.
 ## The tree will be complete iff end-start+1 == node_width^depth.

Copied: branches/gsoc_threads/t/library/distutils.t (from r47544, trunk/t/library/distutils.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/library/distutils.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/library/distutils.t)
@@ -0,0 +1,56 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/library/distutils.t
+
+=head1 DESCRIPTION
+
+Test the distutils library
+
+=head1 SYNOPSIS
+
+    % prove t/library/distutils.t
+
+=cut
+
+.sub 'main' :main
+    load_bytecode 'distutils.pir'
+
+    .const 'Sub' prebuild = 'prebuild'
+    register_step_before('build', prebuild)
+    .const 'Sub' postbuild = 'postbuild'
+    register_step_after('build', postbuild)
+
+    $P0 = split ' ', 'build'
+    $P1 = new 'Hash'
+    .const 'Sub' build_hll = 'build_hll'
+    $P1['hll_hook'] = build_hll
+
+    say "1..4"
+    setup($P0 :flat, $P1 :flat :named)
+    say "ok 4 - end"
+.end
+
+.sub 'prebuild' :anon
+    .param pmc kv :slurpy :named
+    say "ok 1 - prebuild"
+.end
+
+.sub 'build_hll' :anon
+    .param pmc kv :slurpy :named
+    say "ok 2 - build_hll"
+.end
+
+.sub 'postbuild' :anon
+    .param pmc kv :slurpy :named
+    say "ok 3 - postbuild"
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gsoc_threads/t/library/lwp.t
==============================================================================
--- branches/gsoc_threads/t/library/lwp.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/library/lwp.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,16 +19,18 @@
 .sub 'main' :main
     .include 'test_more.pir'
 
-    load_bytecode 'LWP.pir'
+    load_bytecode 'LWP/UserAgent.pir'
     load_bytecode 'osutils.pbc'
 
-    plan(38)
+    plan(48)
     test_new()
     test_unknown_protocol()
     test_bad_request()
     test_file_not_found()
     test_file()
+    test_file_head()
     test_file_post_delete()
+    test_file_proxy()
 .end
 
 .sub 'test_new'
@@ -127,6 +129,28 @@
     ok($I0, "Last-Modified contains GMT")
 .end
 
+.sub 'test_file_head'
+    .local pmc ua, response
+    ua = new ['LWP';'UserAgent']
+    response = ua.'head'('file:t/library/lwp.t')
+    $I0 = isa response, ['HTTP';'Response']
+    ok($I0, "HEAD file:t/library/lwp.t")
+    $I0 = response.'code'()
+    is($I0, 200, "code")
+    $I0 = response.'is_success'()
+    ok($I0, "is success")
+    $S0 = response.'content'()
+    is($S0, '', "no content")
+    $I0 = response.'get_header'('Content-Length')
+    $I0 = $I0 > 2000
+    ok($I0, "Content-Length")
+    $S0 = response.'get_header'('Last-Modified')
+    diag($S0)
+    $I0 = index $S0, 'GMT'
+    $I0 = $I0 > 0
+    ok($I0, "Last-Modified contains GMT")
+.end
+
 .sub 'test_file_post_delete'
     .const string data = "the file contains some text"
     .const string filename = 't/library/file.txt'
@@ -138,7 +162,7 @@
 
     response = ua.'put'(url, data)
     $I0 = isa response, ['HTTP';'Response']
-    ok($I0, "POST file:t/library/file.txt")
+    ok($I0, "PUT file:t/library/file.txt")
     $I0 = response.'code'()
     is($I0, 200, "code")
     $I0 = response.'is_success'()
@@ -165,6 +189,21 @@
     ok($I0, "is error")
 .end
 
+.sub 'test_file_proxy'
+    .local pmc ua, response
+    ua = new ['LWP';'UserAgent']
+    ua.'proxy'('file', 'file://proxy.net')
+    response = ua.'get'('file:t/library/lwp.t')
+    $I0 = isa response, ['HTTP';'Response']
+    ok($I0, "GET file:t/library/lwp.t via a proxy")
+    $I0 = response.'code'()
+    is($I0, 400, "code")
+    $S0 = response.'message'()
+    is($S0, "You can not proxy through the filesystem", "message")
+    $I0 = response.'is_error'()
+    ok($I0, "is error")
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/gsoc_threads/t/library/osutils.t
==============================================================================
--- branches/gsoc_threads/t/library/osutils.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/library/osutils.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -21,11 +21,12 @@
 
     load_bytecode 'osutils.pir'
 
-    plan(11)
+    plan(17)
     test_basename()
     test_dirname()
     test_catfile()
     test_splitpath()
+    test_newer()
 .end
 
 .sub 'test_basename'
@@ -62,6 +63,24 @@
     is(file, 'ghi.txt', "splitpath file")
 .end
 
+.sub 'test_newer'
+    $I0 = newer('runtime/parrot/library/osutils.pbc', 'runtime/parrot/library/osutils.pir')
+    ok($I0, "newer('osutils.pbc', 'osutils.pir')")
+    $I0 = newer('runtime/parrot/library/osutils.no_file', 'runtime/parrot/library/osutils.pir')
+    nok($I0, "newer('osutils.no_file', 'osutils.pir')")
+    $I0 = newer('runtime/parrot/library/osutils.pir', 'runtime/parrot/library/osutils.pir')
+    nok($I0, "newer('osutils.pir', 'osutils.pir')")
+
+    $P0 = split ' ', 'runtime/parrot/library/osutils.pir runtime/parrot/include/stat.pasm'
+    $I0 = newer('runtime/parrot/library/osutils.pbc', $P0)
+    ok($I0, "newer('osutils.pbc', ['osutils.pir', 'stat.pasm'])")
+    $I0 = newer('runtime/parrot/library/osutils.no_file', $P0)
+    nok($I0, "newer('osutils.no_file', ['osutils.pir', 'stat.pasm'])")
+    $I0 = newer('runtime/parrot/library/osutils.pir', $P0)
+    nok($I0, "newer('osutils.pir', ['osutils.pir', 'stat.pasm'])")
+.end
+
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/gsoc_threads/t/library/uri.t
==============================================================================
--- branches/gsoc_threads/t/library/uri.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/library/uri.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -21,7 +21,7 @@
 
     load_bytecode 'URI.pir'
 
-    plan(53)
+    plan(60)
     test_new()
     test_uri()
     test_file()
@@ -158,6 +158,21 @@
     is($S0, '127.0.0.1', 'host')
     $S0 = $P0.'port'()
     is($S0, '8080', 'port')
+
+    $P0 = factory('http://user:passwd@proxy.net:8000/path')
+    ok($P0, "http://user:passwd@proxy.net:8000/path")
+    $I0 = isa $P0, ['URI';'http']
+    ok($I0, "isa ['URI';'http']")
+    $S0 = $P0.'scheme'()
+    is($S0, 'http', "scheme")
+    $S0 = $P0.'authority'()
+    is($S0, 'user:passwd at proxy.net:8000', 'authority')
+    $S0 = $P0.'userinfo'()
+    is($S0, 'user:passwd', 'userinfo')
+    $S0 = $P0.'host'()
+    is($S0, 'proxy.net', 'host')
+    $S0 = $P0.'port'()
+    is($S0, '8000', 'port')
 .end
 
 .sub 'test_https'

Modified: branches/gsoc_threads/t/native_pbc/annotations.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Copied: branches/gsoc_threads/t/native_pbc/integer.pbc (from r47544, trunk/t/native_pbc/integer.pbc)
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/gsoc_threads/t/native_pbc/integer_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/gsoc_threads/t/native_pbc/integer_2.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Copied: branches/gsoc_threads/t/native_pbc/number.pbc (from r47544, trunk/t/native_pbc/number.pbc)
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/gsoc_threads/t/native_pbc/number_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/gsoc_threads/t/native_pbc/number_2.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Copied: branches/gsoc_threads/t/native_pbc/string.pbc (from r47544, trunk/t/native_pbc/string.pbc)
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/gsoc_threads/t/native_pbc/string_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/gsoc_threads/t/native_pbc/string_2.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/gsoc_threads/t/native_pbc/testdata/string.pasm
==============================================================================
--- branches/gsoc_threads/t/native_pbc/testdata/string.pasm	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/native_pbc/testdata/string.pasm	Thu Jun 10 21:09:12 2010	(r47545)
@@ -3,7 +3,7 @@
 
     set S1, "abc"
     set S2, "EE"
-    bors S0, S1, S2
+    concat S0, S1, S2
     print S0
     print "\n"
     print S1

Modified: branches/gsoc_threads/t/oo/methods.t
==============================================================================
--- branches/gsoc_threads/t/oo/methods.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/oo/methods.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -16,6 +16,8 @@
 
 =cut
 
+.const string library_file = "method_library.pir"
+
 .sub main :main
     .include 'test_more.pir'
 
@@ -29,16 +31,15 @@
 
     overridden_core_pmc()
 
-    delete_library()
+    try_delete_library()
 
 .end
 
 .sub create_library
     .local pmc file
-    .local string filename
 
-    filename = "method_library.pir"
-    file = open filename, 'w'
+    file = new ['FileHandle']
+    file.'open'(library_file, 'w')
 
     $S0 = <<'END'
     .namespace['Foo']
@@ -48,16 +49,22 @@
 END
 
     print file, $S0
-    close file
+    file.'close'()
 
 .end
 
-.sub delete_library
+.sub try_delete_library
     .local pmc os
     $P0 = loadlib 'os'
+    unless $P0 goto no_os
     os = new 'OS'
-    $S0 = "method_library.pir"
-    os.'rm'($S0)
+    os.'rm'(library_file)
+    .return ()
+
+  no_os:
+    $S1 = concat "WARNING: could not delete test file `", library_file
+    $S1 = concat $S1, "' because the OS PMC is unavailable"
+    diag($S1)
 .end
 
 .sub loading_methods_from_file
@@ -66,7 +73,7 @@
     $I0 = $P1.'foo_method'()
     ok ($I0, 'calling foo_method')
 
-    load_bytecode 'method_library.pir'
+    load_bytecode library_file
     $P1 = new 'Foo'
     $I0 = $P1.'bar_method'()
     ok ($I0, 'calling bar_method')

Deleted: branches/gsoc_threads/t/op/01-parse_ops.t
==============================================================================
--- branches/gsoc_threads/t/op/01-parse_ops.t	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,105 +0,0 @@
-#! perl
-# Copyright (C) 2006-2008, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Parrot::Test;
-use Parrot::Op;
-use Parrot::OpLib::core;
-
-=head1 NAME
-
-t/op/01-parse_ops.t - Parse core opcodes
-
-=head1 SYNOPSIS
-
-    % prove t/op/01-parse_ops.t
-
-=head1 DESCRIPTION
-
-Tests that all parrot opcodes are parsed properly.
-
-=cut
-
-my $object_map = {
-    i   => q<I0>,
-    ic  => q<42>,
-    k   => q<P0>,
-    kc  => q<[ 'foo' ; 'bar' ]>,
-    kic => q<[ 1 ]>,
-    ks  => q<P0>,
-    ksc => q<[ 'foo' ; 'bar' ]>,
-    n   => q<N0>,
-    nc  => q<13.013>,
-    p   => q<P0>,
-    pc  => undef,                  ## TT #1158 figure out how to test this type
-    s   => q<S0>,
-    sc  => q<'foo'>,
-};
-
-my %parse_errors = map { $_ => 1 } qw(
-    defined
-    delete
-    eq
-    exists
-    le
-    lt
-    ne
-    set
-    slice
-    yield
-);
-
-my %cmds;
-
-## extract the register types from each opcode
-for my $op (@$Parrot::OpLib::core::ops) {
-    my @regtypes = $op->arg_types;
-
-    ## for now, avoid opcodes with regtypes i do not know how to represent
-    next unless @regtypes == grep { defined $$object_map{$_} } @regtypes;
-
-    ## extract the basename of the opcode
-    my $basename = $op->name;
-
-    ## create the argument list
-    my $args = join ', ' => map $$object_map{$_}, @regtypes;
-
-    ## store the test commands
-    $cmds{$basename}{ $basename . ' ' . $args }++;
-}
-
-$ENV{TEST_PROG_ARGS} ||= '';
-
-plan skip_all => 'IMCC cannot do parse-only with JIT enabled'
-    if $ENV{TEST_PROG_ARGS} =~ /--runcore=jit/;
-
-plan skip_all => 'IMCC cannot do parse-only with switched core'
-    if $ENV{TEST_PROG_ARGS} =~ /--runcore=switch/;
-
-plan tests => scalar keys %cmds;
-
-for my $cmd ( sort keys %cmds ) {
-    my @args = (
-        ## retrieve the test commands, and trick IMCC to parse only
-        join( $/ => 'end', sort( keys %{ $cmds{$cmd} } ), '' ),
-        qr/^(?!error:imcc:syntax error,)/,
-        "parsing: $cmd"
-    );
-
-    if ( $parse_errors{$cmd} ) {
-        pasm_error_output_like(@args);
-    }
-    else {
-        pasm_output_like(@args);
-    }
-}
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/t/op/annotate-old.t
==============================================================================
--- branches/gsoc_threads/t/op/annotate-old.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/annotate-old.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2009, Parrot Foundation.
+# Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -23,10 +23,6 @@
 
 =cut
 
-TODO: {
-    local $TODO = q|fails in fast runcore - TT #1135|
-        if ($ENV{TEST_PROG_ARGS} || '') =~ /--runcore=fast/;
-
 pir_error_output_like( <<CODE, <<OUTPUT, 'unhandled exception from loaded function');
 .sub main :main
     # Not using test more, just a quick way to pick a function
@@ -40,7 +36,6 @@
 /\(foobar:42\)/
 OUTPUT
 
-}
 
 # Local Variables:
 #   mode: cperl

Modified: branches/gsoc_threads/t/op/arithmetics.t
==============================================================================
--- branches/gsoc_threads/t/op/arithmetics.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/arithmetics.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -21,7 +21,7 @@
     .include 'test_more.pir'
     .include 'iglobals.pasm'
 
-    plan(121)
+    plan(80)
 
     take_the_negative_of_a_native_integer()
     take_the_absolute_of_a_native_integer()
@@ -42,8 +42,6 @@
     subtract_native_number_from_native_number()
     multiply_native_number_with_native_number()
     divide_native_number_by_native_number()
-    integer_overflow_with_pow()
-    bnot_p_p_creates_destination()
     # END_OF_TESTS
 
 .end
@@ -470,56 +468,6 @@
 
 .end
 
-.sub integer_overflow_with_pow
-    .include "iglobals.pasm"
-
-    # Check that we aren't 32-bit INTVALs without GMP
-    .local pmc interp     # a handle to our interpreter object.
-    interp = getinterp
-    .local pmc config
-    config = interp[.IGLOBALS_CONFIG_HASH]
-    .local int intvalsize
-    intvalsize = config['intvalsize']
-    .local int gmp
-    gmp = config['gmp']
-
-    if intvalsize != 4 goto can_test
-    if gmp goto can_test
-        skip(40,'No integer overflow for 32-bit INTVALs without GMP installed')
-        goto end
-
-  can_test:
-
-    .local pmc i1, i2, r
-    i1 = new 'Integer'
-    i2 = new 'Integer'
-    i1 = 2
-    i2 = 1
-    $I1 = 1
-  next:
-    null r
-    r = pow i1, i2
-    $S0 = r
-
-    $I1 = $I1 * 2
-    is( $S0, $I1, 'integer_overflow_with_pow' )
-
-    inc i2
-# XXX: this must be extended to at least 64 bit range
-# when sure that the result is not floating point.
-# In the meantime, make sure it overflows nicely
-# on 32 bit.
-    unless i2 > 40 goto next
-
-  end:
-.end
-
-.sub 'bnot_p_p_creates_destination'
-    $P0 = box 3
-    $P1 = bnot $P0
-    is( $P1, -4, 'bnot_p_p_creates_destination')
-.end
-
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/gsoc_threads/t/op/arithmetics_pmc.t
==============================================================================
--- branches/gsoc_threads/t/op/arithmetics_pmc.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/arithmetics_pmc.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -20,7 +20,7 @@
     .include 'test_more.pir'
     .include "iglobals.pasm"
 
-    plan(44)
+    plan(40)
 
     # Don't check BigInt or BigNum without gmp
     .local pmc interp     # a handle to our interpreter object.
@@ -34,7 +34,7 @@
     run_tests_for('Float')
 
     if gmp goto do_big_ones
-        skip( 22, "will not test BigInt or BigNum without gmp" )
+        skip( 20, "will not test BigInt or BigNum without gmp" )
         goto end
 
   do_big_ones:
@@ -55,7 +55,6 @@
     test_logical_xor(type)
     test_logical_or(type)
     test_modulus(type)
-    test_pow(type)
     test_subtract(type)
 .end
 
@@ -329,36 +328,6 @@
   end:
 .end
 
-.sub test_pow
-    .param pmc type
-
-    $P0 = new type
-    $P0 = 40
-    $P1 = new type
-    $P1 = 2
-    $P2 = new type
-    $P2 = 115200
-
-    $P99 = $P2
-
-    $S0 = "original dest is untouched in pow for "
-    $S1 = type
-    concat $S0, $S1
-
-    # ignore exceptions
-    push_eh done
-    pow $P2, $P0, $P1
-
-    $I0 = cmp $P99, 115200
-
-    is( $I0, 0, $S0 )
-    goto end
-
-  done:
-    ok(1, 'ignoring exceptions')
-  end:
-.end
-
 .sub test_subtract
     .param pmc type
 

Modified: branches/gsoc_threads/t/op/calling.t
==============================================================================
--- branches/gsoc_threads/t/op/calling.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/calling.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1852,9 +1852,9 @@
 pasm_output_is( <<'CODE', <<'OUTPUT', "named - 5 slurpy array -> named" );
 .pcc_sub main:
     set_args  "0, 0, 0, 0x200, 0, 0x200, 0", 10, 20, 30, 'a', 40, 'b', 50
-    get_results ""
     find_name P1, "foo"
     invokecc P1
+    get_results ""
     print "ok\n"
     end
 .pcc_sub foo:

Deleted: branches/gsoc_threads/t/op/debuginfo.t
==============================================================================
--- branches/gsoc_threads/t/op/debuginfo.t	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,201 +0,0 @@
-#!perl
-# Copyright (C) 2001-2007, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Test::More;
-use Parrot::Test tests => 8;
-
-=head1 NAME
-
-t/op/debuginfo.t - Debugging Info
-
-=head1 SYNOPSIS
-
-        % prove t/op/debuginfo.t
-
-=head1 DESCRIPTION
-
-Tests the various set and get operations for line, package and file info,
-as well as backtrace tests.
-
-=cut
-
-$ENV{TEST_PROG_ARGS} ||= '';
-my $nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
-    ? "\\(unknown file\\)\n-1" : "debuginfo_\\d+\\.pasm\n\\d";
-
-#SKIP: {
-#skip "disabled on fast-core",1 if $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/;
-
-pasm_output_like( <<'CODE', <<"OUTPUT", "getline, getfile" );
-.pcc_sub main:
-    getfile S0
-    getline I0
-    say S0
-    say I0
-    end
-CODE
-/$nolineno/
-OUTPUT
-
-pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - Null PMC access" );
-.sub main
-    print "ok 1\n"
-    a()
-    print "not ok 10\n"
-.end
-.sub a
-    print "ok 2\n"
-    b()
-    print "not ok 9\n"
-.end
-.sub b
-    print "ok 3\n"
-    c()
-    print "not ok 8\n"
-.end
-.sub c
-    print "ok 4\n"
-    d()
-    print "not ok 7\n"
-.end
-.sub d
-    print "ok 5\n"
-    $P0 = null
-    $P0()
-    print "not ok 6\n"
-.end
-CODE
-/^ok 1
-ok 2
-ok 3
-ok 4
-ok 5
-Null PMC access in invoke\(\)
-current instr\.: 'd' pc (\d+|-1) \(.*?:(\d+|-1)\)
-called from Sub 'c' pc (\d+|-1) \(.*?:(\d+|-1)\)
-called from Sub 'b' pc (\d+|-1) \(.*?:(\d+|-1)\)
-called from Sub 'a' pc (\d+|-1) \(.*?:(\d+|-1)\)
-called from Sub 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
-OUTPUT
-
-pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - method not found" );
-.namespace ["Test1"]
-.sub main
-    print "ok 1\n"
-    foo()
-    print "not ok 5\n"
-.end
-.sub foo
-    print "ok 2\n"
-    $P0 = new 'Integer'
-    print "ok 3\n"
-    $P0."nosuchmethod"()
-    print "not ok 4\n"
-.end
-CODE
-/^ok 1
-ok 2
-ok 3
-Method 'nosuchmethod' not found for invocant of class 'Integer'
-current instr.: 'parrot;Test1;foo' pc (\d+|-1) \(.*?:(\d+|-1)\)
-called from Sub 'parrot;Test1;main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
-OUTPUT
-
-pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - fetch of unknown lexical" );
-.namespace ["Test2"]
-.sub main
-    print "ok 1\n"
-    foo()
-    print "not ok 3\n"
-.end
-.sub foo :lex
-    print "ok 2\n"
-    find_lex $P0, "nosuchlex"
-    print "not ok 3\n"
-.end
-CODE
-/^ok 1
-ok 2
-Lexical 'nosuchlex' not found
-current instr.: 'parrot;Test2;foo' pc (\d+|-1) \(.*?:(\d+|-1)\)
-called from Sub 'parrot;Test2;main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
-OUTPUT
-
-pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - recursion 1" );
-.sub main
-    main()
-.end
-CODE
-/^maximum recursion depth exceeded
-current instr\.: 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)
-called from Sub 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)
-\.\.\. call repeated \d+ times/
-OUTPUT
-
-pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - recursion 2" );
-.sub main
-    rec(91)
-.end
-.sub rec
-    .param int i
-    if i == 0 goto END
-    dec i
-    rec(i)
-    .return()
-END:
-    $P0 = null
-    $P0()
-.end
-CODE
-/^Null PMC access in invoke\(\)
-current instr\.: 'rec' pc (\d+|-1) \(.*?:(\d+|-1)\)
-called from Sub 'rec' pc (\d+|-1) \(.*?:(\d+|-1)\)
-\.\.\. call repeated 90 times
-called from Sub 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
-OUTPUT
-
-$nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
-    ? '\(\(unknown file\):-1\)' : '\(xyz.pir:126\)';
-
-pir_error_output_like( <<'CODE', <<"OUTPUT", "setfile and setline" );
-.sub main :main
-    setfile "xyz.pir"
-    setline 123
-    $S0 = 'hello'
-    $I0 = 456
-    'no_such_function'($S0, $I0)
-.end
-CODE
-/$nolineno/
-OUTPUT
-
-$nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
-    ? '\(\(unknown file\):-1\)' : '\(foo.p6:128\)';
-pir_error_output_like( <<'CODE', <<"OUTPUT", "setfile and setline" );
-.sub main :main
-    setfile "foo.p6"
-    setline 123
-    $P0 = new 'Integer'
-    assign $P0, 9876
-    set_global '$a', $P0
-
-    setline 124
-    $P0 = get_global '$a'
-    $P1 = clone $P0
-    add $P1, 1
-    'nsf'($P1)
-.end
-CODE
-/$nolineno/
-OUTPUT
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/t/op/exit.t
==============================================================================
--- branches/gsoc_threads/t/op/exit.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/exit.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 7;
+use Parrot::Test tests => 8;
 
 =head1 NAME
 
@@ -65,6 +65,20 @@
     pbc_exit_code_is($pbc, 0, 'pbc exits with 0 by default');
 }
 
+pir_exit_code_is( <<'CODE', 2, "pir exit code isn't exception type" );
+.sub main
+    $P0 = new ['ExceptionHandler']
+    set_addr $P0, catcher
+    $P0.'handle_types'(2)
+    push_eh $P0
+    exit 2
+  catcher:
+    # we shouldn't arrive here
+    pop_eh
+    exit 10
+.end
+CODE
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/gsoc_threads/t/op/inf_nan.t
==============================================================================
--- branches/gsoc_threads/t/op/inf_nan.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/inf_nan.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -18,31 +18,11 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(105)
+    plan(37)
 
     test_basic_arith()
-    test_exp()
     test_sqrt()
-    test_sin()
-    test_sinh()
-    test_asin()
-    test_cos()
-    test_cosh()
-    test_acos()
-    test_tan()
-    test_tanh()
-    test_atan()
-    test_cot()
-    test_coth()
-    test_acot()
-    test_sec()
-    test_sech()
-    test_asec()
-    test_ln()
-    test_log10()
-    test_log2()
     test_neg()
-    test_pow()
     test_mix_nan_inf()
     test_rounding_n()
     test_rounding_i()
@@ -50,7 +30,6 @@
     test_fdiv_integer_pmc_nan()
     test_fdiv_float_pmc_nan()
     test_fdiv_float_integer_pmc_nan()
-    test_cmod_float_integer_pmc_nan()
     test_mod_float_integer_pmc_nan()
 
 .end
@@ -82,19 +61,6 @@
     is($N3, 'Inf', '... abs -Inf')
 .end
 
-
-.sub test_exp
-    $N0 = 'Inf'
-    $N1 = exp $N0
-    is($N1, 'Inf', 'exp: exp Inf')
-    $N0 = '-Inf'
-    $N1 = exp $N0
-    is($N1, 0, '... exp -Inf')
-    $N0 = 'NaN'
-    $N1 = exp $N0
-    is($N1, 'NaN', '... exp NaN')
-.end
-
 .sub test_sqrt
     $N0 = 'Inf'
     $N1 =  $N0
@@ -110,260 +76,6 @@
     is($N1, 'NaN', '... sqrt -1')
 .end
 
-.sub test_sin
-    $N0 = 'Inf'
-    $N1 = sin $N0
-    is($N1, 'NaN', 'sin: sin Inf')
-    $N0 = '-Inf'
-    $N1 = sin $N0
-    is($N1, 'NaN', '... sin -Inf')
-    $N0 = 'NaN'
-    $N1 = sin $N0
-    is($N1, 'NaN', '... sin NaN')
-.end
-
-.sub test_sinh
-    $N0 = 'Inf'
-    $N1 = sinh $N0
-    is($N1, 'Inf', 'sinh: sinh Inf')
-    $N0 = '-Inf'
-    $N1 = sinh $N0
-    is($N1, '-Inf', '... sinh -Inf')
-    $N0 = 'NaN'
-    $N1 = sinh $N0
-    is($N1, 'NaN', '... sinh NaN')
-.end
-
-.sub test_asin
-    $N0 = 'Inf'
-    $N1 = asin $N0
-    is($N1, 'NaN', 'asin: asin Inf')
-    $N0 = '-Inf'
-    $N1 = asin $N0
-    is($N1, 'NaN', '... asin -Inf')
-    $N0 = 'NaN'
-    $N1 = asin $N0
-    is($N1, 'NaN', '... asin NaN')
-    $N0 = '-2'
-    $N1 = asin $N0
-    is($N1, 'NaN', '... asin -2')
-    $N0 = '2'
-    $N1 = asin $N0
-    is($N1, 'NaN', '... asin 2')
-.end
-
-.sub test_cos
-    $N0 = 'Inf'
-    $N1 = cos $N0
-    is($N1, 'NaN', 'cos: cos Inf')
-    $N0 = '-Inf'
-    $N1 = cos $N0
-    is($N1, 'NaN', '... cos -Inf')
-    $N0 = 'NaN'
-    $N1 = cos $N0
-    is($N1, 'NaN', '... cos NaN')
-.end
-
-.sub test_cosh
-    $N0 = 'Inf'
-    $N1 = cosh $N0
-    is($N1, 'Inf', 'cosh: cosh Inf')
-    $N0 = '-Inf'
-    $N1 = cosh $N0
-    is($N1, 'Inf', '... cosh -Inf')
-    $N0 = 'NaN'
-    $N1 = cosh $N0
-    is($N1, 'NaN', '... cosh NaN')
-.end
-
-.sub test_acos
-    $N0 = 'Inf'
-    $N1 = acos $N0
-    is($N1, 'NaN', 'acos: acos Inf')
-    $N0 = '-Inf'
-    $N1 = acos $N0
-    is($N1, 'NaN', '... acos -Inf')
-    $N0 = 'NaN'
-    $N1 = acos $N0
-    is($N1, 'NaN', '... acos NaN')
-    $N0 = '-2'
-    $N1 = acos $N0
-    is($N1, 'NaN', '... acos -2')
-    $N0 = '2'
-    $N1 = acos $N0
-    is($N1, 'NaN', '... acos 2')
-.end
-
-.sub test_tan
-    $N0 = 'Inf'
-    $N1 = tan $N0
-    is($N1, 'NaN', 'tan: tan Inf')
-    $N0 = '-Inf'
-    $N1 = tan $N0
-    is($N1, 'NaN', '... tan -Inf')
-    $N0 = 'NaN'
-    $N1 = tan $N0
-    is($N1, 'NaN', '... tan NaN')
-.end
-
-.sub test_tanh
-    $N0 = 'Inf'
-    $N1 = tanh $N0
-    is($N1, 1, 'tanh: tanh Inf')
-    $N0 = '-Inf'
-    $N1 = tanh $N0
-    is($N1, -1, '... tanh -Inf')
-    $N0 = 'NaN'
-    $N1 = tanh $N0
-    is($N1, 'NaN', '... tanh NaN')
-.end
-
-.sub test_atan
-    $N0 = 'Inf'
-    $N1 = atan $N0
-    $P1 = new 'Float'
-    $P1 = $N1
-    is($P1, 1.5707963, 'atan: atan Inf',1e-6)
-
-    $N0 = '-Inf'
-    $N1 = atan $N0
-    $P1 = new 'Float'
-    $P1 = $N1
-    is($P1, -1.5707963, '... atan -Inf',1e-6)
-
-    $N0 = 'NaN'
-    $N1 = atan $N0
-    is($N1, 'NaN', '... atan NaN')
-.end
-
-.sub test_cot
-    $N0 = 'Inf'
-    #$N1 = cot $N0
-    #is($N1, 'NaN', 'cot: cot Inf')
-    todo(0, 'cot Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '-Inf'
-    #$N1 = cot $N0
-    #is($N1, 'NaN', '... cot -Inf')
-    todo(0, 'cot -Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = 'NaN'
-    #$N1 = cot $N0
-    #is($N1, 'NaN', '... cot NaN')
-    todo(0, 'cot NaN', 'cot/coth/acot not implemented for real numbers')
-.end
-
-.sub test_coth
-    $N0 = 'Inf'
-    #$N1 = coth $N0
-    #is($N1, 1, 'coth: coth Inf')
-    todo(0, 'coth Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '-Inf'
-    #$N1 = coth $N0
-    #is($N1, -1, '... coth -Inf')
-    todo(0, 'coth -Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = 'NaN'
-    #$N1 = coth $N0
-    #is($N1, 'NaN', '... coth NaN')
-    todo(0, 'coth NaN', 'cot/coth/acot not implemented for real numbers')
-.end
-
-.sub test_acot
-    $N0 = 'Inf'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', 'acot: acot Inf')
-    todo(0, 'acot Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '-Inf'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', '... acot -Inf')
-    todo(0, 'acot -Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = 'NaN'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', '... acot NaN')
-    todo(0, 'acot NaN', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '-2'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', '... acot -2')
-    todo(0, 'acot -2', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '2'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', '... acot 2')
-    todo(0, 'acot 2', 'cot/coth/acot not implemented for real numbers')
-.end
-
-.sub test_sec
-    $N0 = 'Inf'
-    $N1 = sec $N0
-    is($N1, 'NaN', 'sec: sec Inf')
-    $N0 = '-Inf'
-    $N1 = sec $N0
-    is($N1, 'NaN', '... sec -Inf')
-    $N0 = 'NaN'
-    $N1 = sec $N0
-    is($N1, 'NaN', '... sec NaN')
-.end
-
-.sub test_sech
-    $N0 = 'Inf'
-    $N1 = sech $N0
-    is($N1, 0, 'sech: sech Inf')
-    $N0 = '-Inf'
-    $N1 = sech $N0
-    is($N1, 0, '... sech -Inf')
-    $N0 = 'NaN'
-    $N1 = sech $N0
-    is($N1, 'NaN', '... sech NaN')
-.end
-
-.sub test_asec
-    $N0 = 'Inf'
-    $N1 = asec $N0
-    $P1 = new 'Float'
-    $P1 = $N1
-    is($P1, 1.5707963, 'asec: asec Inf',1e-6)
-    $N0 = '-Inf'
-    $N1 = asec $N0
-    $P1 = $N1
-    is($P1, 1.5707963, '... asec -Inf',1e-6)
-    $N0 = 'NaN'
-    $N1 = asec $N0
-    is($N1, 'NaN', 'asec NaN')
-.end
-
-.sub test_ln
-    $N0 = 'Inf'
-    $N1 = ln $N0
-    is($N1, 'Inf', 'ln: ln Inf')
-    $N0 = '-Inf'
-    $N1 = ln $N0
-    is($N1, 'NaN', '... ln Inf')
-    $N0 = 'NaN'
-    $N1 = ln $N0
-    is($N1, 'NaN', '... ln NaN')
-.end
-
-.sub test_log10
-    $N0 = 'Inf'
-    $N1 = log10 $N0
-    is($N1, 'Inf', 'log10: log10 Inf')
-    $N0 = '-Inf'
-    $N1 = log10 $N0
-    is($N1, 'NaN', '... log10 -Inf')
-    $N0 = 'NaN'
-    $N1 = log10 $N0
-    is($N1, 'NaN', '... log10 NaN')
-.end
-
-.sub test_log2
-    $N0 = 'Inf'
-    $N1 = log2 $N0
-    is($N1, 'Inf', 'log2: log2 Inf')
-    $N0 = '-Inf'
-    $N1 = log2 $N0
-    is($N1, 'NaN', '... log2 -Inf')
-    $N0 = 'NaN'
-    $N1 = log2 $N0
-    is($N1, 'NaN', '... log2 -Inf')
-.end
-
 .sub test_neg
     $N0 = 'Inf'
     $N1 = neg $N0
@@ -376,19 +88,6 @@
     is($N1, 'NaN', '... neg NaN')
 .end
 
-.sub test_pow
-    $N0 = 'Inf'
-    pow $N1, $N0, 2
-    is($N1, 'Inf', 'pow: Inf ^ 2')
-    pow $N1, 2, $N0
-    is($N1, 'Inf', '...: 2 ^ Inf')
-    $N0 = 'NaN'
-    pow $N1, $N0, 2
-    is($N1, 'NaN', '...: NaN ^ 2')
-    pow $N1, 2, $N0
-    is($N1, 'NaN', '...: 2 ^ NaN')
-.end
-
 .sub test_mix_nan_inf
     $N0 = 'NaN'
     $N1 = 'Inf'
@@ -425,19 +124,19 @@
     $N0 = 'Inf'
     $I0 = floor $N0
     #is($I0, 'Inf', 'floor Inf')
-    todo(0, 'floor Inf', 'rounding nan/inf gives something like -2147483648')
+    skip(1, 'rounding nan/inf gives something like -2147483648')
     $N0 = 'NaN'
     $I0 = floor $N0
     #is($I0, 'NaN', 'floor Inf')
-    todo(0, 'floor NaN', 'rounding nan/inf gives something like -2147483648')
+    skip(1, 'rounding nan/inf gives something like -2147483648')
     $N0 = 'Inf'
     $I0 = ceil $N0
     #is($I0, 'Inf', 'floor Inf')
-    todo(0, 'ceil Inf', 'rounding nan/inf gives something like -2147483648')
+    skip(1, 'rounding nan/inf gives something like -2147483648')
     $N0 = 'NaN'
     $I0 = ceil $N0
     #is($I0, 'NaN', 'floor Inf')
-    todo(0, 'ceil NaN', 'rounding nan/inf gives something like -2147483648')
+    skip(1, 'rounding nan/inf gives something like -2147483648')
 .end
 
 .sub test_nan_complex
@@ -446,7 +145,7 @@
     set $P1, "1 + i"
     $P1 += $N0
     #is($P1, 'NaN', '1+i + NaN')
-    todo(0, '1+i + NaN should be NaN')
+    skip(1, '1+i + NaN should be NaN')
 .end
 
 .sub test_fdiv_integer_pmc_nan
@@ -456,7 +155,7 @@
     $N0 = 'NaN'
     fdiv $P1, $P2, $N0
     #is($P1, 'NaN', 'fdiv with Integer PMCs and NaN')
-    todo(0, 'fdiv with Integer PMCs and NaN', 'fdiv/mod/cmod do not play nicely with PMCs and NaN')
+    skip(1, 'fdiv/mod do not play nicely with PMCs and NaN')
 .end
 
 .sub test_fdiv_float_pmc_nan
@@ -466,7 +165,7 @@
     $N0 = 'NaN'
     fdiv $P1, $P2, $N0
     #is($P1, 'NaN','fdiv with Float PMCs and NaN')
-    todo(0,'fdiv with Float PMCs and NaN', 'fdiv/mod/cmod do not play nicely with PMCs and NaN')
+    skip(1, 'fdiv/mod do not play nicely with PMCs and NaN')
 .end
 
 .sub test_fdiv_float_integer_pmc_nan
@@ -476,17 +175,7 @@
     $N0 = 'NaN'
     fdiv $P1, $P2, $N0
     #is($P1, 'NaN', 'fdiv with Float and Integer PMCs and NaN')
-    todo(0, 'fdiv with Float and Integer PMCs and NaN', 'fdiv/mod/cmod do not play nicely with PMCs and NaN')
-.end
-
-.sub test_cmod_float_integer_pmc_nan
-    $P1 = new 'Float'
-    $P2 = new 'Integer'
-    $P2 = 1
-    $N0 = 'NaN'
-    cmod $P1, $P2, $N0
-    #is($P1, 'NaN', 'cmod with Float and Integer PMCs and NaN')
-    todo(0, 'cmod with Float and Integer PMCs and NaN', 'fdiv/mod/cmod do not play nicely with PMCs and NaN')
+    skip(1, 'fdiv/mod do not play nicely with PMCs and NaN')
 .end
 
 .sub test_mod_float_integer_pmc_nan
@@ -496,7 +185,7 @@
     $N0 = 'NaN'
     mod $P1, $P2, $N0
     #is($P1, 'NaN', 'mod with Float and Integer PMCs and NaN')
-    todo(0, 'mod with Float and Integer PMCs and NaN', 'fdiv/mod/cmod do not play nicely with PMCs and NaN')
+    skip(1, 'fdiv/mod do not play nicely with PMCs and NaN')
 .end
 
 # Local Variables:

Modified: branches/gsoc_threads/t/op/integer.t
==============================================================================
--- branches/gsoc_threads/t/op/integer.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/integer.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -16,7 +16,7 @@
 
 =cut
 
-.const int TESTS = 159
+.const int TESTS = 150
 
 .sub 'test' :main
     .include 'test_more.pir'
@@ -32,7 +32,6 @@
     test_div()
     test_mod()
     mod_negative_zero_rest()
-    test_cmod()
     test_eq()
     test_ne()
     test_lt()
@@ -60,9 +59,6 @@
     test_fdiv_i_i_i_by_zero()
     test_fdiv_i_ic_i_by_zero()
     test_fdiv_i_i_ic_by_zero()
-    test_cmod_i_i_i_by_zero()
-    test_cmod_i_ic_i_by_zero()
-    test_cmod_i_i_ic_by_zero()
     test_mod_i_i_i_by_zero()
     test_mod_i_ic_i_by_zero()
     test_mod_i_i_ic_by_zero()
@@ -337,26 +333,6 @@
     is($I1, 0, 'mod - negative, zero rest (#36003), -3 mod -3 = 0')
 .end
 
-.sub 'test_cmod'
-    $I0 = 5
-    $I1 = 3
-    $I2 = cmod $I0, $I1
-    is($I2, 2, 'cmod_i_i_i')
-    is($I0, 5, 'cmod_i_i_i - dividend unchanged')
-    is($I1, 3, 'cmod_i_i_i - divisor unchanged')
-
-    $I0 = 12
-
-    $I1 = cmod $I0, 10
-    is($I1, 2, 'cmod_i_i_ic')
-
-    $I1 = cmod 14, $I0
-    is($I1, 2, 'cmod_i_ic_i')
-
-    $I1 = cmod 13, 11
-    is($I1, 2, 'cmod_i_ic_ic')
-.end
-
 .sub 'test_eq'
     $I0 = 0x12345678
     $I1 = 0x12345678
@@ -925,52 +901,6 @@
     ok($I3, 'fdiv_i_i_ic by zero')
 .end
 
-.sub 'test_cmod_i_i_i_by_zero'
-    $I0 = 0
-    $I1 = 10
-    push_eh test_cmod_i_i_i_by_zero_catch
-    $I2 = cmod $I1, $I0
-    pop_eh
-    $I3 = 0
-    goto test_cmod_i_i_i_by_zero_end
-
-  test_cmod_i_i_i_by_zero_catch:
-    $I3 = 1
-
-  test_cmod_i_i_i_by_zero_end:
-    ok($I3, 'cmod_i_i_i by zero')
-.end
-
-.sub 'test_cmod_i_ic_i_by_zero'
-    $I0 = 0
-    push_eh test_cmod_i_ic_i_by_zero_catch
-    $I2 = cmod 10, $I0
-    pop_eh
-    $I3 = 0
-    goto test_cmod_i_ic_i_by_zero_end
-
-  test_cmod_i_ic_i_by_zero_catch:
-    $I3 = 1
-
-  test_cmod_i_ic_i_by_zero_end:
-    ok($I3, 'cmod_i_ic_i by zero')
-.end
-
-.sub 'test_cmod_i_i_ic_by_zero'
-    $I1 = 10
-    push_eh test_cmod_i_i_ic_by_zero_catch
-    $I2 = cmod $I1, 0
-    pop_eh
-    $I3 = 0
-    goto test_cmod_i_i_ic_by_zero_end
-
-  test_cmod_i_i_ic_by_zero_catch:
-    $I3 = 1
-
-  test_cmod_i_i_ic_by_zero_end:
-    ok($I3, 'cmod_i_i_ic by zero')
-.end
-
 .sub 'test_mod_i_i_i_by_zero'
     $I0 = 0
     $I1 = 10

Modified: branches/gsoc_threads/t/op/interp.t
==============================================================================
--- branches/gsoc_threads/t/op/interp.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/interp.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -47,8 +47,6 @@
     .local string actual
     .local pmc test_interp
                test_interp = new 'ParrotInterpreter'
-    .local pmc stdout
-               stdout = getstdout
 
     print "uno\n"
     runinterp test_interp, pasm
@@ -70,14 +68,14 @@
 # the test fail.
 pasm_output_like(
     <<'CODE', <<'OUTPUT', "restart trace" );
-    printerr "ok 1\n"
+    print "ok 1\n"
     sweepoff
     set I0, 1
     trace I0
     dec I0
     trace I0
     sweepon
-    printerr "ok 2\n"
+    print "ok 2\n"
     end
 CODE
 /^ok\s1\n
@@ -89,7 +87,7 @@
 pasm_output_is( <<'CODE', 'nada:', 'interp - warnings' );
     new P0, 'Undef'
     set I0, P0
-    printerr "nada:"
+    print "nada:"
     warningson 1
     new P1, 'Undef'
     set I0, P1

Deleted: branches/gsoc_threads/t/op/io.t
==============================================================================
--- branches/gsoc_threads/t/op/io.t	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,178 +0,0 @@
-#!./parrot
-# Copyright (C) 2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/op/io.t - Testing io opcodes
-
-=head1 SYNOPSIS
-
-    % prove t/op/io.t
-
-=head1 DESCRIPTION
-
-Tests various io opcodes.
-
-=cut
-
-.const int TESTS = 5
-
-.sub 'main' :main
-    .include 'test_more.pir'
-
-    plan(TESTS)
-
-    open_delegates_to_filehandle_pmc()
-    open_null_filename()
-    open_null_mode()
-    open_pipe_for_reading()
-    open_pipe_for_writing()
-.end
-
-.sub open_delegates_to_filehandle_pmc
-    load_bytecode 'P6object.pbc'
-
-    .local pmc p6meta, interp, classes, classid
-    p6meta = get_root_global ["parrot"], "P6metaclass"
-    p6meta.'new_class'('Testing')
-
-    interp = getinterp
-    classes = interp[0]
-    classid = classes['Testing']
-    $I0 = classes['FileHandle']
-    set classes['FileHandle'], classid
-
-    $P1 = open '/foo'
-    is($P1,42,'open opcode delegates to the open method on the FileHandle PMC')
-
-    # replace the original, so we don't break other tests
-    set classes['FileHandle'], $I0
-
-.end
-
-.sub 'open_null_filename'
-    push_eh open_null_filename_failed
-    null $S0
-    $P0 = open $S0, 'r'
-    nok(1, 'open with null filename')
-    .return ()
-
-  open_null_filename_failed:
-    ok(1, 'open with null filename')
-.end
-
-.sub 'open_null_mode'
-    push_eh open_null_mode_failed
-    null $S0
-    $P0 = open 'some_name', $S0
-    nok(1, 'open with null mode')
-    .return ()
-
-  open_null_mode_failed:
-    ok(1, 'open with null mode')
-.end
-
-.sub 'tt661_todo_test' :anon
-    # As of r41963, these tests need to be todo'ed at least on Win32. Add new
-    # platforms known to fail.
-    .include 'sysinfo.pasm'
-    $S0 = sysinfo .SYSINFO_PARROT_OS
-    if $S0 == 'MSWin32' goto tt661_todo
-
-    .return (0)
-
-  tt661_todo:
-    .return (1)
-.end
-
-.include 'iglobals.pasm'
-
-.sub 'open_pipe_for_reading'
-    .local pmc interp
-    interp = getinterp
-
-    .local pmc conf
-    conf = interp[.IGLOBALS_CONFIG_HASH]
-
-    .local string command
-    command = conf['build_dir']
-
-    .local string aux
-    aux = conf['slash']
-    command .= aux
-    aux = conf['test_prog']
-    command .= aux
-    aux = conf['exe']
-    command .= aux
-    command .= ' -V'
-
-    .local pmc pipe
-    pipe = open command, 'rp'
-    unless pipe goto open_pipe_for_reading_failed
-    .local string line
-    line = readline pipe
-    line = substr line, 0, 14
-    is('This is Parrot', line, 'open pipe for reading')
-    .return ()
-
-  open_pipe_for_reading_failed:
-    nok(1, 'open pipe for reading')
-    .return ()
-.end
-
-.sub 'open_pipe_for_writing'
-    $I0 = tt661_todo_test()
-    if $I0 goto open_pipe_for_writing_todoed
-    .local pmc interp
-    interp = getinterp
-
-    .local pmc conf
-    conf = interp[.IGLOBALS_CONFIG_HASH]
-
-    .local string command
-    command = conf['build_dir']
-
-    .local string aux
-    aux = conf['slash']
-    command .= aux
-    .local string filename
-    filename .= command
-    filename .= 'examples/pasm/cat.pasm'
-    aux = conf['test_prog']
-    command .= aux
-    aux = conf['exe']
-    command .= aux
-    command .= ' '
-    command .= filename
-
-    .local pmc pipe
-    pipe = open command, 'wp'
-    unless pipe goto open_pipe_for_writing_failed
-
-    pipe.'puts'("ok 5 - open pipe for writing\n")
-    close pipe
-    .return ()
-
-  open_pipe_for_writing_failed:
-    nok(1, 'open pipe for writing')
-    .return ()
-
-  open_pipe_for_writing_todoed:
-    todo(0, 'Unimplemented in this platform, TT #661')
-
-.end
-
-.namespace ["Testing"]
-
-.sub open :method
-    .param pmc args :slurpy
-    .return(42)
-.end
-
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gsoc_threads/t/op/number.t
==============================================================================
--- branches/gsoc_threads/t/op/number.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/number.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,7 +19,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(130)
+    plan(126)
     test_set_n_nc()
     test_set_n()
     test_add_n_n_n()
@@ -30,7 +30,6 @@
     test_mul_i()
     test_div_i()
     test_mod_n()
-    test_cmod_n()
     test_eq_n_ic()
     test_eq_nc_ic()
     test_ne_n_ic()
@@ -66,9 +65,6 @@
     test_exception_fdiv_n_n_n_by_zero()
     test_exception_fdiv_n_nc_n_by_zero()
     test_exception_fdiv_n_n_nc_by_zero()
-    test_exception_cmod_n_n_n_by_zero()
-    test_exception_cmod_n_nc_n_by_zero()
-    test_exception_cmod_n_n_nc_by_zero()
     test_mod_n_n_n_by_zero()
     test_mod_n_nc_n_by_zero()
     test_mod_n_n_nc_by_zero()
@@ -259,13 +255,6 @@
     is( $N2, "-2", 'mod_n' )
 .end
 
-.sub test_cmod_n
-    set     $N0, 5.000
-    set     $N1, 3.000
-    cmod    $N2, $N0, $N1
-    is( $N2, "2", 'cmod_n' )
-.end
-
 .sub test_eq_n_ic
     set     $N0, 5.000001
     set     $N1, 5.000001
@@ -780,31 +769,6 @@
     .exception_is( 'Divide by zero' )
 .end
 
-.sub test_exception_cmod_n_n_n_by_zero
-    push_eh handler
-    set $N0, 0
-    set $N1, 10
-    cmod $N2, $N1, $N0
-  handler:
-    .exception_is( 'Divide by zero' )
-.end
-
-.sub test_exception_cmod_n_nc_n_by_zero
-    push_eh handler
-    set $N0, 0
-    cmod $N2, 10, $N0
-  handler:
-    .exception_is( 'Divide by zero' )
-.end
-
-.sub test_exception_cmod_n_n_nc_by_zero
-    push_eh handler
-    set $N1, 10
-    cmod $N2, $N1, 0
-  handler:
-    .exception_is( 'Divide by zero' )
-.end
-
 .sub test_mod_n_n_n_by_zero
     set $N0, 0
     set $N1, 10

Modified: branches/gsoc_threads/t/op/sprintf.t
==============================================================================
--- branches/gsoc_threads/t/op/sprintf.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/sprintf.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -59,6 +59,9 @@
 
 .const int TESTS = 308
 
+#.loadlib 'sys_ops'
+#.loadlib 'io_ops'
+
 .sub main :main
     load_bytecode 'Test/Builder.pbc'
     .include "iglobals.pasm"
@@ -121,7 +124,8 @@
 
     # Open the test file
     .local pmc file_handle   # currently open file
-               file_handle = open test_file, 'r'
+               file_handle = new ['FileHandle']
+               file_handle.'open'(test_file, 'r')
 
     unless file_handle goto bad_file
 
@@ -132,7 +136,7 @@
     $I0 = file_handle.'eof'()
     if $I0 goto end_loop
 
-    test_line = readline file_handle
+    test_line = file_handle.'readline'()
 
     # skip lines without tabs, and comment lines
     $I0 = index test_line, "\t"
@@ -154,7 +158,8 @@
     data_hash = new 'Hash'
     data_hash["''"] = ''
     data_hash['2**32-1'] = 0xffffffff
-    $N0 = pow 2, 38
+    $N0 = data_hash['2**32-1']
+    inc $N0
     data_hash['2**38'] = $N0
     data_hash["'string'"] = 'string'
 
@@ -228,7 +233,7 @@
 
     goto loop
   end_loop:
-    close file_handle
+    file_handle.'close'()
     goto outer_loop
   end_outer_loop:
 
@@ -481,8 +486,10 @@
     .local pmc it
     it = iter skip_os
 
+    load_bytecode 'config.pbc'
+    $P1 = _config()
     .local string osname
-    osname = sysinfo .SYSINFO_PARROT_OS
+    osname = $P1['osname']
 
   iter_loop:
     unless it goto iter_end

Modified: branches/gsoc_threads/t/op/string.t
==============================================================================
--- branches/gsoc_threads/t/op/string.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/string.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,8 +19,6 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(339)
-
     set_s_s_sc()
     test_clone()
     clone_null()
@@ -108,6 +106,7 @@
     index_multibyte_matching_two()
     num_to_string()
     string_to_int()
+    string_to_num()
     concat_or_substr_cow()
     constant_to_cstring()
     cow_with_chopn_leaving_original_untouched()
@@ -122,21 +121,6 @@
     test_find_encoding()
     test_assign()
     assign_and_globber()
-    bands_null_string()
-    bands_2()
-    bands_3()
-    bands_cow()
-    bors_null_string()
-    bors_2()
-    bors_3()
-    bors_cow()
-    bxors_null_string()
-    bxors_2()
-    bxors_3()
-    bxors_cow()
-    bnots_null_string()
-    bnots_2()
-    bnots_cow()
     split_on_empty_string()
     split_on_non_empty_string()
     test_join()
@@ -163,6 +147,7 @@
     # END_OF_TESTS
     join_get_string_returns_a_null_string()
 
+    done_testing()
 .end
 
 .macro exception_is ( M )
@@ -1084,6 +1069,16 @@
     is( $I0, "0", 'string to int' )
 .end
 
+.sub string_to_num
+    set $S0, "6foo"
+    set $N0, $S0
+    is( $N0, "6", '6foo to num' )
+
+    set $S0, "16foo"
+    set $N0, $S0
+    is( $N0, "16", '16foo to num' )
+.end
+
 .sub concat_or_substr_cow
     set $S0, "<JA"
     set $S1, "PH>"
@@ -1393,246 +1388,6 @@
     is( $S5, "JAPH", 'assign & globber' )
 .end
 
-.sub bands_null_string
-    null $S1
-    set $S2, "abc"
-    $S1 = bands $S1, $S2
-    null $S3
-    is( $S1, $S3, 'ok1' )
-
-    set $S1, ""
-    $S1 = bands $S1, $S2
-    nok( $S1, 'ok2' )
-
-    null $S2
-    set $S1, "abc"
-    $S1 = bands $S1, $S2
-    null $S3
-    is( $S1, $S3, 'ok3' )
-
-    set $S2, ""
-    $S1 = bands $S1, $S2
-    nok( $S1, 'ok4' )
-.end
-
-.sub bands_2
-    set $S1, "abc"
-    set $S2, "EE"
-    $S1 = bands $S1, $S2
-    is( $S1, "A@", 'bands 2' )
-    is( $S2, "EE", 'bands 2' )
-.end
-
-.sub bands_3
-    set $S1, "abc"
-    set $S2, "EE"
-    bands $S0, $S1, $S2
-    is( $S0, "A@", 'bands 3' )
-    is( $S1, "abc", 'bands 3' )
-    is( $S2, "EE", 'bands 3' )
-.end
-
-.sub bands_cow
-    set $S1, "foo"
-    substr $S2, $S1, 0, 3
-    $S1 = bands $S1, "bar"
-    is( $S2, "foo", 'bands COW' )
-.end
-
-.sub bors_null_string
-    null $S1
-    null $S2
-    $S1 = bors $S1, $S2
-    null $S3
-    is( $S1, $S3, 'bors NULL string' )
-
-    null $S1
-    set $S2, ""
-    $S1 = bors $S1, $S2
-    null $S3
-    is( $S1, $S3, 'bors NULL string' )
-
-    $S2 = bors $S2, $S1
-    is( $S2, $S3, 'bors NULL string' )
-
-    null $S1
-    set $S2, "def"
-    $S1 = bors $S1, $S2
-    is( $S1, "def", 'bors NULL string' )
-
-    null $S2
-    $S1 = bors $S1, $S2
-    is( $S1, "def", 'bors NULL string' )
-
-    null $S1
-    null $S2
-    bors $S3, $S1, $S2
-    null $S4
-    is( $S3, $S4, 'bors NULL string' )
-
-    set $S1, ""
-    bors $S3, $S1, $S2
-    is( $S3, $S4, 'bors NULL string' )
-
-    bors $S3, $S2, $S1
-    is( $S3, $S4, 'bors NULL string' )
-
-    set $S1, "def"
-    bors $S3, $S1, $S2
-    is( $S3, "def", 'bors NULL string' )
-
-    bors $S3, $S2, $S1
-    is( $S3, "def", 'bors NULL string' )
-.end
-
-.sub bors_2
-    set $S1, "abc"
-    set $S2, "EE"
-    $S1 = bors $S1, $S2
-    is( $S1, "egc", 'bors 2' )
-    is( $S2, "EE", 'bors 2' )
-.end
-
-.sub bors_3
-    set $S1, "abc"
-    set $S2, "EE"
-    bors $S0, $S1, $S2
-    is( $S0, "egc", 'bors 3' )
-    is( $S1, "abc", 'bors 3' )
-    is( $S2, "EE", 'bors 3' )
-.end
-
-.sub bors_cow
-    set $S1, "foo"
-    substr $S2, $S1, 0, 3
-    $S1 = bors $S1, "bar"
-    is( $S2, "foo", 'bors COW' )
-.end
-
-.sub bxors_null_string
-    null $S1
-    null $S2
-    $S1 = bxors $S1, $S2
-    null $S3
-    is( $S1, $S3, 'bxors NULL string' )
-
-    null $S1
-    set $S2, ""
-    $S1 = bxors $S1, $S2
-    null $S3
-    is( $S1, $S3, 'bxors NULL string' )
-
-    $S2 = bxors $S2, $S1
-    is( $S2, $S3, 'bxors NULL string' )
-
-    null $S1
-    set $S2, "abc"
-    $S1 = bxors $S1, $S2
-    is( $S1, "abc", 'bxors NULL string' )
-
-    null $S2
-    $S1 = bxors $S1, $S2
-    is( $S1, "abc", 'bxors NULL string' )
-
-    null $S1
-    null $S2
-    bxors $S3, $S1, $S2
-    null $S4
-    is( $S3, $S4, 'bxors NULL string' )
-
-    set $S1, ""
-    bxors $S3, $S1, $S2
-    is( $S3, $S4, 'bxors NULL string' )
-
-    bxors $S3, $S2, $S1
-    is( $S3, $S4, 'bxors NULL string' )
-
-    set $S1, "abc"
-    bxors $S3, $S1, $S2
-    is( $S3, "abc", 'bxors NULL string' )
-
-    bxors $S3, $S2, $S1
-    is( $S3, "abc", 'bxors NULL string' )
-.end
-
-.sub bxors_2
-    set $S1, "a2c"
-    set $S2, "Dw"
-    $S1 = bxors $S1, $S2
-    is( $S1, "%Ec", 'bxors 2' )
-    is( $S2, "Dw", 'bxors 2' )
-
-    set $S1, "abc"
-    set $S2, "   X"
-    $S1 = bxors $S1, $S2
-    is( $S1, "ABCX", 'bxors 2' )
-    is( $S2, "   X", 'bxors 2' )
-.end
-
-.sub bxors_3
-    set $S1, "a2c"
-    set $S2, "Dw"
-    bxors $S0, $S1, $S2
-    is( $S0, "%Ec", 'bxors 3' )
-    is( $S1, "a2c", 'bxors 3' )
-    is( $S2, "Dw", 'bxors 3' )
-
-    set $S1, "abc"
-    set $S2, "   Y"
-    bxors $S0, $S1, $S2
-    is( $S0, "ABCY", 'bxors 3' )
-    is( $S1, "abc", 'bxors 3' )
-    is( $S2, "   Y", 'bxors 3' )
-.end
-
-.sub bxors_cow
-    set $S1, "foo"
-    substr $S2, $S1, 0, 3
-    $S1 = bxors $S1, "bar"
-    is( $S2, "foo", 'bxors COW' )
-.end
-
-.sub bnots_null_string
-    null $S1
-    null $S2
-    bnots $S1, $S2
-    null $S3
-    is( $S1, $S3, 'bnots NULL string' )
-
-    null $S1
-    set $S2, ""
-    bnots $S1, $S2
-    null $S3
-    is( $S1, $S3, 'bnots NULL string' )
-
-    bnots $S2, $S1
-    is( $S2, $S3, 'bnots NULL string' )
-.end
-
-# This was the previous test used for t/native_pbc/string.t
-.sub bnots_2
-    skip( 4, "No unicode yet" )
-    # getstdout $P0
-    # push $P0, "utf8"
-    # set $S1, "a2c"
-    # bnots $S2, $S1
-    # is( $S1, "a2c", 'bnots 2' )
-    # is( $S2, "\xC2\x9E\xC3\x8D\xC2\x9C", 'bnots 2' )
-    #
-    # bnots $S1, $S1
-    # is( $S1, "\xC2\x9E\xC3\x8D\xC2\x9C", 'bnots 2' )
-    #
-    # bnots $S1, $S1
-    # is( $S1, "a2c", 'bnots 2' )
-.end
-
-.sub bnots_cow
-    set $S1, "foo"
-    substr $S2, $S1, 0, 3
-    bnots $S1, $S1
-    is( $S2, "foo", 'bnots COW' )
-.end
-
 .sub split_on_empty_string
     split $P1, "", ""
     set $I1, $P1

Modified: branches/gsoc_threads/t/op/stringu.t
==============================================================================
--- branches/gsoc_threads/t/op/stringu.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/stringu.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 33;
+use Parrot::Test tests => 34;
 use Parrot::Config;
 
 =head1 NAME
@@ -24,12 +24,14 @@
 =cut
 
 pir_output_is( <<'CODE', <<OUTPUT, "angstrom" );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     chr $S0, 0x212B
-    print $P0, $S0
-    print $P0, "\n"
+    print $S0
+    print "\n"
     end
 .end
 CODE
@@ -37,9 +39,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, "escaped angstrom" );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, unicode:"\x{212b}"
     print $S0
     print "\n"
@@ -50,9 +54,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, "escaped angstrom 2" );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, unicode:"aaaaaa\x{212b}"
     print $S0
     print "\n"
@@ -63,9 +69,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, "escaped angstrom 3" );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, unicode:"aaaaaa\x{212b}-aaaaaa"
     print $S0
     print "\n"
@@ -76,9 +84,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, 'escaped angstrom 3 \uhhhh' );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, unicode:"aaaaaa\u212b-aaaaaa"
     print $S0
     print "\n"
@@ -89,9 +99,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, "MATHEMATICAL BOLD CAPITAL A" );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, unicode:"aaaaaa\x{1d400}-aaaaaa"
     print $S0
     print "\n"
@@ -102,9 +114,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, 'MATHEMATICAL BOLD CAPITAL A \U' );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, unicode:"aaaaaa\U0001d400-aaaaaa"
     print $S0
     print "\n"
@@ -115,9 +129,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, "two upscales" );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, unicode:"aaaaaa\x{212b}-bbbbbb\x{1d400}-cccccc"
     print $S0
     print "\n"
@@ -132,9 +148,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, "two upscales - don't downscale" );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, unicode:"aaaaaa\x{1d400}-bbbbbb\x{212b}-cccccc"
     print $S0
     print "\n"
@@ -149,9 +167,11 @@
 OUTPUT
 
 pir_output_is( <<'CODE', <<OUTPUT, '\cX, \ooo' );
+.include 'stdio.pasm'
 .sub main :main
-    getstdout $P0
-    $P0.'encoding'("utf8")
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'("utf8")
     set $S0, "ok 1\cJ"
     print $S0
     set $S0, "ok 2\012"
@@ -574,8 +594,23 @@
 equal
 OUT
 
+pir_output_is( <<'CODE', <<'OUT', 'join mixed encodings' );
+.sub 'main'
+    new $P0, 'ResizablePMCArray'
+    push $P0, ascii:"a"
+    push $P0, unicode:"\x{e1}" # a acute
+    push $P0, iso-8859-1:"\x{e1}" # a acute
+    join $S0, "", $P0
+    $I0 = length $S0
+    say $I0
+.end
+CODE
+3
+OUT
+
 SKIP: {
     skip( 'no ICU lib', 1 ) unless $PConfig{has_icu};
+
 pir_output_is( <<'CODE', <<'OUT', 'find_codepoint opcode (experimental)');
 .sub 'main'
     $I1 = find_codepoint 'THISISNOTTHENAMEOFNOTHING'

Deleted: branches/gsoc_threads/t/op/sysinfo.t
==============================================================================
--- branches/gsoc_threads/t/op/sysinfo.t	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,183 +0,0 @@
-#!perl
-# Copyright (C) 2008-2010, Parrot Foundation.
-# $Id$
-
-# initial work by Brad Gilbert b2gills <at> gmail <dot> com
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-
-use Test::More;
-use Config;
-
-use Parrot::Test tests => 14;
-use Parrot::Config;
-
-
-=head1 NAME
-
-t/op/sysinfo.t - System Info
-
-=head1 SYNOPSIS
-
-        % prove t/op/sysinfo.t
-
-=head1 DESCRIPTION
-
-Tests for basic system information.
-
-=over 4
-
-=item 1 The size of a platform integer
-
-=item 2 The size of a platform float
-
-=item 3 The size of a platform pointer. (Largest possible data pointer)
-
-=item 4 The OS name
-
-=item 5 The OS version string
-
-=item 6 The OS version number string
-
-=item 7 The CPU architecture
-
-=item 8 The CPU model
-
-=item 9, 10 The min and max INTVAL values
-
-=back
-
-=cut
-
-
-my @setup = (
-    { pconfig_key => 'intvalsize',
-      pasm_key    => 1,
-      pir_key     => 'SYSINFO_PARROT_INTSIZE',
-      desc        => 'integer size',
-      reg_type    => 'I',
-    },
-    { pconfig_key => 'doublesize',
-      pasm_key    => 2,
-      pir_key     => 'SYSINFO_PARROT_FLOATSIZE',
-      desc        => 'float size',
-      reg_type    => 'I',
-    },
-    { pconfig_key => 'ptrsize',
-      pasm_key    => 3,
-      pir_key     => 'SYSINFO_PARROT_POINTERSIZE',
-      desc        => 'pointer size',
-      reg_type    => 'I',
-    },
-    { pconfig_key => 'osname',
-      pasm_key    => 4,
-      pir_key     => 'SYSINFO_PARROT_OS',
-      desc        => 'osname',
-      reg_type    => 'S',
-    },
-    { pconfig_key => 'cpuarch',
-      pasm_key    => 7,
-      pir_key     => 'SYSINFO_CPU_ARCH',
-      desc        => 'CPU Arch Family',
-      reg_type    => 'S',
-    },
-);
-
-foreach ( @setup ) {
-    if ( $_->{reg_type} eq 'I' ) {
-        pasm_output_is( <<"CODE", $PConfig{$_->{pconfig_key}}, "PASM sysinfo  $_->{desc}" );
-   sysinfo_i_ic I1, $_->{pasm_key}
-   print I1
-end
-CODE
-        pir_output_is( <<"CODE", $PConfig{$_->{pconfig_key}}, "PIR sysinfo  $_->{desc}" );
-.include 'sysinfo.pasm'
-.sub main :main
-    \$I0 = sysinfo .$_->{pir_key}
-    print \$I0
-.end
-CODE
-    }
-    else {
-        pasm_output_is( <<"CODE", $PConfig{$_->{pconfig_key}}, "sysinfo $_->{desc}" );
-   sysinfo_s_ic S1, $_->{pasm_key}
-   print S1
-end
-CODE
-        pir_output_is( <<"CODE", $PConfig{$_->{pconfig_key}}, "PIR sysinfo  $_->{desc}" );
-.include 'sysinfo.pasm'
-.sub main :main
-    \$S0 = sysinfo .$_->{pir_key}
-    print \$S0
-.end
-CODE
-    }
-}
-
-SKIP:
-{
-    $PConfig{osname} eq 'MSWin32'
-        or skip "Tests only meaningful on Win32", 2;
-    SKIP:
-    {
-        eval { require Win32; } or
-            skip "requires package Win32 for these tests", 2;
-
-        my $osname = Win32::GetOSName();
-        $osname = 'WinXP' if $osname =~ m/^WinXP/;
-        TODO: {
-            local $TODO = "Not Currently Implemented";
-            pasm_output_is( <<'CODE', $osname, "sysinfo OS version string" );
-    sysinfo_s_ic S1, 5
-    print S1
-end
-CODE
-
-            my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();
-
-            pasm_output_is( <<'CODE', "$major.$minor", "sysinfo OS version number string" );
-    sysinfo_s_ic S1, 6
-    print S1
-end
-CODE
-        } # END todo block
-    } # END inner SKIP block
-} # END outer SKIP block
-
-SKIP:
-{
-    skip "Requires a lot of work to find out the correct answer", 1;
-
-    pasm_output_is( <<'CODE', $PConfig{archname}, "sysinfo CPU Model" );
-   sysinfo_s_ic S1, 8
-   print S1
-end
-CODE
-}
-
-# 9, 10
-
-SKIP:
-{
-    skip 'Testing only in some known platforms', 1
-        unless $PConfig{osname} eq 'linux';
-
-    pir_output_like( <<'CODE', '/^-[1-9][0-9]*\n[1-9][0-9]*\n$/', 'INTVAL min and max values');
-.include 'sysinfo.pasm'
-.sub main :main
-    $I0 = sysinfo .SYSINFO_PARROT_INTMIN
-    say $I0
-    $I0 = sysinfo .SYSINFO_PARROT_INTMAX
-    say $I0
-.end
-CODE
-}
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/t/op/time.t
==============================================================================
--- branches/gsoc_threads/t/op/time.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/op/time.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -11,7 +11,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(29)
+    plan(19)
     test_time_i()
     test_time_n()
     test_sleep_i()
@@ -19,11 +19,6 @@
     test_sleep_n()
     test_sleep_n_negative()
     test_tm_pasm()
-    test_gmtime_s_i()
-    test_time_n_vs_time_i()
-    test_decodetime_p_i()
-    test_localtime_s_i()
-    test_decodelocaltime_p_i()
 .end
 
 .sub test_time_i
@@ -103,67 +98,6 @@
     is(.TM_ISDST, 8, "TM_ISDST ok")
 .end
 
-.sub test_gmtime_s_i
-    $S0 = gmtime 0
-    $I0 = isnull $S0
-    is($I0, 0, "gmtime string is not null")
-    is($S0, "Thu Jan  1 00:00:00 1970\n", "correct epoch")
-    $I1 = length $S0
-    is($I1, 25, "string is the correct length")
-.end
-
-.sub test_time_n_vs_time_i
-    .local int time_int
-    time_int = time
-
-    .local num time_float
-    time_float = time
-
-    # check if time_float is within [time_int - 5;time_int + 5]
-    .local int time_int_lower
-    time_int_lower = time_int - 5
-    if time_float < time_int_lower goto FAIL
-    .local int time_int_upper
-    time_int_upper = time_int + 5
-    if time_float > time_int_upper goto FAIL
-
-    ok(1, "time_n value corresponds to time_i value")
-    .return()
-
-  FAIL:
-    ok(0, "time_n value does not correspond to time_t value")
-    .return()
-.end
-
-.sub test_decodetime_p_i
-    $P0 = decodetime 0
-    $I0 = $P0
-    is($I0, 9, "decodetime result has 9 values")
-    $S0 = typeof $P0
-    # TODO: Actually, this should return whatever HLL type replaces
-    # FixedIntegerArray. We should test this behavior with a new HLL
-    is($S0, "FixedIntegerArray", "decodetime returns the correct PMC type")
-.end
-
-.sub test_localtime_s_i
-    $S0 = localtime 0
-    $I0 = isnull $S0
-    is($I0, 0, "localtime string is not a null string")
-    $I0 = length $S0
-    is($I0, 25, "localtime string is the correct length")
-.end
-
-.sub test_decodelocaltime_p_i
-    $P0 = decodelocaltime 0
-    $I0 = $P0
-    is($I0, 9, "decodelocaltime result has 9 values")
-    $S0 = typeof $P0
-    # TODO: Actually, this should return whatever HLL type replaces
-    # FixedIntegerArray. We should test this behavior with a new HLL
-    is($S0, "FixedIntegerArray", "decodelocaltime returns the correct PMC type")
-.end
-
-
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Deleted: branches/gsoc_threads/t/op/time_old.t
==============================================================================
--- branches/gsoc_threads/t/op/time_old.t	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,46 +0,0 @@
-#!perl
-# Copyright (C) 2001-2009, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Test::More;
-use Parrot::Test tests => 1;
-
-=head1 NAME
-
-t/op/time.t - Time and Sleep
-
-=head1 SYNOPSIS
-
-    % prove t/op/time.t
-
-=head1 DESCRIPTION
-
-Tests the C<time> and C<sleep> operations.
-
-=cut
-
-my $year;
-( undef, undef, undef, undef, undef, $year ) = localtime();
-$year += 1900;
-
-# don't run this test 1 tick before the year changes #'
-
-pasm_output_is( <<'CODE', $year, "decodelocaltime" );
-    time I0
-    decodelocaltime P0, I0
-    .include "tm.pasm"
-    set I0, P0[.TM_YEAR]
-    print I0
-    end
-CODE
-
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/gsoc_threads/t/op/trans.t
==============================================================================
--- branches/gsoc_threads/t/op/trans.t	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,244 +0,0 @@
-#!./parrot
-# Copyright (C) 2001-2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/op/trans.t - Trancendental Mathematical Ops
-
-=head1 SYNOPSIS
-
-        % prove t/op/trans.t
-
-=head1 DESCRIPTION
-
-Tests various transcendental operations
-
-=cut
-
-.sub main :main
-    .include 'test_more.pir'
-    .local num epsilon
-    epsilon = _epsilon()
-
-    plan(28)
-
-    test_sin_n(epsilon)
-    test_sin_i(epsilon)
-    test_cos_n(epsilon)
-    test_cos_i(epsilon)
-    test_tan_n(epsilon)
-    test_tan_i(epsilon)
-    test_sec_n(epsilon)
-    test_sec_i(epsilon)
-    test_atan_n(epsilon)
-    test_atan_i(epsilon)
-    test_asin_n(epsilon)
-    test_asin_i(epsilon)
-    test_acos_n(epsilon)
-    test_acos_i(epsilon)
-    test_asec_n(epsilon)
-    test_asec_i(epsilon)
-    test_cosh_n(epsilon)
-    test_cosh_i(epsilon)
-.end
-
-.sub _pi
-    .return (3.1415926535897)
-.end
-
-.sub _e
-    .return (2.7182818459045)
-.end
-
-.sub _epsilon
-    .return (0.0001)
-.end
-
-.sub test_sin_n
-    .param num epsilon
-
-    $N0 = sin 0.0
-    is($N0, 0.0, "sin(0.0)", epsilon)
-
-    $N0 = sin 1.0
-    is($N0, 0.841471, "sin(1.0)", epsilon)
-
-    $N1 = _pi()
-    $N0 = sin $N1
-    is($N0, 0.0, "sin(pi)", epsilon)
-
-    $N1 = _pi()
-    $N1 = $N1 / 2
-    $N0 = sin $N1
-    is($N0, 1.0, "sin(pi/2)", epsilon)
-.end
-
-.sub test_sin_i
-    .param num epsilon
-
-    $N0 = sin 0
-    is($N0, 0.0, "sin(0)", epsilon)
-
-    $N0 = sin 1
-    is($N0, 0.841471, "sin(1)", epsilon)
-.end
-
-.sub test_cos_n
-    .param num epsilon
-
-    $N0 = cos 0.0
-    is($N0, 1.0, "cos(0.0)", epsilon)
-
-    $N0 = cos 1.0
-    is($N0, 0.540302, "cos(1.0)", epsilon)
-
-    $N1 = _pi()
-    $N0 = cos $N1
-    is($N0, -1.0, "cos(pi)", epsilon)
-
-    $N1 = _pi()
-    $N1 = $N1 / 2
-    $N0 = cos $N1
-    is($N0, 0.0, "cos(pi/2)", epsilon)
-.end
-
-.sub test_cos_i
-    .param num epsilon
-
-    $N0 = cos 0
-    is($N0, 1.0, "cos(0)", epsilon)
-
-    $N0 = cos 1
-    is($N0, 0.540302, "cos(1)", epsilon)
-.end
-
-.sub test_tan_n
-    .param num epsilon
-
-    $N0 = tan 0.0
-    is($N0, 0.0, "tan(0.0)", epsilon)
-
-    $N0 = tan 1.0
-    is($N0, 1.557408, "tan(1.0)", epsilon)
-.end
-
-.sub test_tan_i
-    .param num epsilon
-
-    $N0 = tan 0
-    is($N0, 0.0, "tan(0)", epsilon)
-
-    $N0 = tan 1
-    is($N0, 1.557408, "tan(1)", epsilon)
-.end
-
-.sub test_sec_n
-    .param num epsilon
-
-    $N1 = 1.0
-    $N2 = sec $N1
-    is($N2, 1.850816, "sec(1.0)", epsilon)
-.end
-
-.sub test_sec_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = sec $I1
-    is($N1, 1.850816, "sec(1)", epsilon)
-.end
-
-.sub test_atan_n
-    .param num epsilon
-
-    $N1 = 1.0
-    $N2 = atan $N1
-    is($N2, 0.785398, "atan(1.0)", epsilon)
-.end
-
-.sub test_atan_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = atan $I1
-    is($N1, 0.785398, "atan(1)", epsilon)
-.end
-
-.sub test_asin_n
-    .param num epsilon
-    .local num pi2
-    pi2 = _pi()
-    pi2 /= 2
-
-    $N1 = 1.0
-    $N2 = asin $N1
-    is($N2, pi2, "asin(1.0)", epsilon)
-.end
-
-.sub test_asin_i
-    .param num epsilon
-    .local num pi2
-    pi2 = _pi()
-    pi2 /= 2
-
-    $I1 = 1
-    $N1 = asin $I1
-    is($N1, pi2, "asin(1)", epsilon)
-.end
-
-.sub test_acos_n
-    .param num epsilon
-
-    $N1 = 1.0
-    $N2 = acos $N1
-    is($N2, 0.0, "acos(1.0)", epsilon)
-.end
-
-.sub test_acos_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = acos $I1
-    is($N1, 0.0, "acos(1)", epsilon)
-.end
-
-.sub test_asec_n
-    .param num epsilon
-
-    $N1 = 1.0
-    $N2 = asec $N1
-    is($N2, 0.0, "asec(1.0)", epsilon)
-.end
-
-.sub test_asec_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = asec $I1
-    is($N1, 0.0, "asec(1)", epsilon)
-.end
-
-.sub test_cosh_n
-    .param num epsilon
-    .local num result
-
-    $N1 = 1.0
-    $N2 = cosh $N1
-    is($N2, 1.543081, "cosh(1.0)", epsilon)
-.end
-
-.sub test_cosh_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = cosh $I1
-    is($N1, 1.543081, "cosh(1)", epsilon)
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:
-

Deleted: branches/gsoc_threads/t/op/trans_old.t
==============================================================================
--- branches/gsoc_threads/t/op/trans_old.t	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,565 +0,0 @@
-#!perl
-# Copyright (C) 2001-2008, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Test::More;
-use Parrot::Test tests => 13;
-use Math::Trig qw( tan sec atan asin acos asec cosh sinh tanh sech );
-
-=head1 NAME
-
-t/op/trans.t - Transcendental Mathematical Ops
-
-=head1 SYNOPSIS
-
-    % prove t/op/trans.t
-
-=head1 DESCRIPTION
-
-Tests the transcendental mathematical operations.
-
-=cut
-
-# This defines two macros:
-# fp_eq N, N, LABEL
-# fp_ne N, N, LABEL
-# which will conditionally branch
-# to LABEL if abs(n,n) < epsilon
-
-my $runcore = $ENV{TEST_PROG_ARGS} || '';
-my @bsdtodo = (
-    $runcore =~ /--runcore=jit/ &&  $^O =~ m/bsd/i
-        ? ( todo => 'broken under JIT TT #501' )
-        : ()
-);
-
-pasm_output_is( <<"CODE", <<OUTPUT, "sinh", @bsdtodo );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        sinh N2, N1
-        .fp_eq_pasm  (N2, 1.175201, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        sinh N2, I1
-        .fp_eq_pasm  (N2, 1.175201, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "tanh", @bsdtodo );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        tanh N2, N1
-        .fp_eq_pasm  (N2, 0.761594, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        tanh N2, I1
-        .fp_eq_pasm  (N2, 0.761594, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "sech" );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        sech N2, N1
-        .fp_eq_pasm  (N2, 0.648054, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        sech N2, I1
-        .fp_eq_pasm  (N2, 0.648054, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-my @jittodo = (
-    $runcore =~ /--runcore=jit/
-        ? ( todo => 'broken under JIT TT #530' )
-        : ()
-);
-pasm_output_is( <<"CODE", <<OUTPUT, 'atan2', @jittodo );
-        .include 'fp_equality.pasm'
-        set N0, 0.0
-        set I0, 0
-        set N1, 1.0
-        set I1, 1
-        set N2, 1.0
-        set I2, 1
-        set I3, -1
-        set N3, -1.0
-
-        atan N4, N1, N2
-        .fp_eq_pasm  (N4, 0.785398, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        atan N4, N1, I2
-        .fp_eq_pasm  (N4, 0.785398, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        atan N4, I1, N2
-        .fp_eq_pasm  (N4, 0.785398, EQ3)
-        print "not "
-EQ3:    print "ok 3\\n"
-
-        atan N4, I1, I2
-        .fp_eq_pasm  (N4, 0.785398, EQ4)
-        print "not "
-EQ4:    print "ok 4\\n"
-
-        atan N4, N3, 1.0
-        .fp_eq_pasm   (N4, -0.785398, EQ5)
-        print "not "
-EQ5:    print "ok 5\\n"
-
-        atan N4, N1, 0
-        .fp_eq_pasm   (N4, 1.570796, EQ6)
-        print "not "
-EQ6:    print "ok 6\\n"
-
-        atan N4, I3, 0.0
-        .fp_eq_pasm   (N4, -1.570796, EQ7)
-        print "not "
-EQ7:    print "ok 7\\n"
-
-        atan N4, I3, -1
-        .fp_eq_pasm   (N4, -2.356194, EQ8)
-        print "not "
-EQ8:    print "ok 8\\n"
-
-        atan N4, 1.0, N3
-        .fp_eq_pasm   (N4, 2.356194, EQ9)
-        print "not "
-EQ9:    print "ok 9\\n"
-
-        atan N4, 1.0, I0
-        .fp_eq_pasm   (N4, 1.570796, EQ10)
-        print "not "
-EQ10:   print "ok 10\\n"
-
-        atan N4, 1, N1
-        .fp_eq_pasm   (N4, 0.785398, EQ11)
-        print "not "
-EQ11:   print "ok 11\\n"
-
-        atan N4, 1, I1
-        .fp_eq_pasm   (N4, 0.785398, EQ12)
-        print "not "
-EQ12:   print "ok 12\\n"
-
-        atan N4, 0.0, 1.0
-        .fp_eq_pasm   (N4, 0.000000, EQ13)
-        print "not "
-EQ13:   print "ok 13\\n"
-
-        atan N4, -1.0, 0
-        .fp_eq_pasm   (N4, -1.570796, EQ14)
-        print "not "
-EQ14:   print "ok 14\\n"
-
-        atan N4, 1, -1.0
-        .fp_eq_pasm   (N4, 2.356194, EQ15)
-        print "not "
-EQ15:   print "ok 15\\n"
-
-        atan N4, 0, 1
-        .fp_eq_pasm   (N4, 0.000000, EQ16)
-        print "not "
-EQ16:   print "ok 16\\n"
-        end
-CODE
-ok 1
-ok 2
-ok 3
-ok 4
-ok 5
-ok 6
-ok 7
-ok 8
-ok 9
-ok 10
-ok 11
-ok 12
-ok 13
-ok 14
-ok 15
-ok 16
-OUTPUT
-
-pasm_output_is( <<"CODE", <<'OUTPUT', 'atan, part 2' );
-        .include 'fp_equality.pasm'
-        atan N4, -0.0, -0.0
-        .fp_eq_pasm   (N4, -3.1415926, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-        end
-CODE
-ok 1
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "log2" );
-        .include 'fp_equality.pasm'
-        set N1, 10.0
-        log2 N2, N1
-        .fp_eq_pasm  (N2, 3.321928, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 10
-        log2 N2, I1
-        .fp_eq_pasm  (N2, 3.321928, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "log10" );
-        .include 'fp_equality.pasm'
-        set N1, 15.0
-        log10 N2, N1
-        .fp_eq_pasm  (N2, 1.176091, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 15
-        log10 N2, I1
-        .fp_eq_pasm  (N2, 1.176091, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "ln" );
-        .include 'fp_equality.pasm'
-        set N1, 10.0
-        ln N2, N1
-        .fp_eq_pasm  (N2, 2.302585, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 10
-        ln N2, I1
-        .fp_eq_pasm  (N2, 2.302585, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "exp" );
-        .include 'fp_equality.pasm'
-        set N1, 10.0
-        exp N2, N1
-        .fp_eq_pasm  (N2, 22026.465795, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 10
-        exp N2, I1
-        .fp_eq_pasm (N2, 22026.465795, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "pow", @bsdtodo );
-        .include 'fp_equality.pasm'
-        set N1, 3.0
-        set I1, 3
-        set N2, 5.0
-        set I2, 5
-        pow N3, N1, N2
-        .fp_eq_pasm  (N3, 243.0, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        pow N3, N1, I2
-        .fp_eq_pasm  (N3, 243.0, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        pow N3, I1, N2
-        .fp_eq_pasm  (N3, 243.0, EQ3)
-        print "not "
-EQ3:    print "ok 3\\n"
-
-        pow N3, I1, I2
-        .fp_eq_pasm  (N3, 243.0, EQ4)
-        print "not "
-EQ4:    print "ok 4\\n"
-
-        set N0, 0.0
-        set I0, 0
-        set N1, 1.0
-        set I1, 1
-        set N2, 4.0
-        set I2, 4
-        pow N3, N2, 2.5
-        .fp_eq_pasm  (N3, 32.0, EQ5)
-        print "not "
-EQ5:    print "ok 5\\n"
-
-        pow N3, N2, -2
-        .fp_eq_pasm  (N3, 0.0625, EQ6)
-        print "not "
-EQ6:    print "ok 6\\n"
-
-        pow N3, I2, 0.5
-        .fp_eq_pasm  (N3, 2.0, EQ7)
-        print "not "
-EQ7:    print "ok 7\\n"
-
-        pow N3, I2, 0
-        .fp_eq_pasm  (N3, 1.0, EQ8)
-        print "not "
-EQ8:    print "ok 8\\n"
-
-        pow N3, 0.0, N2
-        .fp_eq_pasm  (N3, 0.0, EQ9)
-        print "not "
-EQ9:    print "ok 9\\n"
-
-        pow N3, 2.5, 0.0
-        .fp_eq_pasm  (N3, 1.0, EQ10)
-        print "not "
-EQ10:   print "ok 10\\n"
-
-        pow N3, 2.5, I2
-        .fp_eq_pasm  (N3, 39.0625, EQ11)
-        print "not "
-EQ11:   print "ok 11\\n"
-
-        pow N3, 2.0, -4
-        .fp_eq_pasm  (N3, 0.0625, EQ12)
-        print "not "
-EQ12:   print "ok 12\\n"
-
-        pow N3, 0, N2
-        .fp_eq_pasm  (N3, 0.0, EQ13)
-        print "not "
-EQ13:   print "ok 13\\n"
-
-        pow N3, 4, -0.5
-        .fp_eq_pasm  (N3, 0.5, EQ14)
-        print "not "
-EQ14:   print "ok 14\\n"
-
-        pow N3, 4, I2
-        .fp_eq_pasm  (N3, 256.0, EQ15)
-        print "not "
-EQ15:   print "ok 15\\n"
-
-        pow N3, 4, -1
-        .fp_eq_pasm  (N3, 0.25, EQ16)
-        print "not "
-EQ16:   print "ok 16\\n"
-        end
-CODE
-ok 1
-ok 2
-ok 3
-ok 4
-ok 5
-ok 6
-ok 7
-ok 8
-ok 9
-ok 10
-ok 11
-ok 12
-ok 13
-ok 14
-ok 15
-ok 16
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "sqrt" );
-       .include 'fp_equality.pasm'
-       set N1, 9.0
-       sqrt N2, N1
-       .fp_eq_pasm  (N2, 3.0, EQ1)
-       print "not "
-EQ1:   print "ok 1\\n"
-
-       set I1, 9
-       sqrt N2, I1
-       .fp_eq_pasm  (N2, 3.0, EQ2)
-       print "not "
-EQ2:   print "ok 2\\n"
-
-       end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<'CODE', <<OUTPUT, "pow_n_n_ic" );
-    set N0, 2.0
-    pow N1, N0, 0
-    print N1
-    print "\n"
-    pow N1, N0, 1
-    print N1
-    print "\n"
-    pow N1, N0, 2
-    print N1
-    print "\n"
-    pow N1, N0, 3
-    print N1
-    print "\n"
-    pow N1, N0, 4
-    print N1
-    print "\n"
-    pow N1, N0, 5
-    print N1
-    print "\n"
-    pow N1, N0, 6
-    print N1
-    print "\n"
-    pow N1, N0, 7
-    print N1
-    print "\n"
-    pow N1, N0, -1
-    print N1
-    print "\n"
-    pow N1, N0, -2
-    print N1
-    print "\n"
-    pow N1, N0, -3
-    print N1
-    print "\n"
-    pow N1, N0, -4
-    print N1
-    print "\n"
-    pow N1, N0, -5
-    end
-CODE
-1
-2
-4
-8
-16
-32
-64
-128
-0.5
-0.25
-0.125
-0.0625
-OUTPUT
-
-pasm_output_is( <<'CODE', <<OUTPUT, "pow_n_n_i" );
-    set N0, 2.0
-    set I0, 0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    set I0, -1
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    end
-CODE
-1
-2
-4
-8
-16
-32
-64
-0.5
-0.25
-0.125
-0.0625
-0.03125
-0.015625
-OUTPUT
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/t/pmc/addrregistry.t
==============================================================================
--- branches/gsoc_threads/t/pmc/addrregistry.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/addrregistry.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,10 +19,24 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(1)
+    plan(3)
 
     $P0 = new ['AddrRegistry']
     ok(1, 'Instantiated .AddrRegistry')
+
+    $I0 = 0
+    if $P0 goto isnotempty
+    inc $I0
+isnotempty:
+    ok($I0, 'vtable get_bool gives false when empty')
+
+    $P1 = new [ 'Integer' ]
+    $P0[0] = $P1
+    $I0 = 0
+    unless $P0 goto isempty
+    inc $I0
+isempty:
+    ok($I0, 'vtable get_bool gives true when non empty')
 .end
 
 # Local Variables:

Copied: branches/gsoc_threads/t/pmc/bytebuffer.t (from r47544, trunk/t/pmc/bytebuffer.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/t/pmc/bytebuffer.t	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/t/pmc/bytebuffer.t)
@@ -0,0 +1,307 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/pmc/bytebuffer.t - ByteBuffer PMC
+
+=head1 SYNOPSIS
+
+    % prove t/pmc/bytebuffer.t
+
+=head1 DESCRIPTION
+
+Tests C<ByteBuffer> PMC..
+
+=cut
+
+.include 'iglobals.pasm'
+.include 'iterator.pasm'
+
+.sub 'main' :main
+    .include 'test_more.pir'
+    plan(24)
+
+    test_init()
+    test_set_string()
+    test_set_byte()
+    test_get_string()
+    test_alloc()
+    test_iterate()
+    test_invalid()
+.end
+
+################################################################
+# Helper subs
+
+.sub hasicu
+    $P0 = getinterp
+    $P1 = $P0[.IGLOBALS_CONFIG_HASH]
+    $I0 = $P1['has_icu']
+    .return($I0)
+.end
+
+.sub isbigendian
+    $P0 = getinterp
+    $P1 = $P0[.IGLOBALS_CONFIG_HASH]
+    $I0 = $P1['bigendian']
+    .return($I0)
+.end
+
+################################################################
+
+.sub test_init
+    .local pmc bb
+    .local int n
+    bb = new ['ByteBuffer']
+    n = elements bb
+    is(n, 0, "size of a new buffer is 0")
+
+    bb = new ['ByteBuffer'], 42
+    n = elements bb
+    is(n, 42, "size of a new buffer with initial size is correct")
+
+.end
+
+.sub test_set_string
+    .local pmc bb
+    .local string s
+    .local int n, c
+    bb = new ['ByteBuffer']
+    s = 'Hi'
+    bb = s
+
+    # Exercise mark vtable
+    sweep 1
+
+    n = elements bb
+    is(n, 2, "size is the same as the source string bytelength")
+    n = bb[0]
+    c = ord 'H'
+    is(n, c, "first byte is the same as the source string")
+    n = bb[1]
+    c = ord 'i'
+    is(n, c, "second byte is the same as the source string")
+    n = bb[2]
+    is(n, 0, "byte out of size is 0")
+    n = bb[-1]
+    is(n, 0, "byte at negative index is 0")
+.end
+
+.sub test_set_byte
+    .local pmc bb
+    .local int n
+    bb = new ['ByteBuffer']
+    bb[255] = 42
+    n = elements bb
+    is(n, 256, "setting a byte resize empty buffer")
+
+    .local string s
+    s = 'Hi'
+    bb = s
+    bb[2] = 42
+    n = elements bb
+    is(n, 3, "setting a byte resize buffer initialized from string")
+
+    bb = new ['ByteBuffer'], 42
+    bb[41] = 9
+    n = elements bb
+    is(n, 42, "setting a byte within range does not resize")
+    bb[42] = 7
+    n = elements bb
+    is(n, 43, "setting a byte resize buffer with initial size")
+    n = bb[41]
+    is(n, 9, "resized buffer preserve old value")
+
+    push_eh catch
+    bb[-1] = 0
+    ok(0, "setting a byte with negative index should throw")
+    goto end
+catch:
+    pop_eh
+    ok(1, "setting a byte with negative index throws")
+end:
+.end
+
+.sub test_get_string
+    .local pmc bb
+    .local string s
+    .local int n
+    .local int big
+
+    bb = new ['ByteBuffer']
+    bb = binary:"abcd"
+    s = bb.'get_string'('ascii', 'fixed_8')
+    n = length s
+    is(n, 4, "getting ascii from buffer gives correct length")
+    is(s, "abcd", "getting ascii from buffer gives correct content")
+
+    $I0 = hasicu()
+    unless $I0 goto skip_it
+
+    bb = new ['ByteBuffer']
+
+    # Upper case n tilde: codepoint 0xD1, utf8 encoding 0xC3, 0x91
+    #bb = utf16:unicode:"\x{D1}"
+    # Can't do that, or the program can't be compiled without ICU.
+    # Fill the buffer with bytes instead.
+
+    # Get endianess to set the bytes in the appropiate order.
+    # *** XXX *** Need report from big endian platforms.
+    big = isbigendian()
+    if big goto isbig
+    bb[0] = 0xD1
+    bb[1] = 0x00
+    goto doit
+isbig:
+    bb[0] = 0x00
+    bb[1] = 0xD1
+doit:
+    s = bb.'get_string'('unicode', 'utf16')
+    n = length s
+    is(n, 1, "getting utf16 from buffer gives correct length")
+    n = ord s
+    is(n, 0xD1, "getting utf16 from buffer gives correct codepoint")
+    bb = new ['ByteBuffer']
+    bb[0] = 0xC3
+    bb[1] = 0x91
+    s = bb.'get_string_as'(utf8:unicode:"")
+    n = length s
+    is(n, 1, "getting utf8 from buffer gives correct length")
+    n = ord s
+    is(n, 0xD1, "getting utf8 from buffer gives correct codepoint")
+    goto end
+skip_it:
+    skip(4, "this test needs ICU")
+end:
+.end
+
+.sub test_alloc
+    # Exercise buffer reallocation building a utf16 string with the
+    # codepoints 32-8192
+    .local pmc bb
+    .local int i, big, pos, b0, b1, c
+
+    $I0 = hasicu()
+    unless $I0 goto skip_it
+
+    # Get endianess to set the bytes in the appropiate order.
+    # *** XXX *** Need report from big endian platforms.
+    big = isbigendian()
+
+    bb = new ['ByteBuffer']
+    pos = 0
+    i = 32
+loopset:
+    b0 = div i, 256
+    b1 = mod i, 256
+    if big goto setbig
+    bb[pos] = b1
+    inc pos
+    bb[pos] = b0
+    inc pos
+    goto setdone
+setbig:
+    bb[pos] = b0
+    inc pos
+    bb[pos] = b1
+    inc pos
+setdone:
+    inc i
+    if i < 8192 goto loopset
+
+    .local string s
+    s = bb.'get_string'('unicode', 'utf16')
+
+    # Check string size
+    i = length s
+    if i != 8160 goto failed
+
+    # Check string content
+    i = 32
+    pos = 0
+loopcheck:
+    c = ord s, pos
+    if c != i goto failed
+    inc pos
+    inc i
+    if i < 8192 goto loopcheck
+    ok(1, "reallocation")
+    goto end
+failed:
+    say i
+    ok(0, "reallocation")
+    goto end
+skip_it:
+    skip(1, "this test needs ICU")
+end:
+.end
+
+.sub test_iterate
+    .local pmc bb, it, arr
+    .local string s
+    s = 'abcd'
+    bb = new ['ByteBuffer']
+    bb = s
+    it = iter bb
+    it = .ITERATE_FROM_START
+    arr = new ['ResizableStringArray']
+loop:
+    unless it goto donearray
+    $I0 = shift it
+    $S0 = chr $I0
+    push arr, $S0
+    goto loop
+donearray:
+    .local string r
+    r = join '', arr
+    is(r, s, 'iterate buffer content')
+.end
+
+.sub test_invalid
+    .local pmc bb, ex
+    .local string s
+    bb = new ['ByteBuffer']
+    bb = 'something'
+    push_eh catch_charset
+    s = bb.'get_string'('***INVALID cHARsET%%%%', 'fixed_8')
+    pop_eh
+    ok(0, "get_string with invalid charset should throw")
+    goto check_encoding
+catch_charset:
+    .get_results(ex)
+    finalize ex
+    pop_eh
+    ok(1, "get_string with invalid charset throws")
+check_encoding:
+    push_eh catch_encoding
+    s = bb.'get_string'('ascii', '???INVALID eNCODING===')
+    pop_eh
+    ok(0, "get_string with invalid encoding should throw")
+    goto check_content
+catch_encoding:
+    .get_results(ex)
+    finalize ex
+    pop_eh
+    ok(1, "get_string with invalid encoding throws")
+check_content:
+    bb[0] = 128 # Out of ascii range
+    push_eh catch_content
+    s = bb.'get_string'('ascii', 'fixed_8')
+    pop_eh
+    ok(0, "get_string with invalid content should throw")
+    goto end
+catch_content:
+    .get_results(ex)
+    finalize ex
+    pop_eh
+    ok(1, "get_string with invalid content throws")
+end:
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gsoc_threads/t/pmc/complex.t
==============================================================================
--- branches/gsoc_threads/t/pmc/complex.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/complex.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -21,7 +21,7 @@
     .include 'fp_equality.pasm'
     .include "iglobals.pasm"
 
-    plan(459)
+    plan(458)
 
     string_parsing()
     exception_malformed_string__real_part()
@@ -54,7 +54,6 @@
     test_sub()
     test_i_sub()
     sprintf_with_a_complex()
-    e_raised_pi_time_i__plus_1_equal_0()
     ln_of_complex_numbers()
     exp_of_complex_numbers()
     sqrt_of_complex_numbers()
@@ -649,21 +648,6 @@
     .sprintf_is( "%.3f%+.3fi", "0+i", "0.000+1.000i" )
 .end
 
-.sub e_raised_pi_time_i__plus_1_equal_0
-    .local pmc c, c2, c3
-    c  = new ['Complex']
-    c2 = new ['Complex']
-    c3 = new ['Complex']
-    # e^(pi * i) + 1 = 0
-    $N0 = atan 1
-    $N0 *= 4
-    c[0] = 0.0
-    c[1] = $N0
-    c2 = c.'exp'()
-    c2 += 1.0
-    .sprintf_is( "%.3f%+.3fi", c2, "0.000+0.000i" )
-.end
-
 # # The inverse hyperbolic functions are broken wrt -0.0
 # # Need to find some formal spec for when to return -0.0.
 
@@ -703,9 +687,7 @@
     concat $S5, $S2, " of "
     concat $S5, $S5, $S4
 
-    $I0 = cmp_str $S1, $S3
-    $I0 = not $I0
-
+    $I0 = iseq $S1, $S3
     todo( $I0, $S4 )
 .endm
 

Modified: branches/gsoc_threads/t/pmc/eval.t
==============================================================================
--- branches/gsoc_threads/t/pmc/eval.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/eval.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -66,8 +66,8 @@
     concat S5, "returncc\n"
     compreg P1, "PASM"
     set_args "0", S5
-    get_results "0", P6
     invokecc P1
+    get_results "0", P6
     get_global P2, "_foo"
     invokecc P2
     print "back\n"
@@ -251,14 +251,15 @@
   .local pmc io
   f1 = compi("foo_1", "hello from foo_1")
   \$S0 = f1
-  io = open "$temp_pbc", 'w'
+  io = new ['FileHandle']
+  io.'open'("$temp_pbc", 'w')
   print io, \$S0
-  close io
+  io.'close'()
   load_bytecode "$temp_pbc"
   f2 = compi("foo_2", "hello from foo_2")
-  io = open "$temp2_pbc", 'w'
+  io.'open'("$temp2_pbc", 'w')
   print io, f2
-  close io
+  io.'close'()
   load_bytecode "$temp2_pbc"
 .end
 
@@ -325,17 +326,15 @@
   .local pmc io, os
   f1 = compi("foo_1", "hello from foo_1")
   \$S0 = f1
-  io = open "$temp_pbc", 'w'
+  io = new ['FileHandle']
+  io.'open'("$temp_pbc", 'w')
   print io, \$S0
-  close io
+  io.'close'()
   load_bytecode "$temp_pbc"
-  \$P0 = loadlib 'os'
-  os = new ['OS']
-  os.'rm'("$temp_pbc")
   f2 = compi("foo_2", "hello from foo_2")
-  io = open "$temp_pbc", 'w'
+  io.'open'("$temp_pbc", 'w')
   print io, f2
-  close io
+  io.'close'()
   load_bytecode "$temp_pbc"
 .end
 
@@ -368,9 +367,10 @@
   .local pmc io
   f = compi("foo_1", "hello from foo_1")
   \$S0 = freeze f
-  io = open "$temp_file", 'w'
+  io = new ['FileHandle']
+  io.'open'("$temp_file", 'w')
   print io, \$S0
-  close io
+  io.'close'()
   say "written"
 .end
 
@@ -401,11 +401,10 @@
     .local string file
     .local int size
     file = "$temp_file"
-    .include "stat.pasm"
-    size = stat file, .STAT_FILESIZE
-    io = open file, 'r'
-    \$S0 = read io, size
-    close io
+    io = new ['FileHandle']
+    io.'open'(file, 'rb')
+    \$S0 = io.'readall'()
+    io.'close'()
     e = thaw \$S0
     sweep 1 # ensure all of the object survives GC
     e()
@@ -423,9 +422,10 @@
   .local pmc io
   f = compi("foo_1", "hello from foo_1")
   \$S0 = freeze f
-  io = open "$temp_file", 'w'
+  io = new ['FileHandle']
+  io.'open'("$temp_file", 'wb')
   print io, \$S0
-  close io
+  io.'close'()
   say "written"
   "read"()
 .end
@@ -459,11 +459,10 @@
     .local string file
     .local int size
     file = "$temp_file"
-    .include "stat.pasm"
-    size = stat file, .STAT_FILESIZE
-    io = open file, 'r'
-    \$S0 = read io, size
-    close io
+    io = new ['FileHandle']
+    io.'open'(file, 'rb')
+    \$S0 = io.'readall'()
+    io.'close'()
     e = thaw \$S0
     e()
     e = get_global "foo_1"

Modified: branches/gsoc_threads/t/pmc/exception-old.t
==============================================================================
--- branches/gsoc_threads/t/pmc/exception-old.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/exception-old.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -342,7 +342,7 @@
 catch:
         .get_results($P1)
         say "caught"
-	unroll $P1
+	finalize $P1
         .return()
 .end
 

Modified: branches/gsoc_threads/t/pmc/exporter.t
==============================================================================
--- branches/gsoc_threads/t/pmc/exporter.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/exporter.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -172,8 +172,8 @@
   ok_2:
     say 'ok 2 - globals() with empty array arg sets PMCNULL'
 
-    $P99 = push 'Alex'
-    $P99 = push 'Prince'
+    push $P99, 'Alex'
+    push $P99, 'Prince'
 
     $P0.'globals'($P99)
     $P1 = $P0.'globals'()
@@ -323,8 +323,8 @@
 
     src     = get_namespace [ 'Test'; 'More' ]
     globals = new ['ResizableStringArray']
-    globals = push 'ok'
-    globals = push 'plan'
+    push globals, 'ok'
+    push globals, 'plan'
 
     exporter = new ['Exporter']
     exporter.'import'( src :named('source'), globals :named('globals') )
@@ -385,8 +385,8 @@
     src     = get_namespace [ 'Test'; 'More' ]
     dest    = get_namespace ['foo']
     globals = new ['ResizableStringArray']
-    globals = push 'ok'
-    globals = push 'plan'
+    push globals, 'ok'
+    push globals, 'plan'
 
     exporter = new ['Exporter']
     exporter.'import'( src :named('source'), dest :named('destination'), globals :named('globals') )

Modified: branches/gsoc_threads/t/pmc/filehandle.t
==============================================================================
--- branches/gsoc_threads/t/pmc/filehandle.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/filehandle.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 18;
+use Parrot::Test tests => 20;
 use Parrot::Test::Util 'create_tempfile';
 use Parrot::Test::Util 'create_tempfile';
 
@@ -263,7 +263,7 @@
     \$I0 = filehandle.'eof'()
     if \$I0 goto end_read_loop
 
-    test_line = readline filehandle
+    test_line = filehandle.'readline'()
     if test_line == "" goto end_read_loop
     test_line = chomp( test_line )
     \$I1 = test_line
@@ -453,26 +453,46 @@
 
     \$P1.'open'('$temp_file')
 
-    \$S1 = \$P1.'readline'()
-    if \$S1 == "1234567890\\n" goto ok_1
-print \$S1
+    .local string line
+    line = \$P1.'readline'()
+    if line == "1234567890\\n" goto ok_1
+print line
     print 'not '
   ok_1:
     say 'ok 1 - \$S1 = \$P1.readline() # read with utf8 encoding on'
 
-    \$S2 = \$P1.'readline'()
-    if \$S2 == \$S0 goto ok_2
-print \$S2
+    line = \$P1.'readline'()
+    if line == \$S0 goto ok_2
+print line
     print 'not '
   ok_2:
     say 'ok 2 - \$S2 = \$P1.readline() # read iso-8859-1 string'
 
     \$P1.'close'()
 
+    \$I1 = charset line
+    \$S2 = charsetname \$I1
+    if \$S2 == 'unicode' goto ok_3
+    print \$S2
+    print 'not '
+  ok_3:
+    say 'ok 3 # unicode charset'
+
+
+    \$I1 = encoding line
+    \$S2 = encodingname \$I1
+    if \$S2 == 'utf8' goto ok_4
+    print \$S2
+    print 'not '
+  ok_4:
+    say 'ok 4 # utf8 encoding'
+
 .end
 CODE
 ok 1 - $S1 = $P1.readline() # read with utf8 encoding on
 ok 2 - $S2 = $P1.readline() # read iso-8859-1 string
+ok 3 # unicode charset
+ok 4 # utf8 encoding
 OUT
 
 
@@ -586,7 +606,6 @@
 .sub 'main'
     .local pmc pipe, conf, interp
     .local string cmd
-    pipe = new ['FileHandle']
 
     interp = getinterp
     conf = interp[.IGLOBALS_CONFIG_HASH]
@@ -601,7 +620,8 @@
     aux = conf['exe']
     cmd .= aux
 
-    pipe = open cmd, "rp"
+    pipe = new ['FileHandle']
+    pipe.'open'(cmd, "rp")
     pipe.'readall'()
     pipe.'close'()
     print "expect 0 exit status: "
@@ -609,7 +629,8 @@
     say $I0
 
     cmd .= ' --this_is_not_a_valid_option'
-    pipe = open cmd, "rp"
+    pipe = new ['FileHandle']
+    pipe.'open'(cmd, "rp")
     pipe.'readall'()
     pipe.'close'()
     print "expect 1 exit status: "
@@ -623,6 +644,84 @@
 expect 1 exit status: 1
 OUTPUT
 
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', "timely destruction" );
+.const string temp_file = '%s'
+.sub main :main
+    interpinfo $I0, 2    # GC mark runs
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'w')
+        needs_destroy $P0
+    print $P0, "a line\n"
+    null $P0            # kill it
+    sweep 0            # a lazy GC has to close the PIO
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'r')
+    $S0 = $P0.'read'(20)
+    print $S0
+.end
+CODE
+a line
+OUTPUT
+
+my (undef, $no_such_file) = create_tempfile( UNLINK => 1, OPEN => 0 );
+
+pir_output_is( sprintf( <<'CODE', $no_such_file, $temp_file ), <<'OUTPUT', "get_bool" );
+.const string no_such_file = '%s'
+.const string temp_file    = '%s'
+
+.sub main :main
+    push_eh read_non_existent_file
+    $P0 = new ['FileHandle']
+    $P0.'open'(no_such_file, 'r')
+
+    print "Huh: '"
+    print no_such_file
+    print "' exists? - not "
+ok1:
+    say "ok 1"
+
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'w')
+    $P0.'print'("a line\n")
+    $P0.'print'("a line\n")
+    $P0.'close'()
+
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'r')
+    if $P0, ok2
+    print "not "
+ok2:    say "ok 2"
+    $S0 = $P0.'read'(1024)
+    $S0 = $P0.'read'(1024)
+    unless $P0, ok3
+    print "not "
+ok3:    say "ok 3"
+    defined $I0, $P0
+    if $I0, ok4
+    print "not "
+ok4:    say "ok 4"
+    $P0.'close'()
+    defined $I0, $P0        # closed file is still defined
+    if $I0, ok5
+    print "not "
+ok5:    say "ok 5"
+    unless $P0, ok6        # but false
+    print "not "
+ok6:    say "ok 6"
+    .return ()
+read_non_existent_file:
+    pop_eh
+    branch ok1
+.end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+OUTPUT
+
 # TT #1178
 # L<PDD22/I\/O PMC API/=item get_fd>
 # NOTES: this is going to be platform dependent

Modified: branches/gsoc_threads/t/pmc/fixedintegerarray.t
==============================================================================
--- branches/gsoc_threads/t/pmc/fixedintegerarray.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/fixedintegerarray.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,7 +19,7 @@
 
 .sub 'main' :main
     .include 'test_more.pir'
-    plan(33)
+    plan(36)
 
     test_set_size()
     test_reset_size()
@@ -31,6 +31,8 @@
     test_interface_done()
     test_get_iter()
     test_equality()
+    test_repr()
+    test_sort()
     test_new_style_init()
     test_invalid_init_tt1509()
 .end
@@ -227,7 +229,7 @@
 .end
 
 .sub 'test_equality'
-    .local pmc a1, a2
+    .local pmc a1, a2, a3
     a1 = new ['FixedIntegerArray']
     a2 = new ['FixedIntegerArray']
 
@@ -247,6 +249,20 @@
 
     a2[1] = 84
     is(a1, a2, "Equal when second element same")
+
+    a3 = new ['Complex']
+    isnt(a1, a3, "Different PMC type is not equal")
+.end
+
+.sub 'test_repr'
+    .local pmc a1
+    .local string r
+    a1 = new ['FixedIntegerArray']
+    a1 = 2
+    a1[0] = 7
+    a1[1] = 1
+    r = get_repr a1
+    is(r, '[ 7, 1 ]', 'get_repr')
 .end
 
 .sub 'test_new_style_init'
@@ -256,6 +272,23 @@
     is($I0, 10, "New style init creates the correct # of elements")
 .end
 
+.sub 'test_sort'
+    .local pmc a1, a2
+    a1 = new ['FixedIntegerArray'], 3
+    a1[0] = 7
+    a1[1] = 1
+    a1[2] = 5
+
+    a2 = new ['FixedIntegerArray'], 3
+    a2[0] = 1
+    a2[1] = 5
+    a2[2] = 7
+
+    a1.'sort'()
+    $I0 = iseq a1, a2
+    is($I0, 1, 'default sort')
+.end
+
 .sub test_invalid_init_tt1509
     throws_substring(<<'CODE', 'FixedIntegerArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
     .sub main
@@ -270,6 +303,8 @@
 CODE
 .end
 
+
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/gsoc_threads/t/pmc/freeze.t
==============================================================================
--- branches/gsoc_threads/t/pmc/freeze.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/freeze.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -352,42 +352,51 @@
 ok same
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "freeze class" );
-    newclass P10, "Foo"
-    set S10, P10
-    print S10
+pir_output_is( <<'CODE', <<'OUTPUT', "freeze class" );
+.const string fpmc = 'temp.fpmc'
+.sub 'main' :main
+    $P10 = newclass "Foo"
+    $S10 = $P10
+    print $S10
     print "\n"
-    freeze S11, P10
+    freeze $S11, $P10
     print "ok 1\n"
-    open P3, "temp.fpmc", 'w'
-    print P3, S11
-    close P3
+
+    $P0 = new ['FileHandle']
+    $P0.'open'(fpmc, 'w')
+    $P0.'print'($S11)
+    $P0.'close'()
     print "ok 2\n"
-    end
+.end
 CODE
 Foo
 ok 1
 ok 2
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "thaw class into new interpreter" );
-    set S3, "temp.fpmc"
-    .include "stat.pasm"
-    stat I0, S3, .STAT_FILESIZE
-    gt I0, 1, ok1
-    print "stat failed\n"
+pir_output_is( <<'CODE', <<'OUTPUT', "thaw class into new interpreter" );
+.const string fpmc = "temp.fpmc"
+.sub 'main' :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(fpmc, 'r')
+    if $P0 goto ok1
+
+    .include 'stdio.pasm'
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("couldn't open fpmc for reading")
     exit 1
+
 ok1:
-    open P3, S3, 'r'
-    read S3, P3, I0
-    close P3
+    $S3 = $P0.'readall'()
+    $P0.'close'()
     print "ok 1\n"
-    thaw P4, S3
+    $P4 = thaw $S3
     print "ok 2\n"
-    set S10, P4
-    print S10
+    $S10 = $P4
+    print $S10
     print "\n"
-    end
+.end
 CODE
 ok 1
 ok 2
@@ -413,54 +422,66 @@
 Foo
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "freeze class w attr" );
-    newclass P10, "Foo"
-    addattribute P10, ".aa"
-    set S10, P10
-    print S10
+pir_output_is( <<'CODE', <<'OUTPUT', "freeze class w attr" );
+.const string fpmc = 'temp.fpmc'
+.sub 'main' :main
+    $P10 = newclass "Foo"
+    addattribute $P10, ".aa"
+    $S10 = $P10
+    print $S10
     print "\n"
-    freeze S11, P10
+    $S11 = freeze $P10
     print "ok 1\n"
-    open P3, "temp.fpmc", 'w'
-    print P3, S11
-    close P3
+
+    $P0 = new ['FileHandle']
+    $P0.'open'(fpmc, 'w')
+    $P0.'print'($S11)
+    $P0.'close'()
     print "ok 2\n"
-    end
+.end
 CODE
 Foo
 ok 1
 ok 2
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "thaw class w attr into new interpreter" );
-    set S3, "temp.fpmc"
-    .include "stat.pasm"
-    stat I0, S3, .STAT_FILESIZE
-    gt I0, 1, ok1
-    print "stat failed\n"
+pir_output_is( <<'CODE', <<'OUTPUT', "thaw class w attr into new interpreter" );
+.const string fpmc = "temp.fpmc"
+.sub 'main' :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(fpmc, 'r')
+    if $P0 goto ok1
+
+    .include 'stdio.pasm'
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("couldn't open fpmc for reading\n")
     exit 1
+
 ok1:
-    open P3, S3, 'r'
-    read S3, P3, I0
-    close P3
-    # print S3
-    # print "\n"
+    $S3 = $P0.'readall'()
+    $P0.'close'()
     print "ok 1\n"
-    thaw P4, S3
+
+    $P4 = thaw $S3
     print "ok 2\n"
-    set S10, P4
-    print S10
+
+    $S10 = $P4
+    print $S10
     print "\n"
 
-    new P5, S10
+    $P5 = new $S10
     print "ok 3\n"
-    new P6, ['String']
-    set P6, "ok 5\n"
-    setattribute P5, '.aa', P6
+
+    $P6 = new ['String']
+    $P6 = "ok 5\n"
+
+    setattribute $P5, '.aa', $P6
     print "ok 4\n"
-    getattribute P7, P5, '.aa'
-    print P7
-    end
+
+    $P7 = getattribute $P5, '.aa'
+    print $P7
+.end
 CODE
 ok 1
 ok 2
@@ -470,43 +491,47 @@
 ok 5
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "thaw class w attr same interp" );
-    newclass P10, "Foo"
-    addattribute P10, ".aa"
-    addattribute P10, ".bb"
-    set S10, P10
-    print S10
+pir_output_is( <<'CODE', <<'OUTPUT', "thaw class w attr same interp" );
+.const string fpmc = 'temp.fpmc'
+.sub 'main' :main
+    $P10 = newclass "Foo"
+    addattribute $P10, ".aa"
+    addattribute $P10, ".bb"
+    $S10 = $P10
+    print $S10
     print "\n"
-    freeze S3, P10
-    open P3, "temp.fpmc", 'w'
-    print P3, S3
-    close P3
 
-    # print S3
-    # print "\n"
+    $S3 = freeze $P10
+    $P0 = new ['FileHandle']
+    $P0.'open'(fpmc, 'w')
+    $P0.'print'($S3)
+    $P0.'close'()
     print "ok 1\n"
-    thaw P4, S3
+
+    $P4 = thaw $S3
     print "ok 2\n"
-    set S10, P4
-    print S10
+
+    $S10 = $P4
+    print $S10
     print "\n"
 
-    new P5, S10
+    $P5 = new $S10
     print "ok 3\n"
-    new P6, ['String']
-    set P6, "ok 5\n"
-    setattribute P5, ["Foo"], ".aa", P6
-    new P6, ['String']
-    set P6, "ok 6\n"
-    setattribute P5, ["Foo"], ".bb", P6
-    print "ok 4\n"
-    getattribute P7, P5, ".aa"
-    print P7
-    getattribute P7, P5, ".bb"
-    print P7
-    end
 
+    $P6 = new ['String']
+    $P6 = "ok 5\n"
+    setattribute $P5, ["Foo"], ".aa", $P6
+
+    $P6 = new ['String']
+    $P6 = "ok 6\n"
+    setattribute $P5, ["Foo"], ".bb", $P6
+    print "ok 4\n"
 
+    $P7 = getattribute $P5, ".aa"
+    print $P7
+    $P7 = getattribute $P5, ".bb"
+    print $P7
+.end
 CODE
 Foo
 ok 1
@@ -518,37 +543,42 @@
 ok 6
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "thaw object w attr into same interpreter" );
-    newclass P10, "Foo"
-    addattribute P10, ".aa"
-    addattribute P10, ".bb"
-    new P10, ['Foo']
-    print S10
-    freeze S3, P10
-    open P3, "temp.fpmc", 'w'
-    print P3, S3
-    close P3
+pir_output_is( <<'CODE', <<'OUTPUT', "thaw object w attr into same interpreter" );
+.const string fpmc = 'temp.fpmc'
+.sub 'main' :main
+    $P10 = newclass "Foo"
+    addattribute $P10, ".aa"
+    addattribute $P10, ".bb"
+
+    $P10 = new ['Foo']
+    $S3 = freeze $P10
     print "ok 1\n"
+    $P0 = new ['FileHandle']
+    $P0.'open'(fpmc, 'w')
+    $P0.'print'($S3)
+    $P0.'close'()
 
-    thaw P5, S3
+    $P5 = thaw $S3
     print "ok 2\n"
-    typeof S10, P5
-    print S10
+
+    $S10 = typeof $P5
+    print $S10
     print "\n"
 
     print "ok 3\n"
-    new P6, ['String']
-    set P6, "ok 5\n"
-    setattribute P5, ["Foo"], ".aa", P6
-    new P6, ['String']
-    set P6, "ok 6\n"
-    setattribute P5, ["Foo"], ".bb", P6
+    $P6 = new ['String']
+    $P6 = "ok 5\n"
+    setattribute $P5, ["Foo"], ".aa", $P6
+    $P6 = new ['String']
+    $P6 = "ok 6\n"
+    setattribute $P5, ["Foo"], ".bb", $P6
     print "ok 4\n"
-    getattribute P7, P5, ".aa"
-    print P7
-    getattribute P7, P5, ".bb"
-    print P7
-    end
+
+    $P7 = getattribute $P5, ".aa"
+    print $P7
+    $P7 = getattribute $P5, ".bb"
+    print $P7
+.end
 CODE
 ok 1
 ok 2
@@ -559,37 +589,44 @@
 ok 6
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "thaw object w attr into new interpreter" );
-    set S3, "temp.fpmc"
-    .include "stat.pasm"
-    stat I0, S3, .STAT_FILESIZE
-    gt I0, 1, ok1
-    print "stat failed\n"
-    exit 1
+pir_output_is( <<'CODE', <<'OUTPUT', "thaw object w attr into new interpreter" );
+.const string fpmc = 'temp.fpmc'
+.sub 'main' :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(fpmc, 'r')
+    if $P0 goto ok1
+
+    .include 'stdio.pasm'
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'("open failed\n")
+
 ok1:
-    open P3, S3, 'r'
-    read S3, P3, I0
-    close P3
+    $S3 = $P0.'readall'()
+    $P0.'close'()
 
-    thaw P5, S3
+    $P5 = thaw $S3
     print "ok 2\n"
-    typeof S10, P5
-    print S10
+    $S10 = typeof $P5
+    print $S10
     print "\n"
 
     print "ok 3\n"
-    new P6, ['String']
-    set P6, "ok 5\n"
-    setattribute P5, ["Foo"], ".aa", P6
-    new P6, ['String']
-    set P6, "ok 6\n"
-    setattribute P5, ["Foo"], ".bb", P6
+    $P6 = new ['String']
+    $P6 = "ok 5\n"
+    setattribute $P5, ["Foo"], ".aa", $P6
+
+    $P6 = new ['String']
+    $P6 = "ok 6\n"
+    setattribute $P5, ["Foo"], ".bb", $P6
+
     print "ok 4\n"
-    getattribute P7, P5, ".aa"
-    print P7
-    getattribute P7, P5, ".bb"
-    print P7
-    end
+    $P7 = getattribute $P5, ".aa"
+    print $P7
+
+    $P7 = getattribute $P5, ".bb"
+    print $P7
+.end
 CODE
 ok 2
 Foo

Modified: branches/gsoc_threads/t/pmc/integer.t
==============================================================================
--- branches/gsoc_threads/t/pmc/integer.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/integer.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,7 +19,7 @@
 .sub 'test' :main
     .include 'test_more.pir'
 
-    plan(62)
+    plan(61)
     test_init()
     test_basic_math()
     test_truthiness_and_definedness()
@@ -321,8 +321,6 @@
     is($P2,3)
     mod $P2, $P0, $P1
     is($P2,0)
-    pow $P2, $P0, $P1
-    is($P2,36)
 .end
 
 

Modified: branches/gsoc_threads/t/pmc/io.t
==============================================================================
--- branches/gsoc_threads/t/pmc/io.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/io.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -7,8 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 41;
-use Parrot::Test::Util 'create_tempfile';
+use Parrot::Test tests => 32;
 use Parrot::Test::Util 'create_tempfile';
 
 =head1 NAME
@@ -41,145 +40,54 @@
 
 my (undef, $temp_file) = create_tempfile( UNLINK => 1 );
 
-pasm_output_is( <<"CODE", <<'OUTPUT', "open/close" );
-    open P0, "$temp_file", 'w'
-    print P0, "a line\\n"
-    close P0
-    open P0, "$temp_file", 'r'
-    read S0, P0, 20
-    print S0
-    end
-CODE
-a line
-OUTPUT
-
-pasm_output_is( <<"CODE", <<'OUTPUT', "timely destruction" );
-    interpinfo I0, 2    # GC mark runs
-    open P0, "$temp_file", 'w'
-        needs_destroy P0
-    print P0, "a line\\n"
-    null P0            # kill it
-    sweep 0            # a lazy GC has to close the PIO
-    open P0, "$temp_file", 'r'
-    read S0, P0, 20
-    print S0
-    end
-CODE
-a line
-OUTPUT
-
-# TT #1178
-pir_output_is( <<'CODE', <<'OUTPUT', "get_fd()/fdopen" );
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', "timely destruction" );
+.const string temp_file = '%s'
 .sub main :main
-    getstdout $P0
-    $I0 = $P0.'get_fd'()
-    fdopen $P1, $I0, 'w'
-    defined $I0, $P1
-    unless $I0, nok
-    print $P1, "ok\n"
-    close $P1
-    end
-nok:
-    print "fdopen failed\n"
+    interpinfo $I0, 2    # GC mark runs
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'w')
+    needs_destroy $P0
+    print $P0, "a line\n"
+    null $P0            # kill it
+    sweep 0            # a lazy GC has to close the PIO
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'r')
+    $S0 = $P0.'read'(20)
+    print $S0
 .end
 CODE
-ok
+a line
 OUTPUT
 
-# TT #1178
-pir_output_is( <<'CODE', <<'OUTPUT', 'fdopen - no close' );
+pir_output_is( <<'CODE', <<'OUTPUT', "read on invalid fh should throw exception" );
 .sub main :main
-    getstdout $P0
-    $I0 = $P0.'get_fd'()
-    fdopen $P1, $I0, 'w'
-    defined $I0, $P1
-    unless $I0, nok
-    print $P1, "ok\n"
-    end
-nok:
-    print "fdopen failed\n"
-.end
-CODE
-ok
-OUTPUT
-
-my (undef, $no_such_file) = create_tempfile( UNLINK => 1, OPEN => 0 );
-
-pasm_output_is( <<"CODE", <<'OUTPUT', "get_bool" );
-    push_eh read_non_existent_file
-    open P0, "$no_such_file", 'r'
-
-    print "Huh: '$no_such_file' exists? - not "
-ok1:
-    say "ok 1"
-
-    open P0, "$temp_file", 'w'
-    print P0, "a line\\n"
-    print P0, "a line\\n"
-    close P0
-
-    open P0, "$temp_file", 'r'
-    if P0, ok2
-    print "not "
-ok2:    say "ok 2"
-    read S0, P0, 1024
-    read S0, P0, 1024
-    unless P0, ok3
-    print "not "
-ok3:    say "ok 3"
-    defined I0, P0
-    if I0, ok4
-    print "not "
-ok4:    say "ok 4"
-    close P0
-    defined I0, P0        # closed file is still defined
-    if I0, ok5
-    print "not "
-ok5:    say "ok 5"
-    unless P0, ok6        # but false
-    print "not "
-ok6:    say "ok 6"
-    end
-read_non_existent_file:
-    pop_eh
-    branch ok1
-CODE
-ok 1
-ok 2
-ok 3
-ok 4
-ok 5
-ok 6
-OUTPUT
-
-pasm_output_is( <<"CODE", <<'OUTPUT', "read on invalid fh should throw exception" );
-    new P0, ['FileHandle']
+    new $P0, ['FileHandle']
 
     push_eh _readline_handler
-    readline S0, P0
+    $S0 = $P0.'readline'()
     print "not "
 
 _readline_handler:
-        print "ok 1\\n"
+        print "ok 1\n"
         pop_eh
 
     push_eh _read_handler
-    read S0, P0, 1
+    $S0 = $P0.'read'(1)
     print "not "
 
 _read_handler:
-        print "ok 2\\n"
+        print "ok 2\n"
         pop_eh
 
     push_eh _print_handler
-    print P0, "kill me now\\n"
+    print $P0, "kill me now\n"
     print "not "
 
 _print_handler:
-        print "ok 3\\n"
+        print "ok 3\n"
         pop_eh
 
-    end
+.end
 CODE
 ok 1
 ok 2
@@ -205,15 +113,21 @@
 print $FOO "2\n1\n";
 close $FOO;
 
-pasm_output_is( <<"CODE", <<'OUTPUT', "open and readline" );
-    open P0, "$temp_file"
-    set S0, ""
-    set S1, ""
-    readline S0, P0
-    readline S1, P0
-    print S1
-    print S0
-    end
+pir_output_is( sprintf( <<'CODE', $temp_file ), <<'OUTPUT', "open and readline" );
+.const string temp_file = '%s'
+.sub 'main' :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file)
+
+    $S0 = ''
+    $S1 = ''
+
+    $S0 = $P0.'readline'()
+    $S1 = $P0.'readline'()
+
+    print $S1
+    print $S0
+.end
 CODE
 1
 2
@@ -223,15 +137,21 @@
 print $FOO "12\n34";
 close $FOO;
 
-pasm_output_is( <<"CODE", <<'OUTPUT', "open and readline, no final newline" );
-    open P0, "$temp_file"
-    set S0, ""
-    set S1, ""
-    readline S0, P0
-    readline S1, P0
-    print S1
-    print S0
-    end
+pir_output_is( sprintf( <<'CODE', $temp_file ), <<'OUTPUT', "open and readline, no final newline" );
+.const string temp_file = '%s'
+.sub 'main' :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file)
+
+    $S0 = ''
+    $S1 = ''
+
+    $S0 = $P0.'readline'()
+    $S1 = $P0.'readline'()
+
+    print $S1
+    print $S0
+.end
 CODE
 3412
 OUTPUT
@@ -239,26 +159,30 @@
 ($FOO, $temp_file) = create_tempfile( UNLINK => 1 );
 close $FOO;
 
-pasm_output_is( <<"CODE", <<'OUTPUT', "open & print" );
-   set I0, -12
-   set N0, 2.2
-   set S0, "Foo"
-   new P0, ['String']
-   set P0, "Bar\\n"
-
-   open P1, "$temp_file", "w"
-   print P1, I0
-   print P1, N0
-   print P1, S0
-   print P1, P0
-   close P1
-
-   open P2, "$temp_file"
-   readline S1, P2
-   close P2
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', "open & print" );
+.const string temp_file = '%s'
+.sub 'main' :main
+    $I0 = -12
+    $N0 = 2.2
+    $S0 = "Foo"
+    $P0 = new ['String']
+    $P0 = "Bar\n"
+
+    $P1 = new ['FileHandle']
+    $P1.'open'(temp_file, 'w')
+    $P1.'print'($I0)
+    $P1.'print'($N0)
+    $P1.'print'($S0)
+    $P1.'print'($P0)
+    $P1.'close'()
+
+    $P2 = new ['FileHandle']
+    $P2.'open'(temp_file)
+    $S1 = $P2.'readline'()
+    $P2.'close'()
 
-   print S1
-   end
+    print $S1
+.end
 CODE
 -122.2FooBar
 OUTPUT
@@ -267,41 +191,47 @@
 close $FOO;
 
 # write to file opened for reading
-pasm_output_is( <<"CODE", <<'OUTPUT', "3-arg open" );
-   open P1, "$temp_file", 'w'
-   print P1, "Foobar\\n"
-   close P1
-
-   push_eh _print_to_read_only
-
-   open P2, "$temp_file", 'r'
-   print P2, "baz\\n"
-   say "skipped"
-
-_print_to_read_only:
-   say "caught writing to file opened for reading"
-   pop_eh
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', "3-arg open" );
+.const string temp_file = '%s'
+.sub 'main' :main
+    $P1 = new ['FileHandle']
+    $P1.'open'(temp_file, 'w')
+    $P1.'print'("Foobar\n")
+    $P1.'close'()
+
+    push_eh _print_to_read_only
+
+    $P2 = new ['FileHandle']
+    $P2.'open'(temp_file, 'r')
+    $P2.'print'("baz\n")
+    say "skipped"
 
-   close P2
-
-   open P3, "$temp_file", 'r'
-   readline S1, P3
-   close P3
-   print S1
+  _print_to_read_only:
+    say "caught writing to file opened for reading"
+    pop_eh
 
+    $P2.'close'()
 
-   end
+    $P3 = new ['FileHandle']
+    $P3.'open'(temp_file, 'r')
+    $S1 = $P3.'readline'()
+    $P3.'close'()
+    print $S1
+.end
 CODE
 caught writing to file opened for reading
 Foobar
 OUTPUT
 
-pasm_output_is( <<"CODE", <<'OUTPUT', 'open and close' );
-   open P1, "$temp_file", "w"
-   print P1, "Hello, World!\\n"
-   close P1
-   say "done"
-   end
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', 'open and close' );
+.const string temp_file = '%s'
+.sub 'main' :main
+    $P1 = new ['FileHandle']
+    $P1.'open'(temp_file, "w")
+    $P1.'print'("Hello, World!\n")
+    $P1.'close'()
+    say "done"
+.end
 CODE
 done
 OUTPUT
@@ -310,11 +240,14 @@
 Hello, World!
 OUTPUT
 
-pasm_output_is( <<"CODE", '', 'append' );
-   open P1, "$temp_file", 'wa'
-   print P1, "Parrot flies\\n"
-   close P1
-   end
+pir_output_is( sprintf(<<'CODE', $temp_file), '', 'append' );
+.const string temp_file = '%s'
+.sub 'main' :main
+    $P1 = new ['FileHandle']
+    $P1.'open'(temp_file, 'wa')
+    $P1.'print'("Parrot flies\n")
+    $P1.'close'()
+.end
 CODE
 
 file_content_is( $temp_file, <<'OUTPUT', 'append file contents' );
@@ -322,54 +255,62 @@
 Parrot flies
 OUTPUT
 
-pasm_output_is( <<"CODE", '', 'write to file' );
-   open P1, "$temp_file", 'w'
-   print P1, "Parrot overwrites\\n"
-   close P1
-   end
+pir_output_is( sprintf(<<'CODE', $temp_file), '', 'write to file' );
+.const string temp_file = '%s'
+.sub 'main' :main
+    $P1 = new ['FileHandle']
+    $P1.'open'(temp_file, 'w')
+    $P1.'print'("Parrot overwrites\n")
+    $P1.'close'()
+.end
 CODE
 
 file_content_is( $temp_file, <<'OUTPUT', 'file contents' );
 Parrot overwrites
 OUTPUT
 
-pasm_output_is( <<"CODE", '', "Parrot_io_flush on buffer full" );
-   set I0, 0
-   set I1, 10000
+pir_output_is( <<"CODE", '', "Parrot_io_flush on buffer full" );
+.sub "main"
+   set \$I0, 0
+   set \$I1, 10000
 
-   open P0, "$temp_file", 'w'
+   new \$P0, ['FileHandle']
+   \$P0.'open'("$temp_file", 'w')
 
 PRINT:
-   ge I0, I1, END
-   print P0, "words\\n"
-   inc I0
+   ge \$I0, \$I1, END
+   print \$P0, "words\\n"
+   inc \$I0
    branch PRINT
 
 END:
-   close P0
-   end
+   \$P0.'close'()
+.end
 CODE
 
 file_content_is( $temp_file, <<'OUTPUT' x 10000, 'buffered file contents' );
 words
 OUTPUT
 
-pir_output_is( <<"CODE", <<'OUTPUT', "turn off buffering" );
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', "turn off buffering" );
+.const string temp_file = '%s'
+
 .sub main :main
-   open \$P0, "$temp_file", 'w'
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'w')
 
-#  set buffer type
-   \$P0.'buffer_type'('unbuffered')
+#   set buffer type
+    $P0.'buffer_type'('unbuffered')
 
-#  get buffer type
-   \$S0 = \$P0.'buffer_type'()
-   print \$S0
-   print "\\n"
+#   get buffer type
+    $S0 = $P0.'buffer_type'()
+    print $S0
+    print "\n"
 
-   print \$P0, "Howdy World\\n"
+    print $P0, "Howdy World\n"
 
-   close \$P0
-   end
+    $P0.'close'()
+    end
 .end
 CODE
 unbuffered
@@ -379,50 +320,54 @@
 Howdy World
 OUTPUT
 
-pir_output_is( <<"CODE", <<'OUTPUT', 'I/O buffering' );
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', 'I/O buffering' );
+.const string temp_file = '%s'
+
 .sub main
     .local string filename
-    filename = "$temp_file"
-    \$P1 = open filename, 'w'
+    filename = temp_file
+    $P1 = new ['FileHandle']
+    $P1.'open'(filename, 'w')
     .local int count, max, nltest
     count = 0
     max = 10000
   LOOP:
     if count > max goto DONE
-    \$S1 = count
-    \$S1 = concat \$S1, " "
-    print \$P1, \$S1
+    $S1 = count
+    $S1 = concat $S1, " "
+    print $P1, $S1
     inc count
     nltest = mod count, 20
     if nltest goto LOOP
-    print \$P1, "\\n"
+    print $P1, "\n"
     goto LOOP
   DONE:
-    print \$P1, "\\n"
-    close \$P1
+    print $P1, "\n"
+    $P1.'close'()
 
   PART_2:
-    \$P1 = open filename
-    \$I0 = 0
+    $P1 = new ['FileHandle']
+    $P1.'open'(filename)
+    $I0 = 0
   LINE:
-    \$S1 = readline \$P1
-    unless \$S1 goto SUCCESS
-    \$S1 = chopn \$S1, 1
+    $S1 = $P1.'readline'()
+    unless $S1 goto SUCCESS
+    $S1 = chopn $S1, 1
 
   NEXT_NR:
-    \$I1 = length \$S1
-    if \$I1 <= 1 goto LINE
-    \$S2 = ""
+    $I1 = length $S1
+    if $I1 <= 1 goto LINE
+    $S2 = ""
   SPLIT:
-    \$S3 = substr \$S1, 0, 1
-    \$S1 = replace \$S1, 0, 1, ""
-    if \$S3 == " " goto GOT_NR
-    \$S2 = concat \$S2, \$S3
+    $S3 = substr $S1, 0, 1
+    $S1 = replace $S1, 0, 1, ""
+    if $S3 == " " goto GOT_NR
+    $S2 = concat $S2, $S3
     goto SPLIT
   GOT_NR:
-    \$I1 = \$S2
-    if \$I0 != \$I1 goto FAILED
-    inc \$I0
+    $I1 = $S2
+    if $I0 != $I1 goto FAILED
+    inc $I0
     goto NEXT_NR
 
   FAILED:
@@ -439,18 +384,21 @@
 
 # TT #1178
 pir_output_is( <<'CODE', <<'OUT', 'standard file descriptors' );
+.include 'stdio.pasm'
 .sub main :main
-    getstdin $P0
-    $I0 = $P0.'get_fd'()
+    $P99 = getinterp
+    $P0  = $P99.'stdhandle'(.PIO_STDIN_FILENO)
+    $I0  = $P0.'get_fd'()
     # I0 is 0 on Unix and non-Null on stdio and win32
     print "ok 1\n"
-    getstdout $P1
+
+    $P1 = $P99.'stdhandle'(.PIO_STDOUT_FILENO)
     $I1 = $P1.'get_fd'()
     if $I1, OK_2
     print "not "
 OK_2:
     say "ok 2"
-    getstderr $P2
+    $P2 = $P99.'stdhandle'(.PIO_STDERR_FILENO)
     $I2 = $P2.'get_fd'()
     if $I2, OK_3
     print "not "
@@ -463,45 +411,31 @@
 ok 3
 OUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', 'printerr' );
-   new P0, ['String']
-   set P0, "This is a test\n"
-   printerr 10
-   printerr "\n"
-   printerr 1.0
-   printerr "\n"
-   printerr "foo"
-   printerr "\n"
-   printerr P0
-   end
-CODE
-10
-1
-foo
-This is a test
-OUTPUT
-
-pasm_output_is( <<'CODE', <<'OUTPUT', 'puts method' );
-   getstdout P2
-   can I0, P2, "puts"
-   if I0, ok1
-   print "not "
+pir_output_is( <<'CODE', <<'OUTPUT', 'puts method' );
+.include 'stdio.pasm'
+.sub main :main
+    $P0 = getinterp
+    $P2 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    can $I0, $P2, "puts"
+    if $I0, ok1
+    print "not "
 ok1:   print "ok 1\n"
-   set_args "0,0", P2, "ok 2\n"
-   callmethodcc P2, "puts"
-   end
+    set_args "0,0", $P2, "ok 2\n"
+    callmethodcc $P2, "puts"
+.end
 CODE
 ok 1
 ok 2
 OUTPUT
 
 pir_output_is( <<'CODE', <<'OUTPUT', 'puts method - PIR' );
-
+.include 'stdio.pasm'
 .sub main :main
    .local string s
    s = "ok 2\n"
    .local pmc io
-   io = getstdout
+   $P0 = getinterp
+   io = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
    $I0 = can io, "puts"
    if $I0 goto ok1
    print "not "
@@ -515,86 +449,115 @@
 OUTPUT
 
 pasm_output_is( <<'CODE', <<'OUTPUT', 'callmethod puts' );
-   getstderr P2    # the object
-   set S0, "puts"    # method
-   set S5, "ok 1\n"    # 2nd param
-   set_args "0,0", P2, S5
-   callmethodcc P2, S0
-   set S5, "ok 2\n"
-   set_args "0,0", P2, S5
-   callmethodcc P2, S0
-   end
+.include 'stdio.pasm'
+    getinterp P0                 # invocant
+    set I0, .PIO_STDERR_FILENO   # 1st argument
+    set_args "0,0", P0, I0
+    callmethodcc P0, "stdhandle"
+    get_results "0", P2          # STDERR
+
+    set S0, "puts"               # method
+    set S5, "ok 1\n"             # 2nd param
+    set_args "0,0", P2, S5
+    callmethodcc P2, S0
+
+    set S5, "ok 2\n"
+    set_args "0,0", P2, S5
+    callmethodcc P2, S0
+
+    end
 CODE
 ok 1
 ok 2
 OUTPUT
 
-pasm_output_is( <<"CODE", <<'OUTPUT', 'seek/tell' );
-   open P0, "$temp_file", 'w'
-   print P0, "Hello "
-   tell I0, P0
-   print P0, "World!"
-   seek P0, I0, 0
-   print P0, "Parrot!\\n"
-   close P0
-   say "ok 1"
-   open P0, "$temp_file", 'r'
-   read S0, P0, 65635
-   print S0
-   end
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', 'seek/tell' );
+.const string temp_file = '%s'
+.sub 'main' :main
+    $P0 = new ['FileHandle']
+
+    $P0.'open'(temp_file, 'w')
+    $P0.'print'("Hello ")
+    $I0 = $P0.'tell'()
+    $P0.'print'("World!")
+    $P0.'seek'(0, $I0)
+    $P0.'print'("Parrot!\n")
+    $P0.'close'()
+    say "ok 1"
+
+    $P0.'open'(temp_file, 'r')
+    $S0 = $P0.'read'(65635)
+    print $S0
+.end
 CODE
 ok 1
 Hello Parrot!
 OUTPUT
 
-pasm_error_output_like( <<"CODE", <<'OUTPUT', '32bit seek: exception' );
-   open P0, "$temp_file", 'w'
-   seek P0, -1, 0
-   say "error!"
-   end
+pir_error_output_like( sprintf(<<'CODE', $temp_file), <<'OUTPUT', '32bit seek: exception' );
+.const string temp_file = '%s'
+.sub main :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'w')
+    $P0.'seek'(-1, 0)
+    say "error!"
+.end
 CODE
-/seek failed \(32bit\)/
+/seek failed/
 OUTPUT
 
-pasm_error_output_like( <<"CODE", <<'OUTPUT', '64bit seek: exception' );
-   open P0, "$temp_file", 'w'
-   seek P0, -1, -1, 0
-   say "error!"
-   end
+pir_error_output_like( sprintf(<<'CODE', $temp_file), <<'OUTPUT', '64bit seek: exception' );
+.const string temp_file = '%s'
+.sub main :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'w')
+    $P0.'seek'(-1, -1, 0)
+    say "error!"
+.end
 CODE
-/seek failed \(64bit\)/
+/seek failed/
 OUTPUT
 
-pasm_output_is( <<"CODE", <<'OUTPUT', "peek" );
-    open P0, "$temp_file", 'w'
-    print P0, "a line\\n"
-    close P0
-    open P0, "$temp_file", 'r'
-    peek S0, P0
-    print S0
-    peek S1, P0
-    print S1
-    print "\\n"
-    read S2, P0, 2
-    peek S3, P0
-    print S3
-    print "\\n"
-    end
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', "peek" );
+.const string temp_file = '%s'
+.sub main :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'w')
+    print $P0, "a line\n"
+    $P0.'close'()
+
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'r')
+    $S0 = $P0.'peek'()
+    print $S0
+    $S1 = $P0.'peek'()
+    print $S1
+    print "\n"
+    $S2 = $P0.'read'(2)
+    $S3 = $P0.'peek'()
+    print $S3
+    print "\n"
+.end
 CODE
 aa
 l
 OUTPUT
 
-pasm_output_is( <<"CODE", <<'OUTPUT', "peek on an empty file" );
-    open P0, "$temp_file", 'w'
-    close P0
-    open P0, "$temp_file", 'r'
-    peek S0, P0
-    eq S0, "", OK1
+pir_output_is( sprintf(<<'CODE', $temp_file), <<'OUTPUT', "peek on an empty file" );
+.const string temp_file = '%s'
+.sub main :main
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'w')
+    $P0.'close'()
+
+    $P0 = new ['FileHandle']
+    $P0.'open'(temp_file, 'r')
+    $S0 = $P0.'peek'()
+    eq $S0, "", OK1
     print "not "
 OK1:
     say "ok 1"
-    end
+.end
 CODE
 ok 1
 OUTPUT
@@ -603,15 +566,17 @@
 .sub _main
     # Write something into a file
     .local pmc out
-    out = open "$temp_file", 'w'
+    out = new ['FileHandle']
+    out.'open'("$temp_file", 'w')
     print out, "0123456789\\n"
-    close out
+    out.'close'()
 
     # read file contents back in
     .local pmc in
-    in = open "$temp_file", 'r'
+    in = new ['FileHandle']
+    in.'open'("$temp_file", 'r')
     .local string from_file
-    from_file = read in, 20
+    from_file = in.'read'(20)
 
     # Extract part of the read in file
     .local string head_from_file
@@ -629,15 +594,17 @@
 .sub _main
     # Write something into a file
     .local pmc out
-    out = open "$temp_file", 'w'
+    out = new ['FileHandle']
+    out.'open'("$temp_file", 'w')
     print out, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\\n"
-    close out
+    out.'close'()
 
     .local pmc in
     .local string line
-    in = open '$temp_file', 'r'
-    line = read in, 50000
-    close in
+    in = new ['FileHandle']
+    in.'open'('$temp_file', 'r')
+    line = in.'read'(50000)
+    in.'close'()
 
     .local string sub_1
     sub_1 = ''
@@ -662,104 +629,33 @@
 sub_2: 345
 OUTPUT
 
-pir_error_output_like( <<'CODE', <<'OUT', 'read on null PMC throws exception');
-.sub main :main
-    null $P1
-    $S0 = read $P1, 1
-    end
-.end
-CODE
-/read from null/
-OUT
-
 ($FOO, $temp_file) = create_tempfile( UNLINK => 1 );
 
 print $FOO "T\xc3\xb6tsch\n";
 close $FOO;
 
-pir_output_is( <<"CODE", <<"OUTPUT", "utf8 read enabled" );
-.sub main :main
-    .local pmc pio
-    .local int len
-    .include "stat.pasm"
-    .local string f
-    f = '$temp_file'
-    len = stat f, .STAT_FILESIZE
-    pio = open f, 'r'
-    pio.'encoding'("utf8")
-    \$S0 = read pio, len
-    close pio
-    \$I1 = charset \$S0
-    \$S2 = charsetname \$I1
-    say \$S2
-
-    \$I1 = encoding \$S0
-    \$S2 = encodingname \$I1
-    say \$S2
-
-    \$I1 = find_charset 'iso-8859-1'
-    trans_charset \$S1, \$S0, \$I1
-    print \$S1
-.end
-CODE
-unicode
-utf8
-T\xf6tsch
-OUTPUT
-
-pir_output_is( <<"CODE", <<"OUTPUT", "utf8 read enabled - readline" );
+pir_output_is( sprintf(<<'CODE', $temp_file), <<"OUTPUT", "utf8 read enabled, read parts" );
+.const string temp_file = '%s'
 .sub main :main
     .local pmc pio
-    .local string f
-    f = '$temp_file'
-    pio = open f, 'r'
+    pio = new ['FileHandle']
+    pio.'open'(temp_file, 'r')
     pio.'encoding'("utf8")
-    \$S0 = readline pio
-    close pio
-    \$I1 = charset \$S0
-    \$S2 = charsetname \$I1
-    say \$S2
-
-    \$I1 = encoding \$S0
-    \$S2 = encodingname \$I1
-    say \$S2
-
-    \$I1 = find_charset 'iso-8859-1'
-    trans_charset \$S1, \$S0, \$I1
-    print \$S1
-.end
-CODE
-unicode
-utf8
-T\xf6tsch
-OUTPUT
-
-pir_output_is( <<"CODE", <<"OUTPUT", "utf8 read enabled, read parts" );
-.sub main :main
-    .local pmc pio
-    .local int len
-    .include "stat.pasm"
-    .local string f
-    f = '$temp_file'
-    len = stat f, .STAT_FILESIZE
-    pio = open f, 'r'
-    pio.'encoding'("utf8")
-    \$S0 = read pio, 2
-    len -= 2
-    \$S1 = read pio, len
-    \$S0 .= \$S1
-    close pio
-    \$I1 = charset \$S0
-    \$S2 = charsetname \$I1
-    say \$S2
-
-    \$I1 = encoding \$S0
-    \$S2 = encodingname \$I1
-    say \$S2
-
-    \$I1 = find_charset 'iso-8859-1'
-    trans_charset \$S1, \$S0, \$I1
-    print \$S1
+    $S0 = pio.'read'(2)
+    $S1 = pio.'read'(1024) # read the rest of the file (much shorter than 1K)
+    $S0 .= $S1
+    pio.'close'()
+    $I1 = charset $S0
+    $S2 = charsetname $I1
+    say $S2
+
+    $I1 = encoding $S0
+    $S2 = encodingname $I1
+    say $S2
+
+    $I1 = find_charset 'iso-8859-1'
+    trans_charset $S1, $S0, $I1
+    print $S1
 .end
 CODE
 unicode
@@ -775,9 +671,10 @@
 line 3
 EOS
     .local pmc pio, cl
-    pio = open    "$temp_file", 'w'
+    pio = new ['FileHandle']
+    pio.'open'("$temp_file", 'w')
     print pio, \$S0
-    close pio
+    pio.'close'()
     cl = new ['FileHandle']
     \$S1 = cl.'readall'('$temp_file')
     if \$S0 == \$S1 goto ok
@@ -797,10 +694,13 @@
 line 3
 EOS
     .local pmc pio, pio2
-    pio = open    "$temp_file", 'w'
+    pio = new ['FileHandle']
+    pio.'open'("$temp_file", 'w')
     print pio, \$S0
-    close pio
-    pio2 = open    "$temp_file", 'r'
+    pio.'close'()
+
+    pio2 = new ['FileHandle']
+    pio2.'open'("$temp_file", 'r')
     \$S1 = pio2.'readall'()
     if \$S0 == \$S1 goto ok
     print "not "
@@ -811,20 +711,6 @@
 ok
 OUTPUT
 
-pir_error_output_like( <<'CODE', <<"OUTPUT", "stat failed" );
-.sub main :main
-    .local pmc pio
-    .local int len
-    .include "stat.pasm"
-    .local string f
-    f = 'no_such_file'
-    len = stat f, .STAT_FILESIZE
-    print "never\n"
-.end
-CODE
-/stat failed:/
-OUTPUT
-
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/gsoc_threads/t/pmc/lexpad.t
==============================================================================
--- branches/gsoc_threads/t/pmc/lexpad.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/lexpad.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,9 +19,10 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(4)
+    plan(8)
 
     new_test()
+    test_keyed()
     test_iter()
 .end
 
@@ -36,7 +37,31 @@
 end:
 .end
 
+.sub test_keyed
+    .local pmc p1
+    .lex 'p1', p1
+
+    $P0 = getinterp
+    $P0 = $P0['lexpad']
+    $I0 = elements $P0
+    is($I0, 1, "get LexPad elements")
 
+    $I0 = exists $P0['p1']
+    is($I0, 1, ".lex exists_keyed true")
+
+    $I0 = exists $P0['nosuchlex']
+    is($I0, 0, ".lex exists_keyed false")
+
+    $P1 = new 'Integer'
+    push_eh eh
+    $P0['nosuchlex'] = $P1
+    ok(0, "setting a non existent .lex should throw")
+    goto end
+eh:
+    pop_eh
+    ok(1, "setting a non existent .lex throws")
+end:
+.end
 
 .sub 'test_iter'
 

Modified: branches/gsoc_threads/t/pmc/nci.t
==============================================================================
--- branches/gsoc_threads/t/pmc/nci.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/nci.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -608,24 +608,26 @@
 ok 1
 OUTPUT
 
-    pasm_output_is( <<'CODE', <<'OUTPUT', "nci_it" );
-  loadlib P1, "libnci_test"
+    pir_output_is( <<'CODE', <<'OUTPUT', "nci_it" );
+.loadlib 'io_ops'
+.sub 'main' :main
+  loadlib $P1, "libnci_test"
   printerr "loaded\n"
-  dlfunc P0, P1, "nci_it", "it"
+  dlfunc $P0, $P1, "nci_it", "it"
   printerr "dlfunced\n"
-  set S5, "ko\n"
-  set_args "0", S5
-  invokecc P0
-  get_results "0", I5
-  ne I5, 2, nok_1
+  set $S5, "ko\n"
+  set_args "0", $S5
+  invokecc $P0
+  get_results "0", $I5
+  ne $I5, 2, nok_1
   printerr "ok 2\n"
   end
 nok_1: printerr "nok 1\n"
-  printerr I5
+  printerr $I5
   printerr "\n"
   end
 nok_2: printerr "nok 2\n"
-  end
+.end
 CODE
 loaded
 dlfunced
@@ -636,6 +638,7 @@
     pir_output_is( <<'CODE', <<'OUTPUT', "nci_it" );
 
 .include "datatypes.pasm"
+.loadlib 'io_ops'
 
 .sub test :main
   loadlib $P1, "libnci_test"

Modified: branches/gsoc_threads/t/pmc/objects.t
==============================================================================
--- branches/gsoc_threads/t/pmc/objects.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/objects.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1603,46 +1603,46 @@
     new $P5, ['String']        # set attribute values
     set $P5, "i"       # attribute slots have reference semantics
     set_args "0,0", $P5, "i"
-    get_results ""
     callmethodcc $P13, "Foo54__set"
+    get_results ""
 
     new $P5, ['String']
     set $P5, "j"
     set_args "0,0", $P5, "j"
-    get_results ""
     callmethodcc  $P13,"Foo54__set"
+    get_results ""
 
     new $P5, ['String']
     set $P5, "k"
     set_args "0,0", $P5, "k"
-    get_results ""
     callmethodcc  $P13,"Bar54__set"
+    get_results ""
 
     new $P5, ['String']
     set $P5, "l"
     set_args "0,0", $P5, "l"
-    get_results ""
     callmethodcc  $P13,"Bar54__set"
+    get_results ""
 
     # now retrieve attributes
     set_args "0",  "i"
-    get_results "0", $P5
     callmethodcc  $P13,"Foo54__get"
+    get_results "0", $P5
     is( $P5, "i", 'got attrib i from Bar54->Foo54__get' )
 
     set_args "0",  "j"
-    get_results "0", $P5
     callmethodcc  $P13,"Foo54__get"
+    get_results "0", $P5
     is( $P5, "j", 'got attrib j from Bar54->Foo54__get' )
 
     set_args "0",  "k"
-    get_results "0", $P5
     callmethodcc  $P13,"Bar54__get"
+    get_results "0", $P5
     is( $P5, "k", 'got attrib k from Bar54->Bar54__get' )
 
     set_args "0",  "l"
-    get_results "0", $P5
     callmethodcc  $P13,"Bar54__get"
+    get_results "0", $P5
     is( $P5, "l", 'got attrib l from Bar54->Bar54__get' )
 .end
 

Modified: branches/gsoc_threads/t/pmc/packfile.t
==============================================================================
--- branches/gsoc_threads/t/pmc/packfile.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/packfile.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -15,6 +15,8 @@
 
 Tests the Packfile PMC.
 
+If you see this tests failing after bumping PBC_COMPAT rerun tools/dev/mk_packfile_pbc.
+
 =cut
 
 .include 't/pmc/testlib/packfile_common.pir'
@@ -295,26 +297,30 @@
 # Packfile.pack.
 # Check that unpack-pack produce correct result.
 .sub 'test_pack'
-    .local string filename, first
+    .local string filename, orig
     push_eh load_error
     $S0 = '_filename'()
-    $P0 = open $S0, 'r'
+    $P0 = new ['FileHandle']
+    $P0.'open'($S0, 'r')
 
-    first = $P0.'readall'()
+    orig = $P0.'readall'()
 
     .local pmc packfile
     packfile = new 'Packfile'
-    packfile = first
+    packfile = orig
     pop_eh
 
-    # Packed file should be exactly the same as loaded
-    .local string second
+    # Loaded packfile can be from different platform/config,
+    # packing and unpacking again to avoid that differences.
+    .local string first, second
     # Pack
-    second = packfile
+    first = packfile
+    .local pmc packfilesecond
+    packfilesecond = new 'Packfile'
+    packfilesecond = first
+    second = packfilesecond
 
-    $I0 = cmp first, second
-    $I0 = not $I0
-    todo($I0, 'pack produced same result twice: TT #1614')
+    is(first, second, 'pack produced same result twice: TT #1614')
     .return()
 load_error:
     .get_results($P0)
@@ -324,6 +330,7 @@
 .end
 
 # Test pack/set_string unpack/get_string equivalency
+
 .sub 'test_synonyms'
     .local pmc pf
     push_eh load_error

Modified: branches/gsoc_threads/t/pmc/packfileannotations.t
==============================================================================
--- branches/gsoc_threads/t/pmc/packfileannotations.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/packfileannotations.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -41,7 +41,8 @@
     .local pmc pf
 
     push_eh load_error
-    $P0 = open 't/native_pbc/annotations.pbc'
+    $P0 = new ['FileHandle']
+    $P0.'open'('t/native_pbc/annotations.pbc', 'r')
     $P0.'encoding'('binary')
     $S0 = $P0.'readall'()
     pf = new 'Packfile'

Modified: branches/gsoc_threads/t/pmc/resizablebooleanarray.t
==============================================================================
--- branches/gsoc_threads/t/pmc/resizablebooleanarray.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/resizablebooleanarray.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -24,7 +24,7 @@
 
     .include 'test_more.pir'
 
-    plan(65)
+    plan(68)
 
     setting_array_size()
     setting_first_element()
@@ -46,6 +46,7 @@
     sparse_access()
     check_for_zeroedness()
     pop_into_sparse()
+    clone_empty()
     clone_tests()
     alternate_clone_tests()
     get_iter_test()
@@ -70,6 +71,16 @@
 
     $P0 = 7
     is($P0, 7, "shrinking via int assignment to RBA works")
+
+    new $P1, ['ExceptionHandler']
+    set_addr $P1, caught
+    $P1.'handle_types'(.EXCEPTION_OUT_OF_BOUNDS)
+    push_eh $P1
+    $P0 = -1
+    ok(0, "no exception caught for setting negative size")
+    .return()
+caught:
+    ok(1, "caught exception on setting negative size")
 .end
 
 
@@ -138,6 +149,17 @@
 
     set $I0, $P0[-1]
     is($I0, 0, "negative index retrieval is 0")
+
+    new $P1, ['ExceptionHandler']
+    set_addr $P1, caught
+    $P1.'handle_types'(.EXCEPTION_OUT_OF_BOUNDS)
+    push_eh $P1
+    set $I0, $P0[-2]
+    ok(0, "no exception caught for negative index out of range access")
+    .return()
+caught:
+    pop_eh
+    ok(1, "caught exception on negative index out of range access")
 .end
 
 
@@ -729,6 +751,15 @@
     print $I5
 .end
 
+.sub clone_empty
+    .local pmc rba1, rba2
+    .local int i
+    rba1 = new ['ResizableBooleanArray']
+    rba2 = clone rba1
+    i = elements rba2
+    is(i, 0, "clone empty passed")
+.end
+
 .sub clone_tests
     .local pmc rba1, rba2
     .local int i, failed

Modified: branches/gsoc_threads/t/pmc/resizableintegerarray.t
==============================================================================
--- branches/gsoc_threads/t/pmc/resizableintegerarray.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/resizableintegerarray.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -28,6 +28,7 @@
      * Type of index (int, pmc)
      * index negative/in-range/beyond-end
      * Set doesn't clobber other elements
+     * Delete
 
  * Push/Unshift, Pop/Shift
      * Correct values
@@ -42,7 +43,7 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(41)
+    plan(47)
 
     test_does_interfaces()
 
@@ -54,6 +55,7 @@
     test_cant_get_negative()
     test_set_beyond_end()
     test_get_beyond_end()
+    test_delete()
 
     test_conversion()
     test_conversion_overflow()
@@ -69,7 +71,10 @@
     test_cant_pop_empty()
     test_shift()
     test_unshift()
+    test_cant_shift_empty()
     test_iterator()
+    test_clone()
+    test_freeze()
 .end
 
 .sub test_does_interfaces
@@ -143,7 +148,11 @@
 .sub test_distinct_storage
     # Walk the array in pseudo-random order
     # Pick a sample size $I4 and another number $I2, such that
-    #   ∀n: n > 0 ∧ $I2 ⁿ % $I4 = 1 ⇒ n % $I4 = 0
+    ############################################################
+    ##### Plase rewrite this with ascii chars, it got unreadable
+    ##### by editing with mixed charsets.
+    #  n: n > 0  $I2  % $I4 = 1  n % $I4 = 0
+    ############################################################
     $I4 = 17
     $I2 = 3
     # Create and fill array in random order
@@ -225,6 +234,27 @@
     is( $I0, 1, '... and should not extend array' )
 .end
 
+.sub test_delete
+    $P0 = new ['ResizableIntegerArray'], 3
+    $P0[0] = 9
+    $P0[1] = 8
+    $P0[2] = 7
+    delete $P0[1]
+    $I0 = elements $P0
+    is( $I0, 2, 'delete one element dec size')
+    $I0 = $P0[1]
+    is( $I0, 7, 'deleted move back the remaining part')
+    push_eh caught
+    delete $P0[2]
+    pop_eh
+    ok(0, 'delete ouf of bound should throw')
+    goto end
+caught:
+    pop_eh
+    ok(1, 'delete ouf of bound throws')
+end:
+.end
+
 .sub test_conversion
     $P0 = new ['ResizableIntegerArray']
     $P0 = 6
@@ -511,6 +541,17 @@
     is( $I1, 2, '... and stores values in correct order' )
 .end
 
+.sub test_cant_shift_empty
+    $P0 = new ['ResizableIntegerArray']
+    $I0 = 1
+    push_eh eh
+    $I0 = shift $P0
+    $I0 = 0
+eh:
+    pop_eh
+    ok( $I0, 'Shift from empty array should throw an exception' )
+.end
+
 .sub test_iterator
     $P0 = new ['ResizableIntegerArray']
     push_eh k0
@@ -548,6 +589,25 @@
     is( $I0, 4, 'get_iter: iterator returns all values in correct sequence' )
 .end
 
+.sub test_clone
+    $P0 = new ['ResizableIntegerArray']
+    push $P0, 1
+    $P1 = clone $P0
+    $I0 = iseq $P0, $P1
+    is( $I0, 1, 'cloned is equal to original')
+.end
+
+.sub test_freeze
+    .local pmc ria, th
+    .local string s
+    ria = new ['ResizableIntegerArray']
+    push ria, 1
+    push ria, 0x1FFFF
+    s = freeze ria
+    th = thaw s
+    is( ria, th, 'freeze/thaw copy is equal to original' )
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/gsoc_threads/t/pmc/resizablepmcarray.t
==============================================================================
--- branches/gsoc_threads/t/pmc/resizablepmcarray.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/resizablepmcarray.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -21,7 +21,7 @@
     .include 'fp_equality.pasm'
     .include 'test_more.pir'
 
-    plan(129)
+    plan(142)
 
     resize_tests()
     negative_array_size()
@@ -39,8 +39,12 @@
     get_mro_tests()
     push_and_pop()
     unshift_and_shift()
+    shift_empty()
+    pop_empty()
     multikey_access()
     exists_and_defined()
+    delete_keyed()
+    get_rep()
     append_tests()
     splice_tests()
     splice_replace1()
@@ -356,7 +360,7 @@
 .sub compare_reverse
     .param string a
     .param string b
-    $I0 = cmp_str b, a
+    $I0 = cmp b, a
     .return($I0)
 .end
 
@@ -579,6 +583,74 @@
     is(elements, 0, "expectedly empty RPA has 0 elements")
 .end
 
+.sub shift_empty
+    .local pmc pmc_arr
+    pmc_arr = new ['ResizablePMCArray']
+    $I1 = 0
+    push_eh handle_i
+    $I0 = shift pmc_arr
+    inc $I1
+handle_i:
+    pop_eh
+    is($I1, 0, 'shift int from empty RPA throws')
+
+    push_eh handle_n
+    $N0 = shift pmc_arr
+    inc $I1
+handle_n:
+    pop_eh
+    is($I1, 0, 'shift num from empty RPA throws')
+
+    push_eh handle_s
+    $S0 = shift pmc_arr
+    inc $I1
+handle_s:
+    pop_eh
+    is($I1, 0, 'shift string from empty RPA throws')
+
+    push_eh handle_p
+    $P0 = shift pmc_arr
+    inc $I1
+handle_p:
+    pop_eh
+    is($I1, 0, 'shift pmc from empty RPA throws')
+
+.end
+
+.sub pop_empty
+    .local pmc pmc_arr
+    pmc_arr = new ['ResizablePMCArray']
+    $I1 = 0
+    push_eh handle_i
+    $I0 = pop pmc_arr
+    inc $I1
+handle_i:
+    pop_eh
+    is($I1, 0, 'pop int from empty RPA throws')
+
+    push_eh handle_n
+    $N0 = pop pmc_arr
+    inc $I1
+handle_n:
+    pop_eh
+    is($I1, 0, 'pop num from empty RPA throws')
+
+    push_eh handle_s
+    $S0 = pop pmc_arr
+    inc $I1
+handle_s:
+    pop_eh
+    is($I1, 0, 'pop string from empty RPA throws')
+
+    push_eh handle_p
+    $P0 = pop pmc_arr
+    inc $I1
+handle_p:
+    pop_eh
+    is($I1, 0, 'pop pmc from empty RPA throws')
+
+.end
+
 ## an Integer Matrix, as used by befunge as a playing field
 .sub multikey_access
     .local pmc matrix, row_in, row_out
@@ -618,6 +690,9 @@
     is(ex, 1, "element at idx 0 exists")
     def = defined array[0]
     is(def, 1, "element at idx 0 is defined")
+    $P0 = new 'Integer', 0
+    ex = exists array[$P0]
+    is(ex, 1, "element at PMC idx 0 exists")
 
     ## bounds checking: upper (7)
     ex = exists array[7]
@@ -662,6 +737,26 @@
     is(def, 0, "element at idx 5 is not defined")
 .end
 
+.sub delete_keyed
+    .local pmc array
+    array = new ['ResizablePMCArray']
+    push array, 'a'
+    push array, 'b'
+    push array, 'c'
+    $P0 = new 'Integer', 1
+    delete array[$P0]
+    $S0 = array[1]
+    is($S0, 'c', 'delete_keyed with PMC key')
+.end
+
+.sub get_rep
+    .local pmc array
+    array = new ['ResizablePMCArray']
+    push array, 'a'
+    push array, 'b'
+    $S0 = get_repr array
+    is($S0, '[ a, b ]', 'get_repr')
+.end
 
 .sub append_tests
 
@@ -831,6 +926,24 @@
     $S0 = get_array_string($P1)
     is($S0, "12A45", "splice with empty replacement")
 
+    $P1 = clone ar1
+    $P2 = clone ar2
+    splice $P1, $P2, -3, 2
+    $S0 = get_array_string($P1)
+    is($S0, "12ABCDE5", "splice with negative offset")
+
+    $P1 = clone ar1
+    $P2 = clone ar2
+    $I0 = 1
+    push_eh too_low
+    splice $P1, $P2, -10, 2
+    dec $I0
+    goto too_low_end
+too_low:
+    .get_results($P9)
+    finalize $P9
+too_low_end:
+    ok($I0, "splice with negative offset too low")
 .end
 
 

Modified: branches/gsoc_threads/t/pmc/resizablestringarray.t
==============================================================================
--- branches/gsoc_threads/t/pmc/resizablestringarray.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/resizablestringarray.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -23,7 +23,7 @@
     .include 'test_more.pir'
 
     # set a test plan
-    plan(261)
+    plan(263)
 
     'size/resize'()
     'clone'()
@@ -1343,6 +1343,7 @@
     .SpliceMadeEasy({ splice $P1, $P2, 0, 2 }, "ABCDE345", "splice, replace at beginning")
     .SpliceMadeEasy({ splice $P1, $P2, 2, 2 }, "12ABCDE5", "splice, replace in middle")
     .SpliceMadeEasy({ splice $P1, $P2, 3, 2 }, "123ABCDE", "splice, replace at end")
+    .SpliceMadeEasy({ splice $P1, $P2, -3, 2 }, "12ABCDE5", "splice, replace in middle start from end")
     .SpliceMadeEasy({
         $P2 = new ['ResizableStringArray']
         splice $P1, $P2, 2, 2
@@ -1355,6 +1356,20 @@
 
     $P1 = new ['ResizableStringArray']
     $P1[0] = "1"
+    $P2 = new ['ResizableStringArray']
+    $P2[0] = 'A'
+    $I0 = 0
+    push_eh handle_negtoobig
+    splice $P1, $P2, -10, 1
+    goto after_negtoobig
+handle_negtoobig:
+    inc $I0
+after_negtoobig:
+    pop_eh
+    is($I0, 1, 'splice, negative offset too long throws')
+
+    $P1 = new ['ResizableStringArray']
+    $P1[0] = "1"
     $P1[1] = "2"
     $P1[2] = "3"
     $P1[3] = "4"

Modified: branches/gsoc_threads/t/pmc/string.t
==============================================================================
--- branches/gsoc_threads/t/pmc/string.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/string.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -16,11 +16,10 @@
 
 =cut
 
-
 .sub main :main
     .include 'test_more.pir'
 
-    plan(167)
+    plan(120)
 
     set_or_get_strings()
     setting_integers()
@@ -37,16 +36,6 @@
     test_cmp()
     cmp_with_integer()
     test_substr()
-    bands_null_string()
-    test_bands_2()
-    test_bands_3()
-    bors_null_string()
-    test_bors_2()
-    test_bors_3()
-    bxors_null_string()
-    bxors_2()
-    bxors_3()
-    bnots_null_string()
     test_eq_str()
     test_ne_str()
     check_whether_interface_is_done()
@@ -69,7 +58,6 @@
     assign_null_string()
     access_keyed()
     # END_OF_TESTS
-
 .end
 
 .sub set_or_get_strings
@@ -424,268 +412,6 @@
     is( $P0, "This is a test\n",  'original is unmodified' )
 .end
 
-.sub bands_null_string
-    new $P1, ['String']
-    new $P2, ['String']
-    new $P3, ['String']
-
-    null $S1
-    set $P1, $S1
-
-    set $S2, "abc"
-    set $P2, $S2
-
-    bands $P1, $P2
-
-    null $S3
-    set $P3, $S3
-
-    is( $P1, $P3, 'band null, "abc" -> null' )
-
-    set $P1, ""
-    bands $P1, $P2
-    nok( $P1, 'band "", "abc" -> false' )
-
-    null $S2
-    set $P2, $S2
-    set $P1, "abc"
-
-    bands $P1, $P2
-
-    null $S3
-    set $P3, $S3
-
-    is( $P1, $P3, 'bands "abc", null -> null' )
-
-    set $P2, ""
-    bands $P1, $P2
-    nok( $P1, 'bans "abc", "" -> false' )
-
-.end
-
-.sub test_bands_2
-    new $P1, ['String']
-    new $P2, ['String']
-    set $P1, "abc"
-    set $P2, "EE"
-    bands $P1, $P2
-    is( $P1, "A@", 'bands "abc", "EE" -> "A@"' )
-    is( $P2, "EE", '$2 is unchanged' )
-.end
-
-.sub test_bands_3
-    new $P1, ['String']
-    new $P2, ['String']
-    new $P0, ['String']
-    set $P1, "abc"
-    set $P2, "EE"
-    bands $P0, $P1, $P2
-    is( $P0, "A@",  'bands "abc", "EE" -> "A@"' )
-    is( $P1, "abc", '$2 is unchanged' )
-    is( $P2, "EE",  '$3 is unchanged' )
-.end
-
-.sub bors_null_string
-    new $P1, ['String']
-    new $P2, ['String']
-    new $P3, ['String']
-
-    null $S1
-    null $S2
-    set $P1, $S1
-    set $P2, $S2
-    bors $P1, $P2
-    null $S3
-    set $P3, $S3
-    is( $P1, $P3, 'bors null, null -> null' )
-
-    null $S1
-    set $P1, $S1
-    set $P2, ""
-    bors $P1, $P2
-    null $S3
-    set $P3, $S3
-    is( $P1, $P3, 'bors null, "" -> null' )
-
-    bors $P2, $P1
-    is( $P2, $P3, 'bors "", null -> null' )
-
-    null $S1
-    set $P1, $S1
-    set $P2, "def"
-    bors $P1, $P2
-    is( $P1, "def", 'bors null, "def" -> "def" / true' )
-
-    null $S2
-    set $P2, $S2
-    bors $P1, $P2
-    is( $P1, "def", 'bors "def", null -> "def" / true' )
-
-    null $S1
-    null $S2
-    set $P1, $S1
-    set $P2, $S2
-    bors $P3, $P1, $P2
-    null $S4
-    is( $P3, $S4, 'bors null, null -> null' )
-
-    set $P1, ""
-    bors $P3, $P1, $P2
-    is( $P3, $S4, 'bors "", null -> null' )
-
-    bors $P3, $P2, $P1
-    is( $P3, $S4, 'bors null, "" -> null' )
-
-    set $P1, "def"
-    bors $P3, $P1, $P2
-    is( $P3, "def", 'bors "def", null -> "def"' )
-
-    bors $P3, $P2, $P1
-    is( $P3, "def", 'bors null, "def" -> "def"' )
-.end
-
-.sub test_bors_2
-    new $P1, ['String']
-    new $P2, ['String']
-    set $P1, "abc"
-    set $P2, "EE"
-
-    bors $P1, $P2
-    is( $P1, "egc", 'bors "abc", "EE" -> "egc"' )
-    is( $P2, "EE",  '$2 is unchanged' )
-.end
-
-.sub test_bors_3
-    new $P1, ['String']
-    new $P2, ['String']
-    new $P0, ['String']
-    set $P1, "abc"
-    set $P2, "EE"
-
-    bors $P0, $P1, $P2
-    is( $P0, "egc", 'bors "abc", "EE" -> "egc"' )
-    is( $P1, "abc", '$2 unchanged' )
-    is( $P2, "EE",  '$3 unchanged' )
-.end
-
-.sub bxors_null_string
-    new $P1, ['String']
-    new $P2, ['String']
-    new $P3, ['String']
-    null $S1
-    null $S2
-    set $P1, $S1
-    set $P2, $S2
-    bxors $P1, $P2
-    null $S3
-    is( $P1, $S3, 'bxors null, null -> null' )
-
-    null $S1
-    set $P1, $S1
-    set $P2, ""
-    bxors $P1, $P2
-    null $S3
-    is( $P1, $S3, 'bxors null, "" -> null' )
-
-    bxors $P2, $P1
-    is( $S2, $S3, 'bxors "", null -> null' )
-
-    null $S1
-    set $P1, $S1
-    set $P2, "abc"
-    bxors $P1, $P2
-    is( $P1, "abc", 'bxors null, "abc" -> "abc"' )
-
-    null $S2
-    set $P2, $S2
-    bxors $P1, $P2
-    is( $P1, "abc", 'bxors "abc", "null, -> "abc"' )
-
-    null $S1
-    null $S2
-    set $P1, $S1
-    set $P2, $S2
-    bxors $P3, $P1, $P2
-    null $S4
-    is( $P3, $S4, 'bxors3 null, null -> null' )
-
-    set $P1, ""
-    bxors $P3, $P1, $P2
-    is( $P3, $S4, 'bxors3 "", null -> null' )
-
-    bxors $P3, $P2, $P1
-    is( $P3, $S4, 'bxors3 null, null -> null' )
-
-    set $P1, "abc"
-    bxors $P3, $P1, $P2
-    is( $P3, "abc", 'bxors3 "abc", null -> "abc"' )
-
-    bxors $P3, $P2, $P1
-    is( $P3, "abc", 'bxors3 null, "abc" -> "abc"' )
-.end
-
-.sub bxors_2
-    new $P1, ['String']
-    new $P2, ['String']
-    new $P3, ['String']
-
-    set $P1, "a2c"
-    set $P2, "Dw"
-    bxors $P1, $P2
-    is( $P1, "%Ec", 'bxors "a2c", "Dw" -> "%Ec"' )
-    is( $P2, "Dw", '... $2 unchanged' )
-
-    set $P1, "abc"
-    set $P2, "   X"
-    bxors $P1, $P2
-    is( $P1, "ABCX", 'bxors "abc", "   X" -> "ABCX"' )
-    is( $P2, "   X", '... $2 unchanged' )
-.end
-
-.sub bxors_3
-    new $P1, ['String']
-    new $P2, ['String']
-    new $P0, ['String']
-
-    set $P1, "a2c"
-    set $P2, "Dw"
-    bxors $P0, $P1, $P2
-    is( $P0, "%Ec", 'bxors "a2c", "Dw" -> "%Ec"' )
-    is( $P1, "a2c", '... $2 unchanged' )
-    is( $P2, "Dw",  '... $3 unchanged' )
-
-    set $P1, "abc"
-    set $P2, "   Y"
-    bxors $P0, $P1, $P2
-    is( $P0, "ABCY", 'bxors "abc", "   Y" -> "ABCY"' )
-    is( $P1, "abc",  '... $2 unchanged' )
-    is( $P2, "   Y", '... $3 unchanged' )
-.end
-
-.sub bnots_null_string
-    new $P1, ['String']
-    new $P2, ['String']
-    new $P3, ['String']
-
-    null $S1
-    null $S2
-    set $P1, $S1
-    set $P2, $S2
-    bnots $P1, $P2
-    null $S3
-    is( $P1, $S3, 'bnots null, null -> null' )
-
-    null $S1
-    set $P1, $S1
-    set $P2, ""
-    bnots $P1, $P2
-    null $S3
-    is( $P1, $S3, 'bnots null, "" -> null' )
-
-    bnots $P2, $P1
-    is( $S2, $S3, 'bnots "", null -> null' )
-.end
-
 .sub test_eq_str
         new $P1, ['String']
         new $P2, ['String']

Modified: branches/gsoc_threads/t/pmc/stringbuilder.t
==============================================================================
--- branches/gsoc_threads/t/pmc/stringbuilder.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/stringbuilder.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -21,18 +21,22 @@
     .include 'test_more.pir'
 
     test_create()               # 2 tests
-    test_push_string()          # 9 tests
+    test_push_string()
     test_push_pmc()             # 4 tests
     test_push_string_unicode()  # 1 test
     test_i_concatenate()        # 1 test
     test_set_string_native()    # 3 tests
     test_set_string_native_with_hash()    # 2 tests
+    test_set_pmc()
+    test_substr()
 
     emit_with_pos_args()
     emit_with_percent_args()
     emit_with_named_args()
     emit_with_pos_and_named_args()
 
+    test_unicode_conversion_tt1665()
+
     done_testing()
 
     # END_OF_TESTS
@@ -102,6 +106,11 @@
     $I0 = sb
     is( $I0, 16384, "... and capacity increased" )
 
+    null $S0
+    push sb, $S0
+    $I0 = sb
+    is( $I0, 16384, "push a null string does nothing" )
+
 .end
 
 .sub 'test_push_pmc'
@@ -150,7 +159,6 @@
 
     $S0 = sb
     is( $S0, "foobarbaz", "StringBuilder handles concat properly")
-
 .end
 
 .sub 'test_set_string_native'
@@ -193,6 +201,24 @@
 
 .end
 
+.sub 'test_set_pmc'
+    .local pmc sb, i
+    sb = new ["StringBuilder"]
+    i  = new ["Integer"], 17
+    assign sb, i
+    $S0 = sb
+    $I0 = iseq $S0, '17'
+    is( $I0, 1, "set_pmc gives the pmc string value")
+.end
+
+.sub test_substr
+    .local pmc sb
+    sb = new ["StringBuilder"]
+    sb = 'foobar'
+    $S0 = substr sb, 2, 3
+    is( $S0, 'oba', "substr result is correct")
+.end
+
 .sub emit_with_pos_args
     .local pmc code
     code = new ["StringBuilder"]
@@ -247,6 +273,29 @@
 CODE
 .end
 
+.sub "test_unicode_conversion_tt1665"
+    .local pmc list
+    list = new 'ResizablePMCArray'
+    push list, 195
+    push list, 182
+
+    .local pmc iterator
+    iterator = iter list
+    .local pmc sb
+    sb = new 'StringBuilder'
+    sb = unicode:""
+    loop:
+      unless iterator goto done
+      $P1 = shift iterator
+      $I1 = $P1
+      $S1 = chr $I1
+      sb .= $S1
+      goto loop
+    done:
+      $S0 = sb
+
+    ok( $S0, "Pushing unicode strings doesn't kill StringBuilder")
+.end
 
 # Local Variables:
 #   mode: pir

Modified: branches/gsoc_threads/t/pmc/stringhandle.t
==============================================================================
--- branches/gsoc_threads/t/pmc/stringhandle.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/stringhandle.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -138,25 +138,25 @@
     $P0.'open'('README', 'w')
 
     print $P0, "This is Parrot, version"
-    close $P0
+    $P0.'close'()
 
     $P0.'open'('README')
 
-    $S0 = read $P0, 14 # bytes
+    $S0 = $P0.'read'(14) # bytes
     if $S0 == 'This is Parrot' goto ok_1
     print 'not '
   ok_1:
-    say 'ok 1 - $S0 = read $P1, $I2'
+    say 'ok 1 - $S0 = $P1.read($I2)'
 
-    $S0 = read $P0, 9  # bytes
+    $S0 = $P0.'read'(9)  # bytes
     if $S0 == ', version' goto ok_2
     print 'not '
   ok_2:
-    say 'ok 2 - $S0 = read $P1, $I2 # again on same stream'
+    say 'ok 2 - $S0 = $P1.read($I2) # again on same stream'
 .end
 CODE
-ok 1 - $S0 = read $P1, $I2
-ok 2 - $S0 = read $P1, $I2 # again on same stream
+ok 1 - $S0 = $P1.read($I2)
+ok 2 - $S0 = $P1.read($I2) # again on same stream
 OUT
 
 # L<PDD22/I\/O PMC API/=item print>
@@ -273,7 +273,7 @@
     $I0 = stringhandle.'eof'()
     if $I0 goto end_read_loop
 
-    test_line = readline stringhandle
+    test_line = stringhandle.'readline'()
     if test_line == "" goto end_read_loop
     test_line = chomp( test_line )
     $I1 = test_line

Modified: branches/gsoc_threads/t/pmc/sub.t
==============================================================================
--- branches/gsoc_threads/t/pmc/sub.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/sub.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -991,21 +991,22 @@
 unlink( $l1_pbc, $l2_pbc );
 
 pir_output_is( <<'CODE', <<'OUTPUT', "immediate code as const" );
-.sub make_pi :immediate :anon
-    $N0 = atan 1.0, 1.0
-    $N0 *= 4
+.sub make_phi :immediate :anon
+    $N0 = sqrt 5
+    $N0 += 1
+    $N0 /= 2
     $P0 = new ['Float']
     $P0 = $N0
     .return ($P0)
 .end
 
 .sub main :main
-    .const 'Sub' pi = "make_pi"
-    print pi
+    .const 'Sub' phi = "make_phi"
+    print phi
     print "\n"
 .end
 CODE
-3.14159265358979
+1.61803398874989
 OUTPUT
 
 pir_output_is( <<'CODE', <<'OUTPUT', "immediate code as const - obj" );

Modified: branches/gsoc_threads/t/pmc/sys.t
==============================================================================
--- branches/gsoc_threads/t/pmc/sys.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/sys.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -31,11 +31,12 @@
 
 .sub _test :main
      .local pmc O
-     open O, "$temp_pir", 'w'
+     O = new ['FileHandle']
+     O.'open'("$temp_pir", 'w')
      print O, ".sub _main :main\\n"
      print O, "\tsay \\"Hello, World!\\"\\n"
      print O, ".end\\n"
-     close O
+     O.'close'()
      load_bytecode 'config.pbc'
     .local pmc conf_hash
     conf_hash = _config()

Modified: branches/gsoc_threads/t/pmc/testlib/packfile_common.pir
==============================================================================
--- branches/gsoc_threads/t/pmc/testlib/packfile_common.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/testlib/packfile_common.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -9,7 +9,7 @@
 
 .sub '_filename'
     .local string filename
-    filename = 't/native_pbc/number_1.pbc'
+    filename = 't/native_pbc/number.pbc'
     .return (filename)
 .end
 
@@ -20,9 +20,10 @@
     .local pmc pf, pio
     pf   = new ['Packfile']
     $S0  = '_filename'()
-    pio  = open $S0, 'r'
+    pio  = new ['FileHandle']
+    pio.'open'($S0, 'r')
     $S0  = pio.'readall'()
-    close pio
+    pio.'close'()
     pf   = $S0
     .return(pf)
 .end

Modified: branches/gsoc_threads/t/pmc/threads.t
==============================================================================
--- branches/gsoc_threads/t/pmc/threads.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/pmc/threads.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -833,7 +833,6 @@
 .include 'interpinfo.pasm'
 
 .loadlib 'foo_group'
-.loadlib 'myops_ops'
 
 .sub test
     .param pmc passed_value

Modified: branches/gsoc_threads/t/src/embed.t
==============================================================================
--- branches/gsoc_threads/t/src/embed.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/src/embed.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -8,7 +8,7 @@
 use Test::More;
 use Parrot::Test;
 
-plan tests => 9;
+plan tests => 10;
 
 =head1 NAME
 
@@ -62,21 +62,30 @@
 Done
 OUTPUT
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when an opcode is given improper arguments');
-
+my $common = linedirective(__LINE__) . <<'CODE';
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include "parrot/embed.h"
 #include "parrot/extend.h"
 
-void fail(const char *msg);
+static void fail(const char *msg);
+static Parrot_String createstring(Parrot_Interp interp, const char * value);
 
-void fail(const char *msg)
+static void fail(const char *msg)
 {
     fprintf(stderr, "failed: %s\n", msg);
     exit(EXIT_FAILURE);
 }
 
+static Parrot_String createstring(Parrot_Interp interp, const char * value)
+{
+    return Parrot_new_string(interp, value, strlen(value), (const char*)NULL, 0);
+}
+
+CODE
+
+c_output_is($common . linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when an opcode is given improper arguments');
 
 int main(int argc, const char **argv)
 {
@@ -88,7 +97,7 @@
     interp = Parrot_new(NULL);
     if (! interp)
         fail("Cannot create parrot interpreter");
-    lang = Parrot_new_string(interp, "PIR", 3, (const char*)NULL, 0);
+    lang = createstring(interp, "PIR");
 
     func_pmc = Parrot_compile_string(interp, lang, ".sub foo\n copy\n.end", &err);
     Parrot_printf(interp, "%Ss\n", err);
@@ -99,21 +108,7 @@
 The opcode 'copy' (copy<0>) was not found. Check the type and number of the arguments
 OUTPUT
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when given invalid language string');
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "parrot/embed.h"
-#include "parrot/extend.h"
-
-void fail(const char *msg);
-
-void fail(const char *msg)
-{
-    fprintf(stderr, "failed: %s\n", msg);
-    exit(EXIT_FAILURE);
-}
-
+c_output_is($common . linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when given invalid language string');
 
 int main(int argc, const char **argv)
 {
@@ -125,7 +120,7 @@
     interp = Parrot_new(NULL);
     if (! interp)
         fail("Cannot create parrot interpreter");
-    lang = Parrot_new_string(interp, "Foo", 3, (const char*)NULL, 0);
+    lang = createstring(interp, "Foo");
 
     func_pmc = Parrot_compile_string(interp, lang, "This doesn't matter", &err);
     Parrot_printf(interp, "%Ss\n", err);
@@ -137,21 +132,7 @@
 OUTPUT
 
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when there is an IMCC syntax error', 'todo' => 'TT #1610 : does not properly catch IMCC errors');
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "parrot/embed.h"
-#include "parrot/extend.h"
-
-void fail(const char *msg);
-
-void fail(const char *msg)
-{
-    fprintf(stderr, "failed: %s\n", msg);
-    exit(EXIT_FAILURE);
-}
-
+c_output_is($common . linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when there is an IMCC syntax error', 'todo' => 'TT #1610 : does not properly catch IMCC errors');
 
 int main(int argc, const char **argv)
 {
@@ -163,7 +144,7 @@
     interp = Parrot_new(NULL);
     if (! interp)
         fail("Cannot create parrot interpreter");
-    lang = Parrot_new_string(interp, "PIR", 3, (const char*)NULL, 0);
+    lang = createstring(interp, "PIR");
 
     func_pmc = Parrot_compile_string(interp, lang, "The sleeper must awake", &err);
     Parrot_printf(interp,"Caught exception\n");
@@ -177,21 +158,7 @@
 OUTPUT
 
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Hello world from main" );
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "parrot/embed.h"
-#include "parrot/extend.h"
-
-void fail(const char *msg);
-
-void fail(const char *msg)
-{
-    fprintf(stderr, "failed: %s\n", msg);
-    exit(EXIT_FAILURE);
-}
+c_output_is($common . linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Hello world from main" );
 
 int main(void)
 {
@@ -207,7 +174,7 @@
     Parrot_printf(interp, "Hello, parrot\n");
 
     /* Compile and execute a pir sub */
-    compiler = Parrot_new_string(interp, "PIR", 3, (const char *)NULL, 0);
+    compiler = createstring(interp, "PIR");
     code = Parrot_compile_string(interp, compiler,
 ".sub main :main\n"
 "  say 'Hello, pir'\n"
@@ -226,21 +193,7 @@
 Hello, pir
 OUTPUT
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Hello world from a sub" );
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "parrot/embed.h"
-#include "parrot/extend.h"
-
-void fail(const char *msg);
-
-void fail(const char *msg)
-{
-    fprintf(stderr, "failed: %s\n", msg);
-    exit(EXIT_FAILURE);
-}
+c_output_is($common . linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Hello world from a sub" );
 
 int main(void)
 {
@@ -260,7 +213,7 @@
         fail("Cannot create parrot interpreter");
 
     /* Compile pir code */
-    compiler = Parrot_new_string(interp, "PIR", 3, (const char *)NULL, 0);
+    compiler = createstring(interp, "PIR");
     code = Parrot_compile_string(interp, compiler,
 ".sub main :main\n"
 "  say 'Must not be seen!'\n"
@@ -277,10 +230,10 @@
 
     /* Get parrot namespace */
     rootns = Parrot_get_root_namespace(interp);
-    parrotname = Parrot_new_string(interp, "parrot", 6, (const char *)NULL, 0);
+    parrotname = createstring(interp, "parrot");
     parrotns = Parrot_PMC_get_pmc_keyed_str(interp, rootns,  parrotname);
     /* Get the sub */
-    subname = Parrot_new_string(interp, "hello", 5, (const char *)NULL, 0);
+    subname = createstring(interp, "hello");
     sub = Parrot_PMC_get_pmc_keyed_str(interp, parrotns,  subname);
     /* Execute it */
     Parrot_ext_call(interp, sub, "->");
@@ -292,22 +245,68 @@
 Hello, sub
 OUTPUT
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "External sub" );
+c_output_is($common . linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "calling a sub with argument and return" );
 
-#include <stdio.h>
-#include <stdlib.h>
+int main(void)
+{
+    Parrot_Interp interp;
+    Parrot_String compiler;
+    Parrot_String errstr;
+    Parrot_PMC code;
+    Parrot_PMC rootns;
+    Parrot_String parrotname;
+    Parrot_PMC parrotns;
+    Parrot_String subname;
+    Parrot_PMC sub;
+    Parrot_String msg;
+    Parrot_String retstr;
 
-#include "parrot/embed.h"
-#include "parrot/extend.h"
+    /* Create the interpreter */
+    interp = Parrot_new(NULL);
+    if (! interp)
+        fail("Cannot create parrot interpreter");
 
-void fail(const char *msg);
-void hello(Parrot_Interp interp);
+    /* Compile pir code */
+    compiler = createstring(interp, "PIR");
+    code = Parrot_compile_string(interp, compiler,
+".sub main :main\n"
+"  say 'Must not be seen!'\n"
+"\n"
+".end\n"
+"\n"
+".sub hello\n"
+"  .param string s\n"
+"  print s\n"
+"  .return('world!')\n"
+"\n"
+".end\n"
+"\n",
+        &errstr
+    );
 
-void fail(const char *msg)
-{
-    fprintf(stderr, "failed: %s\n", msg);
-    exit(EXIT_FAILURE);
+    /* Get parrot namespace */
+    rootns = Parrot_get_root_namespace(interp);
+    parrotname = createstring(interp, "parrot");
+    parrotns = Parrot_PMC_get_pmc_keyed_str(interp, rootns,  parrotname);
+    /* Get the sub */
+    subname = createstring(interp, "hello");
+    sub = Parrot_PMC_get_pmc_keyed_str(interp, parrotns,  subname);
+
+    /* Execute it */
+    msg = createstring(interp, "Hello, ");
+    Parrot_ext_call(interp, sub, "S->S", msg, &retstr);
+    Parrot_printf(interp, "%Ss\n", retstr);
+
+    Parrot_destroy(interp);
+    return 0;
 }
+CODE
+Hello, world!
+OUTPUT
+
+c_output_is($common . linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "External sub" );
+
+void hello(Parrot_Interp interp);
 
 void hello(Parrot_Interp interp)
 {
@@ -328,7 +327,7 @@
         fail("Cannot create parrot interpreter");
 
     /* Compile pir */
-    compiler = Parrot_new_string(interp, "PIR", 3, (const char *)NULL, 0);
+    compiler = createstring(interp, "PIR");
     code = Parrot_compile_string(interp, compiler,
 ".sub externcall\n"
 "  .param pmc ec\n"
@@ -348,23 +347,10 @@
 Hello from C
 OUTPUT
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Insert external sub in namespace" );
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "parrot/embed.h"
-#include "parrot/extend.h"
+c_output_is($common . linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Insert external sub in namespace" );
 
-void fail(const char *msg);
 void hello(Parrot_Interp interp);
 
-void fail(const char *msg)
-{
-    fprintf(stderr, "failed: %s\n", msg);
-    exit(EXIT_FAILURE);
-}
-
 void hello(Parrot_Interp interp)
 {
     Parrot_printf(interp, "Hello from C\n");
@@ -389,7 +375,7 @@
         fail("Cannot create parrot interpreter");
 
     /* Compile pir */
-    compiler = Parrot_new_string(interp, "PIR", 3, (const char *)NULL, 0);
+    compiler = createstring(interp, "PIR");
     code = Parrot_compile_string(interp, compiler,
 ".sub externcall\n"
 "  hello()\n"
@@ -401,10 +387,10 @@
 
     /* Create extern sub and insert in parrot namespace */
     rootns = Parrot_get_root_namespace(interp);
-    parrotname = Parrot_new_string(interp, "parrot", 6, (const char *)NULL, 0);
+    parrotname = createstring(interp, "parrot");
     parrotns = Parrot_PMC_get_pmc_keyed_str(interp, rootns, parrotname);
     hellosub = Parrot_sub_new_from_c_func(interp, (void (*)())& hello, "vJ");
-    helloname = Parrot_new_string(interp, "hello", 5, (const char *)NULL, 0);
+    helloname = createstring(interp, "hello");
     Parrot_PMC_set_pmc_keyed_str(interp, parrotns, helloname, hellosub);
 
     /* Call it */

Modified: branches/gsoc_threads/t/src/extend.t
==============================================================================
--- branches/gsoc_threads/t/src/extend.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/src/extend.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -334,13 +334,13 @@
 print $TEMP <<'EOF';
   .pcc_sub _sub1:
   get_params ""
-  printerr "in sub1\n"
+  print "in sub1\n"
   set_returns ""
   returncc
   .pcc_sub _sub2:
   get_params "0", P5
-  printerr P5
-  printerr "in sub2\n"
+  print P5
+  print "in sub2\n"
   set_returns ""
   returncc
 EOF
@@ -471,8 +471,8 @@
 print $TEMP <<'EOF';
   .sub foo
       .param pmc input
-      printerr input
-      printerr "in sub2\n"
+      print input
+      print "in sub2\n"
       $P0 = new "Integer"
       $P0 = 42
       .return($P0)
@@ -540,9 +540,9 @@
 print $TEMP <<'EOF';
   .pcc_sub _sub1:
   get_params ""
-  printerr "in sub1\n"
+  print "in sub1\n"
   find_lex P2, "no_such_var"
-  printerr "never\n"
+  print "never\n"
   returncc
 EOF
 close $TEMP;

Modified: branches/gsoc_threads/t/steps/auto/ctags-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/ctags-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/ctags-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -100,14 +100,14 @@
 } );
 $conf->options->set( %{$args} );
 $step = test_step_constructor_and_description($conf);
-ok(auto::ctags::_probe_for_ctags_output('Exuberant Ctags', 0),
+ok(auto::ctags::_probe_for_ctags_output($conf, 'Exuberant Ctags'),
     "Probe returned true when output matched");
-ok(! auto::ctags::_probe_for_ctags_output('alpha', 0),
+ok(! auto::ctags::_probe_for_ctags_output($conf, 'alpha'),
     "Probe returned false when output matched");
 {
     my $stdout;
     my $rv = capture(
-        sub { auto::ctags::_probe_for_ctags_output('Exuberant Ctags', 1) },
+        sub { auto::ctags::_probe_for_ctags_output($conf, 'Exuberant Ctags') },
         \$stdout
     );
     ok($rv, "Probe returned true when output matched");
@@ -115,7 +115,7 @@
 {
     my $stdout;
     my $rv = capture(
-        sub { auto::ctags::_probe_for_ctags_output('alpha', 1) },
+        sub { auto::ctags::_probe_for_ctags_output($conf, 'alpha') },
         \$stdout
     );
     ok(! $rv, "Probe returned false when output matched");

Deleted: branches/gsoc_threads/t/steps/auto/extra_nci_thunks-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/extra_nci_thunks-01.t	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,87 +0,0 @@
-#! perl
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
-# auto/extra_nci_thunks-01.t
-
-=head1 NAME
-
-auto/extra_nci_thunks-01.t - test auto::extra_nci_thunks
-
-=head1 SYNOPSIS
-
-    % prove t/steps/auto/extra_nci_thunks-01.t
-
-=head1 DESCRIPTION
-
-The files in this directory test functionality used by F<Configure.pl>.
-
-The tests in this file test auto::extra_nci_thunks.
-
-=head1 SEE ALSO
-
-config::auto::libjit, F<Configure.pl>.
-
-=cut
-
-use strict;
-use warnings;
-
-use Test::More tests => 21;
-
-use lib qw( lib t/configure/testlib );
-use Parrot::Configure;
-use Parrot::Configure::Options 'process_options';
-use Parrot::Configure::Test qw(
-    test_step_thru_runstep
-    rerun_defaults_for_testing
-    test_step_constructor_and_description
-);
-
-use_ok('config::init::defaults');
-use_ok('config::auto::extra_nci_thunks');
-
-my ($args, $step_list_ref) = process_options( {
-    argv => [ q{--without-extra-nci-thunks} ],
-    mode => 'configure',
-} );
-
-my $conf = Parrot::Configure->new;
-my $serialized = $conf->pcfreeze();
-
-test_step_thru_runstep( $conf, 'init::defaults', $args );
-
-my $pkg = 'auto::extra_nci_thunks';
-my ($step, $ret);
-
-$conf->add_steps($pkg);
-$conf->options->set(%$args);
-$step = test_step_constructor_and_description($conf);
-$ret = $step->runstep($conf);
-ok( $ret, "runstep() returned true value" );
-is( $step->result(), 'no', "Result is 'no', as expected" );
-is( $conf->data->get( 'HAS_EXTRA_NCI_THUNKS' ), 0,
-    "Got the expected result with '--without-extra-nci-thunks' option" );
-
-$conf->replenish($serialized);
-
-($args, $step_list_ref) = process_options( {
-    argv => [ ],
-    mode => 'configure',
-} );
-rerun_defaults_for_testing($conf, $args);
-$conf->add_steps($pkg);
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-$ret = $step->runstep($conf);
-ok( $ret, "runstep() returned a true value" );
-is( $step->result(), 'yes', "Default result is 'yes' as expected" );
-is( $conf->data->get( 'has_extra_nci_thunks' ), 1,
-    "Get the expected result without '--without-extra-nci-thunks' option" );
-
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/t/steps/auto/gettext-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/gettext-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/gettext-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -112,12 +112,12 @@
 
 ########## _evaluate_cc_run() ##########
 
-my ($test, $verbose);
+my $test;
 my $has_gettext;
 
 $test = "Hello, world!\n";
-$verbose = undef;
-$has_gettext = $step->_evaluate_cc_run($test, $verbose);
+$conf->options->set(verbose => undef);
+$has_gettext = $step->_evaluate_cc_run($conf, $test);
 is($has_gettext, 1, "Got expected value for has_gettext");
 is($step->result(), 'yes', "Expected result was set");
 # Prepare for next test
@@ -126,10 +126,10 @@
 {
     my $stdout;
     $test = "Hello, world!\n";
-    $verbose = 1;
+    $conf->options->set(verbose => 1);
     capture(
         sub {
-            $has_gettext = $step->_evaluate_cc_run($test, $verbose);
+            $has_gettext = $step->_evaluate_cc_run($conf, $test);
         },
         \$stdout,
     );
@@ -141,8 +141,8 @@
 }
 
 $test = "Foobar\n";
-$verbose = undef;
-$has_gettext = $step->_evaluate_cc_run($test, $verbose);
+$conf->options->set(verbose => undef);
+$has_gettext = $step->_evaluate_cc_run($conf, $test);
 is($has_gettext, 0, "Got expected value for has_gettext");
 ok(! defined $step->result(), "As expected, result is not yet defined");
 
@@ -157,11 +157,11 @@
 $conf->options->set( %{$args} );
 $step = test_step_constructor_and_description($conf);
 
-$verbose = undef;
+$conf->options->set(verbose => undef);
 $conf->data->set( ccflags => q{} );
 $conf->data->set( libs    => q{} );
 my $libs = q{foo bar baz};
-ok(auto::gettext::_handle_gettext($conf, $verbose, $libs),
+ok(auto::gettext::_handle_gettext($conf, $libs),
     "_handle_gettext() returned true value");
 like($conf->data->get( 'ccflags' ), qr/-DHAS_GETTEXT/,
     "HAS_GETTEXT was added to 'ccflags'");
@@ -172,9 +172,9 @@
 $conf->data->set( libs    => q{} );
 {
     my ($stdout, $rv);
-    $verbose = 1;
+    $conf->options->set(verbose => 1);
     capture(
-        sub { $rv = auto::gettext::_handle_gettext($conf, $verbose, $libs); },
+        sub { $rv = auto::gettext::_handle_gettext($conf, $libs); },
         \$stdout,
     );
     ok($rv, "_handle_gettext() returned true value");
@@ -186,6 +186,7 @@
         qr/ccflags:\s.*-DHAS_GETTEXT/,
         "Got expected verbose output"
     );
+    $conf->options->set(verbose => undef);
 }
 
 pass("Completed all tests in $0");

Modified: branches/gsoc_threads/t/steps/auto/gmp-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/gmp-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/gmp-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -110,12 +110,12 @@
 $conf->options->set( %{$args} );
 $step = test_step_constructor_and_description($conf);
 
-my ($test, $has_gmp, $verbose);
+my ($test, $has_gmp);
 
 $test = $step->{cc_run_expected};
 $has_gmp = 0;
-$verbose = undef;
-$has_gmp = $step->_evaluate_cc_run($conf, $test, $has_gmp, $verbose);
+$conf->options->set(verbose => undef);
+$has_gmp = $step->_evaluate_cc_run($conf, $test, $has_gmp);
 is($step->result, 'yes', "Got expected result");
 is($conf->data->get('gmp'), 'define', "Expected value set for 'gmp'");
 is($conf->data->get('HAS_GMP'), 1, "Expected value set for 'HAS_GMP'");
@@ -126,8 +126,8 @@
 
 $test = '12345';
 $has_gmp = 0;
-$verbose = undef;
-$has_gmp = $step->_evaluate_cc_run($conf, $test, $has_gmp, $verbose);
+$conf->options->set(verbose => undef);
+$has_gmp = $step->_evaluate_cc_run($conf, $test, $has_gmp);
 ok(! defined($step->result), "Result undefined as expected");
 is($has_gmp, 0, "gmp status unchanged");
 
@@ -135,10 +135,10 @@
     my $stdout;
     $test = $step->{cc_run_expected};
     $has_gmp = 0;
-    $verbose = 1;
+    $conf->options->set(verbose => 1);
     capture(
         sub { $has_gmp =
-            $step->_evaluate_cc_run($conf, $test, $has_gmp, $verbose); },
+            $step->_evaluate_cc_run($conf, $test, $has_gmp); },
         \$stdout,
     );
     is($step->result, 'yes', "Got expected result");

Modified: branches/gsoc_threads/t/steps/auto/icu-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/icu-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/icu-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -72,53 +72,59 @@
 
 my ($autodetect, $without);
 
-($icuconfig, $autodetect, $without) =
-    $step->_handle_search_for_icu_config( {
+($icuconfig, $autodetect, $without) = $step->_handle_search_for_icu_config(
+    $conf,
+    {
         icuconfig   => q{},
         autodetect  => 1,
         without     => 0,
-        verbose     => 0,
         ret         => -1,
-} );
+    }
+);
 ok(! defined $icuconfig, "icu-config not found, as expected");
 is($autodetect, 0, "Autodetection cancelled, as expected");
 is($without, 1, "Continuing to configure without ICU");
 
-($icuconfig, $autodetect, $without) =
-    $step->_handle_search_for_icu_config( {
+($icuconfig, $autodetect, $without) = $step->_handle_search_for_icu_config(
+    $conf,
+    {
         icuconfig   => q{},
         autodetect  => 1,
         without     => 0,
-        verbose     => 0,
         ret         => 256,
-} );
+    }
+);
 ok(! defined $icuconfig, "icu-config not found, as expected");
 is($autodetect, 0, "Autodetection cancelled, as expected");
 is($without, 1, "Continuing to configure without ICU");
 
-($icuconfig, $autodetect, $without) =
-    $step->_handle_search_for_icu_config( {
+($icuconfig, $autodetect, $without) = $step->_handle_search_for_icu_config(
+    $conf,
+    {
         icuconfig   => q{},
         autodetect  => 1,
         without     => 0,
-        verbose     => 0,
         ret         => 0,
-} );
+    }
+);
 is($icuconfig, q{icu-config}, "icu-config found, as expected");
 is($autodetect, 1, "Autodetection continues, as expected");
 is($without, 0, "Continuing to try to configure with ICU");
 
 {
+    $conf->options->set( verbose => 1 );
     my ($stdout, $stderr);
     capture( sub {
             ($icuconfig, $autodetect, $without) =
-                $step->_handle_search_for_icu_config( {
+            $step->_handle_search_for_icu_config(
+                $conf,
+                {
                     icuconfig   => q{},
                     autodetect  => 1,
                     without     => 0,
-                    verbose     => 1,
                     ret         => 0,
-            } );
+                }
+            );
         },
         \$stdout,
         \$stderr,
@@ -128,30 +134,33 @@
     is($without, 0, "Continuing to try to configure with ICU");
     like($stdout, qr/icu-config found/,
         "Got expected verbose output");
+    $conf->options->set( verbose => undef );
 }
 
 ########## _handle_autodetect() ##########
 
-($icuconfig, $autodetect, $without) =
-    $step->_handle_autodetect( {
+($icuconfig, $autodetect, $without) = $step->_handle_autodetect(
+    $conf,
+    {
         icuconfig   => $phony,
         autodetect  => 1,
         without     => 0,
-        verbose     => 0,
-} );
+    }
+);
 is($icuconfig, $phony, "icu-config unchanged, as expected");
 is($autodetect, 1, "Autodetection still active, as expected");
 is($without, 0, "Continuing to try to configure with ICU");
 
 {
+    $conf->options->set( verbose => 1 );
     my ($stdout, $stderr);
     capture( sub {
-        ($icuconfig, $autodetect, $without) =
-            $step->_handle_autodetect( {
+        ($icuconfig, $autodetect, $without) = $step->_handle_autodetect(
+            $conf,
+            {
                 icuconfig   => $phony,
                 autodetect  => 0,
                 without     => 0,
-                verbose     => 1,
             } );
         },
         \$stdout,
@@ -162,6 +171,7 @@
     is($without, 0, "Continuing to try to configure with ICU");
     like($stdout, qr/ICU autodetection disabled/s,
         "Got expected verbose output");
+    $conf->options->set( verbose => undef );
 }
 
 ########## _handle_icushared() ##########
@@ -247,7 +257,6 @@
             without         => 1,
             autodetect      => 1,
             icuconfig       => 1,
-            verbose         => 0,
         }
     );
 is($without, 1, "Not trying to configure with ICU");
@@ -262,7 +271,6 @@
             without         => 0,
             autodetect      => 0,
             icuconfig       => 1,
-            verbose         => 0,
         }
     );
 is($without, 0, "Still trying to configure with ICU");
@@ -277,7 +285,6 @@
             without         => 0,
             autodetect      => 1,
             icuconfig       => q{},
-            verbose         => 0,
         }
     );
 is($without, 0, "Still trying to configure with ICU");
@@ -292,48 +299,54 @@
     "Got expected die message");
 
 {
+    $conf->options->set( verbose => 1 );
     my $phony = q{/path/to/icu-config};
     my ($stdout, $stderr);
     capture(
-        sub { auto::icu::_verbose_report(1, $phony, undef, undef); },
+        sub { auto::icu::_verbose_report($conf, $phony, undef, undef); },
         \$stdout,
         \$stderr,
     );
     like( $stdout, qr/icuconfig:\s+$phony/s,
         "Got expected verbose output"
     );
+    $conf->options->set( verbose => undef );
 }
 
 {
+    $conf->options->set( verbose => 1 );
     my $phony = q{-lalpha};
     my ($stdout, $stderr);
     capture(
-        sub { auto::icu::_verbose_report(1, undef, $phony, undef); },
+        sub { auto::icu::_verbose_report($conf, undef, $phony, undef); },
         \$stdout,
         \$stderr,
     );
     like( $stdout, qr/icushared='$phony'/s,
         "Got expected verbose output"
     );
+    $conf->options->set( verbose => undef );
 }
 
 {
+    $conf->options->set( verbose => 1 );
     my $phony = q{alpha/include};
     my ($stdout, $stderr);
     capture(
-        sub { auto::icu::_verbose_report(1, undef, undef, $phony); },
+        sub { auto::icu::_verbose_report($conf, undef, undef, $phony); },
         \$stdout,
         \$stderr,
     );
     like( $stdout, qr/headers='$phony'/s,
         "Got expected verbose output"
     );
+    $conf->options->set( verbose => undef );
 }
 
 {
     my ($stdout, $stderr);
     capture(
-        sub { auto::icu::_verbose_report(0, 'alpha', 'beta', 'gamma'); },
+        sub { auto::icu::_verbose_report($conf, 'alpha', 'beta', 'gamma'); },
         \$stdout,
         \$stderr,
     );
@@ -343,6 +356,7 @@
 ########## _handle_icuconfig_errors() ##########
 
 {
+    $conf->options->set( verbose => undef );
     my ($stdout, $stderr);
     capture(
         sub {
@@ -368,13 +382,14 @@
 my $status = $conf->data->get( 'ccflags' );
 
 {
+    $conf->options->set(verbose => 1);
     my ($stdout, $stderr);
     capture(
         sub {
-           auto::icu::_handle_ccflags_status($conf,
+           auto::icu::_handle_ccflags_status(
+               $conf,
                {
                    ccflags_status  => 1,
-                   verbose         => 1,
                    icuheaders      => $icuheaders,
                },
            );
@@ -388,13 +403,14 @@
 $conf->data->set( ccflags => $status ); # re-set for next test
 
 {
+    $conf->options->set(verbose => 1);
     my ($stdout, $stderr);
     capture(
         sub {
-           auto::icu::_handle_ccflags_status($conf,
+           auto::icu::_handle_ccflags_status(
+               $conf,
                {
                    ccflags_status  => 0,
-                   verbose         => 1,
                    icuheaders      => $icuheaders,
                },
            );
@@ -427,13 +443,14 @@
 $conf->data->set( ccflags => $status ); # re-set for next test
 
 {
+    $conf->options->set( verbose => undef );
     my ($stdout, $stderr);
     capture(
         sub {
-           auto::icu::_handle_ccflags_status($conf,
+           auto::icu::_handle_ccflags_status(
+               $conf,
                {
                    ccflags_status  => 0,
-                   verbose         => 0,
                    icuheaders      => $icuheaders,
                },
            );
@@ -652,6 +669,7 @@
         $conf->options->set( %{$args} );
         $step = test_step_constructor_and_description($conf);
         {
+            $conf->options->set( verbose => 1 );
             my ($stdout, $stderr, $ret);
             my $icuconfig;
             my ($without, $icushared, $icuheaders);
@@ -664,7 +682,6 @@
                             without         => 0,
                             autodetect      => 1,
                             icuconfig       => $icuconfig,
-                            verbose         => 1,
                         }
                     );
                 },

Modified: branches/gsoc_threads/t/steps/auto/msvc-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/msvc-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/msvc-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -93,15 +93,13 @@
 
 $major = 13;
 $minor = 99;
-$verbose = undef;
-$status = $step->_handle_not_msvc($conf, $major, $minor, $verbose);
+$status = $step->_handle_not_msvc($conf, $major, $minor);
 ok(! defined $status, 'sub return value, as expected, not yet set');
 ok(! $step->result(), 'result, as expected, not yet set');
 
 $major = 13;
 $minor = undef;
-$verbose = undef;
-$status = $step->_handle_not_msvc($conf, $major, $minor, $verbose);
+$status = $step->_handle_not_msvc($conf, $major, $minor);
 ok($status, 'sub return value, as expected, set to true value');
 is($step->result(), q{no}, 'Got expected result');
 ok(! defined ($conf->data->get( 'msvcversion' )),
@@ -109,13 +107,21 @@
 
 $major = undef;
 $minor = 99;
-$verbose = undef;
-$status = $step->_handle_not_msvc($conf, $major, $minor, $verbose);
+$status = $step->_handle_not_msvc($conf, $major, $minor);
 ok($status, 'sub return value, as expected, set to true value');
 is($step->result(), q{no}, 'Got expected result');
 ok(! defined ($conf->data->get( 'msvcversion' )),
     'msvcversion is undef, as expected');
 
+$conf->replenish($serialized);
+
+########## _handle_not_msvc() ##########
+
+($args, $step_list_ref) = process_options( {
+    argv            => [ q{--verbose=1} ],
+    mode            => q{configure},
+} );
+$conf->options->set(%{$args});
 {
     my $stdout;
     $major = undef;
@@ -123,7 +129,7 @@
     $verbose = 1;
     capture(
         sub { $status =
-            $step->_handle_not_msvc($conf, $major, $minor, $verbose); },
+            $step->_handle_not_msvc($conf, $major, $minor); },
         \$stdout,
     );
     ok($status, 'sub return value, as expected, set to true value');
@@ -141,8 +147,7 @@
 
 $major = 13;
 $minor = 99;
-$verbose = undef;
-$msvcversion = $step->_compose_msvcversion($major, $minor, $verbose);
+$msvcversion = $step->_compose_msvcversion($major, $minor);
 is($msvcversion, '13.99', "Got expected MSVC version");
 is($step->result(), 'yes, 13.99', "Got expected result");
 $step->set_result(undef);
@@ -151,10 +156,9 @@
     my $stdout;
     $major = 13;
     $minor = 99;
-    $verbose = 1;
     capture(
         sub { $msvcversion =
-            $step->_compose_msvcversion($major, $minor, $verbose); },
+            $step->_compose_msvcversion($major, $minor); },
         \$stdout,
     );
     is($msvcversion, '13.99', "Got expected MSVC version");

Modified: branches/gsoc_threads/t/steps/auto/neg_0-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/neg_0-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/neg_0-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -55,11 +55,10 @@
 
 my $d_neg_0;
 my $orig_has_neg_0 = 0;
-my $verbose = $conf->data->get('verbose');
 
 $d_neg_0 = '-0';
 
-is( $step->_evaluate_cc_run($conf, $d_neg_0, $orig_has_neg_0, $verbose),
+is( $step->_evaluate_cc_run($conf, $d_neg_0, $orig_has_neg_0),
     1,
     '_evaluate_cc_run() completed satisfactorily' );
 
@@ -67,7 +66,7 @@
 
 $d_neg_0 = '0';
 
-is( $step->_evaluate_cc_run($conf, $d_neg_0, $orig_has_neg_0, $verbose),
+is( $step->_evaluate_cc_run($conf, $d_neg_0, $orig_has_neg_0),
     0,
     '_evaluate_cc_run() completed satisfactorily' );
 is( $step->result(), 'no', 'Got expected result' );
@@ -85,7 +84,6 @@
 $conf->options->set( %{$args} );
 $step = test_step_constructor_and_description($conf);
 
-$verbose = $conf->options->get('verbose');
 my $has_neg_0;
 
 $d_neg_0 = '-0';
@@ -94,7 +92,7 @@
     capture(
         sub {
             $has_neg_0 = $step->_evaluate_cc_run(
-                $conf, $d_neg_0, $orig_has_neg_0, $verbose
+                $conf, $d_neg_0, $orig_has_neg_0
             ),
         },
         \$stdout,
@@ -111,7 +109,7 @@
     capture(
         sub {
             $has_neg_0 = $step->_evaluate_cc_run(
-                $conf, $d_neg_0, $orig_has_neg_0, $verbose
+                $conf, $d_neg_0, $orig_has_neg_0
             ),
         },
         \$stdout,

Modified: branches/gsoc_threads/t/steps/auto/opengl-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/opengl-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/opengl-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests => 32;
+use Test::More tests => 29;
 use Carp;
 use lib qw( lib );
 use_ok('config::auto::opengl');
@@ -138,26 +138,8 @@
     my ($glut_api_version, $glut_brand);
     capture(
         sub { ($glut_api_version, $glut_brand) = $step->_evaluate_cc_run(
+            $conf,
             $test,
-            0,
-        ); },
-        \$stdout,
-        \$stderr,
-    );
-    is( $glut_api_version, $try[0],
-        "Got first expected return value for _evaluate_cc_run()." );
-    is( $glut_brand, $try[1],
-        "Got first expected return value for _evaluate_cc_run()." );
-    ok(! $stdout, "Nothing captured on STDOUT, as expected");
-}
-
-{
-    my ($stdout, $stderr);
-    my ($glut_api_version, $glut_brand);
-    capture(
-        sub { ($glut_api_version, $glut_brand) = $step->_evaluate_cc_run(
-            $test,
-            $conf->options->get( 'verbose' )
         ); },
         \$stdout,
         \$stderr,
@@ -171,6 +153,8 @@
         qr/yes, $glut_brand API version $glut_api_version/,
         "Got expected verbose output for _evaluate_cc_run()"
     );
+    # prepare for next test
+    $conf->options->set(verbose => undef);
 }
 
 ########## _handle_glut() ##########

Modified: branches/gsoc_threads/t/steps/auto/pcre-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/pcre-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/pcre-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -98,14 +98,13 @@
 
 # Mock different outcomes of _evaluate_cc_run
 my ($test, $has_pcre);
-my $verbose = $conf->options->get('verbose');
 
 $test = q{pcre foobar};
-ok(! $step->_evaluate_cc_run($test, $verbose),
+ok(! $step->_evaluate_cc_run($conf, $test),
     "Got expected setting for HAS_PCRE");
 
 $test = q{pcre 4.1};
-ok($step->_evaluate_cc_run($test, $verbose),
+ok($step->_evaluate_cc_run($conf, $test),
     "_evaluate_cc_run returned true value as expected");
 is($step->result(), q{yes, 4.1}, "Got expected PCRE version");
 
@@ -122,14 +121,13 @@
 $step = test_step_constructor_and_description($conf);
 
 # Mock different outcomes of _evaluate_cc_run
-$verbose = $conf->options->get('verbose');
 
 $test = q{pcre 4.0};
 {
     my ($stdout, $stderr);
     capture(
         sub {
-            $has_pcre = $step->_evaluate_cc_run($test, $verbose);
+            $has_pcre = $step->_evaluate_cc_run($conf, $test);
         },
         \$stdout,
     );

Modified: branches/gsoc_threads/t/steps/auto/readline-02.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/readline-02.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/readline-02.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -35,10 +35,10 @@
 
 ########## _evaluate_cc_run() ##########
 
-my ($has_readline, $verbose);
+my ($has_readline);
 
-$verbose = undef;
-$has_readline = $step->_evaluate_cc_run($verbose);
+$conf->options->set(verbose => undef);
+$has_readline = $step->_evaluate_cc_run($conf);
 is($has_readline, 1, "Got expected value for has_readline");
 is($step->result(), 'yes', "Expected result was set");
 # Prepare for next test
@@ -46,9 +46,9 @@
 
 {
     my $stdout;
-    $verbose = 1;
+    $conf->options->set(verbose => 1);
     capture(
-        sub { $has_readline = $step->_evaluate_cc_run($verbose); },
+        sub { $has_readline = $step->_evaluate_cc_run($conf); },
         \$stdout,
     );
     is($has_readline, 1, "Got expected value for has_readline");
@@ -56,6 +56,7 @@
     like($stdout, qr/\(yes\)/, "Got expected verbose output");
     # Prepare for next test
     $step->set_result(undef);
+    $conf->options->set(verbose => undef);
 }
 
 ########## _handle_readline() ##########

Modified: branches/gsoc_threads/t/steps/auto/zlib-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/auto/zlib-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/auto/zlib-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -90,8 +90,6 @@
    '-lz',
    "_select_lib() returned expected value");
 
-my $verbose = undef;
-
 $conf->replenish($serialized);
 
 ########## --without-zlib; _evaluate_cc_run() ##########
@@ -105,8 +103,8 @@
 my ($test, $has_zlib);
 $test = qq{1.2.3\n};
 $has_zlib = 0;
-$verbose = undef;
-$has_zlib = $step->_evaluate_cc_run($conf, $test, $has_zlib, $verbose);
+$conf->options->set(verbose => undef);
+$has_zlib = $step->_evaluate_cc_run($conf, $test, $has_zlib);
 is($has_zlib, 1, "'has_zlib' set as expected");
 is($step->result(), 'yes, 1.2.3', "Expected result was set");
 # Prepare for next test
@@ -114,8 +112,8 @@
 
 $test = qq{foobar};
 $has_zlib = 0;
-$verbose = undef;
-$has_zlib = $step->_evaluate_cc_run($conf, $test, $has_zlib, $verbose);
+$conf->options->set(verbose => undef);
+$has_zlib = $step->_evaluate_cc_run($conf, $test, $has_zlib);
 is($has_zlib, 0, "'has_zlib' set as expected");
 ok(! defined $step->result(), "Result is undefined, as expected");
 
@@ -123,10 +121,10 @@
     my $stdout;
     $test = qq{1.2.3\n};
     $has_zlib = 0;
-    $verbose = 1;
+    $conf->options->set(verbose => 1);
     capture(
         sub { $has_zlib =
-            $step->_evaluate_cc_run($conf, $test, $has_zlib, $verbose); },
+            $step->_evaluate_cc_run($conf, $test, $has_zlib); },
         \$stdout,
     );
     is($has_zlib, 1, "'has_zlib' set as expected");

Modified: branches/gsoc_threads/t/steps/gen/opengl-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/gen/opengl-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/gen/opengl-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  7;
+use Test::More tests =>  20;
 use Carp;
 use lib qw( lib );
 use_ok('config::gen::opengl');
@@ -14,6 +14,7 @@
 use Parrot::Configure::Test qw(
     test_step_constructor_and_description
 );
+use IO::CaptureOutput qw( capture );
 
 ########## regular ##########
 
@@ -27,17 +28,84 @@
 my $conf = Parrot::Configure::Step::Test->new;
 $conf->include_config_results( $args );
 
-my $pkg = q{gen::opengl};
+my ($pkg, $step, $result);
+my $serialized = $conf->pcfreeze();
+
+$pkg = q{gen::opengl};
 $conf->add_steps($pkg);
 $conf->options->set( %{$args} );
-my $step = test_step_constructor_and_description($conf);
+$step = test_step_constructor_and_description($conf);
 
 ##### mock no OpenGL #####
 $conf->data->set( has_opengl => 0 );
-my $result = $step->runstep($conf);
+$result = $step->runstep($conf);
 ok($result, "runstep() returned true value");
 is($step->result(), q{skipped}, "Got expected result when no 'has_opengl'" );
 
+$conf->replenish($serialized);
+
+########### verbose ###########
+
+($args, $step_list_ref) = process_options( {
+    argv => [ q{--verbose} ],
+    mode => q{configure},
+} );
+
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+$step = test_step_constructor_and_description($conf);
+{
+    my ($stdout, $stderr);
+    capture(
+        sub { $result = $step->runstep($conf); },
+        \$stdout,
+        \$stderr,
+    );
+    ok($result, "runstep() returned true value");
+    like( $stdout,
+        qr/Checking for OpenGL headers using the following globs/s,
+        "Got expected verbose output"
+    );
+    like( $stdout,
+        qr/Found the following OpenGL headers/s,
+        "Got expected verbose output"
+    );
+    like( $stdout,
+        qr/PASS\s+FAIL\s+IGNORE\s+HEADER/s,
+        "Got expected verbose output"
+    );
+    like( $stdout,
+        qr/unique signatures successfully translated/s,
+        "Got expected verbose output"
+    );
+}
+
+$conf->replenish($serialized);
+
+########### extra verbose ###########
+
+($args, $step_list_ref) = process_options( {
+    argv => [ q{--verbose=3} ],
+    mode => q{configure},
+} );
+
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+$step = test_step_constructor_and_description($conf);
+{
+    my ($stdout, $stderr);
+    capture(
+        sub { $result = $step->runstep($conf); },
+        \$stdout,
+        \$stderr,
+    );
+    ok($result, "runstep() returned true value");
+    like( $stdout,
+        qr/COUNT\s+NCI SIGNATURE/s,
+        "Got expected verbose output"
+    );
+}
+
 pass("Completed all tests in $0");
 
 ################### DOCUMENTATION ###################

Modified: branches/gsoc_threads/t/steps/gen/platform-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/gen/platform-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/gen/platform-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -42,18 +42,17 @@
 my $platform_orig = $conf->data->get('osname');
 my $archname_orig = $conf->data->get('archname');
 $conf->data->set( archname => 'foo-bar' );
-my $verbose = 0;
 
 ########## _get_generated() ##########
 
 my $TEMP_generated_orig = $conf->data->get('TEMP_generated');
 {
-    $verbose = 1;
+    $conf->options->set(verbose => 1);
     my ($stdout, $stderr, $rv);
     my $expected = q{foo};
     $conf->data->set( TEMP_generated => $expected );
     capture(
-        sub { $rv = $step->_get_generated( $conf, $verbose ) },
+        sub { $rv = $step->_get_generated( $conf ) },
         \$stdout,
         \$stderr,
     );
@@ -61,8 +60,8 @@
     like( $stdout, qr/\($expected\)/, "Got expected verbose output");
 }
 $conf->data->set( TEMP_generated => undef );
-$verbose = 0;
-is( $step->_get_generated( $conf, $verbose ), q{},
+$conf->options->set(verbose => 0);
+is( $step->_get_generated( $conf ), q{},
     "Got expected generated");
 
 # re-set to original values

Modified: branches/gsoc_threads/t/steps/init/defaults-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/init/defaults-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/init/defaults-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests => 37;
+use Test::More tests => 49;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -143,6 +143,44 @@
 is($conf->data->get( 'linkflags' ), '-bundle -L/usr/local/lib64',
     "Got expected value for 'linkflags'");
 
+$conf->replenish($serialized);
+
+##### with extra-nci-thunks #####
+($args, $step_list_ref) = process_options(
+    {
+        argv => [ ],
+        mode => q{configure},
+    }
+);
+
+$conf->options->set( %{$args} );
+$step = test_step_constructor_and_description($conf);
+$ret = $step->runstep($conf);
+ok( defined $ret, "runstep() returned defined value" );
+ok($conf->data->get( 'has_extra_nci_thunks' ),
+    "Got expected value for has_extra_nci_thunks" );
+ok($conf->data->get( 'HAS_EXTRA_NCI_THUNKS' ),
+    "Got expected value for HAS_EXTRA_NCI_THUNKS" );
+
+$conf->replenish($serialized);
+
+##### without extra-nci-thunks #####
+($args, $step_list_ref) = process_options(
+    {
+        argv => [ q{--without-extra-nci-thunks} ],
+        mode => q{configure},
+    }
+);
+
+$conf->options->set( %{$args} );
+$step = test_step_constructor_and_description($conf);
+$ret = $step->runstep($conf);
+ok( defined $ret, "runstep() returned defined value" );
+ok(! $conf->data->get( 'has_extra_nci_thunks' ),
+    "Got expected value for has_extra_nci_thunks" );
+ok(! $conf->data->get( 'HAS_EXTRA_NCI_THUNKS' ),
+    "Got expected value for HAS_EXTRA_NCI_THUNKS" );
+
 pass("Completed all tests in $0");
 
 ################### DOCUMENTATION ###################

Modified: branches/gsoc_threads/t/steps/init/hints/darwin-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/init/hints/darwin-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/init/hints/darwin-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -40,10 +40,11 @@
 my $stored = $conf->data->get($problematic_flag);
 
 {
+    $conf->options->set( verbose => undef );
     my ($stdout, $stderr);
     capture(
         sub { init::hints::darwin::_precheck(
-            $problematic_flag, $stored, 0
+            $conf, $problematic_flag, $stored
         ) },
         \$stdout,
         \$stderr,
@@ -52,10 +53,11 @@
 }
 
 {
+    $conf->options->set( verbose => 1 );
     my ($stdout, $stderr);
     capture(
         sub { init::hints::darwin::_precheck(
-            $problematic_flag, $stored, 1
+            $conf, $problematic_flag, $stored
         ) },
         \$stdout,
         \$stderr,
@@ -68,10 +70,11 @@
 }
 
 {
+    $conf->options->set( verbose => 1 );
     my ($stdout, $stderr);
     capture(
         sub { init::hints::darwin::_precheck(
-            $problematic_flag, q{}, 1
+            $conf, $problematic_flag, q{}
         ) },
         \$stdout,
         \$stderr,
@@ -81,6 +84,7 @@
         "_precheck():  Got expected verbose output" );
     like($stdout, qr/Pre-check:\s+\(nil\)/,
         "_precheck():  Got expected verbose output" );
+    $conf->options->set( verbose => undef );
 }
 
 ##### _strip_arch_flags_engine #####
@@ -107,22 +111,24 @@
 ##### _postcheck #####
 
 {
+    $conf->options->set( verbose => undef );
     my $flag = 'ccflags';
     my $flagsref = { 'ccflags' => 'my ccflag' };
     my ($stdout, $stderr);
 
     capture(
         sub { init::hints::darwin::_postcheck(
-            $flagsref, $flag, 0
+            $conf, $flagsref, $flag
         ) },
         \$stdout,
         \$stderr,
     );
     ok( ! $stdout, "_postcheck():  Non-verbose mode produced no output" );
 
+    $conf->options->set( verbose => 1 );
     capture(
         sub { init::hints::darwin::_postcheck(
-            $flagsref, $flag, 1
+            $conf, $flagsref, $flag
         ) },
         \$stdout,
         \$stderr,
@@ -131,10 +137,11 @@
     like($stdout, qr/Post-check:\s+$flagsref->{$flag}/,
         "_postcheck():  Got expected verbose output" );
 
+    $conf->options->set( verbose => 1 );
     $flagsref = { 'ccflags' => undef };
     capture(
         sub { init::hints::darwin::_postcheck(
-            $flagsref, $flag, 1
+            $conf, $flagsref, $flag
         ) },
         \$stdout,
         \$stderr,
@@ -164,10 +171,11 @@
         "_strip_arch_flags(): '-arch' flags and extra whitespace removed",
     );
 
+    $conf->options->set( verbose => 1 );
     my ($stdout, $stderr);
     capture(
         sub {
-            $flagsref = init::hints::darwin::_strip_arch_flags($conf, 1);
+            $flagsref = init::hints::darwin::_strip_arch_flags($conf);
         },
         \$stdout,
         \$stderr,
@@ -351,17 +359,17 @@
     $addl_flags_ref = undef;
     $flagsref = undef;
     $title = 'Fink';
-    $verbose = 0;
+    $conf->options->set( 'verbose' => undef );
     ok( init::hints::darwin::_add_to_flags(
-        $addl_flags_ref, $flagsref, $title, $verbose
+        $conf, $addl_flags_ref, $flagsref, $title
     ), "_add_to_flags(): returned true value when no probes found" );
 
-    $verbose = 1;
+    $conf->options->set( 'verbose' => 1 );
     {
         my ($stdout, $stderr);
         capture(
             sub { init::hints::darwin::_add_to_flags(
-                $addl_flags_ref, $flagsref, $title, $verbose
+                $conf, $addl_flags_ref, $flagsref, $title
             ); },
             \$stdout,
             \$stderr,
@@ -381,9 +389,9 @@
     $flagsref->{ccflags} = " -pipe -fno-common -Wno-long-double ";
     $flagsref->{linkflags} = undef;
     $title = 'Fink';
-    $verbose = 0;
+    $conf->options->set( 'verbose' => undef );
     my $rv = init::hints::darwin::_add_to_flags(
-        $addl_flags_ref, $flagsref, $title, $verbose
+        $conf, $addl_flags_ref, $flagsref, $title
     );
     is( $flagsref->{linkflags}, " $addl_flags_ref->{linkflags}",
         "_add_to_flags():  flag added where not previously populated" );

Modified: branches/gsoc_threads/t/steps/init/hints/linux-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/init/hints/linux-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/init/hints/linux-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -37,17 +37,16 @@
 ##### _handle_icc_ccflags() #####
 
 my $ccflags = '';
-my $verbose = 0;
-$ccflags = init::hints::linux::_handle_icc_ccflags($ccflags, $verbose);
+$ccflags = init::hints::linux::_handle_icc_ccflags($conf, $ccflags);
 like( $ccflags, qr/\s-we147/, "On icc, 'cc_flags' set as expected" );
 
 $ccflags = '';
-$verbose = 1;
 {
+    $conf->options->set( verbose => 1 );
     my ($stdout, $stderr);
     capture(
         sub { $ccflags =
-            init::hints::linux::_handle_icc_ccflags($ccflags, $verbose); },
+            init::hints::linux::_handle_icc_ccflags($conf, $ccflags); },
         \$stdout,
         \$stderr,
     );

Modified: branches/gsoc_threads/t/steps/inter/libparrot-01.t
==============================================================================
--- branches/gsoc_threads/t/steps/inter/libparrot-01.t	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/t/steps/inter/libparrot-01.t	Thu Jun 10 21:09:12 2010	(r47545)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests => 48;
+use Test::More tests => 74;
 use Carp;
 use lib qw( lib t/configure/testlib );
 use_ok('config::inter::libparrot');
@@ -258,6 +258,101 @@
 $conf->data->set('has_dynamic_linking' => $has_dynamic_linking_orig);
 @prompts = ();
 
+##### get_libs() #####
+
+my %seen;
+{
+    local $^O = 'foobar';
+    %seen = map { $_ => 1 } inter::libparrot::get_libs();
+    is( scalar keys %seen, 1, "Got expected number of libs: generic" );
+    ok( $seen{'libparrot.so'}, "Got expected lib" );
+}
+
+{
+    local $^O = 'MSWin32';
+    %seen = map { $_ => 1 } inter::libparrot::get_libs();
+    is( scalar keys %seen, 3, "Got expected number of libs: Win32" );
+    is_deeply(
+        \%seen,
+        {
+            'libparrot.dll' => 1,
+            'libparrot.lib' => 1,
+            'libparrot.dll.a' => 1,
+        },
+        "Got expected libs"
+    );
+}
+
+{
+    local $^O = 'cygwin';
+    %seen = map { $_ => 1 } inter::libparrot::get_libs();
+    is( scalar keys %seen, 1, "Got expected number of libs: cygwin" );
+    is_deeply(
+        \%seen,
+        {
+            'libparrot.dll.a' => 1,
+        },
+        "Got expected libs"
+    );
+}
+
+{
+    local $^O = 'darwin';
+    %seen = map { $_ => 1 } inter::libparrot::get_libs();
+    is( scalar keys %seen, 2, "Got expected number of libs: darwin" );
+    is_deeply(
+        \%seen,
+        {
+            'libparrot.dylib' => 1,
+            'libparrot.a' => 1,
+        },
+        "Got expected libs"
+    );
+}
+
+##### get_libpaths() #####
+
+%seen = map { $_ => 1 } inter::libparrot::get_libpaths($conf);
+ok( $seen{'/usr/local/lib'}, "Got expected lib: generic" );
+ok( $seen{'/usr/lib'}, "Got expected lib: generic" );
+
+{
+    local $^O  = 'MSWin32';
+    local $ENV{PATH} = 'alpha;beta';
+    %seen = map { $_ => 1 } inter::libparrot::get_libpaths($conf);
+    ok( $seen{'/usr/local/lib'}, "Got expected lib: MSWin32" );
+    ok( $seen{'/usr/lib'}, "Got expected lib: MSWin32" );
+    ok( $seen{'alpha'}, "Got expected lib: MSWin32" );
+    ok( $seen{'beta'}, "Got expected lib: MSWin32" );
+}
+
+{
+    local $ENV{LD_LIBRARY_PATH} = 'alpha:beta';
+    %seen = map { $_ => 1 } inter::libparrot::get_libpaths($conf);
+    ok( $seen{'/usr/local/lib'}, "Got expected lib: LD_LIBRARY_PATH" );
+    ok( $seen{'/usr/lib'}, "Got expected lib: LD_LIBRARY_PATH" );
+    ok( $seen{'alpha'}, "Got expected lib: LD_LIBRARY_PATH" );
+    ok( $seen{'beta'}, "Got expected lib: LD_LIBRARY_PATH" );
+}
+
+{
+    local $ENV{LD_RUN_PATH} = 'alpha:beta';
+    %seen = map { $_ => 1 } inter::libparrot::get_libpaths($conf);
+    ok( $seen{'/usr/local/lib'}, "Got expected lib: LD_RUN_PATH" );
+    ok( $seen{'/usr/lib'}, "Got expected lib: LD_RUN_PATH" );
+    ok( $seen{'alpha'}, "Got expected lib: LD_RUN_PATH" );
+    ok( $seen{'beta'}, "Got expected lib: LD_RUN_PATH" );
+}
+
+{
+    local $ENV{DYLD_LIBRARY_PATH} = 'alpha:beta';
+    %seen = map { $_ => 1 } inter::libparrot::get_libpaths($conf);
+    ok( $seen{'/usr/local/lib'}, "Got expected lib: DYLD_LIBRARY_PATH" );
+    ok( $seen{'/usr/lib'}, "Got expected lib: DYLD_LIBRARY_PATH" );
+    ok( $seen{'alpha'}, "Got expected lib: DYLD_LIBRARY_PATH" );
+    ok( $seen{'beta'}, "Got expected lib: DYLD_LIBRARY_PATH" );
+}
+
 pass("Completed all tests in $0");
 
 ################### DOCUMENTATION ###################

Modified: branches/gsoc_threads/tools/build/headerizer.pl
==============================================================================
--- branches/gsoc_threads/tools/build/headerizer.pl	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/build/headerizer.pl	Thu Jun 10 21:09:12 2010	(r47545)
@@ -89,8 +89,9 @@
 
         my $heading = $headerizer->generate_documentation_signature($decl);
 
-        $text =~ s/=item C<[^>]*\b$name\b[^>]*>\n+/$heading\n\n/sm or
-            warn "$cfile_name: $name has no POD\n";
+        $text =~ s/=item C<[^>]*\b$name\b[^>]*>\n+/$heading\n\n/sm or do {
+            warn "$cfile_name: $name has no POD\n" unless $name =~ /^yy/; # lexer funcs don't have to have POD
+        }
     }
     open( my $fhout, '>', $cfile_name ) or die "Can't create $cfile_name: $!";
     print {$fhout} $text;
@@ -126,7 +127,9 @@
             push( @attrs, "__attribute__nonnull__($n)" );
         }
         if ( ( $arg =~ m{\*} ) && ( $arg !~ /\b(SHIM|((ARGIN|ARGOUT|ARGMOD)(_NULLOK)?)|ARGFREE(_NOTNULL)?)\b/ ) ) {
-            $headerizer->squawk( $file, $name, qq{"$arg" isn't protected with an ARGIN, ARGOUT or ARGMOD (or a _NULLOK variant), or ARGFREE} );
+            if ( $name !~ /^yy/ ) { # Don't complain about the lexer auto-generated funcs
+                $headerizer->squawk( $file, $name, qq{"$arg" isn't protected with an ARGIN, ARGOUT or ARGMOD (or a _NULLOK variant), or ARGFREE} );
+            }
         }
         if ( ($arg =~ /\bconst\b/) && ($arg =~ /\*/) && ($arg !~ /\*\*/) && ($arg =~ /\b(ARG(MOD|OUT))\b/) ) {
             $headerizer->squawk( $file, $name, qq{"$arg" is const, but that $1 conflicts with const} );

Modified: branches/gsoc_threads/tools/build/ops2c.pl
==============================================================================
--- branches/gsoc_threads/tools/build/ops2c.pl	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/build/ops2c.pl	Thu Jun 10 21:09:12 2010	(r47545)
@@ -1,149 +1,20 @@
 #! perl
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
-use warnings;
 use strict;
+use warnings;
+
 use FindBin qw($Bin);
 use lib "$Bin/../lib";    # install location
-use lib "$Bin/../../lib"; # build location
-use Parrot::Ops2c::Auxiliary qw( Usage getoptions );
-use Parrot::Ops2c::Utils ();
-
-my $flagref = getoptions();
-if ( ( not defined $flagref )
-    or $flagref->{help}
-    or ( not @ARGV ) )
-{
-    Usage();
-    exit 1;
-}
-
-my $self = Parrot::Ops2c::Utils->new(
-    {
-        argv   => [@ARGV],
-        flag   => $flagref,
-        script => $0,
-    }
-);
-if ( not defined $self ) {
-    Usage();
-    exit 1;
-}
-
-$self->print_c_header_file();
-
-$self->print_c_source_file();
-
-exit 0;
-
-#################### DOCUMENTATION ####################
-
-=head1 NAME
-
-tools/build/ops2c.pl - Parser for .ops files
-
-=head1 SYNOPSIS
-
-    % perl tools/build/ops2c.pl trans [--help] [--no-lines] [--dynamic]
-                                      [--core | input.ops [input2.ops ...]]
-       trans := C
-
-For example:
-
-    % perl tools/build/ops2c.pl C --core
-
-    % perl tools/build/ops2c.pl C --dynamic myops.ops
-
-=head1 DESCRIPTION
-
-This script uses a supplied transform to create a pair of C header and
-implementation files from the operation definitions found in one or more
-F<*.ops> files.
-
-=head2 Transforms
-
-The first command-line argument is the last package name component of a
-subclass of C<Parrot::OpTrans>. These subclasses all have full names of
-the form C<Parrot::OpTrans::*>. An instance of the class is created and
-later consulted for various bits of information needed to generate the C
-code. Each creates a different type of run loop.
-
-=over
-
-=item C<C>
-
-Create the function-based (slow or fast core) run loop.
-
-=back
-
-=head2 Options
-
-=over 4
-
-=item C<--help>
-
-Print synopsis.
-
-=item C<--dynamic>
-
-Indicate that the opcode library is dynamic.
-
-=item C<--core>
-
-Build the Parrot core opcode library.
-
-=item C<--no-lines>
-
-Do not generate C<#line> directives in the generated C code.
-
-=back
-
-=head1 NOTE
-
-Most of the functionality in F<tools/build/ops2c.pl> has been extracted into
-methods and subroutines found in Parrot::Ops2c::Utils and
-Parrot::Ops2c::Auxiliary.  This refactoring facilitates unit testing and
-coverage analysis of that functionality.  A test suite has been provided in
-F<t/tools/ops2cutils/>.  It is recommended that future refactoring of this
-functionality proceed in a test-driven manner, I<i.e.,> tests should be
-written reflecting any changes to interface or functionality; the code should
-be written which implements the revisions; the code should be tested; and
-coverage analysis should be performed with Devel::Cover to measure the extent
-to which the tests exercise the code.
-
-=head1 AUTHORS
-
-Based on the commit logs, the following members of the Parrot project have
-contributed to this program:
-
-    ambs bernhard boemmels brentdax chip
-    coke dan gregor grunblatt jgoff
-    jkeenan jonathan josh jrieks leo
-    mikescott mrjoltcola nicholas particle paultcochrane
-    petdance rgrjr robert simon
-
-=head1 SEE ALSO
-
-=over 4
-
-=item F<tools/build/ops2pm.pl>
-
-=item C<Parrot::OpsFile>
-
-=item C<Parrot::Op>
-
-=item C<Parrot::OpTrans>
-
-=item C<Parrot::OpTrans::C>
-
-=item C<Parrot::Ops2c::Utils>
-
-=item C<Parrot::Ops2c::Auxiliary>
-
-=back
+use Parrot::Config;
+use File::Spec;
 
-=cut
+warn 'ops2c.pl is deprecated. Use ops2c$(EXE) instead';
+# Ignore "core"
+shift @ARGV;
+my $ops2c = File::Spec->catfile($PConfig{bindir}, 'ops2c');
+exec $ops2c, @ARGV;
 
 # Local Variables:
 #   mode: cperl

Deleted: branches/gsoc_threads/tools/build/ops2pm.pl
==============================================================================
--- branches/gsoc_threads/tools/build/ops2pm.pl	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,164 +0,0 @@
-#! perl
-# Copyright (C) 2001-2007, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-
-use lib 'lib';
-use Parrot::Ops2pm;
-use Parrot::Ops2pm::Auxiliary qw( Usage getoptions );
-
-my $flagref = getoptions();
-
-if ( $flagref->{help} or !@ARGV ) {
-    Usage();
-    exit;
-}
-
-my $self = Parrot::Ops2pm->new(
-    {
-        argv    => [@ARGV],
-        nolines => $flagref->{nolines},
-        renum   => $flagref->{renum},
-        moddir  => "lib/Parrot/OpLib",
-        module  => "core.pm",
-        inc_dir => "include/parrot/oplib",
-        inc_f   => "ops.h",
-        script  => "tools/build/ops2pm.pl",
-    }
-);
-
-$self->prepare_ops();
-$self->load_op_map_files();
-$self->sort_ops();
-$self->prepare_real_ops();
-$self->print_module();
-$self->print_h();
-
-exit 0;
-
-################### DOCUMENTATION ####################
-
-=head1 NAME
-
-tools/build/ops2pm.pl - Generate Perl module from operation definitions
-
-=head1 SYNOPSIS
-
- $ perl tools/build/ops2pm.pl [--help] [--no-lines] input.ops [input2.ops ...]
- $ perl tools/build/ops2pm.pl [--renum]  input.ops [input2.ops ...]
-
-=head1 DESCRIPTION
-
-Reads the ops files listed on the command line and outputs a
-F<Parrot::OpLib::core> module containing information about the ops.
-Also outputs F<include/parrot/oplib/ops.h>.  This program is called by Parrot's
-F<make>.
-
-If called with the C<--renum> flag, renumbers the file F<src/ops/ops.num>.
-This is mandatory when adding or removing opcodes.
-
-=head1 OPTIONS
-
-=over 4
-
-=item C<--help>
-
-Print synopsis.
-
-=item C<--no-lines>
-
-Do not generate C<#line> directives in the generated C code.
-
-=item C<--renum>
-
-Renumber opcodes according to existing ops in ops/num and natural
-order in the given ops files. See also F<tools/dev/ops_renum.mak>.
-
-=back
-
-Most of the functionality in this program is now held in Parrot::Ops2pm::Util
-methods and a small number of Parrot::Ops2pm::Auxiliary subroutines.
-See those modules' documentation for discussion of those functions.
-Revisions to the functionality should be made in those packages and tested
-against tests found in F<t/tools/ops2pm/>.
-
-=head1 WARNING
-
-Generating a C<Parrot::OpLib::core> module for a set of ops files that
-you do not later turn into C code (see F<tools/build/ops2c.pl>) with the
-same op content and order is a recipe for disaster. But as long as you
-just run these tools in the standard build process via C<make> there
-shouldn't be a problem.
-
-=head1 TODO
-
-The original design of the ops processing code was intended to be
-a read-only representation of what was in a particular ops file. It was
-not originally intended that it was a mechanism for building a bigger
-virtual ops file from multiple physical ops files.
-
-This code does half of that job (the other half is getting them to
-compile together instead of separately in a F<*_ops.c> file).
-
-You can see evidence of this by the way this code reaches in to the
-internal C<OPS> hash key to do its concatenation, and the way it
-twiddles each op's C<CODE> hash key after that.
-
-If the op and oplib Perl modules are going to be used for modifying
-information read from ops files in addition to reading it, they should
-be changed to make the above operations explicitly supported.
-
-Otherwise, the Parrot build and interpreter start-up logic should be
-modified so that it doesn't need to concatenate separate ops files.
-
-=head1 SEE ALSO
-
-=over 4
-
-=item F<tools/build/ops2c.pl>.
-
-=item F<lib/Parrot/Ops2pm.pm>.
-
-=item F<lib/Parrot/Ops2pm/Auxiliary.pm>.
-
-=item F<tools/dev/ops_renum.mak>.
-
-=back
-
-=head1 AUTHOR
-
-Over the years, F<tools/build/ops2pm.pl> has been worked on by the following Parrot hackers:
-
-  bernhard
-  brentdax
-  chip
-  chromatic
-  coke
-  dan
-  gregor
-  jkeenan
-  leo
-  mikescott
-  particle
-  paultcochrane
-  petdance
-  robert
-  simon
-  tewk
-
-Others who provided code cited in the version control logs include:
-
-  Andy Dougherty
-  Jeff Gof
-  Steve Fink
-
-=cut
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/tools/dev/fetch_languages.pl
==============================================================================
--- branches/gsoc_threads/tools/dev/fetch_languages.pl	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/dev/fetch_languages.pl	Thu Jun 10 21:09:12 2010	(r47545)
@@ -48,7 +48,7 @@
 my %update_cmd = (
     SVN => [qw(svn update)],
     GIT => [qw(git pull)],
-    HG  => [qw(hg pull)],
+    HG  => [qw(hg pull --update)],
 );
 
 my @hlls = (

Modified: branches/gsoc_threads/tools/dev/mk_language_shell.pl
==============================================================================
--- branches/gsoc_threads/tools/dev/mk_language_shell.pl	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/dev/mk_language_shell.pl	Thu Jun 10 21:09:12 2010	(r47545)
@@ -210,10 +210,11 @@
     load_bytecode 'distutils.pbc'
 
     .local int reqsvn
-    $P0 = open 'PARROT_REVISION', 'r'
-    $S0 = readline $P0
+    $P0 = new 'FileHandle'
+    $P0.'open'('PARROT_REVISION', 'r')
+    $S0 = $P0.'readline'()
     reqsvn = $S0
-    close $P0
+    $P0.'close'()
 
     .local pmc config
     config = get_config()
@@ -227,7 +228,7 @@
     $S0 = $I0
     $S1 .= $S0
     $S1 .= ")\n"
-    printerr $S1
+    print $S1
     end
   L1:
 

Copied: branches/gsoc_threads/tools/dev/mk_packfile_pbc (from r47544, trunk/tools/dev/mk_packfile_pbc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gsoc_threads/tools/dev/mk_packfile_pbc	Thu Jun 10 21:09:12 2010	(r47545, copy of r47544, trunk/tools/dev/mk_packfile_pbc)
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# sh tools/dev/mk_packfile_pbc
+#
+# generate t/native_pbc/*.pbc for testing Packfile* PMCs.
+
+./parrot -o t/native_pbc/integer.pbc -a - <<EOF
+print 0x10203040
+end
+EOF
+[ $? -le 0 ] && echo "t/native_pbc/integer.pbc updated"
+./parrot -o t/native_pbc/number.pbc t/native_pbc/testdata/number.pasm && echo "t/native_pbc/number.pbc updated"
+./parrot -o t/native_pbc/string.pbc t/native_pbc/testdata/string.pasm  && echo "t/native_pbc/string.pbc updated"
+
+./parrot -o t/native_pbc/annotations.pbc - <<EOF
+.sub 'main'
+.annotate "file", "annotations.pir"
+.annotate "creator", "Parrot Foundation"
+.annotate "line", 1
+    say "Hi"
+    say "line"
+.annotate "line", 2
+    .return ()
+.end
+EOF
+

Modified: branches/gsoc_threads/tools/dev/nci_thunk_gen.pir
==============================================================================
--- branches/gsoc_threads/tools/dev/nci_thunk_gen.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/dev/nci_thunk_gen.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -45,8 +45,11 @@
     sigs = 'read_sigs'()
 
     $S0 = 'read_from_opts'('output')
-    $P0 = open $S0, 'w'
-    setstdout $P0
+    $P0 = new ['FileHandle']
+    $P0.'open'($S0, 'w')
+    $P1 = getinterp
+    .include 'stdio.pasm'
+    $P1.'stdhandle'(.PIO_STDOUT_FILENO, $P0)
 
     if targ == 'head'          goto get_targ
     if targ == 'thunks'        goto get_targ
@@ -708,7 +711,9 @@
 
 .sub 'read_sigs'
     .local pmc stdin, seen, sigs
-    stdin = getstdin
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    stdin = $P0.'stdhandle'(.PIO_STDIN_FILENO)
     seen  = new ['Hash']
     sigs  = new ['ResizablePMCArray']
 
@@ -735,7 +740,10 @@
                 $S0 = 'sprintf'(<<'ERROR', full_sig, lineno, $I0)
 Ignored signature '%s' on line %d (previously seen on line %d)
 ERROR
-                printerr $S0
+                $P0 = getinterp
+                .include 'stdio.pasm'
+                $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+                $P1.'print'($S0)
             end_dup_warn:
             goto read_loop
         unseen:
@@ -758,7 +766,7 @@
     .param pmc fh
 
     .local string line
-    line = readline fh
+    line = fh.'readline'()
 
     # handle comments
     $I0 = index line, '#'

Deleted: branches/gsoc_threads/tools/dev/opsrenumber.pl
==============================================================================
--- branches/gsoc_threads/tools/dev/opsrenumber.pl	Thu Jun 10 21:09:12 2010	(r47544)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,77 +0,0 @@
-#! perl
-# Copyright (C) 2001-2007, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-
-use lib 'lib';
-use Parrot::OpsRenumber;
-
-my $self = Parrot::OpsRenumber->new(
-    {
-        argv    => [@ARGV],
-        moddir  => "lib/Parrot/OpLib",
-        module  => "core.pm",
-        inc_dir => "include/parrot/oplib",
-        inc_f   => "ops.h",
-        script  => "tools/dev/opsrenumber.pl",
-    }
-);
-
-$self->prepare_ops();
-$self->renum_op_map_file();
-
-exit 0;
-
-################### DOCUMENTATION ####################
-
-=head1 NAME
-
-tools/dev/opsrenumber.pl - Renumber F<src/ops/ops.num>.
-
-=head1 SYNOPSIS
-
-    $ perl tools/dev/opsrenumber.pl input.ops [input2.ops ...]
-
-=head1 DESCRIPTION
-
-This program should be used when adding or removing opcodes.
-
-All opcodes except the first seven are potentially deletable and the opcodes'
-order may be rearranged.  However, in and after Parrot 1.0.0, deletion of
-opcodes should be a rare event.  The program will automatically detect which
-opcodes have been deleted and will renumber the remaining codes appropriately.
-
-The program, however, will B<not> automatically detect new opcodes.   This is
-a feature, not a bug, as it is intended to require someone to think about why
-new opcodes should be added.  Once a decision to add new opcodes has been
-made, those opcodes should be entered manually at the endc of
-F<src/ops/ops.num>, then F<tools/dev/opsrenumber.pl> (or F<make opsrenumber>)
-should be run.
-
-=head1 SEE ALSO
-
-=over 4
-
-=item F<lib/Parrot/Ops2pm/Base.pm>.
-
-=item F<lib/Parrot/OpsRenumber.pm>.
-
-=back
-
-=head1 AUTHOR
-
-This code was refactored out of F<tools/build/ops2pm.pl>.  That file contains
-a list of the contributors to this code over the years.
-
-The refactoring of this file was done by James E Keenan.
-
-=cut
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/gsoc_threads/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/gsoc_threads/tools/dev/pbc_to_exe.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/dev/pbc_to_exe.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -55,7 +55,8 @@
 
   open_outfile:
     .local pmc outfh
-    outfh = open cfile, 'w'
+    outfh = new ['FileHandle']
+    outfh.'open'(cfile, 'w')
     unless outfh goto err_outfh
     print outfh, <<'HEADER'
 #include "parrot/parrot.h"
@@ -215,7 +216,8 @@
 .sub 'generate_code'
     .param string infile
     .local pmc ifh
-    ifh = open infile, 'r'
+    ifh = new ['FileHandle']
+    ifh.'open'(infile, 'r')
     unless ifh goto err_infile
 
     .local pmc codestring
@@ -229,7 +231,7 @@
     .local string pbcstring
     .local int pbclength
 
-    pbcstring = read ifh, 16384
+    pbcstring = ifh.'read'(16384)
     pbclength = length pbcstring
     unless pbclength > 0 goto read_done
 
@@ -251,7 +253,7 @@
     goto read_loop
 
   read_done:
-    close ifh
+    ifh.'close'()
 
     push codestring, "\n};\n\nconst int bytecode_size = "
     $S0 = size
@@ -304,7 +306,8 @@
 .sub 'generate_code_gcc'
     .param string infile
     .local pmc ifh
-    ifh = open infile, 'r'
+    ifh = new ['FileHandle']
+    ifh.'open'(infile, 'r')
     unless ifh goto err_infile
 
     .local pmc encoding_table
@@ -323,7 +326,7 @@
     .local string pbcstring
     .local int pbclength
 
-    pbcstring = read ifh, 16384
+    pbcstring = ifh.'read'(16384)
     pbclength = length pbcstring
     unless pbclength > 0 goto read_done
 
@@ -346,7 +349,7 @@
     goto read_loop
 
   read_done:
-    close ifh
+    ifh.'close'()
 
     push codestring, '"'
     push codestring, "\n;\n\n"
@@ -430,7 +433,8 @@
     rc_contents .= "\"\n"
 
     .local pmc rc_fh
-    rc_fh = open rc_path, 'w'
+    rc_fh = new ['FileHandle']
+    rc_fh.'open'(rc_path, 'w')
     unless rc_fh goto err_rc_open
     print rc_fh, rc_contents
     $I0 = rc_fh.'close'()

Modified: branches/gsoc_threads/tools/docs/filename_and_chapter.pl
==============================================================================
--- branches/gsoc_threads/tools/docs/filename_and_chapter.pl	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/docs/filename_and_chapter.pl	Thu Jun 10 21:09:12 2010	(r47545)
@@ -19,6 +19,13 @@
                       ['running.pod', 'Parrot\'s command line options'],
                     ];
 
+my $PIR_chap_list_ref = [ 'ch01_introduction.pod', 'ch02_getting_started.pod',
+                          'ch03_basic_syntax.pod', 'ch04_variables.pod',
+                          'ch05_control_structures.pod', 'ch06_subroutines.pod',
+                          'ch07_objects.pod', 'ch08_io.pod',
+                          'ch09_exceptions.pod',
+                        ];
+
 my $lang = @$item_list_ref - 1;
 my $MOD_BUILD_PATH='build/modified_pod/';
 
@@ -46,6 +53,9 @@
 \documentclass[11pt,a4paper,oneside]{report}
 \usepackage{graphics,graphicx}
 \usepackage{colortbl}
+%
+%\setcounter{secnumdepth}{2}
+%\setcounter{tocdepth}{2}
 
 \begin{document}
 \tableofcontents
@@ -57,6 +67,28 @@
     $parser->parse_file( "${MOD_BUILD_PATH}$item_list_ref->[$i][0]" );
 }
 
+print $TEX_FH <<'PIR_TITEL';
+\chapter{PIR Guide}
+
+PIR_TITEL
+
+open my $PIR_TEX_FH, '>', 'build/pir_guide_tex.in';
+$lang = @$PIR_chap_list_ref - 1;
+for my $i ( 0..$lang ) {
+    my $parser = Pod::PseudoPod::LaTeX->new();
+    $parser->output_fh( $PIR_TEX_FH );
+    $parser->parse_file( 'book/pir/' . $PIR_chap_list_ref->[$i] );
+}
+close( $PIR_TEX_FH );
+
+open $PIR_TEX_FH, '<', 'build/pir_guide_tex.in';
+while( <$PIR_TEX_FH> ) {
+    s/^\\section\*/\\section/;
+    s/subsubsub/subsub/;
+    print $TEX_FH $_;
+}
+close( $PIR_TEX_FH );
+
 print $TEX_FH <<'FOOTER';
 \end{document}
 FOOTER

Modified: branches/gsoc_threads/tools/install/smoke.pl
==============================================================================
--- branches/gsoc_threads/tools/install/smoke.pl	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/install/smoke.pl	Thu Jun 10 21:09:12 2010	(r47545)
@@ -108,12 +108,19 @@
 $filename = 'test.pg';
 open $FH, '>', $filename
         or die "Can't open $filename ($!).\n";
-print $FH "token TOP { \\s* }\n";
+print $FH <<'PGE';
+grammar WSpace
+
+token TOP { \s* }
+PGE
 close $FH;
-$out = `$parrot $libdir/PGE/Perl6Grammar.pir $filename`;
-ok($out =~ /^\n## <::TOP>/, "check PGE");
+$out = `$parrot $libdir/PGE/Perl6Grammar.pbc $filename`;
+ok($out =~ /## <WSpace::TOP>/, "check PGE");
 unlink($filename);
 
+SKIP:
+{
+skip("pirc", 1) unless (-e $pirc);
 $filename = 'test.pir';
 open $FH, '>', $filename
         or die "Can't open $filename ($!).\n";
@@ -126,6 +133,7 @@
 $out = `$pirc -n $filename`;
 ok($out eq "ok\n", "check pirc");
 unlink($filename);
+}
 
 $filename = 'test.nqp';
 open $FH, '>', $filename

Modified: branches/gsoc_threads/tools/util/inc_ver.pir
==============================================================================
--- branches/gsoc_threads/tools/util/inc_ver.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/util/inc_ver.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -5,37 +5,40 @@
 .sub 'main' :main
     .local string version_file_name
     version_file_name = 'VERSION'
+
     # read the version
-    $P0 = open version_file_name, 'r'
-    $S0 = readline $P0
-    close $P0
+    $P0 = new 'FileHandle'
+    $P0.'open'( version_file_name, 'r' )
+    $S0 = $P0.'readline'()
+    $P0.'close'()
 
     print 'version: '
     print $S0
 
     # split the version
-    $P0 = split '.', $S0
+    $P1 = split '.', $S0
 
     # increment version
-    $I0 = $P0[1]
+    $I0 = $P1[1]
     inc $I0
     if $I0 != 12 goto NOT_NILL
-    $I0 = $P0[0]
+    $I0 = $P1[0]
     inc $I0
-    $P0[0] = $I0
+    $P1[0] = $I0
     $I0 = 0
 NOT_NILL:
-    $P0[1] = $I0
+    $P1[1] = $I0
 
-    # join the version
-    $S0 = join '.', $P0
+    # join the incremented version
+    $S0 = join '.', $P1
 
     print 'new version: '
     print $S0
 
-    $P0 = open version_file_name, 'w'
-    print $P0, $S0
-    close $P0
+    # write the new version to the version_file
+    $P0.'open'( version_file_name, 'w' )
+    $P0.'print'( $S0 )
+    $P0.'close'()
 .end
 
 # Local Variables:

Modified: branches/gsoc_threads/tools/util/parrot-config.pir
==============================================================================
--- branches/gsoc_threads/tools/util/parrot-config.pir	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/util/parrot-config.pir	Thu Jun 10 21:09:12 2010	(r47545)
@@ -88,8 +88,11 @@
     end
 usage:
     $S0 = argv[0]
-    printerr $S0
-    printerr " [ <config-key> | --dump | --help ]\n"
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'($S0)
+    $P1.'print'(" [ <config-key> | --dump | --help ]\n")
     exit 1
 .end
 

Modified: branches/gsoc_threads/tools/util/perlcritic.conf
==============================================================================
--- branches/gsoc_threads/tools/util/perlcritic.conf	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/util/perlcritic.conf	Thu Jun 10 21:09:12 2010	(r47545)
@@ -69,7 +69,7 @@
 add_themes = parrot
 
 [Bangs::ProhibitFlagComments]
-add_themes = parrot
+add_themes = extra
 
 [Bangs::ProhibitRefProtoOrProto]
 add_themes = extra

Modified: branches/gsoc_threads/tools/util/pgegrep
==============================================================================
--- branches/gsoc_threads/tools/util/pgegrep	Thu Jun 10 19:21:21 2010	(r47544)
+++ branches/gsoc_threads/tools/util/pgegrep	Thu Jun 10 21:09:12 2010	(r47545)
@@ -81,6 +81,9 @@
 # Readability improved!
 .include 'hllmacros.pir'
 
+# for getstdin and friends
+.loadlib 'io_ops'
+
 .sub main :main
 	.param pmc argv # the script name, then our options.
 	.local string progname


More information about the parrot-commits mailing list