[svn:parrot] r48719 - in branches/unshared_buffers: . compilers/data_json compilers/imcc compilers/opsc/src/Ops compilers/pct compilers/pct/src/PCT compilers/pge compilers/tge config/auto config/auto/sizes config/auto/zlib config/gen config/gen/makefiles config/gen/platform/ansi config/gen/platform/generic config/gen/platform/win32 docs docs/book/draft docs/book/pct docs/dev docs/pdds docs/project examples/embed examples/languages/abc examples/languages/squaak examples/languages/squaak/doc examples/languages/squaak/src examples/pge examples/tools ext/nqp-rx ext/nqp-rx/src/stage0 include/parrot include/parrot/oplib lib/Parrot lib/Parrot/Configure lib/Parrot/Configure/Step lib/Parrot/Docs/Section ports/cygwin ports/debian runtime/parrot/languages runtime/parrot/library runtime/parrot/library/Math src src/call src/dynoplibs src/gc src/interp src/io src/ops src/packfile src/pmc src/runcore src/string src/string/charset src/string/encoding t/codingstd t/compilers/tge t/dy noplibs t/examples t/native_pbc t/native_pbc/testdata t/oo t/op t/pmc t/pmc/testlib t/src t/steps/auto t/steps/init/hints t/tools tools/build tools/dev tools/release tools/util

darbelo at svn.parrot.org darbelo at svn.parrot.org
Sun Aug 29 17:09:16 UTC 2010


Author: darbelo
Date: Sun Aug 29 17:09:11 2010
New Revision: 48719
URL: https://trac.parrot.org/parrot/changeset/48719

Log:
Sync with trunk.

Added:
   branches/unshared_buffers/config/gen/platform/ansi/pid.c
      - copied unchanged from r48712, trunk/config/gen/platform/ansi/pid.c
   branches/unshared_buffers/config/gen/platform/generic/pid.c
      - copied unchanged from r48712, trunk/config/gen/platform/generic/pid.c
   branches/unshared_buffers/config/gen/platform/win32/pid.c
      - copied unchanged from r48712, trunk/config/gen/platform/win32/pid.c
   branches/unshared_buffers/examples/tools/pgegrep
      - copied unchanged from r48712, trunk/examples/tools/pgegrep
   branches/unshared_buffers/src/packfile/byteorder.h
      - copied unchanged from r48712, trunk/src/packfile/byteorder.h
   branches/unshared_buffers/t/examples/pgegrep.t
      - copied unchanged from r48712, trunk/t/examples/pgegrep.t
   branches/unshared_buffers/t/op/gc-active-buffers.t
      - copied unchanged from r48712, trunk/t/op/gc-active-buffers.t
   branches/unshared_buffers/t/op/gc-leaky-box.t
      - copied unchanged from r48712, trunk/t/op/gc-leaky-box.t
   branches/unshared_buffers/t/op/gc-leaky-call.t
      - copied unchanged from r48712, trunk/t/op/gc-leaky-call.t
   branches/unshared_buffers/t/pmc/testlib/annotations.pir
      - copied unchanged from r48712, trunk/t/pmc/testlib/annotations.pir
   branches/unshared_buffers/t/pmc/testlib/number.pasm
      - copied unchanged from r48712, trunk/t/pmc/testlib/number.pasm
   branches/unshared_buffers/tools/build/README
      - copied unchanged from r48712, trunk/tools/build/README
   branches/unshared_buffers/tools/dev/README
      - copied unchanged from r48712, trunk/tools/dev/README
   branches/unshared_buffers/tools/dev/addopstags.pl
      - copied unchanged from r48712, trunk/tools/dev/addopstags.pl
   branches/unshared_buffers/tools/dev/dump_pbc.pl
      - copied unchanged from r48712, trunk/tools/dev/dump_pbc.pl
   branches/unshared_buffers/tools/dev/headerizer.pl
      - copied unchanged from r48712, trunk/tools/dev/headerizer.pl
   branches/unshared_buffers/tools/dev/mk_language_shell.in
      - copied unchanged from r48712, trunk/tools/dev/mk_language_shell.in
   branches/unshared_buffers/tools/dev/ncidef2pasm.pl
      - copied unchanged from r48712, trunk/tools/dev/ncidef2pasm.pl
   branches/unshared_buffers/tools/dev/parrot-config.pir
      - copied unchanged from r48712, trunk/tools/dev/parrot-config.pir
   branches/unshared_buffers/tools/dev/perlcritic-cage.conf
      - copied unchanged from r48712, trunk/tools/dev/perlcritic-cage.conf
   branches/unshared_buffers/tools/dev/perlcritic.conf
      - copied unchanged from r48712, trunk/tools/dev/perlcritic.conf
   branches/unshared_buffers/tools/dev/perltidy.conf
      - copied unchanged from r48712, trunk/tools/dev/perltidy.conf
   branches/unshared_buffers/tools/dev/update_copyright.pl
      - copied unchanged from r48712, trunk/tools/dev/update_copyright.pl
   branches/unshared_buffers/tools/release/
      - copied from r48712, trunk/tools/release/
Replaced:
   branches/unshared_buffers/tools/release/README
      - copied unchanged from r48712, trunk/tools/release/README
   branches/unshared_buffers/tools/release/crow.pir
      - copied unchanged from r48712, trunk/tools/release/crow.pir
   branches/unshared_buffers/tools/release/gen_release_info.pl
      - copied unchanged from r48712, trunk/tools/release/gen_release_info.pl
   branches/unshared_buffers/tools/release/inc_ver.pir
      - copied unchanged from r48712, trunk/tools/release/inc_ver.pir
   branches/unshared_buffers/tools/release/release.json
      - copied unchanged from r48712, trunk/tools/release/release.json
   branches/unshared_buffers/tools/release/templates.json
      - copied unchanged from r48712, trunk/tools/release/templates.json
Deleted:
   branches/unshared_buffers/src/byteorder.c
   branches/unshared_buffers/src/frame_builder.c
   branches/unshared_buffers/src/frame_builder.h
   branches/unshared_buffers/t/native_pbc/annotations.pbc
   branches/unshared_buffers/t/native_pbc/testdata/annotations.pir
   branches/unshared_buffers/t/op/gc-leaky.t
   branches/unshared_buffers/t/tools/pgegrep.t
   branches/unshared_buffers/tools/build/addopstags.pl
   branches/unshared_buffers/tools/build/headerizer.pl
   branches/unshared_buffers/tools/dev/mk_language_shell.pl
   branches/unshared_buffers/tools/util/
Modified:
   branches/unshared_buffers/   (props changed)
   branches/unshared_buffers/CREDITS
   branches/unshared_buffers/ChangeLog
   branches/unshared_buffers/DEPRECATED.pod
   branches/unshared_buffers/MANIFEST
   branches/unshared_buffers/MANIFEST.SKIP
   branches/unshared_buffers/MANIFEST.generated
   branches/unshared_buffers/NEWS
   branches/unshared_buffers/PBC_COMPAT
   branches/unshared_buffers/README
   branches/unshared_buffers/RESPONSIBLE_PARTIES
   branches/unshared_buffers/VERSION
   branches/unshared_buffers/compilers/data_json/Rules.mak   (props changed)
   branches/unshared_buffers/compilers/imcc/Rules.in   (props changed)
   branches/unshared_buffers/compilers/imcc/imcparser.c
   branches/unshared_buffers/compilers/imcc/imcparser.h
   branches/unshared_buffers/compilers/imcc/parser_util.c
   branches/unshared_buffers/compilers/imcc/pbc.c
   branches/unshared_buffers/compilers/imcc/sets.c
   branches/unshared_buffers/compilers/imcc/sets.h
   branches/unshared_buffers/compilers/opsc/src/Ops/File.pm
   branches/unshared_buffers/compilers/pct/Rules.mak   (props changed)
   branches/unshared_buffers/compilers/pct/src/PCT/HLLCompiler.pir
   branches/unshared_buffers/compilers/pge/Rules.mak   (props changed)
   branches/unshared_buffers/compilers/tge/Rules.mak   (props changed)
   branches/unshared_buffers/config/auto/pmc.pm
   branches/unshared_buffers/config/auto/sizes/intval_maxmin_c.in   (props changed)
   branches/unshared_buffers/config/auto/zlib/   (props changed)
   branches/unshared_buffers/config/gen/makefiles.pm
   branches/unshared_buffers/config/gen/makefiles/root.in
   branches/unshared_buffers/config/gen/platform.pm
   branches/unshared_buffers/docs/book/draft/README   (props changed)
   branches/unshared_buffers/docs/book/draft/appa_glossary.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/appb_patch_submission.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/appc_command_line_options.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/appd_build_options.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/appe_source_code.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/ch01_introduction.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/ch02_getting_started.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/ch07_dynpmcs.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/ch08_dynops.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/ch10_opcode_reference.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/ch11_directive_reference.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/ch12_operator_reference.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/chXX_hlls.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/chXX_library.pod   (props changed)
   branches/unshared_buffers/docs/book/draft/chXX_testing_and_debugging.pod   (props changed)
   branches/unshared_buffers/docs/book/pct/ch01_introduction.pod   (props changed)
   branches/unshared_buffers/docs/book/pct/ch02_getting_started.pod   (props changed)
   branches/unshared_buffers/docs/book/pct/ch03_compiler_tools.pod   (props changed)
   branches/unshared_buffers/docs/book/pct/ch04_pge.pod   (props changed)
   branches/unshared_buffers/docs/book/pct/ch05_nqp.pod   (props changed)
   branches/unshared_buffers/docs/dev/c_functions.pod   (props changed)
   branches/unshared_buffers/docs/embed.pod
   branches/unshared_buffers/docs/parrothist.pod
   branches/unshared_buffers/docs/pdds/pdd30_install.pod   (props changed)
   branches/unshared_buffers/docs/project/release_manager_guide.pod
   branches/unshared_buffers/examples/embed/cotorra.c   (props changed)
   branches/unshared_buffers/examples/languages/abc/   (props changed)
   branches/unshared_buffers/examples/languages/squaak/   (props changed)
   branches/unshared_buffers/examples/languages/squaak/doc/tutorial_episode_1.pod
   branches/unshared_buffers/examples/languages/squaak/src/squaak.pir
   branches/unshared_buffers/examples/pge/demo.pir   (props changed)
   branches/unshared_buffers/ext/nqp-rx/Rules.mak   (props changed)
   branches/unshared_buffers/ext/nqp-rx/src/stage0/HLL-s0.pir
   branches/unshared_buffers/ext/nqp-rx/src/stage0/NQP-s0.pir
   branches/unshared_buffers/ext/nqp-rx/src/stage0/P6Regex-s0.pir
   branches/unshared_buffers/ext/nqp-rx/src/stage0/Regex-s0.pir
   branches/unshared_buffers/include/parrot/call.h   (contents, props changed)
   branches/unshared_buffers/include/parrot/encoding.h
   branches/unshared_buffers/include/parrot/gc_api.h   (props changed)
   branches/unshared_buffers/include/parrot/hash.h
   branches/unshared_buffers/include/parrot/io.h
   branches/unshared_buffers/include/parrot/oplib/core_ops.h
   branches/unshared_buffers/include/parrot/packfile.h
   branches/unshared_buffers/include/parrot/platform_interface.h
   branches/unshared_buffers/include/parrot/pobj.h
   branches/unshared_buffers/include/parrot/runcore_api.h   (props changed)
   branches/unshared_buffers/include/parrot/runcore_profiling.h   (props changed)
   branches/unshared_buffers/include/parrot/runcore_trace.h   (props changed)
   branches/unshared_buffers/include/parrot/scheduler_private.h
   branches/unshared_buffers/include/parrot/string.h
   branches/unshared_buffers/include/parrot/string_funcs.h
   branches/unshared_buffers/lib/Parrot/Configure/Compiler.pm
   branches/unshared_buffers/lib/Parrot/Configure/Step/Test.pm   (props changed)
   branches/unshared_buffers/lib/Parrot/Docs/Section/Tools.pm
   branches/unshared_buffers/lib/Parrot/H2inc.pm   (props changed)
   branches/unshared_buffers/ports/cygwin/parrot-1.0.0-1.cygport   (props changed)
   branches/unshared_buffers/ports/debian/libparrot-dev.install.in   (props changed)
   branches/unshared_buffers/ports/debian/libparrot.install.in   (props changed)
   branches/unshared_buffers/ports/debian/parrot-doc.install.in   (props changed)
   branches/unshared_buffers/ports/debian/parrot.install.in   (props changed)
   branches/unshared_buffers/ports/debian/rules
   branches/unshared_buffers/runtime/parrot/languages/   (props changed)
   branches/unshared_buffers/runtime/parrot/library/Math/Rand.pir   (props changed)
   branches/unshared_buffers/runtime/parrot/library/Rules.mak   (props changed)
   branches/unshared_buffers/runtime/parrot/library/distutils.pir
   branches/unshared_buffers/src/call/args.c
   branches/unshared_buffers/src/call/context.c
   branches/unshared_buffers/src/call/ops.c   (props changed)
   branches/unshared_buffers/src/call/pcc.c   (props changed)
   branches/unshared_buffers/src/dynext.c
   branches/unshared_buffers/src/dynoplibs/math.ops
   branches/unshared_buffers/src/dynoplibs/trans.ops
   branches/unshared_buffers/src/gc/alloc_memory.c   (props changed)
   branches/unshared_buffers/src/gc/alloc_resources.c   (contents, props changed)
   branches/unshared_buffers/src/gc/api.c   (contents, props changed)
   branches/unshared_buffers/src/gc/gc_ms.c
   branches/unshared_buffers/src/gc/gc_private.h
   branches/unshared_buffers/src/gc/malloc.c   (props changed)
   branches/unshared_buffers/src/gc/malloc_trace.c   (props changed)
   branches/unshared_buffers/src/gc/mark_sweep.c   (contents, props changed)
   branches/unshared_buffers/src/gc/system.c   (props changed)
   branches/unshared_buffers/src/hash.c
   branches/unshared_buffers/src/interp/inter_cb.c   (props changed)
   branches/unshared_buffers/src/interp/inter_create.c   (props changed)
   branches/unshared_buffers/src/interp/inter_misc.c   (props changed)
   branches/unshared_buffers/src/io/socket_api.c
   branches/unshared_buffers/src/io/utf8.c
   branches/unshared_buffers/src/ops/core_ops.c
   branches/unshared_buffers/src/ops/set.ops
   branches/unshared_buffers/src/ops/var.ops
   branches/unshared_buffers/src/packfile.c
   branches/unshared_buffers/src/packfile/pf_items.c
   branches/unshared_buffers/src/packout.c
   branches/unshared_buffers/src/pmc.c
   branches/unshared_buffers/src/pmc/addrregistry.pmc
   branches/unshared_buffers/src/pmc/bigint.pmc
   branches/unshared_buffers/src/pmc/callcontext.pmc
   branches/unshared_buffers/src/pmc/capture.pmc
   branches/unshared_buffers/src/pmc/class.pmc
   branches/unshared_buffers/src/pmc/eval.pmc
   branches/unshared_buffers/src/pmc/exception.pmc
   branches/unshared_buffers/src/pmc/filehandle.pmc
   branches/unshared_buffers/src/pmc/float.pmc
   branches/unshared_buffers/src/pmc/hash.pmc
   branches/unshared_buffers/src/pmc/hashiterator.pmc
   branches/unshared_buffers/src/pmc/imageio.pmc
   branches/unshared_buffers/src/pmc/imageiosize.pmc
   branches/unshared_buffers/src/pmc/imageiostrings.pmc
   branches/unshared_buffers/src/pmc/integer.pmc
   branches/unshared_buffers/src/pmc/lexinfo.pmc
   branches/unshared_buffers/src/pmc/namespace.pmc
   branches/unshared_buffers/src/pmc/nci.pmc
   branches/unshared_buffers/src/pmc/null.pmc
   branches/unshared_buffers/src/pmc/object.pmc
   branches/unshared_buffers/src/pmc/parrotinterpreter.pmc
   branches/unshared_buffers/src/pmc/parrotlibrary.pmc
   branches/unshared_buffers/src/pmc/stringbuilder.pmc
   branches/unshared_buffers/src/pmc/stringiterator.pmc
   branches/unshared_buffers/src/runcore/cores.c   (contents, props changed)
   branches/unshared_buffers/src/runcore/main.c   (contents, props changed)
   branches/unshared_buffers/src/runcore/profiling.c   (props changed)
   branches/unshared_buffers/src/runcore/trace.c   (contents, props changed)
   branches/unshared_buffers/src/scheduler.c
   branches/unshared_buffers/src/string/api.c
   branches/unshared_buffers/src/string/charset/ascii.c
   branches/unshared_buffers/src/string/charset/iso-8859-1.c
   branches/unshared_buffers/src/string/charset/unicode.c
   branches/unshared_buffers/src/string/encoding/fixed_8.c
   branches/unshared_buffers/src/string/encoding/ucs2.c
   branches/unshared_buffers/src/string/encoding/ucs4.c
   branches/unshared_buffers/src/string/encoding/utf16.c
   branches/unshared_buffers/src/string/encoding/utf8.c
   branches/unshared_buffers/src/string/primitives.c
   branches/unshared_buffers/t/codingstd/c_macro_args.t
   branches/unshared_buffers/t/codingstd/c_operator.t
   branches/unshared_buffers/t/codingstd/perlcritic.t
   branches/unshared_buffers/t/codingstd/pir_code_coda.t
   branches/unshared_buffers/t/codingstd/pmc_docs.t   (contents, props changed)
   branches/unshared_buffers/t/compilers/tge/NoneGrammar.tg   (props changed)
   branches/unshared_buffers/t/dynoplibs/trans-infnan.t
   branches/unshared_buffers/t/dynoplibs/trans.t
   branches/unshared_buffers/t/native_pbc/integer.pbc
   branches/unshared_buffers/t/native_pbc/number.pbc
   branches/unshared_buffers/t/native_pbc/string.pbc
   branches/unshared_buffers/t/oo/isa.t
   branches/unshared_buffers/t/oo/objects.t   (props changed)
   branches/unshared_buffers/t/oo/root_new.t   (props changed)
   branches/unshared_buffers/t/op/string.t
   branches/unshared_buffers/t/pmc/exception.t
   branches/unshared_buffers/t/pmc/exceptionhandler.t
   branches/unshared_buffers/t/pmc/float.t
   branches/unshared_buffers/t/pmc/hash.t
   branches/unshared_buffers/t/pmc/lexinfo.t
   branches/unshared_buffers/t/pmc/namespace-old.t   (props changed)
   branches/unshared_buffers/t/pmc/packfile.t
   branches/unshared_buffers/t/pmc/packfileannotations.t
   branches/unshared_buffers/t/pmc/packfileconstanttable.t
   branches/unshared_buffers/t/pmc/packfiledirectory.t
   branches/unshared_buffers/t/pmc/packfilefixupentry.t
   branches/unshared_buffers/t/pmc/packfilefixuptable.t
   branches/unshared_buffers/t/pmc/packfilerawsegment.t
   branches/unshared_buffers/t/pmc/testlib/   (props changed)
   branches/unshared_buffers/t/pmc/testlib/packfile_common.pir
   branches/unshared_buffers/t/pmc/timer.t
   branches/unshared_buffers/t/src/embed.t   (props changed)
   branches/unshared_buffers/t/steps/auto/pmc-01.t
   branches/unshared_buffers/t/steps/init/hints/linux-01.t   (props changed)
   branches/unshared_buffers/t/tools/dump_pbc.t
   branches/unshared_buffers/tools/build/h2inc.pl   (props changed)
   branches/unshared_buffers/tools/dev/   (props changed)
   branches/unshared_buffers/tools/dev/as2c.pl   (contents, props changed)
   branches/unshared_buffers/tools/dev/faces.pl
   branches/unshared_buffers/tools/dev/fetch_languages.pl   (contents, props changed)
   branches/unshared_buffers/tools/dev/mk_gitignore.pl   (props changed)
   branches/unshared_buffers/tools/dev/mk_native_pbc
   branches/unshared_buffers/tools/dev/pbc_to_exe.pir

Modified: branches/unshared_buffers/CREDITS
==============================================================================
--- branches/unshared_buffers/CREDITS	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/CREDITS	Sun Aug 29 17:09:11 2010	(r48719)
@@ -773,6 +773,11 @@
 N: Nick Kostirya
 D: Win32, FreeBSD build fixes
 
+N: Nick Wellnhofer
+D: String iterator rewrite, GC fixes
+E: wellnhofer at aevum.de
+U: nwellnhof
+
 N: Nikolay Ananiev
 D: Win32 build fix
 

Modified: branches/unshared_buffers/ChangeLog
==============================================================================
--- branches/unshared_buffers/ChangeLog	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/ChangeLog	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,5 +1,9 @@
 #1 $Id$
 
+2010.08.17     mikehh
+    * Released 2.7.0
+    See NEWS for more.
+
 2010.07.10     coke
 	* Released 2.6.0
 	See NEWS for more.

Modified: branches/unshared_buffers/DEPRECATED.pod
==============================================================================
--- branches/unshared_buffers/DEPRECATED.pod	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/DEPRECATED.pod	Sun Aug 29 17:09:11 2010	(r48719)
@@ -147,6 +147,12 @@
 
 L<https://trac.parrot.org/parrot/ticket/1689>
 
+=item Method getpid on ParrotInterpreter [experimental]
+
+Used to test the experimental function Parrot_getpid
+
+L<https://trac.parrot.org/parrot/ticket/1564>
+
 =back
 
 =head1 Opcodes
@@ -383,6 +389,12 @@
 
 L<https://trac.parrot.org/parrot/ticket/1191>
 
+=item Parrot_getpid [experimental]
+
+Get process id, experimental.
+
+L<https://trac.parrot.org/parrot/ticket/1564>
+
 =back
 
 =head1 Compiler tools

Modified: branches/unshared_buffers/MANIFEST
==============================================================================
--- branches/unshared_buffers/MANIFEST	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/MANIFEST	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Sun Aug  8 16:31:42 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sat Aug 28 02:23:15 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -275,6 +275,7 @@
 config/gen/platform/ansi/dl.c                               []
 config/gen/platform/ansi/exec.c                             []
 config/gen/platform/ansi/io.h                               []
+config/gen/platform/ansi/pid.c                              []
 config/gen/platform/ansi/time.c                             []
 config/gen/platform/cygwin/math.c                           []
 config/gen/platform/darwin/begin.c                          []
@@ -289,6 +290,7 @@
 config/gen/platform/generic/math.c                          []
 config/gen/platform/generic/math.h                          []
 config/gen/platform/generic/memexec.c                       []
+config/gen/platform/generic/pid.c                           []
 config/gen/platform/generic/platform_limits.h               []
 config/gen/platform/generic/signal.c                        []
 config/gen/platform/generic/signal.h                        []
@@ -313,6 +315,7 @@
 config/gen/platform/win32/io.h                              []
 config/gen/platform/win32/misc.c                            []
 config/gen/platform/win32/misc.h                            []
+config/gen/platform/win32/pid.c                             []
 config/gen/platform/win32/signal.c                          []
 config/gen/platform/win32/signal.h                          []
 config/gen/platform/win32/stat.c                            []
@@ -821,6 +824,7 @@
 examples/tge/branch/transform.pir                           [examples]
 examples/tools/Makefile                                     [examples]
 examples/tools/pbc_checker.cpp                              [examples]
+examples/tools/pgegrep                                      [examples]
 examples/tutorial/00_README.pod                             [examples]
 examples/tutorial/01_temp_var.pir                           [examples]
 examples/tutorial/02_local_var.pir                          [examples]
@@ -1242,7 +1246,6 @@
 runtime/parrot/library/yaml_dumper.pir                      [library]
 src/atomic/gcc_x86.c                                        []
 src/atomic/sparc_v9.s                                       []
-src/byteorder.c                                             []
 src/call/args.c                                             []
 src/call/context.c                                          []
 src/call/context_accessors.c                                []
@@ -1281,8 +1284,6 @@
 src/exceptions.c                                            []
 src/exit.c                                                  []
 src/extend.c                                                []
-src/frame_builder.c                                         []
-src/frame_builder.h                                         []
 src/gc/alloc_memory.c                                       []
 src/gc/alloc_resources.c                                    []
 src/gc/api.c                                                []
@@ -1342,6 +1343,7 @@
 src/ops/var.ops                                             []
 src/packdump.c                                              []
 src/packfile.c                                              []
+src/packfile/byteorder.h                                    []
 src/packfile/pf_items.c                                     []
 src/packout.c                                               []
 src/parrot_debugger.c                                       []
@@ -1687,6 +1689,7 @@
 t/examples/namespace.t                                      [test]
 t/examples/pasm.t                                           [test]
 t/examples/past.t                                           [test]
+t/examples/pgegrep.t                                        [test]
 t/examples/pir.t                                            [test]
 t/examples/pod.t                                            [test]
 t/examples/shootout.t                                       [test]
@@ -1737,7 +1740,6 @@
 t/manifest/04-alt_file.t                                    [test]
 t/manifest/05-alt_skip.t                                    [test]
 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]
@@ -1766,7 +1768,6 @@
 t/native_pbc/string_6.pbc                                   [test]
 t/native_pbc/string_7.pbc                                   [test]
 t/native_pbc/testdata/README                                []doc
-t/native_pbc/testdata/annotations.pir                       [test]
 t/native_pbc/testdata/number.pasm                           [test]
 t/native_pbc/testdata/string.pasm                           [test]
 t/oo/attributes.t                                           [test]
@@ -1805,7 +1806,9 @@
 t/op/exceptions.t                                           [test]
 t/op/exit.t                                                 [test]
 t/op/fetch.t                                                [test]
-t/op/gc-leaky.t                                             [test]
+t/op/gc-active-buffers.t                                    [test]
+t/op/gc-leaky-box.t                                         [test]
+t/op/gc-leaky-call.t                                        [test]
 t/op/gc.t                                                   [test]
 t/op/globals.t                                              [test]
 t/op/ifunless.t                                             [test]
@@ -1948,6 +1951,8 @@
 t/pmc/sub.t                                                 [test]
 t/pmc/sys.t                                                 [test]
 t/pmc/task.t                                                [test]
+t/pmc/testlib/annotations.pir                               [test]
+t/pmc/testlib/number.pasm                                   [test]
 t/pmc/testlib/packfile_common.pir                           [test]
 t/pmc/threads.t                                             [test]
 t/pmc/timer.t                                               [test]
@@ -2078,7 +2083,6 @@
 t/tools/pbc_disassemble.t                                   [test]
 t/tools/pbc_dump.t                                          [test]
 t/tools/pbc_merge.t                                         [test]
-t/tools/pgegrep.t                                           [test]
 t/tools/pmc2cutils/01-pmc2cutils.t                          [test]
 t/tools/pmc2cutils/02-find_file.t                           [test]
 t/tools/pmc2cutils/03-dump_vtable.t                         [test]
@@ -2087,11 +2091,10 @@
 t/tools/pmc2cutils/08-pmc-pm.t                              [test]
 t/tools/pmc2cutils/README                                   []doc
 t/tools/testdata                                            [test]
-tools/build/addopstags.pl                                   []
+tools/build/README                                          []doc
 tools/build/c2str.pl                                        []
 tools/build/fixup_gen_file.pl                               []
 tools/build/h2inc.pl                                        []
-tools/build/headerizer.pl                                   []
 tools/build/ops2c.pl                                        [devel]
 tools/build/parrot_config_c.pl                              []
 tools/build/pbcversion_h.pl                                 []
@@ -2099,18 +2102,22 @@
 tools/build/vtable_extend.pl                                []
 tools/build/vtable_h.pl                                     []
 tools/dev/.gdbinit                                          []
+tools/dev/README                                            []doc
+tools/dev/addopstags.pl                                     []
 tools/dev/as2c.pl                                           []
 tools/dev/bench_op.pir                                      []
 tools/dev/branch_status.pl                                  []
 tools/dev/checkdepend.pl                                    []
 tools/dev/create_language.pl                                [devel]
 tools/dev/debian_docs.sh                                    []
+tools/dev/dump_pbc.pl                                       []
 tools/dev/faces.pl                                          []
 tools/dev/fetch_languages.pl                                []
 tools/dev/gen_charset_tables.pl                             []
 tools/dev/gen_class.pl                                      []
 tools/dev/gen_makefile.pl                                   [devel]
 tools/dev/gen_valgrind_suppressions.pl                      []
+tools/dev/headerizer.pl                                     []
 tools/dev/install_dev_files.pl                              []
 tools/dev/install_doc_files.pl                              []
 tools/dev/install_files.pl                                  []
@@ -2120,7 +2127,7 @@
 tools/dev/mk_gitignore.pl                                   []
 tools/dev/mk_inno.pl                                        []
 tools/dev/mk_inno_language.pl                               []
-tools/dev/mk_language_shell.pl                              [devel]
+tools/dev/mk_language_shell.in                              []
 tools/dev/mk_manifest_and_skip.pl                           []
 tools/dev/mk_native_pbc                                     []
 tools/dev/mk_nci_thunks.pl                                  []
@@ -2128,9 +2135,11 @@
 tools/dev/mk_rpm_manifests.pl                               []
 tools/dev/nci_test_gen.pl                                   []
 tools/dev/nci_thunk_gen.pir                                 []
+tools/dev/ncidef2pasm.pl                                    []
 tools/dev/nm.pl                                             []
 tools/dev/nopaste.pl                                        []
 tools/dev/ops_not_tested.pl                                 []
+tools/dev/parrot-config.pir                                 []
 tools/dev/parrot-fuzzer                                     []
 tools/dev/parrot.supp                                       []
 tools/dev/parrot_api.pl                                     []
@@ -2139,6 +2148,9 @@
 tools/dev/parrotbench.pl                                    []
 tools/dev/pbc_header.pl                                     []
 tools/dev/pbc_to_exe.pir                                    [devel]
+tools/dev/perlcritic-cage.conf                              []
+tools/dev/perlcritic.conf                                   []
+tools/dev/perltidy.conf                                     []
 tools/dev/pmcrenumber.pl                                    []
 tools/dev/pmctree.pl                                        []
 tools/dev/pprof2cg.pl                                       [devel]
@@ -2146,6 +2158,7 @@
 tools/dev/search-ops.pl                                     []
 tools/dev/svnclobber.pl                                     []
 tools/dev/symlink.pl                                        []
+tools/dev/update_copyright.pl                               []
 tools/dev/vgp                                               []
 tools/dev/vgp_darwin                                        []
 tools/dev/vms-patch                                         []
@@ -2156,19 +2169,12 @@
 tools/docs/write_docs.pl                                    []
 tools/install/smoke.pl                                      []
 tools/install/smoke_languages.pl                            []
-tools/util/crow.pir                                         []
-tools/util/dump_pbc.pl                                      []
-tools/util/gen_release_info.pl                              []
-tools/util/inc_ver.pir                                      []
-tools/util/ncidef2pasm.pl                                   []
-tools/util/parrot-config.pir                                []
-tools/util/perlcritic-cage.conf                             []
-tools/util/perlcritic.conf                                  []
-tools/util/perltidy.conf                                    []
-tools/util/pgegrep                                          []
-tools/util/release.json                                     []
-tools/util/templates.json                                   []
-tools/util/update_copyright.pl                              []
+tools/release/README                                        []doc
+tools/release/crow.pir                                      []
+tools/release/gen_release_info.pl                           []
+tools/release/inc_ver.pir                                   []
+tools/release/release.json                                  []
+tools/release/templates.json                                []
 # Local variables:
 #   mode: text
 #   buffer-read-only: t

Modified: branches/unshared_buffers/MANIFEST.SKIP
==============================================================================
--- branches/unshared_buffers/MANIFEST.SKIP	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/MANIFEST.SKIP	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Thu Jun 24 14:06:33 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu Aug 26 10:22:02 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -1046,6 +1046,9 @@
 ^t/pmc/.*\.pir/
 ^t/pmc/.*_pbcexe.*$
 ^t/pmc/.*_pbcexe.*/
+# generated from svn:ignore of 't/pmc/testlib/'
+^t/pmc/testlib/.*\.pbc$
+^t/pmc/testlib/.*\.pbc/
 # generated from svn:ignore of 't/src/'
 ^t/src/.*_.*$
 ^t/src/.*_.*/
@@ -1077,6 +1080,9 @@
 ^t/tools/pmc2c\..*\.h/
 ^t/tools/pmc2c\..*\.pmc$
 ^t/tools/pmc2c\..*\.pmc/
+# generated from svn:ignore of 'tools/dev/'
+^tools/dev/mk_language_shell\.pl$
+^tools/dev/mk_language_shell\.pl/
 # Local variables:
 #   mode: text
 #   buffer-read-only: t

Modified: branches/unshared_buffers/MANIFEST.generated
==============================================================================
--- branches/unshared_buffers/MANIFEST.generated	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/MANIFEST.generated	Sun Aug 29 17:09:11 2010	(r48719)
@@ -2,11 +2,11 @@
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
 # Please re-sort this file after *EVERY* modification
-blib/lib/libparrot.2.6.0.dylib                   [main]lib
+blib/lib/libparrot.2.7.0.dylib                   [main]lib
 blib/lib/libparrot.a                             [main]lib
 blib/lib/libparrot.dylib                         [main]lib
 blib/lib/libparrot.so                            [main]lib
-blib/lib/libparrot.so.2.6.0                      [main]lib
+blib/lib/libparrot.so.2.7.0                      [main]lib
 compilers/data_json/data_json.pbc                [data_json]
 config/gen/call_list/opengl.in                   []
 docs/ops/bit.pod                                 [doc]
@@ -419,4 +419,5 @@
 src/pmc/unmanagedstruct.dump                     [devel]src
 src/string_private_cstring.h                     []
 tools/build/dynpmc.pl                            []
+tools/dev/mk_language_shell.pl                   [devel]
 vtable.dump                                      [devel]src

Modified: branches/unshared_buffers/NEWS
==============================================================================
--- branches/unshared_buffers/NEWS	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/NEWS	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,11 +1,28 @@
 # $Id$
 
+New in 2.7.0
+- Core
+  + cleanups in packfile and freeze/thaw handling
+  + Hash optimizations that improve HLL startup and run time
+  + As always, many bug fixes and other optimizations
+- Runtime
+  + some runtime library cleanups
+- Testing
+  + added more tests to improve coverage
+  + new codingstd test for documentation in .pmc files
+- Documentation
+  + added documentation to .pmc files (some still missing but headers in place)
+  + general documentation improvements and bringing up-to-date
+- NQP-rx
+  + Updated version included from http://github.com/perl6/nqp-rx includes
+    speed improvements
+
 New in 2.6.0
 - Core
   + Plug some memory leaks
   + As always, bug fixes and some optimizations
 - Runtime
-  + added (experimental) URI::Escape 
+  + added (experimental) URI::Escape
 - Testing
   + Improved test coverage of core parrot
 - Documentation
@@ -13,7 +30,7 @@
 - Platforms
   + The Fedora package 'parrot-devel' install the files for syntax-highlighting
     and automatic indenting for the vim editor
-- NQP-rx 
+- NQP-rx
   + Updated version included from http://github.com/perl6/nqp-rx includes
     new or improved: regex backtracking, named assertions, interactive mode,
     and setting (a minimal but useful runtime library)

Modified: branches/unshared_buffers/PBC_COMPAT
==============================================================================
--- branches/unshared_buffers/PBC_COMPAT	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/PBC_COMPAT	Sun Aug 29 17:09:11 2010	(r48719)
@@ -28,6 +28,7 @@
 
 # please insert tab separated entries at the top of the list
 
+8.2	2010.08.19	cotto	minor version bump for 2.7.0
 8.1	2010.08.10	plobsing	merge dynop_mapping branch
 8.0	2010.07.20	coke	released 2.6.0
 7.0	2010.04.20	gerd	released 2.3.0 (version # added ex post facto, as all previous version #s were published)

Modified: branches/unshared_buffers/README
==============================================================================
--- branches/unshared_buffers/README	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/README	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,4 +1,4 @@
-This is Parrot, version 2.6.0
+This is Parrot, version 2.7.0
 ------------------------------
 
 Parrot is Copyright (C) 2001-2010, Parrot Foundation.
@@ -11,6 +11,11 @@
 This code is distributed under the terms of the Artistic License 2.0.
 For more details, see the full text of the license in the file LICENSE.
 
+OVERVIEW
+--------
+Parrot is a virtual machine designed to efficiently compile and execute
+bytecode for dynamic languages.
+
 PREREQUISITES
 -------------
 

Modified: branches/unshared_buffers/RESPONSIBLE_PARTIES
==============================================================================
--- branches/unshared_buffers/RESPONSIBLE_PARTIES	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/RESPONSIBLE_PARTIES	Sun Aug 29 17:09:11 2010	(r48719)
@@ -28,6 +28,7 @@
                                 Christoph Otto
                                 Jonathan Leto
                                 Gerd Pokorra
+                                Michael Hind
 
 Metacommitter                   Allison Randal
                                 Jerry Gay
@@ -87,5 +88,6 @@
                                 Francois Perrad
                                 Mark Glines
                                 Bruce Gray
+                                Michael Hind
 
 General Contributor             See CREDITS

Modified: branches/unshared_buffers/VERSION
==============================================================================
--- branches/unshared_buffers/VERSION	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/VERSION	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1 +1 @@
-2.6.0
+2.7.0

Modified: branches/unshared_buffers/compilers/imcc/imcparser.c
==============================================================================
--- branches/unshared_buffers/compilers/imcc/imcparser.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/compilers/imcc/imcparser.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -9,13 +9,12 @@
  */
 /* HEADERIZER HFILE: none */
 /* HEADERIZER STOP */
-
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* A Bison parser, made by GNU Bison 2.4.2.  */
 
 /* Skeleton implementation for Bison's Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
+   Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -57,7 +56,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "2.4.2"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -1151,7 +1150,7 @@
 
 
 /* Line 189 of yacc.c  */
-#line 1144 "compilers/imcc/imcparser.c"
+#line 1143 "compilers/imcc/imcparser.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -1435,7 +1434,7 @@
 
 
 /* Line 214 of yacc.c  */
-#line 1428 "compilers/imcc/imcparser.c"
+#line 1427 "compilers/imcc/imcparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -1447,7 +1446,7 @@
 
 
 /* Line 264 of yacc.c  */
-#line 1440 "compilers/imcc/imcparser.c"
+#line 1439 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1497,7 +1496,7 @@
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -2444,9 +2443,18 @@
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
 
 #define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -2503,7 +2511,7 @@
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)			\
      fprintf (File, "%d.%d-%d.%d",			\
 	      (Loc).first_line, (Loc).first_column,	\
@@ -3254,28 +3262,28 @@
     {
         case 2:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1166 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1175 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1176 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1178 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
@@ -3286,7 +3294,7 @@
 
   case 8:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1184 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
@@ -3297,42 +3305,42 @@
 
   case 9:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1189 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1190 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1191 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1192 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1196 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1198 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
@@ -3343,7 +3351,7 @@
 
   case 15:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1207 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
@@ -3354,7 +3362,7 @@
 
   case 16:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1213 "compilers/imcc/imcc.y"
     {
            /* set_filename() frees the STRINGC */
@@ -3364,7 +3372,7 @@
 
   case 17:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1221 "compilers/imcc/imcc.y"
     {
           /* We'll want to store an entry while emitting instructions, so just
@@ -3377,7 +3385,7 @@
 
   case 18:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1233 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
@@ -3392,14 +3400,14 @@
 
   case 19:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1245 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 20:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1246 "compilers/imcc/imcc.y"
     {
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
@@ -3410,14 +3418,14 @@
 
   case 21:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1254 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 22:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -3428,14 +3436,14 @@
 
   case 23:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1261 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 24:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -3447,49 +3455,49 @@
 
   case 29:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1280 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 30:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1281 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 31:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1282 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 32:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1283 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 33:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1284 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 36:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1289 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 37:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1291 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
@@ -3501,7 +3509,7 @@
 
   case 38:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1298 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3511,7 +3519,7 @@
 
   case 39:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1303 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
@@ -3524,7 +3532,7 @@
 
   case 40:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1311 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
@@ -3533,7 +3541,7 @@
 
   case 41:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1315 "compilers/imcc/imcc.y"
     {
            char   *name = mem_sys_strdup((yyvsp[(2) - (4)].s) + 1);
@@ -3551,21 +3559,21 @@
 
   case 42:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1327 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 44:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1335 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 45:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1338 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
@@ -3578,7 +3586,7 @@
 
   case 48:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1354 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
@@ -3595,21 +3603,21 @@
 
   case 49:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1368 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 50:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1369 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 51:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1373 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
@@ -3618,7 +3626,7 @@
 
   case 52:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1377 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
@@ -3629,14 +3637,14 @@
 
   case 53:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1385 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 54:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1387 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
@@ -3646,7 +3654,7 @@
 
   case 55:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1395 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
@@ -3655,7 +3663,7 @@
 
   case 56:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1399 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
@@ -3664,7 +3672,7 @@
 
   case 57:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1403 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t);
@@ -3677,28 +3685,28 @@
 
   case 58:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1411 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 59:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1415 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 60:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1416 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 61:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1418 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -3713,21 +3721,21 @@
 
   case 62:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1430 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 63:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1430 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); IMCC_INFO(interp)->is_def = 0; }
     break;
 
   case 64:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1435 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(3) - (3)].t) & VT_OPT_FLAG && (yyvsp[(1) - (3)].t) != 'I') {
@@ -3752,14 +3760,14 @@
 
   case 65:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1459 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 66:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1464 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
@@ -3770,7 +3778,7 @@
 
   case 67:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1470 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
@@ -3781,7 +3789,7 @@
 
   case 68:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1479 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
@@ -3792,7 +3800,7 @@
 
   case 69:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1485 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
@@ -3803,7 +3811,7 @@
 
   case 70:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1494 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
@@ -3814,7 +3822,7 @@
 
   case 71:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1500 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
@@ -3825,7 +3833,7 @@
 
   case 72:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1509 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_NSENTRY;
@@ -3836,7 +3844,7 @@
 
   case 73:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1515 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_NSENTRY;
@@ -3847,7 +3855,7 @@
 
   case 74:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1524 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
@@ -3857,7 +3865,7 @@
 
   case 75:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1532 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
@@ -3867,7 +3875,7 @@
 
   case 76:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1537 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
@@ -3879,7 +3887,7 @@
 
   case 77:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1547 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL);
@@ -3888,7 +3896,7 @@
 
   case 78:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1551 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
@@ -3898,7 +3906,7 @@
 
   case 79:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1556 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
@@ -3908,35 +3916,35 @@
 
   case 80:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1563 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 81:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1564 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 82:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1565 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 83:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1566 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 84:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1568 "compilers/imcc/imcc.y"
     {
            SymReg *r;
@@ -3952,7 +3960,7 @@
 
   case 85:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1579 "compilers/imcc/imcc.y"
     {
            SymReg *r;
@@ -3968,14 +3976,14 @@
 
   case 86:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1589 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 89:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1599 "compilers/imcc/imcc.y"
     {
            char name[128];
@@ -4002,112 +4010,112 @@
 
   case 90:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1625 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 91:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1629 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 92:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1630 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 93:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1634 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 94:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1639 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 97:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1644 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 98:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1645 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 99:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1649 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
   case 100:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1650 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
   case 101:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1651 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
   case 102:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1652 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 103:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1653 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 104:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1654 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
   case 105:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1655 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 113:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1667 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
@@ -4117,7 +4125,7 @@
 
   case 114:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1672 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -4126,7 +4134,7 @@
 
   case 115:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1676 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -4135,7 +4143,7 @@
 
   case 116:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1680 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -4144,7 +4152,7 @@
 
   case 117:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1684 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
@@ -4153,7 +4161,7 @@
 
   case 118:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1688 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
@@ -4163,7 +4171,7 @@
 
   case 119:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1693 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
@@ -4173,14 +4181,14 @@
 
   case 120:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1701 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 121:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1702 "compilers/imcc/imcc.y"
     {
                                  if (IMCC_INFO(interp)->adv_named_id) {
@@ -4195,21 +4203,21 @@
 
   case 122:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1714 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 123:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1719 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 124:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1721 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
@@ -4219,21 +4227,21 @@
 
   case 125:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1728 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 126:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1729 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 127:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1730 "compilers/imcc/imcc.y"
     {
            IdList * const l = (yyvsp[(4) - (4)].idlist);
@@ -4247,91 +4255,91 @@
 
   case 128:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1741 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 129:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1742 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 130:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1746 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
   case 131:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1747 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 132:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1748 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 133:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1749 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
   case 134:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1752 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 137:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1753 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 138:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1758 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
   case 139:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1760 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 140:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1762 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
@@ -4341,28 +4349,28 @@
 
   case 141:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1769 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
   case 142:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1771 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 143:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1775 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 144:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1777 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
@@ -4372,7 +4380,7 @@
 
   case 145:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1782 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
@@ -4382,14 +4390,14 @@
 
   case 146:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1789 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 147:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1791 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
@@ -4399,7 +4407,7 @@
 
   case 148:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1796 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
@@ -4409,21 +4417,21 @@
 
   case 149:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1803 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 150:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1807 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 151:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1812 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
@@ -4433,7 +4441,7 @@
 
   case 152:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1817 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
@@ -4443,28 +4451,28 @@
 
   case 153:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1824 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 154:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1825 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 155:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1829 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 156:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1831 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4479,7 +4487,7 @@
 
   case 157:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1841 "compilers/imcc/imcc.y"
     {
             SymReg * const name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
@@ -4489,7 +4497,7 @@
 
   case 158:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1846 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4504,7 +4512,7 @@
 
   case 159:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1856 "compilers/imcc/imcc.y"
     {
            SymReg * const name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
@@ -4514,63 +4522,63 @@
 
   case 162:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1877 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 163:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1882 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 164:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1883 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 165:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1884 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 166:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1885 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 167:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1886 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 168:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1887 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 169:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1891 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 173:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1902 "compilers/imcc/imcc.y"
     {
              Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
@@ -4581,14 +4589,14 @@
 
   case 174:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1912 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 175:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1914 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
@@ -4601,7 +4609,7 @@
 
   case 176:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1925 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(1) - (1)].idlist);
@@ -4612,7 +4620,7 @@
 
   case 177:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1932 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(3) - (3)].idlist);
@@ -4623,7 +4631,7 @@
 
   case 178:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1941 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_gc_allocate_n_zeroed_typed(interp, 1, IdList);
@@ -4634,14 +4642,14 @@
 
   case 183:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1957 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 184:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1958 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
@@ -4659,7 +4667,7 @@
 
   case 185:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1971 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
@@ -4681,7 +4689,7 @@
 
   case 186:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1988 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
@@ -4699,14 +4707,14 @@
 
   case 187:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2000 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 188:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2001 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
@@ -4717,14 +4725,14 @@
 
   case 190:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2008 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 191:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2009 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
@@ -4735,7 +4743,7 @@
 
   case 192:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2015 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
@@ -4746,7 +4754,7 @@
 
   case 193:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2021 "compilers/imcc/imcc.y"
     {
             (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
@@ -4755,7 +4763,7 @@
 
   case 194:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2025 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
@@ -4772,98 +4780,98 @@
 
   case 195:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2037 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 197:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2038 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 200:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2041 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 201:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2045 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
   case 202:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2046 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
   case 203:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2047 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
   case 204:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2048 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
   case 205:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2064 "compilers/imcc/imcc.y"
     {
            add_pcc_result(interp, (yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
@@ -4874,7 +4882,7 @@
 
   case 211:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2070 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
@@ -4883,7 +4891,7 @@
 
   case 212:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2074 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
@@ -4893,7 +4901,7 @@
 
   case 216:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2082 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
@@ -4902,189 +4910,189 @@
 
   case 217:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2089 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
   case 218:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2090 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 219:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2091 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
   case 220:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2095 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 221:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2096 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 222:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2097 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 223:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2098 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 224:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2099 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 225:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2100 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 226:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2101 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
   case 227:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2102 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 228:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2103 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 229:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2104 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
   case 230:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2105 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 231:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2106 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
   case 232:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2107 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
   case 233:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2108 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
   case 234:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2109 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 235:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2110 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 236:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2111 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 237:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2112 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
   case 238:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2113 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
   case 239:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2114 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
   case 240:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2115 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 241:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2116 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 242:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2117 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 243:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2123 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
@@ -5095,112 +5103,112 @@
 
   case 244:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2128 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
   case 245:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2139 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 247:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2140 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 248:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2141 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 249:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2142 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 250:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2143 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 251:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2144 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 252:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2145 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 253:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2146 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 254:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2147 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 255:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2148 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 256:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2149 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 257:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2150 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 258:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2151 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 259:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2157 "compilers/imcc/imcc.y"
     {
         (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
@@ -5213,28 +5221,28 @@
 
   case 260:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2171 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
@@ -5245,7 +5253,7 @@
 
   case 264:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2177 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
@@ -5264,7 +5272,7 @@
 
   case 265:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2191 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
@@ -5275,7 +5283,7 @@
 
   case 266:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2197 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
@@ -5286,14 +5294,14 @@
 
   case 267:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2208 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
@@ -5303,21 +5311,21 @@
 
   case 269:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2212 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
   case 270:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2216 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 271:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2218 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
@@ -5332,7 +5340,7 @@
 
   case 272:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2228 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
@@ -5347,7 +5355,7 @@
 
   case 273:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2238 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
@@ -5359,7 +5367,7 @@
 
   case 274:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2245 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
@@ -5369,7 +5377,7 @@
 
   case 275:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2250 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
@@ -5381,70 +5389,70 @@
 
   case 276:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2259 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 277:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2263 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 278:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2264 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 279:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2268 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;     }
     break;
 
   case 280:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2269 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED;    }
     break;
 
   case 281:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2270 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 282:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2273 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 283:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2274 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
   case 284:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2278 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 285:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2283 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
@@ -5459,7 +5467,7 @@
 
   case 286:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2293 "compilers/imcc/imcc.y"
     {
             add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
@@ -5470,7 +5478,7 @@
 
   case 287:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2299 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
@@ -5485,7 +5493,7 @@
 
   case 288:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -5495,28 +5503,28 @@
 
   case 289:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2313 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 290:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2317 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 291:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2318 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 292:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -5525,7 +5533,7 @@
 
   case 293:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -5534,7 +5542,7 @@
 
   case 294:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -5543,7 +5551,7 @@
 
   case 295:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -5552,7 +5560,7 @@
 
   case 296:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -5561,7 +5569,7 @@
 
   case 297:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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));
@@ -5570,91 +5578,91 @@
 
   case 298:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2352 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 299:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2353 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 300:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2357 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
   case 301:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2358 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
   case 302:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2359 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
   case 303:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2360 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
   case 304:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2361 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
   case 305:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2362 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
   case 308:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2371 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 309:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2372 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 310:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2376 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
   case 312:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2381 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 313:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2383 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
@@ -5666,7 +5674,7 @@
 
   case 314:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2390 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
@@ -5676,49 +5684,49 @@
 
   case 316:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2422 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
@@ -5727,7 +5735,7 @@
 
   case 327:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2426 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
@@ -5738,7 +5746,7 @@
 
   case 328:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2434 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
@@ -5747,7 +5755,7 @@
 
   case 329:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2438 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
@@ -5758,14 +5766,14 @@
 
   case 330:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2446 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 331:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2448 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
@@ -5775,7 +5783,7 @@
 
   case 332:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2456 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
@@ -5784,78 +5792,78 @@
 
   case 333:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2462 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
   case 334:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2463 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
   case 335:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2464 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
   case 336:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2465 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
   case 337:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #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 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2477 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
 
 
-/* Line 1455 of yacc.c  */
-#line 5848 "compilers/imcc/imcparser.c"
+/* Line 1464 of yacc.c  */
+#line 5856 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -6066,7 +6074,7 @@
 
 
 
-/* Line 1675 of yacc.c  */
+/* Line 1684 of yacc.c  */
 #line 2483 "compilers/imcc/imcc.y"
 
 

Modified: branches/unshared_buffers/compilers/imcc/imcparser.h
==============================================================================
--- branches/unshared_buffers/compilers/imcc/imcparser.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/compilers/imcc/imcparser.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -9,13 +9,12 @@
  */
 /* HEADERIZER HFILE: none */
 /* HEADERIZER STOP */
-
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* A Bison parser, made by GNU Bison 2.4.2.  */
 
 /* Skeleton interface for Bison's Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
+   Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -295,7 +294,7 @@
 typedef union YYSTYPE
 {
 
-/* Line 1676 of yacc.c  */
+/* Line 1685 of yacc.c  */
 #line 1071 "compilers/imcc/imcc.y"
 
     IdList * idlist;
@@ -306,8 +305,8 @@
 
 
 
-/* Line 1676 of yacc.c  */
-#line 300 "compilers/imcc/imcparser.h"
+/* Line 1685 of yacc.c  */
+#line 299 "compilers/imcc/imcparser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */

Modified: branches/unshared_buffers/compilers/imcc/parser_util.c
==============================================================================
--- branches/unshared_buffers/compilers/imcc/parser_util.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/compilers/imcc/parser_util.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -791,7 +791,7 @@
     const char                *ext;
     FILE                      *fp;
     STRING                    *fs;
-    PMC                       *ignored;
+    PMC                       *newcontext;
 
     /* need at least 3 regs for compilation of constant math e.g.
      * add_i_ic_ic - see also IMCC_subst_constants() */
@@ -816,9 +816,6 @@
         IMCC_fatal(interp, EXCEPTION_EXTERNAL_ERROR,
                 "imcc_compile_file: couldn't open '%s'\n", fullname);
 
-    IMCC_INFO(interp)->cur_namespace = NULL;
-    interp->code                     = NULL;
-
     IMCC_push_parser_state(interp);
     {
         /* Store a copy, in order to know how to free it later */
@@ -835,8 +832,13 @@
      * which can destroy packfiles under construction
      */
     Parrot_block_GC_mark(interp);
-    ignored = Parrot_push_context(interp, regs_used);
-    UNUSED(ignored);
+
+    /* Activate a new context and reset it to initial values */
+    newcontext = Parrot_push_context(interp, regs_used);
+    Parrot_pcc_set_HLL(interp, newcontext, 0);
+    Parrot_pcc_set_sub(interp, newcontext, 0);
+    IMCC_INFO(interp)->cur_namespace = NULL;
+    interp->code                     = NULL;
 
     if (ext && STREQ(ext, ".pasm")) {
         void *yyscanner;

Modified: branches/unshared_buffers/compilers/imcc/pbc.c
==============================================================================
--- branches/unshared_buffers/compilers/imcc/pbc.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/compilers/imcc/pbc.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -363,7 +363,7 @@
         interp->code->const_table->string_hash =
             Parrot_pmc_new_init_int(interp, enum_class_Hash, enum_type_INTVAL);
         ((Hash *)VTABLE_get_pointer(interp, interp->code->const_table->string_hash))->compare =
-            (hash_comp_fn)STRING_compare_distinct_cs_enc;
+            (hash_comp_fn)hash_compare_string_distinct_enc;
 
         interp->code->const_table->constants =
             mem_gc_allocate_n_zeroed_typed(interp, newcount, PackFile_Constant);

Modified: branches/unshared_buffers/compilers/imcc/sets.c
==============================================================================
--- branches/unshared_buffers/compilers/imcc/sets.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/compilers/imcc/sets.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -154,6 +154,7 @@
 
 */
 
+PARROT_PURE_FUNCTION
 int
 set_equal(ARGIN(const Set *s1), ARGIN(const Set *s2))
 {

Modified: branches/unshared_buffers/compilers/imcc/sets.h
==============================================================================
--- branches/unshared_buffers/compilers/imcc/sets.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/compilers/imcc/sets.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -33,6 +33,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_PURE_FUNCTION
 int set_equal(ARGIN(const Set *s1), ARGIN(const Set *s2))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);

Modified: branches/unshared_buffers/compilers/opsc/src/Ops/File.pm
==============================================================================
--- branches/unshared_buffers/compilers/opsc/src/Ops/File.pm	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/compilers/opsc/src/Ops/File.pm	Sun Aug 29 17:09:11 2010	(r48719)
@@ -296,7 +296,22 @@
 
 method _set_version() {
     my $config := _config();
-    my $version := $config<VERSION>;
+    my $version_filename;
+    if $config<installed> {
+        $version_filename :=
+            $config<libdir> ~
+            $config<versiondir> ~
+            $config<slash> ~
+            'VERSION';
+    }
+    else {
+        $version_filename :=
+            $config<prefix> ~
+            $config<slash> ~
+            'VERSION';
+    }
+
+    my $version := pir::chopn__ssi(slurp($version_filename), 1);
     #say("# $version");
     my @bits := split('.', $version);
     self<version_major> := @bits[0];

Modified: branches/unshared_buffers/compilers/pct/src/PCT/HLLCompiler.pir
==============================================================================
--- branches/unshared_buffers/compilers/pct/src/PCT/HLLCompiler.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/compilers/pct/src/PCT/HLLCompiler.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -26,10 +26,9 @@
 
 .include 'cclass.pasm'
 .include 'stdio.pasm'
+.include 'iglobals.pasm'
 
 .sub 'init' :vtable :method
-    load_bytecode 'config.pir'
-
     $P0 = split ' ', 'parse past post pir evalpmc'
     setattribute self, '@stages', $P0
 
@@ -56,7 +55,8 @@
 
     $S0  = '???'
     push_eh _handler
-    $P0  = _config()
+    $P0 = getinterp
+    $P0 = $P0[.IGLOBALS_CONFIG_HASH]
     $S0  = $P0['revision']   # also $I0 = P0['installed'] could be used
   _handler:
     pop_eh

Modified: branches/unshared_buffers/config/auto/pmc.pm
==============================================================================
--- branches/unshared_buffers/config/auto/pmc.pm	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/config/auto/pmc.pm	Sun Aug 29 17:09:11 2010	(r48719)
@@ -36,9 +36,12 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my @pmc = sort_pmcs( @{ $self->{srcpmc} } );
-
-    my $pmc_list = join( ' ', grep { defined $_ } @pmc );
+    # $pmc_list is a string holding a space-delimited list of currently active
+    # PMCs, sorted (largely) on the basis of src/pmc/pmc.num.
+    # (By 'current', we take into account the fact that there are PMCs listed
+    # in src/pmc/pmc.num that no longer exist but whose index numbers are
+    # never deleted.)
+    my $pmc_list = get_sorted_pmc_str( @{ $self->{srcpmc} } );
 
     # names of class files for src/pmc/Makefile
     ( my $TEMP_pmc_o   = $pmc_list ) =~ s/\.pmc/\$(O)/g;
@@ -216,23 +219,20 @@
     return @parents;
 }
 
+# Internal sub get_pmc_order parses src/pmc/pmc.num.  The hash it builds
+# includes both active and deactivated PMCs.
 sub get_pmc_order {
     open my $IN, '<', 'src/pmc/pmc.num' or die "Can't read src/pmc/pmc.num";
     my %order;
     while (<$IN>) {
-        next if /^#/;
-
-        if (/(\w+\.\w+)\s+(\d+)/) {
-            $order{$1} = $2;
-        }
+        next unless (/^(\w+\.\w+)\s+(\d+)$/);
+        $order{$1} = $2;
     }
-
     close $IN;
-
     return \%order;
 }
 
-sub sort_pmcs {
+sub get_sorted_pmc_str {
     my @pmcs      = @_;
     my $pmc_order = get_pmc_order();
     my $n         = keys %$pmc_order;
@@ -247,7 +247,41 @@
         }
     }
 
-    return @sorted_pmcs;
+    # With the test for definedness below, we account for PMCs which have been
+    # deactivated but whose index numbers remain in src/pmc/pmc.num.
+    my $active_pmcs = [ grep { defined $_ } @sorted_pmcs ];
+
+    # At this point we check to see whether any active_pmcs are missing from
+    # the MANIFEST.  We warn about any such missing PMCs but (for the time
+    # being at least) we proceed to compose $pmc_str.
+    my $seen_manifest = pmcs_in_manifest();
+    check_pmcs_against_manifest( $active_pmcs, $seen_manifest );
+    return join(' ' => @{ $active_pmcs });
+}
+
+sub pmcs_in_manifest {
+    my $manifest = shift || 'MANIFEST';
+    my %seen_manifest = ();
+    open my $MAN, '<', $manifest
+        or die "Unable to open MANIFEST: $!";
+    while (my $f = <$MAN>) {
+        chomp $f;
+        if ($f =~ m{^src/pmc/(.*\.pmc)}) {
+            my $pmc = $1;
+            $seen_manifest{$pmc}++;
+        }
+    }
+    close $MAN or die "Unable to close MANIFEST: $!";
+    return \%seen_manifest;
+}
+
+sub check_pmcs_against_manifest {
+    my ($active_pmcs, $seen_manifest) = @_;
+    my @missing_from_manifest = grep { ! exists $seen_manifest->{$_} }
+        @{ $active_pmcs };
+    if (@missing_from_manifest) {
+        warn "PMCs found in /src/pmc not found in MANIFEST: @missing_from_manifest";
+    }
 }
 
 sub contains_pccmethod {

Modified: branches/unshared_buffers/config/gen/makefiles.pm
==============================================================================
--- branches/unshared_buffers/config/gen/makefiles.pm	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/config/gen/makefiles.pm	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -68,6 +68,9 @@
 
     $self->makefiles($conf);
 
+    $conf->shebang_mod( 'tools/dev/mk_language_shell.in'
+                         => 'tools/dev/mk_language_shell.pl', );
+
     return 1;
 }
 

Modified: branches/unshared_buffers/config/gen/makefiles/root.in
==============================================================================
--- branches/unshared_buffers/config/gen/makefiles/root.in	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/config/gen/makefiles/root.in	Sun Aug 29 17:09:11 2010	(r48719)
@@ -47,8 +47,13 @@
 # where we're building parrot from (needed for pbc_to_exe)
 BUILD_DIR = @build_dir@
 
-# directory for build tools
+# directory for build tools:
+# programs, templates, configuration files invoked by 'make all'
+# (with or without command-line options)
 BUILD_TOOLS_DIR = tools/build
+# directory for developers' tools
+# programs, templates, configuration files NOT invoked by 'make all'
+DEV_TOOLS_DIR = tools/dev
 
 # directory for header files
 INC_DIR         = @inc@
@@ -116,7 +121,7 @@
 NONGEN_HEADERS   = @TEMP_nongen_headers@
 
 # The headerizer
-HEADERIZER       = $(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl
+HEADERIZER       = $(PERL) $(DEV_TOOLS_DIR)/headerizer.pl
 
 include src/dynpmc/Defines.mak
 include src/dynoplibs/Defines.mak
@@ -220,7 +225,8 @@
     .parrot_current_rev \
 #IF(has_opengl):    runtime/parrot/include/opengl_defines.pasm \
 #IF(has_opengl):    runtime/parrot/library/OpenGL_funcs.pir \
-    runtime/parrot/include/signal.pasm
+    runtime/parrot/include/signal.pasm \
+    tools/dev/mk_language_shell.pl
 
 
 ###############################################################################
@@ -434,7 +440,6 @@
     src/string/api$(O) \
     src/ops/core_ops$(O) \
 #IF(i386_has_gcc_cmpxchg):    src/atomic/gcc_x86$(O) \
-    src/byteorder$(O) \
     src/string/charset$(O) \
     src/core_pmcs$(O) \
     src/datatypes$(O) \
@@ -469,7 +474,6 @@
     src/misc$(O) \
     src/multidispatch$(O) \
     src/namespace$(O) \
-    src/frame_builder$(O) \
     src/nci/api$(O) \
     src/nci/core_thunks$(O) \
 #IF(has_extra_nci_thunks): src/nci/extra_thunks$(O) \
@@ -675,7 +679,6 @@
     src/library.str \
     src/multidispatch.str \
     src/namespace.str \
-    src/frame_builder.str \
     src/nci/api.str \
     src/nci/core_thunks.str \
 #IF(has_extra_nci_thunks): src/nci/extra_thunks.str \
@@ -844,12 +847,12 @@
 	@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) $(DYNEXT_DIR)/file$(LOAD_EXT)
-	$(PARROT) -o pbc_to_exe.pbc tools/dev/pbc_to_exe.pir
+$(PBC_TO_EXE) : $(DEV_TOOLS_DIR)/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 $(DEV_TOOLS_DIR)/pbc_to_exe.pir
 	$(PARROT) pbc_to_exe.pbc pbc_to_exe.pbc
 
-parrot_nci_thunk_gen.pbc : tools/dev/nci_thunk_gen.pir $(DATA_JSON_LIB_PBCS) $(PARROT)
-	$(PARROT) -o parrot_nci_thunk_gen.pbc tools/dev/nci_thunk_gen.pir
+parrot_nci_thunk_gen.pbc : $(DEV_TOOLS_DIR)/nci_thunk_gen.pir $(DATA_JSON_LIB_PBCS) $(PARROT)
+	$(PARROT) -o parrot_nci_thunk_gen.pbc $(DEV_TOOLS_DIR)/nci_thunk_gen.pir
 
 $(NCI_THUNK_GEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE)
 	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc
@@ -860,8 +863,8 @@
 $(PROVE) : parrot-prove.pbc $(PARROT) $(PBC_TO_EXE)
 	$(PBC_TO_EXE) parrot-prove.pbc
 
-$(PARROT_CONFIG) : tools/util/parrot-config.pir $(PARROT) $(PBC_TO_EXE)
-	$(PARROT) -o parrot_config.pbc tools/util/parrot-config.pir
+$(PARROT_CONFIG) : $(DEV_TOOLS_DIR)/parrot-config.pir $(PARROT) $(PBC_TO_EXE)
+	$(PARROT) -o parrot_config.pbc $(DEV_TOOLS_DIR)/parrot-config.pir
 	$(PARROT) pbc_to_exe.pbc parrot_config.pbc
 
 $(MINIPARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
@@ -938,10 +941,10 @@
     $(IMCC_O_FILES)
 
 lib_deps_object : $(O_FILES)
-	$(PERL) tools/dev/lib_deps.pl object $(O_FILES)
+	$(PERL) $(DEV_TOOLS_DIR)/lib_deps.pl object $(O_FILES)
 
 lib_deps_source : $(GENERAL_H_FILES)
-	$(PERL) tools/dev/lib_deps.pl source all_source
+	$(PERL) $(DEV_TOOLS_DIR)/lib_deps.pl source all_source
 
 lib_deps : lib_deps_object lib_deps_source
 
@@ -971,7 +974,7 @@
 
 
 $(INSTALLABLECONFIG) : src/install_config$(O) $(PARROT_CONFIG) $(PBC_TO_EXE)
-	$(PARROT) -o parrot_config.pbc tools/util/parrot-config.pir
+	$(PARROT) -o parrot_config.pbc $(DEV_TOOLS_DIR)/parrot-config.pir
 	$(PBC_TO_EXE) parrot_config.pbc --install
 
 $(INSTALLABLEPBCTOEXE) : $(PBC_TO_EXE) src/install_config$(O)
@@ -1238,8 +1241,6 @@
 #
 ###############################################################################
 
-src/byteorder$(O) : $(PARROT_H_HEADERS) src/byteorder.c
-
 src/datatypes$(O) : $(PARROT_H_HEADERS) src/datatypes.c
 
 src/extend_vtable$(O) : $(PARROT_H_HEADERS) \
@@ -1255,7 +1256,7 @@
 
 src/pmc_freeze$(O) : $(PARROT_H_HEADERS) src/pmc_freeze.str src/pmc_freeze.c
 
-src/hash$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h src/hash.c
+src/hash$(O) : $(PARROT_H_HEADERS) src/hash.c
 
 src/library$(O) : $(PARROT_H_HEADERS) src/library.str src/library.c\
 	$(INC_DIR)/dynext.h
@@ -1488,13 +1489,6 @@
     src/nci/extra_thunks.c
 	$(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/vtables$(O) : $(PARROT_H_HEADERS) src/vtables.c
 
 ## SUFFIX OVERRIDE
@@ -1676,10 +1670,22 @@
 CONFIGURE_TEST_FILES = \
     t/configure/*.t \
     t/steps/*.t
+PBC_TEST_FILES = \
+    t/pmc/testlib/annotations.pbc \
+    t/pmc/testlib/number.pbc
+
+# pbc files used for several tests
+pbctestfiles: $(PARROT) $(PBC_TEST_FILES)
+
+t/pmc/testlib/number.pbc: t/pmc/testlib/number.pasm
+	$(PARROT) -o t/pmc/testlib/number.pbc t/pmc/testlib/number.pasm
+
+t/pmc/testlib/annotations.pbc: t/pmc/testlib/annotations.pir
+	$(PARROT) -o t/pmc/testlib/annotations.pbc t/pmc/testlib/annotations.pir
 
 # Common prep for all test targets.
 # We probably need a complete build before running the tests.
-test_prep : all
+test_prep : all pbctestfiles
 
 # Run test cases with a single call of t/harness. Users have to look at only
 # one report. The default set of tests to run is contained in t/harness,
@@ -1703,7 +1709,7 @@
 smoke : smolder_test
 
 # "core tests" -- test basic functionality but not ancillaries
-coretest : corevm
+coretest : corevm pbctestfiles
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) --core-tests
 
 # automake compatibility
@@ -1953,6 +1959,7 @@
 	$(RM_F) t/compilers/pge/*.pir
 	$(RM_F) t/compilers/tge/*.pir
 	$(RM_F) \
+    $(PBC_TEST_FILES) \
     "t/*/*$(O)" \
     "t/*/*.out" \
     "t/*/*.pasm" \
@@ -1995,19 +2002,19 @@
 # Require .svn to exist first
 # Otherwise it'll remove every last file
 svnclobber : .svn
-	$(PERL) tools/dev/svnclobber.pl
+	$(PERL) $(DEV_TOOLS_DIR)/svnclobber.pl
 
 reconfig : realclean
 	$(PERL) Configure.pl $(CONFIG_ARGS)
 
 manitest :
-	$(PERL) tools/dev/manicheck.pl
+	$(PERL) $(DEV_TOOLS_DIR)/manicheck.pl
 
 opsrenumber :
-	$(PERL) tools/dev/opsrenumber.pl $(OPS_FILES)
+	$(PERL) $(DEV_TOOLS_DIR)/opsrenumber.pl $(OPS_FILES)
 
 pmcrenumber :
-	$(PERL) tools/dev/pmcrenumber.pl src/pmc/pmc.num
+	$(PERL) $(DEV_TOOLS_DIR)/pmcrenumber.pl src/pmc/pmc.num
 
 ###############################################################################
 #
@@ -2359,7 +2366,7 @@
 install-dev: install
 
 install-bin: installable
-	$(PERL) tools/dev/install_files.pl \
+	$(PERL) $(DEV_TOOLS_DIR)/install_files.pl \
     --buildprefix=$(BUILDPREFIX) \
     --prefix=$(PREFIX) \
     --exec-prefix=$(EXEC_PREFIX) \
@@ -2373,7 +2380,7 @@
     MANIFEST MANIFEST.generated
 
 install-dev-only: installable
-	$(PERL) tools/dev/install_dev_files.pl \
+	$(PERL) $(DEV_TOOLS_DIR)/install_dev_files.pl \
     --buildprefix=$(BUILDPREFIX) \
     --prefix=$(PREFIX) \
     --exec-prefix=$(EXEC_PREFIX) \
@@ -2388,7 +2395,7 @@
     MANIFEST MANIFEST.generated
 
 install-doc:
-	$(PERL) tools/dev/install_doc_files.pl \
+	$(PERL) $(DEV_TOOLS_DIR)/install_doc_files.pl \
     --buildprefix=$(BUILDPREFIX) \
     --prefix=$(PREFIX) \
     --docdir=$(DOC_DIR) \
@@ -2417,7 +2424,7 @@
 	rm parrot-$(VERSION)
 
 win32-inno-installer : world installable
-	$(PERL) tools/dev/mk_inno.pl
+	$(PERL) $(DEV_TOOLS_DIR)/mk_inno.pl
 	$(INNO_SETUP) parrot.iss
 
 ###############################################################################
@@ -2511,7 +2518,7 @@
 	--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 \
 	.
-	$(PERL) $(BUILD_TOOLS_DIR)/addopstags.pl $(OPS_FILES)
+	$(PERL) $(DEV_TOOLS_DIR)/addopstags.pl $(OPS_FILES)
 
 tags.vi.dummy:
 
@@ -2523,12 +2530,12 @@
 CRITIC_FILES = 'lib/Parrot'
 
 perlcritic:
-	perlcritic --profile tools/util/perlcritic.conf $(CRITIC_FILES)
+	perlcritic --profile $(DEV_TOOLS_DIR)/perlcritic.conf $(CRITIC_FILES)
 
 # Andy's extra-cranky Perl::Critic checking for cage cleaners
 cagecritic:
 	@perl -MPerl::Critic::Bangs -e'$$min=q{1.04};die qq{You need Bangs $$min} unless $$Perl::Critic::Bangs::VERSION ge $$min'
-	perlcritic -1 --profile tools/util/perlcritic-cage.conf $(CRITIC_FILES)
+	perlcritic -1 --profile $(DEV_TOOLS_DIR)/perlcritic-cage.conf $(CRITIC_FILES)
 
 # This target will eventually create all the headers automatically.  If you
 # are having problems with linkage in Win32 (or elsewhere), because something

Modified: branches/unshared_buffers/config/gen/platform.pm
==============================================================================
--- branches/unshared_buffers/config/gen/platform.pm	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/config/gen/platform.pm	Sun Aug 29 17:09:11 2010	(r48719)
@@ -197,6 +197,7 @@
         exec.c
         misc.c
         hires_timer.c
+        pid.c
         /;
 
     my $plat_c = q{src/platform.c};

Copied: branches/unshared_buffers/config/gen/platform/ansi/pid.c (from r48712, trunk/config/gen/platform/ansi/pid.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/config/gen/platform/ansi/pid.c	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/config/gen/platform/ansi/pid.c)
@@ -0,0 +1,50 @@
+/* $Id$
+ * Copyright (C) 2010, Parrot Foundation.
+ */
+
+/*
+
+=head1 NAME
+
+config/gen/platform/ansi/pid.c
+
+=head1 DESCRIPTION
+
+Parrot process id functions.
+
+=head2 Functions
+
+=over 4
+
+=cut
+
+=item C<UINTVAL Parrot_getpid(void)>
+
+Parrot wrapper around standard library C<getpid()> function, returning an UINTVAL.
+
+=cut
+
+*/
+
+UINTVAL
+Parrot_getpid(void)
+{
+    Parrot_warn(NULL, PARROT_WARNINGS_PLATFORM_FLAG, "Parrot_getpid unuseful in this platform");
+    return 0;
+}
+
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/unshared_buffers/config/gen/platform/generic/pid.c (from r48712, trunk/config/gen/platform/generic/pid.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/config/gen/platform/generic/pid.c	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/config/gen/platform/generic/pid.c)
@@ -0,0 +1,56 @@
+/* $Id$
+ * Copyright (C) 2010, Parrot Foundation.
+ */
+
+/*
+
+=head1 NAME
+
+config/gen/platform/generic/pid.c
+
+=head1 DESCRIPTION
+
+Parrot process id functions.
+
+=head2 Functions
+
+=over 4
+
+=cut
+
+*/
+
+#include <sys/types.h>
+#include <unistd.h>
+
+/*
+
+=item C<UINTVAL Parrot_getpid(void)>
+
+Parrot wrapper around standard library C<getpid()> function, returning an UINTVAL.
+
+=cut
+
+*/
+
+UINTVAL
+Parrot_getpid(void)
+{
+    return getpid();
+}
+
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/unshared_buffers/config/gen/platform/win32/pid.c (from r48712, trunk/config/gen/platform/win32/pid.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/config/gen/platform/win32/pid.c	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/config/gen/platform/win32/pid.c)
@@ -0,0 +1,50 @@
+/* $Id$
+ * Copyright (C) 2010, Parrot Foundation.
+ */
+
+/*
+
+=head1 NAME
+
+config/gen/platform/win32/pid.c
+
+=head1 DESCRIPTION
+
+Parrot process id functions.
+
+=head2 Functions
+
+=over 4
+
+=cut
+
+=item C<UINTVAL Parrot_getpid(void)>
+
+Parrot wrapper around standard library C<getpid()> function, returning an UINTVAL.
+
+=cut
+
+*/
+
+UINTVAL
+Parrot_getpid(void)
+{
+    Parrot_warn(NULL, PARROT_WARNINGS_PLATFORM_FLAG, "Parrot_getpid unuseful in this platform");
+    return 0;
+}
+
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/unshared_buffers/docs/embed.pod
==============================================================================
--- branches/unshared_buffers/docs/embed.pod	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/docs/embed.pod	Sun Aug 29 17:09:11 2010	(r48719)
@@ -298,20 +298,10 @@
 Search the namespace PMC C<namespace> for an object with name C<globalname>.
 Return the object, or NULL if not found.
 
-=item C<Parrot_PMC Parrot_find_global_s(PARROT_INTERP, Parrot_String namespace, Parrot_String name)>
-
-Find and return a global called C<name> in the namespace C<namespace>.  Returns
-C<PMCNULL> if not found.
-
 =item C<void Parrot_ns_store_global(PARROT_INTERP, PMC namespace, Parrot_String name, Parrot_PMC val)>
 
 Store the PMC C<val> into the namespace PMC C<namespace> with name C<globalname>.
 
-=item C<void Parrot_store_global_s(PARROT_INTERP, Parrot_String namespace, Parrot_String name, Parrot_PMC val)>
-
-Sets the value of a global called C<name> in the namespace C<namespace>.  Does
-nothing if the global is not found.
-
 =back
 
 =head3 Lexicals
@@ -717,8 +707,6 @@
 
 =item C<Parrot_ns_find_global_from_op>
 
-=item C<Parrot_find_global_s>
-
 =item C<Parrot_find_language>
 
 =item C<Parrot_find_method_direct>
@@ -1529,8 +1517,6 @@
 
 =item C<Parrot_ns_store_global>
 
-=item C<Parrot_store_global_s>
-
 =item C<Parrot_ns_store_sub>
 
 =item C<Parrot_str_boolean>

Modified: branches/unshared_buffers/docs/parrothist.pod
==============================================================================
--- branches/unshared_buffers/docs/parrothist.pod	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/docs/parrothist.pod	Sun Aug 29 17:09:11 2010	(r48719)
@@ -11,7 +11,7 @@
 Simon Cozens, Jeff Goff, Steve Fink, Leo Toetsch, Chip Salzenberg, Jerry Gay,
 Patrick Michaud, Will "coke" Coleda, Matt Diephouse, chromatic, Allison Randal,
 Jonathan Worthington, Bob Rogers, Bernhard Schmalhofer, Andrew Whitworth,
-Francois Perrad, Jonathan Leto.
+Francois Perrad, Jonathan Leto, Michael Hind.
 
 
 =head1 THE RECORDS
@@ -112,5 +112,6 @@
  Gerd        2.5.0          2010-Jun-15     "Cheops"
 
  coke        2.6.0 *        2010-Jul-20     "Red-rumped"
+ mikehh      2.7.0          2010-Aug-17     "Australian King"
 
 =cut

Modified: branches/unshared_buffers/docs/project/release_manager_guide.pod
==============================================================================
--- branches/unshared_buffers/docs/project/release_manager_guide.pod	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/docs/project/release_manager_guide.pod	Sun Aug 29 17:09:11 2010	(r48719)
@@ -84,7 +84,7 @@
 
 =item c
 
-Update release-related information in F<tools/util/release.json>. This will be
+Update release-related information in F<tools/release/release.json>. This will be
 used later when making release announcements.  There are a few essential
 fields that must be updated at each release:
 
@@ -118,16 +118,9 @@
 
 =item f
 
-In the two files F<src/ops/core_ops.c> and F<include/parrot/oplib/core_ops.h>
-is the function C<Parrot_DynOp_core_a_b_c>, which has a name that includes
-the version number. a_b_c is the version number. You have to update this
-version number on two places in the file F<src/ops/core_ops.c>.
-In the file F<include/parrot/oplib/core_ops.h> you have to change this line:
-
- op_lib_t *Parrot_DynOp_core_a_b_c(PARROT_INTERP, long init);
-
-Ignore the warning to not edit this files. It is necessary to edit this files,
-so that "make" builds with the increased version number.
+Run C<./ops2c --core> (or C<make bootstrap-ops>, ignoring errors) followed by
+C<make reconfig> and C<make> to update the names of version-specific internal
+functions.
 
 =item g
 
@@ -251,11 +244,11 @@
 
 =item 9.
 
-Compose the release announcement.  Use F<tools/util/crow.pir> to make
+Compose the release announcement.  Use F<tools/release/crow.pir> to make
 this part easier.  You can specify the format of your announcements like so:
 
-  $ ./parrot tools/util/crow.pir --type=text
-  $ ./parrot tools/util/crow.pir --type=html
+  $ ./parrot tools/release/crow.pir --type=text
+  $ ./parrot tools/release/crow.pir --type=html
 
 Take the screen output and paste it into the application you need.  HTML
 works well for use Perl and PerlMonks, and text for the rest.  It is not a
@@ -413,7 +406,6 @@
 visible at
 L<http://www.google.com/calendar/render?cid=ldhctdamsgfg5a1cord52po9h8@group.calendar.google.com>.
 
- - Aug 17, 2010 - 2.7   - mikehh
  - Sep 21, 2010 - 2.8   - gerd
  - Oct 19, 2010 - 2.9*  - gerd
  - Nov 16, 2010 - 2.10  - ??

Modified: branches/unshared_buffers/examples/languages/squaak/doc/tutorial_episode_1.pod
==============================================================================
--- branches/unshared_buffers/examples/languages/squaak/doc/tutorial_episode_1.pod	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/examples/languages/squaak/doc/tutorial_episode_1.pod	Sun Aug 29 17:09:11 2010	(r48719)
@@ -219,8 +219,9 @@
 
 The exercises are provided at the end of each episode of this tutorial. In
 order to keep the length of this tutorial somewhat acceptable, not everything
-can be discussed in full detail. The answers and/or solutions to these exercises
-will be posted several days after the episode.
+can be discussed in full detail. With episode 3 the answers and/or solutions
+to these exercises are at the end of each episode. The answer of the exercise
+from episode 1 is at the end of episode 2.
 
 =head3 Advanced interactive mode.
 

Modified: branches/unshared_buffers/examples/languages/squaak/src/squaak.pir
==============================================================================
--- branches/unshared_buffers/examples/languages/squaak/src/squaak.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/examples/languages/squaak/src/squaak.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -10,7 +10,7 @@
 This is the base file for the Squaak compiler.
 
 This file includes the parsing and grammar rules from
-the src/ directory, loads the relevant PGE libraries,
+the src/ directory, loads the relevant PCT libraries,
 and registers the compiler under the name 'Squaak'.
 
 =head2 Functions

Copied: branches/unshared_buffers/examples/tools/pgegrep (from r48712, trunk/examples/tools/pgegrep)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/examples/tools/pgegrep	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/examples/tools/pgegrep)
@@ -0,0 +1,308 @@
+#! parrot
+
+=head1 NAME
+
+pgegrep - A simple grep using PGE for matching
+
+=head1 SYNOPSIS
+
+B<pgegrep> [I<OPTIONS>] B<PATTERN> [I<FILE...>]
+
+=head1 DESCRIPTION
+
+pgegrep aims to be a small and easy to use program in replacement of the
+standard grep utility.  Regex support is whatever PGE will allow.  It
+searches through files line by line and tests if the given pattern matches.
+
+=head1 OPTIONS
+
+=over 4
+
+=item -v
+
+=item --invert-match
+
+print lines not matching PATTERN
+
+=item -V
+
+=item --version
+
+print the version and exit
+
+=item --help
+
+show this help and exit
+
+=item -r
+
+=item --recursive
+
+recursively descend into directories
+
+=item -L
+
+=item --files-without-matches
+
+print a list of files that do not match PATTERN
+
+=item -l
+
+=item --files-with-matches
+
+print a list of files that do match PATTERN
+
+=item -a
+
+=item --text
+
+treat binary files as text.
+
+This uses a basic heuristic to discover if a file is binary or not.  Files are
+read line by line, and it keeps processing "normally" until a control character
+is found, and then stops and goes onto the next file is that line matches.
+
+=item -n
+
+=item --line-number
+
+print the line number for each match
+
+=item -H
+
+=item --with-filename
+
+print the filename for each match
+
+=back
+
+=cut
+
+# 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
+	progname = shift argv
+	load_bytecode 'Getopt/Obj.pbc'
+	load_bytecode 'PGE.pbc'
+	.local pmc getopts
+	getopts = new [ 'Getopt';'Obj' ]
+	getopts.'notOptStop'(1)
+	push getopts, 'with-filename|H'
+	push getopts, 'files-with-matches|l'
+	push getopts, 'files-without-matches|L'
+	push getopts, 'line-number|n'
+	push getopts, 'text|a'
+	push getopts, 'recursive|r'
+	push getopts, 'invert-match|v'
+	push getopts, 'version|V'
+	push getopts, 'help'
+	push_eh handler
+	.local pmc opts
+	opts = getopts.'get_options'(argv)
+	$I0 = defined opts['help']
+	.If($I0, {
+		showhelp()
+	})
+	$I0 = defined opts['version']
+	.If($I0, {
+		showversion()
+	})
+
+        .local int argc
+        argc = elements argv
+        .Unless(argc>1, { showhelp() }) # need rule and at least one file
+
+	.local string rule
+	.local pmc p6rule_compile, matchsub
+	rule = shift argv
+	p6rule_compile = compreg 'PGE::Perl6Regex'
+	matchsub = p6rule_compile(rule)
+	.If(null matchsub, { die 'Unable to compile regex' })
+
+	.local int i, filecount
+	.local string filename
+	.local pmc File, OS, files, handle
+	files = new 'ResizableStringArray'
+	files = argv
+	filecount = files
+	# define with-filename if there's more than one file
+	.If(filecount >= 2, { opts['with-filename'] = 1 })
+        $P0 = loadlib 'file'
+	File = new 'File'
+        $P0 = loadlib 'os'
+	OS = new 'OS'
+	# This must be here, or else it'll get filled with junk data we use stdin...
+	i = 0
+
+	.Unless(filecount, {
+		# no args, use stdin
+	stdindashhack:
+		handle = getstdin
+		filename = '(standard input)'
+		goto stdinhack
+	})
+	.For(, i < filecount, inc i, {
+		filename = files[i]
+		.If(filename == '-', {
+			goto stdindashhack
+		})
+		$I1 = File.'is_file'(filename)
+		.IfElse($I1, {
+			# Is a file
+			handle = open filename, 'r'
+		},{
+			# Not a file, hopefully a directory
+			$I1 = File.'is_dir'(filename)
+			$I0 = defined opts['recursive']
+			$I1 &= $I0
+			.Unless($I1, {
+				printerr "pgegrep: '"
+				printerr filename
+				printerr "': Operation not supported.\n"
+				goto nextfor_0
+			})
+			$P0 = OS.'readdir'(filename)
+			.Foreach($S0, $P0, {
+				.If($S0 != '.', {
+				.If($S0 != '..', {
+					$S1 = filename . '/'
+					$S0 = $S1 . $S0
+					$P1 = new 'ResizableStringArray'
+					$P1[0] = $S0
+					$I0 = i + 1
+					splice files, $P1, $I0, 0
+				}) })
+			})
+			filecount = files
+			goto nextfor_0
+		})
+	stdinhack:
+		checkfile(handle, filename, matchsub, opts)
+		close handle
+	nextfor_0:
+	})
+
+	end
+handler:
+	.local pmc exception, pmcmsg
+	.local string message
+	.get_results (exception)
+	pmcmsg = getattribute exception, 'message'
+	pop_eh
+        message = pmcmsg
+        message  = "pgegrep: " . message
+        die message
+.end
+
+.sub checkfile
+	.param pmc handle
+	.param string filename
+	.param pmc matchsub
+	.param pmc opts
+
+	.local pmc match
+	.local string line
+	.local int lineno, linelen, matched
+	lineno = 1
+	matched = 0 # Only used for --files-without-matches
+	line = readline handle
+	linelen = length line
+
+	.local pmc p6rule_compile, cntrlchar
+	$S0 = '<+cntrl-[\t\r\n]>'
+	p6rule_compile = compreg 'PGE::Perl6Regex'
+	cntrlchar = p6rule_compile($S0)
+
+	.For(, linelen, {
+                line = readline handle
+                linelen = length line
+                inc lineno
+        }, {
+		match = matchsub(line)
+                $I1 = istrue match
+		match = cntrlchar(line)
+
+                $I2 = istrue match
+		$I0 = defined opts['files-without-matches']
+		.If($I0, {
+			.If($I1, { matched = 1 })
+			goto next
+		})
+		$I0 = defined opts['files-with-matches']
+		$I0 = $I0 && $I1
+		.If($I0, {
+			say filename
+			.return()
+		})
+
+		$I0 = defined opts['invert-match']
+		not $I0
+		$I1 = xor $I1, $I0
+		.Unless($I1, {
+			$I0 = defined opts['text']
+			$I0 = xor $I0, $I2
+			.If($I0, {
+				print 'Binary file '
+				print filename
+				say   ' matches'
+				.return()
+			})
+			$I0 = defined opts['with-filename']
+			$I1 = defined opts['recursive']
+			$I0 = $I0 || $I1
+			.If($I0, {
+                                print filename
+                                print ':'
+                        })
+			$I0 = defined opts['line-number']
+			.If($I0, {
+                                print lineno
+                                print ':'
+                        })
+			print line
+		})
+		#---------
+	next:
+	})
+	$I0 = defined opts['files-without-matches']
+	.If($I0, { say filename })
+	.return()
+.end
+
+.sub showhelp
+	print <<'HELP'
+Usage: pgegrep [OPTIONS] PATTERN [FILE...]
+Search for the Perl 6 Rule PATTERN in each file.
+
+  -v --invert-match          print lines not matching PATTERN
+  -V --version               print the version and exit
+     --help                  show this help and exit
+  -r --recursive             recursively descend into directories
+  -L --files-without-matches print a list of files that do not match PATTERN
+  -l --files-with-matches    print a list of files that do match PATTERN
+  -a --text                  treat binary files as text
+  -n --line-number           print the line number for each match
+  -H --with-filename         print the filename for each match
+
+HELP
+	end
+.end
+
+.sub showversion
+	print <<'VERSION'
+pgegrep v0.0.1
+VERSION
+	end
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/unshared_buffers/ext/nqp-rx/src/stage0/HLL-s0.pir
==============================================================================
--- branches/unshared_buffers/ext/nqp-rx/src/stage0/HLL-s0.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/ext/nqp-rx/src/stage0/HLL-s0.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -438,6 +438,16 @@
 .sub 'quote_EXPR' :method
     .param pmc args            :slurpy
 
+    .local pmc cur, debug
+    .local string target
+    .local int pos
+
+    (cur, pos, target) = self.'!cursor_start'()
+    debug = getattribute cur, '$!debug'
+    if null debug goto debug_1
+    cur.'!cursor_debug'('START', 'quote_EXPR')
+  debug_1:
+
     .local pmc quotemod, true
     .lex '%*QUOTEMOD', quotemod
     quotemod = new ['Hash']
@@ -466,11 +476,6 @@
     goto args_loop
   args_done:
 
-    .local pmc cur
-    .local string target
-    .local int pos
-
-    (cur, pos, target) = self.'!cursor_start'()
 
     .local pmc start, stop
     (start, stop) = self.'peek_delimiters'(target, pos)
@@ -484,7 +489,13 @@
     $P10.'!cursor_names'('quote_delimited')
     pos = $P10.'pos'()
     cur.'!cursor_pass'(pos, 'quote_EXPR')
+    if null debug goto done
+    cur.'!cursor_debug'('PASS', 'quote_EXPR')
+    goto done
   fail:
+    if null debug goto done
+    cur.'!cursor_debug'('FAIL', 'quote_EXPR')
+  done:
     .return (cur)
 .end
 
@@ -574,6 +585,13 @@
     .param string preclim      :optional
     .param int has_preclim     :opt_flag
 
+    .local pmc here, pos, debug
+    (here, pos) = self.'!cursor_start'()
+    debug = getattribute here, '$!debug'
+    if null debug goto debug_1
+    here.'!cursor_debug'('START', 'EXPR')
+  debug_1:
+
     if has_preclim goto have_preclim
     preclim = ''
   have_preclim:
@@ -588,9 +606,6 @@
     termstack = new ['ResizablePMCArray']
     .lex '@termstack', termstack
 
-    .local pmc here, from, pos
-    (here, pos) = self.'!cursor_start'()
-
   term_loop:
     here = here.termishrx()
     unless here goto fail
@@ -718,7 +733,14 @@
     setattribute here, '$!pos', pos
     setattribute here, '$!match', term
     here.'!reduce'('EXPR')
+    if null debug goto done
+    here.'!cursor_debug'('PASS', 'EXPR')
+    goto done
+
   fail:
+    if null debug goto done
+    here.'!cursor_debug'('FAIL', 'EXPR')
+  done:
     .return (here)
 
   err_internal:
@@ -809,7 +831,7 @@
 
     .local pmc pos
     pos = self.'pos'()
-    self.'!cursor_debug'('START MARKER name=', markname, ', pos=', pos)
+    self.'!cursor_debug'('START', 'MARKER name=', markname, ', pos=', pos)
 
     .local pmc markhash
     markhash = get_global '%!MARKHASH'
@@ -818,7 +840,7 @@
     set_global '%!MARKHASH', markhash
   have_markhash:
     markhash[markname] = pos
-    self.'!cursor_debug'('PASS  MARKER')
+    self.'!cursor_debug'('PASS', 'MARKER')
     .return (1)
 .end
 
@@ -826,7 +848,7 @@
 .sub 'MARKED' :method
     .param pmc markname
 
-    self.'!cursor_debug'('START MARKED name=', markname)
+    self.'!cursor_debug'('START','MARKED name=', markname)
 
     .local pmc markhash
     markhash = get_global '%!MARKHASH'
@@ -835,10 +857,10 @@
     if null $P0 goto fail
     $P1 = self.'pos'()
     unless $P0 == $P1 goto fail
-    self.'!cursor_debug'('PASS  MARKED')
+    self.'!cursor_debug'('PASS','MARKED')
     .return (1)
   fail:
-    self.'!cursor_debug'('FAIL  MARKED')
+    self.'!cursor_debug'('FAIL','MARKED')
     .return (0)
 .end
 
@@ -902,7 +924,7 @@
 ### .include 'gen/hllgrammar-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467467.13603")
+.sub "_block11"  :anon :subid("10_1282323993.58127")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
@@ -919,15 +941,15 @@
     $P332 = $P14()
 .annotate 'line', 1
     .return ($P332)
-    .const 'Sub' $P334 = "106_1280467467.13603" 
+    .const 'Sub' $P334 = "106_1282323993.58127" 
     .return ($P334)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post107") :outer("10_1280467467.13603")
+.sub "" :load :init :subid("post107") :outer("10_1282323993.58127")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467467.13603" 
+    .const 'Sub' $P12 = "10_1282323993.58127" 
     .local pmc block
     set block, $P12
     $P337 = get_root_global ["parrot"], "P6metaclass"
@@ -936,83 +958,83 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block13"  :subid("11_1280467467.13603") :outer("10_1280467467.13603")
+.sub "_block13"  :subid("11_1282323993.58127") :outer("10_1282323993.58127")
 .annotate 'line', 5
-    .const 'Sub' $P319 = "103_1280467467.13603" 
+    .const 'Sub' $P319 = "103_1282323993.58127" 
     capture_lex $P319
-    .const 'Sub' $P313 = "101_1280467467.13603" 
+    .const 'Sub' $P313 = "101_1282323993.58127" 
     capture_lex $P313
-    .const 'Sub' $P300 = "98_1280467467.13603" 
+    .const 'Sub' $P300 = "98_1282323993.58127" 
     capture_lex $P300
-    .const 'Sub' $P268 = "93_1280467467.13603" 
+    .const 'Sub' $P268 = "93_1282323993.58127" 
     capture_lex $P268
-    .const 'Sub' $P262 = "91_1280467467.13603" 
+    .const 'Sub' $P262 = "91_1282323993.58127" 
     capture_lex $P262
-    .const 'Sub' $P257 = "89_1280467467.13603" 
+    .const 'Sub' $P257 = "89_1282323993.58127" 
     capture_lex $P257
-    .const 'Sub' $P251 = "87_1280467467.13603" 
+    .const 'Sub' $P251 = "87_1282323993.58127" 
     capture_lex $P251
-    .const 'Sub' $P245 = "85_1280467467.13603" 
+    .const 'Sub' $P245 = "85_1282323993.58127" 
     capture_lex $P245
-    .const 'Sub' $P240 = "83_1280467467.13603" 
+    .const 'Sub' $P240 = "83_1282323993.58127" 
     capture_lex $P240
-    .const 'Sub' $P235 = "81_1280467467.13603" 
+    .const 'Sub' $P235 = "81_1282323993.58127" 
     capture_lex $P235
-    .const 'Sub' $P230 = "79_1280467467.13603" 
+    .const 'Sub' $P230 = "79_1282323993.58127" 
     capture_lex $P230
-    .const 'Sub' $P225 = "77_1280467467.13603" 
+    .const 'Sub' $P225 = "77_1282323993.58127" 
     capture_lex $P225
-    .const 'Sub' $P220 = "75_1280467467.13603" 
+    .const 'Sub' $P220 = "75_1282323993.58127" 
     capture_lex $P220
-    .const 'Sub' $P215 = "73_1280467467.13603" 
+    .const 'Sub' $P215 = "73_1282323993.58127" 
     capture_lex $P215
-    .const 'Sub' $P210 = "71_1280467467.13603" 
+    .const 'Sub' $P210 = "71_1282323993.58127" 
     capture_lex $P210
-    .const 'Sub' $P205 = "69_1280467467.13603" 
+    .const 'Sub' $P205 = "69_1282323993.58127" 
     capture_lex $P205
-    .const 'Sub' $P195 = "65_1280467467.13603" 
+    .const 'Sub' $P195 = "65_1282323993.58127" 
     capture_lex $P195
-    .const 'Sub' $P182 = "63_1280467467.13603" 
+    .const 'Sub' $P182 = "63_1282323993.58127" 
     capture_lex $P182
-    .const 'Sub' $P170 = "61_1280467467.13603" 
+    .const 'Sub' $P170 = "61_1282323993.58127" 
     capture_lex $P170
-    .const 'Sub' $P164 = "59_1280467467.13603" 
+    .const 'Sub' $P164 = "59_1282323993.58127" 
     capture_lex $P164
-    .const 'Sub' $P157 = "57_1280467467.13603" 
+    .const 'Sub' $P157 = "57_1282323993.58127" 
     capture_lex $P157
-    .const 'Sub' $P151 = "55_1280467467.13603" 
+    .const 'Sub' $P151 = "55_1282323993.58127" 
     capture_lex $P151
-    .const 'Sub' $P144 = "53_1280467467.13603" 
+    .const 'Sub' $P144 = "53_1282323993.58127" 
     capture_lex $P144
-    .const 'Sub' $P138 = "51_1280467467.13603" 
+    .const 'Sub' $P138 = "51_1282323993.58127" 
     capture_lex $P138
-    .const 'Sub' $P131 = "49_1280467467.13603" 
+    .const 'Sub' $P131 = "49_1282323993.58127" 
     capture_lex $P131
-    .const 'Sub' $P125 = "47_1280467467.13603" 
+    .const 'Sub' $P125 = "47_1282323993.58127" 
     capture_lex $P125
-    .const 'Sub' $P119 = "45_1280467467.13603" 
+    .const 'Sub' $P119 = "45_1282323993.58127" 
     capture_lex $P119
-    .const 'Sub' $P110 = "43_1280467467.13603" 
+    .const 'Sub' $P110 = "43_1282323993.58127" 
     capture_lex $P110
-    .const 'Sub' $P102 = "41_1280467467.13603" 
+    .const 'Sub' $P102 = "41_1282323993.58127" 
     capture_lex $P102
-    .const 'Sub' $P92 = "40_1280467467.13603" 
+    .const 'Sub' $P92 = "40_1282323993.58127" 
     capture_lex $P92
-    .const 'Sub' $P86 = "38_1280467467.13603" 
+    .const 'Sub' $P86 = "38_1282323993.58127" 
     capture_lex $P86
-    .const 'Sub' $P81 = "36_1280467467.13603" 
+    .const 'Sub' $P81 = "36_1282323993.58127" 
     capture_lex $P81
-    .const 'Sub' $P73 = "34_1280467467.13603" 
+    .const 'Sub' $P73 = "34_1282323993.58127" 
     capture_lex $P73
-    .const 'Sub' $P67 = "32_1280467467.13603" 
+    .const 'Sub' $P67 = "32_1282323993.58127" 
     capture_lex $P67
-    .const 'Sub' $P61 = "30_1280467467.13603" 
+    .const 'Sub' $P61 = "30_1282323993.58127" 
     capture_lex $P61
-    .const 'Sub' $P55 = "28_1280467467.13603" 
+    .const 'Sub' $P55 = "28_1282323993.58127" 
     capture_lex $P55
-    .const 'Sub' $P22 = "14_1280467467.13603" 
+    .const 'Sub' $P22 = "14_1282323993.58127" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1280467467.13603" 
+    .const 'Sub' $P15 = "12_1282323993.58127" 
     capture_lex $P15
     $P0 = find_dynamic_lex "$*CTXSAVE"
     if null $P0 goto ctxsave_done
@@ -1021,17 +1043,17 @@
     $P0."ctxsave"()
   ctxsave_done:
 .annotate 'line', 33
-    .const 'Sub' $P319 = "103_1280467467.13603" 
+    .const 'Sub' $P319 = "103_1282323993.58127" 
     capture_lex $P319
 .annotate 'line', 5
     .return ($P319)
-    .const 'Sub' $P329 = "105_1280467467.13603" 
+    .const 'Sub' $P329 = "105_1282323993.58127" 
     .return ($P329)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "ws"  :subid("12_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "ws"  :subid("12_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 5
     .local string rx16_tgt
     .local int rx16_pos
@@ -1039,7 +1061,9 @@
     .local int rx16_eos
     .local int rx16_rep
     .local pmc rx16_cur
+    .local pmc rx16_debug
     (rx16_cur, rx16_pos, rx16_tgt, $I10) = self."!cursor_start"()
+    getattribute rx16_debug, rx16_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx16_cur
     .local pmc match
     .lex "$/", match
@@ -1051,7 +1075,9 @@
     substr rx16_tgt, rx16_tgt, rx16_off
   rx16_start:
     eq $I10, 1, rx16_restart
-    rx16_cur."!cursor_debug"("START ", "ws")
+    if_null rx16_debug, debug_108
+    rx16_cur."!cursor_debug"("START", "ws")
+  debug_108:
     $I10 = self.'from'()
     ne $I10, -1, rxscan19_done
     goto rxscan19_scan
@@ -1087,8 +1113,8 @@
     add $I11, rx16_pos, 1
     gt $I11, rx16_eos, rx16_fail
     sub $I11, rx16_pos, rx16_off
-    substr $S10, rx16_tgt, $I11, 1
-    ne $S10, "#", rx16_fail
+    ord $I11, rx16_tgt, $I11
+    ne $I11, 35, rx16_fail
     add rx16_pos, 1
   # rx charclass_q N r 0..-1
     sub $I10, rx16_pos, rx16_off
@@ -1103,10 +1129,14 @@
   rxquantr20_done:
   # rx pass
     rx16_cur."!cursor_pass"(rx16_pos, "ws")
-    rx16_cur."!cursor_debug"("PASS  ", "ws", " at pos=", rx16_pos)
+    if_null rx16_debug, debug_109
+    rx16_cur."!cursor_debug"("PASS", "ws", " at pos=", rx16_pos)
+  debug_109:
     .return (rx16_cur)
   rx16_restart:
-    rx16_cur."!cursor_debug"("NEXT ", "ws")
+    if_null rx16_debug, debug_110
+    rx16_cur."!cursor_debug"("NEXT", "ws")
+  debug_110:
   rx16_fail:
     (rx16_rep, rx16_pos, $I10, $P10) = rx16_cur."!mark_fail"(0)
     lt rx16_pos, -1, rx16_done
@@ -1114,14 +1144,16 @@
     jump $I10
   rx16_done:
     rx16_cur."!cursor_fail"()
-    rx16_cur."!cursor_debug"("FAIL  ", "ws")
+    if_null rx16_debug, debug_111
+    rx16_cur."!cursor_debug"("FAIL", "ws")
+  debug_111:
     .return (rx16_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__ws"  :subid("13_1280467467.13603") :method
+.sub "!PREFIX__ws"  :subid("13_1282323993.58127") :method
 .annotate 'line', 5
     new $P18, "ResizablePMCArray"
     push $P18, ""
@@ -1130,7 +1162,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "termish"  :subid("14_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "termish"  :subid("14_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 5
     .local string rx23_tgt
     .local int rx23_pos
@@ -1138,8 +1170,10 @@
     .local int rx23_eos
     .local int rx23_rep
     .local pmc rx23_cur
+    .local pmc rx23_debug
     (rx23_cur, rx23_pos, rx23_tgt, $I10) = self."!cursor_start"()
-    rx23_cur."!cursor_caparray"("prefixish", "postfixish")
+    rx23_cur."!cursor_caparray"("postfixish", "prefixish")
+    getattribute rx23_debug, rx23_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx23_cur
     .local pmc match
     .lex "$/", match
@@ -1151,7 +1185,9 @@
     substr rx23_tgt, rx23_tgt, rx23_off
   rx23_start:
     eq $I10, 1, rx23_restart
-    rx23_cur."!cursor_debug"("START ", "termish")
+    if_null rx23_debug, debug_112
+    rx23_cur."!cursor_debug"("START", "termish")
+  debug_112:
     $I10 = self.'from'()
     ne $I10, -1, rxscan26_done
     goto rxscan26_scan
@@ -1223,11 +1259,15 @@
 .annotate 'line', 7
   # rx pass
     rx23_cur."!cursor_pass"(rx23_pos, "termish")
-    rx23_cur."!cursor_debug"("PASS  ", "termish", " at pos=", rx23_pos)
+    if_null rx23_debug, debug_113
+    rx23_cur."!cursor_debug"("PASS", "termish", " at pos=", rx23_pos)
+  debug_113:
     .return (rx23_cur)
   rx23_restart:
 .annotate 'line', 5
-    rx23_cur."!cursor_debug"("NEXT ", "termish")
+    if_null rx23_debug, debug_114
+    rx23_cur."!cursor_debug"("NEXT", "termish")
+  debug_114:
   rx23_fail:
     (rx23_rep, rx23_pos, $I10, $P10) = rx23_cur."!mark_fail"(0)
     lt rx23_pos, -1, rx23_done
@@ -1235,14 +1275,16 @@
     jump $I10
   rx23_done:
     rx23_cur."!cursor_fail"()
-    rx23_cur."!cursor_debug"("FAIL  ", "termish")
+    if_null rx23_debug, debug_115
+    rx23_cur."!cursor_debug"("FAIL", "termish")
+  debug_115:
     .return (rx23_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__termish"  :subid("15_1280467467.13603") :method
+.sub "!PREFIX__termish"  :subid("15_1282323993.58127") :method
 .annotate 'line', 5
     new $P25, "ResizablePMCArray"
     push $P25, ""
@@ -1251,7 +1293,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term"  :subid("16_1280467467.13603") :method
+.sub "term"  :subid("16_1282323993.58127") :method
 .annotate 'line', 13
     $P32 = self."!protoregex"("term")
     .return ($P32)
@@ -1259,7 +1301,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term"  :subid("17_1280467467.13603") :method
+.sub "!PREFIX__term"  :subid("17_1282323993.58127") :method
 .annotate 'line', 13
     $P34 = self."!PREFIX__!protoregex"("term")
     .return ($P34)
@@ -1267,7 +1309,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infix"  :subid("18_1280467467.13603") :method
+.sub "infix"  :subid("18_1282323993.58127") :method
 .annotate 'line', 14
     $P36 = self."!protoregex"("infix")
     .return ($P36)
@@ -1275,7 +1317,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infix"  :subid("19_1280467467.13603") :method
+.sub "!PREFIX__infix"  :subid("19_1282323993.58127") :method
 .annotate 'line', 14
     $P38 = self."!PREFIX__!protoregex"("infix")
     .return ($P38)
@@ -1283,7 +1325,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefix"  :subid("20_1280467467.13603") :method
+.sub "prefix"  :subid("20_1282323993.58127") :method
 .annotate 'line', 15
     $P40 = self."!protoregex"("prefix")
     .return ($P40)
@@ -1291,7 +1333,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefix"  :subid("21_1280467467.13603") :method
+.sub "!PREFIX__prefix"  :subid("21_1282323993.58127") :method
 .annotate 'line', 15
     $P42 = self."!PREFIX__!protoregex"("prefix")
     .return ($P42)
@@ -1299,7 +1341,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfix"  :subid("22_1280467467.13603") :method
+.sub "postfix"  :subid("22_1282323993.58127") :method
 .annotate 'line', 16
     $P44 = self."!protoregex"("postfix")
     .return ($P44)
@@ -1307,7 +1349,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfix"  :subid("23_1280467467.13603") :method
+.sub "!PREFIX__postfix"  :subid("23_1282323993.58127") :method
 .annotate 'line', 16
     $P46 = self."!PREFIX__!protoregex"("postfix")
     .return ($P46)
@@ -1315,7 +1357,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "circumfix"  :subid("24_1280467467.13603") :method
+.sub "circumfix"  :subid("24_1282323993.58127") :method
 .annotate 'line', 17
     $P48 = self."!protoregex"("circumfix")
     .return ($P48)
@@ -1323,7 +1365,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__circumfix"  :subid("25_1280467467.13603") :method
+.sub "!PREFIX__circumfix"  :subid("25_1282323993.58127") :method
 .annotate 'line', 17
     $P50 = self."!PREFIX__!protoregex"("circumfix")
     .return ($P50)
@@ -1331,7 +1373,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postcircumfix"  :subid("26_1280467467.13603") :method
+.sub "postcircumfix"  :subid("26_1282323993.58127") :method
 .annotate 'line', 18
     $P52 = self."!protoregex"("postcircumfix")
     .return ($P52)
@@ -1339,7 +1381,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postcircumfix"  :subid("27_1280467467.13603") :method
+.sub "!PREFIX__postcircumfix"  :subid("27_1282323993.58127") :method
 .annotate 'line', 18
     $P54 = self."!PREFIX__!protoregex"("postcircumfix")
     .return ($P54)
@@ -1347,7 +1389,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term:sym<circumfix>"  :subid("28_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "term:sym<circumfix>"  :subid("28_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 5
     .local string rx56_tgt
     .local int rx56_pos
@@ -1355,7 +1397,9 @@
     .local int rx56_eos
     .local int rx56_rep
     .local pmc rx56_cur
+    .local pmc rx56_debug
     (rx56_cur, rx56_pos, rx56_tgt, $I10) = self."!cursor_start"()
+    getattribute rx56_debug, rx56_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx56_cur
     .local pmc match
     .lex "$/", match
@@ -1367,7 +1411,9 @@
     substr rx56_tgt, rx56_tgt, rx56_off
   rx56_start:
     eq $I10, 1, rx56_restart
-    rx56_cur."!cursor_debug"("START ", "term:sym<circumfix>")
+    if_null rx56_debug, debug_116
+    rx56_cur."!cursor_debug"("START", "term:sym<circumfix>")
+  debug_116:
     $I10 = self.'from'()
     ne $I10, -1, rxscan60_done
     goto rxscan60_scan
@@ -1390,11 +1436,15 @@
     rx56_pos = $P10."pos"()
   # rx pass
     rx56_cur."!cursor_pass"(rx56_pos, "term:sym<circumfix>")
-    rx56_cur."!cursor_debug"("PASS  ", "term:sym<circumfix>", " at pos=", rx56_pos)
+    if_null rx56_debug, debug_117
+    rx56_cur."!cursor_debug"("PASS", "term:sym<circumfix>", " at pos=", rx56_pos)
+  debug_117:
     .return (rx56_cur)
   rx56_restart:
 .annotate 'line', 5
-    rx56_cur."!cursor_debug"("NEXT ", "term:sym<circumfix>")
+    if_null rx56_debug, debug_118
+    rx56_cur."!cursor_debug"("NEXT", "term:sym<circumfix>")
+  debug_118:
   rx56_fail:
     (rx56_rep, rx56_pos, $I10, $P10) = rx56_cur."!mark_fail"(0)
     lt rx56_pos, -1, rx56_done
@@ -1402,14 +1452,16 @@
     jump $I10
   rx56_done:
     rx56_cur."!cursor_fail"()
-    rx56_cur."!cursor_debug"("FAIL  ", "term:sym<circumfix>")
+    if_null rx56_debug, debug_119
+    rx56_cur."!cursor_debug"("FAIL", "term:sym<circumfix>")
+  debug_119:
     .return (rx56_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1280467467.13603") :method
+.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1282323993.58127") :method
 .annotate 'line', 5
     $P58 = self."!PREFIX__!subrule"("circumfix", "")
     new $P59, "ResizablePMCArray"
@@ -1419,7 +1471,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infixish"  :subid("30_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "infixish"  :subid("30_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 5
     .local string rx62_tgt
     .local int rx62_pos
@@ -1427,7 +1479,9 @@
     .local int rx62_eos
     .local int rx62_rep
     .local pmc rx62_cur
+    .local pmc rx62_debug
     (rx62_cur, rx62_pos, rx62_tgt, $I10) = self."!cursor_start"()
+    getattribute rx62_debug, rx62_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx62_cur
     .local pmc match
     .lex "$/", match
@@ -1439,7 +1493,9 @@
     substr rx62_tgt, rx62_tgt, rx62_off
   rx62_start:
     eq $I10, 1, rx62_restart
-    rx62_cur."!cursor_debug"("START ", "infixish")
+    if_null rx62_debug, debug_120
+    rx62_cur."!cursor_debug"("START", "infixish")
+  debug_120:
     $I10 = self.'from'()
     ne $I10, -1, rxscan66_done
     goto rxscan66_scan
@@ -1462,11 +1518,15 @@
     rx62_pos = $P10."pos"()
   # rx pass
     rx62_cur."!cursor_pass"(rx62_pos, "infixish")
-    rx62_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx62_pos)
+    if_null rx62_debug, debug_121
+    rx62_cur."!cursor_debug"("PASS", "infixish", " at pos=", rx62_pos)
+  debug_121:
     .return (rx62_cur)
   rx62_restart:
 .annotate 'line', 5
-    rx62_cur."!cursor_debug"("NEXT ", "infixish")
+    if_null rx62_debug, debug_122
+    rx62_cur."!cursor_debug"("NEXT", "infixish")
+  debug_122:
   rx62_fail:
     (rx62_rep, rx62_pos, $I10, $P10) = rx62_cur."!mark_fail"(0)
     lt rx62_pos, -1, rx62_done
@@ -1474,14 +1534,16 @@
     jump $I10
   rx62_done:
     rx62_cur."!cursor_fail"()
-    rx62_cur."!cursor_debug"("FAIL  ", "infixish")
+    if_null rx62_debug, debug_123
+    rx62_cur."!cursor_debug"("FAIL", "infixish")
+  debug_123:
     .return (rx62_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("31_1280467467.13603") :method
+.sub "!PREFIX__infixish"  :subid("31_1282323993.58127") :method
 .annotate 'line', 5
     $P64 = self."!PREFIX__!subrule"("infix", "")
     new $P65, "ResizablePMCArray"
@@ -1491,7 +1553,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefixish"  :subid("32_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "prefixish"  :subid("32_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 5
     .local string rx68_tgt
     .local int rx68_pos
@@ -1499,7 +1561,9 @@
     .local int rx68_eos
     .local int rx68_rep
     .local pmc rx68_cur
+    .local pmc rx68_debug
     (rx68_cur, rx68_pos, rx68_tgt, $I10) = self."!cursor_start"()
+    getattribute rx68_debug, rx68_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx68_cur
     .local pmc match
     .lex "$/", match
@@ -1511,7 +1575,9 @@
     substr rx68_tgt, rx68_tgt, rx68_off
   rx68_start:
     eq $I10, 1, rx68_restart
-    rx68_cur."!cursor_debug"("START ", "prefixish")
+    if_null rx68_debug, debug_124
+    rx68_cur."!cursor_debug"("START", "prefixish")
+  debug_124:
     $I10 = self.'from'()
     ne $I10, -1, rxscan72_done
     goto rxscan72_scan
@@ -1539,11 +1605,15 @@
     rx68_pos = $P10."pos"()
   # rx pass
     rx68_cur."!cursor_pass"(rx68_pos, "prefixish")
-    rx68_cur."!cursor_debug"("PASS  ", "prefixish", " at pos=", rx68_pos)
+    if_null rx68_debug, debug_125
+    rx68_cur."!cursor_debug"("PASS", "prefixish", " at pos=", rx68_pos)
+  debug_125:
     .return (rx68_cur)
   rx68_restart:
 .annotate 'line', 5
-    rx68_cur."!cursor_debug"("NEXT ", "prefixish")
+    if_null rx68_debug, debug_126
+    rx68_cur."!cursor_debug"("NEXT", "prefixish")
+  debug_126:
   rx68_fail:
     (rx68_rep, rx68_pos, $I10, $P10) = rx68_cur."!mark_fail"(0)
     lt rx68_pos, -1, rx68_done
@@ -1551,14 +1621,16 @@
     jump $I10
   rx68_done:
     rx68_cur."!cursor_fail"()
-    rx68_cur."!cursor_debug"("FAIL  ", "prefixish")
+    if_null rx68_debug, debug_127
+    rx68_cur."!cursor_debug"("FAIL", "prefixish")
+  debug_127:
     .return (rx68_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefixish"  :subid("33_1280467467.13603") :method
+.sub "!PREFIX__prefixish"  :subid("33_1282323993.58127") :method
 .annotate 'line', 5
     $P70 = self."!PREFIX__!subrule"("prefix", "")
     new $P71, "ResizablePMCArray"
@@ -1568,7 +1640,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfixish"  :subid("34_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "postfixish"  :subid("34_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 5
     .local string rx74_tgt
     .local int rx74_pos
@@ -1576,7 +1648,9 @@
     .local int rx74_eos
     .local int rx74_rep
     .local pmc rx74_cur
+    .local pmc rx74_debug
     (rx74_cur, rx74_pos, rx74_tgt, $I10) = self."!cursor_start"()
+    getattribute rx74_debug, rx74_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx74_cur
     .local pmc match
     .lex "$/", match
@@ -1588,7 +1662,9 @@
     substr rx74_tgt, rx74_tgt, rx74_off
   rx74_start:
     eq $I10, 1, rx74_restart
-    rx74_cur."!cursor_debug"("START ", "postfixish")
+    if_null rx74_debug, debug_128
+    rx74_cur."!cursor_debug"("START", "postfixish")
+  debug_128:
     $I10 = self.'from'()
     ne $I10, -1, rxscan79_done
     goto rxscan79_scan
@@ -1627,11 +1703,15 @@
 .annotate 'line', 24
   # rx pass
     rx74_cur."!cursor_pass"(rx74_pos, "postfixish")
-    rx74_cur."!cursor_debug"("PASS  ", "postfixish", " at pos=", rx74_pos)
+    if_null rx74_debug, debug_129
+    rx74_cur."!cursor_debug"("PASS", "postfixish", " at pos=", rx74_pos)
+  debug_129:
     .return (rx74_cur)
   rx74_restart:
 .annotate 'line', 5
-    rx74_cur."!cursor_debug"("NEXT ", "postfixish")
+    if_null rx74_debug, debug_130
+    rx74_cur."!cursor_debug"("NEXT", "postfixish")
+  debug_130:
   rx74_fail:
     (rx74_rep, rx74_pos, $I10, $P10) = rx74_cur."!mark_fail"(0)
     lt rx74_pos, -1, rx74_done
@@ -1639,14 +1719,16 @@
     jump $I10
   rx74_done:
     rx74_cur."!cursor_fail"()
-    rx74_cur."!cursor_debug"("FAIL  ", "postfixish")
+    if_null rx74_debug, debug_131
+    rx74_cur."!cursor_debug"("FAIL", "postfixish")
+  debug_131:
     .return (rx74_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfixish"  :subid("35_1280467467.13603") :method
+.sub "!PREFIX__postfixish"  :subid("35_1282323993.58127") :method
 .annotate 'line', 5
     $P76 = self."!PREFIX__!subrule"("postcircumfix", "")
     $P77 = self."!PREFIX__!subrule"("postfix", "")
@@ -1658,7 +1740,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm"  :subid("36_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "nullterm"  :subid("36_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 5
     .local string rx82_tgt
     .local int rx82_pos
@@ -1666,7 +1748,9 @@
     .local int rx82_eos
     .local int rx82_rep
     .local pmc rx82_cur
+    .local pmc rx82_debug
     (rx82_cur, rx82_pos, rx82_tgt, $I10) = self."!cursor_start"()
+    getattribute rx82_debug, rx82_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx82_cur
     .local pmc match
     .lex "$/", match
@@ -1678,7 +1762,9 @@
     substr rx82_tgt, rx82_tgt, rx82_off
   rx82_start:
     eq $I10, 1, rx82_restart
-    rx82_cur."!cursor_debug"("START ", "nullterm")
+    if_null rx82_debug, debug_132
+    rx82_cur."!cursor_debug"("START", "nullterm")
+  debug_132:
     $I10 = self.'from'()
     ne $I10, -1, rxscan85_done
     goto rxscan85_scan
@@ -1694,11 +1780,15 @@
 .annotate 'line', 29
   # rx pass
     rx82_cur."!cursor_pass"(rx82_pos, "nullterm")
-    rx82_cur."!cursor_debug"("PASS  ", "nullterm", " at pos=", rx82_pos)
+    if_null rx82_debug, debug_133
+    rx82_cur."!cursor_debug"("PASS", "nullterm", " at pos=", rx82_pos)
+  debug_133:
     .return (rx82_cur)
   rx82_restart:
 .annotate 'line', 5
-    rx82_cur."!cursor_debug"("NEXT ", "nullterm")
+    if_null rx82_debug, debug_134
+    rx82_cur."!cursor_debug"("NEXT", "nullterm")
+  debug_134:
   rx82_fail:
     (rx82_rep, rx82_pos, $I10, $P10) = rx82_cur."!mark_fail"(0)
     lt rx82_pos, -1, rx82_done
@@ -1706,14 +1796,16 @@
     jump $I10
   rx82_done:
     rx82_cur."!cursor_fail"()
-    rx82_cur."!cursor_debug"("FAIL  ", "nullterm")
+    if_null rx82_debug, debug_135
+    rx82_cur."!cursor_debug"("FAIL", "nullterm")
+  debug_135:
     .return (rx82_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm"  :subid("37_1280467467.13603") :method
+.sub "!PREFIX__nullterm"  :subid("37_1282323993.58127") :method
 .annotate 'line', 5
     new $P84, "ResizablePMCArray"
     push $P84, ""
@@ -1722,7 +1814,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm_alt"  :subid("38_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "nullterm_alt"  :subid("38_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 5
     .local string rx87_tgt
     .local int rx87_pos
@@ -1730,7 +1822,9 @@
     .local int rx87_eos
     .local int rx87_rep
     .local pmc rx87_cur
+    .local pmc rx87_debug
     (rx87_cur, rx87_pos, rx87_tgt, $I10) = self."!cursor_start"()
+    getattribute rx87_debug, rx87_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx87_cur
     .local pmc match
     .lex "$/", match
@@ -1742,7 +1836,9 @@
     substr rx87_tgt, rx87_tgt, rx87_off
   rx87_start:
     eq $I10, 1, rx87_restart
-    rx87_cur."!cursor_debug"("START ", "nullterm_alt")
+    if_null rx87_debug, debug_136
+    rx87_cur."!cursor_debug"("START", "nullterm_alt")
+  debug_136:
     $I10 = self.'from'()
     ne $I10, -1, rxscan91_done
     goto rxscan91_scan
@@ -1765,11 +1861,15 @@
     rx87_pos = $P10."pos"()
   # rx pass
     rx87_cur."!cursor_pass"(rx87_pos, "nullterm_alt")
-    rx87_cur."!cursor_debug"("PASS  ", "nullterm_alt", " at pos=", rx87_pos)
+    if_null rx87_debug, debug_137
+    rx87_cur."!cursor_debug"("PASS", "nullterm_alt", " at pos=", rx87_pos)
+  debug_137:
     .return (rx87_cur)
   rx87_restart:
 .annotate 'line', 5
-    rx87_cur."!cursor_debug"("NEXT ", "nullterm_alt")
+    if_null rx87_debug, debug_138
+    rx87_cur."!cursor_debug"("NEXT", "nullterm_alt")
+  debug_138:
   rx87_fail:
     (rx87_rep, rx87_pos, $I10, $P10) = rx87_cur."!mark_fail"(0)
     lt rx87_pos, -1, rx87_done
@@ -1777,14 +1877,16 @@
     jump $I10
   rx87_done:
     rx87_cur."!cursor_fail"()
-    rx87_cur."!cursor_debug"("FAIL  ", "nullterm_alt")
+    if_null rx87_debug, debug_139
+    rx87_cur."!cursor_debug"("FAIL", "nullterm_alt")
+  debug_139:
     .return (rx87_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm_alt"  :subid("39_1280467467.13603") :method
+.sub "!PREFIX__nullterm_alt"  :subid("39_1282323993.58127") :method
 .annotate 'line', 5
     $P89 = self."!PREFIX__!subrule"("nullterm", "")
     new $P90, "ResizablePMCArray"
@@ -1795,7 +1897,7 @@
 
 .namespace ["HLL";"Grammar"]
 .include "except_types.pasm"
-.sub "nulltermish"  :subid("40_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "nulltermish"  :subid("40_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     new $P94, 'ExceptionHandler'
     set_addr $P94, control_93
@@ -1822,7 +1924,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_delimited"  :subid("41_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_delimited"  :subid("41_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx103_tgt
     .local int rx103_pos
@@ -1830,8 +1932,10 @@
     .local int rx103_eos
     .local int rx103_rep
     .local pmc rx103_cur
+    .local pmc rx103_debug
     (rx103_cur, rx103_pos, rx103_tgt, $I10) = self."!cursor_start"()
     rx103_cur."!cursor_caparray"("quote_atom")
+    getattribute rx103_debug, rx103_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx103_cur
     .local pmc match
     .lex "$/", match
@@ -1843,7 +1947,9 @@
     substr rx103_tgt, rx103_tgt, rx103_off
   rx103_start:
     eq $I10, 1, rx103_restart
-    rx103_cur."!cursor_debug"("START ", "quote_delimited")
+    if_null rx103_debug, debug_140
+    rx103_cur."!cursor_debug"("START", "quote_delimited")
+  debug_140:
     $I10 = self.'from'()
     ne $I10, -1, rxscan107_done
     goto rxscan107_scan
@@ -1897,11 +2003,15 @@
 .annotate 'line', 36
   # rx pass
     rx103_cur."!cursor_pass"(rx103_pos, "quote_delimited")
-    rx103_cur."!cursor_debug"("PASS  ", "quote_delimited", " at pos=", rx103_pos)
+    if_null rx103_debug, debug_141
+    rx103_cur."!cursor_debug"("PASS", "quote_delimited", " at pos=", rx103_pos)
+  debug_141:
     .return (rx103_cur)
   rx103_restart:
 .annotate 'line', 33
-    rx103_cur."!cursor_debug"("NEXT ", "quote_delimited")
+    if_null rx103_debug, debug_142
+    rx103_cur."!cursor_debug"("NEXT", "quote_delimited")
+  debug_142:
   rx103_fail:
     (rx103_rep, rx103_pos, $I10, $P10) = rx103_cur."!mark_fail"(0)
     lt rx103_pos, -1, rx103_done
@@ -1909,14 +2019,16 @@
     jump $I10
   rx103_done:
     rx103_cur."!cursor_fail"()
-    rx103_cur."!cursor_debug"("FAIL  ", "quote_delimited")
+    if_null rx103_debug, debug_143
+    rx103_cur."!cursor_debug"("FAIL", "quote_delimited")
+  debug_143:
     .return (rx103_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_delimited"  :subid("42_1280467467.13603") :method
+.sub "!PREFIX__quote_delimited"  :subid("42_1282323993.58127") :method
 .annotate 'line', 33
     $P105 = self."!PREFIX__!subrule"("starter", "")
     new $P106, "ResizablePMCArray"
@@ -1926,7 +2038,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_atom"  :subid("43_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_atom"  :subid("43_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx111_tgt
     .local int rx111_pos
@@ -1934,7 +2046,9 @@
     .local int rx111_eos
     .local int rx111_rep
     .local pmc rx111_cur
+    .local pmc rx111_debug
     (rx111_cur, rx111_pos, rx111_tgt, $I10) = self."!cursor_start"()
+    getattribute rx111_debug, rx111_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx111_cur
     .local pmc match
     .lex "$/", match
@@ -1946,7 +2060,9 @@
     substr rx111_tgt, rx111_tgt, rx111_off
   rx111_start:
     eq $I10, 1, rx111_restart
-    rx111_cur."!cursor_debug"("START ", "quote_atom")
+    if_null rx111_debug, debug_144
+    rx111_cur."!cursor_debug"("START", "quote_atom")
+  debug_144:
     $I10 = self.'from'()
     ne $I10, -1, rxscan114_done
     goto rxscan114_scan
@@ -2004,11 +2120,15 @@
 .annotate 'line', 40
   # rx pass
     rx111_cur."!cursor_pass"(rx111_pos, "quote_atom")
-    rx111_cur."!cursor_debug"("PASS  ", "quote_atom", " at pos=", rx111_pos)
+    if_null rx111_debug, debug_145
+    rx111_cur."!cursor_debug"("PASS", "quote_atom", " at pos=", rx111_pos)
+  debug_145:
     .return (rx111_cur)
   rx111_restart:
 .annotate 'line', 33
-    rx111_cur."!cursor_debug"("NEXT ", "quote_atom")
+    if_null rx111_debug, debug_146
+    rx111_cur."!cursor_debug"("NEXT", "quote_atom")
+  debug_146:
   rx111_fail:
     (rx111_rep, rx111_pos, $I10, $P10) = rx111_cur."!mark_fail"(0)
     lt rx111_pos, -1, rx111_done
@@ -2016,14 +2136,16 @@
     jump $I10
   rx111_done:
     rx111_cur."!cursor_fail"()
-    rx111_cur."!cursor_debug"("FAIL  ", "quote_atom")
+    if_null rx111_debug, debug_147
+    rx111_cur."!cursor_debug"("FAIL", "quote_atom")
+  debug_147:
     .return (rx111_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_atom"  :subid("44_1280467467.13603") :method
+.sub "!PREFIX__quote_atom"  :subid("44_1282323993.58127") :method
 .annotate 'line', 33
     new $P113, "ResizablePMCArray"
     push $P113, ""
@@ -2032,7 +2154,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decint"  :subid("45_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "decint"  :subid("45_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx120_tgt
     .local int rx120_pos
@@ -2040,7 +2162,9 @@
     .local int rx120_eos
     .local int rx120_rep
     .local pmc rx120_cur
+    .local pmc rx120_debug
     (rx120_cur, rx120_pos, rx120_tgt, $I10) = self."!cursor_start"()
+    getattribute rx120_debug, rx120_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx120_cur
     .local pmc match
     .lex "$/", match
@@ -2052,7 +2176,9 @@
     substr rx120_tgt, rx120_tgt, rx120_off
   rx120_start:
     eq $I10, 1, rx120_restart
-    rx120_cur."!cursor_debug"("START ", "decint")
+    if_null rx120_debug, debug_148
+    rx120_cur."!cursor_debug"("START", "decint")
+  debug_148:
     $I10 = self.'from'()
     ne $I10, -1, rxscan123_done
     goto rxscan123_scan
@@ -2084,18 +2210,22 @@
     add $I11, rx120_pos, 1
     gt $I11, rx120_eos, rx120_fail
     sub $I11, rx120_pos, rx120_off
-    substr $S10, rx120_tgt, $I11, 1
-    ne $S10, "_", rx120_fail
+    ord $I11, rx120_tgt, $I11
+    ne $I11, 95, rx120_fail
     add rx120_pos, 1
     goto rxquantr124_loop
   rxquantr124_done:
   # rx pass
     rx120_cur."!cursor_pass"(rx120_pos, "decint")
-    rx120_cur."!cursor_debug"("PASS  ", "decint", " at pos=", rx120_pos)
+    if_null rx120_debug, debug_149
+    rx120_cur."!cursor_debug"("PASS", "decint", " at pos=", rx120_pos)
+  debug_149:
     .return (rx120_cur)
   rx120_restart:
 .annotate 'line', 33
-    rx120_cur."!cursor_debug"("NEXT ", "decint")
+    if_null rx120_debug, debug_150
+    rx120_cur."!cursor_debug"("NEXT", "decint")
+  debug_150:
   rx120_fail:
     (rx120_rep, rx120_pos, $I10, $P10) = rx120_cur."!mark_fail"(0)
     lt rx120_pos, -1, rx120_done
@@ -2103,14 +2233,16 @@
     jump $I10
   rx120_done:
     rx120_cur."!cursor_fail"()
-    rx120_cur."!cursor_debug"("FAIL  ", "decint")
+    if_null rx120_debug, debug_151
+    rx120_cur."!cursor_debug"("FAIL", "decint")
+  debug_151:
     .return (rx120_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decint"  :subid("46_1280467467.13603") :method
+.sub "!PREFIX__decint"  :subid("46_1282323993.58127") :method
 .annotate 'line', 33
     new $P122, "ResizablePMCArray"
     push $P122, ""
@@ -2119,7 +2251,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decints"  :subid("47_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "decints"  :subid("47_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx126_tgt
     .local int rx126_pos
@@ -2127,8 +2259,10 @@
     .local int rx126_eos
     .local int rx126_rep
     .local pmc rx126_cur
+    .local pmc rx126_debug
     (rx126_cur, rx126_pos, rx126_tgt, $I10) = self."!cursor_start"()
     rx126_cur."!cursor_caparray"("decint")
+    getattribute rx126_debug, rx126_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx126_cur
     .local pmc match
     .lex "$/", match
@@ -2140,7 +2274,9 @@
     substr rx126_tgt, rx126_tgt, rx126_off
   rx126_start:
     eq $I10, 1, rx126_restart
-    rx126_cur."!cursor_debug"("START ", "decints")
+    if_null rx126_debug, debug_152
+    rx126_cur."!cursor_debug"("START", "decints")
+  debug_152:
     $I10 = self.'from'()
     ne $I10, -1, rxscan129_done
     goto rxscan129_scan
@@ -2183,18 +2319,22 @@
     add $I11, rx126_pos, 1
     gt $I11, rx126_eos, rx126_fail
     sub $I11, rx126_pos, rx126_off
-    substr $S10, rx126_tgt, $I11, 1
-    ne $S10, ",", rx126_fail
+    ord $I11, rx126_tgt, $I11
+    ne $I11, 44, rx126_fail
     add rx126_pos, 1
     goto rxquantr130_loop
   rxquantr130_done:
   # rx pass
     rx126_cur."!cursor_pass"(rx126_pos, "decints")
-    rx126_cur."!cursor_debug"("PASS  ", "decints", " at pos=", rx126_pos)
+    if_null rx126_debug, debug_153
+    rx126_cur."!cursor_debug"("PASS", "decints", " at pos=", rx126_pos)
+  debug_153:
     .return (rx126_cur)
   rx126_restart:
 .annotate 'line', 33
-    rx126_cur."!cursor_debug"("NEXT ", "decints")
+    if_null rx126_debug, debug_154
+    rx126_cur."!cursor_debug"("NEXT", "decints")
+  debug_154:
   rx126_fail:
     (rx126_rep, rx126_pos, $I10, $P10) = rx126_cur."!mark_fail"(0)
     lt rx126_pos, -1, rx126_done
@@ -2202,14 +2342,16 @@
     jump $I10
   rx126_done:
     rx126_cur."!cursor_fail"()
-    rx126_cur."!cursor_debug"("FAIL  ", "decints")
+    if_null rx126_debug, debug_155
+    rx126_cur."!cursor_debug"("FAIL", "decints")
+  debug_155:
     .return (rx126_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decints"  :subid("48_1280467467.13603") :method
+.sub "!PREFIX__decints"  :subid("48_1282323993.58127") :method
 .annotate 'line', 33
     new $P128, "ResizablePMCArray"
     push $P128, ""
@@ -2218,7 +2360,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexint"  :subid("49_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "hexint"  :subid("49_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx132_tgt
     .local int rx132_pos
@@ -2226,7 +2368,9 @@
     .local int rx132_eos
     .local int rx132_rep
     .local pmc rx132_cur
+    .local pmc rx132_debug
     (rx132_cur, rx132_pos, rx132_tgt, $I10) = self."!cursor_start"()
+    getattribute rx132_debug, rx132_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx132_cur
     .local pmc match
     .lex "$/", match
@@ -2238,7 +2382,9 @@
     substr rx132_tgt, rx132_tgt, rx132_off
   rx132_start:
     eq $I10, 1, rx132_restart
-    rx132_cur."!cursor_debug"("START ", "hexint")
+    if_null rx132_debug, debug_156
+    rx132_cur."!cursor_debug"("START", "hexint")
+  debug_156:
     $I10 = self.'from'()
     ne $I10, -1, rxscan135_done
     goto rxscan135_scan
@@ -2256,23 +2402,22 @@
     set_addr $I10, rxquantr136_done
     rx132_cur."!mark_push"(0, -1, $I10)
   rxquantr136_loop:
-  # rx rxquantr137 ** 1..*
-    set_addr $I10, rxquantr137_done
-    rx132_cur."!mark_push"(0, -1, $I10)
-  rxquantr137_loop:
-  # rx enumcharlist negate=0 
-    ge rx132_pos, rx132_eos, rx132_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx132_pos, rx132_off
+    set rx132_rep, 0
+    sub $I12, rx132_eos, rx132_pos
+  rxenumcharlistq137_loop:
+    le $I12, 0, rxenumcharlistq137_done
     substr $S10, rx132_tgt, $I10, 1
     index $I11, "0123456789abcdefABCDEF", $S10
-    lt $I11, 0, rx132_fail
-    inc rx132_pos
-    set_addr $I10, rxquantr137_done
-    (rx132_rep) = rx132_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr137_done
-    rx132_cur."!mark_push"(rx132_rep, rx132_pos, $I10)
-    goto rxquantr137_loop
-  rxquantr137_done:
+    lt $I11, 0, rxenumcharlistq137_done
+    inc rx132_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq137_loop
+  rxenumcharlistq137_done:
+    lt rx132_rep, 1, rx132_fail
+    add rx132_pos, rx132_pos, rx132_rep
     set_addr $I10, rxquantr136_done
     (rx132_rep) = rx132_cur."!mark_commit"($I10)
     set_addr $I10, rxquantr136_done
@@ -2281,18 +2426,22 @@
     add $I11, rx132_pos, 1
     gt $I11, rx132_eos, rx132_fail
     sub $I11, rx132_pos, rx132_off
-    substr $S10, rx132_tgt, $I11, 1
-    ne $S10, "_", rx132_fail
+    ord $I11, rx132_tgt, $I11
+    ne $I11, 95, rx132_fail
     add rx132_pos, 1
     goto rxquantr136_loop
   rxquantr136_done:
   # rx pass
     rx132_cur."!cursor_pass"(rx132_pos, "hexint")
-    rx132_cur."!cursor_debug"("PASS  ", "hexint", " at pos=", rx132_pos)
+    if_null rx132_debug, debug_157
+    rx132_cur."!cursor_debug"("PASS", "hexint", " at pos=", rx132_pos)
+  debug_157:
     .return (rx132_cur)
   rx132_restart:
 .annotate 'line', 33
-    rx132_cur."!cursor_debug"("NEXT ", "hexint")
+    if_null rx132_debug, debug_158
+    rx132_cur."!cursor_debug"("NEXT", "hexint")
+  debug_158:
   rx132_fail:
     (rx132_rep, rx132_pos, $I10, $P10) = rx132_cur."!mark_fail"(0)
     lt rx132_pos, -1, rx132_done
@@ -2300,14 +2449,16 @@
     jump $I10
   rx132_done:
     rx132_cur."!cursor_fail"()
-    rx132_cur."!cursor_debug"("FAIL  ", "hexint")
+    if_null rx132_debug, debug_159
+    rx132_cur."!cursor_debug"("FAIL", "hexint")
+  debug_159:
     .return (rx132_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexint"  :subid("50_1280467467.13603") :method
+.sub "!PREFIX__hexint"  :subid("50_1282323993.58127") :method
 .annotate 'line', 33
     new $P134, "ResizablePMCArray"
     push $P134, ""
@@ -2316,7 +2467,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("51_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "hexints"  :subid("51_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx139_tgt
     .local int rx139_pos
@@ -2324,8 +2475,10 @@
     .local int rx139_eos
     .local int rx139_rep
     .local pmc rx139_cur
+    .local pmc rx139_debug
     (rx139_cur, rx139_pos, rx139_tgt, $I10) = self."!cursor_start"()
     rx139_cur."!cursor_caparray"("hexint")
+    getattribute rx139_debug, rx139_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx139_cur
     .local pmc match
     .lex "$/", match
@@ -2337,7 +2490,9 @@
     substr rx139_tgt, rx139_tgt, rx139_off
   rx139_start:
     eq $I10, 1, rx139_restart
-    rx139_cur."!cursor_debug"("START ", "hexints")
+    if_null rx139_debug, debug_160
+    rx139_cur."!cursor_debug"("START", "hexints")
+  debug_160:
     $I10 = self.'from'()
     ne $I10, -1, rxscan142_done
     goto rxscan142_scan
@@ -2380,18 +2535,22 @@
     add $I11, rx139_pos, 1
     gt $I11, rx139_eos, rx139_fail
     sub $I11, rx139_pos, rx139_off
-    substr $S10, rx139_tgt, $I11, 1
-    ne $S10, ",", rx139_fail
+    ord $I11, rx139_tgt, $I11
+    ne $I11, 44, rx139_fail
     add rx139_pos, 1
     goto rxquantr143_loop
   rxquantr143_done:
   # rx pass
     rx139_cur."!cursor_pass"(rx139_pos, "hexints")
-    rx139_cur."!cursor_debug"("PASS  ", "hexints", " at pos=", rx139_pos)
+    if_null rx139_debug, debug_161
+    rx139_cur."!cursor_debug"("PASS", "hexints", " at pos=", rx139_pos)
+  debug_161:
     .return (rx139_cur)
   rx139_restart:
 .annotate 'line', 33
-    rx139_cur."!cursor_debug"("NEXT ", "hexints")
+    if_null rx139_debug, debug_162
+    rx139_cur."!cursor_debug"("NEXT", "hexints")
+  debug_162:
   rx139_fail:
     (rx139_rep, rx139_pos, $I10, $P10) = rx139_cur."!mark_fail"(0)
     lt rx139_pos, -1, rx139_done
@@ -2399,14 +2558,16 @@
     jump $I10
   rx139_done:
     rx139_cur."!cursor_fail"()
-    rx139_cur."!cursor_debug"("FAIL  ", "hexints")
+    if_null rx139_debug, debug_163
+    rx139_cur."!cursor_debug"("FAIL", "hexints")
+  debug_163:
     .return (rx139_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("52_1280467467.13603") :method
+.sub "!PREFIX__hexints"  :subid("52_1282323993.58127") :method
 .annotate 'line', 33
     new $P141, "ResizablePMCArray"
     push $P141, ""
@@ -2415,7 +2576,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octint"  :subid("53_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "octint"  :subid("53_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx145_tgt
     .local int rx145_pos
@@ -2423,7 +2584,9 @@
     .local int rx145_eos
     .local int rx145_rep
     .local pmc rx145_cur
+    .local pmc rx145_debug
     (rx145_cur, rx145_pos, rx145_tgt, $I10) = self."!cursor_start"()
+    getattribute rx145_debug, rx145_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx145_cur
     .local pmc match
     .lex "$/", match
@@ -2435,7 +2598,9 @@
     substr rx145_tgt, rx145_tgt, rx145_off
   rx145_start:
     eq $I10, 1, rx145_restart
-    rx145_cur."!cursor_debug"("START ", "octint")
+    if_null rx145_debug, debug_164
+    rx145_cur."!cursor_debug"("START", "octint")
+  debug_164:
     $I10 = self.'from'()
     ne $I10, -1, rxscan148_done
     goto rxscan148_scan
@@ -2453,23 +2618,22 @@
     set_addr $I10, rxquantr149_done
     rx145_cur."!mark_push"(0, -1, $I10)
   rxquantr149_loop:
-  # rx rxquantr150 ** 1..*
-    set_addr $I10, rxquantr150_done
-    rx145_cur."!mark_push"(0, -1, $I10)
-  rxquantr150_loop:
-  # rx enumcharlist negate=0 
-    ge rx145_pos, rx145_eos, rx145_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx145_pos, rx145_off
+    set rx145_rep, 0
+    sub $I12, rx145_eos, rx145_pos
+  rxenumcharlistq150_loop:
+    le $I12, 0, rxenumcharlistq150_done
     substr $S10, rx145_tgt, $I10, 1
     index $I11, "01234567", $S10
-    lt $I11, 0, rx145_fail
-    inc rx145_pos
-    set_addr $I10, rxquantr150_done
-    (rx145_rep) = rx145_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr150_done
-    rx145_cur."!mark_push"(rx145_rep, rx145_pos, $I10)
-    goto rxquantr150_loop
-  rxquantr150_done:
+    lt $I11, 0, rxenumcharlistq150_done
+    inc rx145_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq150_loop
+  rxenumcharlistq150_done:
+    lt rx145_rep, 1, rx145_fail
+    add rx145_pos, rx145_pos, rx145_rep
     set_addr $I10, rxquantr149_done
     (rx145_rep) = rx145_cur."!mark_commit"($I10)
     set_addr $I10, rxquantr149_done
@@ -2478,18 +2642,22 @@
     add $I11, rx145_pos, 1
     gt $I11, rx145_eos, rx145_fail
     sub $I11, rx145_pos, rx145_off
-    substr $S10, rx145_tgt, $I11, 1
-    ne $S10, "_", rx145_fail
+    ord $I11, rx145_tgt, $I11
+    ne $I11, 95, rx145_fail
     add rx145_pos, 1
     goto rxquantr149_loop
   rxquantr149_done:
   # rx pass
     rx145_cur."!cursor_pass"(rx145_pos, "octint")
-    rx145_cur."!cursor_debug"("PASS  ", "octint", " at pos=", rx145_pos)
+    if_null rx145_debug, debug_165
+    rx145_cur."!cursor_debug"("PASS", "octint", " at pos=", rx145_pos)
+  debug_165:
     .return (rx145_cur)
   rx145_restart:
 .annotate 'line', 33
-    rx145_cur."!cursor_debug"("NEXT ", "octint")
+    if_null rx145_debug, debug_166
+    rx145_cur."!cursor_debug"("NEXT", "octint")
+  debug_166:
   rx145_fail:
     (rx145_rep, rx145_pos, $I10, $P10) = rx145_cur."!mark_fail"(0)
     lt rx145_pos, -1, rx145_done
@@ -2497,14 +2665,16 @@
     jump $I10
   rx145_done:
     rx145_cur."!cursor_fail"()
-    rx145_cur."!cursor_debug"("FAIL  ", "octint")
+    if_null rx145_debug, debug_167
+    rx145_cur."!cursor_debug"("FAIL", "octint")
+  debug_167:
     .return (rx145_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octint"  :subid("54_1280467467.13603") :method
+.sub "!PREFIX__octint"  :subid("54_1282323993.58127") :method
 .annotate 'line', 33
     new $P147, "ResizablePMCArray"
     push $P147, ""
@@ -2513,7 +2683,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octints"  :subid("55_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "octints"  :subid("55_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx152_tgt
     .local int rx152_pos
@@ -2521,8 +2691,10 @@
     .local int rx152_eos
     .local int rx152_rep
     .local pmc rx152_cur
+    .local pmc rx152_debug
     (rx152_cur, rx152_pos, rx152_tgt, $I10) = self."!cursor_start"()
     rx152_cur."!cursor_caparray"("octint")
+    getattribute rx152_debug, rx152_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx152_cur
     .local pmc match
     .lex "$/", match
@@ -2534,7 +2706,9 @@
     substr rx152_tgt, rx152_tgt, rx152_off
   rx152_start:
     eq $I10, 1, rx152_restart
-    rx152_cur."!cursor_debug"("START ", "octints")
+    if_null rx152_debug, debug_168
+    rx152_cur."!cursor_debug"("START", "octints")
+  debug_168:
     $I10 = self.'from'()
     ne $I10, -1, rxscan155_done
     goto rxscan155_scan
@@ -2577,18 +2751,22 @@
     add $I11, rx152_pos, 1
     gt $I11, rx152_eos, rx152_fail
     sub $I11, rx152_pos, rx152_off
-    substr $S10, rx152_tgt, $I11, 1
-    ne $S10, ",", rx152_fail
+    ord $I11, rx152_tgt, $I11
+    ne $I11, 44, rx152_fail
     add rx152_pos, 1
     goto rxquantr156_loop
   rxquantr156_done:
   # rx pass
     rx152_cur."!cursor_pass"(rx152_pos, "octints")
-    rx152_cur."!cursor_debug"("PASS  ", "octints", " at pos=", rx152_pos)
+    if_null rx152_debug, debug_169
+    rx152_cur."!cursor_debug"("PASS", "octints", " at pos=", rx152_pos)
+  debug_169:
     .return (rx152_cur)
   rx152_restart:
 .annotate 'line', 33
-    rx152_cur."!cursor_debug"("NEXT ", "octints")
+    if_null rx152_debug, debug_170
+    rx152_cur."!cursor_debug"("NEXT", "octints")
+  debug_170:
   rx152_fail:
     (rx152_rep, rx152_pos, $I10, $P10) = rx152_cur."!mark_fail"(0)
     lt rx152_pos, -1, rx152_done
@@ -2596,14 +2774,16 @@
     jump $I10
   rx152_done:
     rx152_cur."!cursor_fail"()
-    rx152_cur."!cursor_debug"("FAIL  ", "octints")
+    if_null rx152_debug, debug_171
+    rx152_cur."!cursor_debug"("FAIL", "octints")
+  debug_171:
     .return (rx152_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octints"  :subid("56_1280467467.13603") :method
+.sub "!PREFIX__octints"  :subid("56_1282323993.58127") :method
 .annotate 'line', 33
     new $P154, "ResizablePMCArray"
     push $P154, ""
@@ -2612,7 +2792,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binint"  :subid("57_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "binint"  :subid("57_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx158_tgt
     .local int rx158_pos
@@ -2620,7 +2800,9 @@
     .local int rx158_eos
     .local int rx158_rep
     .local pmc rx158_cur
+    .local pmc rx158_debug
     (rx158_cur, rx158_pos, rx158_tgt, $I10) = self."!cursor_start"()
+    getattribute rx158_debug, rx158_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx158_cur
     .local pmc match
     .lex "$/", match
@@ -2632,7 +2814,9 @@
     substr rx158_tgt, rx158_tgt, rx158_off
   rx158_start:
     eq $I10, 1, rx158_restart
-    rx158_cur."!cursor_debug"("START ", "binint")
+    if_null rx158_debug, debug_172
+    rx158_cur."!cursor_debug"("START", "binint")
+  debug_172:
     $I10 = self.'from'()
     ne $I10, -1, rxscan161_done
     goto rxscan161_scan
@@ -2650,23 +2834,22 @@
     set_addr $I10, rxquantr162_done
     rx158_cur."!mark_push"(0, -1, $I10)
   rxquantr162_loop:
-  # rx rxquantr163 ** 1..*
-    set_addr $I10, rxquantr163_done
-    rx158_cur."!mark_push"(0, -1, $I10)
-  rxquantr163_loop:
-  # rx enumcharlist negate=0 
-    ge rx158_pos, rx158_eos, rx158_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx158_pos, rx158_off
+    set rx158_rep, 0
+    sub $I12, rx158_eos, rx158_pos
+  rxenumcharlistq163_loop:
+    le $I12, 0, rxenumcharlistq163_done
     substr $S10, rx158_tgt, $I10, 1
     index $I11, "01", $S10
-    lt $I11, 0, rx158_fail
-    inc rx158_pos
-    set_addr $I10, rxquantr163_done
-    (rx158_rep) = rx158_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr163_done
-    rx158_cur."!mark_push"(rx158_rep, rx158_pos, $I10)
-    goto rxquantr163_loop
-  rxquantr163_done:
+    lt $I11, 0, rxenumcharlistq163_done
+    inc rx158_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq163_loop
+  rxenumcharlistq163_done:
+    lt rx158_rep, 1, rx158_fail
+    add rx158_pos, rx158_pos, rx158_rep
     set_addr $I10, rxquantr162_done
     (rx158_rep) = rx158_cur."!mark_commit"($I10)
     set_addr $I10, rxquantr162_done
@@ -2675,18 +2858,22 @@
     add $I11, rx158_pos, 1
     gt $I11, rx158_eos, rx158_fail
     sub $I11, rx158_pos, rx158_off
-    substr $S10, rx158_tgt, $I11, 1
-    ne $S10, "_", rx158_fail
+    ord $I11, rx158_tgt, $I11
+    ne $I11, 95, rx158_fail
     add rx158_pos, 1
     goto rxquantr162_loop
   rxquantr162_done:
   # rx pass
     rx158_cur."!cursor_pass"(rx158_pos, "binint")
-    rx158_cur."!cursor_debug"("PASS  ", "binint", " at pos=", rx158_pos)
+    if_null rx158_debug, debug_173
+    rx158_cur."!cursor_debug"("PASS", "binint", " at pos=", rx158_pos)
+  debug_173:
     .return (rx158_cur)
   rx158_restart:
 .annotate 'line', 33
-    rx158_cur."!cursor_debug"("NEXT ", "binint")
+    if_null rx158_debug, debug_174
+    rx158_cur."!cursor_debug"("NEXT", "binint")
+  debug_174:
   rx158_fail:
     (rx158_rep, rx158_pos, $I10, $P10) = rx158_cur."!mark_fail"(0)
     lt rx158_pos, -1, rx158_done
@@ -2694,14 +2881,16 @@
     jump $I10
   rx158_done:
     rx158_cur."!cursor_fail"()
-    rx158_cur."!cursor_debug"("FAIL  ", "binint")
+    if_null rx158_debug, debug_175
+    rx158_cur."!cursor_debug"("FAIL", "binint")
+  debug_175:
     .return (rx158_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binint"  :subid("58_1280467467.13603") :method
+.sub "!PREFIX__binint"  :subid("58_1282323993.58127") :method
 .annotate 'line', 33
     new $P160, "ResizablePMCArray"
     push $P160, ""
@@ -2710,7 +2899,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binints"  :subid("59_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "binints"  :subid("59_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx165_tgt
     .local int rx165_pos
@@ -2718,8 +2907,10 @@
     .local int rx165_eos
     .local int rx165_rep
     .local pmc rx165_cur
+    .local pmc rx165_debug
     (rx165_cur, rx165_pos, rx165_tgt, $I10) = self."!cursor_start"()
     rx165_cur."!cursor_caparray"("binint")
+    getattribute rx165_debug, rx165_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx165_cur
     .local pmc match
     .lex "$/", match
@@ -2731,7 +2922,9 @@
     substr rx165_tgt, rx165_tgt, rx165_off
   rx165_start:
     eq $I10, 1, rx165_restart
-    rx165_cur."!cursor_debug"("START ", "binints")
+    if_null rx165_debug, debug_176
+    rx165_cur."!cursor_debug"("START", "binints")
+  debug_176:
     $I10 = self.'from'()
     ne $I10, -1, rxscan168_done
     goto rxscan168_scan
@@ -2774,18 +2967,22 @@
     add $I11, rx165_pos, 1
     gt $I11, rx165_eos, rx165_fail
     sub $I11, rx165_pos, rx165_off
-    substr $S10, rx165_tgt, $I11, 1
-    ne $S10, ",", rx165_fail
+    ord $I11, rx165_tgt, $I11
+    ne $I11, 44, rx165_fail
     add rx165_pos, 1
     goto rxquantr169_loop
   rxquantr169_done:
   # rx pass
     rx165_cur."!cursor_pass"(rx165_pos, "binints")
-    rx165_cur."!cursor_debug"("PASS  ", "binints", " at pos=", rx165_pos)
+    if_null rx165_debug, debug_177
+    rx165_cur."!cursor_debug"("PASS", "binints", " at pos=", rx165_pos)
+  debug_177:
     .return (rx165_cur)
   rx165_restart:
 .annotate 'line', 33
-    rx165_cur."!cursor_debug"("NEXT ", "binints")
+    if_null rx165_debug, debug_178
+    rx165_cur."!cursor_debug"("NEXT", "binints")
+  debug_178:
   rx165_fail:
     (rx165_rep, rx165_pos, $I10, $P10) = rx165_cur."!mark_fail"(0)
     lt rx165_pos, -1, rx165_done
@@ -2793,14 +2990,16 @@
     jump $I10
   rx165_done:
     rx165_cur."!cursor_fail"()
-    rx165_cur."!cursor_debug"("FAIL  ", "binints")
+    if_null rx165_debug, debug_179
+    rx165_cur."!cursor_debug"("FAIL", "binints")
+  debug_179:
     .return (rx165_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binints"  :subid("60_1280467467.13603") :method
+.sub "!PREFIX__binints"  :subid("60_1282323993.58127") :method
 .annotate 'line', 33
     new $P167, "ResizablePMCArray"
     push $P167, ""
@@ -2809,7 +3008,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "integer"  :subid("61_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "integer"  :subid("61_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx171_tgt
     .local int rx171_pos
@@ -2817,7 +3016,9 @@
     .local int rx171_eos
     .local int rx171_rep
     .local pmc rx171_cur
+    .local pmc rx171_debug
     (rx171_cur, rx171_pos, rx171_tgt, $I10) = self."!cursor_start"()
+    getattribute rx171_debug, rx171_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx171_cur
     .local pmc match
     .lex "$/", match
@@ -2829,7 +3030,9 @@
     substr rx171_tgt, rx171_tgt, rx171_off
   rx171_start:
     eq $I10, 1, rx171_restart
-    rx171_cur."!cursor_debug"("START ", "integer")
+    if_null rx171_debug, debug_180
+    rx171_cur."!cursor_debug"("START", "integer")
+  debug_180:
     $I10 = self.'from'()
     ne $I10, -1, rxscan179_done
     goto rxscan179_scan
@@ -2851,8 +3054,8 @@
     add $I11, rx171_pos, 1
     gt $I11, rx171_eos, rx171_fail
     sub $I11, rx171_pos, rx171_off
-    substr $S10, rx171_tgt, $I11, 1
-    ne $S10, "0", rx171_fail
+    ord $I11, rx171_tgt, $I11
+    ne $I11, 48, rx171_fail
     add rx171_pos, 1
   alt181_0:
     set_addr $I10, alt181_1
@@ -2861,8 +3064,8 @@
     add $I11, rx171_pos, 1
     gt $I11, rx171_eos, rx171_fail
     sub $I11, rx171_pos, rx171_off
-    substr $S10, rx171_tgt, $I11, 1
-    ne $S10, "b", rx171_fail
+    ord $I11, rx171_tgt, $I11
+    ne $I11, 98, rx171_fail
     add rx171_pos, 1
   # rx subrule "binint" subtype=capture negate=
     rx171_cur."!cursor_pos"(rx171_pos)
@@ -2880,8 +3083,8 @@
     add $I11, rx171_pos, 1
     gt $I11, rx171_eos, rx171_fail
     sub $I11, rx171_pos, rx171_off
-    substr $S10, rx171_tgt, $I11, 1
-    ne $S10, "o", rx171_fail
+    ord $I11, rx171_tgt, $I11
+    ne $I11, 111, rx171_fail
     add rx171_pos, 1
   # rx subrule "octint" subtype=capture negate=
     rx171_cur."!cursor_pos"(rx171_pos)
@@ -2899,8 +3102,8 @@
     add $I11, rx171_pos, 1
     gt $I11, rx171_eos, rx171_fail
     sub $I11, rx171_pos, rx171_off
-    substr $S10, rx171_tgt, $I11, 1
-    ne $S10, "x", rx171_fail
+    ord $I11, rx171_tgt, $I11
+    ne $I11, 120, rx171_fail
     add rx171_pos, 1
   # rx subrule "hexint" subtype=capture negate=
     rx171_cur."!cursor_pos"(rx171_pos)
@@ -2916,8 +3119,8 @@
     add $I11, rx171_pos, 1
     gt $I11, rx171_eos, rx171_fail
     sub $I11, rx171_pos, rx171_off
-    substr $S10, rx171_tgt, $I11, 1
-    ne $S10, "d", rx171_fail
+    ord $I11, rx171_tgt, $I11
+    ne $I11, 100, rx171_fail
     add rx171_pos, 1
   # rx subrule "decint" subtype=capture negate=
     rx171_cur."!cursor_pos"(rx171_pos)
@@ -2942,11 +3145,15 @@
 .annotate 'line', 60
   # rx pass
     rx171_cur."!cursor_pass"(rx171_pos, "integer")
-    rx171_cur."!cursor_debug"("PASS  ", "integer", " at pos=", rx171_pos)
+    if_null rx171_debug, debug_181
+    rx171_cur."!cursor_debug"("PASS", "integer", " at pos=", rx171_pos)
+  debug_181:
     .return (rx171_cur)
   rx171_restart:
 .annotate 'line', 33
-    rx171_cur."!cursor_debug"("NEXT ", "integer")
+    if_null rx171_debug, debug_182
+    rx171_cur."!cursor_debug"("NEXT", "integer")
+  debug_182:
   rx171_fail:
     (rx171_rep, rx171_pos, $I10, $P10) = rx171_cur."!mark_fail"(0)
     lt rx171_pos, -1, rx171_done
@@ -2954,14 +3161,16 @@
     jump $I10
   rx171_done:
     rx171_cur."!cursor_fail"()
-    rx171_cur."!cursor_debug"("FAIL  ", "integer")
+    if_null rx171_debug, debug_183
+    rx171_cur."!cursor_debug"("FAIL", "integer")
+  debug_183:
     .return (rx171_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__integer"  :subid("62_1280467467.13603") :method
+.sub "!PREFIX__integer"  :subid("62_1282323993.58127") :method
 .annotate 'line', 33
     $P173 = self."!PREFIX__!subrule"("decint", "")
     $P174 = self."!PREFIX__!subrule"("decint", "0d")
@@ -2979,7 +3188,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "dec_number"  :subid("63_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "dec_number"  :subid("63_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx183_tgt
     .local int rx183_pos
@@ -2987,8 +3196,10 @@
     .local int rx183_eos
     .local int rx183_rep
     .local pmc rx183_cur
+    .local pmc rx183_debug
     (rx183_cur, rx183_pos, rx183_tgt, $I10) = self."!cursor_start"()
     rx183_cur."!cursor_caparray"("escale")
+    getattribute rx183_debug, rx183_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx183_cur
     .local pmc match
     .lex "$/", match
@@ -3000,7 +3211,9 @@
     substr rx183_tgt, rx183_tgt, rx183_off
   rx183_start:
     eq $I10, 1, rx183_restart
-    rx183_cur."!cursor_debug"("START ", "dec_number")
+    if_null rx183_debug, debug_184
+    rx183_cur."!cursor_debug"("START", "dec_number")
+  debug_184:
     $I10 = self.'from'()
     ne $I10, -1, rxscan186_done
     goto rxscan186_scan
@@ -3025,8 +3238,8 @@
     add $I11, rx183_pos, 1
     gt $I11, rx183_eos, rx183_fail
     sub $I11, rx183_pos, rx183_off
-    substr $S10, rx183_tgt, $I11, 1
-    ne $S10, ".", rx183_fail
+    ord $I11, rx183_tgt, $I11
+    ne $I11, 46, rx183_fail
     add rx183_pos, 1
   # rx charclass_q d r 1..-1
     sub $I10, rx183_pos, rx183_off
@@ -3083,8 +3296,8 @@
     add $I11, rx183_pos, 1
     gt $I11, rx183_eos, rx183_fail
     sub $I11, rx183_pos, rx183_off
-    substr $S10, rx183_tgt, $I11, 1
-    ne $S10, ".", rx183_fail
+    ord $I11, rx183_tgt, $I11
+    ne $I11, 46, rx183_fail
     add rx183_pos, 1
   # rx charclass_q d r 1..-1
     sub $I10, rx183_pos, rx183_off
@@ -3157,11 +3370,15 @@
 .annotate 'line', 71
   # rx pass
     rx183_cur."!cursor_pass"(rx183_pos, "dec_number")
-    rx183_cur."!cursor_debug"("PASS  ", "dec_number", " at pos=", rx183_pos)
+    if_null rx183_debug, debug_185
+    rx183_cur."!cursor_debug"("PASS", "dec_number", " at pos=", rx183_pos)
+  debug_185:
     .return (rx183_cur)
   rx183_restart:
 .annotate 'line', 33
-    rx183_cur."!cursor_debug"("NEXT ", "dec_number")
+    if_null rx183_debug, debug_186
+    rx183_cur."!cursor_debug"("NEXT", "dec_number")
+  debug_186:
   rx183_fail:
     (rx183_rep, rx183_pos, $I10, $P10) = rx183_cur."!mark_fail"(0)
     lt rx183_pos, -1, rx183_done
@@ -3169,14 +3386,16 @@
     jump $I10
   rx183_done:
     rx183_cur."!cursor_fail"()
-    rx183_cur."!cursor_debug"("FAIL  ", "dec_number")
+    if_null rx183_debug, debug_187
+    rx183_cur."!cursor_debug"("FAIL", "dec_number")
+  debug_187:
     .return (rx183_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__dec_number"  :subid("64_1280467467.13603") :method
+.sub "!PREFIX__dec_number"  :subid("64_1282323993.58127") :method
 .annotate 'line', 33
     new $P185, "ResizablePMCArray"
     push $P185, ""
@@ -3187,7 +3406,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "escale"  :subid("65_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "escale"  :subid("65_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx196_tgt
     .local int rx196_pos
@@ -3195,7 +3414,9 @@
     .local int rx196_eos
     .local int rx196_rep
     .local pmc rx196_cur
+    .local pmc rx196_debug
     (rx196_cur, rx196_pos, rx196_tgt, $I10) = self."!cursor_start"()
+    getattribute rx196_debug, rx196_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx196_cur
     .local pmc match
     .lex "$/", match
@@ -3207,7 +3428,9 @@
     substr rx196_tgt, rx196_tgt, rx196_off
   rx196_start:
     eq $I10, 1, rx196_restart
-    rx196_cur."!cursor_debug"("START ", "escale")
+    if_null rx196_debug, debug_188
+    rx196_cur."!cursor_debug"("START", "escale")
+  debug_188:
     $I10 = self.'from'()
     ne $I10, -1, rxscan199_done
     goto rxscan199_scan
@@ -3228,20 +3451,20 @@
     index $I11, "Ee", $S10
     lt $I11, 0, rx196_fail
     inc rx196_pos
-  # rx rxquantr200 ** 0..1
-    set_addr $I10, rxquantr200_done
-    rx196_cur."!mark_push"(0, rx196_pos, $I10)
-  rxquantr200_loop:
-  # rx enumcharlist negate=0 
-    ge rx196_pos, rx196_eos, rx196_fail
+  # rx enumcharlist_q negate=0  r 0..1
     sub $I10, rx196_pos, rx196_off
+    set rx196_rep, 0
+    sub $I12, rx196_eos, rx196_pos
+    le $I12, 1, rxenumcharlistq200_loop
+    set $I12, 1
+  rxenumcharlistq200_loop:
+    le $I12, 0, rxenumcharlistq200_done
     substr $S10, rx196_tgt, $I10, 1
     index $I11, "+-", $S10
-    lt $I11, 0, rx196_fail
-    inc rx196_pos
-    set_addr $I10, rxquantr200_done
-    (rx196_rep) = rx196_cur."!mark_commit"($I10)
-  rxquantr200_done:
+    lt $I11, 0, rxenumcharlistq200_done
+    inc rx196_rep
+  rxenumcharlistq200_done:
+    add rx196_pos, rx196_pos, rx196_rep
   # rx charclass_q d r 1..-1
     sub $I10, rx196_pos, rx196_off
     find_not_cclass $I11, 8, rx196_tgt, $I10, rx196_eos
@@ -3250,11 +3473,15 @@
     add rx196_pos, rx196_off, $I11
   # rx pass
     rx196_cur."!cursor_pass"(rx196_pos, "escale")
-    rx196_cur."!cursor_debug"("PASS  ", "escale", " at pos=", rx196_pos)
+    if_null rx196_debug, debug_189
+    rx196_cur."!cursor_debug"("PASS", "escale", " at pos=", rx196_pos)
+  debug_189:
     .return (rx196_cur)
   rx196_restart:
 .annotate 'line', 33
-    rx196_cur."!cursor_debug"("NEXT ", "escale")
+    if_null rx196_debug, debug_190
+    rx196_cur."!cursor_debug"("NEXT", "escale")
+  debug_190:
   rx196_fail:
     (rx196_rep, rx196_pos, $I10, $P10) = rx196_cur."!mark_fail"(0)
     lt rx196_pos, -1, rx196_done
@@ -3262,14 +3489,16 @@
     jump $I10
   rx196_done:
     rx196_cur."!cursor_fail"()
-    rx196_cur."!cursor_debug"("FAIL  ", "escale")
+    if_null rx196_debug, debug_191
+    rx196_cur."!cursor_debug"("FAIL", "escale")
+  debug_191:
     .return (rx196_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__escale"  :subid("66_1280467467.13603") :method
+.sub "!PREFIX__escale"  :subid("66_1282323993.58127") :method
 .annotate 'line', 33
     new $P198, "ResizablePMCArray"
     push $P198, "e"
@@ -3279,7 +3508,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape"  :subid("67_1280467467.13603") :method
+.sub "quote_escape"  :subid("67_1282323993.58127") :method
 .annotate 'line', 79
     $P202 = self."!protoregex"("quote_escape")
     .return ($P202)
@@ -3287,7 +3516,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape"  :subid("68_1280467467.13603") :method
+.sub "!PREFIX__quote_escape"  :subid("68_1282323993.58127") :method
 .annotate 'line', 79
     $P204 = self."!PREFIX__!protoregex"("quote_escape")
     .return ($P204)
@@ -3295,7 +3524,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<backslash>"  :subid("69_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<backslash>"  :subid("69_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx206_tgt
     .local int rx206_pos
@@ -3303,7 +3532,9 @@
     .local int rx206_eos
     .local int rx206_rep
     .local pmc rx206_cur
+    .local pmc rx206_debug
     (rx206_cur, rx206_pos, rx206_tgt, $I10) = self."!cursor_start"()
+    getattribute rx206_debug, rx206_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx206_cur
     .local pmc match
     .lex "$/", match
@@ -3315,7 +3546,9 @@
     substr rx206_tgt, rx206_tgt, rx206_off
   rx206_start:
     eq $I10, 1, rx206_restart
-    rx206_cur."!cursor_debug"("START ", "quote_escape:sym<backslash>")
+    if_null rx206_debug, debug_192
+    rx206_cur."!cursor_debug"("START", "quote_escape:sym<backslash>")
+  debug_192:
     $I10 = self.'from'()
     ne $I10, -1, rxscan209_done
     goto rxscan209_scan
@@ -3342,11 +3575,15 @@
     unless $P10, rx206_fail
   # rx pass
     rx206_cur."!cursor_pass"(rx206_pos, "quote_escape:sym<backslash>")
-    rx206_cur."!cursor_debug"("PASS  ", "quote_escape:sym<backslash>", " at pos=", rx206_pos)
+    if_null rx206_debug, debug_193
+    rx206_cur."!cursor_debug"("PASS", "quote_escape:sym<backslash>", " at pos=", rx206_pos)
+  debug_193:
     .return (rx206_cur)
   rx206_restart:
 .annotate 'line', 33
-    rx206_cur."!cursor_debug"("NEXT ", "quote_escape:sym<backslash>")
+    if_null rx206_debug, debug_194
+    rx206_cur."!cursor_debug"("NEXT", "quote_escape:sym<backslash>")
+  debug_194:
   rx206_fail:
     (rx206_rep, rx206_pos, $I10, $P10) = rx206_cur."!mark_fail"(0)
     lt rx206_pos, -1, rx206_done
@@ -3354,14 +3591,16 @@
     jump $I10
   rx206_done:
     rx206_cur."!cursor_fail"()
-    rx206_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<backslash>")
+    if_null rx206_debug, debug_195
+    rx206_cur."!cursor_debug"("FAIL", "quote_escape:sym<backslash>")
+  debug_195:
     .return (rx206_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1282323993.58127") :method
 .annotate 'line', 33
     new $P208, "ResizablePMCArray"
     push $P208, "\\\\"
@@ -3370,7 +3609,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<stopper>"  :subid("71_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<stopper>"  :subid("71_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx211_tgt
     .local int rx211_pos
@@ -3378,7 +3617,9 @@
     .local int rx211_eos
     .local int rx211_rep
     .local pmc rx211_cur
+    .local pmc rx211_debug
     (rx211_cur, rx211_pos, rx211_tgt, $I10) = self."!cursor_start"()
+    getattribute rx211_debug, rx211_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx211_cur
     .local pmc match
     .lex "$/", match
@@ -3390,7 +3631,9 @@
     substr rx211_tgt, rx211_tgt, rx211_off
   rx211_start:
     eq $I10, 1, rx211_restart
-    rx211_cur."!cursor_debug"("START ", "quote_escape:sym<stopper>")
+    if_null rx211_debug, debug_196
+    rx211_cur."!cursor_debug"("START", "quote_escape:sym<stopper>")
+  debug_196:
     $I10 = self.'from'()
     ne $I10, -1, rxscan214_done
     goto rxscan214_scan
@@ -3408,8 +3651,8 @@
     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
+    ord $I11, rx211_tgt, $I11
+    ne $I11, 92, rx211_fail
     add rx211_pos, 1
   # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx211_cur."!cursor_pos"(rx211_pos)
@@ -3424,11 +3667,15 @@
     rx211_pos = $P10."pos"()
   # rx pass
     rx211_cur."!cursor_pass"(rx211_pos, "quote_escape:sym<stopper>")
-    rx211_cur."!cursor_debug"("PASS  ", "quote_escape:sym<stopper>", " at pos=", rx211_pos)
+    if_null rx211_debug, debug_197
+    rx211_cur."!cursor_debug"("PASS", "quote_escape:sym<stopper>", " at pos=", rx211_pos)
+  debug_197:
     .return (rx211_cur)
   rx211_restart:
 .annotate 'line', 33
-    rx211_cur."!cursor_debug"("NEXT ", "quote_escape:sym<stopper>")
+    if_null rx211_debug, debug_198
+    rx211_cur."!cursor_debug"("NEXT", "quote_escape:sym<stopper>")
+  debug_198:
   rx211_fail:
     (rx211_rep, rx211_pos, $I10, $P10) = rx211_cur."!mark_fail"(0)
     lt rx211_pos, -1, rx211_done
@@ -3436,14 +3683,16 @@
     jump $I10
   rx211_done:
     rx211_cur."!cursor_fail"()
-    rx211_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<stopper>")
+    if_null rx211_debug, debug_199
+    rx211_cur."!cursor_debug"("FAIL", "quote_escape:sym<stopper>")
+  debug_199:
     .return (rx211_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1282323993.58127") :method
 .annotate 'line', 33
     new $P213, "ResizablePMCArray"
     push $P213, "\\"
@@ -3452,7 +3701,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<bs>"  :subid("73_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<bs>"  :subid("73_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx216_tgt
     .local int rx216_pos
@@ -3460,7 +3709,9 @@
     .local int rx216_eos
     .local int rx216_rep
     .local pmc rx216_cur
+    .local pmc rx216_debug
     (rx216_cur, rx216_pos, rx216_tgt, $I10) = self."!cursor_start"()
+    getattribute rx216_debug, rx216_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx216_cur
     .local pmc match
     .lex "$/", match
@@ -3472,7 +3723,9 @@
     substr rx216_tgt, rx216_tgt, rx216_off
   rx216_start:
     eq $I10, 1, rx216_restart
-    rx216_cur."!cursor_debug"("START ", "quote_escape:sym<bs>")
+    if_null rx216_debug, debug_200
+    rx216_cur."!cursor_debug"("START", "quote_escape:sym<bs>")
+  debug_200:
     $I10 = self.'from'()
     ne $I10, -1, rxscan219_done
     goto rxscan219_scan
@@ -3499,11 +3752,15 @@
     unless $P10, rx216_fail
   # rx pass
     rx216_cur."!cursor_pass"(rx216_pos, "quote_escape:sym<bs>")
-    rx216_cur."!cursor_debug"("PASS  ", "quote_escape:sym<bs>", " at pos=", rx216_pos)
+    if_null rx216_debug, debug_201
+    rx216_cur."!cursor_debug"("PASS", "quote_escape:sym<bs>", " at pos=", rx216_pos)
+  debug_201:
     .return (rx216_cur)
   rx216_restart:
 .annotate 'line', 33
-    rx216_cur."!cursor_debug"("NEXT ", "quote_escape:sym<bs>")
+    if_null rx216_debug, debug_202
+    rx216_cur."!cursor_debug"("NEXT", "quote_escape:sym<bs>")
+  debug_202:
   rx216_fail:
     (rx216_rep, rx216_pos, $I10, $P10) = rx216_cur."!mark_fail"(0)
     lt rx216_pos, -1, rx216_done
@@ -3511,14 +3768,16 @@
     jump $I10
   rx216_done:
     rx216_cur."!cursor_fail"()
-    rx216_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<bs>")
+    if_null rx216_debug, debug_203
+    rx216_cur."!cursor_debug"("FAIL", "quote_escape:sym<bs>")
+  debug_203:
     .return (rx216_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1282323993.58127") :method
 .annotate 'line', 33
     new $P218, "ResizablePMCArray"
     push $P218, "\\b"
@@ -3527,7 +3786,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<nl>"  :subid("75_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<nl>"  :subid("75_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx221_tgt
     .local int rx221_pos
@@ -3535,7 +3794,9 @@
     .local int rx221_eos
     .local int rx221_rep
     .local pmc rx221_cur
+    .local pmc rx221_debug
     (rx221_cur, rx221_pos, rx221_tgt, $I10) = self."!cursor_start"()
+    getattribute rx221_debug, rx221_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx221_cur
     .local pmc match
     .lex "$/", match
@@ -3547,7 +3808,9 @@
     substr rx221_tgt, rx221_tgt, rx221_off
   rx221_start:
     eq $I10, 1, rx221_restart
-    rx221_cur."!cursor_debug"("START ", "quote_escape:sym<nl>")
+    if_null rx221_debug, debug_204
+    rx221_cur."!cursor_debug"("START", "quote_escape:sym<nl>")
+  debug_204:
     $I10 = self.'from'()
     ne $I10, -1, rxscan224_done
     goto rxscan224_scan
@@ -3574,11 +3837,15 @@
     unless $P10, rx221_fail
   # rx pass
     rx221_cur."!cursor_pass"(rx221_pos, "quote_escape:sym<nl>")
-    rx221_cur."!cursor_debug"("PASS  ", "quote_escape:sym<nl>", " at pos=", rx221_pos)
+    if_null rx221_debug, debug_205
+    rx221_cur."!cursor_debug"("PASS", "quote_escape:sym<nl>", " at pos=", rx221_pos)
+  debug_205:
     .return (rx221_cur)
   rx221_restart:
 .annotate 'line', 33
-    rx221_cur."!cursor_debug"("NEXT ", "quote_escape:sym<nl>")
+    if_null rx221_debug, debug_206
+    rx221_cur."!cursor_debug"("NEXT", "quote_escape:sym<nl>")
+  debug_206:
   rx221_fail:
     (rx221_rep, rx221_pos, $I10, $P10) = rx221_cur."!mark_fail"(0)
     lt rx221_pos, -1, rx221_done
@@ -3586,14 +3853,16 @@
     jump $I10
   rx221_done:
     rx221_cur."!cursor_fail"()
-    rx221_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<nl>")
+    if_null rx221_debug, debug_207
+    rx221_cur."!cursor_debug"("FAIL", "quote_escape:sym<nl>")
+  debug_207:
     .return (rx221_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1282323993.58127") :method
 .annotate 'line', 33
     new $P223, "ResizablePMCArray"
     push $P223, "\\n"
@@ -3602,7 +3871,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<cr>"  :subid("77_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<cr>"  :subid("77_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx226_tgt
     .local int rx226_pos
@@ -3610,7 +3879,9 @@
     .local int rx226_eos
     .local int rx226_rep
     .local pmc rx226_cur
+    .local pmc rx226_debug
     (rx226_cur, rx226_pos, rx226_tgt, $I10) = self."!cursor_start"()
+    getattribute rx226_debug, rx226_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx226_cur
     .local pmc match
     .lex "$/", match
@@ -3622,7 +3893,9 @@
     substr rx226_tgt, rx226_tgt, rx226_off
   rx226_start:
     eq $I10, 1, rx226_restart
-    rx226_cur."!cursor_debug"("START ", "quote_escape:sym<cr>")
+    if_null rx226_debug, debug_208
+    rx226_cur."!cursor_debug"("START", "quote_escape:sym<cr>")
+  debug_208:
     $I10 = self.'from'()
     ne $I10, -1, rxscan229_done
     goto rxscan229_scan
@@ -3649,11 +3922,15 @@
     unless $P10, rx226_fail
   # rx pass
     rx226_cur."!cursor_pass"(rx226_pos, "quote_escape:sym<cr>")
-    rx226_cur."!cursor_debug"("PASS  ", "quote_escape:sym<cr>", " at pos=", rx226_pos)
+    if_null rx226_debug, debug_209
+    rx226_cur."!cursor_debug"("PASS", "quote_escape:sym<cr>", " at pos=", rx226_pos)
+  debug_209:
     .return (rx226_cur)
   rx226_restart:
 .annotate 'line', 33
-    rx226_cur."!cursor_debug"("NEXT ", "quote_escape:sym<cr>")
+    if_null rx226_debug, debug_210
+    rx226_cur."!cursor_debug"("NEXT", "quote_escape:sym<cr>")
+  debug_210:
   rx226_fail:
     (rx226_rep, rx226_pos, $I10, $P10) = rx226_cur."!mark_fail"(0)
     lt rx226_pos, -1, rx226_done
@@ -3661,14 +3938,16 @@
     jump $I10
   rx226_done:
     rx226_cur."!cursor_fail"()
-    rx226_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<cr>")
+    if_null rx226_debug, debug_211
+    rx226_cur."!cursor_debug"("FAIL", "quote_escape:sym<cr>")
+  debug_211:
     .return (rx226_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1282323993.58127") :method
 .annotate 'line', 33
     new $P228, "ResizablePMCArray"
     push $P228, "\\r"
@@ -3677,7 +3956,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<tab>"  :subid("79_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<tab>"  :subid("79_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx231_tgt
     .local int rx231_pos
@@ -3685,7 +3964,9 @@
     .local int rx231_eos
     .local int rx231_rep
     .local pmc rx231_cur
+    .local pmc rx231_debug
     (rx231_cur, rx231_pos, rx231_tgt, $I10) = self."!cursor_start"()
+    getattribute rx231_debug, rx231_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx231_cur
     .local pmc match
     .lex "$/", match
@@ -3697,7 +3978,9 @@
     substr rx231_tgt, rx231_tgt, rx231_off
   rx231_start:
     eq $I10, 1, rx231_restart
-    rx231_cur."!cursor_debug"("START ", "quote_escape:sym<tab>")
+    if_null rx231_debug, debug_212
+    rx231_cur."!cursor_debug"("START", "quote_escape:sym<tab>")
+  debug_212:
     $I10 = self.'from'()
     ne $I10, -1, rxscan234_done
     goto rxscan234_scan
@@ -3724,11 +4007,15 @@
     unless $P10, rx231_fail
   # rx pass
     rx231_cur."!cursor_pass"(rx231_pos, "quote_escape:sym<tab>")
-    rx231_cur."!cursor_debug"("PASS  ", "quote_escape:sym<tab>", " at pos=", rx231_pos)
+    if_null rx231_debug, debug_213
+    rx231_cur."!cursor_debug"("PASS", "quote_escape:sym<tab>", " at pos=", rx231_pos)
+  debug_213:
     .return (rx231_cur)
   rx231_restart:
 .annotate 'line', 33
-    rx231_cur."!cursor_debug"("NEXT ", "quote_escape:sym<tab>")
+    if_null rx231_debug, debug_214
+    rx231_cur."!cursor_debug"("NEXT", "quote_escape:sym<tab>")
+  debug_214:
   rx231_fail:
     (rx231_rep, rx231_pos, $I10, $P10) = rx231_cur."!mark_fail"(0)
     lt rx231_pos, -1, rx231_done
@@ -3736,14 +4023,16 @@
     jump $I10
   rx231_done:
     rx231_cur."!cursor_fail"()
-    rx231_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<tab>")
+    if_null rx231_debug, debug_215
+    rx231_cur."!cursor_debug"("FAIL", "quote_escape:sym<tab>")
+  debug_215:
     .return (rx231_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1282323993.58127") :method
 .annotate 'line', 33
     new $P233, "ResizablePMCArray"
     push $P233, "\\t"
@@ -3752,7 +4041,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<ff>"  :subid("81_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<ff>"  :subid("81_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx236_tgt
     .local int rx236_pos
@@ -3760,7 +4049,9 @@
     .local int rx236_eos
     .local int rx236_rep
     .local pmc rx236_cur
+    .local pmc rx236_debug
     (rx236_cur, rx236_pos, rx236_tgt, $I10) = self."!cursor_start"()
+    getattribute rx236_debug, rx236_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx236_cur
     .local pmc match
     .lex "$/", match
@@ -3772,7 +4063,9 @@
     substr rx236_tgt, rx236_tgt, rx236_off
   rx236_start:
     eq $I10, 1, rx236_restart
-    rx236_cur."!cursor_debug"("START ", "quote_escape:sym<ff>")
+    if_null rx236_debug, debug_216
+    rx236_cur."!cursor_debug"("START", "quote_escape:sym<ff>")
+  debug_216:
     $I10 = self.'from'()
     ne $I10, -1, rxscan239_done
     goto rxscan239_scan
@@ -3799,11 +4092,15 @@
     unless $P10, rx236_fail
   # rx pass
     rx236_cur."!cursor_pass"(rx236_pos, "quote_escape:sym<ff>")
-    rx236_cur."!cursor_debug"("PASS  ", "quote_escape:sym<ff>", " at pos=", rx236_pos)
+    if_null rx236_debug, debug_217
+    rx236_cur."!cursor_debug"("PASS", "quote_escape:sym<ff>", " at pos=", rx236_pos)
+  debug_217:
     .return (rx236_cur)
   rx236_restart:
 .annotate 'line', 33
-    rx236_cur."!cursor_debug"("NEXT ", "quote_escape:sym<ff>")
+    if_null rx236_debug, debug_218
+    rx236_cur."!cursor_debug"("NEXT", "quote_escape:sym<ff>")
+  debug_218:
   rx236_fail:
     (rx236_rep, rx236_pos, $I10, $P10) = rx236_cur."!mark_fail"(0)
     lt rx236_pos, -1, rx236_done
@@ -3811,14 +4108,16 @@
     jump $I10
   rx236_done:
     rx236_cur."!cursor_fail"()
-    rx236_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<ff>")
+    if_null rx236_debug, debug_219
+    rx236_cur."!cursor_debug"("FAIL", "quote_escape:sym<ff>")
+  debug_219:
     .return (rx236_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<ff>"  :subid("82_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<ff>"  :subid("82_1282323993.58127") :method
 .annotate 'line', 33
     new $P238, "ResizablePMCArray"
     push $P238, "\\f"
@@ -3827,7 +4126,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<esc>"  :subid("83_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<esc>"  :subid("83_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx241_tgt
     .local int rx241_pos
@@ -3835,7 +4134,9 @@
     .local int rx241_eos
     .local int rx241_rep
     .local pmc rx241_cur
+    .local pmc rx241_debug
     (rx241_cur, rx241_pos, rx241_tgt, $I10) = self."!cursor_start"()
+    getattribute rx241_debug, rx241_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx241_cur
     .local pmc match
     .lex "$/", match
@@ -3847,7 +4148,9 @@
     substr rx241_tgt, rx241_tgt, rx241_off
   rx241_start:
     eq $I10, 1, rx241_restart
-    rx241_cur."!cursor_debug"("START ", "quote_escape:sym<esc>")
+    if_null rx241_debug, debug_220
+    rx241_cur."!cursor_debug"("START", "quote_escape:sym<esc>")
+  debug_220:
     $I10 = self.'from'()
     ne $I10, -1, rxscan244_done
     goto rxscan244_scan
@@ -3874,11 +4177,15 @@
     unless $P10, rx241_fail
   # rx pass
     rx241_cur."!cursor_pass"(rx241_pos, "quote_escape:sym<esc>")
-    rx241_cur."!cursor_debug"("PASS  ", "quote_escape:sym<esc>", " at pos=", rx241_pos)
+    if_null rx241_debug, debug_221
+    rx241_cur."!cursor_debug"("PASS", "quote_escape:sym<esc>", " at pos=", rx241_pos)
+  debug_221:
     .return (rx241_cur)
   rx241_restart:
 .annotate 'line', 33
-    rx241_cur."!cursor_debug"("NEXT ", "quote_escape:sym<esc>")
+    if_null rx241_debug, debug_222
+    rx241_cur."!cursor_debug"("NEXT", "quote_escape:sym<esc>")
+  debug_222:
   rx241_fail:
     (rx241_rep, rx241_pos, $I10, $P10) = rx241_cur."!mark_fail"(0)
     lt rx241_pos, -1, rx241_done
@@ -3886,14 +4193,16 @@
     jump $I10
   rx241_done:
     rx241_cur."!cursor_fail"()
-    rx241_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<esc>")
+    if_null rx241_debug, debug_223
+    rx241_cur."!cursor_debug"("FAIL", "quote_escape:sym<esc>")
+  debug_223:
     .return (rx241_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<esc>"  :subid("84_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<esc>"  :subid("84_1282323993.58127") :method
 .annotate 'line', 33
     new $P243, "ResizablePMCArray"
     push $P243, "\\e"
@@ -3902,7 +4211,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<hex>"  :subid("85_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<hex>"  :subid("85_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx246_tgt
     .local int rx246_pos
@@ -3910,7 +4219,9 @@
     .local int rx246_eos
     .local int rx246_rep
     .local pmc rx246_cur
+    .local pmc rx246_debug
     (rx246_cur, rx246_pos, rx246_tgt, $I10) = self."!cursor_start"()
+    getattribute rx246_debug, rx246_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx246_cur
     .local pmc match
     .lex "$/", match
@@ -3922,7 +4233,9 @@
     substr rx246_tgt, rx246_tgt, rx246_off
   rx246_start:
     eq $I10, 1, rx246_restart
-    rx246_cur."!cursor_debug"("START ", "quote_escape:sym<hex>")
+    if_null rx246_debug, debug_224
+    rx246_cur."!cursor_debug"("START", "quote_escape:sym<hex>")
+  debug_224:
     $I10 = self.'from'()
     ne $I10, -1, rxscan249_done
     goto rxscan249_scan
@@ -3964,8 +4277,8 @@
     add $I11, rx246_pos, 1
     gt $I11, rx246_eos, rx246_fail
     sub $I11, rx246_pos, rx246_off
-    substr $S10, rx246_tgt, $I11, 1
-    ne $S10, "[", rx246_fail
+    ord $I11, rx246_tgt, $I11
+    ne $I11, 91, rx246_fail
     add rx246_pos, 1
   # rx subrule "hexints" subtype=capture negate=
     rx246_cur."!cursor_pos"(rx246_pos)
@@ -3978,18 +4291,22 @@
     add $I11, rx246_pos, 1
     gt $I11, rx246_eos, rx246_fail
     sub $I11, rx246_pos, rx246_off
-    substr $S10, rx246_tgt, $I11, 1
-    ne $S10, "]", rx246_fail
+    ord $I11, rx246_tgt, $I11
+    ne $I11, 93, rx246_fail
     add rx246_pos, 1
   alt250_end:
 .annotate 'line', 89
   # rx pass
     rx246_cur."!cursor_pass"(rx246_pos, "quote_escape:sym<hex>")
-    rx246_cur."!cursor_debug"("PASS  ", "quote_escape:sym<hex>", " at pos=", rx246_pos)
+    if_null rx246_debug, debug_225
+    rx246_cur."!cursor_debug"("PASS", "quote_escape:sym<hex>", " at pos=", rx246_pos)
+  debug_225:
     .return (rx246_cur)
   rx246_restart:
 .annotate 'line', 33
-    rx246_cur."!cursor_debug"("NEXT ", "quote_escape:sym<hex>")
+    if_null rx246_debug, debug_226
+    rx246_cur."!cursor_debug"("NEXT", "quote_escape:sym<hex>")
+  debug_226:
   rx246_fail:
     (rx246_rep, rx246_pos, $I10, $P10) = rx246_cur."!mark_fail"(0)
     lt rx246_pos, -1, rx246_done
@@ -3997,14 +4314,16 @@
     jump $I10
   rx246_done:
     rx246_cur."!cursor_fail"()
-    rx246_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<hex>")
+    if_null rx246_debug, debug_227
+    rx246_cur."!cursor_debug"("FAIL", "quote_escape:sym<hex>")
+  debug_227:
     .return (rx246_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<hex>"  :subid("86_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<hex>"  :subid("86_1282323993.58127") :method
 .annotate 'line', 33
     new $P248, "ResizablePMCArray"
     push $P248, unicode:"\\x"
@@ -4013,7 +4332,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<oct>"  :subid("87_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<oct>"  :subid("87_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx252_tgt
     .local int rx252_pos
@@ -4021,7 +4340,9 @@
     .local int rx252_eos
     .local int rx252_rep
     .local pmc rx252_cur
+    .local pmc rx252_debug
     (rx252_cur, rx252_pos, rx252_tgt, $I10) = self."!cursor_start"()
+    getattribute rx252_debug, rx252_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx252_cur
     .local pmc match
     .lex "$/", match
@@ -4033,7 +4354,9 @@
     substr rx252_tgt, rx252_tgt, rx252_off
   rx252_start:
     eq $I10, 1, rx252_restart
-    rx252_cur."!cursor_debug"("START ", "quote_escape:sym<oct>")
+    if_null rx252_debug, debug_228
+    rx252_cur."!cursor_debug"("START", "quote_escape:sym<oct>")
+  debug_228:
     $I10 = self.'from'()
     ne $I10, -1, rxscan255_done
     goto rxscan255_scan
@@ -4075,8 +4398,8 @@
     add $I11, rx252_pos, 1
     gt $I11, rx252_eos, rx252_fail
     sub $I11, rx252_pos, rx252_off
-    substr $S10, rx252_tgt, $I11, 1
-    ne $S10, "[", rx252_fail
+    ord $I11, rx252_tgt, $I11
+    ne $I11, 91, rx252_fail
     add rx252_pos, 1
   # rx subrule "octints" subtype=capture negate=
     rx252_cur."!cursor_pos"(rx252_pos)
@@ -4089,18 +4412,22 @@
     add $I11, rx252_pos, 1
     gt $I11, rx252_eos, rx252_fail
     sub $I11, rx252_pos, rx252_off
-    substr $S10, rx252_tgt, $I11, 1
-    ne $S10, "]", rx252_fail
+    ord $I11, rx252_tgt, $I11
+    ne $I11, 93, rx252_fail
     add rx252_pos, 1
   alt256_end:
 .annotate 'line', 93
   # rx pass
     rx252_cur."!cursor_pass"(rx252_pos, "quote_escape:sym<oct>")
-    rx252_cur."!cursor_debug"("PASS  ", "quote_escape:sym<oct>", " at pos=", rx252_pos)
+    if_null rx252_debug, debug_229
+    rx252_cur."!cursor_debug"("PASS", "quote_escape:sym<oct>", " at pos=", rx252_pos)
+  debug_229:
     .return (rx252_cur)
   rx252_restart:
 .annotate 'line', 33
-    rx252_cur."!cursor_debug"("NEXT ", "quote_escape:sym<oct>")
+    if_null rx252_debug, debug_230
+    rx252_cur."!cursor_debug"("NEXT", "quote_escape:sym<oct>")
+  debug_230:
   rx252_fail:
     (rx252_rep, rx252_pos, $I10, $P10) = rx252_cur."!mark_fail"(0)
     lt rx252_pos, -1, rx252_done
@@ -4108,14 +4435,16 @@
     jump $I10
   rx252_done:
     rx252_cur."!cursor_fail"()
-    rx252_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<oct>")
+    if_null rx252_debug, debug_231
+    rx252_cur."!cursor_debug"("FAIL", "quote_escape:sym<oct>")
+  debug_231:
     .return (rx252_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<oct>"  :subid("88_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<oct>"  :subid("88_1282323993.58127") :method
 .annotate 'line', 33
     new $P254, "ResizablePMCArray"
     push $P254, "\\o"
@@ -4124,7 +4453,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<chr>"  :subid("89_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<chr>"  :subid("89_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx258_tgt
     .local int rx258_pos
@@ -4132,7 +4461,9 @@
     .local int rx258_eos
     .local int rx258_rep
     .local pmc rx258_cur
+    .local pmc rx258_debug
     (rx258_cur, rx258_pos, rx258_tgt, $I10) = self."!cursor_start"()
+    getattribute rx258_debug, rx258_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx258_cur
     .local pmc match
     .lex "$/", match
@@ -4144,7 +4475,9 @@
     substr rx258_tgt, rx258_tgt, rx258_off
   rx258_start:
     eq $I10, 1, rx258_restart
-    rx258_cur."!cursor_debug"("START ", "quote_escape:sym<chr>")
+    if_null rx258_debug, debug_232
+    rx258_cur."!cursor_debug"("START", "quote_escape:sym<chr>")
+  debug_232:
     $I10 = self.'from'()
     ne $I10, -1, rxscan261_done
     goto rxscan261_scan
@@ -4178,11 +4511,15 @@
     rx258_pos = $P10."pos"()
   # rx pass
     rx258_cur."!cursor_pass"(rx258_pos, "quote_escape:sym<chr>")
-    rx258_cur."!cursor_debug"("PASS  ", "quote_escape:sym<chr>", " at pos=", rx258_pos)
+    if_null rx258_debug, debug_233
+    rx258_cur."!cursor_debug"("PASS", "quote_escape:sym<chr>", " at pos=", rx258_pos)
+  debug_233:
     .return (rx258_cur)
   rx258_restart:
 .annotate 'line', 33
-    rx258_cur."!cursor_debug"("NEXT ", "quote_escape:sym<chr>")
+    if_null rx258_debug, debug_234
+    rx258_cur."!cursor_debug"("NEXT", "quote_escape:sym<chr>")
+  debug_234:
   rx258_fail:
     (rx258_rep, rx258_pos, $I10, $P10) = rx258_cur."!mark_fail"(0)
     lt rx258_pos, -1, rx258_done
@@ -4190,14 +4527,16 @@
     jump $I10
   rx258_done:
     rx258_cur."!cursor_fail"()
-    rx258_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<chr>")
+    if_null rx258_debug, debug_235
+    rx258_cur."!cursor_debug"("FAIL", "quote_escape:sym<chr>")
+  debug_235:
     .return (rx258_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<chr>"  :subid("90_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<chr>"  :subid("90_1282323993.58127") :method
 .annotate 'line', 33
     new $P260, "ResizablePMCArray"
     push $P260, "\\c"
@@ -4206,7 +4545,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<0>"  :subid("91_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<0>"  :subid("91_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx263_tgt
     .local int rx263_pos
@@ -4214,7 +4553,9 @@
     .local int rx263_eos
     .local int rx263_rep
     .local pmc rx263_cur
+    .local pmc rx263_debug
     (rx263_cur, rx263_pos, rx263_tgt, $I10) = self."!cursor_start"()
+    getattribute rx263_debug, rx263_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx263_cur
     .local pmc match
     .lex "$/", match
@@ -4226,7 +4567,9 @@
     substr rx263_tgt, rx263_tgt, rx263_off
   rx263_start:
     eq $I10, 1, rx263_restart
-    rx263_cur."!cursor_debug"("START ", "quote_escape:sym<0>")
+    if_null rx263_debug, debug_236
+    rx263_cur."!cursor_debug"("START", "quote_escape:sym<0>")
+  debug_236:
     $I10 = self.'from'()
     ne $I10, -1, rxscan266_done
     goto rxscan266_scan
@@ -4244,8 +4587,8 @@
     add $I11, rx263_pos, 1
     gt $I11, rx263_eos, rx263_fail
     sub $I11, rx263_pos, rx263_off
-    substr $S10, rx263_tgt, $I11, 1
-    ne $S10, "\\", rx263_fail
+    ord $I11, rx263_tgt, $I11
+    ne $I11, 92, rx263_fail
     add rx263_pos, 1
   # rx subcapture "sym"
     set_addr $I10, rxcap_267_fail
@@ -4254,8 +4597,8 @@
     add $I11, rx263_pos, 1
     gt $I11, rx263_eos, rx263_fail
     sub $I11, rx263_pos, rx263_off
-    substr $S10, rx263_tgt, $I11, 1
-    ne $S10, "0", rx263_fail
+    ord $I11, rx263_tgt, $I11
+    ne $I11, 48, rx263_fail
     add rx263_pos, 1
     set_addr $I10, rxcap_267_fail
     ($I12, $I11) = rx263_cur."!mark_peek"($I10)
@@ -4274,11 +4617,15 @@
     unless $P10, rx263_fail
   # rx pass
     rx263_cur."!cursor_pass"(rx263_pos, "quote_escape:sym<0>")
-    rx263_cur."!cursor_debug"("PASS  ", "quote_escape:sym<0>", " at pos=", rx263_pos)
+    if_null rx263_debug, debug_237
+    rx263_cur."!cursor_debug"("PASS", "quote_escape:sym<0>", " at pos=", rx263_pos)
+  debug_237:
     .return (rx263_cur)
   rx263_restart:
 .annotate 'line', 33
-    rx263_cur."!cursor_debug"("NEXT ", "quote_escape:sym<0>")
+    if_null rx263_debug, debug_238
+    rx263_cur."!cursor_debug"("NEXT", "quote_escape:sym<0>")
+  debug_238:
   rx263_fail:
     (rx263_rep, rx263_pos, $I10, $P10) = rx263_cur."!mark_fail"(0)
     lt rx263_pos, -1, rx263_done
@@ -4286,14 +4633,16 @@
     jump $I10
   rx263_done:
     rx263_cur."!cursor_fail"()
-    rx263_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<0>")
+    if_null rx263_debug, debug_239
+    rx263_cur."!cursor_debug"("FAIL", "quote_escape:sym<0>")
+  debug_239:
     .return (rx263_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<0>"  :subid("92_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<0>"  :subid("92_1282323993.58127") :method
 .annotate 'line', 33
     new $P265, "ResizablePMCArray"
     push $P265, "\\0"
@@ -4302,13 +4651,13 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<misc>"  :subid("93_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "quote_escape:sym<misc>"  :subid("93_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
-    .const 'Sub' $P288 = "97_1280467467.13603" 
+    .const 'Sub' $P288 = "97_1282323993.58127" 
     capture_lex $P288
-    .const 'Sub' $P281 = "96_1280467467.13603" 
+    .const 'Sub' $P281 = "96_1282323993.58127" 
     capture_lex $P281
-    .const 'Sub' $P276 = "95_1280467467.13603" 
+    .const 'Sub' $P276 = "95_1282323993.58127" 
     capture_lex $P276
     .local string rx269_tgt
     .local int rx269_pos
@@ -4316,7 +4665,9 @@
     .local int rx269_eos
     .local int rx269_rep
     .local pmc rx269_cur
+    .local pmc rx269_debug
     (rx269_cur, rx269_pos, rx269_tgt, $I10) = self."!cursor_start"()
+    getattribute rx269_debug, rx269_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx269_cur
     .local pmc match
     .lex "$/", match
@@ -4328,7 +4679,9 @@
     substr rx269_tgt, rx269_tgt, rx269_off
   rx269_start:
     eq $I10, 1, rx269_restart
-    rx269_cur."!cursor_debug"("START ", "quote_escape:sym<misc>")
+    if_null rx269_debug, debug_240
+    rx269_cur."!cursor_debug"("START", "quote_escape:sym<misc>")
+  debug_240:
     $I10 = self.'from'()
     ne $I10, -1, rxscan272_done
     goto rxscan272_scan
@@ -4346,15 +4699,15 @@
     find_lex $P273, unicode:"$\x{a2}"
     $P274 = $P273."MATCH"()
     store_lex "$/", $P274
-    .const 'Sub' $P276 = "95_1280467467.13603" 
+    .const 'Sub' $P276 = "95_1282323993.58127" 
     capture_lex $P276
     $P277 = $P276()
   # 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
+    ord $I11, rx269_tgt, $I11
+    ne $I11, 92, rx269_fail
     add rx269_pos, 1
   alt278_0:
 .annotate 'line', 101
@@ -4372,7 +4725,7 @@
 .annotate 'line', 104
   # rx subrule $P281 subtype=capture negate=
     rx269_cur."!cursor_pos"(rx269_pos)
-    .const 'Sub' $P281 = "96_1280467467.13603" 
+    .const 'Sub' $P281 = "96_1282323993.58127" 
     capture_lex $P281
     $P10 = rx269_cur.$P281()
     unless $P10, rx269_fail
@@ -4406,7 +4759,7 @@
     find_lex $P285, unicode:"$\x{a2}"
     $P286 = $P285."MATCH"()
     store_lex "$/", $P286
-    .const 'Sub' $P288 = "97_1280467467.13603" 
+    .const 'Sub' $P288 = "97_1282323993.58127" 
     capture_lex $P288
     $P298 = $P288()
   alt279_end:
@@ -4435,11 +4788,15 @@
 .annotate 'line', 99
   # rx pass
     rx269_cur."!cursor_pass"(rx269_pos, "quote_escape:sym<misc>")
-    rx269_cur."!cursor_debug"("PASS  ", "quote_escape:sym<misc>", " at pos=", rx269_pos)
+    if_null rx269_debug, debug_247
+    rx269_cur."!cursor_debug"("PASS", "quote_escape:sym<misc>", " at pos=", rx269_pos)
+  debug_247:
     .return (rx269_cur)
   rx269_restart:
 .annotate 'line', 33
-    rx269_cur."!cursor_debug"("NEXT ", "quote_escape:sym<misc>")
+    if_null rx269_debug, debug_248
+    rx269_cur."!cursor_debug"("NEXT", "quote_escape:sym<misc>")
+  debug_248:
   rx269_fail:
     (rx269_rep, rx269_pos, $I10, $P10) = rx269_cur."!mark_fail"(0)
     lt rx269_pos, -1, rx269_done
@@ -4447,14 +4804,16 @@
     jump $I10
   rx269_done:
     rx269_cur."!cursor_fail"()
-    rx269_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<misc>")
+    if_null rx269_debug, debug_249
+    rx269_cur."!cursor_debug"("FAIL", "quote_escape:sym<misc>")
+  debug_249:
     .return (rx269_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<misc>"  :subid("94_1280467467.13603") :method
+.sub "!PREFIX__quote_escape:sym<misc>"  :subid("94_1282323993.58127") :method
 .annotate 'line', 33
     new $P271, "ResizablePMCArray"
     push $P271, ""
@@ -4463,14 +4822,14 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block275"  :anon :subid("95_1280467467.13603") :outer("93_1280467467.13603")
+.sub "_block275"  :anon :subid("95_1282323993.58127") :outer("93_1282323993.58127")
 .annotate 'line', 100
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block280"  :anon :subid("96_1280467467.13603") :method :outer("93_1280467467.13603")
+.sub "_block280"  :anon :subid("96_1282323993.58127") :method :outer("93_1282323993.58127")
 .annotate 'line', 104
     .local string rx282_tgt
     .local int rx282_pos
@@ -4478,7 +4837,9 @@
     .local int rx282_eos
     .local int rx282_rep
     .local pmc rx282_cur
+    .local pmc rx282_debug
     (rx282_cur, rx282_pos, rx282_tgt, $I10) = self."!cursor_start"()
+    getattribute rx282_debug, rx282_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx282_cur
     .local pmc match
     .lex "$/", match
@@ -4490,7 +4851,9 @@
     substr rx282_tgt, rx282_tgt, rx282_off
   rx282_start:
     eq $I10, 1, rx282_restart
-    rx282_cur."!cursor_debug"("START ", "")
+    if_null rx282_debug, debug_241
+    rx282_cur."!cursor_debug"("START", "")
+  debug_241:
     $I10 = self.'from'()
     ne $I10, -1, rxscan283_done
     goto rxscan283_scan
@@ -4511,10 +4874,14 @@
     inc rx282_pos
   # rx pass
     rx282_cur."!cursor_pass"(rx282_pos, "")
-    rx282_cur."!cursor_debug"("PASS  ", "", " at pos=", rx282_pos)
+    if_null rx282_debug, debug_242
+    rx282_cur."!cursor_debug"("PASS", "", " at pos=", rx282_pos)
+  debug_242:
     .return (rx282_cur)
   rx282_restart:
-    rx282_cur."!cursor_debug"("NEXT ", "")
+    if_null rx282_debug, debug_243
+    rx282_cur."!cursor_debug"("NEXT", "")
+  debug_243:
   rx282_fail:
     (rx282_rep, rx282_pos, $I10, $P10) = rx282_cur."!mark_fail"(0)
     lt rx282_pos, -1, rx282_done
@@ -4522,27 +4889,29 @@
     jump $I10
   rx282_done:
     rx282_cur."!cursor_fail"()
-    rx282_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx282_debug, debug_244
+    rx282_cur."!cursor_debug"("FAIL", "")
+  debug_244:
     .return (rx282_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block287"  :anon :subid("97_1280467467.13603") :outer("93_1280467467.13603")
+.sub "_block287"  :anon :subid("97_1282323993.58127") :outer("93_1282323993.58127")
 .annotate 'line', 105
     find_lex $P289, "$/"
     $P290 = $P289."CURSOR"()
     new $P291, "String"
     assign $P291, "Unrecognized backslash sequence: '\\"
     find_lex $P292, "$/"
-    unless_null $P292, vivify_108
+    unless_null $P292, vivify_245
     $P292 = root_new ['parrot';'Hash']
-  vivify_108:
+  vivify_245:
     set $P293, $P292["x"]
-    unless_null $P293, vivify_109
+    unless_null $P293, vivify_246
     new $P293, "Undef"
-  vivify_109:
+  vivify_246:
     $S294 = $P293."Str"()
     concat $P295, $P291, $S294
     concat $P296, $P295, "'"
@@ -4552,9 +4921,9 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charname"  :subid("98_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "charname"  :subid("98_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
-    .const 'Sub' $P310 = "100_1280467467.13603" 
+    .const 'Sub' $P310 = "100_1282323993.58127" 
     capture_lex $P310
     .local string rx301_tgt
     .local int rx301_pos
@@ -4562,7 +4931,9 @@
     .local int rx301_eos
     .local int rx301_rep
     .local pmc rx301_cur
+    .local pmc rx301_debug
     (rx301_cur, rx301_pos, rx301_tgt, $I10) = self."!cursor_start"()
+    getattribute rx301_debug, rx301_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx301_cur
     .local pmc match
     .lex "$/", match
@@ -4574,7 +4945,9 @@
     substr rx301_tgt, rx301_tgt, rx301_off
   rx301_start:
     eq $I10, 1, rx301_restart
-    rx301_cur."!cursor_debug"("START ", "charname")
+    if_null rx301_debug, debug_250
+    rx301_cur."!cursor_debug"("START", "charname")
+  debug_250:
     $I10 = self.'from'()
     ne $I10, -1, rxscan305_done
     goto rxscan305_scan
@@ -4634,7 +5007,7 @@
 .annotate 'line', 114
   # rx subrule "before" subtype=zerowidth negate=
     rx301_cur."!cursor_pos"(rx301_pos)
-    .const 'Sub' $P310 = "100_1280467467.13603" 
+    .const 'Sub' $P310 = "100_1282323993.58127" 
     capture_lex $P310
     $P10 = rx301_cur."before"($P310)
     unless $P10, rx301_fail
@@ -4642,11 +5015,15 @@
 .annotate 'line', 111
   # rx pass
     rx301_cur."!cursor_pass"(rx301_pos, "charname")
-    rx301_cur."!cursor_debug"("PASS  ", "charname", " at pos=", rx301_pos)
+    if_null rx301_debug, debug_255
+    rx301_cur."!cursor_debug"("PASS", "charname", " at pos=", rx301_pos)
+  debug_255:
     .return (rx301_cur)
   rx301_restart:
 .annotate 'line', 33
-    rx301_cur."!cursor_debug"("NEXT ", "charname")
+    if_null rx301_debug, debug_256
+    rx301_cur."!cursor_debug"("NEXT", "charname")
+  debug_256:
   rx301_fail:
     (rx301_rep, rx301_pos, $I10, $P10) = rx301_cur."!mark_fail"(0)
     lt rx301_pos, -1, rx301_done
@@ -4654,14 +5031,16 @@
     jump $I10
   rx301_done:
     rx301_cur."!cursor_fail"()
-    rx301_cur."!cursor_debug"("FAIL  ", "charname")
+    if_null rx301_debug, debug_257
+    rx301_cur."!cursor_debug"("FAIL", "charname")
+  debug_257:
     .return (rx301_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charname"  :subid("99_1280467467.13603") :method
+.sub "!PREFIX__charname"  :subid("99_1282323993.58127") :method
 .annotate 'line', 33
     $P303 = self."!PREFIX__!subrule"("integer", "")
     new $P304, "ResizablePMCArray"
@@ -4723,7 +5102,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block309"  :anon :subid("100_1280467467.13603") :method :outer("98_1280467467.13603")
+.sub "_block309"  :anon :subid("100_1282323993.58127") :method :outer("98_1282323993.58127")
 .annotate 'line', 114
     .local string rx311_tgt
     .local int rx311_pos
@@ -4731,7 +5110,9 @@
     .local int rx311_eos
     .local int rx311_rep
     .local pmc rx311_cur
+    .local pmc rx311_debug
     (rx311_cur, rx311_pos, rx311_tgt, $I10) = self."!cursor_start"()
+    getattribute rx311_debug, rx311_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx311_cur
     .local pmc match
     .lex "$/", match
@@ -4743,7 +5124,9 @@
     substr rx311_tgt, rx311_tgt, rx311_off
   rx311_start:
     eq $I10, 1, rx311_restart
-    rx311_cur."!cursor_debug"("START ", "")
+    if_null rx311_debug, debug_251
+    rx311_cur."!cursor_debug"("START", "")
+  debug_251:
     $I10 = self.'from'()
     ne $I10, -1, rxscan312_done
     goto rxscan312_scan
@@ -4769,10 +5152,14 @@
     inc rx311_pos
   # rx pass
     rx311_cur."!cursor_pass"(rx311_pos, "")
-    rx311_cur."!cursor_debug"("PASS  ", "", " at pos=", rx311_pos)
+    if_null rx311_debug, debug_252
+    rx311_cur."!cursor_debug"("PASS", "", " at pos=", rx311_pos)
+  debug_252:
     .return (rx311_cur)
   rx311_restart:
-    rx311_cur."!cursor_debug"("NEXT ", "")
+    if_null rx311_debug, debug_253
+    rx311_cur."!cursor_debug"("NEXT", "")
+  debug_253:
   rx311_fail:
     (rx311_rep, rx311_pos, $I10, $P10) = rx311_cur."!mark_fail"(0)
     lt rx311_pos, -1, rx311_done
@@ -4780,14 +5167,16 @@
     jump $I10
   rx311_done:
     rx311_cur."!cursor_fail"()
-    rx311_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx311_debug, debug_254
+    rx311_cur."!cursor_debug"("FAIL", "")
+  debug_254:
     .return (rx311_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charnames"  :subid("101_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "charnames"  :subid("101_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx314_tgt
     .local int rx314_pos
@@ -4795,8 +5184,10 @@
     .local int rx314_eos
     .local int rx314_rep
     .local pmc rx314_cur
+    .local pmc rx314_debug
     (rx314_cur, rx314_pos, rx314_tgt, $I10) = self."!cursor_start"()
     rx314_cur."!cursor_caparray"("charname")
+    getattribute rx314_debug, rx314_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx314_cur
     .local pmc match
     .lex "$/", match
@@ -4808,7 +5199,9 @@
     substr rx314_tgt, rx314_tgt, rx314_off
   rx314_start:
     eq $I10, 1, rx314_restart
-    rx314_cur."!cursor_debug"("START ", "charnames")
+    if_null rx314_debug, debug_258
+    rx314_cur."!cursor_debug"("START", "charnames")
+  debug_258:
     $I10 = self.'from'()
     ne $I10, -1, rxscan317_done
     goto rxscan317_scan
@@ -4851,18 +5244,22 @@
     add $I11, rx314_pos, 1
     gt $I11, rx314_eos, rx314_fail
     sub $I11, rx314_pos, rx314_off
-    substr $S10, rx314_tgt, $I11, 1
-    ne $S10, ",", rx314_fail
+    ord $I11, rx314_tgt, $I11
+    ne $I11, 44, rx314_fail
     add rx314_pos, 1
     goto rxquantr318_loop
   rxquantr318_done:
   # rx pass
     rx314_cur."!cursor_pass"(rx314_pos, "charnames")
-    rx314_cur."!cursor_debug"("PASS  ", "charnames", " at pos=", rx314_pos)
+    if_null rx314_debug, debug_259
+    rx314_cur."!cursor_debug"("PASS", "charnames", " at pos=", rx314_pos)
+  debug_259:
     .return (rx314_cur)
   rx314_restart:
 .annotate 'line', 33
-    rx314_cur."!cursor_debug"("NEXT ", "charnames")
+    if_null rx314_debug, debug_260
+    rx314_cur."!cursor_debug"("NEXT", "charnames")
+  debug_260:
   rx314_fail:
     (rx314_rep, rx314_pos, $I10, $P10) = rx314_cur."!mark_fail"(0)
     lt rx314_pos, -1, rx314_done
@@ -4870,14 +5267,16 @@
     jump $I10
   rx314_done:
     rx314_cur."!cursor_fail"()
-    rx314_cur."!cursor_debug"("FAIL  ", "charnames")
+    if_null rx314_debug, debug_261
+    rx314_cur."!cursor_debug"("FAIL", "charnames")
+  debug_261:
     .return (rx314_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charnames"  :subid("102_1280467467.13603") :method
+.sub "!PREFIX__charnames"  :subid("102_1282323993.58127") :method
 .annotate 'line', 33
     new $P316, "ResizablePMCArray"
     push $P316, ""
@@ -4886,7 +5285,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charspec"  :subid("103_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "charspec"  :subid("103_1282323993.58127") :method :outer("11_1282323993.58127")
 .annotate 'line', 33
     .local string rx320_tgt
     .local int rx320_pos
@@ -4894,7 +5293,9 @@
     .local int rx320_eos
     .local int rx320_rep
     .local pmc rx320_cur
+    .local pmc rx320_debug
     (rx320_cur, rx320_pos, rx320_tgt, $I10) = self."!cursor_start"()
+    getattribute rx320_debug, rx320_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx320_cur
     .local pmc match
     .lex "$/", match
@@ -4906,7 +5307,9 @@
     substr rx320_tgt, rx320_tgt, rx320_off
   rx320_start:
     eq $I10, 1, rx320_restart
-    rx320_cur."!cursor_debug"("START ", "charspec")
+    if_null rx320_debug, debug_262
+    rx320_cur."!cursor_debug"("START", "charspec")
+  debug_262:
     $I10 = self.'from'()
     ne $I10, -1, rxscan325_done
     goto rxscan325_scan
@@ -4928,8 +5331,8 @@
     add $I11, rx320_pos, 1
     gt $I11, rx320_eos, rx320_fail
     sub $I11, rx320_pos, rx320_off
-    substr $S10, rx320_tgt, $I11, 1
-    ne $S10, "[", rx320_fail
+    ord $I11, rx320_tgt, $I11
+    ne $I11, 91, rx320_fail
     add rx320_pos, 1
   # rx subrule "charnames" subtype=capture negate=
     rx320_cur."!cursor_pos"(rx320_pos)
@@ -4942,8 +5345,8 @@
     add $I11, rx320_pos, 1
     gt $I11, rx320_eos, rx320_fail
     sub $I11, rx320_pos, rx320_off
-    substr $S10, rx320_tgt, $I11, 1
-    ne $S10, "]", rx320_fail
+    ord $I11, rx320_tgt, $I11
+    ne $I11, 93, rx320_fail
     add rx320_pos, 1
     goto alt326_end
   alt326_1:
@@ -4964,8 +5367,8 @@
     add $I11, rx320_pos, 1
     gt $I11, rx320_eos, rx320_fail
     sub $I11, rx320_pos, rx320_off
-    substr $S10, rx320_tgt, $I11, 1
-    ne $S10, "_", rx320_fail
+    ord $I11, rx320_tgt, $I11
+    ne $I11, 95, rx320_fail
     add rx320_pos, 1
   # rx charclass_q d r 1..-1
     sub $I10, rx320_pos, rx320_off
@@ -5003,11 +5406,15 @@
 .annotate 'line', 117
   # rx pass
     rx320_cur."!cursor_pass"(rx320_pos, "charspec")
-    rx320_cur."!cursor_debug"("PASS  ", "charspec", " at pos=", rx320_pos)
+    if_null rx320_debug, debug_263
+    rx320_cur."!cursor_debug"("PASS", "charspec", " at pos=", rx320_pos)
+  debug_263:
     .return (rx320_cur)
   rx320_restart:
 .annotate 'line', 33
-    rx320_cur."!cursor_debug"("NEXT ", "charspec")
+    if_null rx320_debug, debug_264
+    rx320_cur."!cursor_debug"("NEXT", "charspec")
+  debug_264:
   rx320_fail:
     (rx320_rep, rx320_pos, $I10, $P10) = rx320_cur."!mark_fail"(0)
     lt rx320_pos, -1, rx320_done
@@ -5015,14 +5422,16 @@
     jump $I10
   rx320_done:
     rx320_cur."!cursor_fail"()
-    rx320_cur."!cursor_debug"("FAIL  ", "charspec")
+    if_null rx320_debug, debug_265
+    rx320_cur."!cursor_debug"("FAIL", "charspec")
+  debug_265:
     .return (rx320_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charspec"  :subid("104_1280467467.13603") :method
+.sub "!PREFIX__charspec"  :subid("104_1282323993.58127") :method
 .annotate 'line', 33
     $P322 = self."!PREFIX__!subrule"("panic", "")
     $P323 = self."!PREFIX__!subrule"("charnames", "[")
@@ -5063,18 +5472,18 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block328" :load :anon :subid("105_1280467467.13603")
+.sub "_block328" :load :anon :subid("105_1282323993.58127")
 .annotate 'line', 5
-    .const 'Sub' $P330 = "11_1280467467.13603" 
+    .const 'Sub' $P330 = "11_1282323993.58127" 
     $P331 = $P330()
     .return ($P331)
 .end
 
 
 .namespace []
-.sub "_block333" :load :anon :subid("106_1280467467.13603")
+.sub "_block333" :load :anon :subid("106_1282323993.58127")
 .annotate 'line', 1
-    .const 'Sub' $P335 = "10_1280467467.13603" 
+    .const 'Sub' $P335 = "10_1282323993.58127" 
     $P336 = $P335()
     .return ($P336)
 .end
@@ -5082,7 +5491,7 @@
 ### .include 'gen/hllgrammar-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467468.44761")
+.sub "_block11"  :anon :subid("10_1282323994.69928")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Actions"], "_block13" 
     capture_lex $P14
@@ -5099,15 +5508,15 @@
     $P627 = $P14()
 .annotate 'line', 1
     .return ($P627)
-    .const 'Sub' $P629 = "55_1280467468.44761" 
+    .const 'Sub' $P629 = "55_1282323994.69928" 
     .return ($P629)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post56") :outer("10_1280467468.44761")
+.sub "" :load :init :subid("post56") :outer("10_1282323994.69928")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467468.44761" 
+    .const 'Sub' $P12 = "10_1282323994.69928" 
     .local pmc block
     set block, $P12
     $P632 = get_root_global ["parrot"], "P6metaclass"
@@ -5116,75 +5525,75 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block13"  :subid("11_1280467468.44761") :outer("10_1280467468.44761")
+.sub "_block13"  :subid("11_1282323994.69928") :outer("10_1282323994.69928")
 .annotate 'line', 3
-    .const 'Sub' $P605 = "53_1280467468.44761" 
+    .const 'Sub' $P605 = "53_1282323994.69928" 
     capture_lex $P605
-    .const 'Sub' $P580 = "51_1280467468.44761" 
+    .const 'Sub' $P580 = "51_1282323994.69928" 
     capture_lex $P580
-    .const 'Sub' $P550 = "50_1280467468.44761" 
+    .const 'Sub' $P550 = "50_1282323994.69928" 
     capture_lex $P550
-    .const 'Sub' $P531 = "49_1280467468.44761" 
+    .const 'Sub' $P531 = "49_1282323994.69928" 
     capture_lex $P531
-    .const 'Sub' $P524 = "48_1280467468.44761" 
+    .const 'Sub' $P524 = "48_1282323994.69928" 
     capture_lex $P524
-    .const 'Sub' $P514 = "47_1280467468.44761" 
+    .const 'Sub' $P514 = "47_1282323994.69928" 
     capture_lex $P514
-    .const 'Sub' $P497 = "46_1280467468.44761" 
+    .const 'Sub' $P497 = "46_1282323994.69928" 
     capture_lex $P497
-    .const 'Sub' $P480 = "45_1280467468.44761" 
+    .const 'Sub' $P480 = "45_1282323994.69928" 
     capture_lex $P480
-    .const 'Sub' $P473 = "44_1280467468.44761" 
+    .const 'Sub' $P473 = "44_1282323994.69928" 
     capture_lex $P473
-    .const 'Sub' $P466 = "43_1280467468.44761" 
+    .const 'Sub' $P466 = "43_1282323994.69928" 
     capture_lex $P466
-    .const 'Sub' $P459 = "42_1280467468.44761" 
+    .const 'Sub' $P459 = "42_1282323994.69928" 
     capture_lex $P459
-    .const 'Sub' $P452 = "41_1280467468.44761" 
+    .const 'Sub' $P452 = "41_1282323994.69928" 
     capture_lex $P452
-    .const 'Sub' $P445 = "40_1280467468.44761" 
+    .const 'Sub' $P445 = "40_1282323994.69928" 
     capture_lex $P445
-    .const 'Sub' $P438 = "39_1280467468.44761" 
+    .const 'Sub' $P438 = "39_1282323994.69928" 
     capture_lex $P438
-    .const 'Sub' $P428 = "38_1280467468.44761" 
+    .const 'Sub' $P428 = "38_1282323994.69928" 
     capture_lex $P428
-    .const 'Sub' $P421 = "37_1280467468.44761" 
+    .const 'Sub' $P421 = "37_1282323994.69928" 
     capture_lex $P421
-    .const 'Sub' $P405 = "36_1280467468.44761" 
+    .const 'Sub' $P405 = "36_1282323994.69928" 
     capture_lex $P405
-    .const 'Sub' $P330 = "34_1280467468.44761" 
+    .const 'Sub' $P330 = "34_1282323994.69928" 
     capture_lex $P330
-    .const 'Sub' $P267 = "31_1280467468.44761" 
+    .const 'Sub' $P267 = "31_1282323994.69928" 
     capture_lex $P267
-    .const 'Sub' $P258 = "30_1280467468.44761" 
+    .const 'Sub' $P258 = "30_1282323994.69928" 
     capture_lex $P258
-    .const 'Sub' $P249 = "29_1280467468.44761" 
+    .const 'Sub' $P249 = "29_1282323994.69928" 
     capture_lex $P249
-    .const 'Sub' $P240 = "28_1280467468.44761" 
+    .const 'Sub' $P240 = "28_1282323994.69928" 
     capture_lex $P240
-    .const 'Sub' $P231 = "27_1280467468.44761" 
+    .const 'Sub' $P231 = "27_1282323994.69928" 
     capture_lex $P231
-    .const 'Sub' $P222 = "26_1280467468.44761" 
+    .const 'Sub' $P222 = "26_1282323994.69928" 
     capture_lex $P222
-    .const 'Sub' $P212 = "25_1280467468.44761" 
+    .const 'Sub' $P212 = "25_1282323994.69928" 
     capture_lex $P212
-    .const 'Sub' $P202 = "24_1280467468.44761" 
+    .const 'Sub' $P202 = "24_1282323994.69928" 
     capture_lex $P202
-    .const 'Sub' $P194 = "23_1280467468.44761" 
+    .const 'Sub' $P194 = "23_1282323994.69928" 
     capture_lex $P194
-    .const 'Sub' $P184 = "22_1280467468.44761" 
+    .const 'Sub' $P184 = "22_1282323994.69928" 
     capture_lex $P184
-    .const 'Sub' $P174 = "21_1280467468.44761" 
+    .const 'Sub' $P174 = "21_1282323994.69928" 
     capture_lex $P174
-    .const 'Sub' $P73 = "18_1280467468.44761" 
+    .const 'Sub' $P73 = "18_1282323994.69928" 
     capture_lex $P73
-    .const 'Sub' $P35 = "15_1280467468.44761" 
+    .const 'Sub' $P35 = "15_1282323994.69928" 
     capture_lex $P35
-    .const 'Sub' $P28 = "14_1280467468.44761" 
+    .const 'Sub' $P28 = "14_1282323994.69928" 
     capture_lex $P28
-    .const 'Sub' $P22 = "13_1280467468.44761" 
+    .const 'Sub' $P22 = "13_1282323994.69928" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1280467468.44761" 
+    .const 'Sub' $P15 = "12_1282323994.69928" 
     capture_lex $P15
     $P0 = find_dynamic_lex "$*CTXSAVE"
     if null $P0 goto ctxsave_done
@@ -5193,18 +5602,18 @@
     $P0."ctxsave"()
   ctxsave_done:
 .annotate 'line', 225
-    .const 'Sub' $P605 = "53_1280467468.44761" 
+    .const 'Sub' $P605 = "53_1282323994.69928" 
     newclosure $P622, $P605
 .annotate 'line', 3
     .return ($P622)
-    .const 'Sub' $P624 = "54_1280467468.44761" 
+    .const 'Sub' $P624 = "54_1282323994.69928" 
     .return ($P624)
 .end
 
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "string_to_int"  :subid("12_1280467468.44761") :outer("11_1280467468.44761")
+.sub "string_to_int"  :subid("12_1282323994.69928") :outer("11_1282323994.69928")
     .param pmc param_18
     .param pmc param_19
 .annotate 'line', 3
@@ -5258,7 +5667,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "ints_to_string"  :subid("13_1280467468.44761") :outer("11_1280467468.44761")
+.sub "ints_to_string"  :subid("13_1282323994.69928") :outer("11_1282323994.69928")
     .param pmc param_25
 .annotate 'line', 37
     new $P24, 'ExceptionHandler'
@@ -5300,7 +5709,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "CTXSAVE"  :subid("14_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "CTXSAVE"  :subid("14_1282323994.69928") :method :outer("11_1282323994.69928")
 .annotate 'line', 62
     new $P30, 'ExceptionHandler'
     set_addr $P30, control_29
@@ -5330,10 +5739,10 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "SET_BLOCK_OUTER_CTX"  :subid("15_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "SET_BLOCK_OUTER_CTX"  :subid("15_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_38
 .annotate 'line', 76
-    .const 'Sub' $P48 = "16_1280467468.44761" 
+    .const 'Sub' $P48 = "16_1282323994.69928" 
     capture_lex $P48
     new $P37, 'ExceptionHandler'
     set_addr $P37, control_36
@@ -5368,7 +5777,7 @@
     set $P43, $I46
     goto if_44_end
   if_44:
-    .const 'Sub' $P48 = "16_1280467468.44761" 
+    .const 'Sub' $P48 = "16_1282323994.69928" 
     capture_lex $P48
     $P71 = $P48()
     set $P43, $P71
@@ -5385,9 +5794,9 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "_block47"  :anon :subid("16_1280467468.44761") :outer("15_1280467468.44761")
+.sub "_block47"  :anon :subid("16_1282323994.69928") :outer("15_1282323994.69928")
 .annotate 'line', 78
-    .const 'Sub' $P62 = "17_1280467468.44761" 
+    .const 'Sub' $P62 = "17_1282323994.69928" 
     capture_lex $P62
 .annotate 'line', 79
     $P49 = root_new ['parrot';'ResizablePMCArray']
@@ -5417,7 +5826,7 @@
     unless $P56, loop68_done
     shift $P60, $P56
   loop68_redo:
-    .const 'Sub' $P62 = "17_1280467468.44761" 
+    .const 'Sub' $P62 = "17_1282323994.69928" 
     capture_lex $P62
     $P62($P60)
   loop68_next:
@@ -5437,7 +5846,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block61"  :anon :subid("17_1280467468.44761") :outer("16_1280467468.44761")
+.sub "_block61"  :anon :subid("17_1282323994.69928") :outer("16_1282323994.69928")
     .param pmc param_63
 .annotate 'line', 82
     .lex "$_", param_63
@@ -5453,14 +5862,14 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "EXPR"  :subid("18_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "EXPR"  :subid("18_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_76
     .param pmc param_77 :optional
     .param int has_param_77 :opt_flag
 .annotate 'line', 89
-    .const 'Sub' $P156 = "20_1280467468.44761" 
+    .const 'Sub' $P156 = "20_1282323994.69928" 
     capture_lex $P156
-    .const 'Sub' $P123 = "19_1280467468.44761" 
+    .const 'Sub' $P123 = "19_1282323994.69928" 
     capture_lex $P123
     new $P75, 'ExceptionHandler'
     set_addr $P75, control_74
@@ -5595,7 +6004,7 @@
     find_lex $P120, "$past"
     $P121 = $P120."name"()
     if $P121, unless_119_end
-    .const 'Sub' $P123 = "19_1280467468.44761" 
+    .const 'Sub' $P123 = "19_1282323994.69928" 
     capture_lex $P123
     $P123()
   unless_119_end:
@@ -5619,7 +6028,7 @@
     unless $P150, loop167_done
     shift $P154, $P150
   loop167_redo:
-    .const 'Sub' $P156 = "20_1280467468.44761" 
+    .const 'Sub' $P156 = "20_1282323994.69928" 
     capture_lex $P156
     $P156($P154)
   loop167_next:
@@ -5664,7 +6073,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block122"  :anon :subid("19_1280467468.44761") :outer("18_1280467468.44761")
+.sub "_block122"  :anon :subid("19_1282323994.69928") :outer("18_1282323994.69928")
 .annotate 'line', 98
     new $P124, "Undef"
     .lex "$name", $P124
@@ -5714,7 +6123,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block155"  :anon :subid("20_1280467468.44761") :outer("18_1280467468.44761")
+.sub "_block155"  :anon :subid("20_1282323994.69928") :outer("18_1282323994.69928")
     .param pmc param_157
 .annotate 'line', 109
     .lex "$_", param_157
@@ -5738,7 +6147,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<circumfix>"  :subid("21_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "term:sym<circumfix>"  :subid("21_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_177
 .annotate 'line', 114
     new $P176, 'ExceptionHandler'
@@ -5769,7 +6178,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "termish"  :subid("22_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "termish"  :subid("22_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_187
 .annotate 'line', 116
     new $P186, 'ExceptionHandler'
@@ -5800,7 +6209,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "nullterm"  :subid("23_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "nullterm"  :subid("23_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_197
 .annotate 'line', 117
     new $P196, 'ExceptionHandler'
@@ -5823,7 +6232,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "nullterm_alt"  :subid("24_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "nullterm_alt"  :subid("24_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_205
 .annotate 'line', 118
     new $P204, 'ExceptionHandler'
@@ -5854,7 +6263,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "integer"  :subid("25_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "integer"  :subid("25_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_215
 .annotate 'line', 120
     new $P214, 'ExceptionHandler'
@@ -5885,7 +6294,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "dec_number"  :subid("26_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "dec_number"  :subid("26_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_225
 .annotate 'line', 122
     new $P224, 'ExceptionHandler'
@@ -5909,7 +6318,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "decint"  :subid("27_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "decint"  :subid("27_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_234
 .annotate 'line', 124
     new $P233, 'ExceptionHandler'
@@ -5933,7 +6342,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "hexint"  :subid("28_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "hexint"  :subid("28_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_243
 .annotate 'line', 125
     new $P242, 'ExceptionHandler'
@@ -5957,7 +6366,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "octint"  :subid("29_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "octint"  :subid("29_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_252
 .annotate 'line', 126
     new $P251, 'ExceptionHandler'
@@ -5981,7 +6390,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "binint"  :subid("30_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "binint"  :subid("30_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_261
 .annotate 'line', 127
     new $P260, 'ExceptionHandler'
@@ -6005,10 +6414,10 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_EXPR"  :subid("31_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_EXPR"  :subid("31_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_270
 .annotate 'line', 129
-    .const 'Sub' $P286 = "32_1280467468.44761" 
+    .const 'Sub' $P286 = "32_1282323994.69928" 
     capture_lex $P286
     new $P269, 'ExceptionHandler'
     set_addr $P269, control_268
@@ -6040,7 +6449,7 @@
     $P282 = $P280."ACCEPTS"($P281)
     if $P282, if_279
 .annotate 'line', 135
-    .const 'Sub' $P286 = "32_1280467468.44761" 
+    .const 'Sub' $P286 = "32_1282323994.69928" 
     capture_lex $P286
     $P286()
     goto if_279_end
@@ -6080,9 +6489,9 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "_block285"  :anon :subid("32_1280467468.44761") :outer("31_1280467468.44761")
+.sub "_block285"  :anon :subid("32_1282323994.69928") :outer("31_1282323994.69928")
 .annotate 'line', 135
-    .const 'Sub' $P305 = "33_1280467468.44761" 
+    .const 'Sub' $P305 = "33_1282323994.69928" 
     capture_lex $P305
 .annotate 'line', 136
     $P287 = root_new ['parrot';'ResizablePMCArray']
@@ -6133,7 +6542,7 @@
     unless $P300, loop310_done
     shift $P303, $P300
   loop310_redo:
-    .const 'Sub' $P305 = "33_1280467468.44761" 
+    .const 'Sub' $P305 = "33_1282323994.69928" 
     capture_lex $P305
     $P305($P303)
   loop310_next:
@@ -6156,7 +6565,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block304"  :anon :subid("33_1280467468.44761") :outer("32_1280467468.44761")
+.sub "_block304"  :anon :subid("33_1282323994.69928") :outer("32_1282323994.69928")
     .param pmc param_306
 .annotate 'line', 139
     .lex "$_", param_306
@@ -6169,10 +6578,10 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_delimited"  :subid("34_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_delimited"  :subid("34_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_333
 .annotate 'line', 152
-    .const 'Sub' $P345 = "35_1280467468.44761" 
+    .const 'Sub' $P345 = "35_1282323994.69928" 
     capture_lex $P345
     new $P332, 'ExceptionHandler'
     set_addr $P332, control_331
@@ -6215,7 +6624,7 @@
     unless $P339, loop377_done
     shift $P343, $P339
   loop377_redo:
-    .const 'Sub' $P345 = "35_1280467468.44761" 
+    .const 'Sub' $P345 = "35_1282323994.69928" 
     capture_lex $P345
     $P345($P343)
   loop377_next:
@@ -6293,7 +6702,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block344"  :anon :subid("35_1280467468.44761") :outer("34_1280467468.44761")
+.sub "_block344"  :anon :subid("35_1282323994.69928") :outer("34_1282323994.69928")
     .param pmc param_347
 .annotate 'line', 156
     new $P346, "Undef"
@@ -6363,7 +6772,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_atom"  :subid("36_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_atom"  :subid("36_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_408
 .annotate 'line', 177
     new $P407, 'ExceptionHandler'
@@ -6413,7 +6822,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<backslash>"  :subid("37_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<backslash>"  :subid("37_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_424
 .annotate 'line', 181
     new $P423, 'ExceptionHandler'
@@ -6435,7 +6844,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<stopper>"  :subid("38_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<stopper>"  :subid("38_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_431
 .annotate 'line', 182
     new $P430, 'ExceptionHandler'
@@ -6466,7 +6875,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<bs>"  :subid("39_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<bs>"  :subid("39_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_441
 .annotate 'line', 184
     new $P440, 'ExceptionHandler'
@@ -6488,7 +6897,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<nl>"  :subid("40_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<nl>"  :subid("40_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_448
 .annotate 'line', 185
     new $P447, 'ExceptionHandler'
@@ -6510,7 +6919,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<cr>"  :subid("41_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<cr>"  :subid("41_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_455
 .annotate 'line', 186
     new $P454, 'ExceptionHandler'
@@ -6532,7 +6941,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<tab>"  :subid("42_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<tab>"  :subid("42_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_462
 .annotate 'line', 187
     new $P461, 'ExceptionHandler'
@@ -6554,7 +6963,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<ff>"  :subid("43_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<ff>"  :subid("43_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_469
 .annotate 'line', 188
     new $P468, 'ExceptionHandler'
@@ -6576,7 +6985,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<esc>"  :subid("44_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<esc>"  :subid("44_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_476
 .annotate 'line', 189
     new $P475, 'ExceptionHandler'
@@ -6598,7 +7007,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<hex>"  :subid("45_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<hex>"  :subid("45_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_483
 .annotate 'line', 191
     new $P482, 'ExceptionHandler'
@@ -6657,7 +7066,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<oct>"  :subid("46_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<oct>"  :subid("46_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_500
 .annotate 'line', 195
     new $P499, 'ExceptionHandler'
@@ -6716,7 +7125,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<chr>"  :subid("47_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<chr>"  :subid("47_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_517
 .annotate 'line', 199
     new $P516, 'ExceptionHandler'
@@ -6749,7 +7158,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<0>"  :subid("48_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<0>"  :subid("48_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_527
 .annotate 'line', 203
     new $P526, 'ExceptionHandler'
@@ -6773,7 +7182,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<misc>"  :subid("49_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "quote_escape:sym<misc>"  :subid("49_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_534
 .annotate 'line', 207
     new $P533, 'ExceptionHandler'
@@ -6832,7 +7241,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "charname"  :subid("50_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "charname"  :subid("50_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_553
 .annotate 'line', 211
     new $P552, 'ExceptionHandler'
@@ -6906,10 +7315,10 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "charnames"  :subid("51_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "charnames"  :subid("51_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_583
 .annotate 'line', 219
-    .const 'Sub' $P592 = "52_1280467468.44761" 
+    .const 'Sub' $P592 = "52_1282323994.69928" 
     capture_lex $P592
     new $P582, 'ExceptionHandler'
     set_addr $P582, control_581
@@ -6943,7 +7352,7 @@
     unless $P586, loop598_done
     shift $P590, $P586
   loop598_redo:
-    .const 'Sub' $P592 = "52_1280467468.44761" 
+    .const 'Sub' $P592 = "52_1282323994.69928" 
     capture_lex $P592
     $P592($P590)
   loop598_next:
@@ -6972,7 +7381,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block591"  :anon :subid("52_1280467468.44761") :outer("51_1280467468.44761")
+.sub "_block591"  :anon :subid("52_1282323994.69928") :outer("51_1282323994.69928")
     .param pmc param_593
 .annotate 'line', 221
     .lex "$_", param_593
@@ -6987,7 +7396,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "charspec"  :subid("53_1280467468.44761") :method :outer("11_1280467468.44761")
+.sub "charspec"  :subid("53_1282323994.69928") :method :outer("11_1282323994.69928")
     .param pmc param_608
 .annotate 'line', 225
     new $P607, 'ExceptionHandler'
@@ -7037,18 +7446,18 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block623" :load :anon :subid("54_1280467468.44761")
+.sub "_block623" :load :anon :subid("54_1282323994.69928")
 .annotate 'line', 3
-    .const 'Sub' $P625 = "11_1280467468.44761" 
+    .const 'Sub' $P625 = "11_1282323994.69928" 
     $P626 = $P625()
     .return ($P626)
 .end
 
 
 .namespace []
-.sub "_block628" :load :anon :subid("55_1280467468.44761")
+.sub "_block628" :load :anon :subid("55_1282323994.69928")
 .annotate 'line', 1
-    .const 'Sub' $P630 = "10_1280467468.44761" 
+    .const 'Sub' $P630 = "10_1282323994.69928" 
     $P631 = $P630()
     .return ($P631)
 .end
@@ -7056,7 +7465,7 @@
 ### .include 'gen/hllcompiler.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467469.30058")
+.sub "_block11"  :anon :subid("10_1282323995.38516")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     capture_lex $P14
@@ -7073,15 +7482,15 @@
     $P497 = $P14()
 .annotate 'line', 1
     .return ($P497)
-    .const 'Sub' $P499 = "36_1280467469.30058" 
+    .const 'Sub' $P499 = "36_1282323995.38516" 
     .return ($P499)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post37") :outer("10_1280467469.30058")
+.sub "" :load :init :subid("post37") :outer("10_1282323995.38516")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467469.30058" 
+    .const 'Sub' $P12 = "10_1282323995.38516" 
     .local pmc block
     set block, $P12
 .annotate 'line', 2
@@ -7095,36 +7504,36 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block13"  :subid("11_1280467469.30058") :outer("10_1280467469.30058")
+.sub "_block13"  :subid("11_1282323995.38516") :outer("10_1282323995.38516")
 .annotate 'line', 6
-    .const 'Sub' $P489 = "35_1280467469.30058" 
+    .const 'Sub' $P489 = "35_1282323995.38516" 
     capture_lex $P489
-    .const 'Sub' $P447 = "33_1280467469.30058" 
+    .const 'Sub' $P447 = "33_1282323995.38516" 
     capture_lex $P447
-    .const 'Sub' $P298 = "26_1280467469.30058" 
+    .const 'Sub' $P298 = "26_1282323995.38516" 
     capture_lex $P298
-    .const 'Sub' $P283 = "25_1280467469.30058" 
+    .const 'Sub' $P283 = "25_1282323995.38516" 
     capture_lex $P283
-    .const 'Sub' $P188 = "20_1280467469.30058" 
+    .const 'Sub' $P188 = "20_1282323995.38516" 
     capture_lex $P188
-    .const 'Sub' $P153 = "18_1280467469.30058" 
+    .const 'Sub' $P153 = "18_1282323995.38516" 
     capture_lex $P153
-    .const 'Sub' $P138 = "17_1280467469.30058" 
+    .const 'Sub' $P138 = "17_1282323995.38516" 
     capture_lex $P138
-    .const 'Sub' $P122 = "16_1280467469.30058" 
+    .const 'Sub' $P122 = "16_1282323995.38516" 
     capture_lex $P122
-    .const 'Sub' $P33 = "13_1280467469.30058" 
+    .const 'Sub' $P33 = "13_1282323995.38516" 
     capture_lex $P33
-    .const 'Sub' $P15 = "12_1280467469.30058" 
+    .const 'Sub' $P15 = "12_1282323995.38516" 
     capture_lex $P15
 .annotate 'line', 14
-    .const 'Sub' $P15 = "12_1280467469.30058" 
+    .const 'Sub' $P15 = "12_1282323995.38516" 
     newclosure $P31, $P15
     .lex "value_type", $P31
 .annotate 'line', 10
     find_lex $P32, "value_type"
 .annotate 'line', 165
-    .const 'Sub' $P489 = "35_1280467469.30058" 
+    .const 'Sub' $P489 = "35_1282323995.38516" 
     newclosure $P495, $P489
 .annotate 'line', 6
     .return ($P495)
@@ -7132,7 +7541,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "" :load :init :subid("post38") :outer("11_1280467469.30058")
+.sub "" :load :init :subid("post38") :outer("11_1282323995.38516")
 .annotate 'line', 6
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     .local pmc block
@@ -7145,7 +7554,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "value_type"  :subid("12_1280467469.30058") :outer("11_1280467469.30058")
+.sub "value_type"  :subid("12_1282323995.38516") :outer("11_1282323995.38516")
     .param pmc param_18
 .annotate 'line', 14
     new $P17, 'ExceptionHandler'
@@ -7190,15 +7599,15 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "get_exports"  :subid("13_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "get_exports"  :subid("13_1282323995.38516") :method :outer("11_1282323995.38516")
     .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_1280467469.30058" 
+    .const 'Sub' $P105 = "15_1282323995.38516" 
     capture_lex $P105
-    .const 'Sub' $P84 = "14_1280467469.30058" 
+    .const 'Sub' $P84 = "14_1282323995.38516" 
     capture_lex $P84
     new $P35, 'ExceptionHandler'
     set_addr $P35, control_34
@@ -7304,7 +7713,7 @@
     unless $P100, loop117_done
     shift $P103, $P100
   loop117_redo:
-    .const 'Sub' $P105 = "15_1280467469.30058" 
+    .const 'Sub' $P105 = "15_1282323995.38516" 
     capture_lex $P105
     $P105($P103)
   loop117_next:
@@ -7334,7 +7743,7 @@
     unless $P79, loop97_done
     shift $P82, $P79
   loop97_redo:
-    .const 'Sub' $P84 = "14_1280467469.30058" 
+    .const 'Sub' $P84 = "14_1282323995.38516" 
     capture_lex $P84
     $P84($P82)
   loop97_next:
@@ -7362,7 +7771,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block104"  :anon :subid("15_1280467469.30058") :outer("13_1280467469.30058")
+.sub "_block104"  :anon :subid("15_1282323995.38516") :outer("13_1282323995.38516")
     .param pmc param_107
 .annotate 'line', 40
     new $P106, "Undef"
@@ -7394,7 +7803,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block83"  :anon :subid("14_1280467469.30058") :outer("13_1280467469.30058")
+.sub "_block83"  :anon :subid("14_1282323995.38516") :outer("13_1282323995.38516")
     .param pmc param_86
 .annotate 'line', 34
     new $P85, "Undef"
@@ -7434,7 +7843,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "get_module"  :subid("16_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "get_module"  :subid("16_1282323995.38516") :method :outer("11_1282323995.38516")
     .param pmc param_125
 .annotate 'line', 47
     new $P124, 'ExceptionHandler'
@@ -7475,7 +7884,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "language"  :subid("17_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "language"  :subid("17_1282323995.38516") :method :outer("11_1282323995.38516")
     .param pmc param_141 :optional
     .param int has_param_141 :opt_flag
 .annotate 'line', 53
@@ -7520,10 +7929,10 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "load_module"  :subid("18_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "load_module"  :subid("18_1282323995.38516") :method :outer("11_1282323995.38516")
     .param pmc param_156
 .annotate 'line', 61
-    .const 'Sub' $P166 = "19_1280467469.30058" 
+    .const 'Sub' $P166 = "19_1282323995.38516" 
     capture_lex $P166
     new $P155, 'ExceptionHandler'
     set_addr $P155, control_154
@@ -7550,7 +7959,7 @@
     assign $P164, 0
     store_lex "$loaded", $P164
 .annotate 'line', 64
-    .const 'Sub' $P166 = "19_1280467469.30058" 
+    .const 'Sub' $P166 = "19_1282323995.38516" 
     capture_lex $P166
     $P166()
 .annotate 'line', 65
@@ -7580,7 +7989,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block165"  :anon :subid("19_1280467469.30058") :outer("18_1280467469.30058")
+.sub "_block165"  :anon :subid("19_1282323995.38516") :outer("18_1282323995.38516")
 .annotate 'line', 64
     new $P173, 'ExceptionHandler'
     set_addr $P173, control_172
@@ -7614,11 +8023,11 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "import"  :subid("20_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "import"  :subid("20_1282323995.38516") :method :outer("11_1282323995.38516")
     .param pmc param_191
     .param pmc param_192
 .annotate 'line', 69
-    .const 'Sub' $P198 = "21_1280467469.30058" 
+    .const 'Sub' $P198 = "21_1282323995.38516" 
     capture_lex $P198
     new $P190, 'ExceptionHandler'
     set_addr $P190, control_189
@@ -7640,7 +8049,7 @@
     unless $P193, loop279_done
     shift $P196, $P193
   loop279_redo:
-    .const 'Sub' $P198 = "21_1280467469.30058" 
+    .const 'Sub' $P198 = "21_1282323995.38516" 
     capture_lex $P198
     $P198($P196)
   loop279_next:
@@ -7666,14 +8075,14 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block197"  :anon :subid("21_1280467469.30058") :outer("20_1280467469.30058")
+.sub "_block197"  :anon :subid("21_1282323995.38516") :outer("20_1282323995.38516")
     .param pmc param_201
 .annotate 'line', 70
-    .const 'Sub' $P268 = "24_1280467469.30058" 
+    .const 'Sub' $P268 = "24_1282323995.38516" 
     capture_lex $P268
-    .const 'Sub' $P248 = "23_1280467469.30058" 
+    .const 'Sub' $P248 = "23_1282323995.38516" 
     capture_lex $P248
-    .const 'Sub' $P219 = "22_1280467469.30058" 
+    .const 'Sub' $P219 = "22_1282323995.38516" 
     capture_lex $P219
 .annotate 'line', 71
     new $P199, "Undef"
@@ -7721,7 +8130,7 @@
     unless $P263, loop276_done
     shift $P266, $P263
   loop276_redo:
-    .const 'Sub' $P268 = "24_1280467469.30058" 
+    .const 'Sub' $P268 = "24_1282323995.38516" 
     capture_lex $P268
     $P268($P266)
   loop276_next:
@@ -7753,7 +8162,7 @@
     unless $P243, loop260_done
     shift $P246, $P243
   loop260_redo:
-    .const 'Sub' $P248 = "23_1280467469.30058" 
+    .const 'Sub' $P248 = "23_1282323995.38516" 
     capture_lex $P248
     $P248($P246)
   loop260_next:
@@ -7787,7 +8196,7 @@
     unless $P214, loop232_done
     shift $P217, $P214
   loop232_redo:
-    .const 'Sub' $P219 = "22_1280467469.30058" 
+    .const 'Sub' $P219 = "22_1282323995.38516" 
     capture_lex $P219
     $P219($P217)
   loop232_next:
@@ -7810,7 +8219,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block267"  :anon :subid("24_1280467469.30058") :outer("21_1280467469.30058")
+.sub "_block267"  :anon :subid("24_1282323995.38516") :outer("21_1282323995.38516")
     .param pmc param_269
 .annotate 'line', 80
     .lex "$_", param_269
@@ -7830,7 +8239,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block247"  :anon :subid("23_1280467469.30058") :outer("21_1280467469.30058")
+.sub "_block247"  :anon :subid("23_1282323995.38516") :outer("21_1282323995.38516")
     .param pmc param_249
 .annotate 'line', 77
     .lex "$_", param_249
@@ -7850,7 +8259,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block218"  :anon :subid("22_1280467469.30058") :outer("21_1280467469.30058")
+.sub "_block218"  :anon :subid("22_1282323995.38516") :outer("21_1282323995.38516")
     .param pmc param_220
 .annotate 'line', 74
     .lex "$_", param_220
@@ -7872,7 +8281,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "autoprint"  :subid("25_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "autoprint"  :subid("25_1282323995.38516") :method :outer("11_1282323995.38516")
     .param pmc param_286
 .annotate 'line', 85
     new $P285, 'ExceptionHandler'
@@ -7916,10 +8325,10 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "interactive"  :subid("26_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "interactive"  :subid("26_1282323995.38516") :method :outer("11_1282323995.38516")
     .param pmc param_301 :slurpy :named
 .annotate 'line', 90
-    .const 'Sub' $P333 = "27_1280467469.30058" 
+    .const 'Sub' $P333 = "27_1282323995.38516" 
     capture_lex $P333
     new $P300, 'ExceptionHandler'
     set_addr $P300, control_299
@@ -8006,7 +8415,7 @@
     assign $P331, 1
     unless $P331, loop443_done
   loop443_redo:
-    .const 'Sub' $P333 = "27_1280467469.30058" 
+    .const 'Sub' $P333 = "27_1282323995.38516" 
     capture_lex $P333
     $P333()
   loop443_next:
@@ -8031,9 +8440,9 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block332"  :anon :subid("27_1280467469.30058") :outer("26_1280467469.30058")
+.sub "_block332"  :anon :subid("27_1282323995.38516") :outer("26_1282323995.38516")
 .annotate 'line', 102
-    .const 'Sub' $P365 = "28_1280467469.30058" 
+    .const 'Sub' $P365 = "28_1282323995.38516" 
     capture_lex $P365
 .annotate 'line', 105
     new $P334, "Undef"
@@ -8101,7 +8510,7 @@
     set $P361, $P363
     goto if_362_end
   if_362:
-    .const 'Sub' $P365 = "28_1280467469.30058" 
+    .const 'Sub' $P365 = "28_1282323995.38516" 
     capture_lex $P365
     $P442 = $P365()
     set $P361, $P442
@@ -8113,11 +8522,11 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block364"  :anon :subid("28_1280467469.30058") :outer("27_1280467469.30058")
+.sub "_block364"  :anon :subid("28_1282323995.38516") :outer("27_1282323995.38516")
 .annotate 'line', 115
-    .const 'Sub' $P398 = "31_1280467469.30058" 
+    .const 'Sub' $P398 = "31_1282323995.38516" 
     capture_lex $P398
-    .const 'Sub' $P371 = "29_1280467469.30058" 
+    .const 'Sub' $P371 = "29_1282323995.38516" 
     capture_lex $P371
 .annotate 'line', 117
     new $P366, "Undef"
@@ -8128,7 +8537,7 @@
     store_lex "$code", $P368
     find_lex $P369, "$output"
 .annotate 'line', 118
-    .const 'Sub' $P371 = "29_1280467469.30058" 
+    .const 'Sub' $P371 = "29_1282323995.38516" 
     capture_lex $P371
     $P371()
 .annotate 'line', 125
@@ -8141,7 +8550,7 @@
   vivify_67:
     defined $I396, $P395
     unless $I396, if_394_end
-    .const 'Sub' $P398 = "31_1280467469.30058" 
+    .const 'Sub' $P398 = "31_1282323995.38516" 
     capture_lex $P398
     $P398()
   if_394_end:
@@ -8195,9 +8604,9 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block370"  :anon :subid("29_1280467469.30058") :outer("28_1280467469.30058")
+.sub "_block370"  :anon :subid("29_1282323995.38516") :outer("28_1282323995.38516")
 .annotate 'line', 118
-    .const 'Sub' $P383 = "30_1280467469.30058" 
+    .const 'Sub' $P383 = "30_1282323995.38516" 
     capture_lex $P383
     new $P379, 'ExceptionHandler'
     set_addr $P379, control_378
@@ -8217,7 +8626,7 @@
 .annotate 'line', 120
     .local pmc exception 
     .get_results (exception) 
-    .const 'Sub' $P383 = "30_1280467469.30058" 
+    .const 'Sub' $P383 = "30_1282323995.38516" 
     newclosure $P391, $P383
     $P391(exception)
     new $P392, 'Integer'
@@ -8237,7 +8646,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block382"  :anon :subid("30_1280467469.30058") :outer("29_1280467469.30058")
+.sub "_block382"  :anon :subid("30_1282323995.38516") :outer("29_1282323995.38516")
     .param pmc param_384
 .annotate 'line', 120
     .lex "$_", param_384
@@ -8260,9 +8669,9 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block397"  :anon :subid("31_1280467469.30058") :outer("28_1280467469.30058")
+.sub "_block397"  :anon :subid("31_1282323995.38516") :outer("28_1282323995.38516")
 .annotate 'line', 125
-    .const 'Sub' $P409 = "32_1280467469.30058" 
+    .const 'Sub' $P409 = "32_1282323995.38516" 
     capture_lex $P409
 .annotate 'line', 126
     get_global $P399, "$interactive_ctx"
@@ -8299,7 +8708,7 @@
     unless $P403, loop416_done
     shift $P407, $P403
   loop416_redo:
-    .const 'Sub' $P409 = "32_1280467469.30058" 
+    .const 'Sub' $P409 = "32_1282323995.38516" 
     capture_lex $P409
     $P409($P407)
   loop416_next:
@@ -8322,7 +8731,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block408"  :anon :subid("32_1280467469.30058") :outer("31_1280467469.30058")
+.sub "_block408"  :anon :subid("32_1282323995.38516") :outer("31_1282323995.38516")
     .param pmc param_410
 .annotate 'line', 128
     .lex "$_", param_410
@@ -8344,12 +8753,12 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "eval"  :subid("33_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "eval"  :subid("33_1282323995.38516") :method :outer("11_1282323995.38516")
     .param pmc param_450
     .param pmc param_451 :slurpy
     .param pmc param_452 :slurpy :named
 .annotate 'line', 146
-    .const 'Sub' $P471 = "34_1280467469.30058" 
+    .const 'Sub' $P471 = "34_1282323995.38516" 
     capture_lex $P471
     new $P449, 'ExceptionHandler'
     set_addr $P449, control_448
@@ -8396,7 +8805,7 @@
     set $P460, $I469
   if_461_end:
     unless $P460, if_459_end
-    .const 'Sub' $P471 = "34_1280467469.30058" 
+    .const 'Sub' $P471 = "34_1282323995.38516" 
     capture_lex $P471
     $P471()
   if_459_end:
@@ -8413,7 +8822,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block470"  :anon :subid("34_1280467469.30058") :outer("33_1280467469.30058")
+.sub "_block470"  :anon :subid("34_1282323995.38516") :outer("33_1282323995.38516")
 .annotate 'line', 152
     new $P472, "Undef"
     .lex "$outer_ctx", $P472
@@ -8467,7 +8876,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "ctxsave"  :subid("35_1280467469.30058") :method :outer("11_1280467469.30058")
+.sub "ctxsave"  :subid("35_1282323995.38516") :method :outer("11_1282323995.38516")
 .annotate 'line', 165
     new $P491, 'ExceptionHandler'
     set_addr $P491, control_490
@@ -8495,9 +8904,9 @@
 
 
 .namespace []
-.sub "_block498" :load :anon :subid("36_1280467469.30058")
+.sub "_block498" :load :anon :subid("36_1282323995.38516")
 .annotate 'line', 1
-    .const 'Sub' $P500 = "10_1280467469.30058" 
+    .const 'Sub' $P500 = "10_1282323995.38516" 
     $P501 = $P500()
     .return ($P501)
 .end

Modified: branches/unshared_buffers/ext/nqp-rx/src/stage0/NQP-s0.pir
==============================================================================
--- branches/unshared_buffers/ext/nqp-rx/src/stage0/NQP-s0.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/ext/nqp-rx/src/stage0/NQP-s0.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -15,7 +15,7 @@
 ### .include 'gen/nqp-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467477.44751")
+.sub "_block11"  :anon :subid("10_1282324002.40722")
 .annotate 'line', 0
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
@@ -32,15 +32,15 @@
     $P1423 = $P14()
 .annotate 'line', 1
     .return ($P1423)
-    .const 'Sub' $P1425 = "371_1280467477.44751" 
+    .const 'Sub' $P1425 = "371_1282324002.40722" 
     .return ($P1425)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post372") :outer("10_1280467477.44751")
+.sub "" :load :init :subid("post372") :outer("10_1282324002.40722")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467477.44751" 
+    .const 'Sub' $P12 = "10_1282324002.40722" 
     .local pmc block
     set block, $P12
     $P1428 = get_root_global ["parrot"], "P6metaclass"
@@ -49,321 +49,321 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block13"  :subid("11_1280467477.44751") :outer("10_1280467477.44751")
+.sub "_block13"  :subid("11_1282324002.40722") :outer("10_1282324002.40722")
 .annotate 'line', 4
     get_hll_global $P1340, ["NQP";"Regex"], "_block1339" 
     capture_lex $P1340
-    .const 'Sub' $P1326 = "348_1280467477.44751" 
+    .const 'Sub' $P1326 = "348_1282324002.40722" 
     capture_lex $P1326
-    .const 'Sub' $P1320 = "346_1280467477.44751" 
+    .const 'Sub' $P1320 = "346_1282324002.40722" 
     capture_lex $P1320
-    .const 'Sub' $P1314 = "344_1280467477.44751" 
+    .const 'Sub' $P1314 = "344_1282324002.40722" 
     capture_lex $P1314
-    .const 'Sub' $P1308 = "342_1280467477.44751" 
+    .const 'Sub' $P1308 = "342_1282324002.40722" 
     capture_lex $P1308
-    .const 'Sub' $P1302 = "340_1280467477.44751" 
+    .const 'Sub' $P1302 = "340_1282324002.40722" 
     capture_lex $P1302
-    .const 'Sub' $P1296 = "338_1280467477.44751" 
+    .const 'Sub' $P1296 = "338_1282324002.40722" 
     capture_lex $P1296
-    .const 'Sub' $P1289 = "336_1280467477.44751" 
+    .const 'Sub' $P1289 = "336_1282324002.40722" 
     capture_lex $P1289
-    .const 'Sub' $P1282 = "334_1280467477.44751" 
+    .const 'Sub' $P1282 = "334_1282324002.40722" 
     capture_lex $P1282
-    .const 'Sub' $P1275 = "332_1280467477.44751" 
+    .const 'Sub' $P1275 = "332_1282324002.40722" 
     capture_lex $P1275
-    .const 'Sub' $P1268 = "330_1280467477.44751" 
+    .const 'Sub' $P1268 = "330_1282324002.40722" 
     capture_lex $P1268
-    .const 'Sub' $P1262 = "328_1280467477.44751" 
+    .const 'Sub' $P1262 = "328_1282324002.40722" 
     capture_lex $P1262
-    .const 'Sub' $P1255 = "326_1280467477.44751" 
+    .const 'Sub' $P1255 = "326_1282324002.40722" 
     capture_lex $P1255
-    .const 'Sub' $P1248 = "324_1280467477.44751" 
+    .const 'Sub' $P1248 = "324_1282324002.40722" 
     capture_lex $P1248
-    .const 'Sub' $P1241 = "322_1280467477.44751" 
+    .const 'Sub' $P1241 = "322_1282324002.40722" 
     capture_lex $P1241
-    .const 'Sub' $P1234 = "320_1280467477.44751" 
+    .const 'Sub' $P1234 = "320_1282324002.40722" 
     capture_lex $P1234
-    .const 'Sub' $P1227 = "318_1280467477.44751" 
+    .const 'Sub' $P1227 = "318_1282324002.40722" 
     capture_lex $P1227
-    .const 'Sub' $P1220 = "316_1280467477.44751" 
+    .const 'Sub' $P1220 = "316_1282324002.40722" 
     capture_lex $P1220
-    .const 'Sub' $P1213 = "314_1280467477.44751" 
+    .const 'Sub' $P1213 = "314_1282324002.40722" 
     capture_lex $P1213
-    .const 'Sub' $P1206 = "312_1280467477.44751" 
+    .const 'Sub' $P1206 = "312_1282324002.40722" 
     capture_lex $P1206
-    .const 'Sub' $P1199 = "310_1280467477.44751" 
+    .const 'Sub' $P1199 = "310_1282324002.40722" 
     capture_lex $P1199
-    .const 'Sub' $P1192 = "308_1280467477.44751" 
+    .const 'Sub' $P1192 = "308_1282324002.40722" 
     capture_lex $P1192
-    .const 'Sub' $P1185 = "306_1280467477.44751" 
+    .const 'Sub' $P1185 = "306_1282324002.40722" 
     capture_lex $P1185
-    .const 'Sub' $P1178 = "304_1280467477.44751" 
+    .const 'Sub' $P1178 = "304_1282324002.40722" 
     capture_lex $P1178
-    .const 'Sub' $P1171 = "302_1280467477.44751" 
+    .const 'Sub' $P1171 = "302_1282324002.40722" 
     capture_lex $P1171
-    .const 'Sub' $P1164 = "300_1280467477.44751" 
+    .const 'Sub' $P1164 = "300_1282324002.40722" 
     capture_lex $P1164
-    .const 'Sub' $P1157 = "298_1280467477.44751" 
+    .const 'Sub' $P1157 = "298_1282324002.40722" 
     capture_lex $P1157
-    .const 'Sub' $P1150 = "296_1280467477.44751" 
+    .const 'Sub' $P1150 = "296_1282324002.40722" 
     capture_lex $P1150
-    .const 'Sub' $P1143 = "294_1280467477.44751" 
+    .const 'Sub' $P1143 = "294_1282324002.40722" 
     capture_lex $P1143
-    .const 'Sub' $P1136 = "292_1280467477.44751" 
+    .const 'Sub' $P1136 = "292_1282324002.40722" 
     capture_lex $P1136
-    .const 'Sub' $P1129 = "290_1280467477.44751" 
+    .const 'Sub' $P1129 = "290_1282324002.40722" 
     capture_lex $P1129
-    .const 'Sub' $P1122 = "288_1280467477.44751" 
+    .const 'Sub' $P1122 = "288_1282324002.40722" 
     capture_lex $P1122
-    .const 'Sub' $P1115 = "286_1280467477.44751" 
+    .const 'Sub' $P1115 = "286_1282324002.40722" 
     capture_lex $P1115
-    .const 'Sub' $P1108 = "284_1280467477.44751" 
+    .const 'Sub' $P1108 = "284_1282324002.40722" 
     capture_lex $P1108
-    .const 'Sub' $P1101 = "282_1280467477.44751" 
+    .const 'Sub' $P1101 = "282_1282324002.40722" 
     capture_lex $P1101
-    .const 'Sub' $P1094 = "280_1280467477.44751" 
+    .const 'Sub' $P1094 = "280_1282324002.40722" 
     capture_lex $P1094
-    .const 'Sub' $P1087 = "278_1280467477.44751" 
+    .const 'Sub' $P1087 = "278_1282324002.40722" 
     capture_lex $P1087
-    .const 'Sub' $P1080 = "276_1280467477.44751" 
+    .const 'Sub' $P1080 = "276_1282324002.40722" 
     capture_lex $P1080
-    .const 'Sub' $P1073 = "274_1280467477.44751" 
+    .const 'Sub' $P1073 = "274_1282324002.40722" 
     capture_lex $P1073
-    .const 'Sub' $P1066 = "272_1280467477.44751" 
+    .const 'Sub' $P1066 = "272_1282324002.40722" 
     capture_lex $P1066
-    .const 'Sub' $P1059 = "270_1280467477.44751" 
+    .const 'Sub' $P1059 = "270_1282324002.40722" 
     capture_lex $P1059
-    .const 'Sub' $P1053 = "268_1280467477.44751" 
+    .const 'Sub' $P1053 = "268_1282324002.40722" 
     capture_lex $P1053
-    .const 'Sub' $P1046 = "266_1280467477.44751" 
+    .const 'Sub' $P1046 = "266_1282324002.40722" 
     capture_lex $P1046
-    .const 'Sub' $P1039 = "264_1280467477.44751" 
+    .const 'Sub' $P1039 = "264_1282324002.40722" 
     capture_lex $P1039
-    .const 'Sub' $P1032 = "262_1280467477.44751" 
+    .const 'Sub' $P1032 = "262_1282324002.40722" 
     capture_lex $P1032
-    .const 'Sub' $P1025 = "260_1280467477.44751" 
+    .const 'Sub' $P1025 = "260_1282324002.40722" 
     capture_lex $P1025
-    .const 'Sub' $P1018 = "258_1280467477.44751" 
+    .const 'Sub' $P1018 = "258_1282324002.40722" 
     capture_lex $P1018
-    .const 'Sub' $P1011 = "256_1280467477.44751" 
+    .const 'Sub' $P1011 = "256_1282324002.40722" 
     capture_lex $P1011
-    .const 'Sub' $P1004 = "254_1280467477.44751" 
+    .const 'Sub' $P1004 = "254_1282324002.40722" 
     capture_lex $P1004
-    .const 'Sub' $P998 = "252_1280467477.44751" 
+    .const 'Sub' $P998 = "252_1282324002.40722" 
     capture_lex $P998
-    .const 'Sub' $P992 = "250_1280467477.44751" 
+    .const 'Sub' $P992 = "250_1282324002.40722" 
     capture_lex $P992
-    .const 'Sub' $P987 = "248_1280467477.44751" 
+    .const 'Sub' $P987 = "248_1282324002.40722" 
     capture_lex $P987
-    .const 'Sub' $P981 = "246_1280467477.44751" 
+    .const 'Sub' $P981 = "246_1282324002.40722" 
     capture_lex $P981
-    .const 'Sub' $P975 = "244_1280467477.44751" 
+    .const 'Sub' $P975 = "244_1282324002.40722" 
     capture_lex $P975
-    .const 'Sub' $P970 = "242_1280467477.44751" 
+    .const 'Sub' $P970 = "242_1282324002.40722" 
     capture_lex $P970
-    .const 'Sub' $P965 = "240_1280467477.44751" 
+    .const 'Sub' $P965 = "240_1282324002.40722" 
     capture_lex $P965
-    .const 'Sub' $P957 = "238_1280467477.44751" 
+    .const 'Sub' $P957 = "238_1282324002.40722" 
     capture_lex $P957
-    .const 'Sub' $P948 = "236_1280467477.44751" 
+    .const 'Sub' $P948 = "236_1282324002.40722" 
     capture_lex $P948
-    .const 'Sub' $P943 = "234_1280467477.44751" 
+    .const 'Sub' $P943 = "234_1282324002.40722" 
     capture_lex $P943
-    .const 'Sub' $P938 = "232_1280467477.44751" 
+    .const 'Sub' $P938 = "232_1282324002.40722" 
     capture_lex $P938
-    .const 'Sub' $P933 = "230_1280467477.44751" 
+    .const 'Sub' $P933 = "230_1282324002.40722" 
     capture_lex $P933
-    .const 'Sub' $P925 = "228_1280467477.44751" 
+    .const 'Sub' $P925 = "228_1282324002.40722" 
     capture_lex $P925
-    .const 'Sub' $P917 = "226_1280467477.44751" 
+    .const 'Sub' $P917 = "226_1282324002.40722" 
     capture_lex $P917
-    .const 'Sub' $P912 = "224_1280467477.44751" 
+    .const 'Sub' $P912 = "224_1282324002.40722" 
     capture_lex $P912
-    .const 'Sub' $P907 = "222_1280467477.44751" 
+    .const 'Sub' $P907 = "222_1282324002.40722" 
     capture_lex $P907
-    .const 'Sub' $P902 = "220_1280467477.44751" 
+    .const 'Sub' $P902 = "220_1282324002.40722" 
     capture_lex $P902
-    .const 'Sub' $P896 = "218_1280467477.44751" 
+    .const 'Sub' $P896 = "218_1282324002.40722" 
     capture_lex $P896
-    .const 'Sub' $P890 = "216_1280467477.44751" 
+    .const 'Sub' $P890 = "216_1282324002.40722" 
     capture_lex $P890
-    .const 'Sub' $P884 = "214_1280467477.44751" 
+    .const 'Sub' $P884 = "214_1282324002.40722" 
     capture_lex $P884
-    .const 'Sub' $P878 = "212_1280467477.44751" 
+    .const 'Sub' $P878 = "212_1282324002.40722" 
     capture_lex $P878
-    .const 'Sub' $P872 = "210_1280467477.44751" 
+    .const 'Sub' $P872 = "210_1282324002.40722" 
     capture_lex $P872
-    .const 'Sub' $P867 = "208_1280467477.44751" 
+    .const 'Sub' $P867 = "208_1282324002.40722" 
     capture_lex $P867
-    .const 'Sub' $P862 = "206_1280467477.44751" 
+    .const 'Sub' $P862 = "206_1282324002.40722" 
     capture_lex $P862
-    .const 'Sub' $P850 = "202_1280467477.44751" 
+    .const 'Sub' $P850 = "202_1282324002.40722" 
     capture_lex $P850
-    .const 'Sub' $P842 = "200_1280467477.44751" 
+    .const 'Sub' $P842 = "200_1282324002.40722" 
     capture_lex $P842
-    .const 'Sub' $P836 = "198_1280467477.44751" 
+    .const 'Sub' $P836 = "198_1282324002.40722" 
     capture_lex $P836
-    .const 'Sub' $P829 = "196_1280467477.44751" 
+    .const 'Sub' $P829 = "196_1282324002.40722" 
     capture_lex $P829
-    .const 'Sub' $P823 = "194_1280467477.44751" 
+    .const 'Sub' $P823 = "194_1282324002.40722" 
     capture_lex $P823
-    .const 'Sub' $P815 = "192_1280467477.44751" 
+    .const 'Sub' $P815 = "192_1282324002.40722" 
     capture_lex $P815
-    .const 'Sub' $P807 = "190_1280467477.44751" 
+    .const 'Sub' $P807 = "190_1282324002.40722" 
     capture_lex $P807
-    .const 'Sub' $P801 = "188_1280467477.44751" 
+    .const 'Sub' $P801 = "188_1282324002.40722" 
     capture_lex $P801
-    .const 'Sub' $P795 = "186_1280467477.44751" 
+    .const 'Sub' $P795 = "186_1282324002.40722" 
     capture_lex $P795
-    .const 'Sub' $P781 = "182_1280467477.44751" 
+    .const 'Sub' $P781 = "182_1282324002.40722" 
     capture_lex $P781
-    .const 'Sub' $P744 = "180_1280467477.44751" 
+    .const 'Sub' $P744 = "180_1282324002.40722" 
     capture_lex $P744
-    .const 'Sub' $P735 = "178_1280467477.44751" 
+    .const 'Sub' $P735 = "178_1282324002.40722" 
     capture_lex $P735
-    .const 'Sub' $P729 = "176_1280467477.44751" 
+    .const 'Sub' $P729 = "176_1282324002.40722" 
     capture_lex $P729
-    .const 'Sub' $P719 = "174_1280467477.44751" 
+    .const 'Sub' $P719 = "174_1282324002.40722" 
     capture_lex $P719
-    .const 'Sub' $P706 = "172_1280467477.44751" 
+    .const 'Sub' $P706 = "172_1282324002.40722" 
     capture_lex $P706
-    .const 'Sub' $P699 = "170_1280467477.44751" 
+    .const 'Sub' $P699 = "170_1282324002.40722" 
     capture_lex $P699
-    .const 'Sub' $P691 = "168_1280467477.44751" 
+    .const 'Sub' $P691 = "168_1282324002.40722" 
     capture_lex $P691
-    .const 'Sub' $P681 = "166_1280467477.44751" 
+    .const 'Sub' $P681 = "166_1282324002.40722" 
     capture_lex $P681
-    .const 'Sub' $P657 = "162_1280467477.44751" 
+    .const 'Sub' $P657 = "162_1282324002.40722" 
     capture_lex $P657
-    .const 'Sub' $P634 = "160_1280467477.44751" 
+    .const 'Sub' $P634 = "160_1282324002.40722" 
     capture_lex $P634
-    .const 'Sub' $P627 = "158_1280467477.44751" 
+    .const 'Sub' $P627 = "158_1282324002.40722" 
     capture_lex $P627
-    .const 'Sub' $P620 = "156_1280467477.44751" 
+    .const 'Sub' $P620 = "156_1282324002.40722" 
     capture_lex $P620
-    .const 'Sub' $P610 = "152_1280467477.44751" 
+    .const 'Sub' $P610 = "152_1282324002.40722" 
     capture_lex $P610
-    .const 'Sub' $P602 = "150_1280467477.44751" 
+    .const 'Sub' $P602 = "150_1282324002.40722" 
     capture_lex $P602
-    .const 'Sub' $P596 = "148_1280467477.44751" 
+    .const 'Sub' $P596 = "148_1282324002.40722" 
     capture_lex $P596
-    .const 'Sub' $P583 = "146_1280467477.44751" 
+    .const 'Sub' $P583 = "146_1282324002.40722" 
     capture_lex $P583
-    .const 'Sub' $P576 = "144_1280467477.44751" 
+    .const 'Sub' $P576 = "144_1282324002.40722" 
     capture_lex $P576
-    .const 'Sub' $P569 = "142_1280467477.44751" 
+    .const 'Sub' $P569 = "142_1282324002.40722" 
     capture_lex $P569
-    .const 'Sub' $P562 = "140_1280467477.44751" 
+    .const 'Sub' $P562 = "140_1282324002.40722" 
     capture_lex $P562
-    .const 'Sub' $P535 = "136_1280467477.44751" 
+    .const 'Sub' $P535 = "136_1282324002.40722" 
     capture_lex $P535
-    .const 'Sub' $P526 = "134_1280467477.44751" 
+    .const 'Sub' $P526 = "134_1282324002.40722" 
     capture_lex $P526
-    .const 'Sub' $P519 = "132_1280467477.44751" 
+    .const 'Sub' $P519 = "132_1282324002.40722" 
     capture_lex $P519
-    .const 'Sub' $P510 = "128_1280467477.44751" 
+    .const 'Sub' $P510 = "128_1282324002.40722" 
     capture_lex $P510
-    .const 'Sub' $P505 = "126_1280467477.44751" 
+    .const 'Sub' $P505 = "126_1282324002.40722" 
     capture_lex $P505
-    .const 'Sub' $P493 = "124_1280467477.44751" 
+    .const 'Sub' $P493 = "124_1282324002.40722" 
     capture_lex $P493
-    .const 'Sub' $P481 = "122_1280467477.44751" 
+    .const 'Sub' $P481 = "122_1282324002.40722" 
     capture_lex $P481
-    .const 'Sub' $P474 = "120_1280467477.44751" 
+    .const 'Sub' $P474 = "120_1282324002.40722" 
     capture_lex $P474
-    .const 'Sub' $P469 = "118_1280467477.44751" 
+    .const 'Sub' $P469 = "118_1282324002.40722" 
     capture_lex $P469
-    .const 'Sub' $P463 = "116_1280467477.44751" 
+    .const 'Sub' $P463 = "116_1282324002.40722" 
     capture_lex $P463
-    .const 'Sub' $P457 = "114_1280467477.44751" 
+    .const 'Sub' $P457 = "114_1282324002.40722" 
     capture_lex $P457
-    .const 'Sub' $P447 = "111_1280467477.44751" 
+    .const 'Sub' $P447 = "111_1282324002.40722" 
     capture_lex $P447
-    .const 'Sub' $P441 = "109_1280467477.44751" 
+    .const 'Sub' $P441 = "109_1282324002.40722" 
     capture_lex $P441
-    .const 'Sub' $P435 = "107_1280467477.44751" 
+    .const 'Sub' $P435 = "107_1282324002.40722" 
     capture_lex $P435
-    .const 'Sub' $P429 = "105_1280467477.44751" 
+    .const 'Sub' $P429 = "105_1282324002.40722" 
     capture_lex $P429
-    .const 'Sub' $P423 = "103_1280467477.44751" 
+    .const 'Sub' $P423 = "103_1282324002.40722" 
     capture_lex $P423
-    .const 'Sub' $P417 = "101_1280467477.44751" 
+    .const 'Sub' $P417 = "101_1282324002.40722" 
     capture_lex $P417
-    .const 'Sub' $P411 = "99_1280467477.44751" 
+    .const 'Sub' $P411 = "99_1282324002.40722" 
     capture_lex $P411
-    .const 'Sub' $P402 = "97_1280467477.44751" 
+    .const 'Sub' $P402 = "97_1282324002.40722" 
     capture_lex $P402
-    .const 'Sub' $P393 = "95_1280467477.44751" 
+    .const 'Sub' $P393 = "95_1282324002.40722" 
     capture_lex $P393
-    .const 'Sub' $P384 = "93_1280467477.44751" 
+    .const 'Sub' $P384 = "93_1282324002.40722" 
     capture_lex $P384
-    .const 'Sub' $P371 = "89_1280467477.44751" 
+    .const 'Sub' $P371 = "89_1282324002.40722" 
     capture_lex $P371
-    .const 'Sub' $P362 = "87_1280467477.44751" 
+    .const 'Sub' $P362 = "87_1282324002.40722" 
     capture_lex $P362
-    .const 'Sub' $P352 = "83_1280467477.44751" 
+    .const 'Sub' $P352 = "83_1282324002.40722" 
     capture_lex $P352
-    .const 'Sub' $P345 = "81_1280467477.44751" 
+    .const 'Sub' $P345 = "81_1282324002.40722" 
     capture_lex $P345
-    .const 'Sub' $P338 = "79_1280467477.44751" 
+    .const 'Sub' $P338 = "79_1282324002.40722" 
     capture_lex $P338
-    .const 'Sub' $P326 = "75_1280467477.44751" 
+    .const 'Sub' $P326 = "75_1282324002.40722" 
     capture_lex $P326
-    .const 'Sub' $P318 = "73_1280467477.44751" 
+    .const 'Sub' $P318 = "73_1282324002.40722" 
     capture_lex $P318
-    .const 'Sub' $P310 = "71_1280467477.44751" 
+    .const 'Sub' $P310 = "71_1282324002.40722" 
     capture_lex $P310
-    .const 'Sub' $P290 = "69_1280467477.44751" 
+    .const 'Sub' $P290 = "69_1282324002.40722" 
     capture_lex $P290
-    .const 'Sub' $P281 = "67_1280467477.44751" 
+    .const 'Sub' $P281 = "67_1282324002.40722" 
     capture_lex $P281
-    .const 'Sub' $P263 = "64_1280467477.44751" 
+    .const 'Sub' $P263 = "64_1282324002.40722" 
     capture_lex $P263
-    .const 'Sub' $P245 = "62_1280467477.44751" 
+    .const 'Sub' $P245 = "62_1282324002.40722" 
     capture_lex $P245
-    .const 'Sub' $P236 = "58_1280467477.44751" 
+    .const 'Sub' $P236 = "58_1282324002.40722" 
     capture_lex $P236
-    .const 'Sub' $P231 = "56_1280467477.44751" 
+    .const 'Sub' $P231 = "56_1282324002.40722" 
     capture_lex $P231
-    .const 'Sub' $P222 = "52_1280467477.44751" 
+    .const 'Sub' $P222 = "52_1282324002.40722" 
     capture_lex $P222
-    .const 'Sub' $P217 = "50_1280467477.44751" 
+    .const 'Sub' $P217 = "50_1282324002.40722" 
     capture_lex $P217
-    .const 'Sub' $P212 = "48_1280467477.44751" 
+    .const 'Sub' $P212 = "48_1282324002.40722" 
     capture_lex $P212
-    .const 'Sub' $P203 = "46_1280467477.44751" 
+    .const 'Sub' $P203 = "46_1282324002.40722" 
     capture_lex $P203
-    .const 'Sub' $P196 = "44_1280467477.44751" 
+    .const 'Sub' $P196 = "44_1282324002.40722" 
     capture_lex $P196
-    .const 'Sub' $P190 = "42_1280467477.44751" 
+    .const 'Sub' $P190 = "42_1282324002.40722" 
     capture_lex $P190
-    .const 'Sub' $P182 = "40_1280467477.44751" 
+    .const 'Sub' $P182 = "40_1282324002.40722" 
     capture_lex $P182
-    .const 'Sub' $P176 = "38_1280467477.44751" 
+    .const 'Sub' $P176 = "38_1282324002.40722" 
     capture_lex $P176
-    .const 'Sub' $P170 = "36_1280467477.44751" 
+    .const 'Sub' $P170 = "36_1282324002.40722" 
     capture_lex $P170
-    .const 'Sub' $P155 = "33_1280467477.44751" 
+    .const 'Sub' $P155 = "33_1282324002.40722" 
     capture_lex $P155
-    .const 'Sub' $P141 = "31_1280467477.44751" 
+    .const 'Sub' $P141 = "31_1282324002.40722" 
     capture_lex $P141
-    .const 'Sub' $P134 = "29_1280467477.44751" 
+    .const 'Sub' $P134 = "29_1282324002.40722" 
     capture_lex $P134
-    .const 'Sub' $P95 = "26_1280467477.44751" 
+    .const 'Sub' $P95 = "26_1282324002.40722" 
     capture_lex $P95
-    .const 'Sub' $P80 = "23_1280467477.44751" 
+    .const 'Sub' $P80 = "23_1282324002.40722" 
     capture_lex $P80
-    .const 'Sub' $P69 = "21_1280467477.44751" 
+    .const 'Sub' $P69 = "21_1282324002.40722" 
     capture_lex $P69
-    .const 'Sub' $P57 = "19_1280467477.44751" 
+    .const 'Sub' $P57 = "19_1282324002.40722" 
     capture_lex $P57
-    .const 'Sub' $P49 = "17_1280467477.44751" 
+    .const 'Sub' $P49 = "17_1282324002.40722" 
     capture_lex $P49
-    .const 'Sub' $P42 = "15_1280467477.44751" 
+    .const 'Sub' $P42 = "15_1282324002.40722" 
     capture_lex $P42
-    .const 'Sub' $P35 = "13_1280467477.44751" 
+    .const 'Sub' $P35 = "13_1282324002.40722" 
     capture_lex $P35
-    .const 'Sub' $P15 = "12_1280467477.44751" 
+    .const 'Sub' $P15 = "12_1282324002.40722" 
     capture_lex $P15
     $P0 = find_dynamic_lex "$*CTXSAVE"
     if null $P0 goto ctxsave_done
@@ -377,13 +377,13 @@
     $P1402 = $P1340()
 .annotate 'line', 4
     .return ($P1402)
-    .const 'Sub' $P1404 = "370_1280467477.44751" 
+    .const 'Sub' $P1404 = "370_1282324002.40722" 
     .return ($P1404)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "" :load :init :subid("post373") :outer("11_1280467477.44751")
+.sub "" :load :init :subid("post373") :outer("11_1282324002.40722")
 .annotate 'line', 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     .local pmc block
@@ -441,7 +441,7 @@
 
 .namespace ["NQP";"Grammar"]
 .include "except_types.pasm"
-.sub "TOP"  :subid("12_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "TOP"  :subid("12_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
@@ -531,7 +531,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "identifier"  :subid("13_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "identifier"  :subid("13_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx36_tgt
     .local int rx36_pos
@@ -539,7 +539,9 @@
     .local int rx36_eos
     .local int rx36_rep
     .local pmc rx36_cur
+    .local pmc rx36_debug
     (rx36_cur, rx36_pos, rx36_tgt, $I10) = self."!cursor_start"()
+    getattribute rx36_debug, rx36_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx36_cur
     .local pmc match
     .lex "$/", match
@@ -551,7 +553,9 @@
     substr rx36_tgt, rx36_tgt, rx36_off
   rx36_start:
     eq $I10, 1, rx36_restart
-    rx36_cur."!cursor_debug"("START ", "identifier")
+    if_null rx36_debug, debug_384
+    rx36_cur."!cursor_debug"("START", "identifier")
+  debug_384:
     $I10 = self.'from'()
     ne $I10, -1, rxscan40_done
     goto rxscan40_scan
@@ -594,11 +598,15 @@
   rxquantr41_done:
   # rx pass
     rx36_cur."!cursor_pass"(rx36_pos, "identifier")
-    rx36_cur."!cursor_debug"("PASS  ", "identifier", " at pos=", rx36_pos)
+    if_null rx36_debug, debug_385
+    rx36_cur."!cursor_debug"("PASS", "identifier", " at pos=", rx36_pos)
+  debug_385:
     .return (rx36_cur)
   rx36_restart:
 .annotate 'line', 4
-    rx36_cur."!cursor_debug"("NEXT ", "identifier")
+    if_null rx36_debug, debug_386
+    rx36_cur."!cursor_debug"("NEXT", "identifier")
+  debug_386:
   rx36_fail:
     (rx36_rep, rx36_pos, $I10, $P10) = rx36_cur."!mark_fail"(0)
     lt rx36_pos, -1, rx36_done
@@ -606,14 +614,16 @@
     jump $I10
   rx36_done:
     rx36_cur."!cursor_fail"()
-    rx36_cur."!cursor_debug"("FAIL  ", "identifier")
+    if_null rx36_debug, debug_387
+    rx36_cur."!cursor_debug"("FAIL", "identifier")
+  debug_387:
     .return (rx36_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("14_1280467477.44751") :method
+.sub "!PREFIX__identifier"  :subid("14_1282324002.40722") :method
 .annotate 'line', 4
     $P38 = self."!PREFIX__!subrule"("ident", "")
     new $P39, "ResizablePMCArray"
@@ -623,7 +633,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "name"  :subid("15_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "name"  :subid("15_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx43_tgt
     .local int rx43_pos
@@ -631,8 +641,10 @@
     .local int rx43_eos
     .local int rx43_rep
     .local pmc rx43_cur
+    .local pmc rx43_debug
     (rx43_cur, rx43_pos, rx43_tgt, $I10) = self."!cursor_start"()
     rx43_cur."!cursor_caparray"("identifier")
+    getattribute rx43_debug, rx43_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx43_cur
     .local pmc match
     .lex "$/", match
@@ -644,7 +656,9 @@
     substr rx43_tgt, rx43_tgt, rx43_off
   rx43_start:
     eq $I10, 1, rx43_restart
-    rx43_cur."!cursor_debug"("START ", "name")
+    if_null rx43_debug, debug_388
+    rx43_cur."!cursor_debug"("START", "name")
+  debug_388:
     $I10 = self.'from'()
     ne $I10, -1, rxscan46_done
     goto rxscan46_scan
@@ -690,11 +704,15 @@
   rxquantr47_done:
   # rx pass
     rx43_cur."!cursor_pass"(rx43_pos, "name")
-    rx43_cur."!cursor_debug"("PASS  ", "name", " at pos=", rx43_pos)
+    if_null rx43_debug, debug_389
+    rx43_cur."!cursor_debug"("PASS", "name", " at pos=", rx43_pos)
+  debug_389:
     .return (rx43_cur)
   rx43_restart:
 .annotate 'line', 4
-    rx43_cur."!cursor_debug"("NEXT ", "name")
+    if_null rx43_debug, debug_390
+    rx43_cur."!cursor_debug"("NEXT", "name")
+  debug_390:
   rx43_fail:
     (rx43_rep, rx43_pos, $I10, $P10) = rx43_cur."!mark_fail"(0)
     lt rx43_pos, -1, rx43_done
@@ -702,14 +720,16 @@
     jump $I10
   rx43_done:
     rx43_cur."!cursor_fail"()
-    rx43_cur."!cursor_debug"("FAIL  ", "name")
+    if_null rx43_debug, debug_391
+    rx43_cur."!cursor_debug"("FAIL", "name")
+  debug_391:
     .return (rx43_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__name"  :subid("16_1280467477.44751") :method
+.sub "!PREFIX__name"  :subid("16_1282324002.40722") :method
 .annotate 'line', 4
     new $P45, "ResizablePMCArray"
     push $P45, ""
@@ -718,7 +738,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "deflongname"  :subid("17_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "deflongname"  :subid("17_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx50_tgt
     .local int rx50_pos
@@ -726,8 +746,10 @@
     .local int rx50_eos
     .local int rx50_rep
     .local pmc rx50_cur
+    .local pmc rx50_debug
     (rx50_cur, rx50_pos, rx50_tgt, $I10) = self."!cursor_start"()
     rx50_cur."!cursor_caparray"("colonpair")
+    getattribute rx50_debug, rx50_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx50_cur
     .local pmc match
     .lex "$/", match
@@ -739,7 +761,9 @@
     substr rx50_tgt, rx50_tgt, rx50_off
   rx50_start:
     eq $I10, 1, rx50_restart
-    rx50_cur."!cursor_debug"("START ", "deflongname")
+    if_null rx50_debug, debug_392
+    rx50_cur."!cursor_debug"("START", "deflongname")
+  debug_392:
     $I10 = self.'from'()
     ne $I10, -1, rxscan54_done
     goto rxscan54_scan
@@ -783,11 +807,15 @@
 .annotate 'line', 21
   # rx pass
     rx50_cur."!cursor_pass"(rx50_pos, "deflongname")
-    rx50_cur."!cursor_debug"("PASS  ", "deflongname", " at pos=", rx50_pos)
+    if_null rx50_debug, debug_393
+    rx50_cur."!cursor_debug"("PASS", "deflongname", " at pos=", rx50_pos)
+  debug_393:
     .return (rx50_cur)
   rx50_restart:
 .annotate 'line', 4
-    rx50_cur."!cursor_debug"("NEXT ", "deflongname")
+    if_null rx50_debug, debug_394
+    rx50_cur."!cursor_debug"("NEXT", "deflongname")
+  debug_394:
   rx50_fail:
     (rx50_rep, rx50_pos, $I10, $P10) = rx50_cur."!mark_fail"(0)
     lt rx50_pos, -1, rx50_done
@@ -795,14 +823,16 @@
     jump $I10
   rx50_done:
     rx50_cur."!cursor_fail"()
-    rx50_cur."!cursor_debug"("FAIL  ", "deflongname")
+    if_null rx50_debug, debug_395
+    rx50_cur."!cursor_debug"("FAIL", "deflongname")
+  debug_395:
     .return (rx50_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__deflongname"  :subid("18_1280467477.44751") :method
+.sub "!PREFIX__deflongname"  :subid("18_1282324002.40722") :method
 .annotate 'line', 4
     $P52 = self."!PREFIX__!subrule"("identifier", "")
     new $P53, "ResizablePMCArray"
@@ -812,7 +842,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ENDSTMT"  :subid("19_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "ENDSTMT"  :subid("19_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx58_tgt
     .local int rx58_pos
@@ -820,7 +850,9 @@
     .local int rx58_eos
     .local int rx58_rep
     .local pmc rx58_cur
+    .local pmc rx58_debug
     (rx58_cur, rx58_pos, rx58_tgt, $I10) = self."!cursor_start"()
+    getattribute rx58_debug, rx58_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx58_cur
     .local pmc match
     .lex "$/", match
@@ -832,7 +864,9 @@
     substr rx58_tgt, rx58_tgt, rx58_off
   rx58_start:
     eq $I10, 1, rx58_restart
-    rx58_cur."!cursor_debug"("START ", "ENDSTMT")
+    if_null rx58_debug, debug_396
+    rx58_cur."!cursor_debug"("START", "ENDSTMT")
+  debug_396:
     $I10 = self.'from'()
     ne $I10, -1, rxscan61_done
     goto rxscan61_scan
@@ -855,23 +889,21 @@
     set_addr $I10, alt63_1
     rx58_cur."!mark_push"(0, rx58_pos, $I10)
 .annotate 'line', 27
-  # rx rxquantr64 ** 0..*
-    set_addr $I10, rxquantr64_done
-    rx58_cur."!mark_push"(0, rx58_pos, $I10)
-  rxquantr64_loop:
-  # rx enumcharlist negate=0 
-    ge rx58_pos, rx58_eos, rx58_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx58_pos, rx58_off
+    set rx58_rep, 0
+    sub $I12, rx58_eos, rx58_pos
+  rxenumcharlistq64_loop:
+    le $I12, 0, rxenumcharlistq64_done
     substr $S10, rx58_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, rx58_fail
-    inc rx58_pos
-    set_addr $I10, rxquantr64_done
-    (rx58_rep) = rx58_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr64_done
-    rx58_cur."!mark_push"(rx58_rep, rx58_pos, $I10)
-    goto rxquantr64_loop
-  rxquantr64_done:
+    lt $I11, 0, rxenumcharlistq64_done
+    inc rx58_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq64_loop
+  rxenumcharlistq64_done:
+    add rx58_pos, rx58_pos, rx58_rep
   # rxanchor eol
     sub $I10, rx58_pos, rx58_off
     is_cclass $I11, 4096, rx58_tgt, $I10
@@ -940,11 +972,15 @@
 .annotate 'line', 25
   # rx pass
     rx58_cur."!cursor_pass"(rx58_pos, "ENDSTMT")
-    rx58_cur."!cursor_debug"("PASS  ", "ENDSTMT", " at pos=", rx58_pos)
+    if_null rx58_debug, debug_397
+    rx58_cur."!cursor_debug"("PASS", "ENDSTMT", " at pos=", rx58_pos)
+  debug_397:
     .return (rx58_cur)
   rx58_restart:
 .annotate 'line', 4
-    rx58_cur."!cursor_debug"("NEXT ", "ENDSTMT")
+    if_null rx58_debug, debug_398
+    rx58_cur."!cursor_debug"("NEXT", "ENDSTMT")
+  debug_398:
   rx58_fail:
     (rx58_rep, rx58_pos, $I10, $P10) = rx58_cur."!mark_fail"(0)
     lt rx58_pos, -1, rx58_done
@@ -952,14 +988,16 @@
     jump $I10
   rx58_done:
     rx58_cur."!cursor_fail"()
-    rx58_cur."!cursor_debug"("FAIL  ", "ENDSTMT")
+    if_null rx58_debug, debug_399
+    rx58_cur."!cursor_debug"("FAIL", "ENDSTMT")
+  debug_399:
     .return (rx58_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ENDSTMT"  :subid("20_1280467477.44751") :method
+.sub "!PREFIX__ENDSTMT"  :subid("20_1282324002.40722") :method
 .annotate 'line', 4
     new $P60, "ResizablePMCArray"
     push $P60, ""
@@ -968,7 +1006,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ws"  :subid("21_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "ws"  :subid("21_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx70_tgt
     .local int rx70_pos
@@ -976,7 +1014,9 @@
     .local int rx70_eos
     .local int rx70_rep
     .local pmc rx70_cur
+    .local pmc rx70_debug
     (rx70_cur, rx70_pos, rx70_tgt, $I10) = self."!cursor_start"()
+    getattribute rx70_debug, rx70_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx70_cur
     .local pmc match
     .lex "$/", match
@@ -988,7 +1028,9 @@
     substr rx70_tgt, rx70_tgt, rx70_off
   rx70_start:
     eq $I10, 1, rx70_restart
-    rx70_cur."!cursor_debug"("START ", "ws")
+    if_null rx70_debug, debug_400
+    rx70_cur."!cursor_debug"("START", "ws")
+  debug_400:
     $I10 = self.'from'()
     ne $I10, -1, rxscan73_done
     goto rxscan73_scan
@@ -1026,23 +1068,22 @@
 .annotate 'line', 35
     set_addr $I10, alt76_1
     rx70_cur."!mark_push"(0, rx70_pos, $I10)
-  # rx rxquantr77 ** 1..*
-    set_addr $I10, rxquantr77_done
-    rx70_cur."!mark_push"(0, -1, $I10)
-  rxquantr77_loop:
-  # rx enumcharlist negate=0 
-    ge rx70_pos, rx70_eos, rx70_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx70_pos, rx70_off
+    set rx70_rep, 0
+    sub $I12, rx70_eos, rx70_pos
+  rxenumcharlistq77_loop:
+    le $I12, 0, rxenumcharlistq77_done
     substr $S10, rx70_tgt, $I10, 1
     index $I11, unicode:"\n\x{b}\f\r\x{85}\u2028\u2029", $S10
-    lt $I11, 0, rx70_fail
-    inc rx70_pos
-    set_addr $I10, rxquantr77_done
-    (rx70_rep) = rx70_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr77_done
-    rx70_cur."!mark_push"(rx70_rep, rx70_pos, $I10)
-    goto rxquantr77_loop
-  rxquantr77_done:
+    lt $I11, 0, rxenumcharlistq77_done
+    inc rx70_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq77_loop
+  rxenumcharlistq77_done:
+    lt rx70_rep, 1, rx70_fail
+    add rx70_pos, rx70_pos, rx70_rep
     goto alt76_end
   alt76_1:
     set_addr $I10, alt76_2
@@ -1052,8 +1093,8 @@
     add $I11, rx70_pos, 1
     gt $I11, rx70_eos, rx70_fail
     sub $I11, rx70_pos, rx70_off
-    substr $S10, rx70_tgt, $I11, 1
-    ne $S10, "#", rx70_fail
+    ord $I11, rx70_tgt, $I11
+    ne $I11, 35, rx70_fail
     add rx70_pos, 1
   # rx charclass_q N r 0..-1
     sub $I10, rx70_pos, rx70_off
@@ -1080,23 +1121,22 @@
     goto alt76_end
   alt76_3:
 .annotate 'line', 38
-  # rx rxquantr79 ** 1..*
-    set_addr $I10, rxquantr79_done
-    rx70_cur."!mark_push"(0, -1, $I10)
-  rxquantr79_loop:
-  # rx enumcharlist negate=0 
-    ge rx70_pos, rx70_eos, rx70_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx70_pos, rx70_off
+    set rx70_rep, 0
+    sub $I12, rx70_eos, rx70_pos
+  rxenumcharlistq79_loop:
+    le $I12, 0, rxenumcharlistq79_done
     substr $S10, rx70_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, rx70_fail
-    inc rx70_pos
-    set_addr $I10, rxquantr79_done
-    (rx70_rep) = rx70_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr79_done
-    rx70_cur."!mark_push"(rx70_rep, rx70_pos, $I10)
-    goto rxquantr79_loop
-  rxquantr79_done:
+    lt $I11, 0, rxenumcharlistq79_done
+    inc rx70_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq79_loop
+  rxenumcharlistq79_done:
+    lt rx70_rep, 1, rx70_fail
+    add rx70_pos, rx70_pos, rx70_rep
   alt76_end:
 .annotate 'line', 39
     set_addr $I10, rxquantr75_done
@@ -1114,11 +1154,15 @@
 .annotate 'line', 32
   # rx pass
     rx70_cur."!cursor_pass"(rx70_pos, "ws")
-    rx70_cur."!cursor_debug"("PASS  ", "ws", " at pos=", rx70_pos)
+    if_null rx70_debug, debug_401
+    rx70_cur."!cursor_debug"("PASS", "ws", " at pos=", rx70_pos)
+  debug_401:
     .return (rx70_cur)
   rx70_restart:
 .annotate 'line', 4
-    rx70_cur."!cursor_debug"("NEXT ", "ws")
+    if_null rx70_debug, debug_402
+    rx70_cur."!cursor_debug"("NEXT", "ws")
+  debug_402:
   rx70_fail:
     (rx70_rep, rx70_pos, $I10, $P10) = rx70_cur."!mark_fail"(0)
     lt rx70_pos, -1, rx70_done
@@ -1126,14 +1170,16 @@
     jump $I10
   rx70_done:
     rx70_cur."!cursor_fail"()
-    rx70_cur."!cursor_debug"("FAIL  ", "ws")
+    if_null rx70_debug, debug_403
+    rx70_cur."!cursor_debug"("FAIL", "ws")
+  debug_403:
     .return (rx70_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ws"  :subid("22_1280467477.44751") :method
+.sub "!PREFIX__ws"  :subid("22_1282324002.40722") :method
 .annotate 'line', 4
     new $P72, "ResizablePMCArray"
     push $P72, ""
@@ -1143,9 +1189,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "unv"  :subid("23_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "unv"  :subid("23_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
-    .const 'Sub' $P88 = "25_1280467477.44751" 
+    .const 'Sub' $P88 = "25_1282324002.40722" 
     capture_lex $P88
     .local string rx81_tgt
     .local int rx81_pos
@@ -1153,7 +1199,9 @@
     .local int rx81_eos
     .local int rx81_rep
     .local pmc rx81_cur
+    .local pmc rx81_debug
     (rx81_cur, rx81_pos, rx81_tgt, $I10) = self."!cursor_start"()
+    getattribute rx81_debug, rx81_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx81_cur
     .local pmc match
     .lex "$/", match
@@ -1165,7 +1213,9 @@
     substr rx81_tgt, rx81_tgt, rx81_off
   rx81_start:
     eq $I10, 1, rx81_restart
-    rx81_cur."!cursor_debug"("START ", "unv")
+    if_null rx81_debug, debug_404
+    rx81_cur."!cursor_debug"("START", "unv")
+  debug_404:
     $I10 = self.'from'()
     ne $I10, -1, rxscan84_done
     goto rxscan84_scan
@@ -1193,7 +1243,7 @@
   rxanchor86_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx81_cur."!cursor_pos"(rx81_pos)
-    .const 'Sub' $P88 = "25_1280467477.44751" 
+    .const 'Sub' $P88 = "25_1282324002.40722" 
     capture_lex $P88
     $P10 = rx81_cur."before"($P88)
     unless $P10, rx81_fail
@@ -1207,29 +1257,27 @@
     set_addr $I10, alt85_2
     rx81_cur."!mark_push"(0, rx81_pos, $I10)
 .annotate 'line', 47
-  # rx rxquantr93 ** 0..*
-    set_addr $I10, rxquantr93_done
-    rx81_cur."!mark_push"(0, rx81_pos, $I10)
-  rxquantr93_loop:
-  # rx enumcharlist negate=0 
-    ge rx81_pos, rx81_eos, rx81_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx81_pos, rx81_off
+    set rx81_rep, 0
+    sub $I12, rx81_eos, rx81_pos
+  rxenumcharlistq93_loop:
+    le $I12, 0, rxenumcharlistq93_done
     substr $S10, rx81_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, rx81_fail
-    inc rx81_pos
-    set_addr $I10, rxquantr93_done
-    (rx81_rep) = rx81_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr93_done
-    rx81_cur."!mark_push"(rx81_rep, rx81_pos, $I10)
-    goto rxquantr93_loop
-  rxquantr93_done:
+    lt $I11, 0, rxenumcharlistq93_done
+    inc rx81_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq93_loop
+  rxenumcharlistq93_done:
+    add rx81_pos, rx81_pos, rx81_rep
   # rx literal  "#"
     add $I11, rx81_pos, 1
     gt $I11, rx81_eos, rx81_fail
     sub $I11, rx81_pos, rx81_off
-    substr $S10, rx81_tgt, $I11, 1
-    ne $S10, "#", rx81_fail
+    ord $I11, rx81_tgt, $I11
+    ne $I11, 35, rx81_fail
     add rx81_pos, 1
   # rx charclass_q N r 0..-1
     sub $I10, rx81_pos, rx81_off
@@ -1238,32 +1286,35 @@
     goto alt85_end
   alt85_2:
 .annotate 'line', 48
-  # rx rxquantr94 ** 1..*
-    set_addr $I10, rxquantr94_done
-    rx81_cur."!mark_push"(0, -1, $I10)
-  rxquantr94_loop:
-  # rx enumcharlist negate=0 
-    ge rx81_pos, rx81_eos, rx81_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx81_pos, rx81_off
+    set rx81_rep, 0
+    sub $I12, rx81_eos, rx81_pos
+  rxenumcharlistq94_loop:
+    le $I12, 0, rxenumcharlistq94_done
     substr $S10, rx81_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, rx81_fail
-    inc rx81_pos
-    set_addr $I10, rxquantr94_done
-    (rx81_rep) = rx81_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr94_done
-    rx81_cur."!mark_push"(rx81_rep, rx81_pos, $I10)
-    goto rxquantr94_loop
-  rxquantr94_done:
+    lt $I11, 0, rxenumcharlistq94_done
+    inc rx81_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq94_loop
+  rxenumcharlistq94_done:
+    lt rx81_rep, 1, rx81_fail
+    add rx81_pos, rx81_pos, rx81_rep
   alt85_end:
 .annotate 'line', 43
   # rx pass
     rx81_cur."!cursor_pass"(rx81_pos, "unv")
-    rx81_cur."!cursor_debug"("PASS  ", "unv", " at pos=", rx81_pos)
+    if_null rx81_debug, debug_409
+    rx81_cur."!cursor_debug"("PASS", "unv", " at pos=", rx81_pos)
+  debug_409:
     .return (rx81_cur)
   rx81_restart:
 .annotate 'line', 4
-    rx81_cur."!cursor_debug"("NEXT ", "unv")
+    if_null rx81_debug, debug_410
+    rx81_cur."!cursor_debug"("NEXT", "unv")
+  debug_410:
   rx81_fail:
     (rx81_rep, rx81_pos, $I10, $P10) = rx81_cur."!mark_fail"(0)
     lt rx81_pos, -1, rx81_done
@@ -1271,14 +1322,16 @@
     jump $I10
   rx81_done:
     rx81_cur."!cursor_fail"()
-    rx81_cur."!cursor_debug"("FAIL  ", "unv")
+    if_null rx81_debug, debug_411
+    rx81_cur."!cursor_debug"("FAIL", "unv")
+  debug_411:
     .return (rx81_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__unv"  :subid("24_1280467477.44751") :method
+.sub "!PREFIX__unv"  :subid("24_1282324002.40722") :method
 .annotate 'line', 4
     new $P83, "ResizablePMCArray"
     push $P83, ""
@@ -1289,7 +1342,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block87"  :anon :subid("25_1280467477.44751") :method :outer("23_1280467477.44751")
+.sub "_block87"  :anon :subid("25_1282324002.40722") :method :outer("23_1282324002.40722")
 .annotate 'line', 46
     .local string rx89_tgt
     .local int rx89_pos
@@ -1297,7 +1350,9 @@
     .local int rx89_eos
     .local int rx89_rep
     .local pmc rx89_cur
+    .local pmc rx89_debug
     (rx89_cur, rx89_pos, rx89_tgt, $I10) = self."!cursor_start"()
+    getattribute rx89_debug, rx89_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx89_cur
     .local pmc match
     .lex "$/", match
@@ -1309,7 +1364,9 @@
     substr rx89_tgt, rx89_tgt, rx89_off
   rx89_start:
     eq $I10, 1, rx89_restart
-    rx89_cur."!cursor_debug"("START ", "")
+    if_null rx89_debug, debug_405
+    rx89_cur."!cursor_debug"("START", "")
+  debug_405:
     $I10 = self.'from'()
     ne $I10, -1, rxscan90_done
     goto rxscan90_scan
@@ -1322,29 +1379,27 @@
     set_addr $I10, rxscan90_loop
     rx89_cur."!mark_push"(0, rx89_pos, $I10)
   rxscan90_done:
-  # rx rxquantr91 ** 0..*
-    set_addr $I10, rxquantr91_done
-    rx89_cur."!mark_push"(0, rx89_pos, $I10)
-  rxquantr91_loop:
-  # rx enumcharlist negate=0 
-    ge rx89_pos, rx89_eos, rx89_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx89_pos, rx89_off
+    set rx89_rep, 0
+    sub $I12, rx89_eos, rx89_pos
+  rxenumcharlistq91_loop:
+    le $I12, 0, rxenumcharlistq91_done
     substr $S10, rx89_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, rx89_fail
-    inc rx89_pos
-    set_addr $I10, rxquantr91_done
-    (rx89_rep) = rx89_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr91_done
-    rx89_cur."!mark_push"(rx89_rep, rx89_pos, $I10)
-    goto rxquantr91_loop
-  rxquantr91_done:
+    lt $I11, 0, rxenumcharlistq91_done
+    inc rx89_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq91_loop
+  rxenumcharlistq91_done:
+    add rx89_pos, rx89_pos, rx89_rep
   # rx literal  "="
     add $I11, rx89_pos, 1
     gt $I11, rx89_eos, rx89_fail
     sub $I11, rx89_pos, rx89_off
-    substr $S10, rx89_tgt, $I11, 1
-    ne $S10, "=", rx89_fail
+    ord $I11, rx89_tgt, $I11
+    ne $I11, 61, rx89_fail
     add rx89_pos, 1
   alt92_0:
     set_addr $I10, alt92_1
@@ -1361,16 +1416,20 @@
     add $I11, rx89_pos, 1
     gt $I11, rx89_eos, rx89_fail
     sub $I11, rx89_pos, rx89_off
-    substr $S10, rx89_tgt, $I11, 1
-    ne $S10, "\\", rx89_fail
+    ord $I11, rx89_tgt, $I11
+    ne $I11, 92, rx89_fail
     add rx89_pos, 1
   alt92_end:
   # rx pass
     rx89_cur."!cursor_pass"(rx89_pos, "")
-    rx89_cur."!cursor_debug"("PASS  ", "", " at pos=", rx89_pos)
+    if_null rx89_debug, debug_406
+    rx89_cur."!cursor_debug"("PASS", "", " at pos=", rx89_pos)
+  debug_406:
     .return (rx89_cur)
   rx89_restart:
-    rx89_cur."!cursor_debug"("NEXT ", "")
+    if_null rx89_debug, debug_407
+    rx89_cur."!cursor_debug"("NEXT", "")
+  debug_407:
   rx89_fail:
     (rx89_rep, rx89_pos, $I10, $P10) = rx89_cur."!mark_fail"(0)
     lt rx89_pos, -1, rx89_done
@@ -1378,16 +1437,18 @@
     jump $I10
   rx89_done:
     rx89_cur."!cursor_fail"()
-    rx89_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx89_debug, debug_408
+    rx89_cur."!cursor_debug"("FAIL", "")
+  debug_408:
     .return (rx89_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pod_comment"  :subid("26_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "pod_comment"  :subid("26_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
-    .const 'Sub' $P127 = "28_1280467477.44751" 
+    .const 'Sub' $P127 = "28_1282324002.40722" 
     capture_lex $P127
     .local string rx96_tgt
     .local int rx96_pos
@@ -1395,7 +1456,9 @@
     .local int rx96_eos
     .local int rx96_rep
     .local pmc rx96_cur
+    .local pmc rx96_debug
     (rx96_cur, rx96_pos, rx96_tgt, $I10) = self."!cursor_start"()
+    getattribute rx96_debug, rx96_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx96_cur
     .local pmc match
     .lex "$/", match
@@ -1407,7 +1470,9 @@
     substr rx96_tgt, rx96_tgt, rx96_off
   rx96_start:
     eq $I10, 1, rx96_restart
-    rx96_cur."!cursor_debug"("START ", "pod_comment")
+    if_null rx96_debug, debug_412
+    rx96_cur."!cursor_debug"("START", "pod_comment")
+  debug_412:
     $I10 = self.'from'()
     ne $I10, -1, rxscan99_done
     goto rxscan99_scan
@@ -1429,29 +1494,27 @@
     is_cclass $I11, 4096, rx96_tgt, $I10
     unless $I11, rx96_fail
   rxanchor100_done:
-  # rx rxquantr101 ** 0..*
-    set_addr $I10, rxquantr101_done
-    rx96_cur."!mark_push"(0, rx96_pos, $I10)
-  rxquantr101_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq101_loop:
+    le $I12, 0, rxenumcharlistq101_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr101_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr101_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr101_loop
-  rxquantr101_done:
+    lt $I11, 0, rxenumcharlistq101_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq101_loop
+  rxenumcharlistq101_done:
+    add rx96_pos, rx96_pos, rx96_rep
   # rx literal  "="
     add $I11, rx96_pos, 1
     gt $I11, rx96_eos, rx96_fail
     sub $I11, rx96_pos, rx96_off
-    substr $S10, rx96_tgt, $I11, 1
-    ne $S10, "=", rx96_fail
+    ord $I11, rx96_tgt, $I11
+    ne $I11, 61, rx96_fail
     add rx96_pos, 1
   alt102_0:
 .annotate 'line', 54
@@ -1465,23 +1528,22 @@
     substr $S10, rx96_tgt, $I11, 5
     ne $S10, "begin", rx96_fail
     add rx96_pos, 5
-  # rx rxquantr103 ** 1..*
-    set_addr $I10, rxquantr103_done
-    rx96_cur."!mark_push"(0, -1, $I10)
-  rxquantr103_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq103_loop:
+    le $I12, 0, rxenumcharlistq103_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr103_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr103_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr103_loop
-  rxquantr103_done:
+    lt $I11, 0, rxenumcharlistq103_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq103_loop
+  rxenumcharlistq103_done:
+    lt rx96_rep, 1, rx96_fail
+    add rx96_pos, rx96_pos, rx96_rep
   # rx literal  "END"
     add $I11, rx96_pos, 3
     gt $I11, rx96_eos, rx96_fail
@@ -1521,23 +1583,21 @@
     iseq $I11, $S10, "\r\n"
     add rx96_pos, $I11
     inc rx96_pos
-  # rx rxquantr107 ** 0..*
-    set_addr $I10, rxquantr107_done
-    rx96_cur."!mark_push"(0, rx96_pos, $I10)
-  rxquantr107_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq107_loop:
+    le $I12, 0, rxenumcharlistq107_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr107_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr107_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr107_loop
-  rxquantr107_done:
+    lt $I11, 0, rxenumcharlistq107_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq107_loop
+  rxenumcharlistq107_done:
+    add rx96_pos, rx96_pos, rx96_rep
   # rx literal  "=end"
     add $I11, rx96_pos, 4
     gt $I11, rx96_eos, rx96_fail
@@ -1545,23 +1605,22 @@
     substr $S10, rx96_tgt, $I11, 4
     ne $S10, "=end", rx96_fail
     add rx96_pos, 4
-  # rx rxquantr108 ** 1..*
-    set_addr $I10, rxquantr108_done
-    rx96_cur."!mark_push"(0, -1, $I10)
-  rxquantr108_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq108_loop:
+    le $I12, 0, rxenumcharlistq108_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr108_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr108_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr108_loop
-  rxquantr108_done:
+    lt $I11, 0, rxenumcharlistq108_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq108_loop
+  rxenumcharlistq108_done:
+    lt rx96_rep, 1, rx96_fail
+    add rx96_pos, rx96_pos, rx96_rep
   # rx literal  "END"
     add $I11, rx96_pos, 3
     gt $I11, rx96_eos, rx96_fail
@@ -1601,23 +1660,22 @@
     substr $S10, rx96_tgt, $I11, 5
     ne $S10, "begin", rx96_fail
     add rx96_pos, 5
-  # rx rxquantr109 ** 1..*
-    set_addr $I10, rxquantr109_done
-    rx96_cur."!mark_push"(0, -1, $I10)
-  rxquantr109_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq109_loop:
+    le $I12, 0, rxenumcharlistq109_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr109_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr109_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr109_loop
-  rxquantr109_done:
+    lt $I11, 0, rxenumcharlistq109_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq109_loop
+  rxenumcharlistq109_done:
+    lt rx96_rep, 1, rx96_fail
+    add rx96_pos, rx96_pos, rx96_rep
   # rx subrule "identifier" subtype=capture negate=
     rx96_cur."!cursor_pos"(rx96_pos)
     $P10 = rx96_cur."identifier"()
@@ -1650,23 +1708,21 @@
     iseq $I11, $S10, "\r\n"
     add rx96_pos, $I11
     inc rx96_pos
-  # rx rxquantr113 ** 0..*
-    set_addr $I10, rxquantr113_done
-    rx96_cur."!mark_push"(0, rx96_pos, $I10)
-  rxquantr113_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq113_loop:
+    le $I12, 0, rxenumcharlistq113_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr113_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr113_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr113_loop
-  rxquantr113_done:
+    lt $I11, 0, rxenumcharlistq113_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq113_loop
+  rxenumcharlistq113_done:
+    add rx96_pos, rx96_pos, rx96_rep
   # rx literal  "=end"
     add $I11, rx96_pos, 4
     gt $I11, rx96_eos, rx96_fail
@@ -1674,23 +1730,22 @@
     substr $S10, rx96_tgt, $I11, 4
     ne $S10, "=end", rx96_fail
     add rx96_pos, 4
-  # rx rxquantr114 ** 1..*
-    set_addr $I10, rxquantr114_done
-    rx96_cur."!mark_push"(0, -1, $I10)
-  rxquantr114_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 1..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq114_loop:
+    le $I12, 0, rxenumcharlistq114_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr114_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr114_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr114_loop
-  rxquantr114_done:
+    lt $I11, 0, rxenumcharlistq114_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq114_loop
+  rxenumcharlistq114_done:
+    lt rx96_rep, 1, rx96_fail
+    add rx96_pos, rx96_pos, rx96_rep
   # rx subrule "!BACKREF" subtype=method negate=
     rx96_cur."!cursor_pos"(rx96_pos)
     $P10 = rx96_cur."!BACKREF"("identifier")
@@ -1738,23 +1793,21 @@
     dec $I10
     is_cclass $I11, 8192, rx96_tgt, $I10
     unless $I11, rx96_fail
-  # rx rxquantr116 ** 0..*
-    set_addr $I10, rxquantr116_done
-    rx96_cur."!mark_push"(0, rx96_pos, $I10)
-  rxquantr116_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq116_loop:
+    le $I12, 0, rxenumcharlistq116_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr116_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr116_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr116_loop
-  rxquantr116_done:
+    lt $I11, 0, rxenumcharlistq116_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq116_loop
+  rxenumcharlistq116_done:
+    add rx96_pos, rx96_pos, rx96_rep
   alt117_0:
 .annotate 'line', 63
     set_addr $I10, alt117_1
@@ -1777,8 +1830,8 @@
     add $I11, rx96_pos, 1
     gt $I11, rx96_eos, rx96_fail
     sub $I11, rx96_pos, rx96_off
-    substr $S10, rx96_tgt, $I11, 1
-    ne $S10, "#", rx96_fail
+    ord $I11, rx96_tgt, $I11
+    ne $I11, 35, rx96_fail
     add rx96_pos, 1
     goto alt117_end
   alt117_2:
@@ -1813,23 +1866,21 @@
     iseq $I11, $S10, "\r\n"
     add rx96_pos, $I11
     inc rx96_pos
-  # rx rxquantr122 ** 0..*
-    set_addr $I10, rxquantr122_done
-    rx96_cur."!mark_push"(0, rx96_pos, $I10)
-  rxquantr122_loop:
-  # rx enumcharlist negate=0 
-    ge rx96_pos, rx96_eos, rx96_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx96_pos, rx96_off
+    set rx96_rep, 0
+    sub $I12, rx96_eos, rx96_pos
+  rxenumcharlistq122_loop:
+    le $I12, 0, rxenumcharlistq122_done
     substr $S10, rx96_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, rx96_fail
-    inc rx96_pos
-    set_addr $I10, rxquantr122_done
-    (rx96_rep) = rx96_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr122_done
-    rx96_cur."!mark_push"(rx96_rep, rx96_pos, $I10)
-    goto rxquantr122_loop
-  rxquantr122_done:
+    lt $I11, 0, rxenumcharlistq122_done
+    inc rx96_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq122_loop
+  rxenumcharlistq122_done:
+    add rx96_pos, rx96_pos, rx96_rep
   # rx literal  "=end"
     add $I11, rx96_pos, 4
     gt $I11, rx96_eos, rx96_fail
@@ -1893,7 +1944,7 @@
   rxanchor125_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx96_cur."!cursor_pos"(rx96_pos)
-    .const 'Sub' $P127 = "28_1280467477.44751" 
+    .const 'Sub' $P127 = "28_1282324002.40722" 
     capture_lex $P127
     $P10 = rx96_cur."before"($P127)
     unless $P10, rx96_fail
@@ -1927,11 +1978,15 @@
 .annotate 'line', 52
   # rx pass
     rx96_cur."!cursor_pass"(rx96_pos, "pod_comment")
-    rx96_cur."!cursor_debug"("PASS  ", "pod_comment", " at pos=", rx96_pos)
+    if_null rx96_debug, debug_417
+    rx96_cur."!cursor_debug"("PASS", "pod_comment", " at pos=", rx96_pos)
+  debug_417:
     .return (rx96_cur)
   rx96_restart:
 .annotate 'line', 4
-    rx96_cur."!cursor_debug"("NEXT ", "pod_comment")
+    if_null rx96_debug, debug_418
+    rx96_cur."!cursor_debug"("NEXT", "pod_comment")
+  debug_418:
   rx96_fail:
     (rx96_rep, rx96_pos, $I10, $P10) = rx96_cur."!mark_fail"(0)
     lt rx96_pos, -1, rx96_done
@@ -1939,14 +1994,16 @@
     jump $I10
   rx96_done:
     rx96_cur."!cursor_fail"()
-    rx96_cur."!cursor_debug"("FAIL  ", "pod_comment")
+    if_null rx96_debug, debug_419
+    rx96_cur."!cursor_debug"("FAIL", "pod_comment")
+  debug_419:
     .return (rx96_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pod_comment"  :subid("27_1280467477.44751") :method
+.sub "!PREFIX__pod_comment"  :subid("27_1282324002.40722") :method
 .annotate 'line', 4
     new $P98, "ResizablePMCArray"
     push $P98, ""
@@ -1955,7 +2012,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block126"  :anon :subid("28_1280467477.44751") :method :outer("26_1280467477.44751")
+.sub "_block126"  :anon :subid("28_1282324002.40722") :method :outer("26_1282324002.40722")
 .annotate 'line', 69
     .local string rx128_tgt
     .local int rx128_pos
@@ -1963,7 +2020,9 @@
     .local int rx128_eos
     .local int rx128_rep
     .local pmc rx128_cur
+    .local pmc rx128_debug
     (rx128_cur, rx128_pos, rx128_tgt, $I10) = self."!cursor_start"()
+    getattribute rx128_debug, rx128_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx128_cur
     .local pmc match
     .lex "$/", match
@@ -1975,7 +2034,9 @@
     substr rx128_tgt, rx128_tgt, rx128_off
   rx128_start:
     eq $I10, 1, rx128_restart
-    rx128_cur."!cursor_debug"("START ", "")
+    if_null rx128_debug, debug_413
+    rx128_cur."!cursor_debug"("START", "")
+  debug_413:
     $I10 = self.'from'()
     ne $I10, -1, rxscan129_done
     goto rxscan129_scan
@@ -1988,23 +2049,21 @@
     set_addr $I10, rxscan129_loop
     rx128_cur."!mark_push"(0, rx128_pos, $I10)
   rxscan129_done:
-  # rx rxquantr130 ** 0..*
-    set_addr $I10, rxquantr130_done
-    rx128_cur."!mark_push"(0, rx128_pos, $I10)
-  rxquantr130_loop:
-  # rx enumcharlist negate=0 
-    ge rx128_pos, rx128_eos, rx128_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx128_pos, rx128_off
+    set rx128_rep, 0
+    sub $I12, rx128_eos, rx128_pos
+  rxenumcharlistq130_loop:
+    le $I12, 0, rxenumcharlistq130_done
     substr $S10, rx128_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, rx128_fail
-    inc rx128_pos
-    set_addr $I10, rxquantr130_done
-    (rx128_rep) = rx128_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr130_done
-    rx128_cur."!mark_push"(rx128_rep, rx128_pos, $I10)
-    goto rxquantr130_loop
-  rxquantr130_done:
+    lt $I11, 0, rxenumcharlistq130_done
+    inc rx128_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq130_loop
+  rxenumcharlistq130_done:
+    add rx128_pos, rx128_pos, rx128_rep
   alt131_0:
     set_addr $I10, alt131_1
     rx128_cur."!mark_push"(0, rx128_pos, $I10)
@@ -2013,8 +2072,8 @@
     add $I11, rx128_pos, 1
     gt $I11, rx128_eos, rx128_fail
     sub $I11, rx128_pos, rx128_off
-    substr $S10, rx128_tgt, $I11, 1
-    ne $S10, "=", rx128_fail
+    ord $I11, rx128_tgt, $I11
+    ne $I11, 61, rx128_fail
     add rx128_pos, 1
 .annotate 'line', 72
   # rx rxquantr132 ** 0..1
@@ -2063,10 +2122,14 @@
 .annotate 'line', 69
   # rx pass
     rx128_cur."!cursor_pass"(rx128_pos, "")
-    rx128_cur."!cursor_debug"("PASS  ", "", " at pos=", rx128_pos)
+    if_null rx128_debug, debug_414
+    rx128_cur."!cursor_debug"("PASS", "", " at pos=", rx128_pos)
+  debug_414:
     .return (rx128_cur)
   rx128_restart:
-    rx128_cur."!cursor_debug"("NEXT ", "")
+    if_null rx128_debug, debug_415
+    rx128_cur."!cursor_debug"("NEXT", "")
+  debug_415:
   rx128_fail:
     (rx128_rep, rx128_pos, $I10, $P10) = rx128_cur."!mark_fail"(0)
     lt rx128_pos, -1, rx128_done
@@ -2074,14 +2137,16 @@
     jump $I10
   rx128_done:
     rx128_cur."!cursor_fail"()
-    rx128_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx128_debug, debug_416
+    rx128_cur."!cursor_debug"("FAIL", "")
+  debug_416:
     .return (rx128_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "comp_unit"  :subid("29_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "comp_unit"  :subid("29_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx135_tgt
     .local int rx135_pos
@@ -2089,7 +2154,9 @@
     .local int rx135_eos
     .local int rx135_rep
     .local pmc rx135_cur
+    .local pmc rx135_debug
     (rx135_cur, rx135_pos, rx135_tgt, $I10) = self."!cursor_start"()
+    getattribute rx135_debug, rx135_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx135_cur
     .local pmc match
     .lex "$/", match
@@ -2101,7 +2168,9 @@
     substr rx135_tgt, rx135_tgt, rx135_off
   rx135_start:
     eq $I10, 1, rx135_restart
-    rx135_cur."!cursor_debug"("START ", "comp_unit")
+    if_null rx135_debug, debug_420
+    rx135_cur."!cursor_debug"("START", "comp_unit")
+  debug_420:
     $I10 = self.'from'()
     ne $I10, -1, rxscan139_done
     goto rxscan139_scan
@@ -2151,11 +2220,15 @@
 .annotate 'line', 83
   # rx pass
     rx135_cur."!cursor_pass"(rx135_pos, "comp_unit")
-    rx135_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx135_pos)
+    if_null rx135_debug, debug_421
+    rx135_cur."!cursor_debug"("PASS", "comp_unit", " at pos=", rx135_pos)
+  debug_421:
     .return (rx135_cur)
   rx135_restart:
 .annotate 'line', 4
-    rx135_cur."!cursor_debug"("NEXT ", "comp_unit")
+    if_null rx135_debug, debug_422
+    rx135_cur."!cursor_debug"("NEXT", "comp_unit")
+  debug_422:
   rx135_fail:
     (rx135_rep, rx135_pos, $I10, $P10) = rx135_cur."!mark_fail"(0)
     lt rx135_pos, -1, rx135_done
@@ -2163,14 +2236,16 @@
     jump $I10
   rx135_done:
     rx135_cur."!cursor_fail"()
-    rx135_cur."!cursor_debug"("FAIL  ", "comp_unit")
+    if_null rx135_debug, debug_423
+    rx135_cur."!cursor_debug"("FAIL", "comp_unit")
+  debug_423:
     .return (rx135_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__comp_unit"  :subid("30_1280467477.44751") :method
+.sub "!PREFIX__comp_unit"  :subid("30_1282324002.40722") :method
 .annotate 'line', 4
     $P137 = self."!PREFIX__!subrule"("newpad", "")
     new $P138, "ResizablePMCArray"
@@ -2180,7 +2255,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statementlist"  :subid("31_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statementlist"  :subid("31_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx142_tgt
     .local int rx142_pos
@@ -2188,8 +2263,10 @@
     .local int rx142_eos
     .local int rx142_rep
     .local pmc rx142_cur
+    .local pmc rx142_debug
     (rx142_cur, rx142_pos, rx142_tgt, $I10) = self."!cursor_start"()
     rx142_cur."!cursor_caparray"("statement")
+    getattribute rx142_debug, rx142_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx142_cur
     .local pmc match
     .lex "$/", match
@@ -2201,7 +2278,9 @@
     substr rx142_tgt, rx142_tgt, rx142_off
   rx142_start:
     eq $I10, 1, rx142_restart
-    rx142_cur."!cursor_debug"("START ", "statementlist")
+    if_null rx142_debug, debug_424
+    rx142_cur."!cursor_debug"("START", "statementlist")
+  debug_424:
     $I10 = self.'from'()
     ne $I10, -1, rxscan147_done
     goto rxscan147_scan
@@ -2275,11 +2354,15 @@
 .annotate 'line', 90
   # rx pass
     rx142_cur."!cursor_pass"(rx142_pos, "statementlist")
-    rx142_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx142_pos)
+    if_null rx142_debug, debug_425
+    rx142_cur."!cursor_debug"("PASS", "statementlist", " at pos=", rx142_pos)
+  debug_425:
     .return (rx142_cur)
   rx142_restart:
 .annotate 'line', 4
-    rx142_cur."!cursor_debug"("NEXT ", "statementlist")
+    if_null rx142_debug, debug_426
+    rx142_cur."!cursor_debug"("NEXT", "statementlist")
+  debug_426:
   rx142_fail:
     (rx142_rep, rx142_pos, $I10, $P10) = rx142_cur."!mark_fail"(0)
     lt rx142_pos, -1, rx142_done
@@ -2287,14 +2370,16 @@
     jump $I10
   rx142_done:
     rx142_cur."!cursor_fail"()
-    rx142_cur."!cursor_debug"("FAIL  ", "statementlist")
+    if_null rx142_debug, debug_427
+    rx142_cur."!cursor_debug"("FAIL", "statementlist")
+  debug_427:
     .return (rx142_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statementlist"  :subid("32_1280467477.44751") :method
+.sub "!PREFIX__statementlist"  :subid("32_1282324002.40722") :method
 .annotate 'line', 4
     $P144 = self."!PREFIX__!subrule"("ws", "")
     $P145 = self."!PREFIX__!subrule"("ws", "")
@@ -2306,9 +2391,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement"  :subid("33_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement"  :subid("33_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
-    .const 'Sub' $P161 = "35_1280467477.44751" 
+    .const 'Sub' $P161 = "35_1282324002.40722" 
     capture_lex $P161
     .local string rx156_tgt
     .local int rx156_pos
@@ -2316,8 +2401,10 @@
     .local int rx156_eos
     .local int rx156_rep
     .local pmc rx156_cur
+    .local pmc rx156_debug
     (rx156_cur, rx156_pos, rx156_tgt, $I10) = self."!cursor_start"()
     rx156_cur."!cursor_caparray"("statement_mod_loop", "statement_mod_cond")
+    getattribute rx156_debug, rx156_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx156_cur
     .local pmc match
     .lex "$/", match
@@ -2329,7 +2416,9 @@
     substr rx156_tgt, rx156_tgt, rx156_off
   rx156_start:
     eq $I10, 1, rx156_restart
-    rx156_cur."!cursor_debug"("START ", "statement")
+    if_null rx156_debug, debug_428
+    rx156_cur."!cursor_debug"("START", "statement")
+  debug_428:
     $I10 = self.'from'()
     ne $I10, -1, rxscan159_done
     goto rxscan159_scan
@@ -2345,7 +2434,7 @@
 .annotate 'line', 96
   # rx subrule "before" subtype=zerowidth negate=1
     rx156_cur."!cursor_pos"(rx156_pos)
-    .const 'Sub' $P161 = "35_1280467477.44751" 
+    .const 'Sub' $P161 = "35_1282324002.40722" 
     capture_lex $P161
     $P10 = rx156_cur."before"($P161)
     if $P10, rx156_fail
@@ -2441,11 +2530,15 @@
 .annotate 'line', 95
   # rx pass
     rx156_cur."!cursor_pass"(rx156_pos, "statement")
-    rx156_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx156_pos)
+    if_null rx156_debug, debug_433
+    rx156_cur."!cursor_debug"("PASS", "statement", " at pos=", rx156_pos)
+  debug_433:
     .return (rx156_cur)
   rx156_restart:
 .annotate 'line', 4
-    rx156_cur."!cursor_debug"("NEXT ", "statement")
+    if_null rx156_debug, debug_434
+    rx156_cur."!cursor_debug"("NEXT", "statement")
+  debug_434:
   rx156_fail:
     (rx156_rep, rx156_pos, $I10, $P10) = rx156_cur."!mark_fail"(0)
     lt rx156_pos, -1, rx156_done
@@ -2453,14 +2546,16 @@
     jump $I10
   rx156_done:
     rx156_cur."!cursor_fail"()
-    rx156_cur."!cursor_debug"("FAIL  ", "statement")
+    if_null rx156_debug, debug_435
+    rx156_cur."!cursor_debug"("FAIL", "statement")
+  debug_435:
     .return (rx156_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement"  :subid("34_1280467477.44751") :method
+.sub "!PREFIX__statement"  :subid("34_1282324002.40722") :method
 .annotate 'line', 4
     new $P158, "ResizablePMCArray"
     push $P158, ""
@@ -2469,7 +2564,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block160"  :anon :subid("35_1280467477.44751") :method :outer("33_1280467477.44751")
+.sub "_block160"  :anon :subid("35_1282324002.40722") :method :outer("33_1282324002.40722")
 .annotate 'line', 96
     .local string rx162_tgt
     .local int rx162_pos
@@ -2477,7 +2572,9 @@
     .local int rx162_eos
     .local int rx162_rep
     .local pmc rx162_cur
+    .local pmc rx162_debug
     (rx162_cur, rx162_pos, rx162_tgt, $I10) = self."!cursor_start"()
+    getattribute rx162_debug, rx162_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx162_cur
     .local pmc match
     .lex "$/", match
@@ -2489,7 +2586,9 @@
     substr rx162_tgt, rx162_tgt, rx162_off
   rx162_start:
     eq $I10, 1, rx162_restart
-    rx162_cur."!cursor_debug"("START ", "")
+    if_null rx162_debug, debug_429
+    rx162_cur."!cursor_debug"("START", "")
+  debug_429:
     $I10 = self.'from'()
     ne $I10, -1, rxscan163_done
     goto rxscan163_scan
@@ -2519,10 +2618,14 @@
   alt164_end:
   # rx pass
     rx162_cur."!cursor_pass"(rx162_pos, "")
-    rx162_cur."!cursor_debug"("PASS  ", "", " at pos=", rx162_pos)
+    if_null rx162_debug, debug_430
+    rx162_cur."!cursor_debug"("PASS", "", " at pos=", rx162_pos)
+  debug_430:
     .return (rx162_cur)
   rx162_restart:
-    rx162_cur."!cursor_debug"("NEXT ", "")
+    if_null rx162_debug, debug_431
+    rx162_cur."!cursor_debug"("NEXT", "")
+  debug_431:
   rx162_fail:
     (rx162_rep, rx162_pos, $I10, $P10) = rx162_cur."!mark_fail"(0)
     lt rx162_pos, -1, rx162_done
@@ -2530,14 +2633,16 @@
     jump $I10
   rx162_done:
     rx162_cur."!cursor_fail"()
-    rx162_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx162_debug, debug_432
+    rx162_cur."!cursor_debug"("FAIL", "")
+  debug_432:
     .return (rx162_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "eat_terminator"  :subid("36_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "eat_terminator"  :subid("36_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx171_tgt
     .local int rx171_pos
@@ -2545,7 +2650,9 @@
     .local int rx171_eos
     .local int rx171_rep
     .local pmc rx171_cur
+    .local pmc rx171_debug
     (rx171_cur, rx171_pos, rx171_tgt, $I10) = self."!cursor_start"()
+    getattribute rx171_debug, rx171_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx171_cur
     .local pmc match
     .lex "$/", match
@@ -2557,7 +2664,9 @@
     substr rx171_tgt, rx171_tgt, rx171_off
   rx171_start:
     eq $I10, 1, rx171_restart
-    rx171_cur."!cursor_debug"("START ", "eat_terminator")
+    if_null rx171_debug, debug_436
+    rx171_cur."!cursor_debug"("START", "eat_terminator")
+  debug_436:
     $I10 = self.'from'()
     ne $I10, -1, rxscan174_done
     goto rxscan174_scan
@@ -2579,8 +2688,8 @@
     add $I11, rx171_pos, 1
     gt $I11, rx171_eos, rx171_fail
     sub $I11, rx171_pos, rx171_off
-    substr $S10, rx171_tgt, $I11, 1
-    ne $S10, ";", rx171_fail
+    ord $I11, rx171_tgt, $I11
+    ne $I11, 59, rx171_fail
     add rx171_pos, 1
     goto alt175_end
   alt175_1:
@@ -2609,11 +2718,15 @@
 .annotate 'line', 108
   # rx pass
     rx171_cur."!cursor_pass"(rx171_pos, "eat_terminator")
-    rx171_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx171_pos)
+    if_null rx171_debug, debug_437
+    rx171_cur."!cursor_debug"("PASS", "eat_terminator", " at pos=", rx171_pos)
+  debug_437:
     .return (rx171_cur)
   rx171_restart:
 .annotate 'line', 4
-    rx171_cur."!cursor_debug"("NEXT ", "eat_terminator")
+    if_null rx171_debug, debug_438
+    rx171_cur."!cursor_debug"("NEXT", "eat_terminator")
+  debug_438:
   rx171_fail:
     (rx171_rep, rx171_pos, $I10, $P10) = rx171_cur."!mark_fail"(0)
     lt rx171_pos, -1, rx171_done
@@ -2621,14 +2734,16 @@
     jump $I10
   rx171_done:
     rx171_cur."!cursor_fail"()
-    rx171_cur."!cursor_debug"("FAIL  ", "eat_terminator")
+    if_null rx171_debug, debug_439
+    rx171_cur."!cursor_debug"("FAIL", "eat_terminator")
+  debug_439:
     .return (rx171_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__eat_terminator"  :subid("37_1280467477.44751") :method
+.sub "!PREFIX__eat_terminator"  :subid("37_1282324002.40722") :method
 .annotate 'line', 4
     new $P173, "ResizablePMCArray"
     push $P173, ""
@@ -2640,7 +2755,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "xblock"  :subid("38_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "xblock"  :subid("38_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx177_tgt
     .local int rx177_pos
@@ -2648,7 +2763,9 @@
     .local int rx177_eos
     .local int rx177_rep
     .local pmc rx177_cur
+    .local pmc rx177_debug
     (rx177_cur, rx177_pos, rx177_tgt, $I10) = self."!cursor_start"()
+    getattribute rx177_debug, rx177_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx177_cur
     .local pmc match
     .lex "$/", match
@@ -2660,7 +2777,9 @@
     substr rx177_tgt, rx177_tgt, rx177_off
   rx177_start:
     eq $I10, 1, rx177_restart
-    rx177_cur."!cursor_debug"("START ", "xblock")
+    if_null rx177_debug, debug_440
+    rx177_cur."!cursor_debug"("START", "xblock")
+  debug_440:
     $I10 = self.'from'()
     ne $I10, -1, rxscan181_done
     goto rxscan181_scan
@@ -2696,11 +2815,15 @@
 .annotate 'line', 115
   # rx pass
     rx177_cur."!cursor_pass"(rx177_pos, "xblock")
-    rx177_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx177_pos)
+    if_null rx177_debug, debug_441
+    rx177_cur."!cursor_debug"("PASS", "xblock", " at pos=", rx177_pos)
+  debug_441:
     .return (rx177_cur)
   rx177_restart:
 .annotate 'line', 4
-    rx177_cur."!cursor_debug"("NEXT ", "xblock")
+    if_null rx177_debug, debug_442
+    rx177_cur."!cursor_debug"("NEXT", "xblock")
+  debug_442:
   rx177_fail:
     (rx177_rep, rx177_pos, $I10, $P10) = rx177_cur."!mark_fail"(0)
     lt rx177_pos, -1, rx177_done
@@ -2708,14 +2831,16 @@
     jump $I10
   rx177_done:
     rx177_cur."!cursor_fail"()
-    rx177_cur."!cursor_debug"("FAIL  ", "xblock")
+    if_null rx177_debug, debug_443
+    rx177_cur."!cursor_debug"("FAIL", "xblock")
+  debug_443:
     .return (rx177_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__xblock"  :subid("39_1280467477.44751") :method
+.sub "!PREFIX__xblock"  :subid("39_1282324002.40722") :method
 .annotate 'line', 4
     $P179 = self."!PREFIX__!subrule"("EXPR", "")
     new $P180, "ResizablePMCArray"
@@ -2725,7 +2850,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pblock"  :subid("40_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "pblock"  :subid("40_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx183_tgt
     .local int rx183_pos
@@ -2733,7 +2858,9 @@
     .local int rx183_eos
     .local int rx183_rep
     .local pmc rx183_cur
+    .local pmc rx183_debug
     (rx183_cur, rx183_pos, rx183_tgt, $I10) = self."!cursor_start"()
+    getattribute rx183_debug, rx183_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx183_cur
     .local pmc match
     .lex "$/", match
@@ -2745,7 +2872,9 @@
     substr rx183_tgt, rx183_tgt, rx183_off
   rx183_start:
     eq $I10, 1, rx183_restart
-    rx183_cur."!cursor_debug"("START ", "pblock")
+    if_null rx183_debug, debug_444
+    rx183_cur."!cursor_debug"("START", "pblock")
+  debug_444:
     $I10 = self.'from'()
     ne $I10, -1, rxscan188_done
     goto rxscan188_scan
@@ -2829,11 +2958,15 @@
 .annotate 'line', 119
   # rx pass
     rx183_cur."!cursor_pass"(rx183_pos, "pblock")
-    rx183_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx183_pos)
+    if_null rx183_debug, debug_445
+    rx183_cur."!cursor_debug"("PASS", "pblock", " at pos=", rx183_pos)
+  debug_445:
     .return (rx183_cur)
   rx183_restart:
 .annotate 'line', 4
-    rx183_cur."!cursor_debug"("NEXT ", "pblock")
+    if_null rx183_debug, debug_446
+    rx183_cur."!cursor_debug"("NEXT", "pblock")
+  debug_446:
   rx183_fail:
     (rx183_rep, rx183_pos, $I10, $P10) = rx183_cur."!mark_fail"(0)
     lt rx183_pos, -1, rx183_done
@@ -2841,14 +2974,16 @@
     jump $I10
   rx183_done:
     rx183_cur."!cursor_fail"()
-    rx183_cur."!cursor_debug"("FAIL  ", "pblock")
+    if_null rx183_debug, debug_447
+    rx183_cur."!cursor_debug"("FAIL", "pblock")
+  debug_447:
     .return (rx183_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pblock"  :subid("41_1280467477.44751") :method
+.sub "!PREFIX__pblock"  :subid("41_1282324002.40722") :method
 .annotate 'line', 4
     $P185 = self."!PREFIX__!subrule"("panic", "")
     $P186 = self."!PREFIX__!subrule"("lambda", "")
@@ -2861,7 +2996,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "lambda"  :subid("42_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "lambda"  :subid("42_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx191_tgt
     .local int rx191_pos
@@ -2869,7 +3004,9 @@
     .local int rx191_eos
     .local int rx191_rep
     .local pmc rx191_cur
+    .local pmc rx191_debug
     (rx191_cur, rx191_pos, rx191_tgt, $I10) = self."!cursor_start"()
+    getattribute rx191_debug, rx191_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx191_cur
     .local pmc match
     .lex "$/", match
@@ -2881,7 +3018,9 @@
     substr rx191_tgt, rx191_tgt, rx191_off
   rx191_start:
     eq $I10, 1, rx191_restart
-    rx191_cur."!cursor_debug"("START ", "lambda")
+    if_null rx191_debug, debug_448
+    rx191_cur."!cursor_debug"("START", "lambda")
+  debug_448:
     $I10 = self.'from'()
     ne $I10, -1, rxscan194_done
     goto rxscan194_scan
@@ -2917,11 +3056,15 @@
   alt195_end:
   # rx pass
     rx191_cur."!cursor_pass"(rx191_pos, "lambda")
-    rx191_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx191_pos)
+    if_null rx191_debug, debug_449
+    rx191_cur."!cursor_debug"("PASS", "lambda", " at pos=", rx191_pos)
+  debug_449:
     .return (rx191_cur)
   rx191_restart:
 .annotate 'line', 4
-    rx191_cur."!cursor_debug"("NEXT ", "lambda")
+    if_null rx191_debug, debug_450
+    rx191_cur."!cursor_debug"("NEXT", "lambda")
+  debug_450:
   rx191_fail:
     (rx191_rep, rx191_pos, $I10, $P10) = rx191_cur."!mark_fail"(0)
     lt rx191_pos, -1, rx191_done
@@ -2929,14 +3072,16 @@
     jump $I10
   rx191_done:
     rx191_cur."!cursor_fail"()
-    rx191_cur."!cursor_debug"("FAIL  ", "lambda")
+    if_null rx191_debug, debug_451
+    rx191_cur."!cursor_debug"("FAIL", "lambda")
+  debug_451:
     .return (rx191_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__lambda"  :subid("43_1280467477.44751") :method
+.sub "!PREFIX__lambda"  :subid("43_1282324002.40722") :method
 .annotate 'line', 4
     new $P193, "ResizablePMCArray"
     push $P193, "<->"
@@ -2946,7 +3091,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "block"  :subid("44_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "block"  :subid("44_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx197_tgt
     .local int rx197_pos
@@ -2954,7 +3099,9 @@
     .local int rx197_eos
     .local int rx197_rep
     .local pmc rx197_cur
+    .local pmc rx197_debug
     (rx197_cur, rx197_pos, rx197_tgt, $I10) = self."!cursor_start"()
+    getattribute rx197_debug, rx197_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx197_cur
     .local pmc match
     .lex "$/", match
@@ -2966,7 +3113,9 @@
     substr rx197_tgt, rx197_tgt, rx197_off
   rx197_start:
     eq $I10, 1, rx197_restart
-    rx197_cur."!cursor_debug"("START ", "block")
+    if_null rx197_debug, debug_452
+    rx197_cur."!cursor_debug"("START", "block")
+  debug_452:
     $I10 = self.'from'()
     ne $I10, -1, rxscan201_done
     goto rxscan201_scan
@@ -3014,11 +3163,15 @@
 .annotate 'line', 132
   # rx pass
     rx197_cur."!cursor_pass"(rx197_pos, "block")
-    rx197_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx197_pos)
+    if_null rx197_debug, debug_453
+    rx197_cur."!cursor_debug"("PASS", "block", " at pos=", rx197_pos)
+  debug_453:
     .return (rx197_cur)
   rx197_restart:
 .annotate 'line', 4
-    rx197_cur."!cursor_debug"("NEXT ", "block")
+    if_null rx197_debug, debug_454
+    rx197_cur."!cursor_debug"("NEXT", "block")
+  debug_454:
   rx197_fail:
     (rx197_rep, rx197_pos, $I10, $P10) = rx197_cur."!mark_fail"(0)
     lt rx197_pos, -1, rx197_done
@@ -3026,14 +3179,16 @@
     jump $I10
   rx197_done:
     rx197_cur."!cursor_fail"()
-    rx197_cur."!cursor_debug"("FAIL  ", "block")
+    if_null rx197_debug, debug_455
+    rx197_cur."!cursor_debug"("FAIL", "block")
+  debug_455:
     .return (rx197_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__block"  :subid("45_1280467477.44751") :method
+.sub "!PREFIX__block"  :subid("45_1282324002.40722") :method
 .annotate 'line', 4
     $P199 = self."!PREFIX__!subrule"("panic", "")
     new $P200, "ResizablePMCArray"
@@ -3044,7 +3199,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blockoid"  :subid("46_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "blockoid"  :subid("46_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx204_tgt
     .local int rx204_pos
@@ -3052,7 +3207,9 @@
     .local int rx204_eos
     .local int rx204_rep
     .local pmc rx204_cur
+    .local pmc rx204_debug
     (rx204_cur, rx204_pos, rx204_tgt, $I10) = self."!cursor_start"()
+    getattribute rx204_debug, rx204_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx204_cur
     .local pmc match
     .lex "$/", match
@@ -3064,7 +3221,9 @@
     substr rx204_tgt, rx204_tgt, rx204_off
   rx204_start:
     eq $I10, 1, rx204_restart
-    rx204_cur."!cursor_debug"("START ", "blockoid")
+    if_null rx204_debug, debug_456
+    rx204_cur."!cursor_debug"("START", "blockoid")
+  debug_456:
     $I10 = self.'from'()
     ne $I10, -1, rxscan208_done
     goto rxscan208_scan
@@ -3088,8 +3247,8 @@
     add $I11, rx204_pos, 1
     gt $I11, rx204_eos, rx204_fail
     sub $I11, rx204_pos, rx204_off
-    substr $S10, rx204_tgt, $I11, 1
-    ne $S10, "{", rx204_fail
+    ord $I11, rx204_tgt, $I11
+    ne $I11, 123, rx204_fail
     add rx204_pos, 1
   # rx subrule "statementlist" subtype=capture negate=
     rx204_cur."!cursor_pos"(rx204_pos)
@@ -3105,8 +3264,8 @@
     add $I11, rx204_pos, 1
     gt $I11, rx204_eos, rx204_fail
     sub $I11, rx204_pos, rx204_off
-    substr $S10, rx204_tgt, $I11, 1
-    ne $S10, "}", rx204_fail
+    ord $I11, rx204_tgt, $I11
+    ne $I11, 125, rx204_fail
     add rx204_pos, 1
     goto alt209_end
   alt209_1:
@@ -3131,11 +3290,15 @@
 .annotate 'line', 138
   # rx pass
     rx204_cur."!cursor_pass"(rx204_pos, "blockoid")
-    rx204_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx204_pos)
+    if_null rx204_debug, debug_457
+    rx204_cur."!cursor_debug"("PASS", "blockoid", " at pos=", rx204_pos)
+  debug_457:
     .return (rx204_cur)
   rx204_restart:
 .annotate 'line', 4
-    rx204_cur."!cursor_debug"("NEXT ", "blockoid")
+    if_null rx204_debug, debug_458
+    rx204_cur."!cursor_debug"("NEXT", "blockoid")
+  debug_458:
   rx204_fail:
     (rx204_rep, rx204_pos, $I10, $P10) = rx204_cur."!mark_fail"(0)
     lt rx204_pos, -1, rx204_done
@@ -3143,14 +3306,16 @@
     jump $I10
   rx204_done:
     rx204_cur."!cursor_fail"()
-    rx204_cur."!cursor_debug"("FAIL  ", "blockoid")
+    if_null rx204_debug, debug_459
+    rx204_cur."!cursor_debug"("FAIL", "blockoid")
+  debug_459:
     .return (rx204_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blockoid"  :subid("47_1280467477.44751") :method
+.sub "!PREFIX__blockoid"  :subid("47_1282324002.40722") :method
 .annotate 'line', 4
     $P206 = self."!PREFIX__!subrule"("finishpad", "")
     new $P207, "ResizablePMCArray"
@@ -3160,7 +3325,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "newpad"  :subid("48_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "newpad"  :subid("48_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx213_tgt
     .local int rx213_pos
@@ -3168,7 +3333,9 @@
     .local int rx213_eos
     .local int rx213_rep
     .local pmc rx213_cur
+    .local pmc rx213_debug
     (rx213_cur, rx213_pos, rx213_tgt, $I10) = self."!cursor_start"()
+    getattribute rx213_debug, rx213_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx213_cur
     .local pmc match
     .lex "$/", match
@@ -3180,7 +3347,9 @@
     substr rx213_tgt, rx213_tgt, rx213_off
   rx213_start:
     eq $I10, 1, rx213_restart
-    rx213_cur."!cursor_debug"("START ", "newpad")
+    if_null rx213_debug, debug_460
+    rx213_cur."!cursor_debug"("START", "newpad")
+  debug_460:
     $I10 = self.'from'()
     ne $I10, -1, rxscan216_done
     goto rxscan216_scan
@@ -3196,11 +3365,15 @@
 .annotate 'line', 144
   # rx pass
     rx213_cur."!cursor_pass"(rx213_pos, "newpad")
-    rx213_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx213_pos)
+    if_null rx213_debug, debug_461
+    rx213_cur."!cursor_debug"("PASS", "newpad", " at pos=", rx213_pos)
+  debug_461:
     .return (rx213_cur)
   rx213_restart:
 .annotate 'line', 4
-    rx213_cur."!cursor_debug"("NEXT ", "newpad")
+    if_null rx213_debug, debug_462
+    rx213_cur."!cursor_debug"("NEXT", "newpad")
+  debug_462:
   rx213_fail:
     (rx213_rep, rx213_pos, $I10, $P10) = rx213_cur."!mark_fail"(0)
     lt rx213_pos, -1, rx213_done
@@ -3208,14 +3381,16 @@
     jump $I10
   rx213_done:
     rx213_cur."!cursor_fail"()
-    rx213_cur."!cursor_debug"("FAIL  ", "newpad")
+    if_null rx213_debug, debug_463
+    rx213_cur."!cursor_debug"("FAIL", "newpad")
+  debug_463:
     .return (rx213_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__newpad"  :subid("49_1280467477.44751") :method
+.sub "!PREFIX__newpad"  :subid("49_1282324002.40722") :method
 .annotate 'line', 4
     new $P215, "ResizablePMCArray"
     push $P215, ""
@@ -3224,7 +3399,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "outerctx"  :subid("50_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "outerctx"  :subid("50_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx218_tgt
     .local int rx218_pos
@@ -3232,7 +3407,9 @@
     .local int rx218_eos
     .local int rx218_rep
     .local pmc rx218_cur
+    .local pmc rx218_debug
     (rx218_cur, rx218_pos, rx218_tgt, $I10) = self."!cursor_start"()
+    getattribute rx218_debug, rx218_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx218_cur
     .local pmc match
     .lex "$/", match
@@ -3244,7 +3421,9 @@
     substr rx218_tgt, rx218_tgt, rx218_off
   rx218_start:
     eq $I10, 1, rx218_restart
-    rx218_cur."!cursor_debug"("START ", "outerctx")
+    if_null rx218_debug, debug_464
+    rx218_cur."!cursor_debug"("START", "outerctx")
+  debug_464:
     $I10 = self.'from'()
     ne $I10, -1, rxscan221_done
     goto rxscan221_scan
@@ -3260,11 +3439,15 @@
 .annotate 'line', 145
   # rx pass
     rx218_cur."!cursor_pass"(rx218_pos, "outerctx")
-    rx218_cur."!cursor_debug"("PASS  ", "outerctx", " at pos=", rx218_pos)
+    if_null rx218_debug, debug_465
+    rx218_cur."!cursor_debug"("PASS", "outerctx", " at pos=", rx218_pos)
+  debug_465:
     .return (rx218_cur)
   rx218_restart:
 .annotate 'line', 4
-    rx218_cur."!cursor_debug"("NEXT ", "outerctx")
+    if_null rx218_debug, debug_466
+    rx218_cur."!cursor_debug"("NEXT", "outerctx")
+  debug_466:
   rx218_fail:
     (rx218_rep, rx218_pos, $I10, $P10) = rx218_cur."!mark_fail"(0)
     lt rx218_pos, -1, rx218_done
@@ -3272,14 +3455,16 @@
     jump $I10
   rx218_done:
     rx218_cur."!cursor_fail"()
-    rx218_cur."!cursor_debug"("FAIL  ", "outerctx")
+    if_null rx218_debug, debug_467
+    rx218_cur."!cursor_debug"("FAIL", "outerctx")
+  debug_467:
     .return (rx218_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__outerctx"  :subid("51_1280467477.44751") :method
+.sub "!PREFIX__outerctx"  :subid("51_1282324002.40722") :method
 .annotate 'line', 4
     new $P220, "ResizablePMCArray"
     push $P220, ""
@@ -3288,7 +3473,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "finishpad"  :subid("52_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "finishpad"  :subid("52_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx223_tgt
     .local int rx223_pos
@@ -3296,7 +3481,9 @@
     .local int rx223_eos
     .local int rx223_rep
     .local pmc rx223_cur
+    .local pmc rx223_debug
     (rx223_cur, rx223_pos, rx223_tgt, $I10) = self."!cursor_start"()
+    getattribute rx223_debug, rx223_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx223_cur
     .local pmc match
     .lex "$/", match
@@ -3308,7 +3495,9 @@
     substr rx223_tgt, rx223_tgt, rx223_off
   rx223_start:
     eq $I10, 1, rx223_restart
-    rx223_cur."!cursor_debug"("START ", "finishpad")
+    if_null rx223_debug, debug_468
+    rx223_cur."!cursor_debug"("START", "finishpad")
+  debug_468:
     $I10 = self.'from'()
     ne $I10, -1, rxscan226_done
     goto rxscan226_scan
@@ -3324,11 +3513,15 @@
 .annotate 'line', 146
   # rx pass
     rx223_cur."!cursor_pass"(rx223_pos, "finishpad")
-    rx223_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx223_pos)
+    if_null rx223_debug, debug_469
+    rx223_cur."!cursor_debug"("PASS", "finishpad", " at pos=", rx223_pos)
+  debug_469:
     .return (rx223_cur)
   rx223_restart:
 .annotate 'line', 4
-    rx223_cur."!cursor_debug"("NEXT ", "finishpad")
+    if_null rx223_debug, debug_470
+    rx223_cur."!cursor_debug"("NEXT", "finishpad")
+  debug_470:
   rx223_fail:
     (rx223_rep, rx223_pos, $I10, $P10) = rx223_cur."!mark_fail"(0)
     lt rx223_pos, -1, rx223_done
@@ -3336,14 +3529,16 @@
     jump $I10
   rx223_done:
     rx223_cur."!cursor_fail"()
-    rx223_cur."!cursor_debug"("FAIL  ", "finishpad")
+    if_null rx223_debug, debug_471
+    rx223_cur."!cursor_debug"("FAIL", "finishpad")
+  debug_471:
     .return (rx223_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__finishpad"  :subid("53_1280467477.44751") :method
+.sub "!PREFIX__finishpad"  :subid("53_1282324002.40722") :method
 .annotate 'line', 4
     new $P225, "ResizablePMCArray"
     push $P225, ""
@@ -3352,7 +3547,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator"  :subid("54_1280467477.44751") :method
+.sub "terminator"  :subid("54_1282324002.40722") :method
 .annotate 'line', 148
     $P228 = self."!protoregex"("terminator")
     .return ($P228)
@@ -3360,7 +3555,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator"  :subid("55_1280467477.44751") :method
+.sub "!PREFIX__terminator"  :subid("55_1282324002.40722") :method
 .annotate 'line', 148
     $P230 = self."!PREFIX__!protoregex"("terminator")
     .return ($P230)
@@ -3368,7 +3563,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<;>"  :subid("56_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "terminator:sym<;>"  :subid("56_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx232_tgt
     .local int rx232_pos
@@ -3376,7 +3571,9 @@
     .local int rx232_eos
     .local int rx232_rep
     .local pmc rx232_cur
+    .local pmc rx232_debug
     (rx232_cur, rx232_pos, rx232_tgt, $I10) = self."!cursor_start"()
+    getattribute rx232_debug, rx232_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx232_cur
     .local pmc match
     .lex "$/", match
@@ -3388,7 +3585,9 @@
     substr rx232_tgt, rx232_tgt, rx232_off
   rx232_start:
     eq $I10, 1, rx232_restart
-    rx232_cur."!cursor_debug"("START ", "terminator:sym<;>")
+    if_null rx232_debug, debug_472
+    rx232_cur."!cursor_debug"("START", "terminator:sym<;>")
+  debug_472:
     $I10 = self.'from'()
     ne $I10, -1, rxscan235_done
     goto rxscan235_scan
@@ -3410,11 +3609,15 @@
     lt $I11, 0, rx232_fail
   # rx pass
     rx232_cur."!cursor_pass"(rx232_pos, "terminator:sym<;>")
-    rx232_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx232_pos)
+    if_null rx232_debug, debug_473
+    rx232_cur."!cursor_debug"("PASS", "terminator:sym<;>", " at pos=", rx232_pos)
+  debug_473:
     .return (rx232_cur)
   rx232_restart:
 .annotate 'line', 4
-    rx232_cur."!cursor_debug"("NEXT ", "terminator:sym<;>")
+    if_null rx232_debug, debug_474
+    rx232_cur."!cursor_debug"("NEXT", "terminator:sym<;>")
+  debug_474:
   rx232_fail:
     (rx232_rep, rx232_pos, $I10, $P10) = rx232_cur."!mark_fail"(0)
     lt rx232_pos, -1, rx232_done
@@ -3422,14 +3625,16 @@
     jump $I10
   rx232_done:
     rx232_cur."!cursor_fail"()
-    rx232_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
+    if_null rx232_debug, debug_475
+    rx232_cur."!cursor_debug"("FAIL", "terminator:sym<;>")
+  debug_475:
     .return (rx232_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<;>"  :subid("57_1280467477.44751") :method
+.sub "!PREFIX__terminator:sym<;>"  :subid("57_1282324002.40722") :method
 .annotate 'line', 4
     new $P234, "ResizablePMCArray"
     push $P234, ";"
@@ -3438,7 +3643,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<}>"  :subid("58_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "terminator:sym<}>"  :subid("58_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx237_tgt
     .local int rx237_pos
@@ -3446,7 +3651,9 @@
     .local int rx237_eos
     .local int rx237_rep
     .local pmc rx237_cur
+    .local pmc rx237_debug
     (rx237_cur, rx237_pos, rx237_tgt, $I10) = self."!cursor_start"()
+    getattribute rx237_debug, rx237_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx237_cur
     .local pmc match
     .lex "$/", match
@@ -3458,7 +3665,9 @@
     substr rx237_tgt, rx237_tgt, rx237_off
   rx237_start:
     eq $I10, 1, rx237_restart
-    rx237_cur."!cursor_debug"("START ", "terminator:sym<}>")
+    if_null rx237_debug, debug_476
+    rx237_cur."!cursor_debug"("START", "terminator:sym<}>")
+  debug_476:
     $I10 = self.'from'()
     ne $I10, -1, rxscan240_done
     goto rxscan240_scan
@@ -3480,11 +3689,15 @@
     lt $I11, 0, rx237_fail
   # rx pass
     rx237_cur."!cursor_pass"(rx237_pos, "terminator:sym<}>")
-    rx237_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx237_pos)
+    if_null rx237_debug, debug_477
+    rx237_cur."!cursor_debug"("PASS", "terminator:sym<}>", " at pos=", rx237_pos)
+  debug_477:
     .return (rx237_cur)
   rx237_restart:
 .annotate 'line', 4
-    rx237_cur."!cursor_debug"("NEXT ", "terminator:sym<}>")
+    if_null rx237_debug, debug_478
+    rx237_cur."!cursor_debug"("NEXT", "terminator:sym<}>")
+  debug_478:
   rx237_fail:
     (rx237_rep, rx237_pos, $I10, $P10) = rx237_cur."!mark_fail"(0)
     lt rx237_pos, -1, rx237_done
@@ -3492,14 +3705,16 @@
     jump $I10
   rx237_done:
     rx237_cur."!cursor_fail"()
-    rx237_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
+    if_null rx237_debug, debug_479
+    rx237_cur."!cursor_debug"("FAIL", "terminator:sym<}>")
+  debug_479:
     .return (rx237_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<}>"  :subid("59_1280467477.44751") :method
+.sub "!PREFIX__terminator:sym<}>"  :subid("59_1282324002.40722") :method
 .annotate 'line', 4
     new $P239, "ResizablePMCArray"
     push $P239, "}"
@@ -3508,7 +3723,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control"  :subid("60_1280467477.44751") :method
+.sub "statement_control"  :subid("60_1282324002.40722") :method
 .annotate 'line', 155
     $P242 = self."!protoregex"("statement_control")
     .return ($P242)
@@ -3516,7 +3731,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control"  :subid("61_1280467477.44751") :method
+.sub "!PREFIX__statement_control"  :subid("61_1282324002.40722") :method
 .annotate 'line', 155
     $P244 = self."!PREFIX__!protoregex"("statement_control")
     .return ($P244)
@@ -3524,7 +3739,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<if>"  :subid("62_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_control:sym<if>"  :subid("62_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx246_tgt
     .local int rx246_pos
@@ -3532,8 +3747,10 @@
     .local int rx246_eos
     .local int rx246_rep
     .local pmc rx246_cur
+    .local pmc rx246_debug
     (rx246_cur, rx246_pos, rx246_tgt, $I10) = self."!cursor_start"()
-    rx246_cur."!cursor_caparray"("xblock", "else")
+    rx246_cur."!cursor_caparray"("else", "xblock")
+    getattribute rx246_debug, rx246_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx246_cur
     .local pmc match
     .lex "$/", match
@@ -3545,7 +3762,9 @@
     substr rx246_tgt, rx246_tgt, rx246_off
   rx246_start:
     eq $I10, 1, rx246_restart
-    rx246_cur."!cursor_debug"("START ", "statement_control:sym<if>")
+    if_null rx246_debug, debug_480
+    rx246_cur."!cursor_debug"("START", "statement_control:sym<if>")
+  debug_480:
     $I10 = self.'from'()
     ne $I10, -1, rxscan249_done
     goto rxscan249_scan
@@ -3706,11 +3925,15 @@
 .annotate 'line', 157
   # rx pass
     rx246_cur."!cursor_pass"(rx246_pos, "statement_control:sym<if>")
-    rx246_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx246_pos)
+    if_null rx246_debug, debug_481
+    rx246_cur."!cursor_debug"("PASS", "statement_control:sym<if>", " at pos=", rx246_pos)
+  debug_481:
     .return (rx246_cur)
   rx246_restart:
 .annotate 'line', 4
-    rx246_cur."!cursor_debug"("NEXT ", "statement_control:sym<if>")
+    if_null rx246_debug, debug_482
+    rx246_cur."!cursor_debug"("NEXT", "statement_control:sym<if>")
+  debug_482:
   rx246_fail:
     (rx246_rep, rx246_pos, $I10, $P10) = rx246_cur."!mark_fail"(0)
     lt rx246_pos, -1, rx246_done
@@ -3718,14 +3941,16 @@
     jump $I10
   rx246_done:
     rx246_cur."!cursor_fail"()
-    rx246_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
+    if_null rx246_debug, debug_483
+    rx246_cur."!cursor_debug"("FAIL", "statement_control:sym<if>")
+  debug_483:
     .return (rx246_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<if>"  :subid("63_1280467477.44751") :method
+.sub "!PREFIX__statement_control:sym<if>"  :subid("63_1282324002.40722") :method
 .annotate 'line', 4
     new $P248, "ResizablePMCArray"
     push $P248, "if"
@@ -3734,9 +3959,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<unless>"  :subid("64_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_control:sym<unless>"  :subid("64_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
-    .const 'Sub' $P274 = "66_1280467477.44751" 
+    .const 'Sub' $P274 = "66_1282324002.40722" 
     capture_lex $P274
     .local string rx264_tgt
     .local int rx264_pos
@@ -3744,7 +3969,9 @@
     .local int rx264_eos
     .local int rx264_rep
     .local pmc rx264_cur
+    .local pmc rx264_debug
     (rx264_cur, rx264_pos, rx264_tgt, $I10) = self."!cursor_start"()
+    getattribute rx264_debug, rx264_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx264_cur
     .local pmc match
     .lex "$/", match
@@ -3756,7 +3983,9 @@
     substr rx264_tgt, rx264_tgt, rx264_off
   rx264_start:
     eq $I10, 1, rx264_restart
-    rx264_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
+    if_null rx264_debug, debug_484
+    rx264_cur."!cursor_debug"("START", "statement_control:sym<unless>")
+  debug_484:
     $I10 = self.'from'()
     ne $I10, -1, rxscan267_done
     goto rxscan267_scan
@@ -3826,7 +4055,7 @@
     rx264_pos = $P10."pos"()
   # rx subrule "before" subtype=zerowidth negate=1
     rx264_cur."!cursor_pos"(rx264_pos)
-    .const 'Sub' $P274 = "66_1280467477.44751" 
+    .const 'Sub' $P274 = "66_1282324002.40722" 
     capture_lex $P274
     $P10 = rx264_cur."before"($P274)
     if $P10, rx264_fail
@@ -3861,11 +4090,15 @@
 .annotate 'line', 164
   # rx pass
     rx264_cur."!cursor_pass"(rx264_pos, "statement_control:sym<unless>")
-    rx264_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx264_pos)
+    if_null rx264_debug, debug_489
+    rx264_cur."!cursor_debug"("PASS", "statement_control:sym<unless>", " at pos=", rx264_pos)
+  debug_489:
     .return (rx264_cur)
   rx264_restart:
 .annotate 'line', 4
-    rx264_cur."!cursor_debug"("NEXT ", "statement_control:sym<unless>")
+    if_null rx264_debug, debug_490
+    rx264_cur."!cursor_debug"("NEXT", "statement_control:sym<unless>")
+  debug_490:
   rx264_fail:
     (rx264_rep, rx264_pos, $I10, $P10) = rx264_cur."!mark_fail"(0)
     lt rx264_pos, -1, rx264_done
@@ -3873,14 +4106,16 @@
     jump $I10
   rx264_done:
     rx264_cur."!cursor_fail"()
-    rx264_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
+    if_null rx264_debug, debug_491
+    rx264_cur."!cursor_debug"("FAIL", "statement_control:sym<unless>")
+  debug_491:
     .return (rx264_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<unless>"  :subid("65_1280467477.44751") :method
+.sub "!PREFIX__statement_control:sym<unless>"  :subid("65_1282324002.40722") :method
 .annotate 'line', 4
     new $P266, "ResizablePMCArray"
     push $P266, "unless"
@@ -3889,7 +4124,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block273"  :anon :subid("66_1280467477.44751") :method :outer("64_1280467477.44751")
+.sub "_block273"  :anon :subid("66_1282324002.40722") :method :outer("64_1282324002.40722")
 .annotate 'line', 167
     .local string rx275_tgt
     .local int rx275_pos
@@ -3897,7 +4132,9 @@
     .local int rx275_eos
     .local int rx275_rep
     .local pmc rx275_cur
+    .local pmc rx275_debug
     (rx275_cur, rx275_pos, rx275_tgt, $I10) = self."!cursor_start"()
+    getattribute rx275_debug, rx275_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx275_cur
     .local pmc match
     .lex "$/", match
@@ -3909,7 +4146,9 @@
     substr rx275_tgt, rx275_tgt, rx275_off
   rx275_start:
     eq $I10, 1, rx275_restart
-    rx275_cur."!cursor_debug"("START ", "")
+    if_null rx275_debug, debug_485
+    rx275_cur."!cursor_debug"("START", "")
+  debug_485:
     $I10 = self.'from'()
     ne $I10, -1, rxscan276_done
     goto rxscan276_scan
@@ -3931,10 +4170,14 @@
     add rx275_pos, 4
   # rx pass
     rx275_cur."!cursor_pass"(rx275_pos, "")
-    rx275_cur."!cursor_debug"("PASS  ", "", " at pos=", rx275_pos)
+    if_null rx275_debug, debug_486
+    rx275_cur."!cursor_debug"("PASS", "", " at pos=", rx275_pos)
+  debug_486:
     .return (rx275_cur)
   rx275_restart:
-    rx275_cur."!cursor_debug"("NEXT ", "")
+    if_null rx275_debug, debug_487
+    rx275_cur."!cursor_debug"("NEXT", "")
+  debug_487:
   rx275_fail:
     (rx275_rep, rx275_pos, $I10, $P10) = rx275_cur."!mark_fail"(0)
     lt rx275_pos, -1, rx275_done
@@ -3942,14 +4185,16 @@
     jump $I10
   rx275_done:
     rx275_cur."!cursor_fail"()
-    rx275_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx275_debug, debug_488
+    rx275_cur."!cursor_debug"("FAIL", "")
+  debug_488:
     .return (rx275_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<while>"  :subid("67_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_control:sym<while>"  :subid("67_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx282_tgt
     .local int rx282_pos
@@ -3957,7 +4202,9 @@
     .local int rx282_eos
     .local int rx282_rep
     .local pmc rx282_cur
+    .local pmc rx282_debug
     (rx282_cur, rx282_pos, rx282_tgt, $I10) = self."!cursor_start"()
+    getattribute rx282_debug, rx282_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx282_cur
     .local pmc match
     .lex "$/", match
@@ -3969,7 +4216,9 @@
     substr rx282_tgt, rx282_tgt, rx282_off
   rx282_start:
     eq $I10, 1, rx282_restart
-    rx282_cur."!cursor_debug"("START ", "statement_control:sym<while>")
+    if_null rx282_debug, debug_492
+    rx282_cur."!cursor_debug"("START", "statement_control:sym<while>")
+  debug_492:
     $I10 = self.'from'()
     ne $I10, -1, rxscan285_done
     goto rxscan285_scan
@@ -4044,11 +4293,15 @@
 .annotate 'line', 170
   # rx pass
     rx282_cur."!cursor_pass"(rx282_pos, "statement_control:sym<while>")
-    rx282_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx282_pos)
+    if_null rx282_debug, debug_493
+    rx282_cur."!cursor_debug"("PASS", "statement_control:sym<while>", " at pos=", rx282_pos)
+  debug_493:
     .return (rx282_cur)
   rx282_restart:
 .annotate 'line', 4
-    rx282_cur."!cursor_debug"("NEXT ", "statement_control:sym<while>")
+    if_null rx282_debug, debug_494
+    rx282_cur."!cursor_debug"("NEXT", "statement_control:sym<while>")
+  debug_494:
   rx282_fail:
     (rx282_rep, rx282_pos, $I10, $P10) = rx282_cur."!mark_fail"(0)
     lt rx282_pos, -1, rx282_done
@@ -4056,14 +4309,16 @@
     jump $I10
   rx282_done:
     rx282_cur."!cursor_fail"()
-    rx282_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
+    if_null rx282_debug, debug_495
+    rx282_cur."!cursor_debug"("FAIL", "statement_control:sym<while>")
+  debug_495:
     .return (rx282_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<while>"  :subid("68_1280467477.44751") :method
+.sub "!PREFIX__statement_control:sym<while>"  :subid("68_1282324002.40722") :method
 .annotate 'line', 4
     new $P284, "ResizablePMCArray"
     push $P284, "until"
@@ -4073,7 +4328,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<repeat>"  :subid("69_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_control:sym<repeat>"  :subid("69_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx291_tgt
     .local int rx291_pos
@@ -4081,7 +4336,9 @@
     .local int rx291_eos
     .local int rx291_rep
     .local pmc rx291_cur
+    .local pmc rx291_debug
     (rx291_cur, rx291_pos, rx291_tgt, $I10) = self."!cursor_start"()
+    getattribute rx291_debug, rx291_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx291_cur
     .local pmc match
     .lex "$/", match
@@ -4093,7 +4350,9 @@
     substr rx291_tgt, rx291_tgt, rx291_off
   rx291_start:
     eq $I10, 1, rx291_restart
-    rx291_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
+    if_null rx291_debug, debug_496
+    rx291_cur."!cursor_debug"("START", "statement_control:sym<repeat>")
+  debug_496:
     $I10 = self.'from'()
     ne $I10, -1, rxscan294_done
     goto rxscan294_scan
@@ -4293,11 +4552,15 @@
 .annotate 'line', 175
   # rx pass
     rx291_cur."!cursor_pass"(rx291_pos, "statement_control:sym<repeat>")
-    rx291_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx291_pos)
+    if_null rx291_debug, debug_497
+    rx291_cur."!cursor_debug"("PASS", "statement_control:sym<repeat>", " at pos=", rx291_pos)
+  debug_497:
     .return (rx291_cur)
   rx291_restart:
 .annotate 'line', 4
-    rx291_cur."!cursor_debug"("NEXT ", "statement_control:sym<repeat>")
+    if_null rx291_debug, debug_498
+    rx291_cur."!cursor_debug"("NEXT", "statement_control:sym<repeat>")
+  debug_498:
   rx291_fail:
     (rx291_rep, rx291_pos, $I10, $P10) = rx291_cur."!mark_fail"(0)
     lt rx291_pos, -1, rx291_done
@@ -4305,14 +4568,16 @@
     jump $I10
   rx291_done:
     rx291_cur."!cursor_fail"()
-    rx291_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
+    if_null rx291_debug, debug_499
+    rx291_cur."!cursor_debug"("FAIL", "statement_control:sym<repeat>")
+  debug_499:
     .return (rx291_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<repeat>"  :subid("70_1280467477.44751") :method
+.sub "!PREFIX__statement_control:sym<repeat>"  :subid("70_1282324002.40722") :method
 .annotate 'line', 4
     new $P293, "ResizablePMCArray"
     push $P293, "repeat"
@@ -4321,7 +4586,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<for>"  :subid("71_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_control:sym<for>"  :subid("71_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx311_tgt
     .local int rx311_pos
@@ -4329,7 +4594,9 @@
     .local int rx311_eos
     .local int rx311_rep
     .local pmc rx311_cur
+    .local pmc rx311_debug
     (rx311_cur, rx311_pos, rx311_tgt, $I10) = self."!cursor_start"()
+    getattribute rx311_debug, rx311_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx311_cur
     .local pmc match
     .lex "$/", match
@@ -4341,7 +4608,9 @@
     substr rx311_tgt, rx311_tgt, rx311_off
   rx311_start:
     eq $I10, 1, rx311_restart
-    rx311_cur."!cursor_debug"("START ", "statement_control:sym<for>")
+    if_null rx311_debug, debug_500
+    rx311_cur."!cursor_debug"("START", "statement_control:sym<for>")
+  debug_500:
     $I10 = self.'from'()
     ne $I10, -1, rxscan314_done
     goto rxscan314_scan
@@ -4403,11 +4672,15 @@
 .annotate 'line', 183
   # rx pass
     rx311_cur."!cursor_pass"(rx311_pos, "statement_control:sym<for>")
-    rx311_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx311_pos)
+    if_null rx311_debug, debug_501
+    rx311_cur."!cursor_debug"("PASS", "statement_control:sym<for>", " at pos=", rx311_pos)
+  debug_501:
     .return (rx311_cur)
   rx311_restart:
 .annotate 'line', 4
-    rx311_cur."!cursor_debug"("NEXT ", "statement_control:sym<for>")
+    if_null rx311_debug, debug_502
+    rx311_cur."!cursor_debug"("NEXT", "statement_control:sym<for>")
+  debug_502:
   rx311_fail:
     (rx311_rep, rx311_pos, $I10, $P10) = rx311_cur."!mark_fail"(0)
     lt rx311_pos, -1, rx311_done
@@ -4415,14 +4688,16 @@
     jump $I10
   rx311_done:
     rx311_cur."!cursor_fail"()
-    rx311_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
+    if_null rx311_debug, debug_503
+    rx311_cur."!cursor_debug"("FAIL", "statement_control:sym<for>")
+  debug_503:
     .return (rx311_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<for>"  :subid("72_1280467477.44751") :method
+.sub "!PREFIX__statement_control:sym<for>"  :subid("72_1282324002.40722") :method
 .annotate 'line', 4
     new $P313, "ResizablePMCArray"
     push $P313, "for"
@@ -4431,7 +4706,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CATCH>"  :subid("73_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_control:sym<CATCH>"  :subid("73_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx319_tgt
     .local int rx319_pos
@@ -4439,7 +4714,9 @@
     .local int rx319_eos
     .local int rx319_rep
     .local pmc rx319_cur
+    .local pmc rx319_debug
     (rx319_cur, rx319_pos, rx319_tgt, $I10) = self."!cursor_start"()
+    getattribute rx319_debug, rx319_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx319_cur
     .local pmc match
     .lex "$/", match
@@ -4451,7 +4728,9 @@
     substr rx319_tgt, rx319_tgt, rx319_off
   rx319_start:
     eq $I10, 1, rx319_restart
-    rx319_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
+    if_null rx319_debug, debug_504
+    rx319_cur."!cursor_debug"("START", "statement_control:sym<CATCH>")
+  debug_504:
     $I10 = self.'from'()
     ne $I10, -1, rxscan322_done
     goto rxscan322_scan
@@ -4513,11 +4792,15 @@
 .annotate 'line', 188
   # rx pass
     rx319_cur."!cursor_pass"(rx319_pos, "statement_control:sym<CATCH>")
-    rx319_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx319_pos)
+    if_null rx319_debug, debug_505
+    rx319_cur."!cursor_debug"("PASS", "statement_control:sym<CATCH>", " at pos=", rx319_pos)
+  debug_505:
     .return (rx319_cur)
   rx319_restart:
 .annotate 'line', 4
-    rx319_cur."!cursor_debug"("NEXT ", "statement_control:sym<CATCH>")
+    if_null rx319_debug, debug_506
+    rx319_cur."!cursor_debug"("NEXT", "statement_control:sym<CATCH>")
+  debug_506:
   rx319_fail:
     (rx319_rep, rx319_pos, $I10, $P10) = rx319_cur."!mark_fail"(0)
     lt rx319_pos, -1, rx319_done
@@ -4525,14 +4808,16 @@
     jump $I10
   rx319_done:
     rx319_cur."!cursor_fail"()
-    rx319_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
+    if_null rx319_debug, debug_507
+    rx319_cur."!cursor_debug"("FAIL", "statement_control:sym<CATCH>")
+  debug_507:
     .return (rx319_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("74_1280467477.44751") :method
+.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("74_1282324002.40722") :method
 .annotate 'line', 4
     new $P321, "ResizablePMCArray"
     push $P321, "CATCH"
@@ -4541,7 +4826,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CONTROL>"  :subid("75_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_control:sym<CONTROL>"  :subid("75_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx327_tgt
     .local int rx327_pos
@@ -4549,7 +4834,9 @@
     .local int rx327_eos
     .local int rx327_rep
     .local pmc rx327_cur
+    .local pmc rx327_debug
     (rx327_cur, rx327_pos, rx327_tgt, $I10) = self."!cursor_start"()
+    getattribute rx327_debug, rx327_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx327_cur
     .local pmc match
     .lex "$/", match
@@ -4561,7 +4848,9 @@
     substr rx327_tgt, rx327_tgt, rx327_off
   rx327_start:
     eq $I10, 1, rx327_restart
-    rx327_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
+    if_null rx327_debug, debug_508
+    rx327_cur."!cursor_debug"("START", "statement_control:sym<CONTROL>")
+  debug_508:
     $I10 = self.'from'()
     ne $I10, -1, rxscan330_done
     goto rxscan330_scan
@@ -4623,11 +4912,15 @@
 .annotate 'line', 193
   # rx pass
     rx327_cur."!cursor_pass"(rx327_pos, "statement_control:sym<CONTROL>")
-    rx327_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx327_pos)
+    if_null rx327_debug, debug_509
+    rx327_cur."!cursor_debug"("PASS", "statement_control:sym<CONTROL>", " at pos=", rx327_pos)
+  debug_509:
     .return (rx327_cur)
   rx327_restart:
 .annotate 'line', 4
-    rx327_cur."!cursor_debug"("NEXT ", "statement_control:sym<CONTROL>")
+    if_null rx327_debug, debug_510
+    rx327_cur."!cursor_debug"("NEXT", "statement_control:sym<CONTROL>")
+  debug_510:
   rx327_fail:
     (rx327_rep, rx327_pos, $I10, $P10) = rx327_cur."!mark_fail"(0)
     lt rx327_pos, -1, rx327_done
@@ -4635,14 +4928,16 @@
     jump $I10
   rx327_done:
     rx327_cur."!cursor_fail"()
-    rx327_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
+    if_null rx327_debug, debug_511
+    rx327_cur."!cursor_debug"("FAIL", "statement_control:sym<CONTROL>")
+  debug_511:
     .return (rx327_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("76_1280467477.44751") :method
+.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("76_1282324002.40722") :method
 .annotate 'line', 4
     new $P329, "ResizablePMCArray"
     push $P329, "CONTROL"
@@ -4651,7 +4946,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix"  :subid("77_1280467477.44751") :method
+.sub "statement_prefix"  :subid("77_1282324002.40722") :method
 .annotate 'line', 198
     $P335 = self."!protoregex"("statement_prefix")
     .return ($P335)
@@ -4659,7 +4954,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix"  :subid("78_1280467477.44751") :method
+.sub "!PREFIX__statement_prefix"  :subid("78_1282324002.40722") :method
 .annotate 'line', 198
     $P337 = self."!PREFIX__!protoregex"("statement_prefix")
     .return ($P337)
@@ -4667,7 +4962,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<INIT>"  :subid("79_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_prefix:sym<INIT>"  :subid("79_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx339_tgt
     .local int rx339_pos
@@ -4675,7 +4970,9 @@
     .local int rx339_eos
     .local int rx339_rep
     .local pmc rx339_cur
+    .local pmc rx339_debug
     (rx339_cur, rx339_pos, rx339_tgt, $I10) = self."!cursor_start"()
+    getattribute rx339_debug, rx339_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx339_cur
     .local pmc match
     .lex "$/", match
@@ -4687,7 +4984,9 @@
     substr rx339_tgt, rx339_tgt, rx339_off
   rx339_start:
     eq $I10, 1, rx339_restart
-    rx339_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
+    if_null rx339_debug, debug_512
+    rx339_cur."!cursor_debug"("START", "statement_prefix:sym<INIT>")
+  debug_512:
     $I10 = self.'from'()
     ne $I10, -1, rxscan343_done
     goto rxscan343_scan
@@ -4731,11 +5030,15 @@
     rx339_pos = $P10."pos"()
   # rx pass
     rx339_cur."!cursor_pass"(rx339_pos, "statement_prefix:sym<INIT>")
-    rx339_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx339_pos)
+    if_null rx339_debug, debug_513
+    rx339_cur."!cursor_debug"("PASS", "statement_prefix:sym<INIT>", " at pos=", rx339_pos)
+  debug_513:
     .return (rx339_cur)
   rx339_restart:
 .annotate 'line', 4
-    rx339_cur."!cursor_debug"("NEXT ", "statement_prefix:sym<INIT>")
+    if_null rx339_debug, debug_514
+    rx339_cur."!cursor_debug"("NEXT", "statement_prefix:sym<INIT>")
+  debug_514:
   rx339_fail:
     (rx339_rep, rx339_pos, $I10, $P10) = rx339_cur."!mark_fail"(0)
     lt rx339_pos, -1, rx339_done
@@ -4743,14 +5046,16 @@
     jump $I10
   rx339_done:
     rx339_cur."!cursor_fail"()
-    rx339_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
+    if_null rx339_debug, debug_515
+    rx339_cur."!cursor_debug"("FAIL", "statement_prefix:sym<INIT>")
+  debug_515:
     .return (rx339_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("80_1280467477.44751") :method
+.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("80_1282324002.40722") :method
 .annotate 'line', 4
     $P341 = self."!PREFIX__!subrule"("blorst", "INIT")
     new $P342, "ResizablePMCArray"
@@ -4760,7 +5065,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<try>"  :subid("81_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_prefix:sym<try>"  :subid("81_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx346_tgt
     .local int rx346_pos
@@ -4768,7 +5073,9 @@
     .local int rx346_eos
     .local int rx346_rep
     .local pmc rx346_cur
+    .local pmc rx346_debug
     (rx346_cur, rx346_pos, rx346_tgt, $I10) = self."!cursor_start"()
+    getattribute rx346_debug, rx346_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx346_cur
     .local pmc match
     .lex "$/", match
@@ -4780,7 +5087,9 @@
     substr rx346_tgt, rx346_tgt, rx346_off
   rx346_start:
     eq $I10, 1, rx346_restart
-    rx346_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
+    if_null rx346_debug, debug_516
+    rx346_cur."!cursor_debug"("START", "statement_prefix:sym<try>")
+  debug_516:
     $I10 = self.'from'()
     ne $I10, -1, rxscan350_done
     goto rxscan350_scan
@@ -4826,11 +5135,15 @@
 .annotate 'line', 201
   # rx pass
     rx346_cur."!cursor_pass"(rx346_pos, "statement_prefix:sym<try>")
-    rx346_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx346_pos)
+    if_null rx346_debug, debug_517
+    rx346_cur."!cursor_debug"("PASS", "statement_prefix:sym<try>", " at pos=", rx346_pos)
+  debug_517:
     .return (rx346_cur)
   rx346_restart:
 .annotate 'line', 4
-    rx346_cur."!cursor_debug"("NEXT ", "statement_prefix:sym<try>")
+    if_null rx346_debug, debug_518
+    rx346_cur."!cursor_debug"("NEXT", "statement_prefix:sym<try>")
+  debug_518:
   rx346_fail:
     (rx346_rep, rx346_pos, $I10, $P10) = rx346_cur."!mark_fail"(0)
     lt rx346_pos, -1, rx346_done
@@ -4838,14 +5151,16 @@
     jump $I10
   rx346_done:
     rx346_cur."!cursor_fail"()
-    rx346_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
+    if_null rx346_debug, debug_519
+    rx346_cur."!cursor_debug"("FAIL", "statement_prefix:sym<try>")
+  debug_519:
     .return (rx346_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<try>"  :subid("82_1280467477.44751") :method
+.sub "!PREFIX__statement_prefix:sym<try>"  :subid("82_1282324002.40722") :method
 .annotate 'line', 4
     $P348 = self."!PREFIX__!subrule"("blorst", "try")
     new $P349, "ResizablePMCArray"
@@ -4855,7 +5170,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blorst"  :subid("83_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "blorst"  :subid("83_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx353_tgt
     .local int rx353_pos
@@ -4863,7 +5178,9 @@
     .local int rx353_eos
     .local int rx353_rep
     .local pmc rx353_cur
+    .local pmc rx353_debug
     (rx353_cur, rx353_pos, rx353_tgt, $I10) = self."!cursor_start"()
+    getattribute rx353_debug, rx353_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx353_cur
     .local pmc match
     .lex "$/", match
@@ -4875,7 +5192,9 @@
     substr rx353_tgt, rx353_tgt, rx353_off
   rx353_start:
     eq $I10, 1, rx353_restart
-    rx353_cur."!cursor_debug"("START ", "blorst")
+    if_null rx353_debug, debug_520
+    rx353_cur."!cursor_debug"("START", "blorst")
+  debug_520:
     $I10 = self.'from'()
     ne $I10, -1, rxscan356_done
     goto rxscan356_scan
@@ -4929,11 +5248,15 @@
 .annotate 'line', 206
   # rx pass
     rx353_cur."!cursor_pass"(rx353_pos, "blorst")
-    rx353_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx353_pos)
+    if_null rx353_debug, debug_521
+    rx353_cur."!cursor_debug"("PASS", "blorst", " at pos=", rx353_pos)
+  debug_521:
     .return (rx353_cur)
   rx353_restart:
 .annotate 'line', 4
-    rx353_cur."!cursor_debug"("NEXT ", "blorst")
+    if_null rx353_debug, debug_522
+    rx353_cur."!cursor_debug"("NEXT", "blorst")
+  debug_522:
   rx353_fail:
     (rx353_rep, rx353_pos, $I10, $P10) = rx353_cur."!mark_fail"(0)
     lt rx353_pos, -1, rx353_done
@@ -4941,14 +5264,16 @@
     jump $I10
   rx353_done:
     rx353_cur."!cursor_fail"()
-    rx353_cur."!cursor_debug"("FAIL  ", "blorst")
+    if_null rx353_debug, debug_523
+    rx353_cur."!cursor_debug"("FAIL", "blorst")
+  debug_523:
     .return (rx353_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blorst"  :subid("84_1280467477.44751") :method
+.sub "!PREFIX__blorst"  :subid("84_1282324002.40722") :method
 .annotate 'line', 4
     new $P355, "ResizablePMCArray"
     push $P355, ""
@@ -4957,7 +5282,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond"  :subid("85_1280467477.44751") :method
+.sub "statement_mod_cond"  :subid("85_1282324002.40722") :method
 .annotate 'line', 212
     $P359 = self."!protoregex"("statement_mod_cond")
     .return ($P359)
@@ -4965,7 +5290,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond"  :subid("86_1280467477.44751") :method
+.sub "!PREFIX__statement_mod_cond"  :subid("86_1282324002.40722") :method
 .annotate 'line', 212
     $P361 = self."!PREFIX__!protoregex"("statement_mod_cond")
     .return ($P361)
@@ -4973,7 +5298,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<if>"  :subid("87_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_mod_cond:sym<if>"  :subid("87_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx363_tgt
     .local int rx363_pos
@@ -4981,7 +5306,9 @@
     .local int rx363_eos
     .local int rx363_rep
     .local pmc rx363_cur
+    .local pmc rx363_debug
     (rx363_cur, rx363_pos, rx363_tgt, $I10) = self."!cursor_start"()
+    getattribute rx363_debug, rx363_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx363_cur
     .local pmc match
     .lex "$/", match
@@ -4993,7 +5320,9 @@
     substr rx363_tgt, rx363_tgt, rx363_off
   rx363_start:
     eq $I10, 1, rx363_restart
-    rx363_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
+    if_null rx363_debug, debug_524
+    rx363_cur."!cursor_debug"("START", "statement_mod_cond:sym<if>")
+  debug_524:
     $I10 = self.'from'()
     ne $I10, -1, rxscan367_done
     goto rxscan367_scan
@@ -5047,11 +5376,15 @@
     rx363_pos = $P10."pos"()
   # rx pass
     rx363_cur."!cursor_pass"(rx363_pos, "statement_mod_cond:sym<if>")
-    rx363_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx363_pos)
+    if_null rx363_debug, debug_525
+    rx363_cur."!cursor_debug"("PASS", "statement_mod_cond:sym<if>", " at pos=", rx363_pos)
+  debug_525:
     .return (rx363_cur)
   rx363_restart:
 .annotate 'line', 4
-    rx363_cur."!cursor_debug"("NEXT ", "statement_mod_cond:sym<if>")
+    if_null rx363_debug, debug_526
+    rx363_cur."!cursor_debug"("NEXT", "statement_mod_cond:sym<if>")
+  debug_526:
   rx363_fail:
     (rx363_rep, rx363_pos, $I10, $P10) = rx363_cur."!mark_fail"(0)
     lt rx363_pos, -1, rx363_done
@@ -5059,14 +5392,16 @@
     jump $I10
   rx363_done:
     rx363_cur."!cursor_fail"()
-    rx363_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
+    if_null rx363_debug, debug_527
+    rx363_cur."!cursor_debug"("FAIL", "statement_mod_cond:sym<if>")
+  debug_527:
     .return (rx363_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("88_1280467477.44751") :method
+.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("88_1282324002.40722") :method
 .annotate 'line', 4
     $P365 = self."!PREFIX__!subrule"("ws", "if")
     new $P366, "ResizablePMCArray"
@@ -5076,7 +5411,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<unless>"  :subid("89_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_mod_cond:sym<unless>"  :subid("89_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx372_tgt
     .local int rx372_pos
@@ -5084,7 +5419,9 @@
     .local int rx372_eos
     .local int rx372_rep
     .local pmc rx372_cur
+    .local pmc rx372_debug
     (rx372_cur, rx372_pos, rx372_tgt, $I10) = self."!cursor_start"()
+    getattribute rx372_debug, rx372_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx372_cur
     .local pmc match
     .lex "$/", match
@@ -5096,7 +5433,9 @@
     substr rx372_tgt, rx372_tgt, rx372_off
   rx372_start:
     eq $I10, 1, rx372_restart
-    rx372_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
+    if_null rx372_debug, debug_528
+    rx372_cur."!cursor_debug"("START", "statement_mod_cond:sym<unless>")
+  debug_528:
     $I10 = self.'from'()
     ne $I10, -1, rxscan376_done
     goto rxscan376_scan
@@ -5150,11 +5489,15 @@
     rx372_pos = $P10."pos"()
   # rx pass
     rx372_cur."!cursor_pass"(rx372_pos, "statement_mod_cond:sym<unless>")
-    rx372_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<unless>", " at pos=", rx372_pos)
+    if_null rx372_debug, debug_529
+    rx372_cur."!cursor_debug"("PASS", "statement_mod_cond:sym<unless>", " at pos=", rx372_pos)
+  debug_529:
     .return (rx372_cur)
   rx372_restart:
 .annotate 'line', 4
-    rx372_cur."!cursor_debug"("NEXT ", "statement_mod_cond:sym<unless>")
+    if_null rx372_debug, debug_530
+    rx372_cur."!cursor_debug"("NEXT", "statement_mod_cond:sym<unless>")
+  debug_530:
   rx372_fail:
     (rx372_rep, rx372_pos, $I10, $P10) = rx372_cur."!mark_fail"(0)
     lt rx372_pos, -1, rx372_done
@@ -5162,14 +5505,16 @@
     jump $I10
   rx372_done:
     rx372_cur."!cursor_fail"()
-    rx372_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
+    if_null rx372_debug, debug_531
+    rx372_cur."!cursor_debug"("FAIL", "statement_mod_cond:sym<unless>")
+  debug_531:
     .return (rx372_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("90_1280467477.44751") :method
+.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("90_1282324002.40722") :method
 .annotate 'line', 4
     $P374 = self."!PREFIX__!subrule"("ws", "unless")
     new $P375, "ResizablePMCArray"
@@ -5179,7 +5524,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop"  :subid("91_1280467477.44751") :method
+.sub "statement_mod_loop"  :subid("91_1282324002.40722") :method
 .annotate 'line', 217
     $P381 = self."!protoregex"("statement_mod_loop")
     .return ($P381)
@@ -5187,7 +5532,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop"  :subid("92_1280467477.44751") :method
+.sub "!PREFIX__statement_mod_loop"  :subid("92_1282324002.40722") :method
 .annotate 'line', 217
     $P383 = self."!PREFIX__!protoregex"("statement_mod_loop")
     .return ($P383)
@@ -5195,7 +5540,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<while>"  :subid("93_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_mod_loop:sym<while>"  :subid("93_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx385_tgt
     .local int rx385_pos
@@ -5203,7 +5548,9 @@
     .local int rx385_eos
     .local int rx385_rep
     .local pmc rx385_cur
+    .local pmc rx385_debug
     (rx385_cur, rx385_pos, rx385_tgt, $I10) = self."!cursor_start"()
+    getattribute rx385_debug, rx385_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx385_cur
     .local pmc match
     .lex "$/", match
@@ -5215,7 +5562,9 @@
     substr rx385_tgt, rx385_tgt, rx385_off
   rx385_start:
     eq $I10, 1, rx385_restart
-    rx385_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
+    if_null rx385_debug, debug_532
+    rx385_cur."!cursor_debug"("START", "statement_mod_loop:sym<while>")
+  debug_532:
     $I10 = self.'from'()
     ne $I10, -1, rxscan389_done
     goto rxscan389_scan
@@ -5269,11 +5618,15 @@
     rx385_pos = $P10."pos"()
   # rx pass
     rx385_cur."!cursor_pass"(rx385_pos, "statement_mod_loop:sym<while>")
-    rx385_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx385_pos)
+    if_null rx385_debug, debug_533
+    rx385_cur."!cursor_debug"("PASS", "statement_mod_loop:sym<while>", " at pos=", rx385_pos)
+  debug_533:
     .return (rx385_cur)
   rx385_restart:
 .annotate 'line', 4
-    rx385_cur."!cursor_debug"("NEXT ", "statement_mod_loop:sym<while>")
+    if_null rx385_debug, debug_534
+    rx385_cur."!cursor_debug"("NEXT", "statement_mod_loop:sym<while>")
+  debug_534:
   rx385_fail:
     (rx385_rep, rx385_pos, $I10, $P10) = rx385_cur."!mark_fail"(0)
     lt rx385_pos, -1, rx385_done
@@ -5281,14 +5634,16 @@
     jump $I10
   rx385_done:
     rx385_cur."!cursor_fail"()
-    rx385_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
+    if_null rx385_debug, debug_535
+    rx385_cur."!cursor_debug"("FAIL", "statement_mod_loop:sym<while>")
+  debug_535:
     .return (rx385_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("94_1280467477.44751") :method
+.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("94_1282324002.40722") :method
 .annotate 'line', 4
     $P387 = self."!PREFIX__!subrule"("ws", "while")
     new $P388, "ResizablePMCArray"
@@ -5298,7 +5653,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<until>"  :subid("95_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_mod_loop:sym<until>"  :subid("95_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx394_tgt
     .local int rx394_pos
@@ -5306,7 +5661,9 @@
     .local int rx394_eos
     .local int rx394_rep
     .local pmc rx394_cur
+    .local pmc rx394_debug
     (rx394_cur, rx394_pos, rx394_tgt, $I10) = self."!cursor_start"()
+    getattribute rx394_debug, rx394_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx394_cur
     .local pmc match
     .lex "$/", match
@@ -5318,7 +5675,9 @@
     substr rx394_tgt, rx394_tgt, rx394_off
   rx394_start:
     eq $I10, 1, rx394_restart
-    rx394_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
+    if_null rx394_debug, debug_536
+    rx394_cur."!cursor_debug"("START", "statement_mod_loop:sym<until>")
+  debug_536:
     $I10 = self.'from'()
     ne $I10, -1, rxscan398_done
     goto rxscan398_scan
@@ -5372,11 +5731,15 @@
     rx394_pos = $P10."pos"()
   # rx pass
     rx394_cur."!cursor_pass"(rx394_pos, "statement_mod_loop:sym<until>")
-    rx394_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx394_pos)
+    if_null rx394_debug, debug_537
+    rx394_cur."!cursor_debug"("PASS", "statement_mod_loop:sym<until>", " at pos=", rx394_pos)
+  debug_537:
     .return (rx394_cur)
   rx394_restart:
 .annotate 'line', 4
-    rx394_cur."!cursor_debug"("NEXT ", "statement_mod_loop:sym<until>")
+    if_null rx394_debug, debug_538
+    rx394_cur."!cursor_debug"("NEXT", "statement_mod_loop:sym<until>")
+  debug_538:
   rx394_fail:
     (rx394_rep, rx394_pos, $I10, $P10) = rx394_cur."!mark_fail"(0)
     lt rx394_pos, -1, rx394_done
@@ -5384,14 +5747,16 @@
     jump $I10
   rx394_done:
     rx394_cur."!cursor_fail"()
-    rx394_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
+    if_null rx394_debug, debug_539
+    rx394_cur."!cursor_debug"("FAIL", "statement_mod_loop:sym<until>")
+  debug_539:
     .return (rx394_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("96_1280467477.44751") :method
+.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("96_1282324002.40722") :method
 .annotate 'line', 4
     $P396 = self."!PREFIX__!subrule"("ws", "until")
     new $P397, "ResizablePMCArray"
@@ -5401,7 +5766,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<for>"  :subid("97_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "statement_mod_loop:sym<for>"  :subid("97_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx403_tgt
     .local int rx403_pos
@@ -5409,7 +5774,9 @@
     .local int rx403_eos
     .local int rx403_rep
     .local pmc rx403_cur
+    .local pmc rx403_debug
     (rx403_cur, rx403_pos, rx403_tgt, $I10) = self."!cursor_start"()
+    getattribute rx403_debug, rx403_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx403_cur
     .local pmc match
     .lex "$/", match
@@ -5421,7 +5788,9 @@
     substr rx403_tgt, rx403_tgt, rx403_off
   rx403_start:
     eq $I10, 1, rx403_restart
-    rx403_cur."!cursor_debug"("START ", "statement_mod_loop:sym<for>")
+    if_null rx403_debug, debug_540
+    rx403_cur."!cursor_debug"("START", "statement_mod_loop:sym<for>")
+  debug_540:
     $I10 = self.'from'()
     ne $I10, -1, rxscan407_done
     goto rxscan407_scan
@@ -5475,11 +5844,15 @@
     rx403_pos = $P10."pos"()
   # rx pass
     rx403_cur."!cursor_pass"(rx403_pos, "statement_mod_loop:sym<for>")
-    rx403_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<for>", " at pos=", rx403_pos)
+    if_null rx403_debug, debug_541
+    rx403_cur."!cursor_debug"("PASS", "statement_mod_loop:sym<for>", " at pos=", rx403_pos)
+  debug_541:
     .return (rx403_cur)
   rx403_restart:
 .annotate 'line', 4
-    rx403_cur."!cursor_debug"("NEXT ", "statement_mod_loop:sym<for>")
+    if_null rx403_debug, debug_542
+    rx403_cur."!cursor_debug"("NEXT", "statement_mod_loop:sym<for>")
+  debug_542:
   rx403_fail:
     (rx403_rep, rx403_pos, $I10, $P10) = rx403_cur."!mark_fail"(0)
     lt rx403_pos, -1, rx403_done
@@ -5487,14 +5860,16 @@
     jump $I10
   rx403_done:
     rx403_cur."!cursor_fail"()
-    rx403_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<for>")
+    if_null rx403_debug, debug_543
+    rx403_cur."!cursor_debug"("FAIL", "statement_mod_loop:sym<for>")
+  debug_543:
     .return (rx403_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<for>"  :subid("98_1280467477.44751") :method
+.sub "!PREFIX__statement_mod_loop:sym<for>"  :subid("98_1282324002.40722") :method
 .annotate 'line', 4
     $P405 = self."!PREFIX__!subrule"("ws", "for")
     new $P406, "ResizablePMCArray"
@@ -5504,7 +5879,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<fatarrow>"  :subid("99_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<fatarrow>"  :subid("99_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx412_tgt
     .local int rx412_pos
@@ -5512,7 +5887,9 @@
     .local int rx412_eos
     .local int rx412_rep
     .local pmc rx412_cur
+    .local pmc rx412_debug
     (rx412_cur, rx412_pos, rx412_tgt, $I10) = self."!cursor_start"()
+    getattribute rx412_debug, rx412_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx412_cur
     .local pmc match
     .lex "$/", match
@@ -5524,7 +5901,9 @@
     substr rx412_tgt, rx412_tgt, rx412_off
   rx412_start:
     eq $I10, 1, rx412_restart
-    rx412_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
+    if_null rx412_debug, debug_544
+    rx412_cur."!cursor_debug"("START", "term:sym<fatarrow>")
+  debug_544:
     $I10 = self.'from'()
     ne $I10, -1, rxscan416_done
     goto rxscan416_scan
@@ -5547,11 +5926,15 @@
     rx412_pos = $P10."pos"()
   # rx pass
     rx412_cur."!cursor_pass"(rx412_pos, "term:sym<fatarrow>")
-    rx412_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx412_pos)
+    if_null rx412_debug, debug_545
+    rx412_cur."!cursor_debug"("PASS", "term:sym<fatarrow>", " at pos=", rx412_pos)
+  debug_545:
     .return (rx412_cur)
   rx412_restart:
 .annotate 'line', 4
-    rx412_cur."!cursor_debug"("NEXT ", "term:sym<fatarrow>")
+    if_null rx412_debug, debug_546
+    rx412_cur."!cursor_debug"("NEXT", "term:sym<fatarrow>")
+  debug_546:
   rx412_fail:
     (rx412_rep, rx412_pos, $I10, $P10) = rx412_cur."!mark_fail"(0)
     lt rx412_pos, -1, rx412_done
@@ -5559,14 +5942,16 @@
     jump $I10
   rx412_done:
     rx412_cur."!cursor_fail"()
-    rx412_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
+    if_null rx412_debug, debug_547
+    rx412_cur."!cursor_debug"("FAIL", "term:sym<fatarrow>")
+  debug_547:
     .return (rx412_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<fatarrow>"  :subid("100_1280467477.44751") :method
+.sub "!PREFIX__term:sym<fatarrow>"  :subid("100_1282324002.40722") :method
 .annotate 'line', 4
     $P414 = self."!PREFIX__!subrule"("fatarrow", "")
     new $P415, "ResizablePMCArray"
@@ -5576,7 +5961,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<colonpair>"  :subid("101_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<colonpair>"  :subid("101_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx418_tgt
     .local int rx418_pos
@@ -5584,7 +5969,9 @@
     .local int rx418_eos
     .local int rx418_rep
     .local pmc rx418_cur
+    .local pmc rx418_debug
     (rx418_cur, rx418_pos, rx418_tgt, $I10) = self."!cursor_start"()
+    getattribute rx418_debug, rx418_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx418_cur
     .local pmc match
     .lex "$/", match
@@ -5596,7 +5983,9 @@
     substr rx418_tgt, rx418_tgt, rx418_off
   rx418_start:
     eq $I10, 1, rx418_restart
-    rx418_cur."!cursor_debug"("START ", "term:sym<colonpair>")
+    if_null rx418_debug, debug_548
+    rx418_cur."!cursor_debug"("START", "term:sym<colonpair>")
+  debug_548:
     $I10 = self.'from'()
     ne $I10, -1, rxscan422_done
     goto rxscan422_scan
@@ -5619,11 +6008,15 @@
     rx418_pos = $P10."pos"()
   # rx pass
     rx418_cur."!cursor_pass"(rx418_pos, "term:sym<colonpair>")
-    rx418_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx418_pos)
+    if_null rx418_debug, debug_549
+    rx418_cur."!cursor_debug"("PASS", "term:sym<colonpair>", " at pos=", rx418_pos)
+  debug_549:
     .return (rx418_cur)
   rx418_restart:
 .annotate 'line', 4
-    rx418_cur."!cursor_debug"("NEXT ", "term:sym<colonpair>")
+    if_null rx418_debug, debug_550
+    rx418_cur."!cursor_debug"("NEXT", "term:sym<colonpair>")
+  debug_550:
   rx418_fail:
     (rx418_rep, rx418_pos, $I10, $P10) = rx418_cur."!mark_fail"(0)
     lt rx418_pos, -1, rx418_done
@@ -5631,14 +6024,16 @@
     jump $I10
   rx418_done:
     rx418_cur."!cursor_fail"()
-    rx418_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
+    if_null rx418_debug, debug_551
+    rx418_cur."!cursor_debug"("FAIL", "term:sym<colonpair>")
+  debug_551:
     .return (rx418_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<colonpair>"  :subid("102_1280467477.44751") :method
+.sub "!PREFIX__term:sym<colonpair>"  :subid("102_1282324002.40722") :method
 .annotate 'line', 4
     $P420 = self."!PREFIX__!subrule"("colonpair", "")
     new $P421, "ResizablePMCArray"
@@ -5648,7 +6043,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<variable>"  :subid("103_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<variable>"  :subid("103_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx424_tgt
     .local int rx424_pos
@@ -5656,7 +6051,9 @@
     .local int rx424_eos
     .local int rx424_rep
     .local pmc rx424_cur
+    .local pmc rx424_debug
     (rx424_cur, rx424_pos, rx424_tgt, $I10) = self."!cursor_start"()
+    getattribute rx424_debug, rx424_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx424_cur
     .local pmc match
     .lex "$/", match
@@ -5668,7 +6065,9 @@
     substr rx424_tgt, rx424_tgt, rx424_off
   rx424_start:
     eq $I10, 1, rx424_restart
-    rx424_cur."!cursor_debug"("START ", "term:sym<variable>")
+    if_null rx424_debug, debug_552
+    rx424_cur."!cursor_debug"("START", "term:sym<variable>")
+  debug_552:
     $I10 = self.'from'()
     ne $I10, -1, rxscan428_done
     goto rxscan428_scan
@@ -5691,11 +6090,15 @@
     rx424_pos = $P10."pos"()
   # rx pass
     rx424_cur."!cursor_pass"(rx424_pos, "term:sym<variable>")
-    rx424_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx424_pos)
+    if_null rx424_debug, debug_553
+    rx424_cur."!cursor_debug"("PASS", "term:sym<variable>", " at pos=", rx424_pos)
+  debug_553:
     .return (rx424_cur)
   rx424_restart:
 .annotate 'line', 4
-    rx424_cur."!cursor_debug"("NEXT ", "term:sym<variable>")
+    if_null rx424_debug, debug_554
+    rx424_cur."!cursor_debug"("NEXT", "term:sym<variable>")
+  debug_554:
   rx424_fail:
     (rx424_rep, rx424_pos, $I10, $P10) = rx424_cur."!mark_fail"(0)
     lt rx424_pos, -1, rx424_done
@@ -5703,14 +6106,16 @@
     jump $I10
   rx424_done:
     rx424_cur."!cursor_fail"()
-    rx424_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
+    if_null rx424_debug, debug_555
+    rx424_cur."!cursor_debug"("FAIL", "term:sym<variable>")
+  debug_555:
     .return (rx424_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<variable>"  :subid("104_1280467477.44751") :method
+.sub "!PREFIX__term:sym<variable>"  :subid("104_1282324002.40722") :method
 .annotate 'line', 4
     $P426 = self."!PREFIX__!subrule"("variable", "")
     new $P427, "ResizablePMCArray"
@@ -5720,7 +6125,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<package_declarator>"  :subid("105_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<package_declarator>"  :subid("105_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx430_tgt
     .local int rx430_pos
@@ -5728,7 +6133,9 @@
     .local int rx430_eos
     .local int rx430_rep
     .local pmc rx430_cur
+    .local pmc rx430_debug
     (rx430_cur, rx430_pos, rx430_tgt, $I10) = self."!cursor_start"()
+    getattribute rx430_debug, rx430_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx430_cur
     .local pmc match
     .lex "$/", match
@@ -5740,7 +6147,9 @@
     substr rx430_tgt, rx430_tgt, rx430_off
   rx430_start:
     eq $I10, 1, rx430_restart
-    rx430_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
+    if_null rx430_debug, debug_556
+    rx430_cur."!cursor_debug"("START", "term:sym<package_declarator>")
+  debug_556:
     $I10 = self.'from'()
     ne $I10, -1, rxscan434_done
     goto rxscan434_scan
@@ -5763,11 +6172,15 @@
     rx430_pos = $P10."pos"()
   # rx pass
     rx430_cur."!cursor_pass"(rx430_pos, "term:sym<package_declarator>")
-    rx430_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx430_pos)
+    if_null rx430_debug, debug_557
+    rx430_cur."!cursor_debug"("PASS", "term:sym<package_declarator>", " at pos=", rx430_pos)
+  debug_557:
     .return (rx430_cur)
   rx430_restart:
 .annotate 'line', 4
-    rx430_cur."!cursor_debug"("NEXT ", "term:sym<package_declarator>")
+    if_null rx430_debug, debug_558
+    rx430_cur."!cursor_debug"("NEXT", "term:sym<package_declarator>")
+  debug_558:
   rx430_fail:
     (rx430_rep, rx430_pos, $I10, $P10) = rx430_cur."!mark_fail"(0)
     lt rx430_pos, -1, rx430_done
@@ -5775,14 +6188,16 @@
     jump $I10
   rx430_done:
     rx430_cur."!cursor_fail"()
-    rx430_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
+    if_null rx430_debug, debug_559
+    rx430_cur."!cursor_debug"("FAIL", "term:sym<package_declarator>")
+  debug_559:
     .return (rx430_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<package_declarator>"  :subid("106_1280467477.44751") :method
+.sub "!PREFIX__term:sym<package_declarator>"  :subid("106_1282324002.40722") :method
 .annotate 'line', 4
     $P432 = self."!PREFIX__!subrule"("package_declarator", "")
     new $P433, "ResizablePMCArray"
@@ -5792,7 +6207,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<scope_declarator>"  :subid("107_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<scope_declarator>"  :subid("107_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx436_tgt
     .local int rx436_pos
@@ -5800,7 +6215,9 @@
     .local int rx436_eos
     .local int rx436_rep
     .local pmc rx436_cur
+    .local pmc rx436_debug
     (rx436_cur, rx436_pos, rx436_tgt, $I10) = self."!cursor_start"()
+    getattribute rx436_debug, rx436_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx436_cur
     .local pmc match
     .lex "$/", match
@@ -5812,7 +6229,9 @@
     substr rx436_tgt, rx436_tgt, rx436_off
   rx436_start:
     eq $I10, 1, rx436_restart
-    rx436_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
+    if_null rx436_debug, debug_560
+    rx436_cur."!cursor_debug"("START", "term:sym<scope_declarator>")
+  debug_560:
     $I10 = self.'from'()
     ne $I10, -1, rxscan440_done
     goto rxscan440_scan
@@ -5835,11 +6254,15 @@
     rx436_pos = $P10."pos"()
   # rx pass
     rx436_cur."!cursor_pass"(rx436_pos, "term:sym<scope_declarator>")
-    rx436_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx436_pos)
+    if_null rx436_debug, debug_561
+    rx436_cur."!cursor_debug"("PASS", "term:sym<scope_declarator>", " at pos=", rx436_pos)
+  debug_561:
     .return (rx436_cur)
   rx436_restart:
 .annotate 'line', 4
-    rx436_cur."!cursor_debug"("NEXT ", "term:sym<scope_declarator>")
+    if_null rx436_debug, debug_562
+    rx436_cur."!cursor_debug"("NEXT", "term:sym<scope_declarator>")
+  debug_562:
   rx436_fail:
     (rx436_rep, rx436_pos, $I10, $P10) = rx436_cur."!mark_fail"(0)
     lt rx436_pos, -1, rx436_done
@@ -5847,14 +6270,16 @@
     jump $I10
   rx436_done:
     rx436_cur."!cursor_fail"()
-    rx436_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
+    if_null rx436_debug, debug_563
+    rx436_cur."!cursor_debug"("FAIL", "term:sym<scope_declarator>")
+  debug_563:
     .return (rx436_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<scope_declarator>"  :subid("108_1280467477.44751") :method
+.sub "!PREFIX__term:sym<scope_declarator>"  :subid("108_1282324002.40722") :method
 .annotate 'line', 4
     $P438 = self."!PREFIX__!subrule"("scope_declarator", "")
     new $P439, "ResizablePMCArray"
@@ -5864,7 +6289,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<routine_declarator>"  :subid("109_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<routine_declarator>"  :subid("109_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx442_tgt
     .local int rx442_pos
@@ -5872,7 +6297,9 @@
     .local int rx442_eos
     .local int rx442_rep
     .local pmc rx442_cur
+    .local pmc rx442_debug
     (rx442_cur, rx442_pos, rx442_tgt, $I10) = self."!cursor_start"()
+    getattribute rx442_debug, rx442_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx442_cur
     .local pmc match
     .lex "$/", match
@@ -5884,7 +6311,9 @@
     substr rx442_tgt, rx442_tgt, rx442_off
   rx442_start:
     eq $I10, 1, rx442_restart
-    rx442_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
+    if_null rx442_debug, debug_564
+    rx442_cur."!cursor_debug"("START", "term:sym<routine_declarator>")
+  debug_564:
     $I10 = self.'from'()
     ne $I10, -1, rxscan446_done
     goto rxscan446_scan
@@ -5907,11 +6336,15 @@
     rx442_pos = $P10."pos"()
   # rx pass
     rx442_cur."!cursor_pass"(rx442_pos, "term:sym<routine_declarator>")
-    rx442_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx442_pos)
+    if_null rx442_debug, debug_565
+    rx442_cur."!cursor_debug"("PASS", "term:sym<routine_declarator>", " at pos=", rx442_pos)
+  debug_565:
     .return (rx442_cur)
   rx442_restart:
 .annotate 'line', 4
-    rx442_cur."!cursor_debug"("NEXT ", "term:sym<routine_declarator>")
+    if_null rx442_debug, debug_566
+    rx442_cur."!cursor_debug"("NEXT", "term:sym<routine_declarator>")
+  debug_566:
   rx442_fail:
     (rx442_rep, rx442_pos, $I10, $P10) = rx442_cur."!mark_fail"(0)
     lt rx442_pos, -1, rx442_done
@@ -5919,14 +6352,16 @@
     jump $I10
   rx442_done:
     rx442_cur."!cursor_fail"()
-    rx442_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
+    if_null rx442_debug, debug_567
+    rx442_cur."!cursor_debug"("FAIL", "term:sym<routine_declarator>")
+  debug_567:
     .return (rx442_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<routine_declarator>"  :subid("110_1280467477.44751") :method
+.sub "!PREFIX__term:sym<routine_declarator>"  :subid("110_1282324002.40722") :method
 .annotate 'line', 4
     $P444 = self."!PREFIX__!subrule"("routine_declarator", "")
     new $P445, "ResizablePMCArray"
@@ -5936,9 +6371,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<multi_declarator>"  :subid("111_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<multi_declarator>"  :subid("111_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
-    .const 'Sub' $P453 = "113_1280467477.44751" 
+    .const 'Sub' $P453 = "113_1282324002.40722" 
     capture_lex $P453
     .local string rx448_tgt
     .local int rx448_pos
@@ -5946,7 +6381,9 @@
     .local int rx448_eos
     .local int rx448_rep
     .local pmc rx448_cur
+    .local pmc rx448_debug
     (rx448_cur, rx448_pos, rx448_tgt, $I10) = self."!cursor_start"()
+    getattribute rx448_debug, rx448_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx448_cur
     .local pmc match
     .lex "$/", match
@@ -5958,7 +6395,9 @@
     substr rx448_tgt, rx448_tgt, rx448_off
   rx448_start:
     eq $I10, 1, rx448_restart
-    rx448_cur."!cursor_debug"("START ", "term:sym<multi_declarator>")
+    if_null rx448_debug, debug_568
+    rx448_cur."!cursor_debug"("START", "term:sym<multi_declarator>")
+  debug_568:
     $I10 = self.'from'()
     ne $I10, -1, rxscan451_done
     goto rxscan451_scan
@@ -5974,7 +6413,7 @@
 .annotate 'line', 231
   # rx subrule "before" subtype=zerowidth negate=
     rx448_cur."!cursor_pos"(rx448_pos)
-    .const 'Sub' $P453 = "113_1280467477.44751" 
+    .const 'Sub' $P453 = "113_1282324002.40722" 
     capture_lex $P453
     $P10 = rx448_cur."before"($P453)
     unless $P10, rx448_fail
@@ -5987,11 +6426,15 @@
     rx448_pos = $P10."pos"()
   # rx pass
     rx448_cur."!cursor_pass"(rx448_pos, "term:sym<multi_declarator>")
-    rx448_cur."!cursor_debug"("PASS  ", "term:sym<multi_declarator>", " at pos=", rx448_pos)
+    if_null rx448_debug, debug_573
+    rx448_cur."!cursor_debug"("PASS", "term:sym<multi_declarator>", " at pos=", rx448_pos)
+  debug_573:
     .return (rx448_cur)
   rx448_restart:
 .annotate 'line', 4
-    rx448_cur."!cursor_debug"("NEXT ", "term:sym<multi_declarator>")
+    if_null rx448_debug, debug_574
+    rx448_cur."!cursor_debug"("NEXT", "term:sym<multi_declarator>")
+  debug_574:
   rx448_fail:
     (rx448_rep, rx448_pos, $I10, $P10) = rx448_cur."!mark_fail"(0)
     lt rx448_pos, -1, rx448_done
@@ -5999,14 +6442,16 @@
     jump $I10
   rx448_done:
     rx448_cur."!cursor_fail"()
-    rx448_cur."!cursor_debug"("FAIL  ", "term:sym<multi_declarator>")
+    if_null rx448_debug, debug_575
+    rx448_cur."!cursor_debug"("FAIL", "term:sym<multi_declarator>")
+  debug_575:
     .return (rx448_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<multi_declarator>"  :subid("112_1280467477.44751") :method
+.sub "!PREFIX__term:sym<multi_declarator>"  :subid("112_1282324002.40722") :method
 .annotate 'line', 4
     new $P450, "ResizablePMCArray"
     push $P450, ""
@@ -6015,7 +6460,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block452"  :anon :subid("113_1280467477.44751") :method :outer("111_1280467477.44751")
+.sub "_block452"  :anon :subid("113_1282324002.40722") :method :outer("111_1282324002.40722")
 .annotate 'line', 231
     .local string rx454_tgt
     .local int rx454_pos
@@ -6023,7 +6468,9 @@
     .local int rx454_eos
     .local int rx454_rep
     .local pmc rx454_cur
+    .local pmc rx454_debug
     (rx454_cur, rx454_pos, rx454_tgt, $I10) = self."!cursor_start"()
+    getattribute rx454_debug, rx454_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx454_cur
     .local pmc match
     .lex "$/", match
@@ -6035,7 +6482,9 @@
     substr rx454_tgt, rx454_tgt, rx454_off
   rx454_start:
     eq $I10, 1, rx454_restart
-    rx454_cur."!cursor_debug"("START ", "")
+    if_null rx454_debug, debug_569
+    rx454_cur."!cursor_debug"("START", "")
+  debug_569:
     $I10 = self.'from'()
     ne $I10, -1, rxscan455_done
     goto rxscan455_scan
@@ -6081,10 +6530,14 @@
   alt456_end:
   # rx pass
     rx454_cur."!cursor_pass"(rx454_pos, "")
-    rx454_cur."!cursor_debug"("PASS  ", "", " at pos=", rx454_pos)
+    if_null rx454_debug, debug_570
+    rx454_cur."!cursor_debug"("PASS", "", " at pos=", rx454_pos)
+  debug_570:
     .return (rx454_cur)
   rx454_restart:
-    rx454_cur."!cursor_debug"("NEXT ", "")
+    if_null rx454_debug, debug_571
+    rx454_cur."!cursor_debug"("NEXT", "")
+  debug_571:
   rx454_fail:
     (rx454_rep, rx454_pos, $I10, $P10) = rx454_cur."!mark_fail"(0)
     lt rx454_pos, -1, rx454_done
@@ -6092,14 +6545,16 @@
     jump $I10
   rx454_done:
     rx454_cur."!cursor_fail"()
-    rx454_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx454_debug, debug_572
+    rx454_cur."!cursor_debug"("FAIL", "")
+  debug_572:
     .return (rx454_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<regex_declarator>"  :subid("114_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<regex_declarator>"  :subid("114_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx458_tgt
     .local int rx458_pos
@@ -6107,7 +6562,9 @@
     .local int rx458_eos
     .local int rx458_rep
     .local pmc rx458_cur
+    .local pmc rx458_debug
     (rx458_cur, rx458_pos, rx458_tgt, $I10) = self."!cursor_start"()
+    getattribute rx458_debug, rx458_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx458_cur
     .local pmc match
     .lex "$/", match
@@ -6119,7 +6576,9 @@
     substr rx458_tgt, rx458_tgt, rx458_off
   rx458_start:
     eq $I10, 1, rx458_restart
-    rx458_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
+    if_null rx458_debug, debug_576
+    rx458_cur."!cursor_debug"("START", "term:sym<regex_declarator>")
+  debug_576:
     $I10 = self.'from'()
     ne $I10, -1, rxscan462_done
     goto rxscan462_scan
@@ -6142,11 +6601,15 @@
     rx458_pos = $P10."pos"()
   # rx pass
     rx458_cur."!cursor_pass"(rx458_pos, "term:sym<regex_declarator>")
-    rx458_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx458_pos)
+    if_null rx458_debug, debug_577
+    rx458_cur."!cursor_debug"("PASS", "term:sym<regex_declarator>", " at pos=", rx458_pos)
+  debug_577:
     .return (rx458_cur)
   rx458_restart:
 .annotate 'line', 4
-    rx458_cur."!cursor_debug"("NEXT ", "term:sym<regex_declarator>")
+    if_null rx458_debug, debug_578
+    rx458_cur."!cursor_debug"("NEXT", "term:sym<regex_declarator>")
+  debug_578:
   rx458_fail:
     (rx458_rep, rx458_pos, $I10, $P10) = rx458_cur."!mark_fail"(0)
     lt rx458_pos, -1, rx458_done
@@ -6154,14 +6617,16 @@
     jump $I10
   rx458_done:
     rx458_cur."!cursor_fail"()
-    rx458_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
+    if_null rx458_debug, debug_579
+    rx458_cur."!cursor_debug"("FAIL", "term:sym<regex_declarator>")
+  debug_579:
     .return (rx458_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<regex_declarator>"  :subid("115_1280467477.44751") :method
+.sub "!PREFIX__term:sym<regex_declarator>"  :subid("115_1282324002.40722") :method
 .annotate 'line', 4
     $P460 = self."!PREFIX__!subrule"("regex_declarator", "")
     new $P461, "ResizablePMCArray"
@@ -6171,7 +6636,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<statement_prefix>"  :subid("116_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<statement_prefix>"  :subid("116_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx464_tgt
     .local int rx464_pos
@@ -6179,7 +6644,9 @@
     .local int rx464_eos
     .local int rx464_rep
     .local pmc rx464_cur
+    .local pmc rx464_debug
     (rx464_cur, rx464_pos, rx464_tgt, $I10) = self."!cursor_start"()
+    getattribute rx464_debug, rx464_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx464_cur
     .local pmc match
     .lex "$/", match
@@ -6191,7 +6658,9 @@
     substr rx464_tgt, rx464_tgt, rx464_off
   rx464_start:
     eq $I10, 1, rx464_restart
-    rx464_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
+    if_null rx464_debug, debug_580
+    rx464_cur."!cursor_debug"("START", "term:sym<statement_prefix>")
+  debug_580:
     $I10 = self.'from'()
     ne $I10, -1, rxscan468_done
     goto rxscan468_scan
@@ -6214,11 +6683,15 @@
     rx464_pos = $P10."pos"()
   # rx pass
     rx464_cur."!cursor_pass"(rx464_pos, "term:sym<statement_prefix>")
-    rx464_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx464_pos)
+    if_null rx464_debug, debug_581
+    rx464_cur."!cursor_debug"("PASS", "term:sym<statement_prefix>", " at pos=", rx464_pos)
+  debug_581:
     .return (rx464_cur)
   rx464_restart:
 .annotate 'line', 4
-    rx464_cur."!cursor_debug"("NEXT ", "term:sym<statement_prefix>")
+    if_null rx464_debug, debug_582
+    rx464_cur."!cursor_debug"("NEXT", "term:sym<statement_prefix>")
+  debug_582:
   rx464_fail:
     (rx464_rep, rx464_pos, $I10, $P10) = rx464_cur."!mark_fail"(0)
     lt rx464_pos, -1, rx464_done
@@ -6226,14 +6699,16 @@
     jump $I10
   rx464_done:
     rx464_cur."!cursor_fail"()
-    rx464_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
+    if_null rx464_debug, debug_583
+    rx464_cur."!cursor_debug"("FAIL", "term:sym<statement_prefix>")
+  debug_583:
     .return (rx464_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<statement_prefix>"  :subid("117_1280467477.44751") :method
+.sub "!PREFIX__term:sym<statement_prefix>"  :subid("117_1282324002.40722") :method
 .annotate 'line', 4
     $P466 = self."!PREFIX__!subrule"("statement_prefix", "")
     new $P467, "ResizablePMCArray"
@@ -6243,7 +6718,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<lambda>"  :subid("118_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<lambda>"  :subid("118_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx470_tgt
     .local int rx470_pos
@@ -6251,7 +6726,9 @@
     .local int rx470_eos
     .local int rx470_rep
     .local pmc rx470_cur
+    .local pmc rx470_debug
     (rx470_cur, rx470_pos, rx470_tgt, $I10) = self."!cursor_start"()
+    getattribute rx470_debug, rx470_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx470_cur
     .local pmc match
     .lex "$/", match
@@ -6263,7 +6740,9 @@
     substr rx470_tgt, rx470_tgt, rx470_off
   rx470_start:
     eq $I10, 1, rx470_restart
-    rx470_cur."!cursor_debug"("START ", "term:sym<lambda>")
+    if_null rx470_debug, debug_584
+    rx470_cur."!cursor_debug"("START", "term:sym<lambda>")
+  debug_584:
     $I10 = self.'from'()
     ne $I10, -1, rxscan473_done
     goto rxscan473_scan
@@ -6290,11 +6769,15 @@
     rx470_pos = $P10."pos"()
   # rx pass
     rx470_cur."!cursor_pass"(rx470_pos, "term:sym<lambda>")
-    rx470_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx470_pos)
+    if_null rx470_debug, debug_585
+    rx470_cur."!cursor_debug"("PASS", "term:sym<lambda>", " at pos=", rx470_pos)
+  debug_585:
     .return (rx470_cur)
   rx470_restart:
 .annotate 'line', 4
-    rx470_cur."!cursor_debug"("NEXT ", "term:sym<lambda>")
+    if_null rx470_debug, debug_586
+    rx470_cur."!cursor_debug"("NEXT", "term:sym<lambda>")
+  debug_586:
   rx470_fail:
     (rx470_rep, rx470_pos, $I10, $P10) = rx470_cur."!mark_fail"(0)
     lt rx470_pos, -1, rx470_done
@@ -6302,14 +6785,16 @@
     jump $I10
   rx470_done:
     rx470_cur."!cursor_fail"()
-    rx470_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
+    if_null rx470_debug, debug_587
+    rx470_cur."!cursor_debug"("FAIL", "term:sym<lambda>")
+  debug_587:
     .return (rx470_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<lambda>"  :subid("119_1280467477.44751") :method
+.sub "!PREFIX__term:sym<lambda>"  :subid("119_1282324002.40722") :method
 .annotate 'line', 4
     new $P472, "ResizablePMCArray"
     push $P472, ""
@@ -6318,7 +6803,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "fatarrow"  :subid("120_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "fatarrow"  :subid("120_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx475_tgt
     .local int rx475_pos
@@ -6326,7 +6811,9 @@
     .local int rx475_eos
     .local int rx475_rep
     .local pmc rx475_cur
+    .local pmc rx475_debug
     (rx475_cur, rx475_pos, rx475_tgt, $I10) = self."!cursor_start"()
+    getattribute rx475_debug, rx475_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx475_cur
     .local pmc match
     .lex "$/", match
@@ -6338,7 +6825,9 @@
     substr rx475_tgt, rx475_tgt, rx475_off
   rx475_start:
     eq $I10, 1, rx475_restart
-    rx475_cur."!cursor_debug"("START ", "fatarrow")
+    if_null rx475_debug, debug_588
+    rx475_cur."!cursor_debug"("START", "fatarrow")
+  debug_588:
     $I10 = self.'from'()
     ne $I10, -1, rxscan479_done
     goto rxscan479_scan
@@ -6359,23 +6848,21 @@
     rx475_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("key")
     rx475_pos = $P10."pos"()
-  # rx rxquantr480 ** 0..*
-    set_addr $I10, rxquantr480_done
-    rx475_cur."!mark_push"(0, rx475_pos, $I10)
-  rxquantr480_loop:
-  # rx enumcharlist negate=0 
-    ge rx475_pos, rx475_eos, rx475_fail
+  # rx enumcharlist_q negate=0  r 0..-1
     sub $I10, rx475_pos, rx475_off
+    set rx475_rep, 0
+    sub $I12, rx475_eos, rx475_pos
+  rxenumcharlistq480_loop:
+    le $I12, 0, rxenumcharlistq480_done
     substr $S10, rx475_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, rx475_fail
-    inc rx475_pos
-    set_addr $I10, rxquantr480_done
-    (rx475_rep) = rx475_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr480_done
-    rx475_cur."!mark_push"(rx475_rep, rx475_pos, $I10)
-    goto rxquantr480_loop
-  rxquantr480_done:
+    lt $I11, 0, rxenumcharlistq480_done
+    inc rx475_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq480_loop
+  rxenumcharlistq480_done:
+    add rx475_pos, rx475_pos, rx475_rep
   # rx literal  "=>"
     add $I11, rx475_pos, 2
     gt $I11, rx475_eos, rx475_fail
@@ -6398,11 +6885,15 @@
 .annotate 'line', 236
   # rx pass
     rx475_cur."!cursor_pass"(rx475_pos, "fatarrow")
-    rx475_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx475_pos)
+    if_null rx475_debug, debug_589
+    rx475_cur."!cursor_debug"("PASS", "fatarrow", " at pos=", rx475_pos)
+  debug_589:
     .return (rx475_cur)
   rx475_restart:
 .annotate 'line', 4
-    rx475_cur."!cursor_debug"("NEXT ", "fatarrow")
+    if_null rx475_debug, debug_590
+    rx475_cur."!cursor_debug"("NEXT", "fatarrow")
+  debug_590:
   rx475_fail:
     (rx475_rep, rx475_pos, $I10, $P10) = rx475_cur."!mark_fail"(0)
     lt rx475_pos, -1, rx475_done
@@ -6410,14 +6901,16 @@
     jump $I10
   rx475_done:
     rx475_cur."!cursor_fail"()
-    rx475_cur."!cursor_debug"("FAIL  ", "fatarrow")
+    if_null rx475_debug, debug_591
+    rx475_cur."!cursor_debug"("FAIL", "fatarrow")
+  debug_591:
     .return (rx475_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__fatarrow"  :subid("121_1280467477.44751") :method
+.sub "!PREFIX__fatarrow"  :subid("121_1282324002.40722") :method
 .annotate 'line', 4
     $P477 = self."!PREFIX__!subrule"("identifier", "")
     new $P478, "ResizablePMCArray"
@@ -6427,7 +6920,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "colonpair"  :subid("122_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "colonpair"  :subid("122_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx482_tgt
     .local int rx482_pos
@@ -6435,8 +6928,10 @@
     .local int rx482_eos
     .local int rx482_rep
     .local pmc rx482_cur
+    .local pmc rx482_debug
     (rx482_cur, rx482_pos, rx482_tgt, $I10) = self."!cursor_start"()
     rx482_cur."!cursor_caparray"("circumfix")
+    getattribute rx482_debug, rx482_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx482_cur
     .local pmc match
     .lex "$/", match
@@ -6448,7 +6943,9 @@
     substr rx482_tgt, rx482_tgt, rx482_off
   rx482_start:
     eq $I10, 1, rx482_restart
-    rx482_cur."!cursor_debug"("START ", "colonpair")
+    if_null rx482_debug, debug_592
+    rx482_cur."!cursor_debug"("START", "colonpair")
+  debug_592:
     $I10 = self.'from'()
     ne $I10, -1, rxscan488_done
     goto rxscan488_scan
@@ -6466,8 +6963,8 @@
     add $I11, rx482_pos, 1
     gt $I11, rx482_eos, rx482_fail
     sub $I11, rx482_pos, rx482_off
-    substr $S10, rx482_tgt, $I11, 1
-    ne $S10, ":", rx482_fail
+    ord $I11, rx482_tgt, $I11
+    ne $I11, 58, rx482_fail
     add rx482_pos, 1
   alt489_0:
 .annotate 'line', 242
@@ -6481,8 +6978,8 @@
     add $I11, rx482_pos, 1
     gt $I11, rx482_eos, rx482_fail
     sub $I11, rx482_pos, rx482_off
-    substr $S10, rx482_tgt, $I11, 1
-    ne $S10, "!", rx482_fail
+    ord $I11, rx482_tgt, $I11
+    ne $I11, 33, rx482_fail
     add rx482_pos, 1
     set_addr $I10, rxcap_490_fail
     ($I12, $I11) = rx482_cur."!mark_peek"($I10)
@@ -6548,11 +7045,15 @@
 .annotate 'line', 240
   # rx pass
     rx482_cur."!cursor_pass"(rx482_pos, "colonpair")
-    rx482_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx482_pos)
+    if_null rx482_debug, debug_593
+    rx482_cur."!cursor_debug"("PASS", "colonpair", " at pos=", rx482_pos)
+  debug_593:
     .return (rx482_cur)
   rx482_restart:
 .annotate 'line', 4
-    rx482_cur."!cursor_debug"("NEXT ", "colonpair")
+    if_null rx482_debug, debug_594
+    rx482_cur."!cursor_debug"("NEXT", "colonpair")
+  debug_594:
   rx482_fail:
     (rx482_rep, rx482_pos, $I10, $P10) = rx482_cur."!mark_fail"(0)
     lt rx482_pos, -1, rx482_done
@@ -6560,14 +7061,16 @@
     jump $I10
   rx482_done:
     rx482_cur."!cursor_fail"()
-    rx482_cur."!cursor_debug"("FAIL  ", "colonpair")
+    if_null rx482_debug, debug_595
+    rx482_cur."!cursor_debug"("FAIL", "colonpair")
+  debug_595:
     .return (rx482_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__colonpair"  :subid("123_1280467477.44751") :method
+.sub "!PREFIX__colonpair"  :subid("123_1282324002.40722") :method
 .annotate 'line', 4
     $P484 = self."!PREFIX__!subrule"("circumfix", ":")
     $P485 = self."!PREFIX__!subrule"("identifier", ":")
@@ -6581,7 +7084,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable"  :subid("124_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "variable"  :subid("124_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx494_tgt
     .local int rx494_pos
@@ -6589,8 +7092,10 @@
     .local int rx494_eos
     .local int rx494_rep
     .local pmc rx494_cur
+    .local pmc rx494_debug
     (rx494_cur, rx494_pos, rx494_tgt, $I10) = self."!cursor_start"()
     rx494_cur."!cursor_caparray"("twigil")
+    getattribute rx494_debug, rx494_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx494_cur
     .local pmc match
     .lex "$/", match
@@ -6602,7 +7107,9 @@
     substr rx494_tgt, rx494_tgt, rx494_off
   rx494_start:
     eq $I10, 1, rx494_restart
-    rx494_cur."!cursor_debug"("START ", "variable")
+    if_null rx494_debug, debug_596
+    rx494_cur."!cursor_debug"("START", "variable")
+  debug_596:
     $I10 = self.'from'()
     ne $I10, -1, rxscan499_done
     goto rxscan499_scan
@@ -6689,8 +7196,8 @@
     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
+    ord $I11, rx494_tgt, $I11
+    ne $I11, 36, rx494_fail
     add rx494_pos, 1
     set_addr $I10, rxcap_503_fail
     ($I12, $I11) = rx494_cur."!mark_peek"($I10)
@@ -6728,11 +7235,15 @@
 .annotate 'line', 249
   # rx pass
     rx494_cur."!cursor_pass"(rx494_pos, "variable")
-    rx494_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx494_pos)
+    if_null rx494_debug, debug_597
+    rx494_cur."!cursor_debug"("PASS", "variable", " at pos=", rx494_pos)
+  debug_597:
     .return (rx494_cur)
   rx494_restart:
 .annotate 'line', 4
-    rx494_cur."!cursor_debug"("NEXT ", "variable")
+    if_null rx494_debug, debug_598
+    rx494_cur."!cursor_debug"("NEXT", "variable")
+  debug_598:
   rx494_fail:
     (rx494_rep, rx494_pos, $I10, $P10) = rx494_cur."!mark_fail"(0)
     lt rx494_pos, -1, rx494_done
@@ -6740,14 +7251,16 @@
     jump $I10
   rx494_done:
     rx494_cur."!cursor_fail"()
-    rx494_cur."!cursor_debug"("FAIL  ", "variable")
+    if_null rx494_debug, debug_599
+    rx494_cur."!cursor_debug"("FAIL", "variable")
+  debug_599:
     .return (rx494_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable"  :subid("125_1280467477.44751") :method
+.sub "!PREFIX__variable"  :subid("125_1282324002.40722") :method
 .annotate 'line', 4
     $P496 = self."!PREFIX__!subrule"("sigil", "")
     $P497 = self."!PREFIX__!subrule"("sigil", "")
@@ -6762,7 +7275,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "sigil"  :subid("126_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "sigil"  :subid("126_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx506_tgt
     .local int rx506_pos
@@ -6770,7 +7283,9 @@
     .local int rx506_eos
     .local int rx506_rep
     .local pmc rx506_cur
+    .local pmc rx506_debug
     (rx506_cur, rx506_pos, rx506_tgt, $I10) = self."!cursor_start"()
+    getattribute rx506_debug, rx506_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx506_cur
     .local pmc match
     .lex "$/", match
@@ -6782,7 +7297,9 @@
     substr rx506_tgt, rx506_tgt, rx506_off
   rx506_start:
     eq $I10, 1, rx506_restart
-    rx506_cur."!cursor_debug"("START ", "sigil")
+    if_null rx506_debug, debug_600
+    rx506_cur."!cursor_debug"("START", "sigil")
+  debug_600:
     $I10 = self.'from'()
     ne $I10, -1, rxscan509_done
     goto rxscan509_scan
@@ -6805,11 +7322,15 @@
     inc rx506_pos
   # rx pass
     rx506_cur."!cursor_pass"(rx506_pos, "sigil")
-    rx506_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx506_pos)
+    if_null rx506_debug, debug_601
+    rx506_cur."!cursor_debug"("PASS", "sigil", " at pos=", rx506_pos)
+  debug_601:
     .return (rx506_cur)
   rx506_restart:
 .annotate 'line', 4
-    rx506_cur."!cursor_debug"("NEXT ", "sigil")
+    if_null rx506_debug, debug_602
+    rx506_cur."!cursor_debug"("NEXT", "sigil")
+  debug_602:
   rx506_fail:
     (rx506_rep, rx506_pos, $I10, $P10) = rx506_cur."!mark_fail"(0)
     lt rx506_pos, -1, rx506_done
@@ -6817,14 +7338,16 @@
     jump $I10
   rx506_done:
     rx506_cur."!cursor_fail"()
-    rx506_cur."!cursor_debug"("FAIL  ", "sigil")
+    if_null rx506_debug, debug_603
+    rx506_cur."!cursor_debug"("FAIL", "sigil")
+  debug_603:
     .return (rx506_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__sigil"  :subid("127_1280467477.44751") :method
+.sub "!PREFIX__sigil"  :subid("127_1282324002.40722") :method
 .annotate 'line', 4
     new $P508, "ResizablePMCArray"
     push $P508, "&"
@@ -6836,7 +7359,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "twigil"  :subid("128_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "twigil"  :subid("128_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx511_tgt
     .local int rx511_pos
@@ -6844,7 +7367,9 @@
     .local int rx511_eos
     .local int rx511_rep
     .local pmc rx511_cur
+    .local pmc rx511_debug
     (rx511_cur, rx511_pos, rx511_tgt, $I10) = self."!cursor_start"()
+    getattribute rx511_debug, rx511_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx511_cur
     .local pmc match
     .lex "$/", match
@@ -6856,7 +7381,9 @@
     substr rx511_tgt, rx511_tgt, rx511_off
   rx511_start:
     eq $I10, 1, rx511_restart
-    rx511_cur."!cursor_debug"("START ", "twigil")
+    if_null rx511_debug, debug_604
+    rx511_cur."!cursor_debug"("START", "twigil")
+  debug_604:
     $I10 = self.'from'()
     ne $I10, -1, rxscan514_done
     goto rxscan514_scan
@@ -6879,11 +7406,15 @@
     inc rx511_pos
   # rx pass
     rx511_cur."!cursor_pass"(rx511_pos, "twigil")
-    rx511_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx511_pos)
+    if_null rx511_debug, debug_605
+    rx511_cur."!cursor_debug"("PASS", "twigil", " at pos=", rx511_pos)
+  debug_605:
     .return (rx511_cur)
   rx511_restart:
 .annotate 'line', 4
-    rx511_cur."!cursor_debug"("NEXT ", "twigil")
+    if_null rx511_debug, debug_606
+    rx511_cur."!cursor_debug"("NEXT", "twigil")
+  debug_606:
   rx511_fail:
     (rx511_rep, rx511_pos, $I10, $P10) = rx511_cur."!mark_fail"(0)
     lt rx511_pos, -1, rx511_done
@@ -6891,14 +7422,16 @@
     jump $I10
   rx511_done:
     rx511_cur."!cursor_fail"()
-    rx511_cur."!cursor_debug"("FAIL  ", "twigil")
+    if_null rx511_debug, debug_607
+    rx511_cur."!cursor_debug"("FAIL", "twigil")
+  debug_607:
     .return (rx511_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__twigil"  :subid("129_1280467477.44751") :method
+.sub "!PREFIX__twigil"  :subid("129_1282324002.40722") :method
 .annotate 'line', 4
     new $P513, "ResizablePMCArray"
     push $P513, "?"
@@ -6909,7 +7442,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator"  :subid("130_1280467477.44751") :method
+.sub "package_declarator"  :subid("130_1282324002.40722") :method
 .annotate 'line', 259
     $P516 = self."!protoregex"("package_declarator")
     .return ($P516)
@@ -6917,7 +7450,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator"  :subid("131_1280467477.44751") :method
+.sub "!PREFIX__package_declarator"  :subid("131_1282324002.40722") :method
 .annotate 'line', 259
     $P518 = self."!PREFIX__!protoregex"("package_declarator")
     .return ($P518)
@@ -6925,7 +7458,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<module>"  :subid("132_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "package_declarator:sym<module>"  :subid("132_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx520_tgt
     .local int rx520_pos
@@ -6933,7 +7466,9 @@
     .local int rx520_eos
     .local int rx520_rep
     .local pmc rx520_cur
+    .local pmc rx520_debug
     (rx520_cur, rx520_pos, rx520_tgt, $I10) = self."!cursor_start"()
+    getattribute rx520_debug, rx520_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx520_cur
     .local pmc match
     .lex "$/", match
@@ -6945,7 +7480,9 @@
     substr rx520_tgt, rx520_tgt, rx520_off
   rx520_start:
     eq $I10, 1, rx520_restart
-    rx520_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
+    if_null rx520_debug, debug_608
+    rx520_cur."!cursor_debug"("START", "package_declarator:sym<module>")
+  debug_608:
     $I10 = self.'from'()
     ne $I10, -1, rxscan524_done
     goto rxscan524_scan
@@ -6989,11 +7526,15 @@
     rx520_pos = $P10."pos"()
   # rx pass
     rx520_cur."!cursor_pass"(rx520_pos, "package_declarator:sym<module>")
-    rx520_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx520_pos)
+    if_null rx520_debug, debug_609
+    rx520_cur."!cursor_debug"("PASS", "package_declarator:sym<module>", " at pos=", rx520_pos)
+  debug_609:
     .return (rx520_cur)
   rx520_restart:
 .annotate 'line', 4
-    rx520_cur."!cursor_debug"("NEXT ", "package_declarator:sym<module>")
+    if_null rx520_debug, debug_610
+    rx520_cur."!cursor_debug"("NEXT", "package_declarator:sym<module>")
+  debug_610:
   rx520_fail:
     (rx520_rep, rx520_pos, $I10, $P10) = rx520_cur."!mark_fail"(0)
     lt rx520_pos, -1, rx520_done
@@ -7001,14 +7542,16 @@
     jump $I10
   rx520_done:
     rx520_cur."!cursor_fail"()
-    rx520_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
+    if_null rx520_debug, debug_611
+    rx520_cur."!cursor_debug"("FAIL", "package_declarator:sym<module>")
+  debug_611:
     .return (rx520_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<module>"  :subid("133_1280467477.44751") :method
+.sub "!PREFIX__package_declarator:sym<module>"  :subid("133_1282324002.40722") :method
 .annotate 'line', 4
     $P522 = self."!PREFIX__!subrule"("package_def", "module")
     new $P523, "ResizablePMCArray"
@@ -7018,7 +7561,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<class>"  :subid("134_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "package_declarator:sym<class>"  :subid("134_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx527_tgt
     .local int rx527_pos
@@ -7026,7 +7569,9 @@
     .local int rx527_eos
     .local int rx527_rep
     .local pmc rx527_cur
+    .local pmc rx527_debug
     (rx527_cur, rx527_pos, rx527_tgt, $I10) = self."!cursor_start"()
+    getattribute rx527_debug, rx527_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx527_cur
     .local pmc match
     .lex "$/", match
@@ -7038,7 +7583,9 @@
     substr rx527_tgt, rx527_tgt, rx527_off
   rx527_start:
     eq $I10, 1, rx527_restart
-    rx527_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
+    if_null rx527_debug, debug_612
+    rx527_cur."!cursor_debug"("START", "package_declarator:sym<class>")
+  debug_612:
     $I10 = self.'from'()
     ne $I10, -1, rxscan532_done
     goto rxscan532_scan
@@ -7095,11 +7642,15 @@
     rx527_pos = $P10."pos"()
   # rx pass
     rx527_cur."!cursor_pass"(rx527_pos, "package_declarator:sym<class>")
-    rx527_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx527_pos)
+    if_null rx527_debug, debug_613
+    rx527_cur."!cursor_debug"("PASS", "package_declarator:sym<class>", " at pos=", rx527_pos)
+  debug_613:
     .return (rx527_cur)
   rx527_restart:
 .annotate 'line', 4
-    rx527_cur."!cursor_debug"("NEXT ", "package_declarator:sym<class>")
+    if_null rx527_debug, debug_614
+    rx527_cur."!cursor_debug"("NEXT", "package_declarator:sym<class>")
+  debug_614:
   rx527_fail:
     (rx527_rep, rx527_pos, $I10, $P10) = rx527_cur."!mark_fail"(0)
     lt rx527_pos, -1, rx527_done
@@ -7107,14 +7658,16 @@
     jump $I10
   rx527_done:
     rx527_cur."!cursor_fail"()
-    rx527_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
+    if_null rx527_debug, debug_615
+    rx527_cur."!cursor_debug"("FAIL", "package_declarator:sym<class>")
+  debug_615:
     .return (rx527_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<class>"  :subid("135_1280467477.44751") :method
+.sub "!PREFIX__package_declarator:sym<class>"  :subid("135_1282324002.40722") :method
 .annotate 'line', 4
     $P529 = self."!PREFIX__!subrule"("package_def", "grammar")
     $P530 = self."!PREFIX__!subrule"("package_def", "class")
@@ -7126,7 +7679,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_def"  :subid("136_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "package_def"  :subid("136_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx536_tgt
     .local int rx536_pos
@@ -7134,8 +7687,10 @@
     .local int rx536_eos
     .local int rx536_rep
     .local pmc rx536_cur
+    .local pmc rx536_debug
     (rx536_cur, rx536_pos, rx536_tgt, $I10) = self."!cursor_start"()
     rx536_cur."!cursor_caparray"("parent")
+    getattribute rx536_debug, rx536_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx536_cur
     .local pmc match
     .lex "$/", match
@@ -7147,7 +7702,9 @@
     substr rx536_tgt, rx536_tgt, rx536_off
   rx536_start:
     eq $I10, 1, rx536_restart
-    rx536_cur."!cursor_debug"("START ", "package_def")
+    if_null rx536_debug, debug_616
+    rx536_cur."!cursor_debug"("START", "package_def")
+  debug_616:
     $I10 = self.'from'()
     ne $I10, -1, rxscan540_done
     goto rxscan540_scan
@@ -7235,8 +7792,8 @@
     add $I11, rx536_pos, 1
     gt $I11, rx536_eos, rx536_fail
     sub $I11, rx536_pos, rx536_off
-    substr $S10, rx536_tgt, $I11, 1
-    ne $S10, ";", rx536_fail
+    ord $I11, rx536_tgt, $I11
+    ne $I11, 59, rx536_fail
     add rx536_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx536_cur."!cursor_pos"(rx536_pos)
@@ -7316,11 +7873,15 @@
 .annotate 'line', 263
   # rx pass
     rx536_cur."!cursor_pass"(rx536_pos, "package_def")
-    rx536_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx536_pos)
+    if_null rx536_debug, debug_617
+    rx536_cur."!cursor_debug"("PASS", "package_def", " at pos=", rx536_pos)
+  debug_617:
     .return (rx536_cur)
   rx536_restart:
 .annotate 'line', 4
-    rx536_cur."!cursor_debug"("NEXT ", "package_def")
+    if_null rx536_debug, debug_618
+    rx536_cur."!cursor_debug"("NEXT", "package_def")
+  debug_618:
   rx536_fail:
     (rx536_rep, rx536_pos, $I10, $P10) = rx536_cur."!mark_fail"(0)
     lt rx536_pos, -1, rx536_done
@@ -7328,14 +7889,16 @@
     jump $I10
   rx536_done:
     rx536_cur."!cursor_fail"()
-    rx536_cur."!cursor_debug"("FAIL  ", "package_def")
+    if_null rx536_debug, debug_619
+    rx536_cur."!cursor_debug"("FAIL", "package_def")
+  debug_619:
     .return (rx536_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_def"  :subid("137_1280467477.44751") :method
+.sub "!PREFIX__package_def"  :subid("137_1282324002.40722") :method
 .annotate 'line', 4
     $P538 = self."!PREFIX__!subrule"("ws", "")
     new $P539, "ResizablePMCArray"
@@ -7345,7 +7908,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator"  :subid("138_1280467477.44751") :method
+.sub "scope_declarator"  :subid("138_1282324002.40722") :method
 .annotate 'line', 273
     $P559 = self."!protoregex"("scope_declarator")
     .return ($P559)
@@ -7353,7 +7916,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator"  :subid("139_1280467477.44751") :method
+.sub "!PREFIX__scope_declarator"  :subid("139_1282324002.40722") :method
 .annotate 'line', 273
     $P561 = self."!PREFIX__!protoregex"("scope_declarator")
     .return ($P561)
@@ -7361,7 +7924,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<my>"  :subid("140_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "scope_declarator:sym<my>"  :subid("140_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx563_tgt
     .local int rx563_pos
@@ -7369,7 +7932,9 @@
     .local int rx563_eos
     .local int rx563_rep
     .local pmc rx563_cur
+    .local pmc rx563_debug
     (rx563_cur, rx563_pos, rx563_tgt, $I10) = self."!cursor_start"()
+    getattribute rx563_debug, rx563_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx563_cur
     .local pmc match
     .lex "$/", match
@@ -7381,7 +7946,9 @@
     substr rx563_tgt, rx563_tgt, rx563_off
   rx563_start:
     eq $I10, 1, rx563_restart
-    rx563_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
+    if_null rx563_debug, debug_620
+    rx563_cur."!cursor_debug"("START", "scope_declarator:sym<my>")
+  debug_620:
     $I10 = self.'from'()
     ne $I10, -1, rxscan567_done
     goto rxscan567_scan
@@ -7425,11 +7992,15 @@
     rx563_pos = $P10."pos"()
   # rx pass
     rx563_cur."!cursor_pass"(rx563_pos, "scope_declarator:sym<my>")
-    rx563_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx563_pos)
+    if_null rx563_debug, debug_621
+    rx563_cur."!cursor_debug"("PASS", "scope_declarator:sym<my>", " at pos=", rx563_pos)
+  debug_621:
     .return (rx563_cur)
   rx563_restart:
 .annotate 'line', 4
-    rx563_cur."!cursor_debug"("NEXT ", "scope_declarator:sym<my>")
+    if_null rx563_debug, debug_622
+    rx563_cur."!cursor_debug"("NEXT", "scope_declarator:sym<my>")
+  debug_622:
   rx563_fail:
     (rx563_rep, rx563_pos, $I10, $P10) = rx563_cur."!mark_fail"(0)
     lt rx563_pos, -1, rx563_done
@@ -7437,14 +8008,16 @@
     jump $I10
   rx563_done:
     rx563_cur."!cursor_fail"()
-    rx563_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
+    if_null rx563_debug, debug_623
+    rx563_cur."!cursor_debug"("FAIL", "scope_declarator:sym<my>")
+  debug_623:
     .return (rx563_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<my>"  :subid("141_1280467477.44751") :method
+.sub "!PREFIX__scope_declarator:sym<my>"  :subid("141_1282324002.40722") :method
 .annotate 'line', 4
     $P565 = self."!PREFIX__!subrule"("scoped", "my")
     new $P566, "ResizablePMCArray"
@@ -7454,7 +8027,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<our>"  :subid("142_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "scope_declarator:sym<our>"  :subid("142_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx570_tgt
     .local int rx570_pos
@@ -7462,7 +8035,9 @@
     .local int rx570_eos
     .local int rx570_rep
     .local pmc rx570_cur
+    .local pmc rx570_debug
     (rx570_cur, rx570_pos, rx570_tgt, $I10) = self."!cursor_start"()
+    getattribute rx570_debug, rx570_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx570_cur
     .local pmc match
     .lex "$/", match
@@ -7474,7 +8049,9 @@
     substr rx570_tgt, rx570_tgt, rx570_off
   rx570_start:
     eq $I10, 1, rx570_restart
-    rx570_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
+    if_null rx570_debug, debug_624
+    rx570_cur."!cursor_debug"("START", "scope_declarator:sym<our>")
+  debug_624:
     $I10 = self.'from'()
     ne $I10, -1, rxscan574_done
     goto rxscan574_scan
@@ -7518,11 +8095,15 @@
     rx570_pos = $P10."pos"()
   # rx pass
     rx570_cur."!cursor_pass"(rx570_pos, "scope_declarator:sym<our>")
-    rx570_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx570_pos)
+    if_null rx570_debug, debug_625
+    rx570_cur."!cursor_debug"("PASS", "scope_declarator:sym<our>", " at pos=", rx570_pos)
+  debug_625:
     .return (rx570_cur)
   rx570_restart:
 .annotate 'line', 4
-    rx570_cur."!cursor_debug"("NEXT ", "scope_declarator:sym<our>")
+    if_null rx570_debug, debug_626
+    rx570_cur."!cursor_debug"("NEXT", "scope_declarator:sym<our>")
+  debug_626:
   rx570_fail:
     (rx570_rep, rx570_pos, $I10, $P10) = rx570_cur."!mark_fail"(0)
     lt rx570_pos, -1, rx570_done
@@ -7530,14 +8111,16 @@
     jump $I10
   rx570_done:
     rx570_cur."!cursor_fail"()
-    rx570_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
+    if_null rx570_debug, debug_627
+    rx570_cur."!cursor_debug"("FAIL", "scope_declarator:sym<our>")
+  debug_627:
     .return (rx570_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<our>"  :subid("143_1280467477.44751") :method
+.sub "!PREFIX__scope_declarator:sym<our>"  :subid("143_1282324002.40722") :method
 .annotate 'line', 4
     $P572 = self."!PREFIX__!subrule"("scoped", "our")
     new $P573, "ResizablePMCArray"
@@ -7547,7 +8130,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<has>"  :subid("144_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "scope_declarator:sym<has>"  :subid("144_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx577_tgt
     .local int rx577_pos
@@ -7555,7 +8138,9 @@
     .local int rx577_eos
     .local int rx577_rep
     .local pmc rx577_cur
+    .local pmc rx577_debug
     (rx577_cur, rx577_pos, rx577_tgt, $I10) = self."!cursor_start"()
+    getattribute rx577_debug, rx577_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx577_cur
     .local pmc match
     .lex "$/", match
@@ -7567,7 +8152,9 @@
     substr rx577_tgt, rx577_tgt, rx577_off
   rx577_start:
     eq $I10, 1, rx577_restart
-    rx577_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
+    if_null rx577_debug, debug_628
+    rx577_cur."!cursor_debug"("START", "scope_declarator:sym<has>")
+  debug_628:
     $I10 = self.'from'()
     ne $I10, -1, rxscan581_done
     goto rxscan581_scan
@@ -7611,11 +8198,15 @@
     rx577_pos = $P10."pos"()
   # rx pass
     rx577_cur."!cursor_pass"(rx577_pos, "scope_declarator:sym<has>")
-    rx577_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx577_pos)
+    if_null rx577_debug, debug_629
+    rx577_cur."!cursor_debug"("PASS", "scope_declarator:sym<has>", " at pos=", rx577_pos)
+  debug_629:
     .return (rx577_cur)
   rx577_restart:
 .annotate 'line', 4
-    rx577_cur."!cursor_debug"("NEXT ", "scope_declarator:sym<has>")
+    if_null rx577_debug, debug_630
+    rx577_cur."!cursor_debug"("NEXT", "scope_declarator:sym<has>")
+  debug_630:
   rx577_fail:
     (rx577_rep, rx577_pos, $I10, $P10) = rx577_cur."!mark_fail"(0)
     lt rx577_pos, -1, rx577_done
@@ -7623,14 +8214,16 @@
     jump $I10
   rx577_done:
     rx577_cur."!cursor_fail"()
-    rx577_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
+    if_null rx577_debug, debug_631
+    rx577_cur."!cursor_debug"("FAIL", "scope_declarator:sym<has>")
+  debug_631:
     .return (rx577_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<has>"  :subid("145_1280467477.44751") :method
+.sub "!PREFIX__scope_declarator:sym<has>"  :subid("145_1282324002.40722") :method
 .annotate 'line', 4
     $P579 = self."!PREFIX__!subrule"("scoped", "has")
     new $P580, "ResizablePMCArray"
@@ -7640,7 +8233,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scoped"  :subid("146_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "scoped"  :subid("146_1282324002.40722") :method :outer("11_1282324002.40722")
     .param pmc param_584
 .annotate 'line', 278
     .lex "$*SCOPE", param_584
@@ -7651,7 +8244,9 @@
     .local int rx585_eos
     .local int rx585_rep
     .local pmc rx585_cur
+    .local pmc rx585_debug
     (rx585_cur, rx585_pos, rx585_tgt, $I10) = self."!cursor_start"()
+    getattribute rx585_debug, rx585_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx585_cur
     .local pmc match
     .lex "$/", match
@@ -7663,7 +8258,9 @@
     substr rx585_tgt, rx585_tgt, rx585_off
   rx585_start:
     eq $I10, 1, rx585_restart
-    rx585_cur."!cursor_debug"("START ", "scoped")
+    if_null rx585_debug, debug_632
+    rx585_cur."!cursor_debug"("START", "scoped")
+  debug_632:
     $I10 = self.'from'()
     ne $I10, -1, rxscan590_done
     goto rxscan590_scan
@@ -7722,11 +8319,15 @@
 .annotate 'line', 278
   # rx pass
     rx585_cur."!cursor_pass"(rx585_pos, "scoped")
-    rx585_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx585_pos)
+    if_null rx585_debug, debug_633
+    rx585_cur."!cursor_debug"("PASS", "scoped", " at pos=", rx585_pos)
+  debug_633:
     .return (rx585_cur)
   rx585_restart:
 .annotate 'line', 4
-    rx585_cur."!cursor_debug"("NEXT ", "scoped")
+    if_null rx585_debug, debug_634
+    rx585_cur."!cursor_debug"("NEXT", "scoped")
+  debug_634:
   rx585_fail:
     (rx585_rep, rx585_pos, $I10, $P10) = rx585_cur."!mark_fail"(0)
     lt rx585_pos, -1, rx585_done
@@ -7734,14 +8335,16 @@
     jump $I10
   rx585_done:
     rx585_cur."!cursor_fail"()
-    rx585_cur."!cursor_debug"("FAIL  ", "scoped")
+    if_null rx585_debug, debug_635
+    rx585_cur."!cursor_debug"("FAIL", "scoped")
+  debug_635:
     .return (rx585_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scoped"  :subid("147_1280467477.44751") :method
+.sub "!PREFIX__scoped"  :subid("147_1282324002.40722") :method
 .annotate 'line', 4
     $P587 = self."!PREFIX__!subrule"("ws", "")
     $P588 = self."!PREFIX__!subrule"("ws", "")
@@ -7753,7 +8356,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "typename"  :subid("148_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "typename"  :subid("148_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx597_tgt
     .local int rx597_pos
@@ -7761,7 +8364,9 @@
     .local int rx597_eos
     .local int rx597_rep
     .local pmc rx597_cur
+    .local pmc rx597_debug
     (rx597_cur, rx597_pos, rx597_tgt, $I10) = self."!cursor_start"()
+    getattribute rx597_debug, rx597_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx597_cur
     .local pmc match
     .lex "$/", match
@@ -7773,7 +8378,9 @@
     substr rx597_tgt, rx597_tgt, rx597_off
   rx597_start:
     eq $I10, 1, rx597_restart
-    rx597_cur."!cursor_debug"("START ", "typename")
+    if_null rx597_debug, debug_636
+    rx597_cur."!cursor_debug"("START", "typename")
+  debug_636:
     $I10 = self.'from'()
     ne $I10, -1, rxscan601_done
     goto rxscan601_scan
@@ -7796,11 +8403,15 @@
     rx597_pos = $P10."pos"()
   # rx pass
     rx597_cur."!cursor_pass"(rx597_pos, "typename")
-    rx597_cur."!cursor_debug"("PASS  ", "typename", " at pos=", rx597_pos)
+    if_null rx597_debug, debug_637
+    rx597_cur."!cursor_debug"("PASS", "typename", " at pos=", rx597_pos)
+  debug_637:
     .return (rx597_cur)
   rx597_restart:
 .annotate 'line', 4
-    rx597_cur."!cursor_debug"("NEXT ", "typename")
+    if_null rx597_debug, debug_638
+    rx597_cur."!cursor_debug"("NEXT", "typename")
+  debug_638:
   rx597_fail:
     (rx597_rep, rx597_pos, $I10, $P10) = rx597_cur."!mark_fail"(0)
     lt rx597_pos, -1, rx597_done
@@ -7808,14 +8419,16 @@
     jump $I10
   rx597_done:
     rx597_cur."!cursor_fail"()
-    rx597_cur."!cursor_debug"("FAIL  ", "typename")
+    if_null rx597_debug, debug_639
+    rx597_cur."!cursor_debug"("FAIL", "typename")
+  debug_639:
     .return (rx597_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__typename"  :subid("149_1280467477.44751") :method
+.sub "!PREFIX__typename"  :subid("149_1282324002.40722") :method
 .annotate 'line', 4
     $P599 = self."!PREFIX__!subrule"("name", "")
     new $P600, "ResizablePMCArray"
@@ -7825,7 +8438,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "declarator"  :subid("150_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "declarator"  :subid("150_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx603_tgt
     .local int rx603_pos
@@ -7833,7 +8446,9 @@
     .local int rx603_eos
     .local int rx603_rep
     .local pmc rx603_cur
+    .local pmc rx603_debug
     (rx603_cur, rx603_pos, rx603_tgt, $I10) = self."!cursor_start"()
+    getattribute rx603_debug, rx603_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx603_cur
     .local pmc match
     .lex "$/", match
@@ -7845,7 +8460,9 @@
     substr rx603_tgt, rx603_tgt, rx603_off
   rx603_start:
     eq $I10, 1, rx603_restart
-    rx603_cur."!cursor_debug"("START ", "declarator")
+    if_null rx603_debug, debug_640
+    rx603_cur."!cursor_debug"("START", "declarator")
+  debug_640:
     $I10 = self.'from'()
     ne $I10, -1, rxscan608_done
     goto rxscan608_scan
@@ -7884,11 +8501,15 @@
 .annotate 'line', 285
   # rx pass
     rx603_cur."!cursor_pass"(rx603_pos, "declarator")
-    rx603_cur."!cursor_debug"("PASS  ", "declarator", " at pos=", rx603_pos)
+    if_null rx603_debug, debug_641
+    rx603_cur."!cursor_debug"("PASS", "declarator", " at pos=", rx603_pos)
+  debug_641:
     .return (rx603_cur)
   rx603_restart:
 .annotate 'line', 4
-    rx603_cur."!cursor_debug"("NEXT ", "declarator")
+    if_null rx603_debug, debug_642
+    rx603_cur."!cursor_debug"("NEXT", "declarator")
+  debug_642:
   rx603_fail:
     (rx603_rep, rx603_pos, $I10, $P10) = rx603_cur."!mark_fail"(0)
     lt rx603_pos, -1, rx603_done
@@ -7896,14 +8517,16 @@
     jump $I10
   rx603_done:
     rx603_cur."!cursor_fail"()
-    rx603_cur."!cursor_debug"("FAIL  ", "declarator")
+    if_null rx603_debug, debug_643
+    rx603_cur."!cursor_debug"("FAIL", "declarator")
+  debug_643:
     .return (rx603_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__declarator"  :subid("151_1280467477.44751") :method
+.sub "!PREFIX__declarator"  :subid("151_1282324002.40722") :method
 .annotate 'line', 4
     $P605 = self."!PREFIX__!subrule"("routine_declarator", "")
     $P606 = self."!PREFIX__!subrule"("variable_declarator", "")
@@ -7915,7 +8538,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable_declarator"  :subid("152_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "variable_declarator"  :subid("152_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx611_tgt
     .local int rx611_pos
@@ -7923,7 +8546,9 @@
     .local int rx611_eos
     .local int rx611_rep
     .local pmc rx611_cur
+    .local pmc rx611_debug
     (rx611_cur, rx611_pos, rx611_tgt, $I10) = self."!cursor_start"()
+    getattribute rx611_debug, rx611_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx611_cur
     .local pmc match
     .lex "$/", match
@@ -7935,7 +8560,9 @@
     substr rx611_tgt, rx611_tgt, rx611_off
   rx611_start:
     eq $I10, 1, rx611_restart
-    rx611_cur."!cursor_debug"("START ", "variable_declarator")
+    if_null rx611_debug, debug_644
+    rx611_cur."!cursor_debug"("START", "variable_declarator")
+  debug_644:
     $I10 = self.'from'()
     ne $I10, -1, rxscan615_done
     goto rxscan615_scan
@@ -7958,11 +8585,15 @@
     rx611_pos = $P10."pos"()
   # rx pass
     rx611_cur."!cursor_pass"(rx611_pos, "variable_declarator")
-    rx611_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx611_pos)
+    if_null rx611_debug, debug_645
+    rx611_cur."!cursor_debug"("PASS", "variable_declarator", " at pos=", rx611_pos)
+  debug_645:
     .return (rx611_cur)
   rx611_restart:
 .annotate 'line', 4
-    rx611_cur."!cursor_debug"("NEXT ", "variable_declarator")
+    if_null rx611_debug, debug_646
+    rx611_cur."!cursor_debug"("NEXT", "variable_declarator")
+  debug_646:
   rx611_fail:
     (rx611_rep, rx611_pos, $I10, $P10) = rx611_cur."!mark_fail"(0)
     lt rx611_pos, -1, rx611_done
@@ -7970,14 +8601,16 @@
     jump $I10
   rx611_done:
     rx611_cur."!cursor_fail"()
-    rx611_cur."!cursor_debug"("FAIL  ", "variable_declarator")
+    if_null rx611_debug, debug_647
+    rx611_cur."!cursor_debug"("FAIL", "variable_declarator")
+  debug_647:
     .return (rx611_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable_declarator"  :subid("153_1280467477.44751") :method
+.sub "!PREFIX__variable_declarator"  :subid("153_1282324002.40722") :method
 .annotate 'line', 4
     $P613 = self."!PREFIX__!subrule"("variable", "")
     new $P614, "ResizablePMCArray"
@@ -7987,7 +8620,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator"  :subid("154_1280467477.44751") :method
+.sub "routine_declarator"  :subid("154_1282324002.40722") :method
 .annotate 'line', 292
     $P617 = self."!protoregex"("routine_declarator")
     .return ($P617)
@@ -7995,7 +8628,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator"  :subid("155_1280467477.44751") :method
+.sub "!PREFIX__routine_declarator"  :subid("155_1282324002.40722") :method
 .annotate 'line', 292
     $P619 = self."!PREFIX__!protoregex"("routine_declarator")
     .return ($P619)
@@ -8003,7 +8636,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<sub>"  :subid("156_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "routine_declarator:sym<sub>"  :subid("156_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx621_tgt
     .local int rx621_pos
@@ -8011,7 +8644,9 @@
     .local int rx621_eos
     .local int rx621_rep
     .local pmc rx621_cur
+    .local pmc rx621_debug
     (rx621_cur, rx621_pos, rx621_tgt, $I10) = self."!cursor_start"()
+    getattribute rx621_debug, rx621_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx621_cur
     .local pmc match
     .lex "$/", match
@@ -8023,7 +8658,9 @@
     substr rx621_tgt, rx621_tgt, rx621_off
   rx621_start:
     eq $I10, 1, rx621_restart
-    rx621_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
+    if_null rx621_debug, debug_648
+    rx621_cur."!cursor_debug"("START", "routine_declarator:sym<sub>")
+  debug_648:
     $I10 = self.'from'()
     ne $I10, -1, rxscan625_done
     goto rxscan625_scan
@@ -8067,11 +8704,15 @@
     rx621_pos = $P10."pos"()
   # rx pass
     rx621_cur."!cursor_pass"(rx621_pos, "routine_declarator:sym<sub>")
-    rx621_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx621_pos)
+    if_null rx621_debug, debug_649
+    rx621_cur."!cursor_debug"("PASS", "routine_declarator:sym<sub>", " at pos=", rx621_pos)
+  debug_649:
     .return (rx621_cur)
   rx621_restart:
 .annotate 'line', 4
-    rx621_cur."!cursor_debug"("NEXT ", "routine_declarator:sym<sub>")
+    if_null rx621_debug, debug_650
+    rx621_cur."!cursor_debug"("NEXT", "routine_declarator:sym<sub>")
+  debug_650:
   rx621_fail:
     (rx621_rep, rx621_pos, $I10, $P10) = rx621_cur."!mark_fail"(0)
     lt rx621_pos, -1, rx621_done
@@ -8079,14 +8720,16 @@
     jump $I10
   rx621_done:
     rx621_cur."!cursor_fail"()
-    rx621_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
+    if_null rx621_debug, debug_651
+    rx621_cur."!cursor_debug"("FAIL", "routine_declarator:sym<sub>")
+  debug_651:
     .return (rx621_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("157_1280467477.44751") :method
+.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("157_1282324002.40722") :method
 .annotate 'line', 4
     $P623 = self."!PREFIX__!subrule"("routine_def", "sub")
     new $P624, "ResizablePMCArray"
@@ -8096,7 +8739,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<method>"  :subid("158_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "routine_declarator:sym<method>"  :subid("158_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx628_tgt
     .local int rx628_pos
@@ -8104,7 +8747,9 @@
     .local int rx628_eos
     .local int rx628_rep
     .local pmc rx628_cur
+    .local pmc rx628_debug
     (rx628_cur, rx628_pos, rx628_tgt, $I10) = self."!cursor_start"()
+    getattribute rx628_debug, rx628_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx628_cur
     .local pmc match
     .lex "$/", match
@@ -8116,7 +8761,9 @@
     substr rx628_tgt, rx628_tgt, rx628_off
   rx628_start:
     eq $I10, 1, rx628_restart
-    rx628_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
+    if_null rx628_debug, debug_652
+    rx628_cur."!cursor_debug"("START", "routine_declarator:sym<method>")
+  debug_652:
     $I10 = self.'from'()
     ne $I10, -1, rxscan632_done
     goto rxscan632_scan
@@ -8160,11 +8807,15 @@
     rx628_pos = $P10."pos"()
   # rx pass
     rx628_cur."!cursor_pass"(rx628_pos, "routine_declarator:sym<method>")
-    rx628_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx628_pos)
+    if_null rx628_debug, debug_653
+    rx628_cur."!cursor_debug"("PASS", "routine_declarator:sym<method>", " at pos=", rx628_pos)
+  debug_653:
     .return (rx628_cur)
   rx628_restart:
 .annotate 'line', 4
-    rx628_cur."!cursor_debug"("NEXT ", "routine_declarator:sym<method>")
+    if_null rx628_debug, debug_654
+    rx628_cur."!cursor_debug"("NEXT", "routine_declarator:sym<method>")
+  debug_654:
   rx628_fail:
     (rx628_rep, rx628_pos, $I10, $P10) = rx628_cur."!mark_fail"(0)
     lt rx628_pos, -1, rx628_done
@@ -8172,14 +8823,16 @@
     jump $I10
   rx628_done:
     rx628_cur."!cursor_fail"()
-    rx628_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
+    if_null rx628_debug, debug_655
+    rx628_cur."!cursor_debug"("FAIL", "routine_declarator:sym<method>")
+  debug_655:
     .return (rx628_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<method>"  :subid("159_1280467477.44751") :method
+.sub "!PREFIX__routine_declarator:sym<method>"  :subid("159_1282324002.40722") :method
 .annotate 'line', 4
     $P630 = self."!PREFIX__!subrule"("method_def", "method")
     new $P631, "ResizablePMCArray"
@@ -8189,7 +8842,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_def"  :subid("160_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "routine_def"  :subid("160_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx635_tgt
     .local int rx635_pos
@@ -8197,8 +8850,10 @@
     .local int rx635_eos
     .local int rx635_rep
     .local pmc rx635_cur
+    .local pmc rx635_debug
     (rx635_cur, rx635_pos, rx635_tgt, $I10) = self."!cursor_start"()
-    rx635_cur."!cursor_caparray"("sigil", "deflongname")
+    rx635_cur."!cursor_caparray"("deflongname", "sigil")
+    getattribute rx635_debug, rx635_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx635_cur
     .local pmc match
     .lex "$/", match
@@ -8210,7 +8865,9 @@
     substr rx635_tgt, rx635_tgt, rx635_off
   rx635_start:
     eq $I10, 1, rx635_restart
-    rx635_cur."!cursor_debug"("START ", "routine_def")
+    if_null rx635_debug, debug_656
+    rx635_cur."!cursor_debug"("START", "routine_def")
+  debug_656:
     $I10 = self.'from'()
     ne $I10, -1, rxscan639_done
     goto rxscan639_scan
@@ -8250,8 +8907,8 @@
     add $I11, rx635_pos, 1
     gt $I11, rx635_eos, rx635_fail
     sub $I11, rx635_pos, rx635_off
-    substr $S10, rx635_tgt, $I11, 1
-    ne $S10, "&", rx635_fail
+    ord $I11, rx635_tgt, $I11
+    ne $I11, 38, rx635_fail
     add rx635_pos, 1
     set_addr $I10, rxquantr643_done
     (rx635_rep) = rx635_cur."!mark_commit"($I10)
@@ -8311,8 +8968,8 @@
     add $I11, rx635_pos, 1
     gt $I11, rx635_eos, rx635_fail
     sub $I11, rx635_pos, rx635_off
-    substr $S10, rx635_tgt, $I11, 1
-    ne $S10, "(", rx635_fail
+    ord $I11, rx635_tgt, $I11
+    ne $I11, 40, rx635_fail
     add rx635_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx635_cur."!cursor_pos"(rx635_pos)
@@ -8335,8 +8992,8 @@
     add $I11, rx635_pos, 1
     gt $I11, rx635_eos, rx635_fail
     sub $I11, rx635_pos, rx635_off
-    substr $S10, rx635_tgt, $I11, 1
-    ne $S10, ")", rx635_fail
+    ord $I11, rx635_tgt, $I11
+    ne $I11, 41, rx635_fail
     add rx635_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx635_cur."!cursor_pos"(rx635_pos)
@@ -8383,11 +9040,15 @@
 .annotate 'line', 296
   # rx pass
     rx635_cur."!cursor_pass"(rx635_pos, "routine_def")
-    rx635_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx635_pos)
+    if_null rx635_debug, debug_657
+    rx635_cur."!cursor_debug"("PASS", "routine_def", " at pos=", rx635_pos)
+  debug_657:
     .return (rx635_cur)
   rx635_restart:
 .annotate 'line', 4
-    rx635_cur."!cursor_debug"("NEXT ", "routine_def")
+    if_null rx635_debug, debug_658
+    rx635_cur."!cursor_debug"("NEXT", "routine_def")
+  debug_658:
   rx635_fail:
     (rx635_rep, rx635_pos, $I10, $P10) = rx635_cur."!mark_fail"(0)
     lt rx635_pos, -1, rx635_done
@@ -8395,14 +9056,16 @@
     jump $I10
   rx635_done:
     rx635_cur."!cursor_fail"()
-    rx635_cur."!cursor_debug"("FAIL  ", "routine_def")
+    if_null rx635_debug, debug_659
+    rx635_cur."!cursor_debug"("FAIL", "routine_def")
+  debug_659:
     .return (rx635_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_def"  :subid("161_1280467477.44751") :method
+.sub "!PREFIX__routine_def"  :subid("161_1282324002.40722") :method
 .annotate 'line', 4
     $P637 = self."!PREFIX__!subrule"("ws", "")
     new $P638, "ResizablePMCArray"
@@ -8412,7 +9075,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "method_def"  :subid("162_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "method_def"  :subid("162_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx658_tgt
     .local int rx658_pos
@@ -8420,8 +9083,10 @@
     .local int rx658_eos
     .local int rx658_rep
     .local pmc rx658_cur
+    .local pmc rx658_debug
     (rx658_cur, rx658_pos, rx658_tgt, $I10) = self."!cursor_start"()
     rx658_cur."!cursor_caparray"("deflongname")
+    getattribute rx658_debug, rx658_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx658_cur
     .local pmc match
     .lex "$/", match
@@ -8433,7 +9098,9 @@
     substr rx658_tgt, rx658_tgt, rx658_off
   rx658_start:
     eq $I10, 1, rx658_restart
-    rx658_cur."!cursor_debug"("START ", "method_def")
+    if_null rx658_debug, debug_660
+    rx658_cur."!cursor_debug"("START", "method_def")
+  debug_660:
     $I10 = self.'from'()
     ne $I10, -1, rxscan662_done
     goto rxscan662_scan
@@ -8502,8 +9169,8 @@
     add $I11, rx658_pos, 1
     gt $I11, rx658_eos, rx658_fail
     sub $I11, rx658_pos, rx658_off
-    substr $S10, rx658_tgt, $I11, 1
-    ne $S10, "(", rx658_fail
+    ord $I11, rx658_tgt, $I11
+    ne $I11, 40, rx658_fail
     add rx658_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx658_cur."!cursor_pos"(rx658_pos)
@@ -8526,8 +9193,8 @@
     add $I11, rx658_pos, 1
     gt $I11, rx658_eos, rx658_fail
     sub $I11, rx658_pos, rx658_off
-    substr $S10, rx658_tgt, $I11, 1
-    ne $S10, ")", rx658_fail
+    ord $I11, rx658_tgt, $I11
+    ne $I11, 41, rx658_fail
     add rx658_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx658_cur."!cursor_pos"(rx658_pos)
@@ -8574,11 +9241,15 @@
 .annotate 'line', 304
   # rx pass
     rx658_cur."!cursor_pass"(rx658_pos, "method_def")
-    rx658_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx658_pos)
+    if_null rx658_debug, debug_661
+    rx658_cur."!cursor_debug"("PASS", "method_def", " at pos=", rx658_pos)
+  debug_661:
     .return (rx658_cur)
   rx658_restart:
 .annotate 'line', 4
-    rx658_cur."!cursor_debug"("NEXT ", "method_def")
+    if_null rx658_debug, debug_662
+    rx658_cur."!cursor_debug"("NEXT", "method_def")
+  debug_662:
   rx658_fail:
     (rx658_rep, rx658_pos, $I10, $P10) = rx658_cur."!mark_fail"(0)
     lt rx658_pos, -1, rx658_done
@@ -8586,14 +9257,16 @@
     jump $I10
   rx658_done:
     rx658_cur."!cursor_fail"()
-    rx658_cur."!cursor_debug"("FAIL  ", "method_def")
+    if_null rx658_debug, debug_663
+    rx658_cur."!cursor_debug"("FAIL", "method_def")
+  debug_663:
     .return (rx658_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__method_def"  :subid("163_1280467477.44751") :method
+.sub "!PREFIX__method_def"  :subid("163_1282324002.40722") :method
 .annotate 'line', 4
     $P660 = self."!PREFIX__!subrule"("ws", "")
     new $P661, "ResizablePMCArray"
@@ -8603,7 +9276,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "multi_declarator"  :subid("164_1280467477.44751") :method
+.sub "multi_declarator"  :subid("164_1282324002.40722") :method
 .annotate 'line', 312
     $P678 = self."!protoregex"("multi_declarator")
     .return ($P678)
@@ -8611,7 +9284,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__multi_declarator"  :subid("165_1280467477.44751") :method
+.sub "!PREFIX__multi_declarator"  :subid("165_1282324002.40722") :method
 .annotate 'line', 312
     $P680 = self."!PREFIX__!protoregex"("multi_declarator")
     .return ($P680)
@@ -8619,7 +9292,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "multi_declarator:sym<multi>"  :subid("166_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "multi_declarator:sym<multi>"  :subid("166_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 314
     new $P682, "Undef"
     .lex "$*MULTINESS", $P682
@@ -8630,7 +9303,9 @@
     .local int rx683_eos
     .local int rx683_rep
     .local pmc rx683_cur
+    .local pmc rx683_debug
     (rx683_cur, rx683_pos, rx683_tgt, $I10) = self."!cursor_start"()
+    getattribute rx683_debug, rx683_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx683_cur
     .local pmc match
     .lex "$/", match
@@ -8642,7 +9317,9 @@
     substr rx683_tgt, rx683_tgt, rx683_off
   rx683_start:
     eq $I10, 1, rx683_restart
-    rx683_cur."!cursor_debug"("START ", "multi_declarator:sym<multi>")
+    if_null rx683_debug, debug_664
+    rx683_cur."!cursor_debug"("START", "multi_declarator:sym<multi>")
+  debug_664:
     $I10 = self.'from'()
     ne $I10, -1, rxscan687_done
     goto rxscan687_scan
@@ -8720,11 +9397,15 @@
 .annotate 'line', 313
   # rx pass
     rx683_cur."!cursor_pass"(rx683_pos, "multi_declarator:sym<multi>")
-    rx683_cur."!cursor_debug"("PASS  ", "multi_declarator:sym<multi>", " at pos=", rx683_pos)
+    if_null rx683_debug, debug_665
+    rx683_cur."!cursor_debug"("PASS", "multi_declarator:sym<multi>", " at pos=", rx683_pos)
+  debug_665:
     .return (rx683_cur)
   rx683_restart:
 .annotate 'line', 4
-    rx683_cur."!cursor_debug"("NEXT ", "multi_declarator:sym<multi>")
+    if_null rx683_debug, debug_666
+    rx683_cur."!cursor_debug"("NEXT", "multi_declarator:sym<multi>")
+  debug_666:
   rx683_fail:
     (rx683_rep, rx683_pos, $I10, $P10) = rx683_cur."!mark_fail"(0)
     lt rx683_pos, -1, rx683_done
@@ -8732,14 +9413,16 @@
     jump $I10
   rx683_done:
     rx683_cur."!cursor_fail"()
-    rx683_cur."!cursor_debug"("FAIL  ", "multi_declarator:sym<multi>")
+    if_null rx683_debug, debug_667
+    rx683_cur."!cursor_debug"("FAIL", "multi_declarator:sym<multi>")
+  debug_667:
     .return (rx683_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__multi_declarator:sym<multi>"  :subid("167_1280467477.44751") :method
+.sub "!PREFIX__multi_declarator:sym<multi>"  :subid("167_1282324002.40722") :method
 .annotate 'line', 4
     $P685 = self."!PREFIX__!subrule"("ws", "multi")
     new $P686, "ResizablePMCArray"
@@ -8749,7 +9432,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "multi_declarator:sym<null>"  :subid("168_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "multi_declarator:sym<null>"  :subid("168_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 319
     new $P692, "Undef"
     .lex "$*MULTINESS", $P692
@@ -8760,7 +9443,9 @@
     .local int rx693_eos
     .local int rx693_rep
     .local pmc rx693_cur
+    .local pmc rx693_debug
     (rx693_cur, rx693_pos, rx693_tgt, $I10) = self."!cursor_start"()
+    getattribute rx693_debug, rx693_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx693_cur
     .local pmc match
     .lex "$/", match
@@ -8772,7 +9457,9 @@
     substr rx693_tgt, rx693_tgt, rx693_off
   rx693_start:
     eq $I10, 1, rx693_restart
-    rx693_cur."!cursor_debug"("START ", "multi_declarator:sym<null>")
+    if_null rx693_debug, debug_668
+    rx693_cur."!cursor_debug"("START", "multi_declarator:sym<null>")
+  debug_668:
     $I10 = self.'from'()
     ne $I10, -1, rxscan697_done
     goto rxscan697_scan
@@ -8801,11 +9488,15 @@
 .annotate 'line', 318
   # rx pass
     rx693_cur."!cursor_pass"(rx693_pos, "multi_declarator:sym<null>")
-    rx693_cur."!cursor_debug"("PASS  ", "multi_declarator:sym<null>", " at pos=", rx693_pos)
+    if_null rx693_debug, debug_669
+    rx693_cur."!cursor_debug"("PASS", "multi_declarator:sym<null>", " at pos=", rx693_pos)
+  debug_669:
     .return (rx693_cur)
   rx693_restart:
 .annotate 'line', 4
-    rx693_cur."!cursor_debug"("NEXT ", "multi_declarator:sym<null>")
+    if_null rx693_debug, debug_670
+    rx693_cur."!cursor_debug"("NEXT", "multi_declarator:sym<null>")
+  debug_670:
   rx693_fail:
     (rx693_rep, rx693_pos, $I10, $P10) = rx693_cur."!mark_fail"(0)
     lt rx693_pos, -1, rx693_done
@@ -8813,14 +9504,16 @@
     jump $I10
   rx693_done:
     rx693_cur."!cursor_fail"()
-    rx693_cur."!cursor_debug"("FAIL  ", "multi_declarator:sym<null>")
+    if_null rx693_debug, debug_671
+    rx693_cur."!cursor_debug"("FAIL", "multi_declarator:sym<null>")
+  debug_671:
     .return (rx693_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__multi_declarator:sym<null>"  :subid("169_1280467477.44751") :method
+.sub "!PREFIX__multi_declarator:sym<null>"  :subid("169_1282324002.40722") :method
 .annotate 'line', 4
     $P695 = self."!PREFIX__!subrule"("declarator", "")
     new $P696, "ResizablePMCArray"
@@ -8830,7 +9523,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "signature"  :subid("170_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "signature"  :subid("170_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx700_tgt
     .local int rx700_pos
@@ -8838,8 +9531,10 @@
     .local int rx700_eos
     .local int rx700_rep
     .local pmc rx700_cur
+    .local pmc rx700_debug
     (rx700_cur, rx700_pos, rx700_tgt, $I10) = self."!cursor_start"()
     rx700_cur."!cursor_caparray"("parameter")
+    getattribute rx700_debug, rx700_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx700_cur
     .local pmc match
     .lex "$/", match
@@ -8851,7 +9546,9 @@
     substr rx700_tgt, rx700_tgt, rx700_off
   rx700_start:
     eq $I10, 1, rx700_restart
-    rx700_cur."!cursor_debug"("START ", "signature")
+    if_null rx700_debug, debug_672
+    rx700_cur."!cursor_debug"("START", "signature")
+  debug_672:
     $I10 = self.'from'()
     ne $I10, -1, rxscan703_done
     goto rxscan703_scan
@@ -8898,8 +9595,8 @@
     add $I11, rx700_pos, 1
     gt $I11, rx700_eos, rx700_fail
     sub $I11, rx700_pos, rx700_off
-    substr $S10, rx700_tgt, $I11, 1
-    ne $S10, ",", rx700_fail
+    ord $I11, rx700_tgt, $I11
+    ne $I11, 44, rx700_fail
     add rx700_pos, 1
     goto rxquantr705_loop
   rxquantr705_done:
@@ -8908,11 +9605,15 @@
   rxquantr704_done:
   # rx pass
     rx700_cur."!cursor_pass"(rx700_pos, "signature")
-    rx700_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx700_pos)
+    if_null rx700_debug, debug_673
+    rx700_cur."!cursor_debug"("PASS", "signature", " at pos=", rx700_pos)
+  debug_673:
     .return (rx700_cur)
   rx700_restart:
 .annotate 'line', 4
-    rx700_cur."!cursor_debug"("NEXT ", "signature")
+    if_null rx700_debug, debug_674
+    rx700_cur."!cursor_debug"("NEXT", "signature")
+  debug_674:
   rx700_fail:
     (rx700_rep, rx700_pos, $I10, $P10) = rx700_cur."!mark_fail"(0)
     lt rx700_pos, -1, rx700_done
@@ -8920,14 +9621,16 @@
     jump $I10
   rx700_done:
     rx700_cur."!cursor_fail"()
-    rx700_cur."!cursor_debug"("FAIL  ", "signature")
+    if_null rx700_debug, debug_675
+    rx700_cur."!cursor_debug"("FAIL", "signature")
+  debug_675:
     .return (rx700_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__signature"  :subid("171_1280467477.44751") :method
+.sub "!PREFIX__signature"  :subid("171_1282324002.40722") :method
 .annotate 'line', 4
     new $P702, "ResizablePMCArray"
     push $P702, ""
@@ -8936,7 +9639,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "parameter"  :subid("172_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "parameter"  :subid("172_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx707_tgt
     .local int rx707_pos
@@ -8944,8 +9647,10 @@
     .local int rx707_eos
     .local int rx707_rep
     .local pmc rx707_cur
+    .local pmc rx707_debug
     (rx707_cur, rx707_pos, rx707_tgt, $I10) = self."!cursor_start"()
-    rx707_cur."!cursor_caparray"("typename", "default_value")
+    rx707_cur."!cursor_caparray"("default_value", "typename")
+    getattribute rx707_debug, rx707_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx707_cur
     .local pmc match
     .lex "$/", match
@@ -8957,7 +9662,9 @@
     substr rx707_tgt, rx707_tgt, rx707_off
   rx707_start:
     eq $I10, 1, rx707_restart
-    rx707_cur."!cursor_debug"("START ", "parameter")
+    if_null rx707_debug, debug_676
+    rx707_cur."!cursor_debug"("START", "parameter")
+  debug_676:
     $I10 = self.'from'()
     ne $I10, -1, rxscan710_done
     goto rxscan710_scan
@@ -9005,8 +9712,8 @@
     add $I11, rx707_pos, 1
     gt $I11, rx707_eos, rx707_fail
     sub $I11, rx707_pos, rx707_off
-    substr $S10, rx707_tgt, $I11, 1
-    ne $S10, "*", rx707_fail
+    ord $I11, rx707_tgt, $I11
+    ne $I11, 42, rx707_fail
     add rx707_pos, 1
     set_addr $I10, rxcap_713_fail
     ($I12, $I11) = rx707_cur."!mark_peek"($I10)
@@ -9059,8 +9766,8 @@
     add $I11, rx707_pos, 1
     gt $I11, rx707_eos, rx707_fail
     sub $I11, rx707_pos, rx707_off
-    substr $S10, rx707_tgt, $I11, 1
-    ne $S10, "?", rx707_fail
+    ord $I11, rx707_tgt, $I11
+    ne $I11, 63, rx707_fail
     add rx707_pos, 1
     goto alt715_end
   alt715_1:
@@ -9070,8 +9777,8 @@
     add $I11, rx707_pos, 1
     gt $I11, rx707_eos, rx707_fail
     sub $I11, rx707_pos, rx707_off
-    substr $S10, rx707_tgt, $I11, 1
-    ne $S10, "!", rx707_fail
+    ord $I11, rx707_tgt, $I11
+    ne $I11, 33, rx707_fail
     add rx707_pos, 1
     goto alt715_end
   alt715_2:
@@ -9112,11 +9819,15 @@
 .annotate 'line', 325
   # rx pass
     rx707_cur."!cursor_pass"(rx707_pos, "parameter")
-    rx707_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx707_pos)
+    if_null rx707_debug, debug_677
+    rx707_cur."!cursor_debug"("PASS", "parameter", " at pos=", rx707_pos)
+  debug_677:
     .return (rx707_cur)
   rx707_restart:
 .annotate 'line', 4
-    rx707_cur."!cursor_debug"("NEXT ", "parameter")
+    if_null rx707_debug, debug_678
+    rx707_cur."!cursor_debug"("NEXT", "parameter")
+  debug_678:
   rx707_fail:
     (rx707_rep, rx707_pos, $I10, $P10) = rx707_cur."!mark_fail"(0)
     lt rx707_pos, -1, rx707_done
@@ -9124,14 +9835,16 @@
     jump $I10
   rx707_done:
     rx707_cur."!cursor_fail"()
-    rx707_cur."!cursor_debug"("FAIL  ", "parameter")
+    if_null rx707_debug, debug_679
+    rx707_cur."!cursor_debug"("FAIL", "parameter")
+  debug_679:
     .return (rx707_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__parameter"  :subid("173_1280467477.44751") :method
+.sub "!PREFIX__parameter"  :subid("173_1282324002.40722") :method
 .annotate 'line', 4
     new $P709, "ResizablePMCArray"
     push $P709, ""
@@ -9140,7 +9853,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "param_var"  :subid("174_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "param_var"  :subid("174_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx720_tgt
     .local int rx720_pos
@@ -9148,8 +9861,10 @@
     .local int rx720_eos
     .local int rx720_rep
     .local pmc rx720_cur
+    .local pmc rx720_debug
     (rx720_cur, rx720_pos, rx720_tgt, $I10) = self."!cursor_start"()
     rx720_cur."!cursor_caparray"("twigil")
+    getattribute rx720_debug, rx720_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx720_cur
     .local pmc match
     .lex "$/", match
@@ -9161,7 +9876,9 @@
     substr rx720_tgt, rx720_tgt, rx720_off
   rx720_start:
     eq $I10, 1, rx720_restart
-    rx720_cur."!cursor_debug"("START ", "param_var")
+    if_null rx720_debug, debug_680
+    rx720_cur."!cursor_debug"("START", "param_var")
+  debug_680:
     $I10 = self.'from'()
     ne $I10, -1, rxscan724_done
     goto rxscan724_scan
@@ -9240,11 +9957,15 @@
 .annotate 'line', 334
   # rx pass
     rx720_cur."!cursor_pass"(rx720_pos, "param_var")
-    rx720_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx720_pos)
+    if_null rx720_debug, debug_681
+    rx720_cur."!cursor_debug"("PASS", "param_var", " at pos=", rx720_pos)
+  debug_681:
     .return (rx720_cur)
   rx720_restart:
 .annotate 'line', 4
-    rx720_cur."!cursor_debug"("NEXT ", "param_var")
+    if_null rx720_debug, debug_682
+    rx720_cur."!cursor_debug"("NEXT", "param_var")
+  debug_682:
   rx720_fail:
     (rx720_rep, rx720_pos, $I10, $P10) = rx720_cur."!mark_fail"(0)
     lt rx720_pos, -1, rx720_done
@@ -9252,14 +9973,16 @@
     jump $I10
   rx720_done:
     rx720_cur."!cursor_fail"()
-    rx720_cur."!cursor_debug"("FAIL  ", "param_var")
+    if_null rx720_debug, debug_683
+    rx720_cur."!cursor_debug"("FAIL", "param_var")
+  debug_683:
     .return (rx720_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__param_var"  :subid("175_1280467477.44751") :method
+.sub "!PREFIX__param_var"  :subid("175_1282324002.40722") :method
 .annotate 'line', 4
     $P722 = self."!PREFIX__!subrule"("sigil", "")
     new $P723, "ResizablePMCArray"
@@ -9269,7 +9992,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "named_param"  :subid("176_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "named_param"  :subid("176_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx730_tgt
     .local int rx730_pos
@@ -9277,7 +10000,9 @@
     .local int rx730_eos
     .local int rx730_rep
     .local pmc rx730_cur
+    .local pmc rx730_debug
     (rx730_cur, rx730_pos, rx730_tgt, $I10) = self."!cursor_start"()
+    getattribute rx730_debug, rx730_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx730_cur
     .local pmc match
     .lex "$/", match
@@ -9289,7 +10014,9 @@
     substr rx730_tgt, rx730_tgt, rx730_off
   rx730_start:
     eq $I10, 1, rx730_restart
-    rx730_cur."!cursor_debug"("START ", "named_param")
+    if_null rx730_debug, debug_684
+    rx730_cur."!cursor_debug"("START", "named_param")
+  debug_684:
     $I10 = self.'from'()
     ne $I10, -1, rxscan734_done
     goto rxscan734_scan
@@ -9307,8 +10034,8 @@
     add $I11, rx730_pos, 1
     gt $I11, rx730_eos, rx730_fail
     sub $I11, rx730_pos, rx730_off
-    substr $S10, rx730_tgt, $I11, 1
-    ne $S10, ":", rx730_fail
+    ord $I11, rx730_tgt, $I11
+    ne $I11, 58, rx730_fail
     add rx730_pos, 1
   # rx subrule "param_var" subtype=capture negate=
     rx730_cur."!cursor_pos"(rx730_pos)
@@ -9320,11 +10047,15 @@
 .annotate 'line', 339
   # rx pass
     rx730_cur."!cursor_pass"(rx730_pos, "named_param")
-    rx730_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx730_pos)
+    if_null rx730_debug, debug_685
+    rx730_cur."!cursor_debug"("PASS", "named_param", " at pos=", rx730_pos)
+  debug_685:
     .return (rx730_cur)
   rx730_restart:
 .annotate 'line', 4
-    rx730_cur."!cursor_debug"("NEXT ", "named_param")
+    if_null rx730_debug, debug_686
+    rx730_cur."!cursor_debug"("NEXT", "named_param")
+  debug_686:
   rx730_fail:
     (rx730_rep, rx730_pos, $I10, $P10) = rx730_cur."!mark_fail"(0)
     lt rx730_pos, -1, rx730_done
@@ -9332,14 +10063,16 @@
     jump $I10
   rx730_done:
     rx730_cur."!cursor_fail"()
-    rx730_cur."!cursor_debug"("FAIL  ", "named_param")
+    if_null rx730_debug, debug_687
+    rx730_cur."!cursor_debug"("FAIL", "named_param")
+  debug_687:
     .return (rx730_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__named_param"  :subid("177_1280467477.44751") :method
+.sub "!PREFIX__named_param"  :subid("177_1282324002.40722") :method
 .annotate 'line', 4
     $P732 = self."!PREFIX__!subrule"("param_var", ":")
     new $P733, "ResizablePMCArray"
@@ -9349,7 +10082,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "default_value"  :subid("178_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "default_value"  :subid("178_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx736_tgt
     .local int rx736_pos
@@ -9357,7 +10090,9 @@
     .local int rx736_eos
     .local int rx736_rep
     .local pmc rx736_cur
+    .local pmc rx736_debug
     (rx736_cur, rx736_pos, rx736_tgt, $I10) = self."!cursor_start"()
+    getattribute rx736_debug, rx736_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx736_cur
     .local pmc match
     .lex "$/", match
@@ -9369,7 +10104,9 @@
     substr rx736_tgt, rx736_tgt, rx736_off
   rx736_start:
     eq $I10, 1, rx736_restart
-    rx736_cur."!cursor_debug"("START ", "default_value")
+    if_null rx736_debug, debug_688
+    rx736_cur."!cursor_debug"("START", "default_value")
+  debug_688:
     $I10 = self.'from'()
     ne $I10, -1, rxscan740_done
     goto rxscan740_scan
@@ -9392,8 +10129,8 @@
     add $I11, rx736_pos, 1
     gt $I11, rx736_eos, rx736_fail
     sub $I11, rx736_pos, rx736_off
-    substr $S10, rx736_tgt, $I11, 1
-    ne $S10, "=", rx736_fail
+    ord $I11, rx736_tgt, $I11
+    ne $I11, 61, rx736_fail
     add rx736_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx736_cur."!cursor_pos"(rx736_pos)
@@ -9414,11 +10151,15 @@
     rx736_pos = $P10."pos"()
   # rx pass
     rx736_cur."!cursor_pass"(rx736_pos, "default_value")
-    rx736_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx736_pos)
+    if_null rx736_debug, debug_689
+    rx736_cur."!cursor_debug"("PASS", "default_value", " at pos=", rx736_pos)
+  debug_689:
     .return (rx736_cur)
   rx736_restart:
 .annotate 'line', 4
-    rx736_cur."!cursor_debug"("NEXT ", "default_value")
+    if_null rx736_debug, debug_690
+    rx736_cur."!cursor_debug"("NEXT", "default_value")
+  debug_690:
   rx736_fail:
     (rx736_rep, rx736_pos, $I10, $P10) = rx736_cur."!mark_fail"(0)
     lt rx736_pos, -1, rx736_done
@@ -9426,14 +10167,16 @@
     jump $I10
   rx736_done:
     rx736_cur."!cursor_fail"()
-    rx736_cur."!cursor_debug"("FAIL  ", "default_value")
+    if_null rx736_debug, debug_691
+    rx736_cur."!cursor_debug"("FAIL", "default_value")
+  debug_691:
     .return (rx736_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__default_value"  :subid("179_1280467477.44751") :method
+.sub "!PREFIX__default_value"  :subid("179_1282324002.40722") :method
 .annotate 'line', 4
     $P738 = self."!PREFIX__!subrule"("ws", "")
     new $P739, "ResizablePMCArray"
@@ -9443,7 +10186,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "regex_declarator"  :subid("180_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "regex_declarator"  :subid("180_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx745_tgt
     .local int rx745_pos
@@ -9451,8 +10194,10 @@
     .local int rx745_eos
     .local int rx745_rep
     .local pmc rx745_cur
+    .local pmc rx745_debug
     (rx745_cur, rx745_pos, rx745_tgt, $I10) = self."!cursor_start"()
     rx745_cur."!cursor_caparray"("signature")
+    getattribute rx745_debug, rx745_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx745_cur
     .local pmc match
     .lex "$/", match
@@ -9464,7 +10209,9 @@
     substr rx745_tgt, rx745_tgt, rx745_off
   rx745_start:
     eq $I10, 1, rx745_restart
-    rx745_cur."!cursor_debug"("START ", "regex_declarator")
+    if_null rx745_debug, debug_692
+    rx745_cur."!cursor_debug"("START", "regex_declarator")
+  debug_692:
     $I10 = self.'from'()
     ne $I10, -1, rxscan749_done
     goto rxscan749_scan
@@ -9582,8 +10329,8 @@
     add $I11, rx745_pos, 1
     gt $I11, rx745_eos, rx745_fail
     sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 1
-    ne $S10, "{", rx745_fail
+    ord $I11, rx745_tgt, $I11
+    ne $I11, 123, rx745_fail
     add rx745_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx745_cur."!cursor_pos"(rx745_pos)
@@ -9606,8 +10353,8 @@
     add $I11, rx745_pos, 1
     gt $I11, rx745_eos, rx745_fail
     sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 1
-    ne $S10, "}", rx745_fail
+    ord $I11, rx745_tgt, $I11
+    ne $I11, 125, rx745_fail
     add rx745_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
     rx745_cur."!cursor_pos"(rx745_pos)
@@ -9740,8 +10487,8 @@
     add $I11, rx745_pos, 1
     gt $I11, rx745_eos, rx745_fail
     sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 1
-    ne $S10, "(", rx745_fail
+    ord $I11, rx745_tgt, $I11
+    ne $I11, 40, rx745_fail
     add rx745_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx745_cur."!cursor_pos"(rx745_pos)
@@ -9764,8 +10511,8 @@
     add $I11, rx745_pos, 1
     gt $I11, rx745_eos, rx745_fail
     sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 1
-    ne $S10, ")", rx745_fail
+    ord $I11, rx745_tgt, $I11
+    ne $I11, 41, rx745_fail
     add rx745_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx745_cur."!cursor_pos"(rx745_pos)
@@ -9794,8 +10541,8 @@
     add $I11, rx745_pos, 1
     gt $I11, rx745_eos, rx745_fail
     sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 1
-    ne $S10, "{", rx745_fail
+    ord $I11, rx745_tgt, $I11
+    ne $I11, 123, rx745_fail
     add rx745_pos, 1
   # rx subrule "LANG" subtype=capture negate=
     rx745_cur."!cursor_pos"(rx745_pos)
@@ -9808,8 +10555,8 @@
     add $I11, rx745_pos, 1
     gt $I11, rx745_eos, rx745_fail
     sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 1
-    ne $S10, "}", rx745_fail
+    ord $I11, rx745_tgt, $I11
+    ne $I11, 125, rx745_fail
     add rx745_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
     rx745_cur."!cursor_pos"(rx745_pos)
@@ -9830,11 +10577,15 @@
 .annotate 'line', 345
   # rx pass
     rx745_cur."!cursor_pass"(rx745_pos, "regex_declarator")
-    rx745_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx745_pos)
+    if_null rx745_debug, debug_693
+    rx745_cur."!cursor_debug"("PASS", "regex_declarator", " at pos=", rx745_pos)
+  debug_693:
     .return (rx745_cur)
   rx745_restart:
 .annotate 'line', 4
-    rx745_cur."!cursor_debug"("NEXT ", "regex_declarator")
+    if_null rx745_debug, debug_694
+    rx745_cur."!cursor_debug"("NEXT", "regex_declarator")
+  debug_694:
   rx745_fail:
     (rx745_rep, rx745_pos, $I10, $P10) = rx745_cur."!mark_fail"(0)
     lt rx745_pos, -1, rx745_done
@@ -9842,14 +10593,16 @@
     jump $I10
   rx745_done:
     rx745_cur."!cursor_fail"()
-    rx745_cur."!cursor_debug"("FAIL  ", "regex_declarator")
+    if_null rx745_debug, debug_695
+    rx745_cur."!cursor_debug"("FAIL", "regex_declarator")
+  debug_695:
     .return (rx745_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__regex_declarator"  :subid("181_1280467477.44751") :method
+.sub "!PREFIX__regex_declarator"  :subid("181_1282324002.40722") :method
 .annotate 'line', 4
     $P747 = self."!PREFIX__!subrule"("ws", "")
     new $P748, "ResizablePMCArray"
@@ -9859,7 +10612,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "dotty"  :subid("182_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "dotty"  :subid("182_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx782_tgt
     .local int rx782_pos
@@ -9867,8 +10620,10 @@
     .local int rx782_eos
     .local int rx782_rep
     .local pmc rx782_cur
+    .local pmc rx782_debug
     (rx782_cur, rx782_pos, rx782_tgt, $I10) = self."!cursor_start"()
     rx782_cur."!cursor_caparray"("args")
+    getattribute rx782_debug, rx782_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx782_cur
     .local pmc match
     .lex "$/", match
@@ -9880,7 +10635,9 @@
     substr rx782_tgt, rx782_tgt, rx782_off
   rx782_start:
     eq $I10, 1, rx782_restart
-    rx782_cur."!cursor_debug"("START ", "dotty")
+    if_null rx782_debug, debug_696
+    rx782_cur."!cursor_debug"("START", "dotty")
+  debug_696:
     $I10 = self.'from'()
     ne $I10, -1, rxscan786_done
     goto rxscan786_scan
@@ -9898,8 +10655,8 @@
     add $I11, rx782_pos, 1
     gt $I11, rx782_eos, rx782_fail
     sub $I11, rx782_pos, rx782_off
-    substr $S10, rx782_tgt, $I11, 1
-    ne $S10, ".", rx782_fail
+    ord $I11, rx782_tgt, $I11
+    ne $I11, 46, rx782_fail
     add rx782_pos, 1
   alt787_0:
 .annotate 'line', 364
@@ -9977,8 +10734,8 @@
     add $I11, rx782_pos, 1
     gt $I11, rx782_eos, rx782_fail
     sub $I11, rx782_pos, rx782_off
-    substr $S10, rx782_tgt, $I11, 1
-    ne $S10, ":", rx782_fail
+    ord $I11, rx782_tgt, $I11
+    ne $I11, 58, rx782_fail
     add rx782_pos, 1
   # rx charclass s
     ge rx782_pos, rx782_eos, rx782_fail
@@ -10001,11 +10758,15 @@
 .annotate 'line', 362
   # rx pass
     rx782_cur."!cursor_pass"(rx782_pos, "dotty")
-    rx782_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx782_pos)
+    if_null rx782_debug, debug_697
+    rx782_cur."!cursor_debug"("PASS", "dotty", " at pos=", rx782_pos)
+  debug_697:
     .return (rx782_cur)
   rx782_restart:
 .annotate 'line', 4
-    rx782_cur."!cursor_debug"("NEXT ", "dotty")
+    if_null rx782_debug, debug_698
+    rx782_cur."!cursor_debug"("NEXT", "dotty")
+  debug_698:
   rx782_fail:
     (rx782_rep, rx782_pos, $I10, $P10) = rx782_cur."!mark_fail"(0)
     lt rx782_pos, -1, rx782_done
@@ -10013,14 +10774,16 @@
     jump $I10
   rx782_done:
     rx782_cur."!cursor_fail"()
-    rx782_cur."!cursor_debug"("FAIL  ", "dotty")
+    if_null rx782_debug, debug_699
+    rx782_cur."!cursor_debug"("FAIL", "dotty")
+  debug_699:
     .return (rx782_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__dotty"  :subid("183_1280467477.44751") :method
+.sub "!PREFIX__dotty"  :subid("183_1282324002.40722") :method
 .annotate 'line', 4
     $P784 = self."!PREFIX__!subrule"("deflongname", ".")
     new $P785, "ResizablePMCArray"
@@ -10032,7 +10795,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term"  :subid("184_1280467477.44751") :method
+.sub "term"  :subid("184_1282324002.40722") :method
 .annotate 'line', 376
     $P792 = self."!protoregex"("term")
     .return ($P792)
@@ -10040,7 +10803,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term"  :subid("185_1280467477.44751") :method
+.sub "!PREFIX__term"  :subid("185_1282324002.40722") :method
 .annotate 'line', 376
     $P794 = self."!PREFIX__!protoregex"("term")
     .return ($P794)
@@ -10048,7 +10811,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<self>"  :subid("186_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<self>"  :subid("186_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx796_tgt
     .local int rx796_pos
@@ -10056,7 +10819,9 @@
     .local int rx796_eos
     .local int rx796_rep
     .local pmc rx796_cur
+    .local pmc rx796_debug
     (rx796_cur, rx796_pos, rx796_tgt, $I10) = self."!cursor_start"()
+    getattribute rx796_debug, rx796_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx796_cur
     .local pmc match
     .lex "$/", match
@@ -10068,7 +10833,9 @@
     substr rx796_tgt, rx796_tgt, rx796_off
   rx796_start:
     eq $I10, 1, rx796_restart
-    rx796_cur."!cursor_debug"("START ", "term:sym<self>")
+    if_null rx796_debug, debug_700
+    rx796_cur."!cursor_debug"("START", "term:sym<self>")
+  debug_700:
     $I10 = self.'from'()
     ne $I10, -1, rxscan799_done
     goto rxscan799_scan
@@ -10113,11 +10880,15 @@
     unless $I11, rx796_fail
   # rx pass
     rx796_cur."!cursor_pass"(rx796_pos, "term:sym<self>")
-    rx796_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx796_pos)
+    if_null rx796_debug, debug_701
+    rx796_cur."!cursor_debug"("PASS", "term:sym<self>", " at pos=", rx796_pos)
+  debug_701:
     .return (rx796_cur)
   rx796_restart:
 .annotate 'line', 4
-    rx796_cur."!cursor_debug"("NEXT ", "term:sym<self>")
+    if_null rx796_debug, debug_702
+    rx796_cur."!cursor_debug"("NEXT", "term:sym<self>")
+  debug_702:
   rx796_fail:
     (rx796_rep, rx796_pos, $I10, $P10) = rx796_cur."!mark_fail"(0)
     lt rx796_pos, -1, rx796_done
@@ -10125,14 +10896,16 @@
     jump $I10
   rx796_done:
     rx796_cur."!cursor_fail"()
-    rx796_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
+    if_null rx796_debug, debug_703
+    rx796_cur."!cursor_debug"("FAIL", "term:sym<self>")
+  debug_703:
     .return (rx796_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<self>"  :subid("187_1280467477.44751") :method
+.sub "!PREFIX__term:sym<self>"  :subid("187_1282324002.40722") :method
 .annotate 'line', 4
     new $P798, "ResizablePMCArray"
     push $P798, "self"
@@ -10141,7 +10914,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<identifier>"  :subid("188_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<identifier>"  :subid("188_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx802_tgt
     .local int rx802_pos
@@ -10149,7 +10922,9 @@
     .local int rx802_eos
     .local int rx802_rep
     .local pmc rx802_cur
+    .local pmc rx802_debug
     (rx802_cur, rx802_pos, rx802_tgt, $I10) = self."!cursor_start"()
+    getattribute rx802_debug, rx802_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx802_cur
     .local pmc match
     .lex "$/", match
@@ -10161,7 +10936,9 @@
     substr rx802_tgt, rx802_tgt, rx802_off
   rx802_start:
     eq $I10, 1, rx802_restart
-    rx802_cur."!cursor_debug"("START ", "term:sym<identifier>")
+    if_null rx802_debug, debug_704
+    rx802_cur."!cursor_debug"("START", "term:sym<identifier>")
+  debug_704:
     $I10 = self.'from'()
     ne $I10, -1, rxscan806_done
     goto rxscan806_scan
@@ -10198,11 +10975,15 @@
 .annotate 'line', 380
   # rx pass
     rx802_cur."!cursor_pass"(rx802_pos, "term:sym<identifier>")
-    rx802_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx802_pos)
+    if_null rx802_debug, debug_705
+    rx802_cur."!cursor_debug"("PASS", "term:sym<identifier>", " at pos=", rx802_pos)
+  debug_705:
     .return (rx802_cur)
   rx802_restart:
 .annotate 'line', 4
-    rx802_cur."!cursor_debug"("NEXT ", "term:sym<identifier>")
+    if_null rx802_debug, debug_706
+    rx802_cur."!cursor_debug"("NEXT", "term:sym<identifier>")
+  debug_706:
   rx802_fail:
     (rx802_rep, rx802_pos, $I10, $P10) = rx802_cur."!mark_fail"(0)
     lt rx802_pos, -1, rx802_done
@@ -10210,14 +10991,16 @@
     jump $I10
   rx802_done:
     rx802_cur."!cursor_fail"()
-    rx802_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
+    if_null rx802_debug, debug_707
+    rx802_cur."!cursor_debug"("FAIL", "term:sym<identifier>")
+  debug_707:
     .return (rx802_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<identifier>"  :subid("189_1280467477.44751") :method
+.sub "!PREFIX__term:sym<identifier>"  :subid("189_1282324002.40722") :method
 .annotate 'line', 4
     $P804 = self."!PREFIX__!subrule"("deflongname", "")
     new $P805, "ResizablePMCArray"
@@ -10227,7 +11010,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<name>"  :subid("190_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<name>"  :subid("190_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx808_tgt
     .local int rx808_pos
@@ -10235,8 +11018,10 @@
     .local int rx808_eos
     .local int rx808_rep
     .local pmc rx808_cur
+    .local pmc rx808_debug
     (rx808_cur, rx808_pos, rx808_tgt, $I10) = self."!cursor_start"()
     rx808_cur."!cursor_caparray"("args")
+    getattribute rx808_debug, rx808_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx808_cur
     .local pmc match
     .lex "$/", match
@@ -10248,7 +11033,9 @@
     substr rx808_tgt, rx808_tgt, rx808_off
   rx808_start:
     eq $I10, 1, rx808_restart
-    rx808_cur."!cursor_debug"("START ", "term:sym<name>")
+    if_null rx808_debug, debug_708
+    rx808_cur."!cursor_debug"("START", "term:sym<name>")
+  debug_708:
     $I10 = self.'from'()
     ne $I10, -1, rxscan812_done
     goto rxscan812_scan
@@ -10292,11 +11079,15 @@
 .annotate 'line', 384
   # rx pass
     rx808_cur."!cursor_pass"(rx808_pos, "term:sym<name>")
-    rx808_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx808_pos)
+    if_null rx808_debug, debug_709
+    rx808_cur."!cursor_debug"("PASS", "term:sym<name>", " at pos=", rx808_pos)
+  debug_709:
     .return (rx808_cur)
   rx808_restart:
 .annotate 'line', 4
-    rx808_cur."!cursor_debug"("NEXT ", "term:sym<name>")
+    if_null rx808_debug, debug_710
+    rx808_cur."!cursor_debug"("NEXT", "term:sym<name>")
+  debug_710:
   rx808_fail:
     (rx808_rep, rx808_pos, $I10, $P10) = rx808_cur."!mark_fail"(0)
     lt rx808_pos, -1, rx808_done
@@ -10304,14 +11095,16 @@
     jump $I10
   rx808_done:
     rx808_cur."!cursor_fail"()
-    rx808_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
+    if_null rx808_debug, debug_711
+    rx808_cur."!cursor_debug"("FAIL", "term:sym<name>")
+  debug_711:
     .return (rx808_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<name>"  :subid("191_1280467477.44751") :method
+.sub "!PREFIX__term:sym<name>"  :subid("191_1282324002.40722") :method
 .annotate 'line', 4
     $P810 = self."!PREFIX__!subrule"("name", "")
     new $P811, "ResizablePMCArray"
@@ -10321,7 +11114,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<pir::op>"  :subid("192_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<pir::op>"  :subid("192_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx816_tgt
     .local int rx816_pos
@@ -10329,8 +11122,10 @@
     .local int rx816_eos
     .local int rx816_rep
     .local pmc rx816_cur
+    .local pmc rx816_debug
     (rx816_cur, rx816_pos, rx816_tgt, $I10) = self."!cursor_start"()
     rx816_cur."!cursor_caparray"("args")
+    getattribute rx816_debug, rx816_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx816_cur
     .local pmc match
     .lex "$/", match
@@ -10342,7 +11137,9 @@
     substr rx816_tgt, rx816_tgt, rx816_off
   rx816_start:
     eq $I10, 1, rx816_restart
-    rx816_cur."!cursor_debug"("START ", "term:sym<pir::op>")
+    if_null rx816_debug, debug_712
+    rx816_cur."!cursor_debug"("START", "term:sym<pir::op>")
+  debug_712:
     $I10 = self.'from'()
     ne $I10, -1, rxscan819_done
     goto rxscan819_scan
@@ -10406,11 +11203,15 @@
 .annotate 'line', 388
   # rx pass
     rx816_cur."!cursor_pass"(rx816_pos, "term:sym<pir::op>")
-    rx816_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx816_pos)
+    if_null rx816_debug, debug_713
+    rx816_cur."!cursor_debug"("PASS", "term:sym<pir::op>", " at pos=", rx816_pos)
+  debug_713:
     .return (rx816_cur)
   rx816_restart:
 .annotate 'line', 4
-    rx816_cur."!cursor_debug"("NEXT ", "term:sym<pir::op>")
+    if_null rx816_debug, debug_714
+    rx816_cur."!cursor_debug"("NEXT", "term:sym<pir::op>")
+  debug_714:
   rx816_fail:
     (rx816_rep, rx816_pos, $I10, $P10) = rx816_cur."!mark_fail"(0)
     lt rx816_pos, -1, rx816_done
@@ -10418,14 +11219,16 @@
     jump $I10
   rx816_done:
     rx816_cur."!cursor_fail"()
-    rx816_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
+    if_null rx816_debug, debug_715
+    rx816_cur."!cursor_debug"("FAIL", "term:sym<pir::op>")
+  debug_715:
     .return (rx816_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<pir::op>"  :subid("193_1280467477.44751") :method
+.sub "!PREFIX__term:sym<pir::op>"  :subid("193_1282324002.40722") :method
 .annotate 'line', 4
     new $P818, "ResizablePMCArray"
     push $P818, "pir::"
@@ -10434,7 +11237,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "args"  :subid("194_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "args"  :subid("194_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx824_tgt
     .local int rx824_pos
@@ -10442,7 +11245,9 @@
     .local int rx824_eos
     .local int rx824_rep
     .local pmc rx824_cur
+    .local pmc rx824_debug
     (rx824_cur, rx824_pos, rx824_tgt, $I10) = self."!cursor_start"()
+    getattribute rx824_debug, rx824_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx824_cur
     .local pmc match
     .lex "$/", match
@@ -10454,7 +11259,9 @@
     substr rx824_tgt, rx824_tgt, rx824_off
   rx824_start:
     eq $I10, 1, rx824_restart
-    rx824_cur."!cursor_debug"("START ", "args")
+    if_null rx824_debug, debug_716
+    rx824_cur."!cursor_debug"("START", "args")
+  debug_716:
     $I10 = self.'from'()
     ne $I10, -1, rxscan828_done
     goto rxscan828_scan
@@ -10472,8 +11279,8 @@
     add $I11, rx824_pos, 1
     gt $I11, rx824_eos, rx824_fail
     sub $I11, rx824_pos, rx824_off
-    substr $S10, rx824_tgt, $I11, 1
-    ne $S10, "(", rx824_fail
+    ord $I11, rx824_tgt, $I11
+    ne $I11, 40, rx824_fail
     add rx824_pos, 1
   # rx subrule "arglist" subtype=capture negate=
     rx824_cur."!cursor_pos"(rx824_pos)
@@ -10486,16 +11293,20 @@
     add $I11, rx824_pos, 1
     gt $I11, rx824_eos, rx824_fail
     sub $I11, rx824_pos, rx824_off
-    substr $S10, rx824_tgt, $I11, 1
-    ne $S10, ")", rx824_fail
+    ord $I11, rx824_tgt, $I11
+    ne $I11, 41, rx824_fail
     add rx824_pos, 1
   # rx pass
     rx824_cur."!cursor_pass"(rx824_pos, "args")
-    rx824_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx824_pos)
+    if_null rx824_debug, debug_717
+    rx824_cur."!cursor_debug"("PASS", "args", " at pos=", rx824_pos)
+  debug_717:
     .return (rx824_cur)
   rx824_restart:
 .annotate 'line', 4
-    rx824_cur."!cursor_debug"("NEXT ", "args")
+    if_null rx824_debug, debug_718
+    rx824_cur."!cursor_debug"("NEXT", "args")
+  debug_718:
   rx824_fail:
     (rx824_rep, rx824_pos, $I10, $P10) = rx824_cur."!mark_fail"(0)
     lt rx824_pos, -1, rx824_done
@@ -10503,14 +11314,16 @@
     jump $I10
   rx824_done:
     rx824_cur."!cursor_fail"()
-    rx824_cur."!cursor_debug"("FAIL  ", "args")
+    if_null rx824_debug, debug_719
+    rx824_cur."!cursor_debug"("FAIL", "args")
+  debug_719:
     .return (rx824_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__args"  :subid("195_1280467477.44751") :method
+.sub "!PREFIX__args"  :subid("195_1282324002.40722") :method
 .annotate 'line', 4
     $P826 = self."!PREFIX__!subrule"("arglist", "(")
     new $P827, "ResizablePMCArray"
@@ -10520,7 +11333,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "arglist"  :subid("196_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "arglist"  :subid("196_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx830_tgt
     .local int rx830_pos
@@ -10528,7 +11341,9 @@
     .local int rx830_eos
     .local int rx830_rep
     .local pmc rx830_cur
+    .local pmc rx830_debug
     (rx830_cur, rx830_pos, rx830_tgt, $I10) = self."!cursor_start"()
+    getattribute rx830_debug, rx830_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx830_cur
     .local pmc match
     .lex "$/", match
@@ -10540,7 +11355,9 @@
     substr rx830_tgt, rx830_tgt, rx830_off
   rx830_start:
     eq $I10, 1, rx830_restart
-    rx830_cur."!cursor_debug"("START ", "arglist")
+    if_null rx830_debug, debug_720
+    rx830_cur."!cursor_debug"("START", "arglist")
+  debug_720:
     $I10 = self.'from'()
     ne $I10, -1, rxscan834_done
     goto rxscan834_scan
@@ -10577,11 +11394,15 @@
 .annotate 'line', 396
   # rx pass
     rx830_cur."!cursor_pass"(rx830_pos, "arglist")
-    rx830_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx830_pos)
+    if_null rx830_debug, debug_721
+    rx830_cur."!cursor_debug"("PASS", "arglist", " at pos=", rx830_pos)
+  debug_721:
     .return (rx830_cur)
   rx830_restart:
 .annotate 'line', 4
-    rx830_cur."!cursor_debug"("NEXT ", "arglist")
+    if_null rx830_debug, debug_722
+    rx830_cur."!cursor_debug"("NEXT", "arglist")
+  debug_722:
   rx830_fail:
     (rx830_rep, rx830_pos, $I10, $P10) = rx830_cur."!mark_fail"(0)
     lt rx830_pos, -1, rx830_done
@@ -10589,14 +11410,16 @@
     jump $I10
   rx830_done:
     rx830_cur."!cursor_fail"()
-    rx830_cur."!cursor_debug"("FAIL  ", "arglist")
+    if_null rx830_debug, debug_723
+    rx830_cur."!cursor_debug"("FAIL", "arglist")
+  debug_723:
     .return (rx830_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("197_1280467477.44751") :method
+.sub "!PREFIX__arglist"  :subid("197_1282324002.40722") :method
 .annotate 'line', 4
     $P832 = self."!PREFIX__!subrule"("ws", "")
     new $P833, "ResizablePMCArray"
@@ -10606,7 +11429,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<value>"  :subid("198_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<value>"  :subid("198_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx837_tgt
     .local int rx837_pos
@@ -10614,7 +11437,9 @@
     .local int rx837_eos
     .local int rx837_rep
     .local pmc rx837_cur
+    .local pmc rx837_debug
     (rx837_cur, rx837_pos, rx837_tgt, $I10) = self."!cursor_start"()
+    getattribute rx837_debug, rx837_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx837_cur
     .local pmc match
     .lex "$/", match
@@ -10626,7 +11451,9 @@
     substr rx837_tgt, rx837_tgt, rx837_off
   rx837_start:
     eq $I10, 1, rx837_restart
-    rx837_cur."!cursor_debug"("START ", "term:sym<value>")
+    if_null rx837_debug, debug_724
+    rx837_cur."!cursor_debug"("START", "term:sym<value>")
+  debug_724:
     $I10 = self.'from'()
     ne $I10, -1, rxscan841_done
     goto rxscan841_scan
@@ -10649,11 +11476,15 @@
     rx837_pos = $P10."pos"()
   # rx pass
     rx837_cur."!cursor_pass"(rx837_pos, "term:sym<value>")
-    rx837_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx837_pos)
+    if_null rx837_debug, debug_725
+    rx837_cur."!cursor_debug"("PASS", "term:sym<value>", " at pos=", rx837_pos)
+  debug_725:
     .return (rx837_cur)
   rx837_restart:
 .annotate 'line', 4
-    rx837_cur."!cursor_debug"("NEXT ", "term:sym<value>")
+    if_null rx837_debug, debug_726
+    rx837_cur."!cursor_debug"("NEXT", "term:sym<value>")
+  debug_726:
   rx837_fail:
     (rx837_rep, rx837_pos, $I10, $P10) = rx837_cur."!mark_fail"(0)
     lt rx837_pos, -1, rx837_done
@@ -10661,14 +11492,16 @@
     jump $I10
   rx837_done:
     rx837_cur."!cursor_fail"()
-    rx837_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
+    if_null rx837_debug, debug_727
+    rx837_cur."!cursor_debug"("FAIL", "term:sym<value>")
+  debug_727:
     .return (rx837_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<value>"  :subid("199_1280467477.44751") :method
+.sub "!PREFIX__term:sym<value>"  :subid("199_1282324002.40722") :method
 .annotate 'line', 4
     $P839 = self."!PREFIX__!subrule"("value", "")
     new $P840, "ResizablePMCArray"
@@ -10678,7 +11511,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "value"  :subid("200_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "value"  :subid("200_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx843_tgt
     .local int rx843_pos
@@ -10686,7 +11519,9 @@
     .local int rx843_eos
     .local int rx843_rep
     .local pmc rx843_cur
+    .local pmc rx843_debug
     (rx843_cur, rx843_pos, rx843_tgt, $I10) = self."!cursor_start"()
+    getattribute rx843_debug, rx843_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx843_cur
     .local pmc match
     .lex "$/", match
@@ -10698,7 +11533,9 @@
     substr rx843_tgt, rx843_tgt, rx843_off
   rx843_start:
     eq $I10, 1, rx843_restart
-    rx843_cur."!cursor_debug"("START ", "value")
+    if_null rx843_debug, debug_728
+    rx843_cur."!cursor_debug"("START", "value")
+  debug_728:
     $I10 = self.'from'()
     ne $I10, -1, rxscan848_done
     goto rxscan848_scan
@@ -10737,11 +11574,15 @@
 .annotate 'line', 407
   # rx pass
     rx843_cur."!cursor_pass"(rx843_pos, "value")
-    rx843_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx843_pos)
+    if_null rx843_debug, debug_729
+    rx843_cur."!cursor_debug"("PASS", "value", " at pos=", rx843_pos)
+  debug_729:
     .return (rx843_cur)
   rx843_restart:
 .annotate 'line', 4
-    rx843_cur."!cursor_debug"("NEXT ", "value")
+    if_null rx843_debug, debug_730
+    rx843_cur."!cursor_debug"("NEXT", "value")
+  debug_730:
   rx843_fail:
     (rx843_rep, rx843_pos, $I10, $P10) = rx843_cur."!mark_fail"(0)
     lt rx843_pos, -1, rx843_done
@@ -10749,14 +11590,16 @@
     jump $I10
   rx843_done:
     rx843_cur."!cursor_fail"()
-    rx843_cur."!cursor_debug"("FAIL  ", "value")
+    if_null rx843_debug, debug_731
+    rx843_cur."!cursor_debug"("FAIL", "value")
+  debug_731:
     .return (rx843_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__value"  :subid("201_1280467477.44751") :method
+.sub "!PREFIX__value"  :subid("201_1282324002.40722") :method
 .annotate 'line', 4
     $P845 = self."!PREFIX__!subrule"("number", "")
     $P846 = self."!PREFIX__!subrule"("quote", "")
@@ -10768,7 +11611,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "number"  :subid("202_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "number"  :subid("202_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx851_tgt
     .local int rx851_pos
@@ -10776,7 +11619,9 @@
     .local int rx851_eos
     .local int rx851_rep
     .local pmc rx851_cur
+    .local pmc rx851_debug
     (rx851_cur, rx851_pos, rx851_tgt, $I10) = self."!cursor_start"()
+    getattribute rx851_debug, rx851_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx851_cur
     .local pmc match
     .lex "$/", match
@@ -10788,7 +11633,9 @@
     substr rx851_tgt, rx851_tgt, rx851_off
   rx851_start:
     eq $I10, 1, rx851_restart
-    rx851_cur."!cursor_debug"("START ", "number")
+    if_null rx851_debug, debug_732
+    rx851_cur."!cursor_debug"("START", "number")
+  debug_732:
     $I10 = self.'from'()
     ne $I10, -1, rxscan854_done
     goto rxscan854_scan
@@ -10805,20 +11652,20 @@
   # rx subcapture "sign"
     set_addr $I10, rxcap_856_fail
     rx851_cur."!mark_push"(0, rx851_pos, $I10)
-  # rx rxquantr855 ** 0..1
-    set_addr $I10, rxquantr855_done
-    rx851_cur."!mark_push"(0, rx851_pos, $I10)
-  rxquantr855_loop:
-  # rx enumcharlist negate=0 
-    ge rx851_pos, rx851_eos, rx851_fail
+  # rx enumcharlist_q negate=0  r 0..1
     sub $I10, rx851_pos, rx851_off
+    set rx851_rep, 0
+    sub $I12, rx851_eos, rx851_pos
+    le $I12, 1, rxenumcharlistq855_loop
+    set $I12, 1
+  rxenumcharlistq855_loop:
+    le $I12, 0, rxenumcharlistq855_done
     substr $S10, rx851_tgt, $I10, 1
     index $I11, "+-", $S10
-    lt $I11, 0, rx851_fail
-    inc rx851_pos
-    set_addr $I10, rxquantr855_done
-    (rx851_rep) = rx851_cur."!mark_commit"($I10)
-  rxquantr855_done:
+    lt $I11, 0, rxenumcharlistq855_done
+    inc rx851_rep
+  rxenumcharlistq855_done:
+    add rx851_pos, rx851_pos, rx851_rep
     set_addr $I10, rxcap_856_fail
     ($I12, $I11) = rx851_cur."!mark_peek"($I10)
     rx851_cur."!cursor_pos"($I11)
@@ -10854,11 +11701,15 @@
 .annotate 'line', 412
   # rx pass
     rx851_cur."!cursor_pass"(rx851_pos, "number")
-    rx851_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx851_pos)
+    if_null rx851_debug, debug_733
+    rx851_cur."!cursor_debug"("PASS", "number", " at pos=", rx851_pos)
+  debug_733:
     .return (rx851_cur)
   rx851_restart:
 .annotate 'line', 4
-    rx851_cur."!cursor_debug"("NEXT ", "number")
+    if_null rx851_debug, debug_734
+    rx851_cur."!cursor_debug"("NEXT", "number")
+  debug_734:
   rx851_fail:
     (rx851_rep, rx851_pos, $I10, $P10) = rx851_cur."!mark_fail"(0)
     lt rx851_pos, -1, rx851_done
@@ -10866,14 +11717,16 @@
     jump $I10
   rx851_done:
     rx851_cur."!cursor_fail"()
-    rx851_cur."!cursor_debug"("FAIL  ", "number")
+    if_null rx851_debug, debug_735
+    rx851_cur."!cursor_debug"("FAIL", "number")
+  debug_735:
     .return (rx851_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__number"  :subid("203_1280467477.44751") :method
+.sub "!PREFIX__number"  :subid("203_1282324002.40722") :method
 .annotate 'line', 4
     new $P853, "ResizablePMCArray"
     push $P853, ""
@@ -10882,7 +11735,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote"  :subid("204_1280467477.44751") :method
+.sub "quote"  :subid("204_1282324002.40722") :method
 .annotate 'line', 417
     $P859 = self."!protoregex"("quote")
     .return ($P859)
@@ -10890,7 +11743,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote"  :subid("205_1280467477.44751") :method
+.sub "!PREFIX__quote"  :subid("205_1282324002.40722") :method
 .annotate 'line', 417
     $P861 = self."!PREFIX__!protoregex"("quote")
     .return ($P861)
@@ -10898,7 +11751,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<apos>"  :subid("206_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote:sym<apos>"  :subid("206_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx863_tgt
     .local int rx863_pos
@@ -10906,7 +11759,9 @@
     .local int rx863_eos
     .local int rx863_rep
     .local pmc rx863_cur
+    .local pmc rx863_debug
     (rx863_cur, rx863_pos, rx863_tgt, $I10) = self."!cursor_start"()
+    getattribute rx863_debug, rx863_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx863_cur
     .local pmc match
     .lex "$/", match
@@ -10918,7 +11773,9 @@
     substr rx863_tgt, rx863_tgt, rx863_off
   rx863_start:
     eq $I10, 1, rx863_restart
-    rx863_cur."!cursor_debug"("START ", "quote:sym<apos>")
+    if_null rx863_debug, debug_736
+    rx863_cur."!cursor_debug"("START", "quote:sym<apos>")
+  debug_736:
     $I10 = self.'from'()
     ne $I10, -1, rxscan866_done
     goto rxscan866_scan
@@ -10947,11 +11804,15 @@
     rx863_pos = $P10."pos"()
   # rx pass
     rx863_cur."!cursor_pass"(rx863_pos, "quote:sym<apos>")
-    rx863_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx863_pos)
+    if_null rx863_debug, debug_737
+    rx863_cur."!cursor_debug"("PASS", "quote:sym<apos>", " at pos=", rx863_pos)
+  debug_737:
     .return (rx863_cur)
   rx863_restart:
 .annotate 'line', 4
-    rx863_cur."!cursor_debug"("NEXT ", "quote:sym<apos>")
+    if_null rx863_debug, debug_738
+    rx863_cur."!cursor_debug"("NEXT", "quote:sym<apos>")
+  debug_738:
   rx863_fail:
     (rx863_rep, rx863_pos, $I10, $P10) = rx863_cur."!mark_fail"(0)
     lt rx863_pos, -1, rx863_done
@@ -10959,14 +11820,16 @@
     jump $I10
   rx863_done:
     rx863_cur."!cursor_fail"()
-    rx863_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
+    if_null rx863_debug, debug_739
+    rx863_cur."!cursor_debug"("FAIL", "quote:sym<apos>")
+  debug_739:
     .return (rx863_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<apos>"  :subid("207_1280467477.44751") :method
+.sub "!PREFIX__quote:sym<apos>"  :subid("207_1282324002.40722") :method
 .annotate 'line', 4
     new $P865, "ResizablePMCArray"
     push $P865, "'"
@@ -10975,7 +11838,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<dblq>"  :subid("208_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote:sym<dblq>"  :subid("208_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx868_tgt
     .local int rx868_pos
@@ -10983,7 +11846,9 @@
     .local int rx868_eos
     .local int rx868_rep
     .local pmc rx868_cur
+    .local pmc rx868_debug
     (rx868_cur, rx868_pos, rx868_tgt, $I10) = self."!cursor_start"()
+    getattribute rx868_debug, rx868_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx868_cur
     .local pmc match
     .lex "$/", match
@@ -10995,7 +11860,9 @@
     substr rx868_tgt, rx868_tgt, rx868_off
   rx868_start:
     eq $I10, 1, rx868_restart
-    rx868_cur."!cursor_debug"("START ", "quote:sym<dblq>")
+    if_null rx868_debug, debug_740
+    rx868_cur."!cursor_debug"("START", "quote:sym<dblq>")
+  debug_740:
     $I10 = self.'from'()
     ne $I10, -1, rxscan871_done
     goto rxscan871_scan
@@ -11024,11 +11891,15 @@
     rx868_pos = $P10."pos"()
   # rx pass
     rx868_cur."!cursor_pass"(rx868_pos, "quote:sym<dblq>")
-    rx868_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx868_pos)
+    if_null rx868_debug, debug_741
+    rx868_cur."!cursor_debug"("PASS", "quote:sym<dblq>", " at pos=", rx868_pos)
+  debug_741:
     .return (rx868_cur)
   rx868_restart:
 .annotate 'line', 4
-    rx868_cur."!cursor_debug"("NEXT ", "quote:sym<dblq>")
+    if_null rx868_debug, debug_742
+    rx868_cur."!cursor_debug"("NEXT", "quote:sym<dblq>")
+  debug_742:
   rx868_fail:
     (rx868_rep, rx868_pos, $I10, $P10) = rx868_cur."!mark_fail"(0)
     lt rx868_pos, -1, rx868_done
@@ -11036,14 +11907,16 @@
     jump $I10
   rx868_done:
     rx868_cur."!cursor_fail"()
-    rx868_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
+    if_null rx868_debug, debug_743
+    rx868_cur."!cursor_debug"("FAIL", "quote:sym<dblq>")
+  debug_743:
     .return (rx868_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<dblq>"  :subid("209_1280467477.44751") :method
+.sub "!PREFIX__quote:sym<dblq>"  :subid("209_1282324002.40722") :method
 .annotate 'line', 4
     new $P870, "ResizablePMCArray"
     push $P870, "\""
@@ -11052,7 +11925,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<q>"  :subid("210_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote:sym<q>"  :subid("210_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx873_tgt
     .local int rx873_pos
@@ -11060,7 +11933,9 @@
     .local int rx873_eos
     .local int rx873_rep
     .local pmc rx873_cur
+    .local pmc rx873_debug
     (rx873_cur, rx873_pos, rx873_tgt, $I10) = self."!cursor_start"()
+    getattribute rx873_debug, rx873_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx873_cur
     .local pmc match
     .lex "$/", match
@@ -11072,7 +11947,9 @@
     substr rx873_tgt, rx873_tgt, rx873_off
   rx873_start:
     eq $I10, 1, rx873_restart
-    rx873_cur."!cursor_debug"("START ", "quote:sym<q>")
+    if_null rx873_debug, debug_744
+    rx873_cur."!cursor_debug"("START", "quote:sym<q>")
+  debug_744:
     $I10 = self.'from'()
     ne $I10, -1, rxscan877_done
     goto rxscan877_scan
@@ -11090,8 +11967,8 @@
     add $I11, rx873_pos, 1
     gt $I11, rx873_eos, rx873_fail
     sub $I11, rx873_pos, rx873_off
-    substr $S10, rx873_tgt, $I11, 1
-    ne $S10, "q", rx873_fail
+    ord $I11, rx873_tgt, $I11
+    ne $I11, 113, rx873_fail
     add rx873_pos, 1
   # rxanchor rwb
     le rx873_pos, 0, rx873_fail
@@ -11121,11 +11998,15 @@
     rx873_pos = $P10."pos"()
   # rx pass
     rx873_cur."!cursor_pass"(rx873_pos, "quote:sym<q>")
-    rx873_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx873_pos)
+    if_null rx873_debug, debug_745
+    rx873_cur."!cursor_debug"("PASS", "quote:sym<q>", " at pos=", rx873_pos)
+  debug_745:
     .return (rx873_cur)
   rx873_restart:
 .annotate 'line', 4
-    rx873_cur."!cursor_debug"("NEXT ", "quote:sym<q>")
+    if_null rx873_debug, debug_746
+    rx873_cur."!cursor_debug"("NEXT", "quote:sym<q>")
+  debug_746:
   rx873_fail:
     (rx873_rep, rx873_pos, $I10, $P10) = rx873_cur."!mark_fail"(0)
     lt rx873_pos, -1, rx873_done
@@ -11133,14 +12014,16 @@
     jump $I10
   rx873_done:
     rx873_cur."!cursor_fail"()
-    rx873_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
+    if_null rx873_debug, debug_747
+    rx873_cur."!cursor_debug"("FAIL", "quote:sym<q>")
+  debug_747:
     .return (rx873_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<q>"  :subid("211_1280467477.44751") :method
+.sub "!PREFIX__quote:sym<q>"  :subid("211_1282324002.40722") :method
 .annotate 'line', 4
     $P875 = self."!PREFIX__!subrule"("ws", "q")
     new $P876, "ResizablePMCArray"
@@ -11150,7 +12033,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<qq>"  :subid("212_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote:sym<qq>"  :subid("212_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx879_tgt
     .local int rx879_pos
@@ -11158,7 +12041,9 @@
     .local int rx879_eos
     .local int rx879_rep
     .local pmc rx879_cur
+    .local pmc rx879_debug
     (rx879_cur, rx879_pos, rx879_tgt, $I10) = self."!cursor_start"()
+    getattribute rx879_debug, rx879_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx879_cur
     .local pmc match
     .lex "$/", match
@@ -11170,7 +12055,9 @@
     substr rx879_tgt, rx879_tgt, rx879_off
   rx879_start:
     eq $I10, 1, rx879_restart
-    rx879_cur."!cursor_debug"("START ", "quote:sym<qq>")
+    if_null rx879_debug, debug_748
+    rx879_cur."!cursor_debug"("START", "quote:sym<qq>")
+  debug_748:
     $I10 = self.'from'()
     ne $I10, -1, rxscan883_done
     goto rxscan883_scan
@@ -11219,11 +12106,15 @@
     rx879_pos = $P10."pos"()
   # rx pass
     rx879_cur."!cursor_pass"(rx879_pos, "quote:sym<qq>")
-    rx879_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx879_pos)
+    if_null rx879_debug, debug_749
+    rx879_cur."!cursor_debug"("PASS", "quote:sym<qq>", " at pos=", rx879_pos)
+  debug_749:
     .return (rx879_cur)
   rx879_restart:
 .annotate 'line', 4
-    rx879_cur."!cursor_debug"("NEXT ", "quote:sym<qq>")
+    if_null rx879_debug, debug_750
+    rx879_cur."!cursor_debug"("NEXT", "quote:sym<qq>")
+  debug_750:
   rx879_fail:
     (rx879_rep, rx879_pos, $I10, $P10) = rx879_cur."!mark_fail"(0)
     lt rx879_pos, -1, rx879_done
@@ -11231,14 +12122,16 @@
     jump $I10
   rx879_done:
     rx879_cur."!cursor_fail"()
-    rx879_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
+    if_null rx879_debug, debug_751
+    rx879_cur."!cursor_debug"("FAIL", "quote:sym<qq>")
+  debug_751:
     .return (rx879_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<qq>"  :subid("213_1280467477.44751") :method
+.sub "!PREFIX__quote:sym<qq>"  :subid("213_1282324002.40722") :method
 .annotate 'line', 4
     $P881 = self."!PREFIX__!subrule"("ws", "qq")
     new $P882, "ResizablePMCArray"
@@ -11248,7 +12141,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q>"  :subid("214_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote:sym<Q>"  :subid("214_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx885_tgt
     .local int rx885_pos
@@ -11256,7 +12149,9 @@
     .local int rx885_eos
     .local int rx885_rep
     .local pmc rx885_cur
+    .local pmc rx885_debug
     (rx885_cur, rx885_pos, rx885_tgt, $I10) = self."!cursor_start"()
+    getattribute rx885_debug, rx885_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx885_cur
     .local pmc match
     .lex "$/", match
@@ -11268,7 +12163,9 @@
     substr rx885_tgt, rx885_tgt, rx885_off
   rx885_start:
     eq $I10, 1, rx885_restart
-    rx885_cur."!cursor_debug"("START ", "quote:sym<Q>")
+    if_null rx885_debug, debug_752
+    rx885_cur."!cursor_debug"("START", "quote:sym<Q>")
+  debug_752:
     $I10 = self.'from'()
     ne $I10, -1, rxscan889_done
     goto rxscan889_scan
@@ -11286,8 +12183,8 @@
     add $I11, rx885_pos, 1
     gt $I11, rx885_eos, rx885_fail
     sub $I11, rx885_pos, rx885_off
-    substr $S10, rx885_tgt, $I11, 1
-    ne $S10, "Q", rx885_fail
+    ord $I11, rx885_tgt, $I11
+    ne $I11, 81, rx885_fail
     add rx885_pos, 1
   # rxanchor rwb
     le rx885_pos, 0, rx885_fail
@@ -11317,11 +12214,15 @@
     rx885_pos = $P10."pos"()
   # rx pass
     rx885_cur."!cursor_pass"(rx885_pos, "quote:sym<Q>")
-    rx885_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx885_pos)
+    if_null rx885_debug, debug_753
+    rx885_cur."!cursor_debug"("PASS", "quote:sym<Q>", " at pos=", rx885_pos)
+  debug_753:
     .return (rx885_cur)
   rx885_restart:
 .annotate 'line', 4
-    rx885_cur."!cursor_debug"("NEXT ", "quote:sym<Q>")
+    if_null rx885_debug, debug_754
+    rx885_cur."!cursor_debug"("NEXT", "quote:sym<Q>")
+  debug_754:
   rx885_fail:
     (rx885_rep, rx885_pos, $I10, $P10) = rx885_cur."!mark_fail"(0)
     lt rx885_pos, -1, rx885_done
@@ -11329,14 +12230,16 @@
     jump $I10
   rx885_done:
     rx885_cur."!cursor_fail"()
-    rx885_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
+    if_null rx885_debug, debug_755
+    rx885_cur."!cursor_debug"("FAIL", "quote:sym<Q>")
+  debug_755:
     .return (rx885_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q>"  :subid("215_1280467477.44751") :method
+.sub "!PREFIX__quote:sym<Q>"  :subid("215_1282324002.40722") :method
 .annotate 'line', 4
     $P887 = self."!PREFIX__!subrule"("ws", "Q")
     new $P888, "ResizablePMCArray"
@@ -11346,7 +12249,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q:PIR>"  :subid("216_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote:sym<Q:PIR>"  :subid("216_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx891_tgt
     .local int rx891_pos
@@ -11354,7 +12257,9 @@
     .local int rx891_eos
     .local int rx891_rep
     .local pmc rx891_cur
+    .local pmc rx891_debug
     (rx891_cur, rx891_pos, rx891_tgt, $I10) = self."!cursor_start"()
+    getattribute rx891_debug, rx891_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx891_cur
     .local pmc match
     .lex "$/", match
@@ -11366,7 +12271,9 @@
     substr rx891_tgt, rx891_tgt, rx891_off
   rx891_start:
     eq $I10, 1, rx891_restart
-    rx891_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
+    if_null rx891_debug, debug_756
+    rx891_cur."!cursor_debug"("START", "quote:sym<Q:PIR>")
+  debug_756:
     $I10 = self.'from'()
     ne $I10, -1, rxscan895_done
     goto rxscan895_scan
@@ -11401,11 +12308,15 @@
     rx891_pos = $P10."pos"()
   # rx pass
     rx891_cur."!cursor_pass"(rx891_pos, "quote:sym<Q:PIR>")
-    rx891_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx891_pos)
+    if_null rx891_debug, debug_757
+    rx891_cur."!cursor_debug"("PASS", "quote:sym<Q:PIR>", " at pos=", rx891_pos)
+  debug_757:
     .return (rx891_cur)
   rx891_restart:
 .annotate 'line', 4
-    rx891_cur."!cursor_debug"("NEXT ", "quote:sym<Q:PIR>")
+    if_null rx891_debug, debug_758
+    rx891_cur."!cursor_debug"("NEXT", "quote:sym<Q:PIR>")
+  debug_758:
   rx891_fail:
     (rx891_rep, rx891_pos, $I10, $P10) = rx891_cur."!mark_fail"(0)
     lt rx891_pos, -1, rx891_done
@@ -11413,14 +12324,16 @@
     jump $I10
   rx891_done:
     rx891_cur."!cursor_fail"()
-    rx891_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
+    if_null rx891_debug, debug_759
+    rx891_cur."!cursor_debug"("FAIL", "quote:sym<Q:PIR>")
+  debug_759:
     .return (rx891_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("217_1280467477.44751") :method
+.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("217_1282324002.40722") :method
 .annotate 'line', 4
     $P893 = self."!PREFIX__!subrule"("ws", "Q:PIR")
     new $P894, "ResizablePMCArray"
@@ -11430,7 +12343,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym</ />"  :subid("218_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote:sym</ />"  :subid("218_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx897_tgt
     .local int rx897_pos
@@ -11438,7 +12351,9 @@
     .local int rx897_eos
     .local int rx897_rep
     .local pmc rx897_cur
+    .local pmc rx897_debug
     (rx897_cur, rx897_pos, rx897_tgt, $I10) = self."!cursor_start"()
+    getattribute rx897_debug, rx897_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx897_cur
     .local pmc match
     .lex "$/", match
@@ -11450,7 +12365,9 @@
     substr rx897_tgt, rx897_tgt, rx897_off
   rx897_start:
     eq $I10, 1, rx897_restart
-    rx897_cur."!cursor_debug"("START ", "quote:sym</ />")
+    if_null rx897_debug, debug_760
+    rx897_cur."!cursor_debug"("START", "quote:sym</ />")
+  debug_760:
     $I10 = self.'from'()
     ne $I10, -1, rxscan901_done
     goto rxscan901_scan
@@ -11468,8 +12385,8 @@
     add $I11, rx897_pos, 1
     gt $I11, rx897_eos, rx897_fail
     sub $I11, rx897_pos, rx897_off
-    substr $S10, rx897_tgt, $I11, 1
-    ne $S10, "/", rx897_fail
+    ord $I11, rx897_tgt, $I11
+    ne $I11, 47, rx897_fail
     add rx897_pos, 1
 .annotate 'line', 426
   # rx subrule "newpad" subtype=method negate=
@@ -11494,17 +12411,21 @@
     add $I11, rx897_pos, 1
     gt $I11, rx897_eos, rx897_fail
     sub $I11, rx897_pos, rx897_off
-    substr $S10, rx897_tgt, $I11, 1
-    ne $S10, "/", rx897_fail
+    ord $I11, rx897_tgt, $I11
+    ne $I11, 47, rx897_fail
     add rx897_pos, 1
 .annotate 'line', 424
   # rx pass
     rx897_cur."!cursor_pass"(rx897_pos, "quote:sym</ />")
-    rx897_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx897_pos)
+    if_null rx897_debug, debug_761
+    rx897_cur."!cursor_debug"("PASS", "quote:sym</ />", " at pos=", rx897_pos)
+  debug_761:
     .return (rx897_cur)
   rx897_restart:
 .annotate 'line', 4
-    rx897_cur."!cursor_debug"("NEXT ", "quote:sym</ />")
+    if_null rx897_debug, debug_762
+    rx897_cur."!cursor_debug"("NEXT", "quote:sym</ />")
+  debug_762:
   rx897_fail:
     (rx897_rep, rx897_pos, $I10, $P10) = rx897_cur."!mark_fail"(0)
     lt rx897_pos, -1, rx897_done
@@ -11512,14 +12433,16 @@
     jump $I10
   rx897_done:
     rx897_cur."!cursor_fail"()
-    rx897_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
+    if_null rx897_debug, debug_763
+    rx897_cur."!cursor_debug"("FAIL", "quote:sym</ />")
+  debug_763:
     .return (rx897_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym</ />"  :subid("219_1280467477.44751") :method
+.sub "!PREFIX__quote:sym</ />"  :subid("219_1282324002.40722") :method
 .annotate 'line', 4
     $P899 = self."!PREFIX__!subrule"("newpad", "/")
     new $P900, "ResizablePMCArray"
@@ -11529,7 +12452,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<$>"  :subid("220_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote_escape:sym<$>"  :subid("220_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx903_tgt
     .local int rx903_pos
@@ -11537,7 +12460,9 @@
     .local int rx903_eos
     .local int rx903_rep
     .local pmc rx903_cur
+    .local pmc rx903_debug
     (rx903_cur, rx903_pos, rx903_tgt, $I10) = self."!cursor_start"()
+    getattribute rx903_debug, rx903_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx903_cur
     .local pmc match
     .lex "$/", match
@@ -11549,7 +12474,9 @@
     substr rx903_tgt, rx903_tgt, rx903_off
   rx903_start:
     eq $I10, 1, rx903_restart
-    rx903_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
+    if_null rx903_debug, debug_764
+    rx903_cur."!cursor_debug"("START", "quote_escape:sym<$>")
+  debug_764:
     $I10 = self.'from'()
     ne $I10, -1, rxscan906_done
     goto rxscan906_scan
@@ -11582,11 +12509,15 @@
     rx903_pos = $P10."pos"()
   # rx pass
     rx903_cur."!cursor_pass"(rx903_pos, "quote_escape:sym<$>")
-    rx903_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx903_pos)
+    if_null rx903_debug, debug_765
+    rx903_cur."!cursor_debug"("PASS", "quote_escape:sym<$>", " at pos=", rx903_pos)
+  debug_765:
     .return (rx903_cur)
   rx903_restart:
 .annotate 'line', 4
-    rx903_cur."!cursor_debug"("NEXT ", "quote_escape:sym<$>")
+    if_null rx903_debug, debug_766
+    rx903_cur."!cursor_debug"("NEXT", "quote_escape:sym<$>")
+  debug_766:
   rx903_fail:
     (rx903_rep, rx903_pos, $I10, $P10) = rx903_cur."!mark_fail"(0)
     lt rx903_pos, -1, rx903_done
@@ -11594,14 +12525,16 @@
     jump $I10
   rx903_done:
     rx903_cur."!cursor_fail"()
-    rx903_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
+    if_null rx903_debug, debug_767
+    rx903_cur."!cursor_debug"("FAIL", "quote_escape:sym<$>")
+  debug_767:
     .return (rx903_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<$>"  :subid("221_1280467477.44751") :method
+.sub "!PREFIX__quote_escape:sym<$>"  :subid("221_1282324002.40722") :method
 .annotate 'line', 4
     new $P905, "ResizablePMCArray"
     push $P905, "$"
@@ -11610,7 +12543,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<{ }>"  :subid("222_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote_escape:sym<{ }>"  :subid("222_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx908_tgt
     .local int rx908_pos
@@ -11618,7 +12551,9 @@
     .local int rx908_eos
     .local int rx908_rep
     .local pmc rx908_cur
+    .local pmc rx908_debug
     (rx908_cur, rx908_pos, rx908_tgt, $I10) = self."!cursor_start"()
+    getattribute rx908_debug, rx908_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx908_cur
     .local pmc match
     .lex "$/", match
@@ -11630,7 +12565,9 @@
     substr rx908_tgt, rx908_tgt, rx908_off
   rx908_start:
     eq $I10, 1, rx908_restart
-    rx908_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
+    if_null rx908_debug, debug_768
+    rx908_cur."!cursor_debug"("START", "quote_escape:sym<{ }>")
+  debug_768:
     $I10 = self.'from'()
     ne $I10, -1, rxscan911_done
     goto rxscan911_scan
@@ -11663,11 +12600,15 @@
     rx908_pos = $P10."pos"()
   # rx pass
     rx908_cur."!cursor_pass"(rx908_pos, "quote_escape:sym<{ }>")
-    rx908_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx908_pos)
+    if_null rx908_debug, debug_769
+    rx908_cur."!cursor_debug"("PASS", "quote_escape:sym<{ }>", " at pos=", rx908_pos)
+  debug_769:
     .return (rx908_cur)
   rx908_restart:
 .annotate 'line', 4
-    rx908_cur."!cursor_debug"("NEXT ", "quote_escape:sym<{ }>")
+    if_null rx908_debug, debug_770
+    rx908_cur."!cursor_debug"("NEXT", "quote_escape:sym<{ }>")
+  debug_770:
   rx908_fail:
     (rx908_rep, rx908_pos, $I10, $P10) = rx908_cur."!mark_fail"(0)
     lt rx908_pos, -1, rx908_done
@@ -11675,14 +12616,16 @@
     jump $I10
   rx908_done:
     rx908_cur."!cursor_fail"()
-    rx908_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
+    if_null rx908_debug, debug_771
+    rx908_cur."!cursor_debug"("FAIL", "quote_escape:sym<{ }>")
+  debug_771:
     .return (rx908_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("223_1280467477.44751") :method
+.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("223_1282324002.40722") :method
 .annotate 'line', 4
     new $P910, "ResizablePMCArray"
     push $P910, "{"
@@ -11691,7 +12634,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<esc>"  :subid("224_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "quote_escape:sym<esc>"  :subid("224_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx913_tgt
     .local int rx913_pos
@@ -11699,7 +12642,9 @@
     .local int rx913_eos
     .local int rx913_rep
     .local pmc rx913_cur
+    .local pmc rx913_debug
     (rx913_cur, rx913_pos, rx913_tgt, $I10) = self."!cursor_start"()
+    getattribute rx913_debug, rx913_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx913_cur
     .local pmc match
     .lex "$/", match
@@ -11711,7 +12656,9 @@
     substr rx913_tgt, rx913_tgt, rx913_off
   rx913_start:
     eq $I10, 1, rx913_restart
-    rx913_cur."!cursor_debug"("START ", "quote_escape:sym<esc>")
+    if_null rx913_debug, debug_772
+    rx913_cur."!cursor_debug"("START", "quote_escape:sym<esc>")
+  debug_772:
     $I10 = self.'from'()
     ne $I10, -1, rxscan916_done
     goto rxscan916_scan
@@ -11738,11 +12685,15 @@
     unless $P10, rx913_fail
   # rx pass
     rx913_cur."!cursor_pass"(rx913_pos, "quote_escape:sym<esc>")
-    rx913_cur."!cursor_debug"("PASS  ", "quote_escape:sym<esc>", " at pos=", rx913_pos)
+    if_null rx913_debug, debug_773
+    rx913_cur."!cursor_debug"("PASS", "quote_escape:sym<esc>", " at pos=", rx913_pos)
+  debug_773:
     .return (rx913_cur)
   rx913_restart:
 .annotate 'line', 4
-    rx913_cur."!cursor_debug"("NEXT ", "quote_escape:sym<esc>")
+    if_null rx913_debug, debug_774
+    rx913_cur."!cursor_debug"("NEXT", "quote_escape:sym<esc>")
+  debug_774:
   rx913_fail:
     (rx913_rep, rx913_pos, $I10, $P10) = rx913_cur."!mark_fail"(0)
     lt rx913_pos, -1, rx913_done
@@ -11750,14 +12701,16 @@
     jump $I10
   rx913_done:
     rx913_cur."!cursor_fail"()
-    rx913_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<esc>")
+    if_null rx913_debug, debug_775
+    rx913_cur."!cursor_debug"("FAIL", "quote_escape:sym<esc>")
+  debug_775:
     .return (rx913_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<esc>"  :subid("225_1280467477.44751") :method
+.sub "!PREFIX__quote_escape:sym<esc>"  :subid("225_1282324002.40722") :method
 .annotate 'line', 4
     new $P915, "ResizablePMCArray"
     push $P915, "\\e"
@@ -11766,7 +12719,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<( )>"  :subid("226_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "circumfix:sym<( )>"  :subid("226_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx918_tgt
     .local int rx918_pos
@@ -11774,8 +12727,10 @@
     .local int rx918_eos
     .local int rx918_rep
     .local pmc rx918_cur
+    .local pmc rx918_debug
     (rx918_cur, rx918_pos, rx918_tgt, $I10) = self."!cursor_start"()
     rx918_cur."!cursor_caparray"("EXPR")
+    getattribute rx918_debug, rx918_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx918_cur
     .local pmc match
     .lex "$/", match
@@ -11787,7 +12742,9 @@
     substr rx918_tgt, rx918_tgt, rx918_off
   rx918_start:
     eq $I10, 1, rx918_restart
-    rx918_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
+    if_null rx918_debug, debug_776
+    rx918_cur."!cursor_debug"("START", "circumfix:sym<( )>")
+  debug_776:
     $I10 = self.'from'()
     ne $I10, -1, rxscan922_done
     goto rxscan922_scan
@@ -11805,8 +12762,8 @@
     add $I11, rx918_pos, 1
     gt $I11, rx918_eos, rx918_fail
     sub $I11, rx918_pos, rx918_off
-    substr $S10, rx918_tgt, $I11, 1
-    ne $S10, "(", rx918_fail
+    ord $I11, rx918_tgt, $I11
+    ne $I11, 40, rx918_fail
     add rx918_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx918_cur."!cursor_pos"(rx918_pos)
@@ -11837,16 +12794,20 @@
     add $I11, rx918_pos, 1
     gt $I11, rx918_eos, rx918_fail
     sub $I11, rx918_pos, rx918_off
-    substr $S10, rx918_tgt, $I11, 1
-    ne $S10, ")", rx918_fail
+    ord $I11, rx918_tgt, $I11
+    ne $I11, 41, rx918_fail
     add rx918_pos, 1
   # rx pass
     rx918_cur."!cursor_pass"(rx918_pos, "circumfix:sym<( )>")
-    rx918_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx918_pos)
+    if_null rx918_debug, debug_777
+    rx918_cur."!cursor_debug"("PASS", "circumfix:sym<( )>", " at pos=", rx918_pos)
+  debug_777:
     .return (rx918_cur)
   rx918_restart:
 .annotate 'line', 4
-    rx918_cur."!cursor_debug"("NEXT ", "circumfix:sym<( )>")
+    if_null rx918_debug, debug_778
+    rx918_cur."!cursor_debug"("NEXT", "circumfix:sym<( )>")
+  debug_778:
   rx918_fail:
     (rx918_rep, rx918_pos, $I10, $P10) = rx918_cur."!mark_fail"(0)
     lt rx918_pos, -1, rx918_done
@@ -11854,14 +12815,16 @@
     jump $I10
   rx918_done:
     rx918_cur."!cursor_fail"()
-    rx918_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
+    if_null rx918_debug, debug_779
+    rx918_cur."!cursor_debug"("FAIL", "circumfix:sym<( )>")
+  debug_779:
     .return (rx918_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<( )>"  :subid("227_1280467477.44751") :method
+.sub "!PREFIX__circumfix:sym<( )>"  :subid("227_1282324002.40722") :method
 .annotate 'line', 4
     $P920 = self."!PREFIX__!subrule"("ws", "(")
     new $P921, "ResizablePMCArray"
@@ -11871,7 +12834,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<[ ]>"  :subid("228_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "circumfix:sym<[ ]>"  :subid("228_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx926_tgt
     .local int rx926_pos
@@ -11879,8 +12842,10 @@
     .local int rx926_eos
     .local int rx926_rep
     .local pmc rx926_cur
+    .local pmc rx926_debug
     (rx926_cur, rx926_pos, rx926_tgt, $I10) = self."!cursor_start"()
     rx926_cur."!cursor_caparray"("EXPR")
+    getattribute rx926_debug, rx926_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx926_cur
     .local pmc match
     .lex "$/", match
@@ -11892,7 +12857,9 @@
     substr rx926_tgt, rx926_tgt, rx926_off
   rx926_start:
     eq $I10, 1, rx926_restart
-    rx926_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
+    if_null rx926_debug, debug_780
+    rx926_cur."!cursor_debug"("START", "circumfix:sym<[ ]>")
+  debug_780:
     $I10 = self.'from'()
     ne $I10, -1, rxscan930_done
     goto rxscan930_scan
@@ -11910,8 +12877,8 @@
     add $I11, rx926_pos, 1
     gt $I11, rx926_eos, rx926_fail
     sub $I11, rx926_pos, rx926_off
-    substr $S10, rx926_tgt, $I11, 1
-    ne $S10, "[", rx926_fail
+    ord $I11, rx926_tgt, $I11
+    ne $I11, 91, rx926_fail
     add rx926_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx926_cur."!cursor_pos"(rx926_pos)
@@ -11942,16 +12909,20 @@
     add $I11, rx926_pos, 1
     gt $I11, rx926_eos, rx926_fail
     sub $I11, rx926_pos, rx926_off
-    substr $S10, rx926_tgt, $I11, 1
-    ne $S10, "]", rx926_fail
+    ord $I11, rx926_tgt, $I11
+    ne $I11, 93, rx926_fail
     add rx926_pos, 1
   # rx pass
     rx926_cur."!cursor_pass"(rx926_pos, "circumfix:sym<[ ]>")
-    rx926_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx926_pos)
+    if_null rx926_debug, debug_781
+    rx926_cur."!cursor_debug"("PASS", "circumfix:sym<[ ]>", " at pos=", rx926_pos)
+  debug_781:
     .return (rx926_cur)
   rx926_restart:
 .annotate 'line', 4
-    rx926_cur."!cursor_debug"("NEXT ", "circumfix:sym<[ ]>")
+    if_null rx926_debug, debug_782
+    rx926_cur."!cursor_debug"("NEXT", "circumfix:sym<[ ]>")
+  debug_782:
   rx926_fail:
     (rx926_rep, rx926_pos, $I10, $P10) = rx926_cur."!mark_fail"(0)
     lt rx926_pos, -1, rx926_done
@@ -11959,14 +12930,16 @@
     jump $I10
   rx926_done:
     rx926_cur."!cursor_fail"()
-    rx926_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
+    if_null rx926_debug, debug_783
+    rx926_cur."!cursor_debug"("FAIL", "circumfix:sym<[ ]>")
+  debug_783:
     .return (rx926_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("229_1280467477.44751") :method
+.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("229_1282324002.40722") :method
 .annotate 'line', 4
     $P928 = self."!PREFIX__!subrule"("ws", "[")
     new $P929, "ResizablePMCArray"
@@ -11976,7 +12949,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<ang>"  :subid("230_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "circumfix:sym<ang>"  :subid("230_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx934_tgt
     .local int rx934_pos
@@ -11984,7 +12957,9 @@
     .local int rx934_eos
     .local int rx934_rep
     .local pmc rx934_cur
+    .local pmc rx934_debug
     (rx934_cur, rx934_pos, rx934_tgt, $I10) = self."!cursor_start"()
+    getattribute rx934_debug, rx934_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx934_cur
     .local pmc match
     .lex "$/", match
@@ -11996,7 +12971,9 @@
     substr rx934_tgt, rx934_tgt, rx934_off
   rx934_start:
     eq $I10, 1, rx934_restart
-    rx934_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
+    if_null rx934_debug, debug_784
+    rx934_cur."!cursor_debug"("START", "circumfix:sym<ang>")
+  debug_784:
     $I10 = self.'from'()
     ne $I10, -1, rxscan937_done
     goto rxscan937_scan
@@ -12025,11 +13002,15 @@
     rx934_pos = $P10."pos"()
   # rx pass
     rx934_cur."!cursor_pass"(rx934_pos, "circumfix:sym<ang>")
-    rx934_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx934_pos)
+    if_null rx934_debug, debug_785
+    rx934_cur."!cursor_debug"("PASS", "circumfix:sym<ang>", " at pos=", rx934_pos)
+  debug_785:
     .return (rx934_cur)
   rx934_restart:
 .annotate 'line', 4
-    rx934_cur."!cursor_debug"("NEXT ", "circumfix:sym<ang>")
+    if_null rx934_debug, debug_786
+    rx934_cur."!cursor_debug"("NEXT", "circumfix:sym<ang>")
+  debug_786:
   rx934_fail:
     (rx934_rep, rx934_pos, $I10, $P10) = rx934_cur."!mark_fail"(0)
     lt rx934_pos, -1, rx934_done
@@ -12037,14 +13018,16 @@
     jump $I10
   rx934_done:
     rx934_cur."!cursor_fail"()
-    rx934_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
+    if_null rx934_debug, debug_787
+    rx934_cur."!cursor_debug"("FAIL", "circumfix:sym<ang>")
+  debug_787:
     .return (rx934_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<ang>"  :subid("231_1280467477.44751") :method
+.sub "!PREFIX__circumfix:sym<ang>"  :subid("231_1282324002.40722") :method
 .annotate 'line', 4
     new $P936, "ResizablePMCArray"
     push $P936, "<"
@@ -12053,7 +13036,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("232_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("232_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx939_tgt
     .local int rx939_pos
@@ -12061,7 +13044,9 @@
     .local int rx939_eos
     .local int rx939_rep
     .local pmc rx939_cur
+    .local pmc rx939_debug
     (rx939_cur, rx939_pos, rx939_tgt, $I10) = self."!cursor_start"()
+    getattribute rx939_debug, rx939_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx939_cur
     .local pmc match
     .lex "$/", match
@@ -12073,7 +13058,9 @@
     substr rx939_tgt, rx939_tgt, rx939_off
   rx939_start:
     eq $I10, 1, rx939_restart
-    rx939_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    if_null rx939_debug, debug_788
+    rx939_cur."!cursor_debug"("START", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+  debug_788:
     $I10 = self.'from'()
     ne $I10, -1, rxscan942_done
     goto rxscan942_scan
@@ -12102,11 +13089,15 @@
     rx939_pos = $P10."pos"()
   # rx pass
     rx939_cur."!cursor_pass"(rx939_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    rx939_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx939_pos)
+    if_null rx939_debug, debug_789
+    rx939_cur."!cursor_debug"("PASS", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx939_pos)
+  debug_789:
     .return (rx939_cur)
   rx939_restart:
 .annotate 'line', 4
-    rx939_cur."!cursor_debug"("NEXT ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    if_null rx939_debug, debug_790
+    rx939_cur."!cursor_debug"("NEXT", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+  debug_790:
   rx939_fail:
     (rx939_rep, rx939_pos, $I10, $P10) = rx939_cur."!mark_fail"(0)
     lt rx939_pos, -1, rx939_done
@@ -12114,14 +13105,16 @@
     jump $I10
   rx939_done:
     rx939_cur."!cursor_fail"()
-    rx939_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    if_null rx939_debug, debug_791
+    rx939_cur."!cursor_debug"("FAIL", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+  debug_791:
     .return (rx939_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("233_1280467477.44751") :method
+.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("233_1282324002.40722") :method
 .annotate 'line', 4
     new $P941, "ResizablePMCArray"
     push $P941, unicode:"\x{ab}"
@@ -12130,7 +13123,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<{ }>"  :subid("234_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "circumfix:sym<{ }>"  :subid("234_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx944_tgt
     .local int rx944_pos
@@ -12138,7 +13131,9 @@
     .local int rx944_eos
     .local int rx944_rep
     .local pmc rx944_cur
+    .local pmc rx944_debug
     (rx944_cur, rx944_pos, rx944_tgt, $I10) = self."!cursor_start"()
+    getattribute rx944_debug, rx944_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx944_cur
     .local pmc match
     .lex "$/", match
@@ -12150,7 +13145,9 @@
     substr rx944_tgt, rx944_tgt, rx944_off
   rx944_start:
     eq $I10, 1, rx944_restart
-    rx944_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
+    if_null rx944_debug, debug_792
+    rx944_cur."!cursor_debug"("START", "circumfix:sym<{ }>")
+  debug_792:
     $I10 = self.'from'()
     ne $I10, -1, rxscan947_done
     goto rxscan947_scan
@@ -12179,11 +13176,15 @@
     rx944_pos = $P10."pos"()
   # rx pass
     rx944_cur."!cursor_pass"(rx944_pos, "circumfix:sym<{ }>")
-    rx944_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx944_pos)
+    if_null rx944_debug, debug_793
+    rx944_cur."!cursor_debug"("PASS", "circumfix:sym<{ }>", " at pos=", rx944_pos)
+  debug_793:
     .return (rx944_cur)
   rx944_restart:
 .annotate 'line', 4
-    rx944_cur."!cursor_debug"("NEXT ", "circumfix:sym<{ }>")
+    if_null rx944_debug, debug_794
+    rx944_cur."!cursor_debug"("NEXT", "circumfix:sym<{ }>")
+  debug_794:
   rx944_fail:
     (rx944_rep, rx944_pos, $I10, $P10) = rx944_cur."!mark_fail"(0)
     lt rx944_pos, -1, rx944_done
@@ -12191,14 +13192,16 @@
     jump $I10
   rx944_done:
     rx944_cur."!cursor_fail"()
-    rx944_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
+    if_null rx944_debug, debug_795
+    rx944_cur."!cursor_debug"("FAIL", "circumfix:sym<{ }>")
+  debug_795:
     .return (rx944_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<{ }>"  :subid("235_1280467477.44751") :method
+.sub "!PREFIX__circumfix:sym<{ }>"  :subid("235_1282324002.40722") :method
 .annotate 'line', 4
     new $P946, "ResizablePMCArray"
     push $P946, "{"
@@ -12207,7 +13210,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<sigil>"  :subid("236_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "circumfix:sym<sigil>"  :subid("236_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx949_tgt
     .local int rx949_pos
@@ -12215,7 +13218,9 @@
     .local int rx949_eos
     .local int rx949_rep
     .local pmc rx949_cur
+    .local pmc rx949_debug
     (rx949_cur, rx949_pos, rx949_tgt, $I10) = self."!cursor_start"()
+    getattribute rx949_debug, rx949_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx949_cur
     .local pmc match
     .lex "$/", match
@@ -12227,7 +13232,9 @@
     substr rx949_tgt, rx949_tgt, rx949_off
   rx949_start:
     eq $I10, 1, rx949_restart
-    rx949_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
+    if_null rx949_debug, debug_796
+    rx949_cur."!cursor_debug"("START", "circumfix:sym<sigil>")
+  debug_796:
     $I10 = self.'from'()
     ne $I10, -1, rxscan953_done
     goto rxscan953_scan
@@ -12252,8 +13259,8 @@
     add $I11, rx949_pos, 1
     gt $I11, rx949_eos, rx949_fail
     sub $I11, rx949_pos, rx949_off
-    substr $S10, rx949_tgt, $I11, 1
-    ne $S10, "(", rx949_fail
+    ord $I11, rx949_tgt, $I11
+    ne $I11, 40, rx949_fail
     add rx949_pos, 1
   # rx subrule "semilist" subtype=capture negate=
     rx949_cur."!cursor_pos"(rx949_pos)
@@ -12269,8 +13276,8 @@
     add $I11, rx949_pos, 1
     gt $I11, rx949_eos, rx949_fail
     sub $I11, rx949_pos, rx949_off
-    substr $S10, rx949_tgt, $I11, 1
-    ne $S10, ")", rx949_fail
+    ord $I11, rx949_tgt, $I11
+    ne $I11, 41, rx949_fail
     add rx949_pos, 1
     goto alt954_end
   alt954_1:
@@ -12289,11 +13296,15 @@
   alt954_end:
   # rx pass
     rx949_cur."!cursor_pass"(rx949_pos, "circumfix:sym<sigil>")
-    rx949_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx949_pos)
+    if_null rx949_debug, debug_797
+    rx949_cur."!cursor_debug"("PASS", "circumfix:sym<sigil>", " at pos=", rx949_pos)
+  debug_797:
     .return (rx949_cur)
   rx949_restart:
 .annotate 'line', 4
-    rx949_cur."!cursor_debug"("NEXT ", "circumfix:sym<sigil>")
+    if_null rx949_debug, debug_798
+    rx949_cur."!cursor_debug"("NEXT", "circumfix:sym<sigil>")
+  debug_798:
   rx949_fail:
     (rx949_rep, rx949_pos, $I10, $P10) = rx949_cur."!mark_fail"(0)
     lt rx949_pos, -1, rx949_done
@@ -12301,14 +13312,16 @@
     jump $I10
   rx949_done:
     rx949_cur."!cursor_fail"()
-    rx949_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
+    if_null rx949_debug, debug_799
+    rx949_cur."!cursor_debug"("FAIL", "circumfix:sym<sigil>")
+  debug_799:
     .return (rx949_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<sigil>"  :subid("237_1280467477.44751") :method
+.sub "!PREFIX__circumfix:sym<sigil>"  :subid("237_1282324002.40722") :method
 .annotate 'line', 4
     $P951 = self."!PREFIX__!subrule"("sigil", "")
     new $P952, "ResizablePMCArray"
@@ -12318,7 +13331,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "semilist"  :subid("238_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "semilist"  :subid("238_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 4
     .local string rx958_tgt
     .local int rx958_pos
@@ -12326,7 +13339,9 @@
     .local int rx958_eos
     .local int rx958_rep
     .local pmc rx958_cur
+    .local pmc rx958_debug
     (rx958_cur, rx958_pos, rx958_tgt, $I10) = self."!cursor_start"()
+    getattribute rx958_debug, rx958_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx958_cur
     .local pmc match
     .lex "$/", match
@@ -12338,7 +13353,9 @@
     substr rx958_tgt, rx958_tgt, rx958_off
   rx958_start:
     eq $I10, 1, rx958_restart
-    rx958_cur."!cursor_debug"("START ", "semilist")
+    if_null rx958_debug, debug_800
+    rx958_cur."!cursor_debug"("START", "semilist")
+  debug_800:
     $I10 = self.'from'()
     ne $I10, -1, rxscan962_done
     goto rxscan962_scan
@@ -12371,11 +13388,15 @@
     rx958_pos = $P10."pos"()
   # rx pass
     rx958_cur."!cursor_pass"(rx958_pos, "semilist")
-    rx958_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx958_pos)
+    if_null rx958_debug, debug_801
+    rx958_cur."!cursor_debug"("PASS", "semilist", " at pos=", rx958_pos)
+  debug_801:
     .return (rx958_cur)
   rx958_restart:
 .annotate 'line', 4
-    rx958_cur."!cursor_debug"("NEXT ", "semilist")
+    if_null rx958_debug, debug_802
+    rx958_cur."!cursor_debug"("NEXT", "semilist")
+  debug_802:
   rx958_fail:
     (rx958_rep, rx958_pos, $I10, $P10) = rx958_cur."!mark_fail"(0)
     lt rx958_pos, -1, rx958_done
@@ -12383,14 +13404,16 @@
     jump $I10
   rx958_done:
     rx958_cur."!cursor_fail"()
-    rx958_cur."!cursor_debug"("FAIL  ", "semilist")
+    if_null rx958_debug, debug_803
+    rx958_cur."!cursor_debug"("FAIL", "semilist")
+  debug_803:
     .return (rx958_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__semilist"  :subid("239_1280467477.44751") :method
+.sub "!PREFIX__semilist"  :subid("239_1282324002.40722") :method
 .annotate 'line', 4
     $P960 = self."!PREFIX__!subrule"("ws", "")
     new $P961, "ResizablePMCArray"
@@ -12400,7 +13423,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixish"  :subid("240_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infixish"  :subid("240_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx966_tgt
     .local int rx966_pos
@@ -12408,7 +13431,9 @@
     .local int rx966_eos
     .local int rx966_rep
     .local pmc rx966_cur
+    .local pmc rx966_debug
     (rx966_cur, rx966_pos, rx966_tgt, $I10) = self."!cursor_start"()
+    getattribute rx966_debug, rx966_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx966_cur
     .local pmc match
     .lex "$/", match
@@ -12420,7 +13445,9 @@
     substr rx966_tgt, rx966_tgt, rx966_off
   rx966_start:
     eq $I10, 1, rx966_restart
-    rx966_cur."!cursor_debug"("START ", "infixish")
+    if_null rx966_debug, debug_804
+    rx966_cur."!cursor_debug"("START", "infixish")
+  debug_804:
     $I10 = self.'from'()
     ne $I10, -1, rxscan969_done
     goto rxscan969_scan
@@ -12447,11 +13474,15 @@
     rx966_pos = $P10."pos"()
   # rx pass
     rx966_cur."!cursor_pass"(rx966_pos, "infixish")
-    rx966_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx966_pos)
+    if_null rx966_debug, debug_805
+    rx966_cur."!cursor_debug"("PASS", "infixish", " at pos=", rx966_pos)
+  debug_805:
     .return (rx966_cur)
   rx966_restart:
 .annotate 'line', 447
-    rx966_cur."!cursor_debug"("NEXT ", "infixish")
+    if_null rx966_debug, debug_806
+    rx966_cur."!cursor_debug"("NEXT", "infixish")
+  debug_806:
   rx966_fail:
     (rx966_rep, rx966_pos, $I10, $P10) = rx966_cur."!mark_fail"(0)
     lt rx966_pos, -1, rx966_done
@@ -12459,14 +13490,16 @@
     jump $I10
   rx966_done:
     rx966_cur."!cursor_fail"()
-    rx966_cur."!cursor_debug"("FAIL  ", "infixish")
+    if_null rx966_debug, debug_807
+    rx966_cur."!cursor_debug"("FAIL", "infixish")
+  debug_807:
     .return (rx966_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("241_1280467477.44751") :method
+.sub "!PREFIX__infixish"  :subid("241_1282324002.40722") :method
 .annotate 'line', 447
     new $P968, "ResizablePMCArray"
     push $P968, ""
@@ -12475,7 +13508,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixstopper"  :subid("242_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infixstopper"  :subid("242_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx971_tgt
     .local int rx971_pos
@@ -12483,7 +13516,9 @@
     .local int rx971_eos
     .local int rx971_rep
     .local pmc rx971_cur
+    .local pmc rx971_debug
     (rx971_cur, rx971_pos, rx971_tgt, $I10) = self."!cursor_start"()
+    getattribute rx971_debug, rx971_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx971_cur
     .local pmc match
     .lex "$/", match
@@ -12495,7 +13530,9 @@
     substr rx971_tgt, rx971_tgt, rx971_off
   rx971_start:
     eq $I10, 1, rx971_restart
-    rx971_cur."!cursor_debug"("START ", "infixstopper")
+    if_null rx971_debug, debug_808
+    rx971_cur."!cursor_debug"("START", "infixstopper")
+  debug_808:
     $I10 = self.'from'()
     ne $I10, -1, rxscan974_done
     goto rxscan974_scan
@@ -12515,11 +13552,15 @@
     unless $P10, rx971_fail
   # rx pass
     rx971_cur."!cursor_pass"(rx971_pos, "infixstopper")
-    rx971_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx971_pos)
+    if_null rx971_debug, debug_809
+    rx971_cur."!cursor_debug"("PASS", "infixstopper", " at pos=", rx971_pos)
+  debug_809:
     .return (rx971_cur)
   rx971_restart:
 .annotate 'line', 447
-    rx971_cur."!cursor_debug"("NEXT ", "infixstopper")
+    if_null rx971_debug, debug_810
+    rx971_cur."!cursor_debug"("NEXT", "infixstopper")
+  debug_810:
   rx971_fail:
     (rx971_rep, rx971_pos, $I10, $P10) = rx971_cur."!mark_fail"(0)
     lt rx971_pos, -1, rx971_done
@@ -12527,14 +13568,16 @@
     jump $I10
   rx971_done:
     rx971_cur."!cursor_fail"()
-    rx971_cur."!cursor_debug"("FAIL  ", "infixstopper")
+    if_null rx971_debug, debug_811
+    rx971_cur."!cursor_debug"("FAIL", "infixstopper")
+  debug_811:
     .return (rx971_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixstopper"  :subid("243_1280467477.44751") :method
+.sub "!PREFIX__infixstopper"  :subid("243_1282324002.40722") :method
 .annotate 'line', 447
     new $P973, "ResizablePMCArray"
     push $P973, ""
@@ -12543,7 +13586,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<[ ]>"  :subid("244_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "postcircumfix:sym<[ ]>"  :subid("244_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx976_tgt
     .local int rx976_pos
@@ -12551,7 +13594,9 @@
     .local int rx976_eos
     .local int rx976_rep
     .local pmc rx976_cur
+    .local pmc rx976_debug
     (rx976_cur, rx976_pos, rx976_tgt, $I10) = self."!cursor_start"()
+    getattribute rx976_debug, rx976_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx976_cur
     .local pmc match
     .lex "$/", match
@@ -12563,7 +13608,9 @@
     substr rx976_tgt, rx976_tgt, rx976_off
   rx976_start:
     eq $I10, 1, rx976_restart
-    rx976_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
+    if_null rx976_debug, debug_812
+    rx976_cur."!cursor_debug"("START", "postcircumfix:sym<[ ]>")
+  debug_812:
     $I10 = self.'from'()
     ne $I10, -1, rxscan980_done
     goto rxscan980_scan
@@ -12581,8 +13628,8 @@
     add $I11, rx976_pos, 1
     gt $I11, rx976_eos, rx976_fail
     sub $I11, rx976_pos, rx976_off
-    substr $S10, rx976_tgt, $I11, 1
-    ne $S10, "[", rx976_fail
+    ord $I11, rx976_tgt, $I11
+    ne $I11, 91, rx976_fail
     add rx976_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx976_cur."!cursor_pos"(rx976_pos)
@@ -12600,8 +13647,8 @@
     add $I11, rx976_pos, 1
     gt $I11, rx976_eos, rx976_fail
     sub $I11, rx976_pos, rx976_off
-    substr $S10, rx976_tgt, $I11, 1
-    ne $S10, "]", rx976_fail
+    ord $I11, rx976_tgt, $I11
+    ne $I11, 93, rx976_fail
     add rx976_pos, 1
 .annotate 'line', 471
   # rx subrule "O" subtype=capture negate=
@@ -12614,11 +13661,15 @@
 .annotate 'line', 469
   # rx pass
     rx976_cur."!cursor_pass"(rx976_pos, "postcircumfix:sym<[ ]>")
-    rx976_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx976_pos)
+    if_null rx976_debug, debug_813
+    rx976_cur."!cursor_debug"("PASS", "postcircumfix:sym<[ ]>", " at pos=", rx976_pos)
+  debug_813:
     .return (rx976_cur)
   rx976_restart:
 .annotate 'line', 447
-    rx976_cur."!cursor_debug"("NEXT ", "postcircumfix:sym<[ ]>")
+    if_null rx976_debug, debug_814
+    rx976_cur."!cursor_debug"("NEXT", "postcircumfix:sym<[ ]>")
+  debug_814:
   rx976_fail:
     (rx976_rep, rx976_pos, $I10, $P10) = rx976_cur."!mark_fail"(0)
     lt rx976_pos, -1, rx976_done
@@ -12626,14 +13677,16 @@
     jump $I10
   rx976_done:
     rx976_cur."!cursor_fail"()
-    rx976_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
+    if_null rx976_debug, debug_815
+    rx976_cur."!cursor_debug"("FAIL", "postcircumfix:sym<[ ]>")
+  debug_815:
     .return (rx976_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("245_1280467477.44751") :method
+.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("245_1282324002.40722") :method
 .annotate 'line', 447
     $P978 = self."!PREFIX__!subrule"("ws", "[")
     new $P979, "ResizablePMCArray"
@@ -12643,7 +13696,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<{ }>"  :subid("246_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "postcircumfix:sym<{ }>"  :subid("246_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx982_tgt
     .local int rx982_pos
@@ -12651,7 +13704,9 @@
     .local int rx982_eos
     .local int rx982_rep
     .local pmc rx982_cur
+    .local pmc rx982_debug
     (rx982_cur, rx982_pos, rx982_tgt, $I10) = self."!cursor_start"()
+    getattribute rx982_debug, rx982_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx982_cur
     .local pmc match
     .lex "$/", match
@@ -12663,7 +13718,9 @@
     substr rx982_tgt, rx982_tgt, rx982_off
   rx982_start:
     eq $I10, 1, rx982_restart
-    rx982_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
+    if_null rx982_debug, debug_816
+    rx982_cur."!cursor_debug"("START", "postcircumfix:sym<{ }>")
+  debug_816:
     $I10 = self.'from'()
     ne $I10, -1, rxscan986_done
     goto rxscan986_scan
@@ -12681,8 +13738,8 @@
     add $I11, rx982_pos, 1
     gt $I11, rx982_eos, rx982_fail
     sub $I11, rx982_pos, rx982_off
-    substr $S10, rx982_tgt, $I11, 1
-    ne $S10, "{", rx982_fail
+    ord $I11, rx982_tgt, $I11
+    ne $I11, 123, rx982_fail
     add rx982_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx982_cur."!cursor_pos"(rx982_pos)
@@ -12700,8 +13757,8 @@
     add $I11, rx982_pos, 1
     gt $I11, rx982_eos, rx982_fail
     sub $I11, rx982_pos, rx982_off
-    substr $S10, rx982_tgt, $I11, 1
-    ne $S10, "}", rx982_fail
+    ord $I11, rx982_tgt, $I11
+    ne $I11, 125, rx982_fail
     add rx982_pos, 1
 .annotate 'line', 476
   # rx subrule "O" subtype=capture negate=
@@ -12714,11 +13771,15 @@
 .annotate 'line', 474
   # rx pass
     rx982_cur."!cursor_pass"(rx982_pos, "postcircumfix:sym<{ }>")
-    rx982_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx982_pos)
+    if_null rx982_debug, debug_817
+    rx982_cur."!cursor_debug"("PASS", "postcircumfix:sym<{ }>", " at pos=", rx982_pos)
+  debug_817:
     .return (rx982_cur)
   rx982_restart:
 .annotate 'line', 447
-    rx982_cur."!cursor_debug"("NEXT ", "postcircumfix:sym<{ }>")
+    if_null rx982_debug, debug_818
+    rx982_cur."!cursor_debug"("NEXT", "postcircumfix:sym<{ }>")
+  debug_818:
   rx982_fail:
     (rx982_rep, rx982_pos, $I10, $P10) = rx982_cur."!mark_fail"(0)
     lt rx982_pos, -1, rx982_done
@@ -12726,14 +13787,16 @@
     jump $I10
   rx982_done:
     rx982_cur."!cursor_fail"()
-    rx982_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
+    if_null rx982_debug, debug_819
+    rx982_cur."!cursor_debug"("FAIL", "postcircumfix:sym<{ }>")
+  debug_819:
     .return (rx982_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("247_1280467477.44751") :method
+.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("247_1282324002.40722") :method
 .annotate 'line', 447
     $P984 = self."!PREFIX__!subrule"("ws", "{")
     new $P985, "ResizablePMCArray"
@@ -12743,7 +13806,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<ang>"  :subid("248_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "postcircumfix:sym<ang>"  :subid("248_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx988_tgt
     .local int rx988_pos
@@ -12751,7 +13814,9 @@
     .local int rx988_eos
     .local int rx988_rep
     .local pmc rx988_cur
+    .local pmc rx988_debug
     (rx988_cur, rx988_pos, rx988_tgt, $I10) = self."!cursor_start"()
+    getattribute rx988_debug, rx988_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx988_cur
     .local pmc match
     .lex "$/", match
@@ -12763,7 +13828,9 @@
     substr rx988_tgt, rx988_tgt, rx988_off
   rx988_start:
     eq $I10, 1, rx988_restart
-    rx988_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
+    if_null rx988_debug, debug_820
+    rx988_cur."!cursor_debug"("START", "postcircumfix:sym<ang>")
+  debug_820:
     $I10 = self.'from'()
     ne $I10, -1, rxscan991_done
     goto rxscan991_scan
@@ -12801,11 +13868,15 @@
 .annotate 'line', 479
   # rx pass
     rx988_cur."!cursor_pass"(rx988_pos, "postcircumfix:sym<ang>")
-    rx988_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx988_pos)
+    if_null rx988_debug, debug_821
+    rx988_cur."!cursor_debug"("PASS", "postcircumfix:sym<ang>", " at pos=", rx988_pos)
+  debug_821:
     .return (rx988_cur)
   rx988_restart:
 .annotate 'line', 447
-    rx988_cur."!cursor_debug"("NEXT ", "postcircumfix:sym<ang>")
+    if_null rx988_debug, debug_822
+    rx988_cur."!cursor_debug"("NEXT", "postcircumfix:sym<ang>")
+  debug_822:
   rx988_fail:
     (rx988_rep, rx988_pos, $I10, $P10) = rx988_cur."!mark_fail"(0)
     lt rx988_pos, -1, rx988_done
@@ -12813,14 +13884,16 @@
     jump $I10
   rx988_done:
     rx988_cur."!cursor_fail"()
-    rx988_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
+    if_null rx988_debug, debug_823
+    rx988_cur."!cursor_debug"("FAIL", "postcircumfix:sym<ang>")
+  debug_823:
     .return (rx988_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("249_1280467477.44751") :method
+.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("249_1282324002.40722") :method
 .annotate 'line', 447
     new $P990, "ResizablePMCArray"
     push $P990, "<"
@@ -12829,7 +13902,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<( )>"  :subid("250_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "postcircumfix:sym<( )>"  :subid("250_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx993_tgt
     .local int rx993_pos
@@ -12837,7 +13910,9 @@
     .local int rx993_eos
     .local int rx993_rep
     .local pmc rx993_cur
+    .local pmc rx993_debug
     (rx993_cur, rx993_pos, rx993_tgt, $I10) = self."!cursor_start"()
+    getattribute rx993_debug, rx993_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx993_cur
     .local pmc match
     .lex "$/", match
@@ -12849,7 +13924,9 @@
     substr rx993_tgt, rx993_tgt, rx993_off
   rx993_start:
     eq $I10, 1, rx993_restart
-    rx993_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
+    if_null rx993_debug, debug_824
+    rx993_cur."!cursor_debug"("START", "postcircumfix:sym<( )>")
+  debug_824:
     $I10 = self.'from'()
     ne $I10, -1, rxscan997_done
     goto rxscan997_scan
@@ -12867,8 +13944,8 @@
     add $I11, rx993_pos, 1
     gt $I11, rx993_eos, rx993_fail
     sub $I11, rx993_pos, rx993_off
-    substr $S10, rx993_tgt, $I11, 1
-    ne $S10, "(", rx993_fail
+    ord $I11, rx993_tgt, $I11
+    ne $I11, 40, rx993_fail
     add rx993_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx993_cur."!cursor_pos"(rx993_pos)
@@ -12886,8 +13963,8 @@
     add $I11, rx993_pos, 1
     gt $I11, rx993_eos, rx993_fail
     sub $I11, rx993_pos, rx993_off
-    substr $S10, rx993_tgt, $I11, 1
-    ne $S10, ")", rx993_fail
+    ord $I11, rx993_tgt, $I11
+    ne $I11, 41, rx993_fail
     add rx993_pos, 1
 .annotate 'line', 486
   # rx subrule "O" subtype=capture negate=
@@ -12900,11 +13977,15 @@
 .annotate 'line', 484
   # rx pass
     rx993_cur."!cursor_pass"(rx993_pos, "postcircumfix:sym<( )>")
-    rx993_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx993_pos)
+    if_null rx993_debug, debug_825
+    rx993_cur."!cursor_debug"("PASS", "postcircumfix:sym<( )>", " at pos=", rx993_pos)
+  debug_825:
     .return (rx993_cur)
   rx993_restart:
 .annotate 'line', 447
-    rx993_cur."!cursor_debug"("NEXT ", "postcircumfix:sym<( )>")
+    if_null rx993_debug, debug_826
+    rx993_cur."!cursor_debug"("NEXT", "postcircumfix:sym<( )>")
+  debug_826:
   rx993_fail:
     (rx993_rep, rx993_pos, $I10, $P10) = rx993_cur."!mark_fail"(0)
     lt rx993_pos, -1, rx993_done
@@ -12912,14 +13993,16 @@
     jump $I10
   rx993_done:
     rx993_cur."!cursor_fail"()
-    rx993_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
+    if_null rx993_debug, debug_827
+    rx993_cur."!cursor_debug"("FAIL", "postcircumfix:sym<( )>")
+  debug_827:
     .return (rx993_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("251_1280467477.44751") :method
+.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("251_1282324002.40722") :method
 .annotate 'line', 447
     $P995 = self."!PREFIX__!subrule"("ws", "(")
     new $P996, "ResizablePMCArray"
@@ -12929,7 +14012,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<.>"  :subid("252_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "postfix:sym<.>"  :subid("252_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx999_tgt
     .local int rx999_pos
@@ -12937,7 +14020,9 @@
     .local int rx999_eos
     .local int rx999_rep
     .local pmc rx999_cur
+    .local pmc rx999_debug
     (rx999_cur, rx999_pos, rx999_tgt, $I10) = self."!cursor_start"()
+    getattribute rx999_debug, rx999_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx999_cur
     .local pmc match
     .lex "$/", match
@@ -12949,7 +14034,9 @@
     substr rx999_tgt, rx999_tgt, rx999_off
   rx999_start:
     eq $I10, 1, rx999_restart
-    rx999_cur."!cursor_debug"("START ", "postfix:sym<.>")
+    if_null rx999_debug, debug_828
+    rx999_cur."!cursor_debug"("START", "postfix:sym<.>")
+  debug_828:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1003_done
     goto rxscan1003_scan
@@ -12979,11 +14066,15 @@
     rx999_pos = $P10."pos"()
   # rx pass
     rx999_cur."!cursor_pass"(rx999_pos, "postfix:sym<.>")
-    rx999_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx999_pos)
+    if_null rx999_debug, debug_829
+    rx999_cur."!cursor_debug"("PASS", "postfix:sym<.>", " at pos=", rx999_pos)
+  debug_829:
     .return (rx999_cur)
   rx999_restart:
 .annotate 'line', 447
-    rx999_cur."!cursor_debug"("NEXT ", "postfix:sym<.>")
+    if_null rx999_debug, debug_830
+    rx999_cur."!cursor_debug"("NEXT", "postfix:sym<.>")
+  debug_830:
   rx999_fail:
     (rx999_rep, rx999_pos, $I10, $P10) = rx999_cur."!mark_fail"(0)
     lt rx999_pos, -1, rx999_done
@@ -12991,14 +14082,16 @@
     jump $I10
   rx999_done:
     rx999_cur."!cursor_fail"()
-    rx999_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
+    if_null rx999_debug, debug_831
+    rx999_cur."!cursor_debug"("FAIL", "postfix:sym<.>")
+  debug_831:
     .return (rx999_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<.>"  :subid("253_1280467477.44751") :method
+.sub "!PREFIX__postfix:sym<.>"  :subid("253_1282324002.40722") :method
 .annotate 'line', 447
     $P1001 = self."!PREFIX__!subrule"("dotty", "")
     new $P1002, "ResizablePMCArray"
@@ -13008,7 +14101,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<++>"  :subid("254_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<++>"  :subid("254_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1005_tgt
     .local int rx1005_pos
@@ -13016,7 +14109,9 @@
     .local int rx1005_eos
     .local int rx1005_rep
     .local pmc rx1005_cur
+    .local pmc rx1005_debug
     (rx1005_cur, rx1005_pos, rx1005_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1005_debug, rx1005_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1005_cur
     .local pmc match
     .lex "$/", match
@@ -13028,7 +14123,9 @@
     substr rx1005_tgt, rx1005_tgt, rx1005_off
   rx1005_start:
     eq $I10, 1, rx1005_restart
-    rx1005_cur."!cursor_debug"("START ", "prefix:sym<++>")
+    if_null rx1005_debug, debug_832
+    rx1005_cur."!cursor_debug"("START", "prefix:sym<++>")
+  debug_832:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1009_done
     goto rxscan1009_scan
@@ -13072,11 +14169,15 @@
     rx1005_pos = $P10."pos"()
   # rx pass
     rx1005_cur."!cursor_pass"(rx1005_pos, "prefix:sym<++>")
-    rx1005_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx1005_pos)
+    if_null rx1005_debug, debug_833
+    rx1005_cur."!cursor_debug"("PASS", "prefix:sym<++>", " at pos=", rx1005_pos)
+  debug_833:
     .return (rx1005_cur)
   rx1005_restart:
 .annotate 'line', 447
-    rx1005_cur."!cursor_debug"("NEXT ", "prefix:sym<++>")
+    if_null rx1005_debug, debug_834
+    rx1005_cur."!cursor_debug"("NEXT", "prefix:sym<++>")
+  debug_834:
   rx1005_fail:
     (rx1005_rep, rx1005_pos, $I10, $P10) = rx1005_cur."!mark_fail"(0)
     lt rx1005_pos, -1, rx1005_done
@@ -13084,14 +14185,16 @@
     jump $I10
   rx1005_done:
     rx1005_cur."!cursor_fail"()
-    rx1005_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
+    if_null rx1005_debug, debug_835
+    rx1005_cur."!cursor_debug"("FAIL", "prefix:sym<++>")
+  debug_835:
     .return (rx1005_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<++>"  :subid("255_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<++>"  :subid("255_1282324002.40722") :method
 .annotate 'line', 447
     $P1007 = self."!PREFIX__!subrule"("O", "++")
     new $P1008, "ResizablePMCArray"
@@ -13101,7 +14204,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<-->"  :subid("256_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<-->"  :subid("256_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1012_tgt
     .local int rx1012_pos
@@ -13109,7 +14212,9 @@
     .local int rx1012_eos
     .local int rx1012_rep
     .local pmc rx1012_cur
+    .local pmc rx1012_debug
     (rx1012_cur, rx1012_pos, rx1012_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1012_debug, rx1012_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1012_cur
     .local pmc match
     .lex "$/", match
@@ -13121,7 +14226,9 @@
     substr rx1012_tgt, rx1012_tgt, rx1012_off
   rx1012_start:
     eq $I10, 1, rx1012_restart
-    rx1012_cur."!cursor_debug"("START ", "prefix:sym<-->")
+    if_null rx1012_debug, debug_836
+    rx1012_cur."!cursor_debug"("START", "prefix:sym<-->")
+  debug_836:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1016_done
     goto rxscan1016_scan
@@ -13165,11 +14272,15 @@
     rx1012_pos = $P10."pos"()
   # rx pass
     rx1012_cur."!cursor_pass"(rx1012_pos, "prefix:sym<-->")
-    rx1012_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx1012_pos)
+    if_null rx1012_debug, debug_837
+    rx1012_cur."!cursor_debug"("PASS", "prefix:sym<-->", " at pos=", rx1012_pos)
+  debug_837:
     .return (rx1012_cur)
   rx1012_restart:
 .annotate 'line', 447
-    rx1012_cur."!cursor_debug"("NEXT ", "prefix:sym<-->")
+    if_null rx1012_debug, debug_838
+    rx1012_cur."!cursor_debug"("NEXT", "prefix:sym<-->")
+  debug_838:
   rx1012_fail:
     (rx1012_rep, rx1012_pos, $I10, $P10) = rx1012_cur."!mark_fail"(0)
     lt rx1012_pos, -1, rx1012_done
@@ -13177,14 +14288,16 @@
     jump $I10
   rx1012_done:
     rx1012_cur."!cursor_fail"()
-    rx1012_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
+    if_null rx1012_debug, debug_839
+    rx1012_cur."!cursor_debug"("FAIL", "prefix:sym<-->")
+  debug_839:
     .return (rx1012_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<-->"  :subid("257_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<-->"  :subid("257_1282324002.40722") :method
 .annotate 'line', 447
     $P1014 = self."!PREFIX__!subrule"("O", "--")
     new $P1015, "ResizablePMCArray"
@@ -13194,7 +14307,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<++>"  :subid("258_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "postfix:sym<++>"  :subid("258_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1019_tgt
     .local int rx1019_pos
@@ -13202,7 +14315,9 @@
     .local int rx1019_eos
     .local int rx1019_rep
     .local pmc rx1019_cur
+    .local pmc rx1019_debug
     (rx1019_cur, rx1019_pos, rx1019_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1019_debug, rx1019_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1019_cur
     .local pmc match
     .lex "$/", match
@@ -13214,7 +14329,9 @@
     substr rx1019_tgt, rx1019_tgt, rx1019_off
   rx1019_start:
     eq $I10, 1, rx1019_restart
-    rx1019_cur."!cursor_debug"("START ", "postfix:sym<++>")
+    if_null rx1019_debug, debug_840
+    rx1019_cur."!cursor_debug"("START", "postfix:sym<++>")
+  debug_840:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1023_done
     goto rxscan1023_scan
@@ -13258,11 +14375,15 @@
     rx1019_pos = $P10."pos"()
   # rx pass
     rx1019_cur."!cursor_pass"(rx1019_pos, "postfix:sym<++>")
-    rx1019_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx1019_pos)
+    if_null rx1019_debug, debug_841
+    rx1019_cur."!cursor_debug"("PASS", "postfix:sym<++>", " at pos=", rx1019_pos)
+  debug_841:
     .return (rx1019_cur)
   rx1019_restart:
 .annotate 'line', 447
-    rx1019_cur."!cursor_debug"("NEXT ", "postfix:sym<++>")
+    if_null rx1019_debug, debug_842
+    rx1019_cur."!cursor_debug"("NEXT", "postfix:sym<++>")
+  debug_842:
   rx1019_fail:
     (rx1019_rep, rx1019_pos, $I10, $P10) = rx1019_cur."!mark_fail"(0)
     lt rx1019_pos, -1, rx1019_done
@@ -13270,14 +14391,16 @@
     jump $I10
   rx1019_done:
     rx1019_cur."!cursor_fail"()
-    rx1019_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
+    if_null rx1019_debug, debug_843
+    rx1019_cur."!cursor_debug"("FAIL", "postfix:sym<++>")
+  debug_843:
     .return (rx1019_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<++>"  :subid("259_1280467477.44751") :method
+.sub "!PREFIX__postfix:sym<++>"  :subid("259_1282324002.40722") :method
 .annotate 'line', 447
     $P1021 = self."!PREFIX__!subrule"("O", "++")
     new $P1022, "ResizablePMCArray"
@@ -13287,7 +14410,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<-->"  :subid("260_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "postfix:sym<-->"  :subid("260_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1026_tgt
     .local int rx1026_pos
@@ -13295,7 +14418,9 @@
     .local int rx1026_eos
     .local int rx1026_rep
     .local pmc rx1026_cur
+    .local pmc rx1026_debug
     (rx1026_cur, rx1026_pos, rx1026_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1026_debug, rx1026_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1026_cur
     .local pmc match
     .lex "$/", match
@@ -13307,7 +14432,9 @@
     substr rx1026_tgt, rx1026_tgt, rx1026_off
   rx1026_start:
     eq $I10, 1, rx1026_restart
-    rx1026_cur."!cursor_debug"("START ", "postfix:sym<-->")
+    if_null rx1026_debug, debug_844
+    rx1026_cur."!cursor_debug"("START", "postfix:sym<-->")
+  debug_844:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1030_done
     goto rxscan1030_scan
@@ -13351,11 +14478,15 @@
     rx1026_pos = $P10."pos"()
   # rx pass
     rx1026_cur."!cursor_pass"(rx1026_pos, "postfix:sym<-->")
-    rx1026_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx1026_pos)
+    if_null rx1026_debug, debug_845
+    rx1026_cur."!cursor_debug"("PASS", "postfix:sym<-->", " at pos=", rx1026_pos)
+  debug_845:
     .return (rx1026_cur)
   rx1026_restart:
 .annotate 'line', 447
-    rx1026_cur."!cursor_debug"("NEXT ", "postfix:sym<-->")
+    if_null rx1026_debug, debug_846
+    rx1026_cur."!cursor_debug"("NEXT", "postfix:sym<-->")
+  debug_846:
   rx1026_fail:
     (rx1026_rep, rx1026_pos, $I10, $P10) = rx1026_cur."!mark_fail"(0)
     lt rx1026_pos, -1, rx1026_done
@@ -13363,14 +14494,16 @@
     jump $I10
   rx1026_done:
     rx1026_cur."!cursor_fail"()
-    rx1026_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
+    if_null rx1026_debug, debug_847
+    rx1026_cur."!cursor_debug"("FAIL", "postfix:sym<-->")
+  debug_847:
     .return (rx1026_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<-->"  :subid("261_1280467477.44751") :method
+.sub "!PREFIX__postfix:sym<-->"  :subid("261_1282324002.40722") :method
 .annotate 'line', 447
     $P1028 = self."!PREFIX__!subrule"("O", "--")
     new $P1029, "ResizablePMCArray"
@@ -13380,7 +14513,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<**>"  :subid("262_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<**>"  :subid("262_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1033_tgt
     .local int rx1033_pos
@@ -13388,7 +14521,9 @@
     .local int rx1033_eos
     .local int rx1033_rep
     .local pmc rx1033_cur
+    .local pmc rx1033_debug
     (rx1033_cur, rx1033_pos, rx1033_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1033_debug, rx1033_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1033_cur
     .local pmc match
     .lex "$/", match
@@ -13400,7 +14535,9 @@
     substr rx1033_tgt, rx1033_tgt, rx1033_off
   rx1033_start:
     eq $I10, 1, rx1033_restart
-    rx1033_cur."!cursor_debug"("START ", "infix:sym<**>")
+    if_null rx1033_debug, debug_848
+    rx1033_cur."!cursor_debug"("START", "infix:sym<**>")
+  debug_848:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1037_done
     goto rxscan1037_scan
@@ -13444,11 +14581,15 @@
     rx1033_pos = $P10."pos"()
   # rx pass
     rx1033_cur."!cursor_pass"(rx1033_pos, "infix:sym<**>")
-    rx1033_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx1033_pos)
+    if_null rx1033_debug, debug_849
+    rx1033_cur."!cursor_debug"("PASS", "infix:sym<**>", " at pos=", rx1033_pos)
+  debug_849:
     .return (rx1033_cur)
   rx1033_restart:
 .annotate 'line', 447
-    rx1033_cur."!cursor_debug"("NEXT ", "infix:sym<**>")
+    if_null rx1033_debug, debug_850
+    rx1033_cur."!cursor_debug"("NEXT", "infix:sym<**>")
+  debug_850:
   rx1033_fail:
     (rx1033_rep, rx1033_pos, $I10, $P10) = rx1033_cur."!mark_fail"(0)
     lt rx1033_pos, -1, rx1033_done
@@ -13456,14 +14597,16 @@
     jump $I10
   rx1033_done:
     rx1033_cur."!cursor_fail"()
-    rx1033_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
+    if_null rx1033_debug, debug_851
+    rx1033_cur."!cursor_debug"("FAIL", "infix:sym<**>")
+  debug_851:
     .return (rx1033_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<**>"  :subid("263_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<**>"  :subid("263_1282324002.40722") :method
 .annotate 'line', 447
     $P1035 = self."!PREFIX__!subrule"("O", "**")
     new $P1036, "ResizablePMCArray"
@@ -13473,7 +14616,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<+>"  :subid("264_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<+>"  :subid("264_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1040_tgt
     .local int rx1040_pos
@@ -13481,7 +14624,9 @@
     .local int rx1040_eos
     .local int rx1040_rep
     .local pmc rx1040_cur
+    .local pmc rx1040_debug
     (rx1040_cur, rx1040_pos, rx1040_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1040_debug, rx1040_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1040_cur
     .local pmc match
     .lex "$/", match
@@ -13493,7 +14638,9 @@
     substr rx1040_tgt, rx1040_tgt, rx1040_off
   rx1040_start:
     eq $I10, 1, rx1040_restart
-    rx1040_cur."!cursor_debug"("START ", "prefix:sym<+>")
+    if_null rx1040_debug, debug_852
+    rx1040_cur."!cursor_debug"("START", "prefix:sym<+>")
+  debug_852:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1044_done
     goto rxscan1044_scan
@@ -13514,8 +14661,8 @@
     add $I11, rx1040_pos, 1
     gt $I11, rx1040_eos, rx1040_fail
     sub $I11, rx1040_pos, rx1040_off
-    substr $S10, rx1040_tgt, $I11, 1
-    ne $S10, "+", rx1040_fail
+    ord $I11, rx1040_tgt, $I11
+    ne $I11, 43, rx1040_fail
     add rx1040_pos, 1
     set_addr $I10, rxcap_1045_fail
     ($I12, $I11) = rx1040_cur."!mark_peek"($I10)
@@ -13537,11 +14684,15 @@
     rx1040_pos = $P10."pos"()
   # rx pass
     rx1040_cur."!cursor_pass"(rx1040_pos, "prefix:sym<+>")
-    rx1040_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx1040_pos)
+    if_null rx1040_debug, debug_853
+    rx1040_cur."!cursor_debug"("PASS", "prefix:sym<+>", " at pos=", rx1040_pos)
+  debug_853:
     .return (rx1040_cur)
   rx1040_restart:
 .annotate 'line', 447
-    rx1040_cur."!cursor_debug"("NEXT ", "prefix:sym<+>")
+    if_null rx1040_debug, debug_854
+    rx1040_cur."!cursor_debug"("NEXT", "prefix:sym<+>")
+  debug_854:
   rx1040_fail:
     (rx1040_rep, rx1040_pos, $I10, $P10) = rx1040_cur."!mark_fail"(0)
     lt rx1040_pos, -1, rx1040_done
@@ -13549,14 +14700,16 @@
     jump $I10
   rx1040_done:
     rx1040_cur."!cursor_fail"()
-    rx1040_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
+    if_null rx1040_debug, debug_855
+    rx1040_cur."!cursor_debug"("FAIL", "prefix:sym<+>")
+  debug_855:
     .return (rx1040_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<+>"  :subid("265_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<+>"  :subid("265_1282324002.40722") :method
 .annotate 'line', 447
     $P1042 = self."!PREFIX__!subrule"("O", "+")
     new $P1043, "ResizablePMCArray"
@@ -13566,7 +14719,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<~>"  :subid("266_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<~>"  :subid("266_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1047_tgt
     .local int rx1047_pos
@@ -13574,7 +14727,9 @@
     .local int rx1047_eos
     .local int rx1047_rep
     .local pmc rx1047_cur
+    .local pmc rx1047_debug
     (rx1047_cur, rx1047_pos, rx1047_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1047_debug, rx1047_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1047_cur
     .local pmc match
     .lex "$/", match
@@ -13586,7 +14741,9 @@
     substr rx1047_tgt, rx1047_tgt, rx1047_off
   rx1047_start:
     eq $I10, 1, rx1047_restart
-    rx1047_cur."!cursor_debug"("START ", "prefix:sym<~>")
+    if_null rx1047_debug, debug_856
+    rx1047_cur."!cursor_debug"("START", "prefix:sym<~>")
+  debug_856:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1051_done
     goto rxscan1051_scan
@@ -13607,8 +14764,8 @@
     add $I11, rx1047_pos, 1
     gt $I11, rx1047_eos, rx1047_fail
     sub $I11, rx1047_pos, rx1047_off
-    substr $S10, rx1047_tgt, $I11, 1
-    ne $S10, "~", rx1047_fail
+    ord $I11, rx1047_tgt, $I11
+    ne $I11, 126, rx1047_fail
     add rx1047_pos, 1
     set_addr $I10, rxcap_1052_fail
     ($I12, $I11) = rx1047_cur."!mark_peek"($I10)
@@ -13630,11 +14787,15 @@
     rx1047_pos = $P10."pos"()
   # rx pass
     rx1047_cur."!cursor_pass"(rx1047_pos, "prefix:sym<~>")
-    rx1047_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx1047_pos)
+    if_null rx1047_debug, debug_857
+    rx1047_cur."!cursor_debug"("PASS", "prefix:sym<~>", " at pos=", rx1047_pos)
+  debug_857:
     .return (rx1047_cur)
   rx1047_restart:
 .annotate 'line', 447
-    rx1047_cur."!cursor_debug"("NEXT ", "prefix:sym<~>")
+    if_null rx1047_debug, debug_858
+    rx1047_cur."!cursor_debug"("NEXT", "prefix:sym<~>")
+  debug_858:
   rx1047_fail:
     (rx1047_rep, rx1047_pos, $I10, $P10) = rx1047_cur."!mark_fail"(0)
     lt rx1047_pos, -1, rx1047_done
@@ -13642,14 +14803,16 @@
     jump $I10
   rx1047_done:
     rx1047_cur."!cursor_fail"()
-    rx1047_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
+    if_null rx1047_debug, debug_859
+    rx1047_cur."!cursor_debug"("FAIL", "prefix:sym<~>")
+  debug_859:
     .return (rx1047_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<~>"  :subid("267_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<~>"  :subid("267_1282324002.40722") :method
 .annotate 'line', 447
     $P1049 = self."!PREFIX__!subrule"("O", "~")
     new $P1050, "ResizablePMCArray"
@@ -13659,7 +14822,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<->"  :subid("268_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<->"  :subid("268_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1054_tgt
     .local int rx1054_pos
@@ -13667,7 +14830,9 @@
     .local int rx1054_eos
     .local int rx1054_rep
     .local pmc rx1054_cur
+    .local pmc rx1054_debug
     (rx1054_cur, rx1054_pos, rx1054_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1054_debug, rx1054_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1054_cur
     .local pmc match
     .lex "$/", match
@@ -13679,7 +14844,9 @@
     substr rx1054_tgt, rx1054_tgt, rx1054_off
   rx1054_start:
     eq $I10, 1, rx1054_restart
-    rx1054_cur."!cursor_debug"("START ", "prefix:sym<->")
+    if_null rx1054_debug, debug_860
+    rx1054_cur."!cursor_debug"("START", "prefix:sym<->")
+  debug_860:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1057_done
     goto rxscan1057_scan
@@ -13700,8 +14867,8 @@
     add $I11, rx1054_pos, 1
     gt $I11, rx1054_eos, rx1054_fail
     sub $I11, rx1054_pos, rx1054_off
-    substr $S10, rx1054_tgt, $I11, 1
-    ne $S10, "-", rx1054_fail
+    ord $I11, rx1054_tgt, $I11
+    ne $I11, 45, rx1054_fail
     add rx1054_pos, 1
     set_addr $I10, rxcap_1058_fail
     ($I12, $I11) = rx1054_cur."!mark_peek"($I10)
@@ -13733,11 +14900,15 @@
     rx1054_pos = $P10."pos"()
   # rx pass
     rx1054_cur."!cursor_pass"(rx1054_pos, "prefix:sym<->")
-    rx1054_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx1054_pos)
+    if_null rx1054_debug, debug_861
+    rx1054_cur."!cursor_debug"("PASS", "prefix:sym<->", " at pos=", rx1054_pos)
+  debug_861:
     .return (rx1054_cur)
   rx1054_restart:
 .annotate 'line', 447
-    rx1054_cur."!cursor_debug"("NEXT ", "prefix:sym<->")
+    if_null rx1054_debug, debug_862
+    rx1054_cur."!cursor_debug"("NEXT", "prefix:sym<->")
+  debug_862:
   rx1054_fail:
     (rx1054_rep, rx1054_pos, $I10, $P10) = rx1054_cur."!mark_fail"(0)
     lt rx1054_pos, -1, rx1054_done
@@ -13745,14 +14916,16 @@
     jump $I10
   rx1054_done:
     rx1054_cur."!cursor_fail"()
-    rx1054_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
+    if_null rx1054_debug, debug_863
+    rx1054_cur."!cursor_debug"("FAIL", "prefix:sym<->")
+  debug_863:
     .return (rx1054_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<->"  :subid("269_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<->"  :subid("269_1282324002.40722") :method
 .annotate 'line', 447
     new $P1056, "ResizablePMCArray"
     push $P1056, "-"
@@ -13761,7 +14934,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<?>"  :subid("270_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<?>"  :subid("270_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1060_tgt
     .local int rx1060_pos
@@ -13769,7 +14942,9 @@
     .local int rx1060_eos
     .local int rx1060_rep
     .local pmc rx1060_cur
+    .local pmc rx1060_debug
     (rx1060_cur, rx1060_pos, rx1060_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1060_debug, rx1060_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1060_cur
     .local pmc match
     .lex "$/", match
@@ -13781,7 +14956,9 @@
     substr rx1060_tgt, rx1060_tgt, rx1060_off
   rx1060_start:
     eq $I10, 1, rx1060_restart
-    rx1060_cur."!cursor_debug"("START ", "prefix:sym<?>")
+    if_null rx1060_debug, debug_864
+    rx1060_cur."!cursor_debug"("START", "prefix:sym<?>")
+  debug_864:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1064_done
     goto rxscan1064_scan
@@ -13802,8 +14979,8 @@
     add $I11, rx1060_pos, 1
     gt $I11, rx1060_eos, rx1060_fail
     sub $I11, rx1060_pos, rx1060_off
-    substr $S10, rx1060_tgt, $I11, 1
-    ne $S10, "?", rx1060_fail
+    ord $I11, rx1060_tgt, $I11
+    ne $I11, 63, rx1060_fail
     add rx1060_pos, 1
     set_addr $I10, rxcap_1065_fail
     ($I12, $I11) = rx1060_cur."!mark_peek"($I10)
@@ -13825,11 +15002,15 @@
     rx1060_pos = $P10."pos"()
   # rx pass
     rx1060_cur."!cursor_pass"(rx1060_pos, "prefix:sym<?>")
-    rx1060_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx1060_pos)
+    if_null rx1060_debug, debug_865
+    rx1060_cur."!cursor_debug"("PASS", "prefix:sym<?>", " at pos=", rx1060_pos)
+  debug_865:
     .return (rx1060_cur)
   rx1060_restart:
 .annotate 'line', 447
-    rx1060_cur."!cursor_debug"("NEXT ", "prefix:sym<?>")
+    if_null rx1060_debug, debug_866
+    rx1060_cur."!cursor_debug"("NEXT", "prefix:sym<?>")
+  debug_866:
   rx1060_fail:
     (rx1060_rep, rx1060_pos, $I10, $P10) = rx1060_cur."!mark_fail"(0)
     lt rx1060_pos, -1, rx1060_done
@@ -13837,14 +15018,16 @@
     jump $I10
   rx1060_done:
     rx1060_cur."!cursor_fail"()
-    rx1060_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
+    if_null rx1060_debug, debug_867
+    rx1060_cur."!cursor_debug"("FAIL", "prefix:sym<?>")
+  debug_867:
     .return (rx1060_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<?>"  :subid("271_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<?>"  :subid("271_1282324002.40722") :method
 .annotate 'line', 447
     $P1062 = self."!PREFIX__!subrule"("O", "?")
     new $P1063, "ResizablePMCArray"
@@ -13854,7 +15037,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<!>"  :subid("272_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<!>"  :subid("272_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1067_tgt
     .local int rx1067_pos
@@ -13862,7 +15045,9 @@
     .local int rx1067_eos
     .local int rx1067_rep
     .local pmc rx1067_cur
+    .local pmc rx1067_debug
     (rx1067_cur, rx1067_pos, rx1067_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1067_debug, rx1067_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1067_cur
     .local pmc match
     .lex "$/", match
@@ -13874,7 +15059,9 @@
     substr rx1067_tgt, rx1067_tgt, rx1067_off
   rx1067_start:
     eq $I10, 1, rx1067_restart
-    rx1067_cur."!cursor_debug"("START ", "prefix:sym<!>")
+    if_null rx1067_debug, debug_868
+    rx1067_cur."!cursor_debug"("START", "prefix:sym<!>")
+  debug_868:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1071_done
     goto rxscan1071_scan
@@ -13895,8 +15082,8 @@
     add $I11, rx1067_pos, 1
     gt $I11, rx1067_eos, rx1067_fail
     sub $I11, rx1067_pos, rx1067_off
-    substr $S10, rx1067_tgt, $I11, 1
-    ne $S10, "!", rx1067_fail
+    ord $I11, rx1067_tgt, $I11
+    ne $I11, 33, rx1067_fail
     add rx1067_pos, 1
     set_addr $I10, rxcap_1072_fail
     ($I12, $I11) = rx1067_cur."!mark_peek"($I10)
@@ -13918,11 +15105,15 @@
     rx1067_pos = $P10."pos"()
   # rx pass
     rx1067_cur."!cursor_pass"(rx1067_pos, "prefix:sym<!>")
-    rx1067_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1067_pos)
+    if_null rx1067_debug, debug_869
+    rx1067_cur."!cursor_debug"("PASS", "prefix:sym<!>", " at pos=", rx1067_pos)
+  debug_869:
     .return (rx1067_cur)
   rx1067_restart:
 .annotate 'line', 447
-    rx1067_cur."!cursor_debug"("NEXT ", "prefix:sym<!>")
+    if_null rx1067_debug, debug_870
+    rx1067_cur."!cursor_debug"("NEXT", "prefix:sym<!>")
+  debug_870:
   rx1067_fail:
     (rx1067_rep, rx1067_pos, $I10, $P10) = rx1067_cur."!mark_fail"(0)
     lt rx1067_pos, -1, rx1067_done
@@ -13930,14 +15121,16 @@
     jump $I10
   rx1067_done:
     rx1067_cur."!cursor_fail"()
-    rx1067_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
+    if_null rx1067_debug, debug_871
+    rx1067_cur."!cursor_debug"("FAIL", "prefix:sym<!>")
+  debug_871:
     .return (rx1067_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<!>"  :subid("273_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<!>"  :subid("273_1282324002.40722") :method
 .annotate 'line', 447
     $P1069 = self."!PREFIX__!subrule"("O", "!")
     new $P1070, "ResizablePMCArray"
@@ -13947,7 +15140,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<|>"  :subid("274_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<|>"  :subid("274_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1074_tgt
     .local int rx1074_pos
@@ -13955,7 +15148,9 @@
     .local int rx1074_eos
     .local int rx1074_rep
     .local pmc rx1074_cur
+    .local pmc rx1074_debug
     (rx1074_cur, rx1074_pos, rx1074_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1074_debug, rx1074_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1074_cur
     .local pmc match
     .lex "$/", match
@@ -13967,7 +15162,9 @@
     substr rx1074_tgt, rx1074_tgt, rx1074_off
   rx1074_start:
     eq $I10, 1, rx1074_restart
-    rx1074_cur."!cursor_debug"("START ", "prefix:sym<|>")
+    if_null rx1074_debug, debug_872
+    rx1074_cur."!cursor_debug"("START", "prefix:sym<|>")
+  debug_872:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1078_done
     goto rxscan1078_scan
@@ -13988,8 +15185,8 @@
     add $I11, rx1074_pos, 1
     gt $I11, rx1074_eos, rx1074_fail
     sub $I11, rx1074_pos, rx1074_off
-    substr $S10, rx1074_tgt, $I11, 1
-    ne $S10, "|", rx1074_fail
+    ord $I11, rx1074_tgt, $I11
+    ne $I11, 124, rx1074_fail
     add rx1074_pos, 1
     set_addr $I10, rxcap_1079_fail
     ($I12, $I11) = rx1074_cur."!mark_peek"($I10)
@@ -14011,11 +15208,15 @@
     rx1074_pos = $P10."pos"()
   # rx pass
     rx1074_cur."!cursor_pass"(rx1074_pos, "prefix:sym<|>")
-    rx1074_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1074_pos)
+    if_null rx1074_debug, debug_873
+    rx1074_cur."!cursor_debug"("PASS", "prefix:sym<|>", " at pos=", rx1074_pos)
+  debug_873:
     .return (rx1074_cur)
   rx1074_restart:
 .annotate 'line', 447
-    rx1074_cur."!cursor_debug"("NEXT ", "prefix:sym<|>")
+    if_null rx1074_debug, debug_874
+    rx1074_cur."!cursor_debug"("NEXT", "prefix:sym<|>")
+  debug_874:
   rx1074_fail:
     (rx1074_rep, rx1074_pos, $I10, $P10) = rx1074_cur."!mark_fail"(0)
     lt rx1074_pos, -1, rx1074_done
@@ -14023,14 +15224,16 @@
     jump $I10
   rx1074_done:
     rx1074_cur."!cursor_fail"()
-    rx1074_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
+    if_null rx1074_debug, debug_875
+    rx1074_cur."!cursor_debug"("FAIL", "prefix:sym<|>")
+  debug_875:
     .return (rx1074_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<|>"  :subid("275_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<|>"  :subid("275_1282324002.40722") :method
 .annotate 'line', 447
     $P1076 = self."!PREFIX__!subrule"("O", "|")
     new $P1077, "ResizablePMCArray"
@@ -14040,7 +15243,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<*>"  :subid("276_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<*>"  :subid("276_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1081_tgt
     .local int rx1081_pos
@@ -14048,7 +15251,9 @@
     .local int rx1081_eos
     .local int rx1081_rep
     .local pmc rx1081_cur
+    .local pmc rx1081_debug
     (rx1081_cur, rx1081_pos, rx1081_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1081_debug, rx1081_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1081_cur
     .local pmc match
     .lex "$/", match
@@ -14060,7 +15265,9 @@
     substr rx1081_tgt, rx1081_tgt, rx1081_off
   rx1081_start:
     eq $I10, 1, rx1081_restart
-    rx1081_cur."!cursor_debug"("START ", "infix:sym<*>")
+    if_null rx1081_debug, debug_876
+    rx1081_cur."!cursor_debug"("START", "infix:sym<*>")
+  debug_876:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1085_done
     goto rxscan1085_scan
@@ -14081,8 +15288,8 @@
     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
+    ord $I11, rx1081_tgt, $I11
+    ne $I11, 42, rx1081_fail
     add rx1081_pos, 1
     set_addr $I10, rxcap_1086_fail
     ($I12, $I11) = rx1081_cur."!mark_peek"($I10)
@@ -14104,11 +15311,15 @@
     rx1081_pos = $P10."pos"()
   # rx pass
     rx1081_cur."!cursor_pass"(rx1081_pos, "infix:sym<*>")
-    rx1081_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1081_pos)
+    if_null rx1081_debug, debug_877
+    rx1081_cur."!cursor_debug"("PASS", "infix:sym<*>", " at pos=", rx1081_pos)
+  debug_877:
     .return (rx1081_cur)
   rx1081_restart:
 .annotate 'line', 447
-    rx1081_cur."!cursor_debug"("NEXT ", "infix:sym<*>")
+    if_null rx1081_debug, debug_878
+    rx1081_cur."!cursor_debug"("NEXT", "infix:sym<*>")
+  debug_878:
   rx1081_fail:
     (rx1081_rep, rx1081_pos, $I10, $P10) = rx1081_cur."!mark_fail"(0)
     lt rx1081_pos, -1, rx1081_done
@@ -14116,14 +15327,16 @@
     jump $I10
   rx1081_done:
     rx1081_cur."!cursor_fail"()
-    rx1081_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
+    if_null rx1081_debug, debug_879
+    rx1081_cur."!cursor_debug"("FAIL", "infix:sym<*>")
+  debug_879:
     .return (rx1081_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<*>"  :subid("277_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<*>"  :subid("277_1282324002.40722") :method
 .annotate 'line', 447
     $P1083 = self."!PREFIX__!subrule"("O", "*")
     new $P1084, "ResizablePMCArray"
@@ -14133,7 +15346,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym</>"  :subid("278_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym</>"  :subid("278_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1088_tgt
     .local int rx1088_pos
@@ -14141,7 +15354,9 @@
     .local int rx1088_eos
     .local int rx1088_rep
     .local pmc rx1088_cur
+    .local pmc rx1088_debug
     (rx1088_cur, rx1088_pos, rx1088_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1088_debug, rx1088_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1088_cur
     .local pmc match
     .lex "$/", match
@@ -14153,7 +15368,9 @@
     substr rx1088_tgt, rx1088_tgt, rx1088_off
   rx1088_start:
     eq $I10, 1, rx1088_restart
-    rx1088_cur."!cursor_debug"("START ", "infix:sym</>")
+    if_null rx1088_debug, debug_880
+    rx1088_cur."!cursor_debug"("START", "infix:sym</>")
+  debug_880:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1092_done
     goto rxscan1092_scan
@@ -14174,8 +15391,8 @@
     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
+    ord $I11, rx1088_tgt, $I11
+    ne $I11, 47, rx1088_fail
     add rx1088_pos, 1
     set_addr $I10, rxcap_1093_fail
     ($I12, $I11) = rx1088_cur."!mark_peek"($I10)
@@ -14197,11 +15414,15 @@
     rx1088_pos = $P10."pos"()
   # rx pass
     rx1088_cur."!cursor_pass"(rx1088_pos, "infix:sym</>")
-    rx1088_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1088_pos)
+    if_null rx1088_debug, debug_881
+    rx1088_cur."!cursor_debug"("PASS", "infix:sym</>", " at pos=", rx1088_pos)
+  debug_881:
     .return (rx1088_cur)
   rx1088_restart:
 .annotate 'line', 447
-    rx1088_cur."!cursor_debug"("NEXT ", "infix:sym</>")
+    if_null rx1088_debug, debug_882
+    rx1088_cur."!cursor_debug"("NEXT", "infix:sym</>")
+  debug_882:
   rx1088_fail:
     (rx1088_rep, rx1088_pos, $I10, $P10) = rx1088_cur."!mark_fail"(0)
     lt rx1088_pos, -1, rx1088_done
@@ -14209,14 +15430,16 @@
     jump $I10
   rx1088_done:
     rx1088_cur."!cursor_fail"()
-    rx1088_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
+    if_null rx1088_debug, debug_883
+    rx1088_cur."!cursor_debug"("FAIL", "infix:sym</>")
+  debug_883:
     .return (rx1088_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym</>"  :subid("279_1280467477.44751") :method
+.sub "!PREFIX__infix:sym</>"  :subid("279_1282324002.40722") :method
 .annotate 'line', 447
     $P1090 = self."!PREFIX__!subrule"("O", "/")
     new $P1091, "ResizablePMCArray"
@@ -14226,7 +15449,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<%>"  :subid("280_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<%>"  :subid("280_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1095_tgt
     .local int rx1095_pos
@@ -14234,7 +15457,9 @@
     .local int rx1095_eos
     .local int rx1095_rep
     .local pmc rx1095_cur
+    .local pmc rx1095_debug
     (rx1095_cur, rx1095_pos, rx1095_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1095_debug, rx1095_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1095_cur
     .local pmc match
     .lex "$/", match
@@ -14246,7 +15471,9 @@
     substr rx1095_tgt, rx1095_tgt, rx1095_off
   rx1095_start:
     eq $I10, 1, rx1095_restart
-    rx1095_cur."!cursor_debug"("START ", "infix:sym<%>")
+    if_null rx1095_debug, debug_884
+    rx1095_cur."!cursor_debug"("START", "infix:sym<%>")
+  debug_884:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1099_done
     goto rxscan1099_scan
@@ -14267,8 +15494,8 @@
     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
+    ord $I11, rx1095_tgt, $I11
+    ne $I11, 37, rx1095_fail
     add rx1095_pos, 1
     set_addr $I10, rxcap_1100_fail
     ($I12, $I11) = rx1095_cur."!mark_peek"($I10)
@@ -14290,11 +15517,15 @@
     rx1095_pos = $P10."pos"()
   # rx pass
     rx1095_cur."!cursor_pass"(rx1095_pos, "infix:sym<%>")
-    rx1095_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1095_pos)
+    if_null rx1095_debug, debug_885
+    rx1095_cur."!cursor_debug"("PASS", "infix:sym<%>", " at pos=", rx1095_pos)
+  debug_885:
     .return (rx1095_cur)
   rx1095_restart:
 .annotate 'line', 447
-    rx1095_cur."!cursor_debug"("NEXT ", "infix:sym<%>")
+    if_null rx1095_debug, debug_886
+    rx1095_cur."!cursor_debug"("NEXT", "infix:sym<%>")
+  debug_886:
   rx1095_fail:
     (rx1095_rep, rx1095_pos, $I10, $P10) = rx1095_cur."!mark_fail"(0)
     lt rx1095_pos, -1, rx1095_done
@@ -14302,14 +15533,16 @@
     jump $I10
   rx1095_done:
     rx1095_cur."!cursor_fail"()
-    rx1095_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
+    if_null rx1095_debug, debug_887
+    rx1095_cur."!cursor_debug"("FAIL", "infix:sym<%>")
+  debug_887:
     .return (rx1095_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<%>"  :subid("281_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<%>"  :subid("281_1282324002.40722") :method
 .annotate 'line', 447
     $P1097 = self."!PREFIX__!subrule"("O", "%")
     new $P1098, "ResizablePMCArray"
@@ -14319,7 +15552,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+&>"  :subid("282_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<+&>"  :subid("282_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1102_tgt
     .local int rx1102_pos
@@ -14327,7 +15560,9 @@
     .local int rx1102_eos
     .local int rx1102_rep
     .local pmc rx1102_cur
+    .local pmc rx1102_debug
     (rx1102_cur, rx1102_pos, rx1102_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1102_debug, rx1102_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1102_cur
     .local pmc match
     .lex "$/", match
@@ -14339,7 +15574,9 @@
     substr rx1102_tgt, rx1102_tgt, rx1102_off
   rx1102_start:
     eq $I10, 1, rx1102_restart
-    rx1102_cur."!cursor_debug"("START ", "infix:sym<+&>")
+    if_null rx1102_debug, debug_888
+    rx1102_cur."!cursor_debug"("START", "infix:sym<+&>")
+  debug_888:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1106_done
     goto rxscan1106_scan
@@ -14383,11 +15620,15 @@
     rx1102_pos = $P10."pos"()
   # rx pass
     rx1102_cur."!cursor_pass"(rx1102_pos, "infix:sym<+&>")
-    rx1102_cur."!cursor_debug"("PASS  ", "infix:sym<+&>", " at pos=", rx1102_pos)
+    if_null rx1102_debug, debug_889
+    rx1102_cur."!cursor_debug"("PASS", "infix:sym<+&>", " at pos=", rx1102_pos)
+  debug_889:
     .return (rx1102_cur)
   rx1102_restart:
 .annotate 'line', 447
-    rx1102_cur."!cursor_debug"("NEXT ", "infix:sym<+&>")
+    if_null rx1102_debug, debug_890
+    rx1102_cur."!cursor_debug"("NEXT", "infix:sym<+&>")
+  debug_890:
   rx1102_fail:
     (rx1102_rep, rx1102_pos, $I10, $P10) = rx1102_cur."!mark_fail"(0)
     lt rx1102_pos, -1, rx1102_done
@@ -14395,14 +15636,16 @@
     jump $I10
   rx1102_done:
     rx1102_cur."!cursor_fail"()
-    rx1102_cur."!cursor_debug"("FAIL  ", "infix:sym<+&>")
+    if_null rx1102_debug, debug_891
+    rx1102_cur."!cursor_debug"("FAIL", "infix:sym<+&>")
+  debug_891:
     .return (rx1102_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+&>"  :subid("283_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<+&>"  :subid("283_1282324002.40722") :method
 .annotate 'line', 447
     $P1104 = self."!PREFIX__!subrule"("O", "+&")
     new $P1105, "ResizablePMCArray"
@@ -14412,7 +15655,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+>"  :subid("284_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<+>"  :subid("284_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1109_tgt
     .local int rx1109_pos
@@ -14420,7 +15663,9 @@
     .local int rx1109_eos
     .local int rx1109_rep
     .local pmc rx1109_cur
+    .local pmc rx1109_debug
     (rx1109_cur, rx1109_pos, rx1109_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1109_debug, rx1109_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1109_cur
     .local pmc match
     .lex "$/", match
@@ -14432,7 +15677,9 @@
     substr rx1109_tgt, rx1109_tgt, rx1109_off
   rx1109_start:
     eq $I10, 1, rx1109_restart
-    rx1109_cur."!cursor_debug"("START ", "infix:sym<+>")
+    if_null rx1109_debug, debug_892
+    rx1109_cur."!cursor_debug"("START", "infix:sym<+>")
+  debug_892:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1113_done
     goto rxscan1113_scan
@@ -14453,8 +15700,8 @@
     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
+    ord $I11, rx1109_tgt, $I11
+    ne $I11, 43, rx1109_fail
     add rx1109_pos, 1
     set_addr $I10, rxcap_1114_fail
     ($I12, $I11) = rx1109_cur."!mark_peek"($I10)
@@ -14476,11 +15723,15 @@
     rx1109_pos = $P10."pos"()
   # rx pass
     rx1109_cur."!cursor_pass"(rx1109_pos, "infix:sym<+>")
-    rx1109_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1109_pos)
+    if_null rx1109_debug, debug_893
+    rx1109_cur."!cursor_debug"("PASS", "infix:sym<+>", " at pos=", rx1109_pos)
+  debug_893:
     .return (rx1109_cur)
   rx1109_restart:
 .annotate 'line', 447
-    rx1109_cur."!cursor_debug"("NEXT ", "infix:sym<+>")
+    if_null rx1109_debug, debug_894
+    rx1109_cur."!cursor_debug"("NEXT", "infix:sym<+>")
+  debug_894:
   rx1109_fail:
     (rx1109_rep, rx1109_pos, $I10, $P10) = rx1109_cur."!mark_fail"(0)
     lt rx1109_pos, -1, rx1109_done
@@ -14488,14 +15739,16 @@
     jump $I10
   rx1109_done:
     rx1109_cur."!cursor_fail"()
-    rx1109_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
+    if_null rx1109_debug, debug_895
+    rx1109_cur."!cursor_debug"("FAIL", "infix:sym<+>")
+  debug_895:
     .return (rx1109_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+>"  :subid("285_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<+>"  :subid("285_1282324002.40722") :method
 .annotate 'line', 447
     $P1111 = self."!PREFIX__!subrule"("O", "+")
     new $P1112, "ResizablePMCArray"
@@ -14505,7 +15758,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<->"  :subid("286_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<->"  :subid("286_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1116_tgt
     .local int rx1116_pos
@@ -14513,7 +15766,9 @@
     .local int rx1116_eos
     .local int rx1116_rep
     .local pmc rx1116_cur
+    .local pmc rx1116_debug
     (rx1116_cur, rx1116_pos, rx1116_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1116_debug, rx1116_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1116_cur
     .local pmc match
     .lex "$/", match
@@ -14525,7 +15780,9 @@
     substr rx1116_tgt, rx1116_tgt, rx1116_off
   rx1116_start:
     eq $I10, 1, rx1116_restart
-    rx1116_cur."!cursor_debug"("START ", "infix:sym<->")
+    if_null rx1116_debug, debug_896
+    rx1116_cur."!cursor_debug"("START", "infix:sym<->")
+  debug_896:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1120_done
     goto rxscan1120_scan
@@ -14546,8 +15803,8 @@
     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
+    ord $I11, rx1116_tgt, $I11
+    ne $I11, 45, rx1116_fail
     add rx1116_pos, 1
     set_addr $I10, rxcap_1121_fail
     ($I12, $I11) = rx1116_cur."!mark_peek"($I10)
@@ -14569,11 +15826,15 @@
     rx1116_pos = $P10."pos"()
   # rx pass
     rx1116_cur."!cursor_pass"(rx1116_pos, "infix:sym<->")
-    rx1116_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1116_pos)
+    if_null rx1116_debug, debug_897
+    rx1116_cur."!cursor_debug"("PASS", "infix:sym<->", " at pos=", rx1116_pos)
+  debug_897:
     .return (rx1116_cur)
   rx1116_restart:
 .annotate 'line', 447
-    rx1116_cur."!cursor_debug"("NEXT ", "infix:sym<->")
+    if_null rx1116_debug, debug_898
+    rx1116_cur."!cursor_debug"("NEXT", "infix:sym<->")
+  debug_898:
   rx1116_fail:
     (rx1116_rep, rx1116_pos, $I10, $P10) = rx1116_cur."!mark_fail"(0)
     lt rx1116_pos, -1, rx1116_done
@@ -14581,14 +15842,16 @@
     jump $I10
   rx1116_done:
     rx1116_cur."!cursor_fail"()
-    rx1116_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
+    if_null rx1116_debug, debug_899
+    rx1116_cur."!cursor_debug"("FAIL", "infix:sym<->")
+  debug_899:
     .return (rx1116_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<->"  :subid("287_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<->"  :subid("287_1282324002.40722") :method
 .annotate 'line', 447
     $P1118 = self."!PREFIX__!subrule"("O", "-")
     new $P1119, "ResizablePMCArray"
@@ -14598,7 +15861,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+|>"  :subid("288_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<+|>"  :subid("288_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1123_tgt
     .local int rx1123_pos
@@ -14606,7 +15869,9 @@
     .local int rx1123_eos
     .local int rx1123_rep
     .local pmc rx1123_cur
+    .local pmc rx1123_debug
     (rx1123_cur, rx1123_pos, rx1123_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1123_debug, rx1123_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1123_cur
     .local pmc match
     .lex "$/", match
@@ -14618,7 +15883,9 @@
     substr rx1123_tgt, rx1123_tgt, rx1123_off
   rx1123_start:
     eq $I10, 1, rx1123_restart
-    rx1123_cur."!cursor_debug"("START ", "infix:sym<+|>")
+    if_null rx1123_debug, debug_900
+    rx1123_cur."!cursor_debug"("START", "infix:sym<+|>")
+  debug_900:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1127_done
     goto rxscan1127_scan
@@ -14662,11 +15929,15 @@
     rx1123_pos = $P10."pos"()
   # rx pass
     rx1123_cur."!cursor_pass"(rx1123_pos, "infix:sym<+|>")
-    rx1123_cur."!cursor_debug"("PASS  ", "infix:sym<+|>", " at pos=", rx1123_pos)
+    if_null rx1123_debug, debug_901
+    rx1123_cur."!cursor_debug"("PASS", "infix:sym<+|>", " at pos=", rx1123_pos)
+  debug_901:
     .return (rx1123_cur)
   rx1123_restart:
 .annotate 'line', 447
-    rx1123_cur."!cursor_debug"("NEXT ", "infix:sym<+|>")
+    if_null rx1123_debug, debug_902
+    rx1123_cur."!cursor_debug"("NEXT", "infix:sym<+|>")
+  debug_902:
   rx1123_fail:
     (rx1123_rep, rx1123_pos, $I10, $P10) = rx1123_cur."!mark_fail"(0)
     lt rx1123_pos, -1, rx1123_done
@@ -14674,14 +15945,16 @@
     jump $I10
   rx1123_done:
     rx1123_cur."!cursor_fail"()
-    rx1123_cur."!cursor_debug"("FAIL  ", "infix:sym<+|>")
+    if_null rx1123_debug, debug_903
+    rx1123_cur."!cursor_debug"("FAIL", "infix:sym<+|>")
+  debug_903:
     .return (rx1123_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+|>"  :subid("289_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<+|>"  :subid("289_1282324002.40722") :method
 .annotate 'line', 447
     $P1125 = self."!PREFIX__!subrule"("O", "+|")
     new $P1126, "ResizablePMCArray"
@@ -14691,7 +15964,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+^>"  :subid("290_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<+^>"  :subid("290_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1130_tgt
     .local int rx1130_pos
@@ -14699,7 +15972,9 @@
     .local int rx1130_eos
     .local int rx1130_rep
     .local pmc rx1130_cur
+    .local pmc rx1130_debug
     (rx1130_cur, rx1130_pos, rx1130_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1130_debug, rx1130_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1130_cur
     .local pmc match
     .lex "$/", match
@@ -14711,7 +15986,9 @@
     substr rx1130_tgt, rx1130_tgt, rx1130_off
   rx1130_start:
     eq $I10, 1, rx1130_restart
-    rx1130_cur."!cursor_debug"("START ", "infix:sym<+^>")
+    if_null rx1130_debug, debug_904
+    rx1130_cur."!cursor_debug"("START", "infix:sym<+^>")
+  debug_904:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1134_done
     goto rxscan1134_scan
@@ -14755,11 +16032,15 @@
     rx1130_pos = $P10."pos"()
   # rx pass
     rx1130_cur."!cursor_pass"(rx1130_pos, "infix:sym<+^>")
-    rx1130_cur."!cursor_debug"("PASS  ", "infix:sym<+^>", " at pos=", rx1130_pos)
+    if_null rx1130_debug, debug_905
+    rx1130_cur."!cursor_debug"("PASS", "infix:sym<+^>", " at pos=", rx1130_pos)
+  debug_905:
     .return (rx1130_cur)
   rx1130_restart:
 .annotate 'line', 447
-    rx1130_cur."!cursor_debug"("NEXT ", "infix:sym<+^>")
+    if_null rx1130_debug, debug_906
+    rx1130_cur."!cursor_debug"("NEXT", "infix:sym<+^>")
+  debug_906:
   rx1130_fail:
     (rx1130_rep, rx1130_pos, $I10, $P10) = rx1130_cur."!mark_fail"(0)
     lt rx1130_pos, -1, rx1130_done
@@ -14767,14 +16048,16 @@
     jump $I10
   rx1130_done:
     rx1130_cur."!cursor_fail"()
-    rx1130_cur."!cursor_debug"("FAIL  ", "infix:sym<+^>")
+    if_null rx1130_debug, debug_907
+    rx1130_cur."!cursor_debug"("FAIL", "infix:sym<+^>")
+  debug_907:
     .return (rx1130_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+^>"  :subid("291_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<+^>"  :subid("291_1282324002.40722") :method
 .annotate 'line', 447
     $P1132 = self."!PREFIX__!subrule"("O", "+^")
     new $P1133, "ResizablePMCArray"
@@ -14784,7 +16067,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~>"  :subid("292_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<~>"  :subid("292_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1137_tgt
     .local int rx1137_pos
@@ -14792,7 +16075,9 @@
     .local int rx1137_eos
     .local int rx1137_rep
     .local pmc rx1137_cur
+    .local pmc rx1137_debug
     (rx1137_cur, rx1137_pos, rx1137_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1137_debug, rx1137_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1137_cur
     .local pmc match
     .lex "$/", match
@@ -14804,7 +16089,9 @@
     substr rx1137_tgt, rx1137_tgt, rx1137_off
   rx1137_start:
     eq $I10, 1, rx1137_restart
-    rx1137_cur."!cursor_debug"("START ", "infix:sym<~>")
+    if_null rx1137_debug, debug_908
+    rx1137_cur."!cursor_debug"("START", "infix:sym<~>")
+  debug_908:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1141_done
     goto rxscan1141_scan
@@ -14825,8 +16112,8 @@
     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
+    ord $I11, rx1137_tgt, $I11
+    ne $I11, 126, rx1137_fail
     add rx1137_pos, 1
     set_addr $I10, rxcap_1142_fail
     ($I12, $I11) = rx1137_cur."!mark_peek"($I10)
@@ -14848,11 +16135,15 @@
     rx1137_pos = $P10."pos"()
   # rx pass
     rx1137_cur."!cursor_pass"(rx1137_pos, "infix:sym<~>")
-    rx1137_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1137_pos)
+    if_null rx1137_debug, debug_909
+    rx1137_cur."!cursor_debug"("PASS", "infix:sym<~>", " at pos=", rx1137_pos)
+  debug_909:
     .return (rx1137_cur)
   rx1137_restart:
 .annotate 'line', 447
-    rx1137_cur."!cursor_debug"("NEXT ", "infix:sym<~>")
+    if_null rx1137_debug, debug_910
+    rx1137_cur."!cursor_debug"("NEXT", "infix:sym<~>")
+  debug_910:
   rx1137_fail:
     (rx1137_rep, rx1137_pos, $I10, $P10) = rx1137_cur."!mark_fail"(0)
     lt rx1137_pos, -1, rx1137_done
@@ -14860,14 +16151,16 @@
     jump $I10
   rx1137_done:
     rx1137_cur."!cursor_fail"()
-    rx1137_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
+    if_null rx1137_debug, debug_911
+    rx1137_cur."!cursor_debug"("FAIL", "infix:sym<~>")
+  debug_911:
     .return (rx1137_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~>"  :subid("293_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<~>"  :subid("293_1282324002.40722") :method
 .annotate 'line', 447
     $P1139 = self."!PREFIX__!subrule"("O", "~")
     new $P1140, "ResizablePMCArray"
@@ -14877,7 +16170,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<==>"  :subid("294_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<==>"  :subid("294_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1144_tgt
     .local int rx1144_pos
@@ -14885,7 +16178,9 @@
     .local int rx1144_eos
     .local int rx1144_rep
     .local pmc rx1144_cur
+    .local pmc rx1144_debug
     (rx1144_cur, rx1144_pos, rx1144_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1144_debug, rx1144_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1144_cur
     .local pmc match
     .lex "$/", match
@@ -14897,7 +16192,9 @@
     substr rx1144_tgt, rx1144_tgt, rx1144_off
   rx1144_start:
     eq $I10, 1, rx1144_restart
-    rx1144_cur."!cursor_debug"("START ", "infix:sym<==>")
+    if_null rx1144_debug, debug_912
+    rx1144_cur."!cursor_debug"("START", "infix:sym<==>")
+  debug_912:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1148_done
     goto rxscan1148_scan
@@ -14941,11 +16238,15 @@
     rx1144_pos = $P10."pos"()
   # rx pass
     rx1144_cur."!cursor_pass"(rx1144_pos, "infix:sym<==>")
-    rx1144_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1144_pos)
+    if_null rx1144_debug, debug_913
+    rx1144_cur."!cursor_debug"("PASS", "infix:sym<==>", " at pos=", rx1144_pos)
+  debug_913:
     .return (rx1144_cur)
   rx1144_restart:
 .annotate 'line', 447
-    rx1144_cur."!cursor_debug"("NEXT ", "infix:sym<==>")
+    if_null rx1144_debug, debug_914
+    rx1144_cur."!cursor_debug"("NEXT", "infix:sym<==>")
+  debug_914:
   rx1144_fail:
     (rx1144_rep, rx1144_pos, $I10, $P10) = rx1144_cur."!mark_fail"(0)
     lt rx1144_pos, -1, rx1144_done
@@ -14953,14 +16254,16 @@
     jump $I10
   rx1144_done:
     rx1144_cur."!cursor_fail"()
-    rx1144_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
+    if_null rx1144_debug, debug_915
+    rx1144_cur."!cursor_debug"("FAIL", "infix:sym<==>")
+  debug_915:
     .return (rx1144_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<==>"  :subid("295_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<==>"  :subid("295_1282324002.40722") :method
 .annotate 'line', 447
     $P1146 = self."!PREFIX__!subrule"("O", "==")
     new $P1147, "ResizablePMCArray"
@@ -14970,7 +16273,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<!=>"  :subid("296_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<!=>"  :subid("296_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1151_tgt
     .local int rx1151_pos
@@ -14978,7 +16281,9 @@
     .local int rx1151_eos
     .local int rx1151_rep
     .local pmc rx1151_cur
+    .local pmc rx1151_debug
     (rx1151_cur, rx1151_pos, rx1151_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1151_debug, rx1151_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1151_cur
     .local pmc match
     .lex "$/", match
@@ -14990,7 +16295,9 @@
     substr rx1151_tgt, rx1151_tgt, rx1151_off
   rx1151_start:
     eq $I10, 1, rx1151_restart
-    rx1151_cur."!cursor_debug"("START ", "infix:sym<!=>")
+    if_null rx1151_debug, debug_916
+    rx1151_cur."!cursor_debug"("START", "infix:sym<!=>")
+  debug_916:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1155_done
     goto rxscan1155_scan
@@ -15034,11 +16341,15 @@
     rx1151_pos = $P10."pos"()
   # rx pass
     rx1151_cur."!cursor_pass"(rx1151_pos, "infix:sym<!=>")
-    rx1151_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1151_pos)
+    if_null rx1151_debug, debug_917
+    rx1151_cur."!cursor_debug"("PASS", "infix:sym<!=>", " at pos=", rx1151_pos)
+  debug_917:
     .return (rx1151_cur)
   rx1151_restart:
 .annotate 'line', 447
-    rx1151_cur."!cursor_debug"("NEXT ", "infix:sym<!=>")
+    if_null rx1151_debug, debug_918
+    rx1151_cur."!cursor_debug"("NEXT", "infix:sym<!=>")
+  debug_918:
   rx1151_fail:
     (rx1151_rep, rx1151_pos, $I10, $P10) = rx1151_cur."!mark_fail"(0)
     lt rx1151_pos, -1, rx1151_done
@@ -15046,14 +16357,16 @@
     jump $I10
   rx1151_done:
     rx1151_cur."!cursor_fail"()
-    rx1151_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
+    if_null rx1151_debug, debug_919
+    rx1151_cur."!cursor_debug"("FAIL", "infix:sym<!=>")
+  debug_919:
     .return (rx1151_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<!=>"  :subid("297_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<!=>"  :subid("297_1282324002.40722") :method
 .annotate 'line', 447
     $P1153 = self."!PREFIX__!subrule"("O", "!=")
     new $P1154, "ResizablePMCArray"
@@ -15063,7 +16376,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<=>"  :subid("298_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<<=>"  :subid("298_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1158_tgt
     .local int rx1158_pos
@@ -15071,7 +16384,9 @@
     .local int rx1158_eos
     .local int rx1158_rep
     .local pmc rx1158_cur
+    .local pmc rx1158_debug
     (rx1158_cur, rx1158_pos, rx1158_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1158_debug, rx1158_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1158_cur
     .local pmc match
     .lex "$/", match
@@ -15083,7 +16398,9 @@
     substr rx1158_tgt, rx1158_tgt, rx1158_off
   rx1158_start:
     eq $I10, 1, rx1158_restart
-    rx1158_cur."!cursor_debug"("START ", "infix:sym<<=>")
+    if_null rx1158_debug, debug_920
+    rx1158_cur."!cursor_debug"("START", "infix:sym<<=>")
+  debug_920:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1162_done
     goto rxscan1162_scan
@@ -15127,11 +16444,15 @@
     rx1158_pos = $P10."pos"()
   # rx pass
     rx1158_cur."!cursor_pass"(rx1158_pos, "infix:sym<<=>")
-    rx1158_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1158_pos)
+    if_null rx1158_debug, debug_921
+    rx1158_cur."!cursor_debug"("PASS", "infix:sym<<=>", " at pos=", rx1158_pos)
+  debug_921:
     .return (rx1158_cur)
   rx1158_restart:
 .annotate 'line', 447
-    rx1158_cur."!cursor_debug"("NEXT ", "infix:sym<<=>")
+    if_null rx1158_debug, debug_922
+    rx1158_cur."!cursor_debug"("NEXT", "infix:sym<<=>")
+  debug_922:
   rx1158_fail:
     (rx1158_rep, rx1158_pos, $I10, $P10) = rx1158_cur."!mark_fail"(0)
     lt rx1158_pos, -1, rx1158_done
@@ -15139,14 +16460,16 @@
     jump $I10
   rx1158_done:
     rx1158_cur."!cursor_fail"()
-    rx1158_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
+    if_null rx1158_debug, debug_923
+    rx1158_cur."!cursor_debug"("FAIL", "infix:sym<<=>")
+  debug_923:
     .return (rx1158_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<=>"  :subid("299_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<<=>"  :subid("299_1282324002.40722") :method
 .annotate 'line', 447
     $P1160 = self."!PREFIX__!subrule"("O", "<=")
     new $P1161, "ResizablePMCArray"
@@ -15156,7 +16479,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>=>"  :subid("300_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<>=>"  :subid("300_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1165_tgt
     .local int rx1165_pos
@@ -15164,7 +16487,9 @@
     .local int rx1165_eos
     .local int rx1165_rep
     .local pmc rx1165_cur
+    .local pmc rx1165_debug
     (rx1165_cur, rx1165_pos, rx1165_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1165_debug, rx1165_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1165_cur
     .local pmc match
     .lex "$/", match
@@ -15176,7 +16501,9 @@
     substr rx1165_tgt, rx1165_tgt, rx1165_off
   rx1165_start:
     eq $I10, 1, rx1165_restart
-    rx1165_cur."!cursor_debug"("START ", "infix:sym<>=>")
+    if_null rx1165_debug, debug_924
+    rx1165_cur."!cursor_debug"("START", "infix:sym<>=>")
+  debug_924:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1169_done
     goto rxscan1169_scan
@@ -15220,11 +16547,15 @@
     rx1165_pos = $P10."pos"()
   # rx pass
     rx1165_cur."!cursor_pass"(rx1165_pos, "infix:sym<>=>")
-    rx1165_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1165_pos)
+    if_null rx1165_debug, debug_925
+    rx1165_cur."!cursor_debug"("PASS", "infix:sym<>=>", " at pos=", rx1165_pos)
+  debug_925:
     .return (rx1165_cur)
   rx1165_restart:
 .annotate 'line', 447
-    rx1165_cur."!cursor_debug"("NEXT ", "infix:sym<>=>")
+    if_null rx1165_debug, debug_926
+    rx1165_cur."!cursor_debug"("NEXT", "infix:sym<>=>")
+  debug_926:
   rx1165_fail:
     (rx1165_rep, rx1165_pos, $I10, $P10) = rx1165_cur."!mark_fail"(0)
     lt rx1165_pos, -1, rx1165_done
@@ -15232,14 +16563,16 @@
     jump $I10
   rx1165_done:
     rx1165_cur."!cursor_fail"()
-    rx1165_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
+    if_null rx1165_debug, debug_927
+    rx1165_cur."!cursor_debug"("FAIL", "infix:sym<>=>")
+  debug_927:
     .return (rx1165_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>=>"  :subid("301_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<>=>"  :subid("301_1282324002.40722") :method
 .annotate 'line', 447
     $P1167 = self."!PREFIX__!subrule"("O", ">=")
     new $P1168, "ResizablePMCArray"
@@ -15249,7 +16582,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<>"  :subid("302_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<<>"  :subid("302_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1172_tgt
     .local int rx1172_pos
@@ -15257,7 +16590,9 @@
     .local int rx1172_eos
     .local int rx1172_rep
     .local pmc rx1172_cur
+    .local pmc rx1172_debug
     (rx1172_cur, rx1172_pos, rx1172_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1172_debug, rx1172_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1172_cur
     .local pmc match
     .lex "$/", match
@@ -15269,7 +16604,9 @@
     substr rx1172_tgt, rx1172_tgt, rx1172_off
   rx1172_start:
     eq $I10, 1, rx1172_restart
-    rx1172_cur."!cursor_debug"("START ", "infix:sym<<>")
+    if_null rx1172_debug, debug_928
+    rx1172_cur."!cursor_debug"("START", "infix:sym<<>")
+  debug_928:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1176_done
     goto rxscan1176_scan
@@ -15290,8 +16627,8 @@
     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
+    ord $I11, rx1172_tgt, $I11
+    ne $I11, 60, rx1172_fail
     add rx1172_pos, 1
     set_addr $I10, rxcap_1177_fail
     ($I12, $I11) = rx1172_cur."!mark_peek"($I10)
@@ -15313,11 +16650,15 @@
     rx1172_pos = $P10."pos"()
   # rx pass
     rx1172_cur."!cursor_pass"(rx1172_pos, "infix:sym<<>")
-    rx1172_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1172_pos)
+    if_null rx1172_debug, debug_929
+    rx1172_cur."!cursor_debug"("PASS", "infix:sym<<>", " at pos=", rx1172_pos)
+  debug_929:
     .return (rx1172_cur)
   rx1172_restart:
 .annotate 'line', 447
-    rx1172_cur."!cursor_debug"("NEXT ", "infix:sym<<>")
+    if_null rx1172_debug, debug_930
+    rx1172_cur."!cursor_debug"("NEXT", "infix:sym<<>")
+  debug_930:
   rx1172_fail:
     (rx1172_rep, rx1172_pos, $I10, $P10) = rx1172_cur."!mark_fail"(0)
     lt rx1172_pos, -1, rx1172_done
@@ -15325,14 +16666,16 @@
     jump $I10
   rx1172_done:
     rx1172_cur."!cursor_fail"()
-    rx1172_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
+    if_null rx1172_debug, debug_931
+    rx1172_cur."!cursor_debug"("FAIL", "infix:sym<<>")
+  debug_931:
     .return (rx1172_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<>"  :subid("303_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<<>"  :subid("303_1282324002.40722") :method
 .annotate 'line', 447
     $P1174 = self."!PREFIX__!subrule"("O", "<")
     new $P1175, "ResizablePMCArray"
@@ -15342,7 +16685,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>>"  :subid("304_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<>>"  :subid("304_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1179_tgt
     .local int rx1179_pos
@@ -15350,7 +16693,9 @@
     .local int rx1179_eos
     .local int rx1179_rep
     .local pmc rx1179_cur
+    .local pmc rx1179_debug
     (rx1179_cur, rx1179_pos, rx1179_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1179_debug, rx1179_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1179_cur
     .local pmc match
     .lex "$/", match
@@ -15362,7 +16707,9 @@
     substr rx1179_tgt, rx1179_tgt, rx1179_off
   rx1179_start:
     eq $I10, 1, rx1179_restart
-    rx1179_cur."!cursor_debug"("START ", "infix:sym<>>")
+    if_null rx1179_debug, debug_932
+    rx1179_cur."!cursor_debug"("START", "infix:sym<>>")
+  debug_932:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1183_done
     goto rxscan1183_scan
@@ -15383,8 +16730,8 @@
     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
+    ord $I11, rx1179_tgt, $I11
+    ne $I11, 62, rx1179_fail
     add rx1179_pos, 1
     set_addr $I10, rxcap_1184_fail
     ($I12, $I11) = rx1179_cur."!mark_peek"($I10)
@@ -15406,11 +16753,15 @@
     rx1179_pos = $P10."pos"()
   # rx pass
     rx1179_cur."!cursor_pass"(rx1179_pos, "infix:sym<>>")
-    rx1179_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1179_pos)
+    if_null rx1179_debug, debug_933
+    rx1179_cur."!cursor_debug"("PASS", "infix:sym<>>", " at pos=", rx1179_pos)
+  debug_933:
     .return (rx1179_cur)
   rx1179_restart:
 .annotate 'line', 447
-    rx1179_cur."!cursor_debug"("NEXT ", "infix:sym<>>")
+    if_null rx1179_debug, debug_934
+    rx1179_cur."!cursor_debug"("NEXT", "infix:sym<>>")
+  debug_934:
   rx1179_fail:
     (rx1179_rep, rx1179_pos, $I10, $P10) = rx1179_cur."!mark_fail"(0)
     lt rx1179_pos, -1, rx1179_done
@@ -15418,14 +16769,16 @@
     jump $I10
   rx1179_done:
     rx1179_cur."!cursor_fail"()
-    rx1179_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
+    if_null rx1179_debug, debug_935
+    rx1179_cur."!cursor_debug"("FAIL", "infix:sym<>>")
+  debug_935:
     .return (rx1179_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>>"  :subid("305_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<>>"  :subid("305_1282324002.40722") :method
 .annotate 'line', 447
     $P1181 = self."!PREFIX__!subrule"("O", ">")
     new $P1182, "ResizablePMCArray"
@@ -15435,7 +16788,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<eq>"  :subid("306_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<eq>"  :subid("306_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1186_tgt
     .local int rx1186_pos
@@ -15443,7 +16796,9 @@
     .local int rx1186_eos
     .local int rx1186_rep
     .local pmc rx1186_cur
+    .local pmc rx1186_debug
     (rx1186_cur, rx1186_pos, rx1186_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1186_debug, rx1186_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1186_cur
     .local pmc match
     .lex "$/", match
@@ -15455,7 +16810,9 @@
     substr rx1186_tgt, rx1186_tgt, rx1186_off
   rx1186_start:
     eq $I10, 1, rx1186_restart
-    rx1186_cur."!cursor_debug"("START ", "infix:sym<eq>")
+    if_null rx1186_debug, debug_936
+    rx1186_cur."!cursor_debug"("START", "infix:sym<eq>")
+  debug_936:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1190_done
     goto rxscan1190_scan
@@ -15499,11 +16856,15 @@
     rx1186_pos = $P10."pos"()
   # rx pass
     rx1186_cur."!cursor_pass"(rx1186_pos, "infix:sym<eq>")
-    rx1186_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1186_pos)
+    if_null rx1186_debug, debug_937
+    rx1186_cur."!cursor_debug"("PASS", "infix:sym<eq>", " at pos=", rx1186_pos)
+  debug_937:
     .return (rx1186_cur)
   rx1186_restart:
 .annotate 'line', 447
-    rx1186_cur."!cursor_debug"("NEXT ", "infix:sym<eq>")
+    if_null rx1186_debug, debug_938
+    rx1186_cur."!cursor_debug"("NEXT", "infix:sym<eq>")
+  debug_938:
   rx1186_fail:
     (rx1186_rep, rx1186_pos, $I10, $P10) = rx1186_cur."!mark_fail"(0)
     lt rx1186_pos, -1, rx1186_done
@@ -15511,14 +16872,16 @@
     jump $I10
   rx1186_done:
     rx1186_cur."!cursor_fail"()
-    rx1186_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
+    if_null rx1186_debug, debug_939
+    rx1186_cur."!cursor_debug"("FAIL", "infix:sym<eq>")
+  debug_939:
     .return (rx1186_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<eq>"  :subid("307_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<eq>"  :subid("307_1282324002.40722") :method
 .annotate 'line', 447
     $P1188 = self."!PREFIX__!subrule"("O", "eq")
     new $P1189, "ResizablePMCArray"
@@ -15528,7 +16891,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ne>"  :subid("308_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<ne>"  :subid("308_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1193_tgt
     .local int rx1193_pos
@@ -15536,7 +16899,9 @@
     .local int rx1193_eos
     .local int rx1193_rep
     .local pmc rx1193_cur
+    .local pmc rx1193_debug
     (rx1193_cur, rx1193_pos, rx1193_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1193_debug, rx1193_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1193_cur
     .local pmc match
     .lex "$/", match
@@ -15548,7 +16913,9 @@
     substr rx1193_tgt, rx1193_tgt, rx1193_off
   rx1193_start:
     eq $I10, 1, rx1193_restart
-    rx1193_cur."!cursor_debug"("START ", "infix:sym<ne>")
+    if_null rx1193_debug, debug_940
+    rx1193_cur."!cursor_debug"("START", "infix:sym<ne>")
+  debug_940:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1197_done
     goto rxscan1197_scan
@@ -15592,11 +16959,15 @@
     rx1193_pos = $P10."pos"()
   # rx pass
     rx1193_cur."!cursor_pass"(rx1193_pos, "infix:sym<ne>")
-    rx1193_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1193_pos)
+    if_null rx1193_debug, debug_941
+    rx1193_cur."!cursor_debug"("PASS", "infix:sym<ne>", " at pos=", rx1193_pos)
+  debug_941:
     .return (rx1193_cur)
   rx1193_restart:
 .annotate 'line', 447
-    rx1193_cur."!cursor_debug"("NEXT ", "infix:sym<ne>")
+    if_null rx1193_debug, debug_942
+    rx1193_cur."!cursor_debug"("NEXT", "infix:sym<ne>")
+  debug_942:
   rx1193_fail:
     (rx1193_rep, rx1193_pos, $I10, $P10) = rx1193_cur."!mark_fail"(0)
     lt rx1193_pos, -1, rx1193_done
@@ -15604,14 +16975,16 @@
     jump $I10
   rx1193_done:
     rx1193_cur."!cursor_fail"()
-    rx1193_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
+    if_null rx1193_debug, debug_943
+    rx1193_cur."!cursor_debug"("FAIL", "infix:sym<ne>")
+  debug_943:
     .return (rx1193_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ne>"  :subid("309_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<ne>"  :subid("309_1282324002.40722") :method
 .annotate 'line', 447
     $P1195 = self."!PREFIX__!subrule"("O", "ne")
     new $P1196, "ResizablePMCArray"
@@ -15621,7 +16994,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<le>"  :subid("310_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<le>"  :subid("310_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1200_tgt
     .local int rx1200_pos
@@ -15629,7 +17002,9 @@
     .local int rx1200_eos
     .local int rx1200_rep
     .local pmc rx1200_cur
+    .local pmc rx1200_debug
     (rx1200_cur, rx1200_pos, rx1200_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1200_debug, rx1200_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1200_cur
     .local pmc match
     .lex "$/", match
@@ -15641,7 +17016,9 @@
     substr rx1200_tgt, rx1200_tgt, rx1200_off
   rx1200_start:
     eq $I10, 1, rx1200_restart
-    rx1200_cur."!cursor_debug"("START ", "infix:sym<le>")
+    if_null rx1200_debug, debug_944
+    rx1200_cur."!cursor_debug"("START", "infix:sym<le>")
+  debug_944:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1204_done
     goto rxscan1204_scan
@@ -15685,11 +17062,15 @@
     rx1200_pos = $P10."pos"()
   # rx pass
     rx1200_cur."!cursor_pass"(rx1200_pos, "infix:sym<le>")
-    rx1200_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1200_pos)
+    if_null rx1200_debug, debug_945
+    rx1200_cur."!cursor_debug"("PASS", "infix:sym<le>", " at pos=", rx1200_pos)
+  debug_945:
     .return (rx1200_cur)
   rx1200_restart:
 .annotate 'line', 447
-    rx1200_cur."!cursor_debug"("NEXT ", "infix:sym<le>")
+    if_null rx1200_debug, debug_946
+    rx1200_cur."!cursor_debug"("NEXT", "infix:sym<le>")
+  debug_946:
   rx1200_fail:
     (rx1200_rep, rx1200_pos, $I10, $P10) = rx1200_cur."!mark_fail"(0)
     lt rx1200_pos, -1, rx1200_done
@@ -15697,14 +17078,16 @@
     jump $I10
   rx1200_done:
     rx1200_cur."!cursor_fail"()
-    rx1200_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
+    if_null rx1200_debug, debug_947
+    rx1200_cur."!cursor_debug"("FAIL", "infix:sym<le>")
+  debug_947:
     .return (rx1200_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<le>"  :subid("311_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<le>"  :subid("311_1282324002.40722") :method
 .annotate 'line', 447
     $P1202 = self."!PREFIX__!subrule"("O", "le")
     new $P1203, "ResizablePMCArray"
@@ -15714,7 +17097,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ge>"  :subid("312_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<ge>"  :subid("312_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1207_tgt
     .local int rx1207_pos
@@ -15722,7 +17105,9 @@
     .local int rx1207_eos
     .local int rx1207_rep
     .local pmc rx1207_cur
+    .local pmc rx1207_debug
     (rx1207_cur, rx1207_pos, rx1207_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1207_debug, rx1207_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1207_cur
     .local pmc match
     .lex "$/", match
@@ -15734,7 +17119,9 @@
     substr rx1207_tgt, rx1207_tgt, rx1207_off
   rx1207_start:
     eq $I10, 1, rx1207_restart
-    rx1207_cur."!cursor_debug"("START ", "infix:sym<ge>")
+    if_null rx1207_debug, debug_948
+    rx1207_cur."!cursor_debug"("START", "infix:sym<ge>")
+  debug_948:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1211_done
     goto rxscan1211_scan
@@ -15778,11 +17165,15 @@
     rx1207_pos = $P10."pos"()
   # rx pass
     rx1207_cur."!cursor_pass"(rx1207_pos, "infix:sym<ge>")
-    rx1207_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1207_pos)
+    if_null rx1207_debug, debug_949
+    rx1207_cur."!cursor_debug"("PASS", "infix:sym<ge>", " at pos=", rx1207_pos)
+  debug_949:
     .return (rx1207_cur)
   rx1207_restart:
 .annotate 'line', 447
-    rx1207_cur."!cursor_debug"("NEXT ", "infix:sym<ge>")
+    if_null rx1207_debug, debug_950
+    rx1207_cur."!cursor_debug"("NEXT", "infix:sym<ge>")
+  debug_950:
   rx1207_fail:
     (rx1207_rep, rx1207_pos, $I10, $P10) = rx1207_cur."!mark_fail"(0)
     lt rx1207_pos, -1, rx1207_done
@@ -15790,14 +17181,16 @@
     jump $I10
   rx1207_done:
     rx1207_cur."!cursor_fail"()
-    rx1207_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
+    if_null rx1207_debug, debug_951
+    rx1207_cur."!cursor_debug"("FAIL", "infix:sym<ge>")
+  debug_951:
     .return (rx1207_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ge>"  :subid("313_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<ge>"  :subid("313_1282324002.40722") :method
 .annotate 'line', 447
     $P1209 = self."!PREFIX__!subrule"("O", "ge")
     new $P1210, "ResizablePMCArray"
@@ -15807,7 +17200,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<lt>"  :subid("314_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<lt>"  :subid("314_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1214_tgt
     .local int rx1214_pos
@@ -15815,7 +17208,9 @@
     .local int rx1214_eos
     .local int rx1214_rep
     .local pmc rx1214_cur
+    .local pmc rx1214_debug
     (rx1214_cur, rx1214_pos, rx1214_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1214_debug, rx1214_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1214_cur
     .local pmc match
     .lex "$/", match
@@ -15827,7 +17222,9 @@
     substr rx1214_tgt, rx1214_tgt, rx1214_off
   rx1214_start:
     eq $I10, 1, rx1214_restart
-    rx1214_cur."!cursor_debug"("START ", "infix:sym<lt>")
+    if_null rx1214_debug, debug_952
+    rx1214_cur."!cursor_debug"("START", "infix:sym<lt>")
+  debug_952:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1218_done
     goto rxscan1218_scan
@@ -15871,11 +17268,15 @@
     rx1214_pos = $P10."pos"()
   # rx pass
     rx1214_cur."!cursor_pass"(rx1214_pos, "infix:sym<lt>")
-    rx1214_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1214_pos)
+    if_null rx1214_debug, debug_953
+    rx1214_cur."!cursor_debug"("PASS", "infix:sym<lt>", " at pos=", rx1214_pos)
+  debug_953:
     .return (rx1214_cur)
   rx1214_restart:
 .annotate 'line', 447
-    rx1214_cur."!cursor_debug"("NEXT ", "infix:sym<lt>")
+    if_null rx1214_debug, debug_954
+    rx1214_cur."!cursor_debug"("NEXT", "infix:sym<lt>")
+  debug_954:
   rx1214_fail:
     (rx1214_rep, rx1214_pos, $I10, $P10) = rx1214_cur."!mark_fail"(0)
     lt rx1214_pos, -1, rx1214_done
@@ -15883,14 +17284,16 @@
     jump $I10
   rx1214_done:
     rx1214_cur."!cursor_fail"()
-    rx1214_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
+    if_null rx1214_debug, debug_955
+    rx1214_cur."!cursor_debug"("FAIL", "infix:sym<lt>")
+  debug_955:
     .return (rx1214_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<lt>"  :subid("315_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<lt>"  :subid("315_1282324002.40722") :method
 .annotate 'line', 447
     $P1216 = self."!PREFIX__!subrule"("O", "lt")
     new $P1217, "ResizablePMCArray"
@@ -15900,7 +17303,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<gt>"  :subid("316_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<gt>"  :subid("316_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1221_tgt
     .local int rx1221_pos
@@ -15908,7 +17311,9 @@
     .local int rx1221_eos
     .local int rx1221_rep
     .local pmc rx1221_cur
+    .local pmc rx1221_debug
     (rx1221_cur, rx1221_pos, rx1221_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1221_debug, rx1221_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1221_cur
     .local pmc match
     .lex "$/", match
@@ -15920,7 +17325,9 @@
     substr rx1221_tgt, rx1221_tgt, rx1221_off
   rx1221_start:
     eq $I10, 1, rx1221_restart
-    rx1221_cur."!cursor_debug"("START ", "infix:sym<gt>")
+    if_null rx1221_debug, debug_956
+    rx1221_cur."!cursor_debug"("START", "infix:sym<gt>")
+  debug_956:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1225_done
     goto rxscan1225_scan
@@ -15964,11 +17371,15 @@
     rx1221_pos = $P10."pos"()
   # rx pass
     rx1221_cur."!cursor_pass"(rx1221_pos, "infix:sym<gt>")
-    rx1221_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1221_pos)
+    if_null rx1221_debug, debug_957
+    rx1221_cur."!cursor_debug"("PASS", "infix:sym<gt>", " at pos=", rx1221_pos)
+  debug_957:
     .return (rx1221_cur)
   rx1221_restart:
 .annotate 'line', 447
-    rx1221_cur."!cursor_debug"("NEXT ", "infix:sym<gt>")
+    if_null rx1221_debug, debug_958
+    rx1221_cur."!cursor_debug"("NEXT", "infix:sym<gt>")
+  debug_958:
   rx1221_fail:
     (rx1221_rep, rx1221_pos, $I10, $P10) = rx1221_cur."!mark_fail"(0)
     lt rx1221_pos, -1, rx1221_done
@@ -15976,14 +17387,16 @@
     jump $I10
   rx1221_done:
     rx1221_cur."!cursor_fail"()
-    rx1221_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
+    if_null rx1221_debug, debug_959
+    rx1221_cur."!cursor_debug"("FAIL", "infix:sym<gt>")
+  debug_959:
     .return (rx1221_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<gt>"  :subid("317_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<gt>"  :subid("317_1282324002.40722") :method
 .annotate 'line', 447
     $P1223 = self."!PREFIX__!subrule"("O", "gt")
     new $P1224, "ResizablePMCArray"
@@ -15993,7 +17406,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=:=>"  :subid("318_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<=:=>"  :subid("318_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1228_tgt
     .local int rx1228_pos
@@ -16001,7 +17414,9 @@
     .local int rx1228_eos
     .local int rx1228_rep
     .local pmc rx1228_cur
+    .local pmc rx1228_debug
     (rx1228_cur, rx1228_pos, rx1228_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1228_debug, rx1228_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1228_cur
     .local pmc match
     .lex "$/", match
@@ -16013,7 +17428,9 @@
     substr rx1228_tgt, rx1228_tgt, rx1228_off
   rx1228_start:
     eq $I10, 1, rx1228_restart
-    rx1228_cur."!cursor_debug"("START ", "infix:sym<=:=>")
+    if_null rx1228_debug, debug_960
+    rx1228_cur."!cursor_debug"("START", "infix:sym<=:=>")
+  debug_960:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1232_done
     goto rxscan1232_scan
@@ -16057,11 +17474,15 @@
     rx1228_pos = $P10."pos"()
   # rx pass
     rx1228_cur."!cursor_pass"(rx1228_pos, "infix:sym<=:=>")
-    rx1228_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1228_pos)
+    if_null rx1228_debug, debug_961
+    rx1228_cur."!cursor_debug"("PASS", "infix:sym<=:=>", " at pos=", rx1228_pos)
+  debug_961:
     .return (rx1228_cur)
   rx1228_restart:
 .annotate 'line', 447
-    rx1228_cur."!cursor_debug"("NEXT ", "infix:sym<=:=>")
+    if_null rx1228_debug, debug_962
+    rx1228_cur."!cursor_debug"("NEXT", "infix:sym<=:=>")
+  debug_962:
   rx1228_fail:
     (rx1228_rep, rx1228_pos, $I10, $P10) = rx1228_cur."!mark_fail"(0)
     lt rx1228_pos, -1, rx1228_done
@@ -16069,14 +17490,16 @@
     jump $I10
   rx1228_done:
     rx1228_cur."!cursor_fail"()
-    rx1228_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
+    if_null rx1228_debug, debug_963
+    rx1228_cur."!cursor_debug"("FAIL", "infix:sym<=:=>")
+  debug_963:
     .return (rx1228_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=:=>"  :subid("319_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<=:=>"  :subid("319_1282324002.40722") :method
 .annotate 'line', 447
     $P1230 = self."!PREFIX__!subrule"("O", "=:=")
     new $P1231, "ResizablePMCArray"
@@ -16086,7 +17509,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~~>"  :subid("320_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<~~>"  :subid("320_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1235_tgt
     .local int rx1235_pos
@@ -16094,7 +17517,9 @@
     .local int rx1235_eos
     .local int rx1235_rep
     .local pmc rx1235_cur
+    .local pmc rx1235_debug
     (rx1235_cur, rx1235_pos, rx1235_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1235_debug, rx1235_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1235_cur
     .local pmc match
     .lex "$/", match
@@ -16106,7 +17531,9 @@
     substr rx1235_tgt, rx1235_tgt, rx1235_off
   rx1235_start:
     eq $I10, 1, rx1235_restart
-    rx1235_cur."!cursor_debug"("START ", "infix:sym<~~>")
+    if_null rx1235_debug, debug_964
+    rx1235_cur."!cursor_debug"("START", "infix:sym<~~>")
+  debug_964:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1239_done
     goto rxscan1239_scan
@@ -16150,11 +17577,15 @@
     rx1235_pos = $P10."pos"()
   # rx pass
     rx1235_cur."!cursor_pass"(rx1235_pos, "infix:sym<~~>")
-    rx1235_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1235_pos)
+    if_null rx1235_debug, debug_965
+    rx1235_cur."!cursor_debug"("PASS", "infix:sym<~~>", " at pos=", rx1235_pos)
+  debug_965:
     .return (rx1235_cur)
   rx1235_restart:
 .annotate 'line', 447
-    rx1235_cur."!cursor_debug"("NEXT ", "infix:sym<~~>")
+    if_null rx1235_debug, debug_966
+    rx1235_cur."!cursor_debug"("NEXT", "infix:sym<~~>")
+  debug_966:
   rx1235_fail:
     (rx1235_rep, rx1235_pos, $I10, $P10) = rx1235_cur."!mark_fail"(0)
     lt rx1235_pos, -1, rx1235_done
@@ -16162,14 +17593,16 @@
     jump $I10
   rx1235_done:
     rx1235_cur."!cursor_fail"()
-    rx1235_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
+    if_null rx1235_debug, debug_967
+    rx1235_cur."!cursor_debug"("FAIL", "infix:sym<~~>")
+  debug_967:
     .return (rx1235_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~~>"  :subid("321_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<~~>"  :subid("321_1282324002.40722") :method
 .annotate 'line', 447
     $P1237 = self."!PREFIX__!subrule"("O", "~~")
     new $P1238, "ResizablePMCArray"
@@ -16179,7 +17612,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<&&>"  :subid("322_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<&&>"  :subid("322_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1242_tgt
     .local int rx1242_pos
@@ -16187,7 +17620,9 @@
     .local int rx1242_eos
     .local int rx1242_rep
     .local pmc rx1242_cur
+    .local pmc rx1242_debug
     (rx1242_cur, rx1242_pos, rx1242_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1242_debug, rx1242_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1242_cur
     .local pmc match
     .lex "$/", match
@@ -16199,7 +17634,9 @@
     substr rx1242_tgt, rx1242_tgt, rx1242_off
   rx1242_start:
     eq $I10, 1, rx1242_restart
-    rx1242_cur."!cursor_debug"("START ", "infix:sym<&&>")
+    if_null rx1242_debug, debug_968
+    rx1242_cur."!cursor_debug"("START", "infix:sym<&&>")
+  debug_968:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1246_done
     goto rxscan1246_scan
@@ -16243,11 +17680,15 @@
     rx1242_pos = $P10."pos"()
   # rx pass
     rx1242_cur."!cursor_pass"(rx1242_pos, "infix:sym<&&>")
-    rx1242_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1242_pos)
+    if_null rx1242_debug, debug_969
+    rx1242_cur."!cursor_debug"("PASS", "infix:sym<&&>", " at pos=", rx1242_pos)
+  debug_969:
     .return (rx1242_cur)
   rx1242_restart:
 .annotate 'line', 447
-    rx1242_cur."!cursor_debug"("NEXT ", "infix:sym<&&>")
+    if_null rx1242_debug, debug_970
+    rx1242_cur."!cursor_debug"("NEXT", "infix:sym<&&>")
+  debug_970:
   rx1242_fail:
     (rx1242_rep, rx1242_pos, $I10, $P10) = rx1242_cur."!mark_fail"(0)
     lt rx1242_pos, -1, rx1242_done
@@ -16255,14 +17696,16 @@
     jump $I10
   rx1242_done:
     rx1242_cur."!cursor_fail"()
-    rx1242_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
+    if_null rx1242_debug, debug_971
+    rx1242_cur."!cursor_debug"("FAIL", "infix:sym<&&>")
+  debug_971:
     .return (rx1242_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<&&>"  :subid("323_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<&&>"  :subid("323_1282324002.40722") :method
 .annotate 'line', 447
     $P1244 = self."!PREFIX__!subrule"("O", "&&")
     new $P1245, "ResizablePMCArray"
@@ -16272,7 +17715,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<||>"  :subid("324_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<||>"  :subid("324_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1249_tgt
     .local int rx1249_pos
@@ -16280,7 +17723,9 @@
     .local int rx1249_eos
     .local int rx1249_rep
     .local pmc rx1249_cur
+    .local pmc rx1249_debug
     (rx1249_cur, rx1249_pos, rx1249_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1249_debug, rx1249_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1249_cur
     .local pmc match
     .lex "$/", match
@@ -16292,7 +17737,9 @@
     substr rx1249_tgt, rx1249_tgt, rx1249_off
   rx1249_start:
     eq $I10, 1, rx1249_restart
-    rx1249_cur."!cursor_debug"("START ", "infix:sym<||>")
+    if_null rx1249_debug, debug_972
+    rx1249_cur."!cursor_debug"("START", "infix:sym<||>")
+  debug_972:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1253_done
     goto rxscan1253_scan
@@ -16336,11 +17783,15 @@
     rx1249_pos = $P10."pos"()
   # rx pass
     rx1249_cur."!cursor_pass"(rx1249_pos, "infix:sym<||>")
-    rx1249_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1249_pos)
+    if_null rx1249_debug, debug_973
+    rx1249_cur."!cursor_debug"("PASS", "infix:sym<||>", " at pos=", rx1249_pos)
+  debug_973:
     .return (rx1249_cur)
   rx1249_restart:
 .annotate 'line', 447
-    rx1249_cur."!cursor_debug"("NEXT ", "infix:sym<||>")
+    if_null rx1249_debug, debug_974
+    rx1249_cur."!cursor_debug"("NEXT", "infix:sym<||>")
+  debug_974:
   rx1249_fail:
     (rx1249_rep, rx1249_pos, $I10, $P10) = rx1249_cur."!mark_fail"(0)
     lt rx1249_pos, -1, rx1249_done
@@ -16348,14 +17799,16 @@
     jump $I10
   rx1249_done:
     rx1249_cur."!cursor_fail"()
-    rx1249_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
+    if_null rx1249_debug, debug_975
+    rx1249_cur."!cursor_debug"("FAIL", "infix:sym<||>")
+  debug_975:
     .return (rx1249_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<||>"  :subid("325_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<||>"  :subid("325_1282324002.40722") :method
 .annotate 'line', 447
     $P1251 = self."!PREFIX__!subrule"("O", "||")
     new $P1252, "ResizablePMCArray"
@@ -16365,7 +17818,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<//>"  :subid("326_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<//>"  :subid("326_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1256_tgt
     .local int rx1256_pos
@@ -16373,7 +17826,9 @@
     .local int rx1256_eos
     .local int rx1256_rep
     .local pmc rx1256_cur
+    .local pmc rx1256_debug
     (rx1256_cur, rx1256_pos, rx1256_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1256_debug, rx1256_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1256_cur
     .local pmc match
     .lex "$/", match
@@ -16385,7 +17840,9 @@
     substr rx1256_tgt, rx1256_tgt, rx1256_off
   rx1256_start:
     eq $I10, 1, rx1256_restart
-    rx1256_cur."!cursor_debug"("START ", "infix:sym<//>")
+    if_null rx1256_debug, debug_976
+    rx1256_cur."!cursor_debug"("START", "infix:sym<//>")
+  debug_976:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1260_done
     goto rxscan1260_scan
@@ -16429,11 +17886,15 @@
     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)
+    if_null rx1256_debug, debug_977
+    rx1256_cur."!cursor_debug"("PASS", "infix:sym<//>", " at pos=", rx1256_pos)
+  debug_977:
     .return (rx1256_cur)
   rx1256_restart:
 .annotate 'line', 447
-    rx1256_cur."!cursor_debug"("NEXT ", "infix:sym<//>")
+    if_null rx1256_debug, debug_978
+    rx1256_cur."!cursor_debug"("NEXT", "infix:sym<//>")
+  debug_978:
   rx1256_fail:
     (rx1256_rep, rx1256_pos, $I10, $P10) = rx1256_cur."!mark_fail"(0)
     lt rx1256_pos, -1, rx1256_done
@@ -16441,14 +17902,16 @@
     jump $I10
   rx1256_done:
     rx1256_cur."!cursor_fail"()
-    rx1256_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
+    if_null rx1256_debug, debug_979
+    rx1256_cur."!cursor_debug"("FAIL", "infix:sym<//>")
+  debug_979:
     .return (rx1256_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<//>"  :subid("327_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<//>"  :subid("327_1282324002.40722") :method
 .annotate 'line', 447
     $P1258 = self."!PREFIX__!subrule"("O", "//")
     new $P1259, "ResizablePMCArray"
@@ -16458,7 +17921,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<?? !!>"  :subid("328_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<?? !!>"  :subid("328_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1263_tgt
     .local int rx1263_pos
@@ -16466,7 +17929,9 @@
     .local int rx1263_eos
     .local int rx1263_rep
     .local pmc rx1263_cur
+    .local pmc rx1263_debug
     (rx1263_cur, rx1263_pos, rx1263_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1263_debug, rx1263_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1263_cur
     .local pmc match
     .lex "$/", match
@@ -16478,7 +17943,9 @@
     substr rx1263_tgt, rx1263_tgt, rx1263_off
   rx1263_start:
     eq $I10, 1, rx1263_restart
-    rx1263_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
+    if_null rx1263_debug, debug_980
+    rx1263_cur."!cursor_debug"("START", "infix:sym<?? !!>")
+  debug_980:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1267_done
     goto rxscan1267_scan
@@ -16532,11 +17999,15 @@
 .annotate 'line', 539
   # rx pass
     rx1263_cur."!cursor_pass"(rx1263_pos, "infix:sym<?? !!>")
-    rx1263_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1263_pos)
+    if_null rx1263_debug, debug_981
+    rx1263_cur."!cursor_debug"("PASS", "infix:sym<?? !!>", " at pos=", rx1263_pos)
+  debug_981:
     .return (rx1263_cur)
   rx1263_restart:
 .annotate 'line', 447
-    rx1263_cur."!cursor_debug"("NEXT ", "infix:sym<?? !!>")
+    if_null rx1263_debug, debug_982
+    rx1263_cur."!cursor_debug"("NEXT", "infix:sym<?? !!>")
+  debug_982:
   rx1263_fail:
     (rx1263_rep, rx1263_pos, $I10, $P10) = rx1263_cur."!mark_fail"(0)
     lt rx1263_pos, -1, rx1263_done
@@ -16544,14 +18015,16 @@
     jump $I10
   rx1263_done:
     rx1263_cur."!cursor_fail"()
-    rx1263_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
+    if_null rx1263_debug, debug_983
+    rx1263_cur."!cursor_debug"("FAIL", "infix:sym<?? !!>")
+  debug_983:
     .return (rx1263_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<?? !!>"  :subid("329_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<?? !!>"  :subid("329_1282324002.40722") :method
 .annotate 'line', 447
     $P1265 = self."!PREFIX__!subrule"("ws", "??")
     new $P1266, "ResizablePMCArray"
@@ -16561,7 +18034,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=>"  :subid("330_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<=>"  :subid("330_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1269_tgt
     .local int rx1269_pos
@@ -16569,7 +18042,9 @@
     .local int rx1269_eos
     .local int rx1269_rep
     .local pmc rx1269_cur
+    .local pmc rx1269_debug
     (rx1269_cur, rx1269_pos, rx1269_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1269_debug, rx1269_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1269_cur
     .local pmc match
     .lex "$/", match
@@ -16581,7 +18056,9 @@
     substr rx1269_tgt, rx1269_tgt, rx1269_off
   rx1269_start:
     eq $I10, 1, rx1269_restart
-    rx1269_cur."!cursor_debug"("START ", "infix:sym<=>")
+    if_null rx1269_debug, debug_984
+    rx1269_cur."!cursor_debug"("START", "infix:sym<=>")
+  debug_984:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1273_done
     goto rxscan1273_scan
@@ -16602,8 +18079,8 @@
     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
+    ord $I11, rx1269_tgt, $I11
+    ne $I11, 61, rx1269_fail
     add rx1269_pos, 1
     set_addr $I10, rxcap_1274_fail
     ($I12, $I11) = rx1269_cur."!mark_peek"($I10)
@@ -16624,11 +18101,15 @@
 .annotate 'line', 547
   # rx pass
     rx1269_cur."!cursor_pass"(rx1269_pos, "infix:sym<=>")
-    rx1269_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1269_pos)
+    if_null rx1269_debug, debug_985
+    rx1269_cur."!cursor_debug"("PASS", "infix:sym<=>", " at pos=", rx1269_pos)
+  debug_985:
     .return (rx1269_cur)
   rx1269_restart:
 .annotate 'line', 447
-    rx1269_cur."!cursor_debug"("NEXT ", "infix:sym<=>")
+    if_null rx1269_debug, debug_986
+    rx1269_cur."!cursor_debug"("NEXT", "infix:sym<=>")
+  debug_986:
   rx1269_fail:
     (rx1269_rep, rx1269_pos, $I10, $P10) = rx1269_cur."!mark_fail"(0)
     lt rx1269_pos, -1, rx1269_done
@@ -16636,14 +18117,16 @@
     jump $I10
   rx1269_done:
     rx1269_cur."!cursor_fail"()
-    rx1269_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
+    if_null rx1269_debug, debug_987
+    rx1269_cur."!cursor_debug"("FAIL", "infix:sym<=>")
+  debug_987:
     .return (rx1269_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=>"  :subid("331_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<=>"  :subid("331_1282324002.40722") :method
 .annotate 'line', 447
     $P1271 = self."!PREFIX__!subrule"("panic", "=")
     new $P1272, "ResizablePMCArray"
@@ -16653,7 +18136,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<:=>"  :subid("332_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<:=>"  :subid("332_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1276_tgt
     .local int rx1276_pos
@@ -16661,7 +18144,9 @@
     .local int rx1276_eos
     .local int rx1276_rep
     .local pmc rx1276_cur
+    .local pmc rx1276_debug
     (rx1276_cur, rx1276_pos, rx1276_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1276_debug, rx1276_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1276_cur
     .local pmc match
     .lex "$/", match
@@ -16673,7 +18158,9 @@
     substr rx1276_tgt, rx1276_tgt, rx1276_off
   rx1276_start:
     eq $I10, 1, rx1276_restart
-    rx1276_cur."!cursor_debug"("START ", "infix:sym<:=>")
+    if_null rx1276_debug, debug_988
+    rx1276_cur."!cursor_debug"("START", "infix:sym<:=>")
+  debug_988:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1280_done
     goto rxscan1280_scan
@@ -16717,11 +18204,15 @@
     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)
+    if_null rx1276_debug, debug_989
+    rx1276_cur."!cursor_debug"("PASS", "infix:sym<:=>", " at pos=", rx1276_pos)
+  debug_989:
     .return (rx1276_cur)
   rx1276_restart:
 .annotate 'line', 447
-    rx1276_cur."!cursor_debug"("NEXT ", "infix:sym<:=>")
+    if_null rx1276_debug, debug_990
+    rx1276_cur."!cursor_debug"("NEXT", "infix:sym<:=>")
+  debug_990:
   rx1276_fail:
     (rx1276_rep, rx1276_pos, $I10, $P10) = rx1276_cur."!mark_fail"(0)
     lt rx1276_pos, -1, rx1276_done
@@ -16729,14 +18220,16 @@
     jump $I10
   rx1276_done:
     rx1276_cur."!cursor_fail"()
-    rx1276_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
+    if_null rx1276_debug, debug_991
+    rx1276_cur."!cursor_debug"("FAIL", "infix:sym<:=>")
+  debug_991:
     .return (rx1276_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<:=>"  :subid("333_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<:=>"  :subid("333_1282324002.40722") :method
 .annotate 'line', 447
     $P1278 = self."!PREFIX__!subrule"("O", ":=")
     new $P1279, "ResizablePMCArray"
@@ -16746,7 +18239,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<::=>"  :subid("334_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<::=>"  :subid("334_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1283_tgt
     .local int rx1283_pos
@@ -16754,7 +18247,9 @@
     .local int rx1283_eos
     .local int rx1283_rep
     .local pmc rx1283_cur
+    .local pmc rx1283_debug
     (rx1283_cur, rx1283_pos, rx1283_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1283_debug, rx1283_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1283_cur
     .local pmc match
     .lex "$/", match
@@ -16766,7 +18261,9 @@
     substr rx1283_tgt, rx1283_tgt, rx1283_off
   rx1283_start:
     eq $I10, 1, rx1283_restart
-    rx1283_cur."!cursor_debug"("START ", "infix:sym<::=>")
+    if_null rx1283_debug, debug_992
+    rx1283_cur."!cursor_debug"("START", "infix:sym<::=>")
+  debug_992:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1287_done
     goto rxscan1287_scan
@@ -16810,11 +18307,15 @@
     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)
+    if_null rx1283_debug, debug_993
+    rx1283_cur."!cursor_debug"("PASS", "infix:sym<::=>", " at pos=", rx1283_pos)
+  debug_993:
     .return (rx1283_cur)
   rx1283_restart:
 .annotate 'line', 447
-    rx1283_cur."!cursor_debug"("NEXT ", "infix:sym<::=>")
+    if_null rx1283_debug, debug_994
+    rx1283_cur."!cursor_debug"("NEXT", "infix:sym<::=>")
+  debug_994:
   rx1283_fail:
     (rx1283_rep, rx1283_pos, $I10, $P10) = rx1283_cur."!mark_fail"(0)
     lt rx1283_pos, -1, rx1283_done
@@ -16822,14 +18323,16 @@
     jump $I10
   rx1283_done:
     rx1283_cur."!cursor_fail"()
-    rx1283_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
+    if_null rx1283_debug, debug_995
+    rx1283_cur."!cursor_debug"("FAIL", "infix:sym<::=>")
+  debug_995:
     .return (rx1283_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<::=>"  :subid("335_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<::=>"  :subid("335_1282324002.40722") :method
 .annotate 'line', 447
     $P1285 = self."!PREFIX__!subrule"("O", "::=")
     new $P1286, "ResizablePMCArray"
@@ -16839,7 +18342,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<,>"  :subid("336_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "infix:sym<,>"  :subid("336_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1290_tgt
     .local int rx1290_pos
@@ -16847,7 +18350,9 @@
     .local int rx1290_eos
     .local int rx1290_rep
     .local pmc rx1290_cur
+    .local pmc rx1290_debug
     (rx1290_cur, rx1290_pos, rx1290_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1290_debug, rx1290_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1290_cur
     .local pmc match
     .lex "$/", match
@@ -16859,7 +18364,9 @@
     substr rx1290_tgt, rx1290_tgt, rx1290_off
   rx1290_start:
     eq $I10, 1, rx1290_restart
-    rx1290_cur."!cursor_debug"("START ", "infix:sym<,>")
+    if_null rx1290_debug, debug_996
+    rx1290_cur."!cursor_debug"("START", "infix:sym<,>")
+  debug_996:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1294_done
     goto rxscan1294_scan
@@ -16880,8 +18387,8 @@
     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
+    ord $I11, rx1290_tgt, $I11
+    ne $I11, 44, rx1290_fail
     add rx1290_pos, 1
     set_addr $I10, rxcap_1295_fail
     ($I12, $I11) = rx1290_cur."!mark_peek"($I10)
@@ -16903,11 +18410,15 @@
     rx1290_pos = $P10."pos"()
   # rx pass
     rx1290_cur."!cursor_pass"(rx1290_pos, "infix:sym<,>")
-    rx1290_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1290_pos)
+    if_null rx1290_debug, debug_997
+    rx1290_cur."!cursor_debug"("PASS", "infix:sym<,>", " at pos=", rx1290_pos)
+  debug_997:
     .return (rx1290_cur)
   rx1290_restart:
 .annotate 'line', 447
-    rx1290_cur."!cursor_debug"("NEXT ", "infix:sym<,>")
+    if_null rx1290_debug, debug_998
+    rx1290_cur."!cursor_debug"("NEXT", "infix:sym<,>")
+  debug_998:
   rx1290_fail:
     (rx1290_rep, rx1290_pos, $I10, $P10) = rx1290_cur."!mark_fail"(0)
     lt rx1290_pos, -1, rx1290_done
@@ -16915,14 +18426,16 @@
     jump $I10
   rx1290_done:
     rx1290_cur."!cursor_fail"()
-    rx1290_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
+    if_null rx1290_debug, debug_999
+    rx1290_cur."!cursor_debug"("FAIL", "infix:sym<,>")
+  debug_999:
     .return (rx1290_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<,>"  :subid("337_1280467477.44751") :method
+.sub "!PREFIX__infix:sym<,>"  :subid("337_1282324002.40722") :method
 .annotate 'line', 447
     $P1292 = self."!PREFIX__!subrule"("O", ",")
     new $P1293, "ResizablePMCArray"
@@ -16932,7 +18445,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<return>"  :subid("338_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<return>"  :subid("338_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1297_tgt
     .local int rx1297_pos
@@ -16940,7 +18453,9 @@
     .local int rx1297_eos
     .local int rx1297_rep
     .local pmc rx1297_cur
+    .local pmc rx1297_debug
     (rx1297_cur, rx1297_pos, rx1297_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1297_debug, rx1297_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1297_cur
     .local pmc match
     .lex "$/", match
@@ -16952,7 +18467,9 @@
     substr rx1297_tgt, rx1297_tgt, rx1297_off
   rx1297_start:
     eq $I10, 1, rx1297_restart
-    rx1297_cur."!cursor_debug"("START ", "prefix:sym<return>")
+    if_null rx1297_debug, debug_1000
+    rx1297_cur."!cursor_debug"("START", "prefix:sym<return>")
+  debug_1000:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1300_done
     goto rxscan1300_scan
@@ -17002,11 +18519,15 @@
     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)
+    if_null rx1297_debug, debug_1001
+    rx1297_cur."!cursor_debug"("PASS", "prefix:sym<return>", " at pos=", rx1297_pos)
+  debug_1001:
     .return (rx1297_cur)
   rx1297_restart:
 .annotate 'line', 447
-    rx1297_cur."!cursor_debug"("NEXT ", "prefix:sym<return>")
+    if_null rx1297_debug, debug_1002
+    rx1297_cur."!cursor_debug"("NEXT", "prefix:sym<return>")
+  debug_1002:
   rx1297_fail:
     (rx1297_rep, rx1297_pos, $I10, $P10) = rx1297_cur."!mark_fail"(0)
     lt rx1297_pos, -1, rx1297_done
@@ -17014,14 +18535,16 @@
     jump $I10
   rx1297_done:
     rx1297_cur."!cursor_fail"()
-    rx1297_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
+    if_null rx1297_debug, debug_1003
+    rx1297_cur."!cursor_debug"("FAIL", "prefix:sym<return>")
+  debug_1003:
     .return (rx1297_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<return>"  :subid("339_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<return>"  :subid("339_1282324002.40722") :method
 .annotate 'line', 447
     new $P1299, "ResizablePMCArray"
     push $P1299, "return"
@@ -17030,7 +18553,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<make>"  :subid("340_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "prefix:sym<make>"  :subid("340_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1303_tgt
     .local int rx1303_pos
@@ -17038,7 +18561,9 @@
     .local int rx1303_eos
     .local int rx1303_rep
     .local pmc rx1303_cur
+    .local pmc rx1303_debug
     (rx1303_cur, rx1303_pos, rx1303_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1303_debug, rx1303_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1303_cur
     .local pmc match
     .lex "$/", match
@@ -17050,7 +18575,9 @@
     substr rx1303_tgt, rx1303_tgt, rx1303_off
   rx1303_start:
     eq $I10, 1, rx1303_restart
-    rx1303_cur."!cursor_debug"("START ", "prefix:sym<make>")
+    if_null rx1303_debug, debug_1004
+    rx1303_cur."!cursor_debug"("START", "prefix:sym<make>")
+  debug_1004:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1306_done
     goto rxscan1306_scan
@@ -17100,11 +18627,15 @@
     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)
+    if_null rx1303_debug, debug_1005
+    rx1303_cur."!cursor_debug"("PASS", "prefix:sym<make>", " at pos=", rx1303_pos)
+  debug_1005:
     .return (rx1303_cur)
   rx1303_restart:
 .annotate 'line', 447
-    rx1303_cur."!cursor_debug"("NEXT ", "prefix:sym<make>")
+    if_null rx1303_debug, debug_1006
+    rx1303_cur."!cursor_debug"("NEXT", "prefix:sym<make>")
+  debug_1006:
   rx1303_fail:
     (rx1303_rep, rx1303_pos, $I10, $P10) = rx1303_cur."!mark_fail"(0)
     lt rx1303_pos, -1, rx1303_done
@@ -17112,14 +18643,16 @@
     jump $I10
   rx1303_done:
     rx1303_cur."!cursor_fail"()
-    rx1303_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
+    if_null rx1303_debug, debug_1007
+    rx1303_cur."!cursor_debug"("FAIL", "prefix:sym<make>")
+  debug_1007:
     .return (rx1303_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<make>"  :subid("341_1280467477.44751") :method
+.sub "!PREFIX__prefix:sym<make>"  :subid("341_1282324002.40722") :method
 .annotate 'line', 447
     new $P1305, "ResizablePMCArray"
     push $P1305, "make"
@@ -17128,7 +18661,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<last>"  :subid("342_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<last>"  :subid("342_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1309_tgt
     .local int rx1309_pos
@@ -17136,7 +18669,9 @@
     .local int rx1309_eos
     .local int rx1309_rep
     .local pmc rx1309_cur
+    .local pmc rx1309_debug
     (rx1309_cur, rx1309_pos, rx1309_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1309_debug, rx1309_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1309_cur
     .local pmc match
     .lex "$/", match
@@ -17148,7 +18683,9 @@
     substr rx1309_tgt, rx1309_tgt, rx1309_off
   rx1309_start:
     eq $I10, 1, rx1309_restart
-    rx1309_cur."!cursor_debug"("START ", "term:sym<last>")
+    if_null rx1309_debug, debug_1008
+    rx1309_cur."!cursor_debug"("START", "term:sym<last>")
+  debug_1008:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1312_done
     goto rxscan1312_scan
@@ -17185,11 +18722,15 @@
   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)
+    if_null rx1309_debug, debug_1009
+    rx1309_cur."!cursor_debug"("PASS", "term:sym<last>", " at pos=", rx1309_pos)
+  debug_1009:
     .return (rx1309_cur)
   rx1309_restart:
 .annotate 'line', 447
-    rx1309_cur."!cursor_debug"("NEXT ", "term:sym<last>")
+    if_null rx1309_debug, debug_1010
+    rx1309_cur."!cursor_debug"("NEXT", "term:sym<last>")
+  debug_1010:
   rx1309_fail:
     (rx1309_rep, rx1309_pos, $I10, $P10) = rx1309_cur."!mark_fail"(0)
     lt rx1309_pos, -1, rx1309_done
@@ -17197,14 +18738,16 @@
     jump $I10
   rx1309_done:
     rx1309_cur."!cursor_fail"()
-    rx1309_cur."!cursor_debug"("FAIL  ", "term:sym<last>")
+    if_null rx1309_debug, debug_1011
+    rx1309_cur."!cursor_debug"("FAIL", "term:sym<last>")
+  debug_1011:
     .return (rx1309_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<last>"  :subid("343_1280467477.44751") :method
+.sub "!PREFIX__term:sym<last>"  :subid("343_1282324002.40722") :method
 .annotate 'line', 447
     new $P1311, "ResizablePMCArray"
     push $P1311, "last"
@@ -17213,7 +18756,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<next>"  :subid("344_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<next>"  :subid("344_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1315_tgt
     .local int rx1315_pos
@@ -17221,7 +18764,9 @@
     .local int rx1315_eos
     .local int rx1315_rep
     .local pmc rx1315_cur
+    .local pmc rx1315_debug
     (rx1315_cur, rx1315_pos, rx1315_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1315_debug, rx1315_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1315_cur
     .local pmc match
     .lex "$/", match
@@ -17233,7 +18778,9 @@
     substr rx1315_tgt, rx1315_tgt, rx1315_off
   rx1315_start:
     eq $I10, 1, rx1315_restart
-    rx1315_cur."!cursor_debug"("START ", "term:sym<next>")
+    if_null rx1315_debug, debug_1012
+    rx1315_cur."!cursor_debug"("START", "term:sym<next>")
+  debug_1012:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1318_done
     goto rxscan1318_scan
@@ -17270,11 +18817,15 @@
   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)
+    if_null rx1315_debug, debug_1013
+    rx1315_cur."!cursor_debug"("PASS", "term:sym<next>", " at pos=", rx1315_pos)
+  debug_1013:
     .return (rx1315_cur)
   rx1315_restart:
 .annotate 'line', 447
-    rx1315_cur."!cursor_debug"("NEXT ", "term:sym<next>")
+    if_null rx1315_debug, debug_1014
+    rx1315_cur."!cursor_debug"("NEXT", "term:sym<next>")
+  debug_1014:
   rx1315_fail:
     (rx1315_rep, rx1315_pos, $I10, $P10) = rx1315_cur."!mark_fail"(0)
     lt rx1315_pos, -1, rx1315_done
@@ -17282,14 +18833,16 @@
     jump $I10
   rx1315_done:
     rx1315_cur."!cursor_fail"()
-    rx1315_cur."!cursor_debug"("FAIL  ", "term:sym<next>")
+    if_null rx1315_debug, debug_1015
+    rx1315_cur."!cursor_debug"("FAIL", "term:sym<next>")
+  debug_1015:
     .return (rx1315_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<next>"  :subid("345_1280467477.44751") :method
+.sub "!PREFIX__term:sym<next>"  :subid("345_1282324002.40722") :method
 .annotate 'line', 447
     new $P1317, "ResizablePMCArray"
     push $P1317, "next"
@@ -17298,7 +18851,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<redo>"  :subid("346_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "term:sym<redo>"  :subid("346_1282324002.40722") :method :outer("11_1282324002.40722")
 .annotate 'line', 447
     .local string rx1321_tgt
     .local int rx1321_pos
@@ -17306,7 +18859,9 @@
     .local int rx1321_eos
     .local int rx1321_rep
     .local pmc rx1321_cur
+    .local pmc rx1321_debug
     (rx1321_cur, rx1321_pos, rx1321_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1321_debug, rx1321_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1321_cur
     .local pmc match
     .lex "$/", match
@@ -17318,7 +18873,9 @@
     substr rx1321_tgt, rx1321_tgt, rx1321_off
   rx1321_start:
     eq $I10, 1, rx1321_restart
-    rx1321_cur."!cursor_debug"("START ", "term:sym<redo>")
+    if_null rx1321_debug, debug_1016
+    rx1321_cur."!cursor_debug"("START", "term:sym<redo>")
+  debug_1016:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1324_done
     goto rxscan1324_scan
@@ -17355,11 +18912,15 @@
   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)
+    if_null rx1321_debug, debug_1017
+    rx1321_cur."!cursor_debug"("PASS", "term:sym<redo>", " at pos=", rx1321_pos)
+  debug_1017:
     .return (rx1321_cur)
   rx1321_restart:
 .annotate 'line', 447
-    rx1321_cur."!cursor_debug"("NEXT ", "term:sym<redo>")
+    if_null rx1321_debug, debug_1018
+    rx1321_cur."!cursor_debug"("NEXT", "term:sym<redo>")
+  debug_1018:
   rx1321_fail:
     (rx1321_rep, rx1321_pos, $I10, $P10) = rx1321_cur."!mark_fail"(0)
     lt rx1321_pos, -1, rx1321_done
@@ -17367,14 +18928,16 @@
     jump $I10
   rx1321_done:
     rx1321_cur."!cursor_fail"()
-    rx1321_cur."!cursor_debug"("FAIL  ", "term:sym<redo>")
+    if_null rx1321_debug, debug_1019
+    rx1321_cur."!cursor_debug"("FAIL", "term:sym<redo>")
+  debug_1019:
     .return (rx1321_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<redo>"  :subid("347_1280467477.44751") :method
+.sub "!PREFIX__term:sym<redo>"  :subid("347_1282324002.40722") :method
 .annotate 'line', 447
     new $P1323, "ResizablePMCArray"
     push $P1323, "redo"
@@ -17384,7 +18947,7 @@
 
 .namespace ["NQP";"Grammar"]
 .include "except_types.pasm"
-.sub "smartmatch"  :subid("348_1280467477.44751") :method :outer("11_1280467477.44751")
+.sub "smartmatch"  :subid("348_1282324002.40722") :method :outer("11_1282324002.40722")
     .param pmc param_1329
 .annotate 'line', 561
     new $P1328, 'ExceptionHandler'
@@ -17397,34 +18960,34 @@
     new $P1330, "Undef"
     .lex "$t", $P1330
     find_lex $P1331, "$/"
-    unless_null $P1331, vivify_384
+    unless_null $P1331, vivify_1020
     $P1331 = root_new ['parrot';'ResizablePMCArray']
-  vivify_384:
+  vivify_1020:
     set $P1332, $P1331[0]
-    unless_null $P1332, vivify_385
+    unless_null $P1332, vivify_1021
     new $P1332, "Undef"
-  vivify_385:
+  vivify_1021:
     store_lex "$t", $P1332
     find_lex $P1333, "$/"
-    unless_null $P1333, vivify_386
+    unless_null $P1333, vivify_1022
     $P1333 = root_new ['parrot';'ResizablePMCArray']
-  vivify_386:
+  vivify_1022:
     set $P1334, $P1333[1]
-    unless_null $P1334, vivify_387
+    unless_null $P1334, vivify_1023
     new $P1334, "Undef"
-  vivify_387:
+  vivify_1023:
     find_lex $P1335, "$/"
-    unless_null $P1335, vivify_388
+    unless_null $P1335, vivify_1024
     $P1335 = root_new ['parrot';'ResizablePMCArray']
     store_lex "$/", $P1335
-  vivify_388:
+  vivify_1024:
     set $P1335[0], $P1334
     find_lex $P1336, "$t"
     find_lex $P1337, "$/"
-    unless_null $P1337, vivify_389
+    unless_null $P1337, vivify_1025
     $P1337 = root_new ['parrot';'ResizablePMCArray']
     store_lex "$/", $P1337
-  vivify_389:
+  vivify_1025:
     set $P1337[1], $P1336
 .annotate 'line', 561
     .return ($P1336)
@@ -17437,34 +19000,34 @@
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1339"  :subid("349_1280467477.44751") :outer("11_1280467477.44751")
+.sub "_block1339"  :subid("349_1282324002.40722") :outer("11_1282324002.40722")
 .annotate 'line', 567
-    .const 'Sub' $P1396 = "368_1280467477.44751" 
+    .const 'Sub' $P1396 = "368_1282324002.40722" 
     capture_lex $P1396
-    .const 'Sub' $P1391 = "366_1280467477.44751" 
+    .const 'Sub' $P1391 = "366_1282324002.40722" 
     capture_lex $P1391
-    .const 'Sub' $P1379 = "363_1280467477.44751" 
+    .const 'Sub' $P1379 = "363_1282324002.40722" 
     capture_lex $P1379
-    .const 'Sub' $P1369 = "360_1280467477.44751" 
+    .const 'Sub' $P1369 = "360_1282324002.40722" 
     capture_lex $P1369
-    .const 'Sub' $P1364 = "358_1280467477.44751" 
+    .const 'Sub' $P1364 = "358_1282324002.40722" 
     capture_lex $P1364
-    .const 'Sub' $P1355 = "355_1280467477.44751" 
+    .const 'Sub' $P1355 = "355_1282324002.40722" 
     capture_lex $P1355
-    .const 'Sub' $P1350 = "353_1280467477.44751" 
+    .const 'Sub' $P1350 = "353_1282324002.40722" 
     capture_lex $P1350
-    .const 'Sub' $P1341 = "350_1280467477.44751" 
+    .const 'Sub' $P1341 = "350_1282324002.40722" 
     capture_lex $P1341
-    .const 'Sub' $P1396 = "368_1280467477.44751" 
+    .const 'Sub' $P1396 = "368_1282324002.40722" 
     capture_lex $P1396
     .return ($P1396)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<:my>"  :subid("350_1280467477.44751") :method :outer("349_1280467477.44751")
+.sub "metachar:sym<:my>"  :subid("350_1282324002.40722") :method :outer("349_1282324002.40722")
 .annotate 'line', 567
-    .const 'Sub' $P1347 = "352_1280467477.44751" 
+    .const 'Sub' $P1347 = "352_1282324002.40722" 
     capture_lex $P1347
     .local string rx1342_tgt
     .local int rx1342_pos
@@ -17472,7 +19035,9 @@
     .local int rx1342_eos
     .local int rx1342_rep
     .local pmc rx1342_cur
+    .local pmc rx1342_debug
     (rx1342_cur, rx1342_pos, rx1342_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1342_debug, rx1342_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1342_cur
     .local pmc match
     .lex "$/", match
@@ -17484,7 +19049,9 @@
     substr rx1342_tgt, rx1342_tgt, rx1342_off
   rx1342_start:
     eq $I10, 1, rx1342_restart
-    rx1342_cur."!cursor_debug"("START ", "metachar:sym<:my>")
+    if_null rx1342_debug, debug_1026
+    rx1342_cur."!cursor_debug"("START", "metachar:sym<:my>")
+  debug_1026:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1345_done
     goto rxscan1345_scan
@@ -17502,12 +19069,12 @@
     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
+    ord $I11, rx1342_tgt, $I11
+    ne $I11, 58, rx1342_fail
     add rx1342_pos, 1
   # rx subrule "before" subtype=zerowidth negate=
     rx1342_cur."!cursor_pos"(rx1342_pos)
-    .const 'Sub' $P1347 = "352_1280467477.44751" 
+    .const 'Sub' $P1347 = "352_1282324002.40722" 
     capture_lex $P1347
     $P10 = rx1342_cur."before"($P1347)
     unless $P10, rx1342_fail
@@ -17527,17 +19094,21 @@
     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
+    ord $I11, rx1342_tgt, $I11
+    ne $I11, 59, rx1342_fail
     add rx1342_pos, 1
 .annotate 'line', 568
   # rx pass
     rx1342_cur."!cursor_pass"(rx1342_pos, "metachar:sym<:my>")
-    rx1342_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1342_pos)
+    if_null rx1342_debug, debug_1031
+    rx1342_cur."!cursor_debug"("PASS", "metachar:sym<:my>", " at pos=", rx1342_pos)
+  debug_1031:
     .return (rx1342_cur)
   rx1342_restart:
 .annotate 'line', 567
-    rx1342_cur."!cursor_debug"("NEXT ", "metachar:sym<:my>")
+    if_null rx1342_debug, debug_1032
+    rx1342_cur."!cursor_debug"("NEXT", "metachar:sym<:my>")
+  debug_1032:
   rx1342_fail:
     (rx1342_rep, rx1342_pos, $I10, $P10) = rx1342_cur."!mark_fail"(0)
     lt rx1342_pos, -1, rx1342_done
@@ -17545,14 +19116,16 @@
     jump $I10
   rx1342_done:
     rx1342_cur."!cursor_fail"()
-    rx1342_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
+    if_null rx1342_debug, debug_1033
+    rx1342_cur."!cursor_debug"("FAIL", "metachar:sym<:my>")
+  debug_1033:
     .return (rx1342_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<:my>"  :subid("351_1280467477.44751") :method
+.sub "!PREFIX__metachar:sym<:my>"  :subid("351_1282324002.40722") :method
 .annotate 'line', 567
     new $P1344, "ResizablePMCArray"
     push $P1344, ":"
@@ -17561,7 +19134,7 @@
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1346"  :anon :subid("352_1280467477.44751") :method :outer("350_1280467477.44751")
+.sub "_block1346"  :anon :subid("352_1282324002.40722") :method :outer("350_1282324002.40722")
 .annotate 'line', 569
     .local string rx1348_tgt
     .local int rx1348_pos
@@ -17569,7 +19142,9 @@
     .local int rx1348_eos
     .local int rx1348_rep
     .local pmc rx1348_cur
+    .local pmc rx1348_debug
     (rx1348_cur, rx1348_pos, rx1348_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1348_debug, rx1348_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1348_cur
     .local pmc match
     .lex "$/", match
@@ -17581,7 +19156,9 @@
     substr rx1348_tgt, rx1348_tgt, rx1348_off
   rx1348_start:
     eq $I10, 1, rx1348_restart
-    rx1348_cur."!cursor_debug"("START ", "")
+    if_null rx1348_debug, debug_1027
+    rx1348_cur."!cursor_debug"("START", "")
+  debug_1027:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1349_done
     goto rxscan1349_scan
@@ -17603,10 +19180,14 @@
     add rx1348_pos, 2
   # rx pass
     rx1348_cur."!cursor_pass"(rx1348_pos, "")
-    rx1348_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1348_pos)
+    if_null rx1348_debug, debug_1028
+    rx1348_cur."!cursor_debug"("PASS", "", " at pos=", rx1348_pos)
+  debug_1028:
     .return (rx1348_cur)
   rx1348_restart:
-    rx1348_cur."!cursor_debug"("NEXT ", "")
+    if_null rx1348_debug, debug_1029
+    rx1348_cur."!cursor_debug"("NEXT", "")
+  debug_1029:
   rx1348_fail:
     (rx1348_rep, rx1348_pos, $I10, $P10) = rx1348_cur."!mark_fail"(0)
     lt rx1348_pos, -1, rx1348_done
@@ -17614,14 +19195,16 @@
     jump $I10
   rx1348_done:
     rx1348_cur."!cursor_fail"()
-    rx1348_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx1348_debug, debug_1030
+    rx1348_cur."!cursor_debug"("FAIL", "")
+  debug_1030:
     .return (rx1348_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<{ }>"  :subid("353_1280467477.44751") :method :outer("349_1280467477.44751")
+.sub "metachar:sym<{ }>"  :subid("353_1282324002.40722") :method :outer("349_1282324002.40722")
 .annotate 'line', 567
     .local string rx1351_tgt
     .local int rx1351_pos
@@ -17629,7 +19212,9 @@
     .local int rx1351_eos
     .local int rx1351_rep
     .local pmc rx1351_cur
+    .local pmc rx1351_debug
     (rx1351_cur, rx1351_pos, rx1351_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1351_debug, rx1351_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1351_cur
     .local pmc match
     .lex "$/", match
@@ -17641,7 +19226,9 @@
     substr rx1351_tgt, rx1351_tgt, rx1351_off
   rx1351_start:
     eq $I10, 1, rx1351_restart
-    rx1351_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
+    if_null rx1351_debug, debug_1034
+    rx1351_cur."!cursor_debug"("START", "metachar:sym<{ }>")
+  debug_1034:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1354_done
     goto rxscan1354_scan
@@ -17671,11 +19258,15 @@
 .annotate 'line', 572
   # rx pass
     rx1351_cur."!cursor_pass"(rx1351_pos, "metachar:sym<{ }>")
-    rx1351_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1351_pos)
+    if_null rx1351_debug, debug_1035
+    rx1351_cur."!cursor_debug"("PASS", "metachar:sym<{ }>", " at pos=", rx1351_pos)
+  debug_1035:
     .return (rx1351_cur)
   rx1351_restart:
 .annotate 'line', 567
-    rx1351_cur."!cursor_debug"("NEXT ", "metachar:sym<{ }>")
+    if_null rx1351_debug, debug_1036
+    rx1351_cur."!cursor_debug"("NEXT", "metachar:sym<{ }>")
+  debug_1036:
   rx1351_fail:
     (rx1351_rep, rx1351_pos, $I10, $P10) = rx1351_cur."!mark_fail"(0)
     lt rx1351_pos, -1, rx1351_done
@@ -17683,14 +19274,16 @@
     jump $I10
   rx1351_done:
     rx1351_cur."!cursor_fail"()
-    rx1351_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
+    if_null rx1351_debug, debug_1037
+    rx1351_cur."!cursor_debug"("FAIL", "metachar:sym<{ }>")
+  debug_1037:
     .return (rx1351_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<{ }>"  :subid("354_1280467477.44751") :method
+.sub "!PREFIX__metachar:sym<{ }>"  :subid("354_1282324002.40722") :method
 .annotate 'line', 567
     new $P1353, "ResizablePMCArray"
     push $P1353, "{"
@@ -17699,9 +19292,9 @@
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<nqpvar>"  :subid("355_1280467477.44751") :method :outer("349_1280467477.44751")
+.sub "metachar:sym<nqpvar>"  :subid("355_1282324002.40722") :method :outer("349_1282324002.40722")
 .annotate 'line', 567
-    .const 'Sub' $P1361 = "357_1280467477.44751" 
+    .const 'Sub' $P1361 = "357_1282324002.40722" 
     capture_lex $P1361
     .local string rx1356_tgt
     .local int rx1356_pos
@@ -17709,7 +19302,9 @@
     .local int rx1356_eos
     .local int rx1356_rep
     .local pmc rx1356_cur
+    .local pmc rx1356_debug
     (rx1356_cur, rx1356_pos, rx1356_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1356_debug, rx1356_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1356_cur
     .local pmc match
     .lex "$/", match
@@ -17721,7 +19316,9 @@
     substr rx1356_tgt, rx1356_tgt, rx1356_off
   rx1356_start:
     eq $I10, 1, rx1356_restart
-    rx1356_cur."!cursor_debug"("START ", "metachar:sym<nqpvar>")
+    if_null rx1356_debug, debug_1038
+    rx1356_cur."!cursor_debug"("START", "metachar:sym<nqpvar>")
+  debug_1038:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1359_done
     goto rxscan1359_scan
@@ -17743,7 +19340,7 @@
     lt $I11, 0, rx1356_fail
   # rx subrule "before" subtype=zerowidth negate=
     rx1356_cur."!cursor_pos"(rx1356_pos)
-    .const 'Sub' $P1361 = "357_1280467477.44751" 
+    .const 'Sub' $P1361 = "357_1282324002.40722" 
     capture_lex $P1361
     $P10 = rx1356_cur."before"($P1361)
     unless $P10, rx1356_fail
@@ -17757,11 +19354,15 @@
 .annotate 'line', 576
   # rx pass
     rx1356_cur."!cursor_pass"(rx1356_pos, "metachar:sym<nqpvar>")
-    rx1356_cur."!cursor_debug"("PASS  ", "metachar:sym<nqpvar>", " at pos=", rx1356_pos)
+    if_null rx1356_debug, debug_1043
+    rx1356_cur."!cursor_debug"("PASS", "metachar:sym<nqpvar>", " at pos=", rx1356_pos)
+  debug_1043:
     .return (rx1356_cur)
   rx1356_restart:
 .annotate 'line', 567
-    rx1356_cur."!cursor_debug"("NEXT ", "metachar:sym<nqpvar>")
+    if_null rx1356_debug, debug_1044
+    rx1356_cur."!cursor_debug"("NEXT", "metachar:sym<nqpvar>")
+  debug_1044:
   rx1356_fail:
     (rx1356_rep, rx1356_pos, $I10, $P10) = rx1356_cur."!mark_fail"(0)
     lt rx1356_pos, -1, rx1356_done
@@ -17769,14 +19370,16 @@
     jump $I10
   rx1356_done:
     rx1356_cur."!cursor_fail"()
-    rx1356_cur."!cursor_debug"("FAIL  ", "metachar:sym<nqpvar>")
+    if_null rx1356_debug, debug_1045
+    rx1356_cur."!cursor_debug"("FAIL", "metachar:sym<nqpvar>")
+  debug_1045:
     .return (rx1356_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<nqpvar>"  :subid("356_1280467477.44751") :method
+.sub "!PREFIX__metachar:sym<nqpvar>"  :subid("356_1282324002.40722") :method
 .annotate 'line', 567
     new $P1358, "ResizablePMCArray"
     push $P1358, "$"
@@ -17786,7 +19389,7 @@
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1360"  :anon :subid("357_1280467477.44751") :method :outer("355_1280467477.44751")
+.sub "_block1360"  :anon :subid("357_1282324002.40722") :method :outer("355_1282324002.40722")
 .annotate 'line', 577
     .local string rx1362_tgt
     .local int rx1362_pos
@@ -17794,7 +19397,9 @@
     .local int rx1362_eos
     .local int rx1362_rep
     .local pmc rx1362_cur
+    .local pmc rx1362_debug
     (rx1362_cur, rx1362_pos, rx1362_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1362_debug, rx1362_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1362_cur
     .local pmc match
     .lex "$/", match
@@ -17806,7 +19411,9 @@
     substr rx1362_tgt, rx1362_tgt, rx1362_off
   rx1362_start:
     eq $I10, 1, rx1362_restart
-    rx1362_cur."!cursor_debug"("START ", "")
+    if_null rx1362_debug, debug_1039
+    rx1362_cur."!cursor_debug"("START", "")
+  debug_1039:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1363_done
     goto rxscan1363_scan
@@ -17830,10 +19437,14 @@
     inc rx1362_pos
   # rx pass
     rx1362_cur."!cursor_pass"(rx1362_pos, "")
-    rx1362_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1362_pos)
+    if_null rx1362_debug, debug_1040
+    rx1362_cur."!cursor_debug"("PASS", "", " at pos=", rx1362_pos)
+  debug_1040:
     .return (rx1362_cur)
   rx1362_restart:
-    rx1362_cur."!cursor_debug"("NEXT ", "")
+    if_null rx1362_debug, debug_1041
+    rx1362_cur."!cursor_debug"("NEXT", "")
+  debug_1041:
   rx1362_fail:
     (rx1362_rep, rx1362_pos, $I10, $P10) = rx1362_cur."!mark_fail"(0)
     lt rx1362_pos, -1, rx1362_done
@@ -17841,14 +19452,16 @@
     jump $I10
   rx1362_done:
     rx1362_cur."!cursor_fail"()
-    rx1362_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx1362_debug, debug_1042
+    rx1362_cur."!cursor_debug"("FAIL", "")
+  debug_1042:
     .return (rx1362_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<{ }>"  :subid("358_1280467477.44751") :method :outer("349_1280467477.44751")
+.sub "assertion:sym<{ }>"  :subid("358_1282324002.40722") :method :outer("349_1282324002.40722")
 .annotate 'line', 567
     .local string rx1365_tgt
     .local int rx1365_pos
@@ -17856,7 +19469,9 @@
     .local int rx1365_eos
     .local int rx1365_rep
     .local pmc rx1365_cur
+    .local pmc rx1365_debug
     (rx1365_cur, rx1365_pos, rx1365_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1365_debug, rx1365_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1365_cur
     .local pmc match
     .lex "$/", match
@@ -17868,7 +19483,9 @@
     substr rx1365_tgt, rx1365_tgt, rx1365_off
   rx1365_start:
     eq $I10, 1, rx1365_restart
-    rx1365_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
+    if_null rx1365_debug, debug_1046
+    rx1365_cur."!cursor_debug"("START", "assertion:sym<{ }>")
+  debug_1046:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1368_done
     goto rxscan1368_scan
@@ -17898,11 +19515,15 @@
 .annotate 'line', 580
   # rx pass
     rx1365_cur."!cursor_pass"(rx1365_pos, "assertion:sym<{ }>")
-    rx1365_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1365_pos)
+    if_null rx1365_debug, debug_1047
+    rx1365_cur."!cursor_debug"("PASS", "assertion:sym<{ }>", " at pos=", rx1365_pos)
+  debug_1047:
     .return (rx1365_cur)
   rx1365_restart:
 .annotate 'line', 567
-    rx1365_cur."!cursor_debug"("NEXT ", "assertion:sym<{ }>")
+    if_null rx1365_debug, debug_1048
+    rx1365_cur."!cursor_debug"("NEXT", "assertion:sym<{ }>")
+  debug_1048:
   rx1365_fail:
     (rx1365_rep, rx1365_pos, $I10, $P10) = rx1365_cur."!mark_fail"(0)
     lt rx1365_pos, -1, rx1365_done
@@ -17910,14 +19531,16 @@
     jump $I10
   rx1365_done:
     rx1365_cur."!cursor_fail"()
-    rx1365_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
+    if_null rx1365_debug, debug_1049
+    rx1365_cur."!cursor_debug"("FAIL", "assertion:sym<{ }>")
+  debug_1049:
     .return (rx1365_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<{ }>"  :subid("359_1280467477.44751") :method
+.sub "!PREFIX__assertion:sym<{ }>"  :subid("359_1282324002.40722") :method
 .annotate 'line', 567
     new $P1367, "ResizablePMCArray"
     push $P1367, "{"
@@ -17926,9 +19549,9 @@
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<?{ }>"  :subid("360_1280467477.44751") :method :outer("349_1280467477.44751")
+.sub "assertion:sym<?{ }>"  :subid("360_1282324002.40722") :method :outer("349_1282324002.40722")
 .annotate 'line', 567
-    .const 'Sub' $P1375 = "362_1280467477.44751" 
+    .const 'Sub' $P1375 = "362_1282324002.40722" 
     capture_lex $P1375
     .local string rx1370_tgt
     .local int rx1370_pos
@@ -17936,7 +19559,9 @@
     .local int rx1370_eos
     .local int rx1370_rep
     .local pmc rx1370_cur
+    .local pmc rx1370_debug
     (rx1370_cur, rx1370_pos, rx1370_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1370_debug, rx1370_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1370_cur
     .local pmc match
     .lex "$/", match
@@ -17948,7 +19573,9 @@
     substr rx1370_tgt, rx1370_tgt, rx1370_off
   rx1370_start:
     eq $I10, 1, rx1370_restart
-    rx1370_cur."!cursor_debug"("START ", "assertion:sym<?{ }>")
+    if_null rx1370_debug, debug_1050
+    rx1370_cur."!cursor_debug"("START", "assertion:sym<?{ }>")
+  debug_1050:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1373_done
     goto rxscan1373_scan
@@ -17974,7 +19601,7 @@
     inc rx1370_pos
   # rx subrule "before" subtype=zerowidth negate=
     rx1370_cur."!cursor_pos"(rx1370_pos)
-    .const 'Sub' $P1375 = "362_1280467477.44751" 
+    .const 'Sub' $P1375 = "362_1282324002.40722" 
     capture_lex $P1375
     $P10 = rx1370_cur."before"($P1375)
     unless $P10, rx1370_fail
@@ -17999,11 +19626,15 @@
 .annotate 'line', 584
   # rx pass
     rx1370_cur."!cursor_pass"(rx1370_pos, "assertion:sym<?{ }>")
-    rx1370_cur."!cursor_debug"("PASS  ", "assertion:sym<?{ }>", " at pos=", rx1370_pos)
+    if_null rx1370_debug, debug_1055
+    rx1370_cur."!cursor_debug"("PASS", "assertion:sym<?{ }>", " at pos=", rx1370_pos)
+  debug_1055:
     .return (rx1370_cur)
   rx1370_restart:
 .annotate 'line', 567
-    rx1370_cur."!cursor_debug"("NEXT ", "assertion:sym<?{ }>")
+    if_null rx1370_debug, debug_1056
+    rx1370_cur."!cursor_debug"("NEXT", "assertion:sym<?{ }>")
+  debug_1056:
   rx1370_fail:
     (rx1370_rep, rx1370_pos, $I10, $P10) = rx1370_cur."!mark_fail"(0)
     lt rx1370_pos, -1, rx1370_done
@@ -18011,14 +19642,16 @@
     jump $I10
   rx1370_done:
     rx1370_cur."!cursor_fail"()
-    rx1370_cur."!cursor_debug"("FAIL  ", "assertion:sym<?{ }>")
+    if_null rx1370_debug, debug_1057
+    rx1370_cur."!cursor_debug"("FAIL", "assertion:sym<?{ }>")
+  debug_1057:
     .return (rx1370_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<?{ }>"  :subid("361_1280467477.44751") :method
+.sub "!PREFIX__assertion:sym<?{ }>"  :subid("361_1282324002.40722") :method
 .annotate 'line', 567
     new $P1372, "ResizablePMCArray"
     push $P1372, "!"
@@ -18028,7 +19661,7 @@
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1374"  :anon :subid("362_1280467477.44751") :method :outer("360_1280467477.44751")
+.sub "_block1374"  :anon :subid("362_1282324002.40722") :method :outer("360_1282324002.40722")
 .annotate 'line', 585
     .local string rx1376_tgt
     .local int rx1376_pos
@@ -18036,7 +19669,9 @@
     .local int rx1376_eos
     .local int rx1376_rep
     .local pmc rx1376_cur
+    .local pmc rx1376_debug
     (rx1376_cur, rx1376_pos, rx1376_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1376_debug, rx1376_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1376_cur
     .local pmc match
     .lex "$/", match
@@ -18048,7 +19683,9 @@
     substr rx1376_tgt, rx1376_tgt, rx1376_off
   rx1376_start:
     eq $I10, 1, rx1376_restart
-    rx1376_cur."!cursor_debug"("START ", "")
+    if_null rx1376_debug, debug_1051
+    rx1376_cur."!cursor_debug"("START", "")
+  debug_1051:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1377_done
     goto rxscan1377_scan
@@ -18065,15 +19702,19 @@
     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
+    ord $I11, rx1376_tgt, $I11
+    ne $I11, 123, rx1376_fail
     add rx1376_pos, 1
   # rx pass
     rx1376_cur."!cursor_pass"(rx1376_pos, "")
-    rx1376_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1376_pos)
+    if_null rx1376_debug, debug_1052
+    rx1376_cur."!cursor_debug"("PASS", "", " at pos=", rx1376_pos)
+  debug_1052:
     .return (rx1376_cur)
   rx1376_restart:
-    rx1376_cur."!cursor_debug"("NEXT ", "")
+    if_null rx1376_debug, debug_1053
+    rx1376_cur."!cursor_debug"("NEXT", "")
+  debug_1053:
   rx1376_fail:
     (rx1376_rep, rx1376_pos, $I10, $P10) = rx1376_cur."!mark_fail"(0)
     lt rx1376_pos, -1, rx1376_done
@@ -18081,16 +19722,18 @@
     jump $I10
   rx1376_done:
     rx1376_cur."!cursor_fail"()
-    rx1376_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx1376_debug, debug_1054
+    rx1376_cur."!cursor_debug"("FAIL", "")
+  debug_1054:
     .return (rx1376_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<name>"  :subid("363_1280467477.44751") :method :outer("349_1280467477.44751")
+.sub "assertion:sym<name>"  :subid("363_1282324002.40722") :method :outer("349_1282324002.40722")
 .annotate 'line', 567
-    .const 'Sub' $P1388 = "365_1280467477.44751" 
+    .const 'Sub' $P1388 = "365_1282324002.40722" 
     capture_lex $P1388
     .local string rx1380_tgt
     .local int rx1380_pos
@@ -18098,8 +19741,10 @@
     .local int rx1380_eos
     .local int rx1380_rep
     .local pmc rx1380_cur
+    .local pmc rx1380_debug
     (rx1380_cur, rx1380_pos, rx1380_tgt, $I10) = self."!cursor_start"()
-    rx1380_cur."!cursor_caparray"("arglist", "nibbler", "assertion")
+    rx1380_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    getattribute rx1380_debug, rx1380_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1380_cur
     .local pmc match
     .lex "$/", match
@@ -18111,7 +19756,9 @@
     substr rx1380_tgt, rx1380_tgt, rx1380_off
   rx1380_start:
     eq $I10, 1, rx1380_restart
-    rx1380_cur."!cursor_debug"("START ", "assertion:sym<name>")
+    if_null rx1380_debug, debug_1058
+    rx1380_cur."!cursor_debug"("START", "assertion:sym<name>")
+  debug_1058:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1384_done
     goto rxscan1384_scan
@@ -18144,7 +19791,7 @@
 .annotate 'line', 591
   # rx subrule "before" subtype=zerowidth negate=
     rx1380_cur."!cursor_pos"(rx1380_pos)
-    .const 'Sub' $P1388 = "365_1280467477.44751" 
+    .const 'Sub' $P1388 = "365_1282324002.40722" 
     capture_lex $P1388
     $P10 = rx1380_cur."before"($P1388)
     unless $P10, rx1380_fail
@@ -18157,8 +19804,8 @@
     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
+    ord $I11, rx1380_tgt, $I11
+    ne $I11, 61, rx1380_fail
     add rx1380_pos, 1
   # rx subrule "assertion" subtype=capture negate=
     rx1380_cur."!cursor_pos"(rx1380_pos)
@@ -18176,8 +19823,8 @@
     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
+    ord $I11, rx1380_tgt, $I11
+    ne $I11, 58, rx1380_fail
     add rx1380_pos, 1
   # rx subrule "arglist" subtype=capture negate=
     rx1380_cur."!cursor_pos"(rx1380_pos)
@@ -18195,8 +19842,8 @@
     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
+    ord $I11, rx1380_tgt, $I11
+    ne $I11, 40, rx1380_fail
     add rx1380_pos, 1
   # rx subrule "LANG" subtype=capture negate=
     rx1380_cur."!cursor_pos"(rx1380_pos)
@@ -18209,8 +19856,8 @@
     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
+    ord $I11, rx1380_tgt, $I11
+    ne $I11, 41, rx1380_fail
     add rx1380_pos, 1
     goto alt1386_end
   alt1386_4:
@@ -18235,11 +19882,15 @@
 .annotate 'line', 588
   # rx pass
     rx1380_cur."!cursor_pass"(rx1380_pos, "assertion:sym<name>")
-    rx1380_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1380_pos)
+    if_null rx1380_debug, debug_1063
+    rx1380_cur."!cursor_debug"("PASS", "assertion:sym<name>", " at pos=", rx1380_pos)
+  debug_1063:
     .return (rx1380_cur)
   rx1380_restart:
 .annotate 'line', 567
-    rx1380_cur."!cursor_debug"("NEXT ", "assertion:sym<name>")
+    if_null rx1380_debug, debug_1064
+    rx1380_cur."!cursor_debug"("NEXT", "assertion:sym<name>")
+  debug_1064:
   rx1380_fail:
     (rx1380_rep, rx1380_pos, $I10, $P10) = rx1380_cur."!mark_fail"(0)
     lt rx1380_pos, -1, rx1380_done
@@ -18247,14 +19898,16 @@
     jump $I10
   rx1380_done:
     rx1380_cur."!cursor_fail"()
-    rx1380_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
+    if_null rx1380_debug, debug_1065
+    rx1380_cur."!cursor_debug"("FAIL", "assertion:sym<name>")
+  debug_1065:
     .return (rx1380_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("364_1280467477.44751") :method
+.sub "!PREFIX__assertion:sym<name>"  :subid("364_1282324002.40722") :method
 .annotate 'line', 567
     $P1382 = self."!PREFIX__!subrule"("identifier", "")
     new $P1383, "ResizablePMCArray"
@@ -18264,7 +19917,7 @@
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1387"  :anon :subid("365_1280467477.44751") :method :outer("363_1280467477.44751")
+.sub "_block1387"  :anon :subid("365_1282324002.40722") :method :outer("363_1282324002.40722")
 .annotate 'line', 591
     .local string rx1389_tgt
     .local int rx1389_pos
@@ -18272,7 +19925,9 @@
     .local int rx1389_eos
     .local int rx1389_rep
     .local pmc rx1389_cur
+    .local pmc rx1389_debug
     (rx1389_cur, rx1389_pos, rx1389_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1389_debug, rx1389_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1389_cur
     .local pmc match
     .lex "$/", match
@@ -18284,7 +19939,9 @@
     substr rx1389_tgt, rx1389_tgt, rx1389_off
   rx1389_start:
     eq $I10, 1, rx1389_restart
-    rx1389_cur."!cursor_debug"("START ", "")
+    if_null rx1389_debug, debug_1059
+    rx1389_cur."!cursor_debug"("START", "")
+  debug_1059:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1390_done
     goto rxscan1390_scan
@@ -18301,15 +19958,19 @@
     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
+    ord $I11, rx1389_tgt, $I11
+    ne $I11, 62, rx1389_fail
     add rx1389_pos, 1
   # rx pass
     rx1389_cur."!cursor_pass"(rx1389_pos, "")
-    rx1389_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1389_pos)
+    if_null rx1389_debug, debug_1060
+    rx1389_cur."!cursor_debug"("PASS", "", " at pos=", rx1389_pos)
+  debug_1060:
     .return (rx1389_cur)
   rx1389_restart:
-    rx1389_cur."!cursor_debug"("NEXT ", "")
+    if_null rx1389_debug, debug_1061
+    rx1389_cur."!cursor_debug"("NEXT", "")
+  debug_1061:
   rx1389_fail:
     (rx1389_rep, rx1389_pos, $I10, $P10) = rx1389_cur."!mark_fail"(0)
     lt rx1389_pos, -1, rx1389_done
@@ -18317,14 +19978,16 @@
     jump $I10
   rx1389_done:
     rx1389_cur."!cursor_fail"()
-    rx1389_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx1389_debug, debug_1062
+    rx1389_cur."!cursor_debug"("FAIL", "")
+  debug_1062:
     .return (rx1389_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<var>"  :subid("366_1280467477.44751") :method :outer("349_1280467477.44751")
+.sub "assertion:sym<var>"  :subid("366_1282324002.40722") :method :outer("349_1282324002.40722")
 .annotate 'line', 567
     .local string rx1392_tgt
     .local int rx1392_pos
@@ -18332,7 +19995,9 @@
     .local int rx1392_eos
     .local int rx1392_rep
     .local pmc rx1392_cur
+    .local pmc rx1392_debug
     (rx1392_cur, rx1392_pos, rx1392_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1392_debug, rx1392_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1392_cur
     .local pmc match
     .lex "$/", match
@@ -18344,7 +20009,9 @@
     substr rx1392_tgt, rx1392_tgt, rx1392_off
   rx1392_start:
     eq $I10, 1, rx1392_restart
-    rx1392_cur."!cursor_debug"("START ", "assertion:sym<var>")
+    if_null rx1392_debug, debug_1066
+    rx1392_cur."!cursor_debug"("START", "assertion:sym<var>")
+  debug_1066:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1395_done
     goto rxscan1395_scan
@@ -18374,11 +20041,15 @@
 .annotate 'line', 599
   # rx pass
     rx1392_cur."!cursor_pass"(rx1392_pos, "assertion:sym<var>")
-    rx1392_cur."!cursor_debug"("PASS  ", "assertion:sym<var>", " at pos=", rx1392_pos)
+    if_null rx1392_debug, debug_1067
+    rx1392_cur."!cursor_debug"("PASS", "assertion:sym<var>", " at pos=", rx1392_pos)
+  debug_1067:
     .return (rx1392_cur)
   rx1392_restart:
 .annotate 'line', 567
-    rx1392_cur."!cursor_debug"("NEXT ", "assertion:sym<var>")
+    if_null rx1392_debug, debug_1068
+    rx1392_cur."!cursor_debug"("NEXT", "assertion:sym<var>")
+  debug_1068:
   rx1392_fail:
     (rx1392_rep, rx1392_pos, $I10, $P10) = rx1392_cur."!mark_fail"(0)
     lt rx1392_pos, -1, rx1392_done
@@ -18386,14 +20057,16 @@
     jump $I10
   rx1392_done:
     rx1392_cur."!cursor_fail"()
-    rx1392_cur."!cursor_debug"("FAIL  ", "assertion:sym<var>")
+    if_null rx1392_debug, debug_1069
+    rx1392_cur."!cursor_debug"("FAIL", "assertion:sym<var>")
+  debug_1069:
     .return (rx1392_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<var>"  :subid("367_1280467477.44751") :method
+.sub "!PREFIX__assertion:sym<var>"  :subid("367_1282324002.40722") :method
 .annotate 'line', 567
     new $P1394, "ResizablePMCArray"
     push $P1394, "$"
@@ -18403,7 +20076,7 @@
 
 
 .namespace ["NQP";"Regex"]
-.sub "codeblock"  :subid("368_1280467477.44751") :method :outer("349_1280467477.44751")
+.sub "codeblock"  :subid("368_1282324002.40722") :method :outer("349_1282324002.40722")
 .annotate 'line', 567
     .local string rx1397_tgt
     .local int rx1397_pos
@@ -18411,7 +20084,9 @@
     .local int rx1397_eos
     .local int rx1397_rep
     .local pmc rx1397_cur
+    .local pmc rx1397_debug
     (rx1397_cur, rx1397_pos, rx1397_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1397_debug, rx1397_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx1397_cur
     .local pmc match
     .lex "$/", match
@@ -18423,7 +20098,9 @@
     substr rx1397_tgt, rx1397_tgt, rx1397_off
   rx1397_start:
     eq $I10, 1, rx1397_restart
-    rx1397_cur."!cursor_debug"("START ", "codeblock")
+    if_null rx1397_debug, debug_1070
+    rx1397_cur."!cursor_debug"("START", "codeblock")
+  debug_1070:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1401_done
     goto rxscan1401_scan
@@ -18447,11 +20124,15 @@
 .annotate 'line', 603
   # rx pass
     rx1397_cur."!cursor_pass"(rx1397_pos, "codeblock")
-    rx1397_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1397_pos)
+    if_null rx1397_debug, debug_1071
+    rx1397_cur."!cursor_debug"("PASS", "codeblock", " at pos=", rx1397_pos)
+  debug_1071:
     .return (rx1397_cur)
   rx1397_restart:
 .annotate 'line', 567
-    rx1397_cur."!cursor_debug"("NEXT ", "codeblock")
+    if_null rx1397_debug, debug_1072
+    rx1397_cur."!cursor_debug"("NEXT", "codeblock")
+  debug_1072:
   rx1397_fail:
     (rx1397_rep, rx1397_pos, $I10, $P10) = rx1397_cur."!mark_fail"(0)
     lt rx1397_pos, -1, rx1397_done
@@ -18459,14 +20140,16 @@
     jump $I10
   rx1397_done:
     rx1397_cur."!cursor_fail"()
-    rx1397_cur."!cursor_debug"("FAIL  ", "codeblock")
+    if_null rx1397_debug, debug_1073
+    rx1397_cur."!cursor_debug"("FAIL", "codeblock")
+  debug_1073:
     .return (rx1397_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__codeblock"  :subid("369_1280467477.44751") :method
+.sub "!PREFIX__codeblock"  :subid("369_1282324002.40722") :method
 .annotate 'line', 567
     $P1399 = self."!PREFIX__!subrule"("LANG", "")
     new $P1400, "ResizablePMCArray"
@@ -18476,18 +20159,18 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block1403" :load :anon :subid("370_1280467477.44751")
+.sub "_block1403" :load :anon :subid("370_1282324002.40722")
 .annotate 'line', 4
-    .const 'Sub' $P1405 = "11_1280467477.44751" 
+    .const 'Sub' $P1405 = "11_1282324002.40722" 
     $P1406 = $P1405()
     .return ($P1406)
 .end
 
 
 .namespace []
-.sub "_block1424" :load :anon :subid("371_1280467477.44751")
+.sub "_block1424" :load :anon :subid("371_1282324002.40722")
 .annotate 'line', 1
-    .const 'Sub' $P1426 = "10_1280467477.44751" 
+    .const 'Sub' $P1426 = "10_1282324002.40722" 
     $P1427 = $P1426()
     .return ($P1427)
 .end
@@ -18495,7 +20178,7 @@
 ### .include 'gen/nqp-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467483.70067")
+.sub "_block11"  :anon :subid("10_1282324007.53935")
 .annotate 'line', 0
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
@@ -18512,15 +20195,15 @@
     $P2452 = $P14()
 .annotate 'line', 1
     .return ($P2452)
-    .const 'Sub' $P2454 = "143_1280467483.70067" 
+    .const 'Sub' $P2454 = "143_1282324007.53935" 
     .return ($P2454)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post144") :outer("10_1280467483.70067")
+.sub "" :load :init :subid("post144") :outer("10_1282324007.53935")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467483.70067" 
+    .const 'Sub' $P12 = "10_1282324007.53935" 
     .local pmc block
     set block, $P12
     $P2457 = get_root_global ["parrot"], "P6metaclass"
@@ -18529,217 +20212,217 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block13"  :subid("11_1280467483.70067") :outer("10_1280467483.70067")
+.sub "_block13"  :subid("11_1282324007.53935") :outer("10_1282324007.53935")
 .annotate 'line', 3
-    .const 'Sub' $P2448 = "142_1280467483.70067" 
+    .const 'Sub' $P2448 = "142_1282324007.53935" 
     capture_lex $P2448
     get_hll_global $P2331, ["NQP";"RegexActions"], "_block2330" 
     capture_lex $P2331
-    .const 'Sub' $P2320 = "132_1280467483.70067" 
+    .const 'Sub' $P2320 = "132_1282324007.53935" 
     capture_lex $P2320
-    .const 'Sub' $P2313 = "131_1280467483.70067" 
+    .const 'Sub' $P2313 = "131_1282324007.53935" 
     capture_lex $P2313
-    .const 'Sub' $P2306 = "130_1280467483.70067" 
+    .const 'Sub' $P2306 = "130_1282324007.53935" 
     capture_lex $P2306
-    .const 'Sub' $P2299 = "129_1280467483.70067" 
+    .const 'Sub' $P2299 = "129_1282324007.53935" 
     capture_lex $P2299
-    .const 'Sub' $P2286 = "128_1280467483.70067" 
+    .const 'Sub' $P2286 = "128_1282324007.53935" 
     capture_lex $P2286
-    .const 'Sub' $P2276 = "127_1280467483.70067" 
+    .const 'Sub' $P2276 = "127_1282324007.53935" 
     capture_lex $P2276
-    .const 'Sub' $P2266 = "126_1280467483.70067" 
+    .const 'Sub' $P2266 = "126_1282324007.53935" 
     capture_lex $P2266
-    .const 'Sub' $P2256 = "125_1280467483.70067" 
+    .const 'Sub' $P2256 = "125_1282324007.53935" 
     capture_lex $P2256
-    .const 'Sub' $P2249 = "124_1280467483.70067" 
+    .const 'Sub' $P2249 = "124_1282324007.53935" 
     capture_lex $P2249
-    .const 'Sub' $P2235 = "123_1280467483.70067" 
+    .const 'Sub' $P2235 = "123_1282324007.53935" 
     capture_lex $P2235
-    .const 'Sub' $P2225 = "122_1280467483.70067" 
+    .const 'Sub' $P2225 = "122_1282324007.53935" 
     capture_lex $P2225
-    .const 'Sub' $P2188 = "121_1280467483.70067" 
+    .const 'Sub' $P2188 = "121_1282324007.53935" 
     capture_lex $P2188
-    .const 'Sub' $P2174 = "120_1280467483.70067" 
+    .const 'Sub' $P2174 = "120_1282324007.53935" 
     capture_lex $P2174
-    .const 'Sub' $P2164 = "119_1280467483.70067" 
+    .const 'Sub' $P2164 = "119_1282324007.53935" 
     capture_lex $P2164
-    .const 'Sub' $P2154 = "118_1280467483.70067" 
+    .const 'Sub' $P2154 = "118_1282324007.53935" 
     capture_lex $P2154
-    .const 'Sub' $P2144 = "117_1280467483.70067" 
+    .const 'Sub' $P2144 = "117_1282324007.53935" 
     capture_lex $P2144
-    .const 'Sub' $P2134 = "116_1280467483.70067" 
+    .const 'Sub' $P2134 = "116_1282324007.53935" 
     capture_lex $P2134
-    .const 'Sub' $P2124 = "115_1280467483.70067" 
+    .const 'Sub' $P2124 = "115_1282324007.53935" 
     capture_lex $P2124
-    .const 'Sub' $P2096 = "114_1280467483.70067" 
+    .const 'Sub' $P2096 = "114_1282324007.53935" 
     capture_lex $P2096
-    .const 'Sub' $P2079 = "113_1280467483.70067" 
+    .const 'Sub' $P2079 = "113_1282324007.53935" 
     capture_lex $P2079
-    .const 'Sub' $P2069 = "112_1280467483.70067" 
+    .const 'Sub' $P2069 = "112_1282324007.53935" 
     capture_lex $P2069
-    .const 'Sub' $P2056 = "111_1280467483.70067" 
+    .const 'Sub' $P2056 = "111_1282324007.53935" 
     capture_lex $P2056
-    .const 'Sub' $P2043 = "110_1280467483.70067" 
+    .const 'Sub' $P2043 = "110_1282324007.53935" 
     capture_lex $P2043
-    .const 'Sub' $P2030 = "109_1280467483.70067" 
+    .const 'Sub' $P2030 = "109_1282324007.53935" 
     capture_lex $P2030
-    .const 'Sub' $P2020 = "108_1280467483.70067" 
+    .const 'Sub' $P2020 = "108_1282324007.53935" 
     capture_lex $P2020
-    .const 'Sub' $P1991 = "107_1280467483.70067" 
+    .const 'Sub' $P1991 = "107_1282324007.53935" 
     capture_lex $P1991
-    .const 'Sub' $P1967 = "106_1280467483.70067" 
+    .const 'Sub' $P1967 = "106_1282324007.53935" 
     capture_lex $P1967
-    .const 'Sub' $P1957 = "105_1280467483.70067" 
+    .const 'Sub' $P1957 = "105_1282324007.53935" 
     capture_lex $P1957
-    .const 'Sub' $P1947 = "104_1280467483.70067" 
+    .const 'Sub' $P1947 = "104_1282324007.53935" 
     capture_lex $P1947
-    .const 'Sub' $P1920 = "103_1280467483.70067" 
+    .const 'Sub' $P1920 = "103_1282324007.53935" 
     capture_lex $P1920
-    .const 'Sub' $P1902 = "102_1280467483.70067" 
+    .const 'Sub' $P1902 = "102_1282324007.53935" 
     capture_lex $P1902
-    .const 'Sub' $P1892 = "101_1280467483.70067" 
+    .const 'Sub' $P1892 = "101_1282324007.53935" 
     capture_lex $P1892
-    .const 'Sub' $P1788 = "98_1280467483.70067" 
+    .const 'Sub' $P1788 = "98_1282324007.53935" 
     capture_lex $P1788
-    .const 'Sub' $P1778 = "97_1280467483.70067" 
+    .const 'Sub' $P1778 = "97_1282324007.53935" 
     capture_lex $P1778
-    .const 'Sub' $P1749 = "96_1280467483.70067" 
+    .const 'Sub' $P1749 = "96_1282324007.53935" 
     capture_lex $P1749
-    .const 'Sub' $P1707 = "95_1280467483.70067" 
+    .const 'Sub' $P1707 = "95_1282324007.53935" 
     capture_lex $P1707
-    .const 'Sub' $P1691 = "94_1280467483.70067" 
+    .const 'Sub' $P1691 = "94_1282324007.53935" 
     capture_lex $P1691
-    .const 'Sub' $P1682 = "93_1280467483.70067" 
+    .const 'Sub' $P1682 = "93_1282324007.53935" 
     capture_lex $P1682
-    .const 'Sub' $P1650 = "92_1280467483.70067" 
+    .const 'Sub' $P1650 = "92_1282324007.53935" 
     capture_lex $P1650
-    .const 'Sub' $P1551 = "89_1280467483.70067" 
+    .const 'Sub' $P1551 = "89_1282324007.53935" 
     capture_lex $P1551
-    .const 'Sub' $P1534 = "88_1280467483.70067" 
+    .const 'Sub' $P1534 = "88_1282324007.53935" 
     capture_lex $P1534
-    .const 'Sub' $P1514 = "87_1280467483.70067" 
+    .const 'Sub' $P1514 = "87_1282324007.53935" 
     capture_lex $P1514
-    .const 'Sub' $P1402 = "84_1280467483.70067" 
+    .const 'Sub' $P1402 = "84_1282324007.53935" 
     capture_lex $P1402
-    .const 'Sub' $P1345 = "80_1280467483.70067" 
+    .const 'Sub' $P1345 = "80_1282324007.53935" 
     capture_lex $P1345
-    .const 'Sub' $P1300 = "78_1280467483.70067" 
+    .const 'Sub' $P1300 = "78_1282324007.53935" 
     capture_lex $P1300
-    .const 'Sub' $P1250 = "76_1280467483.70067" 
+    .const 'Sub' $P1250 = "76_1282324007.53935" 
     capture_lex $P1250
-    .const 'Sub' $P1240 = "75_1280467483.70067" 
+    .const 'Sub' $P1240 = "75_1282324007.53935" 
     capture_lex $P1240
-    .const 'Sub' $P1230 = "74_1280467483.70067" 
+    .const 'Sub' $P1230 = "74_1282324007.53935" 
     capture_lex $P1230
-    .const 'Sub' $P1159 = "72_1280467483.70067" 
+    .const 'Sub' $P1159 = "72_1282324007.53935" 
     capture_lex $P1159
-    .const 'Sub' $P1149 = "71_1280467483.70067" 
+    .const 'Sub' $P1149 = "71_1282324007.53935" 
     capture_lex $P1149
-    .const 'Sub' $P1132 = "70_1280467483.70067" 
+    .const 'Sub' $P1132 = "70_1282324007.53935" 
     capture_lex $P1132
-    .const 'Sub' $P1115 = "69_1280467483.70067" 
+    .const 'Sub' $P1115 = "69_1282324007.53935" 
     capture_lex $P1115
-    .const 'Sub' $P1098 = "68_1280467483.70067" 
+    .const 'Sub' $P1098 = "68_1282324007.53935" 
     capture_lex $P1098
-    .const 'Sub' $P1088 = "67_1280467483.70067" 
+    .const 'Sub' $P1088 = "67_1282324007.53935" 
     capture_lex $P1088
-    .const 'Sub' $P1078 = "66_1280467483.70067" 
+    .const 'Sub' $P1078 = "66_1282324007.53935" 
     capture_lex $P1078
-    .const 'Sub' $P1068 = "65_1280467483.70067" 
+    .const 'Sub' $P1068 = "65_1282324007.53935" 
     capture_lex $P1068
-    .const 'Sub' $P1044 = "64_1280467483.70067" 
+    .const 'Sub' $P1044 = "64_1282324007.53935" 
     capture_lex $P1044
-    .const 'Sub' $P991 = "63_1280467483.70067" 
+    .const 'Sub' $P991 = "63_1282324007.53935" 
     capture_lex $P991
-    .const 'Sub' $P981 = "62_1280467483.70067" 
+    .const 'Sub' $P981 = "62_1282324007.53935" 
     capture_lex $P981
-    .const 'Sub' $P892 = "60_1280467483.70067" 
+    .const 'Sub' $P892 = "60_1282324007.53935" 
     capture_lex $P892
-    .const 'Sub' $P866 = "59_1280467483.70067" 
+    .const 'Sub' $P866 = "59_1282324007.53935" 
     capture_lex $P866
-    .const 'Sub' $P850 = "58_1280467483.70067" 
+    .const 'Sub' $P850 = "58_1282324007.53935" 
     capture_lex $P850
-    .const 'Sub' $P840 = "57_1280467483.70067" 
+    .const 'Sub' $P840 = "57_1282324007.53935" 
     capture_lex $P840
-    .const 'Sub' $P830 = "56_1280467483.70067" 
+    .const 'Sub' $P830 = "56_1282324007.53935" 
     capture_lex $P830
-    .const 'Sub' $P820 = "55_1280467483.70067" 
+    .const 'Sub' $P820 = "55_1282324007.53935" 
     capture_lex $P820
-    .const 'Sub' $P810 = "54_1280467483.70067" 
+    .const 'Sub' $P810 = "54_1282324007.53935" 
     capture_lex $P810
-    .const 'Sub' $P800 = "53_1280467483.70067" 
+    .const 'Sub' $P800 = "53_1282324007.53935" 
     capture_lex $P800
-    .const 'Sub' $P790 = "52_1280467483.70067" 
+    .const 'Sub' $P790 = "52_1282324007.53935" 
     capture_lex $P790
-    .const 'Sub' $P780 = "51_1280467483.70067" 
+    .const 'Sub' $P780 = "51_1282324007.53935" 
     capture_lex $P780
-    .const 'Sub' $P770 = "50_1280467483.70067" 
+    .const 'Sub' $P770 = "50_1282324007.53935" 
     capture_lex $P770
-    .const 'Sub' $P760 = "49_1280467483.70067" 
+    .const 'Sub' $P760 = "49_1282324007.53935" 
     capture_lex $P760
-    .const 'Sub' $P750 = "48_1280467483.70067" 
+    .const 'Sub' $P750 = "48_1282324007.53935" 
     capture_lex $P750
-    .const 'Sub' $P740 = "47_1280467483.70067" 
+    .const 'Sub' $P740 = "47_1282324007.53935" 
     capture_lex $P740
-    .const 'Sub' $P730 = "46_1280467483.70067" 
+    .const 'Sub' $P730 = "46_1282324007.53935" 
     capture_lex $P730
-    .const 'Sub' $P720 = "45_1280467483.70067" 
+    .const 'Sub' $P720 = "45_1282324007.53935" 
     capture_lex $P720
-    .const 'Sub' $P702 = "44_1280467483.70067" 
+    .const 'Sub' $P702 = "44_1282324007.53935" 
     capture_lex $P702
-    .const 'Sub' $P667 = "43_1280467483.70067" 
+    .const 'Sub' $P667 = "43_1282324007.53935" 
     capture_lex $P667
-    .const 'Sub' $P651 = "42_1280467483.70067" 
+    .const 'Sub' $P651 = "42_1282324007.53935" 
     capture_lex $P651
-    .const 'Sub' $P630 = "41_1280467483.70067" 
+    .const 'Sub' $P630 = "41_1282324007.53935" 
     capture_lex $P630
-    .const 'Sub' $P610 = "40_1280467483.70067" 
+    .const 'Sub' $P610 = "40_1282324007.53935" 
     capture_lex $P610
-    .const 'Sub' $P597 = "39_1280467483.70067" 
+    .const 'Sub' $P597 = "39_1282324007.53935" 
     capture_lex $P597
-    .const 'Sub' $P571 = "38_1280467483.70067" 
+    .const 'Sub' $P571 = "38_1282324007.53935" 
     capture_lex $P571
-    .const 'Sub' $P535 = "37_1280467483.70067" 
+    .const 'Sub' $P535 = "37_1282324007.53935" 
     capture_lex $P535
-    .const 'Sub' $P518 = "36_1280467483.70067" 
+    .const 'Sub' $P518 = "36_1282324007.53935" 
     capture_lex $P518
-    .const 'Sub' $P504 = "35_1280467483.70067" 
+    .const 'Sub' $P504 = "35_1282324007.53935" 
     capture_lex $P504
-    .const 'Sub' $P451 = "33_1280467483.70067" 
+    .const 'Sub' $P451 = "33_1282324007.53935" 
     capture_lex $P451
-    .const 'Sub' $P440 = "32_1280467483.70067" 
+    .const 'Sub' $P440 = "32_1282324007.53935" 
     capture_lex $P440
-    .const 'Sub' $P427 = "31_1280467483.70067" 
+    .const 'Sub' $P427 = "31_1282324007.53935" 
     capture_lex $P427
-    .const 'Sub' $P407 = "30_1280467483.70067" 
+    .const 'Sub' $P407 = "30_1282324007.53935" 
     capture_lex $P407
-    .const 'Sub' $P397 = "29_1280467483.70067" 
+    .const 'Sub' $P397 = "29_1282324007.53935" 
     capture_lex $P397
-    .const 'Sub' $P387 = "28_1280467483.70067" 
+    .const 'Sub' $P387 = "28_1282324007.53935" 
     capture_lex $P387
-    .const 'Sub' $P371 = "27_1280467483.70067" 
+    .const 'Sub' $P371 = "27_1282324007.53935" 
     capture_lex $P371
-    .const 'Sub' $P288 = "25_1280467483.70067" 
+    .const 'Sub' $P288 = "25_1282324007.53935" 
     capture_lex $P288
-    .const 'Sub' $P245 = "23_1280467483.70067" 
+    .const 'Sub' $P245 = "23_1282324007.53935" 
     capture_lex $P245
-    .const 'Sub' $P213 = "22_1280467483.70067" 
+    .const 'Sub' $P213 = "22_1282324007.53935" 
     capture_lex $P213
-    .const 'Sub' $P180 = "21_1280467483.70067" 
+    .const 'Sub' $P180 = "21_1282324007.53935" 
     capture_lex $P180
-    .const 'Sub' $P170 = "20_1280467483.70067" 
+    .const 'Sub' $P170 = "20_1282324007.53935" 
     capture_lex $P170
-    .const 'Sub' $P151 = "19_1280467483.70067" 
+    .const 'Sub' $P151 = "19_1282324007.53935" 
     capture_lex $P151
-    .const 'Sub' $P100 = "18_1280467483.70067" 
+    .const 'Sub' $P100 = "18_1282324007.53935" 
     capture_lex $P100
-    .const 'Sub' $P84 = "17_1280467483.70067" 
+    .const 'Sub' $P84 = "17_1282324007.53935" 
     capture_lex $P84
-    .const 'Sub' $P63 = "16_1280467483.70067" 
+    .const 'Sub' $P63 = "16_1282324007.53935" 
     capture_lex $P63
-    .const 'Sub' $P27 = "13_1280467483.70067" 
+    .const 'Sub' $P27 = "13_1282324007.53935" 
     capture_lex $P27
-    .const 'Sub' $P16 = "12_1280467483.70067" 
+    .const 'Sub' $P16 = "12_1282324007.53935" 
     capture_lex $P16
     get_global $P15, "@BLOCK"
     unless_null $P15, vivify_147
@@ -18747,27 +20430,27 @@
     set_global "@BLOCK", $P15
   vivify_147:
 .annotate 'line', 9
-    .const 'Sub' $P16 = "12_1280467483.70067" 
+    .const 'Sub' $P16 = "12_1282324007.53935" 
     newclosure $P26, $P16
     .lex "xblock_immediate", $P26
 .annotate 'line', 14
-    .const 'Sub' $P27 = "13_1280467483.70067" 
+    .const 'Sub' $P27 = "13_1282324007.53935" 
     newclosure $P62, $P27
     .lex "block_immediate", $P62
 .annotate 'line', 24
-    .const 'Sub' $P63 = "16_1280467483.70067" 
+    .const 'Sub' $P63 = "16_1282324007.53935" 
     newclosure $P83, $P63
     .lex "vivitype", $P83
 .annotate 'line', 43
-    .const 'Sub' $P84 = "17_1280467483.70067" 
+    .const 'Sub' $P84 = "17_1282324007.53935" 
     newclosure $P99, $P84
     .lex "colonpair_str", $P99
 .annotate 'line', 223
-    .const 'Sub' $P100 = "18_1280467483.70067" 
+    .const 'Sub' $P100 = "18_1282324007.53935" 
     newclosure $P150, $P100
     .lex "push_block_handler", $P150
 .annotate 'line', 835
-    .const 'Sub' $P151 = "19_1280467483.70067" 
+    .const 'Sub' $P151 = "19_1282324007.53935" 
     newclosure $P165, $P151
     .lex "control", $P165
 .annotate 'line', 3
@@ -18794,19 +20477,19 @@
     $P2442 = $P2331()
 .annotate 'line', 3
     .return ($P2442)
-    .const 'Sub' $P2444 = "141_1280467483.70067" 
+    .const 'Sub' $P2444 = "141_1282324007.53935" 
     .return ($P2444)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "" :load :init :subid("post145") :outer("11_1280467483.70067")
+.sub "" :load :init :subid("post145") :outer("11_1282324007.53935")
 .annotate 'line', 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate 'line', 5
-    .const 'Sub' $P2448 = "142_1280467483.70067" 
+    .const 'Sub' $P2448 = "142_1282324007.53935" 
     capture_lex $P2448
     $P2448()
     $P2451 = get_root_global ["parrot"], "P6metaclass"
@@ -18815,7 +20498,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2447"  :anon :subid("142_1280467483.70067") :outer("11_1280467483.70067")
+.sub "_block2447"  :anon :subid("142_1282324007.53935") :outer("11_1282324007.53935")
 .annotate 'line', 6
     get_global $P2449, "@BLOCK"
     unless_null $P2449, vivify_146
@@ -18831,7 +20514,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "xblock_immediate"  :subid("12_1280467483.70067") :outer("11_1280467483.70067")
+.sub "xblock_immediate"  :subid("12_1282324007.53935") :outer("11_1282324007.53935")
     .param pmc param_19
 .annotate 'line', 9
     new $P18, 'ExceptionHandler'
@@ -18868,10 +20551,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "block_immediate"  :subid("13_1280467483.70067") :outer("11_1280467483.70067")
+.sub "block_immediate"  :subid("13_1282324007.53935") :outer("11_1282324007.53935")
     .param pmc param_30
 .annotate 'line', 14
-    .const 'Sub' $P40 = "14_1280467483.70067" 
+    .const 'Sub' $P40 = "14_1282324007.53935" 
     capture_lex $P40
     new $P29, 'ExceptionHandler'
     set_addr $P29, control_28
@@ -18893,7 +20576,7 @@
     set $P33, $P38
   unless_34_end:
     if $P33, unless_32_end
-    .const 'Sub' $P40 = "14_1280467483.70067" 
+    .const 'Sub' $P40 = "14_1282324007.53935" 
     capture_lex $P40
     $P40()
   unless_32_end:
@@ -18910,9 +20593,9 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block39"  :anon :subid("14_1280467483.70067") :outer("13_1280467483.70067")
+.sub "_block39"  :anon :subid("14_1282324007.53935") :outer("13_1282324007.53935")
 .annotate 'line', 16
-    .const 'Sub' $P51 = "15_1280467483.70067" 
+    .const 'Sub' $P51 = "15_1282324007.53935" 
     capture_lex $P51
 .annotate 'line', 17
     new $P41, "Undef"
@@ -18935,7 +20618,7 @@
     unless $P45, loop56_done
     shift $P49, $P45
   loop56_redo:
-    .const 'Sub' $P51 = "15_1280467483.70067" 
+    .const 'Sub' $P51 = "15_1282324007.53935" 
     capture_lex $P51
     $P51($P49)
   loop56_next:
@@ -18958,7 +20641,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block50"  :anon :subid("15_1280467483.70067") :outer("14_1280467483.70067")
+.sub "_block50"  :anon :subid("15_1282324007.53935") :outer("14_1282324007.53935")
     .param pmc param_52
 .annotate 'line', 18
     .lex "$_", param_52
@@ -18971,7 +20654,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "vivitype"  :subid("16_1280467483.70067") :outer("11_1280467483.70067")
+.sub "vivitype"  :subid("16_1282324007.53935") :outer("11_1282324007.53935")
     .param pmc param_66
 .annotate 'line', 24
     new $P65, 'ExceptionHandler'
@@ -19020,7 +20703,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "colonpair_str"  :subid("17_1280467483.70067") :outer("11_1280467483.70067")
+.sub "colonpair_str"  :subid("17_1282324007.53935") :outer("11_1282324007.53935")
     .param pmc param_87
 .annotate 'line', 43
     new $P86, 'ExceptionHandler'
@@ -19059,7 +20742,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "push_block_handler"  :subid("18_1280467483.70067") :outer("11_1280467483.70067")
+.sub "push_block_handler"  :subid("18_1282324007.53935") :outer("11_1282324007.53935")
     .param pmc param_103
     .param pmc param_104
 .annotate 'line', 223
@@ -19177,7 +20860,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "control"  :subid("19_1280467483.70067") :outer("11_1280467483.70067")
+.sub "control"  :subid("19_1282324007.53935") :outer("11_1282324007.53935")
     .param pmc param_154
     .param pmc param_155
 .annotate 'line', 835
@@ -19210,7 +20893,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "TOP"  :subid("20_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "TOP"  :subid("20_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_173
 .annotate 'line', 33
     new $P172, 'ExceptionHandler'
@@ -19241,7 +20924,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "deflongname"  :subid("21_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "deflongname"  :subid("21_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_183
 .annotate 'line', 35
     new $P182, 'ExceptionHandler'
@@ -19331,7 +21014,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "comp_unit"  :subid("22_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "comp_unit"  :subid("22_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_216
 .annotate 'line', 49
     new $P215, 'ExceptionHandler'
@@ -19406,10 +21089,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statementlist"  :subid("23_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statementlist"  :subid("23_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_248
 .annotate 'line', 76
-    .const 'Sub' $P262 = "24_1280467483.70067" 
+    .const 'Sub' $P262 = "24_1282324007.53935" 
     capture_lex $P262
     new $P247, 'ExceptionHandler'
     set_addr $P247, control_246
@@ -19454,7 +21137,7 @@
     unless $P256, loop281_done
     shift $P260, $P256
   loop281_redo:
-    .const 'Sub' $P262 = "24_1280467483.70067" 
+    .const 'Sub' $P262 = "24_1282324007.53935" 
     capture_lex $P262
     $P262($P260)
   loop281_next:
@@ -19484,7 +21167,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block261"  :anon :subid("24_1280467483.70067") :outer("23_1280467483.70067")
+.sub "_block261"  :anon :subid("24_1282324007.53935") :outer("23_1282324007.53935")
     .param pmc param_264
 .annotate 'line', 80
     new $P263, "Undef"
@@ -19539,12 +21222,12 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement"  :subid("25_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement"  :subid("25_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_291
     .param pmc param_292 :optional
     .param int has_param_292 :opt_flag
 .annotate 'line', 89
-    .const 'Sub' $P300 = "26_1280467483.70067" 
+    .const 'Sub' $P300 = "26_1282324007.53935" 
     capture_lex $P300
     new $P290, 'ExceptionHandler'
     set_addr $P290, control_289
@@ -19603,7 +21286,7 @@
     goto if_296_end
   if_296:
 .annotate 'line', 91
-    .const 'Sub' $P300 = "26_1280467483.70067" 
+    .const 'Sub' $P300 = "26_1282324007.53935" 
     capture_lex $P300
     $P300()
   if_296_end:
@@ -19622,7 +21305,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block299"  :anon :subid("26_1280467483.70067") :outer("25_1280467483.70067")
+.sub "_block299"  :anon :subid("26_1282324007.53935") :outer("25_1282324007.53935")
 .annotate 'line', 92
     new $P301, "Undef"
     .lex "$mc", $P301
@@ -19795,7 +21478,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "xblock"  :subid("27_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "xblock"  :subid("27_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_374
 .annotate 'line', 117
     new $P373, 'ExceptionHandler'
@@ -19840,7 +21523,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "pblock"  :subid("28_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "pblock"  :subid("28_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_390
 .annotate 'line', 121
     new $P389, 'ExceptionHandler'
@@ -19873,7 +21556,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "block"  :subid("29_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "block"  :subid("29_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_400
 .annotate 'line', 125
     new $P399, 'ExceptionHandler'
@@ -19906,7 +21589,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "blockoid"  :subid("30_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "blockoid"  :subid("30_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_410
 .annotate 'line', 129
     new $P409, 'ExceptionHandler'
@@ -19963,7 +21646,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "newpad"  :subid("31_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "newpad"  :subid("31_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_430
 .annotate 'line', 138
     new $P429, 'ExceptionHandler'
@@ -19999,7 +21682,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "outerctx"  :subid("32_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "outerctx"  :subid("32_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_443
 .annotate 'line', 143
     new $P442, 'ExceptionHandler'
@@ -20039,10 +21722,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<if>"  :subid("33_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_control:sym<if>"  :subid("33_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_454
 .annotate 'line', 150
-    .const 'Sub' $P482 = "34_1280467483.70067" 
+    .const 'Sub' $P482 = "34_1282324007.53935" 
     capture_lex $P482
     new $P453, 'ExceptionHandler'
     set_addr $P453, control_452
@@ -20127,7 +21810,7 @@
     isgt $I480, $N479, 0.0
     unless $I480, loop497_done
   loop497_redo:
-    .const 'Sub' $P482 = "34_1280467483.70067" 
+    .const 'Sub' $P482 = "34_1282324007.53935" 
     capture_lex $P482
     $P482()
   loop497_next:
@@ -20155,7 +21838,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block481"  :anon :subid("34_1280467483.70067") :outer("33_1280467483.70067")
+.sub "_block481"  :anon :subid("34_1282324007.53935") :outer("33_1282324007.53935")
 .annotate 'line', 159
     new $P483, "Undef"
     .lex "$else", $P483
@@ -20195,7 +21878,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<unless>"  :subid("35_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_control:sym<unless>"  :subid("35_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_507
 .annotate 'line', 166
     new $P506, 'ExceptionHandler'
@@ -20237,7 +21920,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<while>"  :subid("36_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_control:sym<while>"  :subid("36_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_521
 .annotate 'line', 172
     new $P520, 'ExceptionHandler'
@@ -20288,7 +21971,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<repeat>"  :subid("37_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_control:sym<repeat>"  :subid("37_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_538
 .annotate 'line', 178
     new $P537, 'ExceptionHandler'
@@ -20389,7 +22072,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<for>"  :subid("38_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_control:sym<for>"  :subid("38_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_574
 .annotate 'line', 192
     new $P573, 'ExceptionHandler'
@@ -20470,7 +22153,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<return>"  :subid("39_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_control:sym<return>"  :subid("39_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_600
 .annotate 'line', 205
     new $P599, 'ExceptionHandler'
@@ -20506,7 +22189,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<CATCH>"  :subid("40_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_control:sym<CATCH>"  :subid("40_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_613
 .annotate 'line', 209
     new $P612, 'ExceptionHandler'
@@ -20565,7 +22248,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<CONTROL>"  :subid("41_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_control:sym<CONTROL>"  :subid("41_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_633
 .annotate 'line', 216
     new $P632, 'ExceptionHandler'
@@ -20624,7 +22307,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_prefix:sym<INIT>"  :subid("42_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_prefix:sym<INIT>"  :subid("42_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_654
 .annotate 'line', 260
     new $P653, 'ExceptionHandler'
@@ -20671,7 +22354,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_prefix:sym<try>"  :subid("43_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_prefix:sym<try>"  :subid("43_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_670
 .annotate 'line', 265
     new $P669, 'ExceptionHandler'
@@ -20749,7 +22432,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "blorst"  :subid("44_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "blorst"  :subid("44_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_705
 .annotate 'line', 288
     new $P704, 'ExceptionHandler'
@@ -20809,7 +22492,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_mod_cond:sym<if>"  :subid("45_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_mod_cond:sym<if>"  :subid("45_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_723
 .annotate 'line', 296
     new $P722, 'ExceptionHandler'
@@ -20840,7 +22523,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_mod_cond:sym<unless>"  :subid("46_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_mod_cond:sym<unless>"  :subid("46_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_733
 .annotate 'line', 297
     new $P732, 'ExceptionHandler'
@@ -20871,7 +22554,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_mod_loop:sym<while>"  :subid("47_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_mod_loop:sym<while>"  :subid("47_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_743
 .annotate 'line', 299
     new $P742, 'ExceptionHandler'
@@ -20902,7 +22585,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_mod_loop:sym<until>"  :subid("48_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "statement_mod_loop:sym<until>"  :subid("48_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_753
 .annotate 'line', 300
     new $P752, 'ExceptionHandler'
@@ -20933,7 +22616,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<fatarrow>"  :subid("49_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<fatarrow>"  :subid("49_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_763
 .annotate 'line', 304
     new $P762, 'ExceptionHandler'
@@ -20964,7 +22647,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<colonpair>"  :subid("50_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<colonpair>"  :subid("50_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_773
 .annotate 'line', 305
     new $P772, 'ExceptionHandler'
@@ -20995,7 +22678,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<variable>"  :subid("51_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<variable>"  :subid("51_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_783
 .annotate 'line', 306
     new $P782, 'ExceptionHandler'
@@ -21026,7 +22709,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<package_declarator>"  :subid("52_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<package_declarator>"  :subid("52_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_793
 .annotate 'line', 307
     new $P792, 'ExceptionHandler'
@@ -21057,7 +22740,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<scope_declarator>"  :subid("53_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<scope_declarator>"  :subid("53_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_803
 .annotate 'line', 308
     new $P802, 'ExceptionHandler'
@@ -21088,7 +22771,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<routine_declarator>"  :subid("54_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<routine_declarator>"  :subid("54_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_813
 .annotate 'line', 309
     new $P812, 'ExceptionHandler'
@@ -21119,7 +22802,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<regex_declarator>"  :subid("55_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<regex_declarator>"  :subid("55_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_823
 .annotate 'line', 310
     new $P822, 'ExceptionHandler'
@@ -21150,7 +22833,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<statement_prefix>"  :subid("56_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<statement_prefix>"  :subid("56_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_833
 .annotate 'line', 311
     new $P832, 'ExceptionHandler'
@@ -21181,7 +22864,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<lambda>"  :subid("57_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<lambda>"  :subid("57_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_843
 .annotate 'line', 312
     new $P842, 'ExceptionHandler'
@@ -21212,7 +22895,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "fatarrow"  :subid("58_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "fatarrow"  :subid("58_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_853
 .annotate 'line', 314
     new $P852, 'ExceptionHandler'
@@ -21262,7 +22945,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "colonpair"  :subid("59_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "colonpair"  :subid("59_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_869
 .annotate 'line', 320
     new $P868, 'ExceptionHandler'
@@ -21344,10 +23027,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "variable"  :subid("60_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "variable"  :subid("60_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_895
 .annotate 'line', 328
-    .const 'Sub' $P908 = "61_1280467483.70067" 
+    .const 'Sub' $P908 = "61_1282324007.53935" 
     capture_lex $P908
     new $P894, 'ExceptionHandler'
     set_addr $P894, control_893
@@ -21371,7 +23054,7 @@
   vivify_325:
     if $P900, if_898
 .annotate 'line', 334
-    .const 'Sub' $P908 = "61_1280467483.70067" 
+    .const 'Sub' $P908 = "61_1282324007.53935" 
     capture_lex $P908
     $P908()
     goto if_898_end
@@ -21408,7 +23091,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block907"  :anon :subid("61_1280467483.70067") :outer("60_1280467483.70067")
+.sub "_block907"  :anon :subid("61_1282324007.53935") :outer("60_1282324007.53935")
 .annotate 'line', 335
     $P909 = root_new ['parrot';'ResizablePMCArray']
     .lex "@name", $P909
@@ -21578,7 +23261,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "package_declarator:sym<module>"  :subid("62_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "package_declarator:sym<module>"  :subid("62_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_984
 .annotate 'line', 366
     new $P983, 'ExceptionHandler'
@@ -21609,7 +23292,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "package_declarator:sym<class>"  :subid("63_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "package_declarator:sym<class>"  :subid("63_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_994
 .annotate 'line', 367
     new $P993, 'ExceptionHandler'
@@ -21767,7 +23450,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "package_def"  :subid("64_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "package_def"  :subid("64_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1047
 .annotate 'line', 390
     new $P1046, 'ExceptionHandler'
@@ -21846,7 +23529,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "scope_declarator:sym<my>"  :subid("65_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "scope_declarator:sym<my>"  :subid("65_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1071
 .annotate 'line', 397
     new $P1070, 'ExceptionHandler'
@@ -21877,7 +23560,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "scope_declarator:sym<our>"  :subid("66_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "scope_declarator:sym<our>"  :subid("66_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1081
 .annotate 'line', 398
     new $P1080, 'ExceptionHandler'
@@ -21908,7 +23591,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "scope_declarator:sym<has>"  :subid("67_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "scope_declarator:sym<has>"  :subid("67_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1091
 .annotate 'line', 399
     new $P1090, 'ExceptionHandler'
@@ -21939,7 +23622,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "scoped"  :subid("68_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "scoped"  :subid("68_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1101
 .annotate 'line', 401
     new $P1100, 'ExceptionHandler'
@@ -21998,7 +23681,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "declarator"  :subid("69_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "declarator"  :subid("69_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1118
 .annotate 'line', 407
     new $P1117, 'ExceptionHandler'
@@ -22057,7 +23740,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "multi_declarator:sym<multi>"  :subid("70_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "multi_declarator:sym<multi>"  :subid("70_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1135
 .annotate 'line', 413
     new $P1134, 'ExceptionHandler'
@@ -22111,7 +23794,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "multi_declarator:sym<null>"  :subid("71_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "multi_declarator:sym<null>"  :subid("71_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1152
 .annotate 'line', 414
     new $P1151, 'ExceptionHandler'
@@ -22142,10 +23825,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "variable_declarator"  :subid("72_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "variable_declarator"  :subid("72_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1162
 .annotate 'line', 417
-    .const 'Sub' $P1202 = "73_1280467483.70067" 
+    .const 'Sub' $P1202 = "73_1282324007.53935" 
     capture_lex $P1202
     new $P1161, 'ExceptionHandler'
     set_addr $P1161, control_1160
@@ -22227,7 +23910,7 @@
     iseq $I1187, $S1186, "has"
     if $I1187, if_1184
 .annotate 'line', 434
-    .const 'Sub' $P1202 = "73_1280467483.70067" 
+    .const 'Sub' $P1202 = "73_1282324007.53935" 
     capture_lex $P1202
     $P1202()
     goto if_1184_end
@@ -22287,7 +23970,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1201"  :anon :subid("73_1280467483.70067") :outer("72_1280467483.70067")
+.sub "_block1201"  :anon :subid("73_1282324007.53935") :outer("72_1282324007.53935")
 .annotate 'line', 435
     new $P1203, "Undef"
     .lex "$scope", $P1203
@@ -22349,7 +24032,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "routine_declarator:sym<sub>"  :subid("74_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "routine_declarator:sym<sub>"  :subid("74_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1233
 .annotate 'line', 445
     new $P1232, 'ExceptionHandler'
@@ -22380,7 +24063,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "routine_declarator:sym<method>"  :subid("75_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "routine_declarator:sym<method>"  :subid("75_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1243
 .annotate 'line', 446
     new $P1242, 'ExceptionHandler'
@@ -22411,10 +24094,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "routine_def"  :subid("76_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "routine_def"  :subid("76_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1253
 .annotate 'line', 448
-    .const 'Sub' $P1264 = "77_1280467483.70067" 
+    .const 'Sub' $P1264 = "77_1282324007.53935" 
     capture_lex $P1264
     new $P1252, 'ExceptionHandler'
     set_addr $P1252, control_1251
@@ -22451,7 +24134,7 @@
     new $P1262, "Undef"
   vivify_423:
     unless $P1262, if_1260_end
-    .const 'Sub' $P1264 = "77_1280467483.70067" 
+    .const 'Sub' $P1264 = "77_1282324007.53935" 
     capture_lex $P1264
     $P1264()
   if_1260_end:
@@ -22470,7 +24153,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1263"  :anon :subid("77_1280467483.70067") :outer("76_1280467483.70067")
+.sub "_block1263"  :anon :subid("77_1282324007.53935") :outer("76_1282324007.53935")
 .annotate 'line', 453
     new $P1265, "Undef"
     .lex "$name", $P1265
@@ -22567,10 +24250,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "method_def"  :subid("78_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "method_def"  :subid("78_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1303
 .annotate 'line', 466
-    .const 'Sub' $P1324 = "79_1280467483.70067" 
+    .const 'Sub' $P1324 = "79_1282324007.53935" 
     capture_lex $P1324
     new $P1302, 'ExceptionHandler'
     set_addr $P1302, control_1301
@@ -22637,7 +24320,7 @@
     new $P1322, "Undef"
   vivify_444:
     unless $P1322, if_1320_end
-    .const 'Sub' $P1324 = "79_1280467483.70067" 
+    .const 'Sub' $P1324 = "79_1282324007.53935" 
     capture_lex $P1324
     $P1324()
   if_1320_end:
@@ -22671,7 +24354,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1323"  :anon :subid("79_1280467483.70067") :outer("78_1280467483.70067")
+.sub "_block1323"  :anon :subid("79_1282324007.53935") :outer("78_1282324007.53935")
 .annotate 'line', 476
     new $P1325, "Undef"
     .lex "$name", $P1325
@@ -22703,12 +24386,12 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "signature"  :subid("80_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "signature"  :subid("80_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1348
 .annotate 'line', 484
-    .const 'Sub' $P1374 = "82_1280467483.70067" 
+    .const 'Sub' $P1374 = "82_1282324007.53935" 
     capture_lex $P1374
-    .const 'Sub' $P1359 = "81_1280467483.70067" 
+    .const 'Sub' $P1359 = "81_1282324007.53935" 
     capture_lex $P1359
     new $P1347, 'ExceptionHandler'
     set_addr $P1347, control_1346
@@ -22752,7 +24435,7 @@
     unless $P1353, loop1365_done
     shift $P1357, $P1353
   loop1365_redo:
-    .const 'Sub' $P1359 = "81_1280467483.70067" 
+    .const 'Sub' $P1359 = "81_1282324007.53935" 
     capture_lex $P1359
     $P1359($P1357)
   loop1365_next:
@@ -22781,7 +24464,7 @@
     set $P1368, $I1372
     goto if_1369_end
   if_1369:
-    .const 'Sub' $P1374 = "82_1280467483.70067" 
+    .const 'Sub' $P1374 = "82_1282324007.53935" 
     capture_lex $P1374
     $P1400 = $P1374()
     set $P1368, $P1400
@@ -22797,7 +24480,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1358"  :anon :subid("81_1280467483.70067") :outer("80_1280467483.70067")
+.sub "_block1358"  :anon :subid("81_1282324007.53935") :outer("80_1282324007.53935")
     .param pmc param_1360
 .annotate 'line', 487
     .lex "$_", param_1360
@@ -22811,9 +24494,9 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1373"  :anon :subid("82_1280467483.70067") :outer("80_1280467483.70067")
+.sub "_block1373"  :anon :subid("82_1282324007.53935") :outer("80_1282324007.53935")
 .annotate 'line', 490
-    .const 'Sub' $P1383 = "83_1280467483.70067" 
+    .const 'Sub' $P1383 = "83_1282324007.53935" 
     capture_lex $P1383
 .annotate 'line', 491
     $P1375 = root_new ['parrot';'ResizablePMCArray']
@@ -22834,7 +24517,7 @@
     unless $P1377, loop1393_done
     shift $P1381, $P1377
   loop1393_redo:
-    .const 'Sub' $P1383 = "83_1280467483.70067" 
+    .const 'Sub' $P1383 = "83_1282324007.53935" 
     capture_lex $P1383
     $P1383($P1381)
   loop1393_next:
@@ -22865,7 +24548,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1382"  :anon :subid("83_1280467483.70067") :outer("82_1280467483.70067")
+.sub "_block1382"  :anon :subid("83_1282324007.53935") :outer("82_1282324007.53935")
     .param pmc param_1384
 .annotate 'line', 492
     .lex "$_", param_1384
@@ -22888,10 +24571,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "parameter"  :subid("84_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "parameter"  :subid("84_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1405
 .annotate 'line', 499
-    .const 'Sub' $P1486 = "85_1280467483.70067" 
+    .const 'Sub' $P1486 = "85_1282324007.53935" 
     capture_lex $P1486
     new $P1404, 'ExceptionHandler'
     set_addr $P1404, control_1403
@@ -23117,7 +24800,7 @@
     new $P1484, "Undef"
   vivify_490:
     unless $P1484, if_1482_end
-    .const 'Sub' $P1486 = "85_1280467483.70067" 
+    .const 'Sub' $P1486 = "85_1282324007.53935" 
     capture_lex $P1486
     $P1486()
   if_1482_end:
@@ -23137,9 +24820,9 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1485"  :anon :subid("85_1280467483.70067") :outer("84_1280467483.70067")
+.sub "_block1485"  :anon :subid("85_1282324007.53935") :outer("84_1282324007.53935")
 .annotate 'line', 530
-    .const 'Sub' $P1498 = "86_1280467483.70067" 
+    .const 'Sub' $P1498 = "86_1282324007.53935" 
     capture_lex $P1498
 .annotate 'line', 531
     $P1487 = root_new ['parrot';'ResizablePMCArray']
@@ -23178,7 +24861,7 @@
     unless $P1489, loop1504_done
     shift $P1496, $P1489
   loop1504_redo:
-    .const 'Sub' $P1498 = "86_1280467483.70067" 
+    .const 'Sub' $P1498 = "86_1282324007.53935" 
     capture_lex $P1498
     $P1498($P1496)
   loop1504_next:
@@ -23202,7 +24885,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1497"  :anon :subid("86_1280467483.70067") :outer("85_1280467483.70067")
+.sub "_block1497"  :anon :subid("86_1282324007.53935") :outer("85_1282324007.53935")
     .param pmc param_1499
 .annotate 'line', 532
     .lex "$_", param_1499
@@ -23216,7 +24899,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "param_var"  :subid("87_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "param_var"  :subid("87_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1517
 .annotate 'line', 539
     new $P1516, 'ExceptionHandler'
@@ -23270,7 +24953,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "named_param"  :subid("88_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "named_param"  :subid("88_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1537
 .annotate 'line', 547
     new $P1536, 'ExceptionHandler'
@@ -23324,14 +25007,14 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "regex_declarator"  :subid("89_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "regex_declarator"  :subid("89_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1554
     .param pmc param_1555 :optional
     .param int has_param_1555 :opt_flag
 .annotate 'line', 553
-    .const 'Sub' $P1625 = "91_1280467483.70067" 
+    .const 'Sub' $P1625 = "91_1282324007.53935" 
     capture_lex $P1625
-    .const 'Sub' $P1597 = "90_1280467483.70067" 
+    .const 'Sub' $P1597 = "90_1282324007.53935" 
     capture_lex $P1597
     new $P1553, 'ExceptionHandler'
     set_addr $P1553, control_1552
@@ -23389,13 +25072,13 @@
     iseq $I1595, $S1594, "open"
     if $I1595, if_1592
 .annotate 'line', 599
-    .const 'Sub' $P1625 = "91_1280467483.70067" 
+    .const 'Sub' $P1625 = "91_1282324007.53935" 
     capture_lex $P1625
     $P1625()
     goto if_1592_end
   if_1592:
 .annotate 'line', 586
-    .const 'Sub' $P1597 = "90_1280467483.70067" 
+    .const 'Sub' $P1597 = "90_1282324007.53935" 
     capture_lex $P1597
     $P1597()
   if_1592_end:
@@ -23452,7 +25135,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1624"  :anon :subid("91_1280467483.70067") :outer("89_1280467483.70067")
+.sub "_block1624"  :anon :subid("91_1282324007.53935") :outer("89_1282324007.53935")
 .annotate 'line', 600
     new $P1626, "Undef"
     .lex "$regex", $P1626
@@ -23504,7 +25187,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1596"  :anon :subid("90_1280467483.70067") :outer("89_1280467483.70067")
+.sub "_block1596"  :anon :subid("90_1282324007.53935") :outer("89_1282324007.53935")
 .annotate 'line', 587
     $P1598 = root_new ['parrot';'Hash']
     .lex "%h", $P1598
@@ -23603,7 +25286,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "dotty"  :subid("92_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "dotty"  :subid("92_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1653
 .annotate 'line', 617
     new $P1652, 'ExceptionHandler'
@@ -23701,7 +25384,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<self>"  :subid("93_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<self>"  :subid("93_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1685
 .annotate 'line', 626
     new $P1684, 'ExceptionHandler'
@@ -23727,7 +25410,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<identifier>"  :subid("94_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<identifier>"  :subid("94_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1694
 .annotate 'line', 630
     new $P1693, 'ExceptionHandler'
@@ -23777,7 +25460,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<name>"  :subid("95_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<name>"  :subid("95_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1710
 .annotate 'line', 636
     new $P1709, 'ExceptionHandler'
@@ -23896,7 +25579,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<pir::op>"  :subid("96_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<pir::op>"  :subid("96_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1752
 .annotate 'line', 650
     new $P1751, 'ExceptionHandler'
@@ -23988,7 +25671,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "args"  :subid("97_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "args"  :subid("97_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1781
 .annotate 'line', 665
     new $P1780, 'ExceptionHandler'
@@ -24019,10 +25702,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "arglist"  :subid("98_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "arglist"  :subid("98_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1791
 .annotate 'line', 667
-    .const 'Sub' $P1802 = "99_1280467483.70067" 
+    .const 'Sub' $P1802 = "99_1282324007.53935" 
     capture_lex $P1802
     new $P1790, 'ExceptionHandler'
     set_addr $P1790, control_1789
@@ -24054,7 +25737,7 @@
     new $P1800, "Undef"
   vivify_558:
     unless $P1800, if_1798_end
-    .const 'Sub' $P1802 = "99_1280467483.70067" 
+    .const 'Sub' $P1802 = "99_1282324007.53935" 
     capture_lex $P1802
     $P1802()
   if_1798_end:
@@ -24211,9 +25894,9 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1801"  :anon :subid("99_1280467483.70067") :outer("98_1280467483.70067")
+.sub "_block1801"  :anon :subid("99_1282324007.53935") :outer("98_1282324007.53935")
 .annotate 'line', 669
-    .const 'Sub' $P1823 = "100_1280467483.70067" 
+    .const 'Sub' $P1823 = "100_1282324007.53935" 
     capture_lex $P1823
 .annotate 'line', 670
     new $P1803, "Undef"
@@ -24266,7 +25949,7 @@
     unless $P1817, loop1828_done
     shift $P1821, $P1817
   loop1828_redo:
-    .const 'Sub' $P1823 = "100_1280467483.70067" 
+    .const 'Sub' $P1823 = "100_1282324007.53935" 
     capture_lex $P1823
     $P1823($P1821)
   loop1828_next:
@@ -24289,7 +25972,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1822"  :anon :subid("100_1280467483.70067") :outer("99_1280467483.70067")
+.sub "_block1822"  :anon :subid("100_1282324007.53935") :outer("99_1282324007.53935")
     .param pmc param_1824
 .annotate 'line', 672
     .lex "$_", param_1824
@@ -24302,7 +25985,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<value>"  :subid("101_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<value>"  :subid("101_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1895
 .annotate 'line', 693
     new $P1894, 'ExceptionHandler'
@@ -24333,7 +26016,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<( )>"  :subid("102_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "circumfix:sym<( )>"  :subid("102_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1905
 .annotate 'line', 695
     new $P1904, 'ExceptionHandler'
@@ -24390,7 +26073,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<[ ]>"  :subid("103_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "circumfix:sym<[ ]>"  :subid("103_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1923
 .annotate 'line', 701
     new $P1922, 'ExceptionHandler'
@@ -24467,7 +26150,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<ang>"  :subid("104_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "circumfix:sym<ang>"  :subid("104_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1950
 .annotate 'line', 716
     new $P1949, 'ExceptionHandler'
@@ -24498,7 +26181,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("105_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("105_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1960
 .annotate 'line', 717
     new $P1959, 'ExceptionHandler'
@@ -24529,7 +26212,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<{ }>"  :subid("106_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "circumfix:sym<{ }>"  :subid("106_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1970
 .annotate 'line', 719
     new $P1969, 'ExceptionHandler'
@@ -24608,7 +26291,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<sigil>"  :subid("107_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "circumfix:sym<sigil>"  :subid("107_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_1994
 .annotate 'line', 727
     new $P1993, 'ExceptionHandler'
@@ -24688,7 +26371,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "semilist"  :subid("108_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "semilist"  :subid("108_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2023
 .annotate 'line', 734
     new $P2022, 'ExceptionHandler'
@@ -24719,7 +26402,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<[ ]>"  :subid("109_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "postcircumfix:sym<[ ]>"  :subid("109_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2033
 .annotate 'line', 736
     new $P2032, 'ExceptionHandler'
@@ -24757,7 +26440,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<{ }>"  :subid("110_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "postcircumfix:sym<{ }>"  :subid("110_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2046
 .annotate 'line', 742
     new $P2045, 'ExceptionHandler'
@@ -24795,7 +26478,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<ang>"  :subid("111_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "postcircumfix:sym<ang>"  :subid("111_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2059
 .annotate 'line', 748
     new $P2058, 'ExceptionHandler'
@@ -24833,7 +26516,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<( )>"  :subid("112_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "postcircumfix:sym<( )>"  :subid("112_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2072
 .annotate 'line', 754
     new $P2071, 'ExceptionHandler'
@@ -24866,7 +26549,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "value"  :subid("113_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "value"  :subid("113_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2082
 .annotate 'line', 758
     new $P2081, 'ExceptionHandler'
@@ -24922,7 +26605,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "number"  :subid("114_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "number"  :subid("114_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2099
 .annotate 'line', 762
     new $P2098, 'ExceptionHandler'
@@ -25001,7 +26684,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<apos>"  :subid("115_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote:sym<apos>"  :subid("115_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2127
 .annotate 'line', 768
     new $P2126, 'ExceptionHandler'
@@ -25032,7 +26715,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<dblq>"  :subid("116_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote:sym<dblq>"  :subid("116_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2137
 .annotate 'line', 769
     new $P2136, 'ExceptionHandler'
@@ -25063,7 +26746,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<qq>"  :subid("117_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote:sym<qq>"  :subid("117_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2147
 .annotate 'line', 770
     new $P2146, 'ExceptionHandler'
@@ -25094,7 +26777,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<q>"  :subid("118_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote:sym<q>"  :subid("118_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2157
 .annotate 'line', 771
     new $P2156, 'ExceptionHandler'
@@ -25125,7 +26808,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<Q>"  :subid("119_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote:sym<Q>"  :subid("119_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2167
 .annotate 'line', 772
     new $P2166, 'ExceptionHandler'
@@ -25156,7 +26839,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<Q:PIR>"  :subid("120_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote:sym<Q:PIR>"  :subid("120_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2177
 .annotate 'line', 773
     new $P2176, 'ExceptionHandler'
@@ -25193,7 +26876,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym</ />"  :subid("121_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote:sym</ />"  :subid("121_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2191
     .param pmc param_2192 :optional
     .param int has_param_2192 :opt_flag
@@ -25303,7 +26986,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<$>"  :subid("122_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote_escape:sym<$>"  :subid("122_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2228
 .annotate 'line', 802
     new $P2227, 'ExceptionHandler'
@@ -25334,7 +27017,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<{ }>"  :subid("123_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote_escape:sym<{ }>"  :subid("123_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2238
 .annotate 'line', 803
     new $P2237, 'ExceptionHandler'
@@ -25373,7 +27056,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<esc>"  :subid("124_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "quote_escape:sym<esc>"  :subid("124_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2252
 .annotate 'line', 808
     new $P2251, 'ExceptionHandler'
@@ -25395,7 +27078,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<.>"  :subid("125_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "postfix:sym<.>"  :subid("125_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2259
 .annotate 'line', 812
     new $P2258, 'ExceptionHandler'
@@ -25426,7 +27109,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<++>"  :subid("126_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "postfix:sym<++>"  :subid("126_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2269
 .annotate 'line', 814
     new $P2268, 'ExceptionHandler'
@@ -25457,7 +27140,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<-->"  :subid("127_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "postfix:sym<-->"  :subid("127_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2279
 .annotate 'line', 820
     new $P2278, 'ExceptionHandler'
@@ -25488,7 +27171,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "prefix:sym<make>"  :subid("128_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "prefix:sym<make>"  :subid("128_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2289
 .annotate 'line', 826
     new $P2288, 'ExceptionHandler'
@@ -25519,7 +27202,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<next>"  :subid("129_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<next>"  :subid("129_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2302
 .annotate 'line', 844
     new $P2301, 'ExceptionHandler'
@@ -25541,7 +27224,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<last>"  :subid("130_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<last>"  :subid("130_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2309
 .annotate 'line', 845
     new $P2308, 'ExceptionHandler'
@@ -25563,7 +27246,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<redo>"  :subid("131_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "term:sym<redo>"  :subid("131_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2316
 .annotate 'line', 846
     new $P2315, 'ExceptionHandler'
@@ -25585,7 +27268,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "infix:sym<~~>"  :subid("132_1280467483.70067") :method :outer("11_1280467483.70067")
+.sub "infix:sym<~~>"  :subid("132_1282324007.53935") :method :outer("11_1282324007.53935")
     .param pmc param_2323
 .annotate 'line', 848
     new $P2322, 'ExceptionHandler'
@@ -25611,24 +27294,24 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "_block2330"  :subid("133_1280467483.70067") :outer("11_1280467483.70067")
+.sub "_block2330"  :subid("133_1282324007.53935") :outer("11_1282324007.53935")
 .annotate 'line', 853
-    .const 'Sub' $P2416 = "140_1280467483.70067" 
+    .const 'Sub' $P2416 = "140_1282324007.53935" 
     capture_lex $P2416
-    .const 'Sub' $P2403 = "139_1280467483.70067" 
+    .const 'Sub' $P2403 = "139_1282324007.53935" 
     capture_lex $P2403
-    .const 'Sub' $P2386 = "138_1280467483.70067" 
+    .const 'Sub' $P2386 = "138_1282324007.53935" 
     capture_lex $P2386
-    .const 'Sub' $P2373 = "137_1280467483.70067" 
+    .const 'Sub' $P2373 = "137_1282324007.53935" 
     capture_lex $P2373
-    .const 'Sub' $P2360 = "136_1280467483.70067" 
+    .const 'Sub' $P2360 = "136_1282324007.53935" 
     capture_lex $P2360
-    .const 'Sub' $P2347 = "135_1280467483.70067" 
+    .const 'Sub' $P2347 = "135_1282324007.53935" 
     capture_lex $P2347
-    .const 'Sub' $P2332 = "134_1280467483.70067" 
+    .const 'Sub' $P2332 = "134_1282324007.53935" 
     capture_lex $P2332
 .annotate 'line', 887
-    .const 'Sub' $P2416 = "140_1280467483.70067" 
+    .const 'Sub' $P2416 = "140_1282324007.53935" 
     newclosure $P2441, $P2416
 .annotate 'line', 853
     .return ($P2441)
@@ -25637,7 +27320,7 @@
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<:my>"  :subid("134_1280467483.70067") :method :outer("133_1280467483.70067")
+.sub "metachar:sym<:my>"  :subid("134_1282324007.53935") :method :outer("133_1282324007.53935")
     .param pmc param_2335
 .annotate 'line', 855
     new $P2334, 'ExceptionHandler'
@@ -25678,7 +27361,7 @@
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<{ }>"  :subid("135_1280467483.70067") :method :outer("133_1280467483.70067")
+.sub "metachar:sym<{ }>"  :subid("135_1282324007.53935") :method :outer("133_1282324007.53935")
     .param pmc param_2350
 .annotate 'line', 861
     new $P2349, 'ExceptionHandler'
@@ -25714,7 +27397,7 @@
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<nqpvar>"  :subid("136_1280467483.70067") :method :outer("133_1280467483.70067")
+.sub "metachar:sym<nqpvar>"  :subid("136_1282324007.53935") :method :outer("133_1282324007.53935")
     .param pmc param_2363
 .annotate 'line', 866
     new $P2362, 'ExceptionHandler'
@@ -25750,7 +27433,7 @@
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<{ }>"  :subid("137_1280467483.70067") :method :outer("133_1280467483.70067")
+.sub "assertion:sym<{ }>"  :subid("137_1282324007.53935") :method :outer("133_1282324007.53935")
     .param pmc param_2376
 .annotate 'line', 871
     new $P2375, 'ExceptionHandler'
@@ -25786,7 +27469,7 @@
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<?{ }>"  :subid("138_1280467483.70067") :method :outer("133_1280467483.70067")
+.sub "assertion:sym<?{ }>"  :subid("138_1282324007.53935") :method :outer("133_1282324007.53935")
     .param pmc param_2389
 .annotate 'line', 876
     new $P2388, 'ExceptionHandler'
@@ -25834,7 +27517,7 @@
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<var>"  :subid("139_1280467483.70067") :method :outer("133_1280467483.70067")
+.sub "assertion:sym<var>"  :subid("139_1282324007.53935") :method :outer("133_1282324007.53935")
     .param pmc param_2406
 .annotate 'line', 882
     new $P2405, 'ExceptionHandler'
@@ -25870,7 +27553,7 @@
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "codeblock"  :subid("140_1280467483.70067") :method :outer("133_1280467483.70067")
+.sub "codeblock"  :subid("140_1282324007.53935") :method :outer("133_1282324007.53935")
     .param pmc param_2419
 .annotate 'line', 887
     new $P2418, 'ExceptionHandler'
@@ -25934,18 +27617,18 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2443" :load :anon :subid("141_1280467483.70067")
+.sub "_block2443" :load :anon :subid("141_1282324007.53935")
 .annotate 'line', 3
-    .const 'Sub' $P2445 = "11_1280467483.70067" 
+    .const 'Sub' $P2445 = "11_1282324007.53935" 
     $P2446 = $P2445()
     .return ($P2446)
 .end
 
 
 .namespace []
-.sub "_block2453" :load :anon :subid("143_1280467483.70067")
+.sub "_block2453" :load :anon :subid("143_1282324007.53935")
 .annotate 'line', 1
-    .const 'Sub' $P2455 = "10_1280467483.70067" 
+    .const 'Sub' $P2455 = "10_1282324007.53935" 
     $P2456 = $P2455()
     .return ($P2456)
 .end

Modified: branches/unshared_buffers/ext/nqp-rx/src/stage0/P6Regex-s0.pir
==============================================================================
--- branches/unshared_buffers/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -16,7 +16,7 @@
 ### .include 'gen/p6regex-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467470.54449")
+.sub "_block11"  :anon :subid("10_1282323996.47527")
 .annotate 'line', 0
     get_hll_global $P14, ["Regex";"P6Regex";"Grammar"], "_block13" 
     capture_lex $P14
@@ -30,153 +30,155 @@
 .annotate 'line', 3
     get_hll_global $P14, ["Regex";"P6Regex";"Grammar"], "_block13" 
     capture_lex $P14
-    $P572 = $P14()
+    $P581 = $P14()
 .annotate 'line', 1
-    .return ($P572)
-    .const 'Sub' $P574 = "161_1280467470.54449" 
-    .return ($P574)
+    .return ($P581)
+    .const 'Sub' $P583 = "163_1282323996.47527" 
+    .return ($P583)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post162") :outer("10_1280467470.54449")
+.sub "" :load :init :subid("post164") :outer("10_1282323996.47527")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467470.54449" 
+    .const 'Sub' $P12 = "10_1282323996.47527" 
     .local pmc block
     set block, $P12
-    $P577 = get_root_global ["parrot"], "P6metaclass"
-    $P577."new_class"("Regex::P6Regex::Grammar", "HLL::Grammar" :named("parent"))
+    $P586 = get_root_global ["parrot"], "P6metaclass"
+    $P586."new_class"("Regex::P6Regex::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block13"  :subid("11_1280467470.54449") :outer("10_1280467470.54449")
+.sub "_block13"  :subid("11_1282323996.47527") :outer("10_1282323996.47527")
 .annotate 'line', 3
-    .const 'Sub' $P561 = "158_1280467470.54449" 
-    capture_lex $P561
-    .const 'Sub' $P554 = "156_1280467470.54449" 
-    capture_lex $P554
-    .const 'Sub' $P547 = "154_1280467470.54449" 
-    capture_lex $P547
-    .const 'Sub' $P527 = "149_1280467470.54449" 
-    capture_lex $P527
-    .const 'Sub' $P493 = "143_1280467470.54449" 
-    capture_lex $P493
-    .const 'Sub' $P481 = "140_1280467470.54449" 
-    capture_lex $P481
-    .const 'Sub' $P469 = "137_1280467470.54449" 
-    capture_lex $P469
-    .const 'Sub' $P463 = "135_1280467470.54449" 
-    capture_lex $P463
-    .const 'Sub' $P452 = "132_1280467470.54449" 
-    capture_lex $P452
-    .const 'Sub' $P441 = "129_1280467470.54449" 
+    .const 'Sub' $P570 = "160_1282323996.47527" 
+    capture_lex $P570
+    .const 'Sub' $P563 = "158_1282323996.47527" 
+    capture_lex $P563
+    .const 'Sub' $P556 = "156_1282323996.47527" 
+    capture_lex $P556
+    .const 'Sub' $P536 = "151_1282323996.47527" 
+    capture_lex $P536
+    .const 'Sub' $P502 = "145_1282323996.47527" 
+    capture_lex $P502
+    .const 'Sub' $P490 = "142_1282323996.47527" 
+    capture_lex $P490
+    .const 'Sub' $P478 = "139_1282323996.47527" 
+    capture_lex $P478
+    .const 'Sub' $P472 = "137_1282323996.47527" 
+    capture_lex $P472
+    .const 'Sub' $P461 = "134_1282323996.47527" 
+    capture_lex $P461
+    .const 'Sub' $P450 = "131_1282323996.47527" 
+    capture_lex $P450
+    .const 'Sub' $P441 = "127_1282323996.47527" 
     capture_lex $P441
-    .const 'Sub' $P432 = "125_1280467470.54449" 
-    capture_lex $P432
-    .const 'Sub' $P426 = "123_1280467470.54449" 
-    capture_lex $P426
-    .const 'Sub' $P420 = "121_1280467470.54449" 
-    capture_lex $P420
-    .const 'Sub' $P414 = "119_1280467470.54449" 
-    capture_lex $P414
-    .const 'Sub' $P408 = "117_1280467470.54449" 
-    capture_lex $P408
-    .const 'Sub' $P400 = "115_1280467470.54449" 
-    capture_lex $P400
-    .const 'Sub' $P389 = "113_1280467470.54449" 
-    capture_lex $P389
-    .const 'Sub' $P378 = "111_1280467470.54449" 
-    capture_lex $P378
-    .const 'Sub' $P372 = "109_1280467470.54449" 
-    capture_lex $P372
-    .const 'Sub' $P366 = "107_1280467470.54449" 
-    capture_lex $P366
-    .const 'Sub' $P360 = "105_1280467470.54449" 
-    capture_lex $P360
-    .const 'Sub' $P354 = "103_1280467470.54449" 
-    capture_lex $P354
-    .const 'Sub' $P348 = "101_1280467470.54449" 
-    capture_lex $P348
-    .const 'Sub' $P342 = "99_1280467470.54449" 
-    capture_lex $P342
-    .const 'Sub' $P336 = "97_1280467470.54449" 
-    capture_lex $P336
-    .const 'Sub' $P330 = "95_1280467470.54449" 
-    capture_lex $P330
-    .const 'Sub' $P318 = "91_1280467470.54449" 
-    capture_lex $P318
-    .const 'Sub' $P308 = "89_1280467470.54449" 
-    capture_lex $P308
-    .const 'Sub' $P301 = "87_1280467470.54449" 
-    capture_lex $P301
-    .const 'Sub' $P289 = "85_1280467470.54449" 
-    capture_lex $P289
-    .const 'Sub' $P282 = "83_1280467470.54449" 
-    capture_lex $P282
-    .const 'Sub' $P276 = "81_1280467470.54449" 
-    capture_lex $P276
-    .const 'Sub' $P270 = "79_1280467470.54449" 
-    capture_lex $P270
-    .const 'Sub' $P263 = "77_1280467470.54449" 
-    capture_lex $P263
-    .const 'Sub' $P256 = "75_1280467470.54449" 
-    capture_lex $P256
-    .const 'Sub' $P249 = "73_1280467470.54449" 
-    capture_lex $P249
-    .const 'Sub' $P242 = "71_1280467470.54449" 
-    capture_lex $P242
-    .const 'Sub' $P236 = "69_1280467470.54449" 
-    capture_lex $P236
-    .const 'Sub' $P230 = "67_1280467470.54449" 
-    capture_lex $P230
-    .const 'Sub' $P224 = "65_1280467470.54449" 
-    capture_lex $P224
-    .const 'Sub' $P218 = "63_1280467470.54449" 
-    capture_lex $P218
-    .const 'Sub' $P212 = "61_1280467470.54449" 
-    capture_lex $P212
-    .const 'Sub' $P207 = "59_1280467470.54449" 
-    capture_lex $P207
-    .const 'Sub' $P202 = "57_1280467470.54449" 
-    capture_lex $P202
-    .const 'Sub' $P196 = "55_1280467470.54449" 
-    capture_lex $P196
-    .const 'Sub' $P190 = "53_1280467470.54449" 
-    capture_lex $P190
-    .const 'Sub' $P184 = "51_1280467470.54449" 
-    capture_lex $P184
-    .const 'Sub' $P169 = "46_1280467470.54449" 
-    capture_lex $P169
-    .const 'Sub' $P154 = "44_1280467470.54449" 
-    capture_lex $P154
-    .const 'Sub' $P147 = "42_1280467470.54449" 
-    capture_lex $P147
-    .const 'Sub' $P140 = "40_1280467470.54449" 
-    capture_lex $P140
-    .const 'Sub' $P133 = "38_1280467470.54449" 
-    capture_lex $P133
-    .const 'Sub' $P116 = "33_1280467470.54449" 
-    capture_lex $P116
-    .const 'Sub' $P104 = "30_1280467470.54449" 
-    capture_lex $P104
-    .const 'Sub' $P97 = "28_1280467470.54449" 
+    .const 'Sub' $P435 = "125_1282323996.47527" 
+    capture_lex $P435
+    .const 'Sub' $P429 = "123_1282323996.47527" 
+    capture_lex $P429
+    .const 'Sub' $P423 = "121_1282323996.47527" 
+    capture_lex $P423
+    .const 'Sub' $P417 = "119_1282323996.47527" 
+    capture_lex $P417
+    .const 'Sub' $P409 = "117_1282323996.47527" 
+    capture_lex $P409
+    .const 'Sub' $P398 = "115_1282323996.47527" 
+    capture_lex $P398
+    .const 'Sub' $P387 = "113_1282323996.47527" 
+    capture_lex $P387
+    .const 'Sub' $P381 = "111_1282323996.47527" 
+    capture_lex $P381
+    .const 'Sub' $P375 = "109_1282323996.47527" 
+    capture_lex $P375
+    .const 'Sub' $P369 = "107_1282323996.47527" 
+    capture_lex $P369
+    .const 'Sub' $P363 = "105_1282323996.47527" 
+    capture_lex $P363
+    .const 'Sub' $P357 = "103_1282323996.47527" 
+    capture_lex $P357
+    .const 'Sub' $P351 = "101_1282323996.47527" 
+    capture_lex $P351
+    .const 'Sub' $P345 = "99_1282323996.47527" 
+    capture_lex $P345
+    .const 'Sub' $P339 = "97_1282323996.47527" 
+    capture_lex $P339
+    .const 'Sub' $P327 = "93_1282323996.47527" 
+    capture_lex $P327
+    .const 'Sub' $P317 = "91_1282323996.47527" 
+    capture_lex $P317
+    .const 'Sub' $P310 = "89_1282323996.47527" 
+    capture_lex $P310
+    .const 'Sub' $P298 = "87_1282323996.47527" 
+    capture_lex $P298
+    .const 'Sub' $P291 = "85_1282323996.47527" 
+    capture_lex $P291
+    .const 'Sub' $P285 = "83_1282323996.47527" 
+    capture_lex $P285
+    .const 'Sub' $P279 = "81_1282323996.47527" 
+    capture_lex $P279
+    .const 'Sub' $P272 = "79_1282323996.47527" 
+    capture_lex $P272
+    .const 'Sub' $P265 = "77_1282323996.47527" 
+    capture_lex $P265
+    .const 'Sub' $P258 = "75_1282323996.47527" 
+    capture_lex $P258
+    .const 'Sub' $P251 = "73_1282323996.47527" 
+    capture_lex $P251
+    .const 'Sub' $P245 = "71_1282323996.47527" 
+    capture_lex $P245
+    .const 'Sub' $P239 = "69_1282323996.47527" 
+    capture_lex $P239
+    .const 'Sub' $P233 = "67_1282323996.47527" 
+    capture_lex $P233
+    .const 'Sub' $P227 = "65_1282323996.47527" 
+    capture_lex $P227
+    .const 'Sub' $P221 = "63_1282323996.47527" 
+    capture_lex $P221
+    .const 'Sub' $P216 = "61_1282323996.47527" 
+    capture_lex $P216
+    .const 'Sub' $P211 = "59_1282323996.47527" 
+    capture_lex $P211
+    .const 'Sub' $P205 = "57_1282323996.47527" 
+    capture_lex $P205
+    .const 'Sub' $P199 = "55_1282323996.47527" 
+    capture_lex $P199
+    .const 'Sub' $P193 = "53_1282323996.47527" 
+    capture_lex $P193
+    .const 'Sub' $P178 = "48_1282323996.47527" 
+    capture_lex $P178
+    .const 'Sub' $P163 = "46_1282323996.47527" 
+    capture_lex $P163
+    .const 'Sub' $P156 = "44_1282323996.47527" 
+    capture_lex $P156
+    .const 'Sub' $P149 = "42_1282323996.47527" 
+    capture_lex $P149
+    .const 'Sub' $P142 = "40_1282323996.47527" 
+    capture_lex $P142
+    .const 'Sub' $P125 = "35_1282323996.47527" 
+    capture_lex $P125
+    .const 'Sub' $P113 = "32_1282323996.47527" 
+    capture_lex $P113
+    .const 'Sub' $P106 = "30_1282323996.47527" 
+    capture_lex $P106
+    .const 'Sub' $P97 = "28_1282323996.47527" 
     capture_lex $P97
-    .const 'Sub' $P87 = "26_1280467470.54449" 
+    .const 'Sub' $P87 = "26_1282323996.47527" 
     capture_lex $P87
-    .const 'Sub' $P80 = "24_1280467470.54449" 
+    .const 'Sub' $P80 = "24_1282323996.47527" 
     capture_lex $P80
-    .const 'Sub' $P68 = "22_1280467470.54449" 
+    .const 'Sub' $P68 = "22_1282323996.47527" 
     capture_lex $P68
-    .const 'Sub' $P61 = "20_1280467470.54449" 
+    .const 'Sub' $P61 = "20_1282323996.47527" 
     capture_lex $P61
-    .const 'Sub' $P54 = "18_1280467470.54449" 
+    .const 'Sub' $P54 = "18_1282323996.47527" 
     capture_lex $P54
-    .const 'Sub' $P44 = "15_1280467470.54449" 
+    .const 'Sub' $P44 = "15_1282323996.47527" 
     capture_lex $P44
-    .const 'Sub' $P37 = "13_1280467470.54449" 
+    .const 'Sub' $P37 = "13_1282323996.47527" 
     capture_lex $P37
-    .const 'Sub' $P15 = "12_1280467470.54449" 
+    .const 'Sub' $P15 = "12_1282323996.47527" 
     capture_lex $P15
     $P0 = find_dynamic_lex "$*CTXSAVE"
     if null $P0 goto ctxsave_done
@@ -184,17 +186,17 @@
     unless $I0 goto ctxsave_done
     $P0."ctxsave"()
   ctxsave_done:
-    .const 'Sub' $P561 = "158_1280467470.54449" 
-    capture_lex $P561
-    .return ($P561)
-    .const 'Sub' $P569 = "160_1280467470.54449" 
-    .return ($P569)
+    .const 'Sub' $P570 = "160_1282323996.47527" 
+    capture_lex $P570
+    .return ($P570)
+    .const 'Sub' $P578 = "162_1282323996.47527" 
+    .return ($P578)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
 .include "except_types.pasm"
-.sub "obs"  :subid("12_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "obs"  :subid("12_1282323996.47527") :method :outer("11_1282323996.47527")
     .param pmc param_18
     .param pmc param_19
     .param pmc param_20 :optional
@@ -207,11 +209,11 @@
     .lex "self", self
     .lex "$old", param_18
     .lex "$new", param_19
-    if has_param_20, optparam_163
+    if has_param_20, optparam_165
     new $P21, "String"
     assign $P21, "in Perl 6"
     set param_20, $P21
-  optparam_163:
+  optparam_165:
     .lex "$when", param_20
 .annotate 'line', 4
     find_lex $P22, "self"
@@ -241,7 +243,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "ws"  :subid("13_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "ws"  :subid("13_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
     .local string rx38_tgt
     .local int rx38_pos
@@ -249,7 +251,9 @@
     .local int rx38_eos
     .local int rx38_rep
     .local pmc rx38_cur
+    .local pmc rx38_debug
     (rx38_cur, rx38_pos, rx38_tgt, $I10) = self."!cursor_start"()
+    getattribute rx38_debug, rx38_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx38_cur
     .local pmc match
     .lex "$/", match
@@ -261,7 +265,9 @@
     substr rx38_tgt, rx38_tgt, rx38_off
   rx38_start:
     eq $I10, 1, rx38_restart
-    rx38_cur."!cursor_debug"("START ", "ws")
+    if_null rx38_debug, debug_166
+    rx38_cur."!cursor_debug"("START", "ws")
+  debug_166:
     $I10 = self.'from'()
     ne $I10, -1, rxscan41_done
     goto rxscan41_scan
@@ -294,8 +300,8 @@
     add $I11, rx38_pos, 1
     gt $I11, rx38_eos, rx38_fail
     sub $I11, rx38_pos, rx38_off
-    substr $S10, rx38_tgt, $I11, 1
-    ne $S10, "#", rx38_fail
+    ord $I11, rx38_tgt, $I11
+    ne $I11, 35, rx38_fail
     add rx38_pos, 1
   # rx charclass_q N r 0..-1
     sub $I10, rx38_pos, rx38_off
@@ -310,11 +316,15 @@
   rxquantr42_done:
   # rx pass
     rx38_cur."!cursor_pass"(rx38_pos, "ws")
-    rx38_cur."!cursor_debug"("PASS  ", "ws", " at pos=", rx38_pos)
+    if_null rx38_debug, debug_167
+    rx38_cur."!cursor_debug"("PASS", "ws", " at pos=", rx38_pos)
+  debug_167:
     .return (rx38_cur)
   rx38_restart:
 .annotate 'line', 3
-    rx38_cur."!cursor_debug"("NEXT ", "ws")
+    if_null rx38_debug, debug_168
+    rx38_cur."!cursor_debug"("NEXT", "ws")
+  debug_168:
   rx38_fail:
     (rx38_rep, rx38_pos, $I10, $P10) = rx38_cur."!mark_fail"(0)
     lt rx38_pos, -1, rx38_done
@@ -322,14 +332,16 @@
     jump $I10
   rx38_done:
     rx38_cur."!cursor_fail"()
-    rx38_cur."!cursor_debug"("FAIL  ", "ws")
+    if_null rx38_debug, debug_169
+    rx38_cur."!cursor_debug"("FAIL", "ws")
+  debug_169:
     .return (rx38_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__ws"  :subid("14_1280467470.54449") :method
+.sub "!PREFIX__ws"  :subid("14_1282323996.47527") :method
 .annotate 'line', 3
     new $P40, "ResizablePMCArray"
     push $P40, ""
@@ -338,9 +350,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "normspace"  :subid("15_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "normspace"  :subid("15_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .const 'Sub' $P50 = "17_1280467470.54449" 
+    .const 'Sub' $P50 = "17_1282323996.47527" 
     capture_lex $P50
     .local string rx45_tgt
     .local int rx45_pos
@@ -348,7 +360,9 @@
     .local int rx45_eos
     .local int rx45_rep
     .local pmc rx45_cur
+    .local pmc rx45_debug
     (rx45_cur, rx45_pos, rx45_tgt, $I10) = self."!cursor_start"()
+    getattribute rx45_debug, rx45_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx45_cur
     .local pmc match
     .lex "$/", match
@@ -360,7 +374,9 @@
     substr rx45_tgt, rx45_tgt, rx45_off
   rx45_start:
     eq $I10, 1, rx45_restart
-    rx45_cur."!cursor_debug"("START ", "normspace")
+    if_null rx45_debug, debug_170
+    rx45_cur."!cursor_debug"("START", "normspace")
+  debug_170:
     $I10 = self.'from'()
     ne $I10, -1, rxscan48_done
     goto rxscan48_scan
@@ -376,7 +392,7 @@
 .annotate 'line', 10
   # rx subrule "before" subtype=zerowidth negate=
     rx45_cur."!cursor_pos"(rx45_pos)
-    .const 'Sub' $P50 = "17_1280467470.54449" 
+    .const 'Sub' $P50 = "17_1282323996.47527" 
     capture_lex $P50
     $P10 = rx45_cur."before"($P50)
     unless $P10, rx45_fail
@@ -387,11 +403,15 @@
     rx45_pos = $P10."pos"()
   # rx pass
     rx45_cur."!cursor_pass"(rx45_pos, "normspace")
-    rx45_cur."!cursor_debug"("PASS  ", "normspace", " at pos=", rx45_pos)
+    if_null rx45_debug, debug_175
+    rx45_cur."!cursor_debug"("PASS", "normspace", " at pos=", rx45_pos)
+  debug_175:
     .return (rx45_cur)
   rx45_restart:
 .annotate 'line', 3
-    rx45_cur."!cursor_debug"("NEXT ", "normspace")
+    if_null rx45_debug, debug_176
+    rx45_cur."!cursor_debug"("NEXT", "normspace")
+  debug_176:
   rx45_fail:
     (rx45_rep, rx45_pos, $I10, $P10) = rx45_cur."!mark_fail"(0)
     lt rx45_pos, -1, rx45_done
@@ -399,14 +419,16 @@
     jump $I10
   rx45_done:
     rx45_cur."!cursor_fail"()
-    rx45_cur."!cursor_debug"("FAIL  ", "normspace")
+    if_null rx45_debug, debug_177
+    rx45_cur."!cursor_debug"("FAIL", "normspace")
+  debug_177:
     .return (rx45_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__normspace"  :subid("16_1280467470.54449") :method
+.sub "!PREFIX__normspace"  :subid("16_1282323996.47527") :method
 .annotate 'line', 3
     new $P47, "ResizablePMCArray"
     push $P47, ""
@@ -415,7 +437,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block49"  :anon :subid("17_1280467470.54449") :method :outer("15_1280467470.54449")
+.sub "_block49"  :anon :subid("17_1282323996.47527") :method :outer("15_1282323996.47527")
 .annotate 'line', 10
     .local string rx51_tgt
     .local int rx51_pos
@@ -423,7 +445,9 @@
     .local int rx51_eos
     .local int rx51_rep
     .local pmc rx51_cur
+    .local pmc rx51_debug
     (rx51_cur, rx51_pos, rx51_tgt, $I10) = self."!cursor_start"()
+    getattribute rx51_debug, rx51_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx51_cur
     .local pmc match
     .lex "$/", match
@@ -435,7 +459,9 @@
     substr rx51_tgt, rx51_tgt, rx51_off
   rx51_start:
     eq $I10, 1, rx51_restart
-    rx51_cur."!cursor_debug"("START ", "")
+    if_null rx51_debug, debug_171
+    rx51_cur."!cursor_debug"("START", "")
+  debug_171:
     $I10 = self.'from'()
     ne $I10, -1, rxscan52_done
     goto rxscan52_scan
@@ -463,16 +489,20 @@
     add $I11, rx51_pos, 1
     gt $I11, rx51_eos, rx51_fail
     sub $I11, rx51_pos, rx51_off
-    substr $S10, rx51_tgt, $I11, 1
-    ne $S10, "#", rx51_fail
+    ord $I11, rx51_tgt, $I11
+    ne $I11, 35, rx51_fail
     add rx51_pos, 1
   alt53_end:
   # rx pass
     rx51_cur."!cursor_pass"(rx51_pos, "")
-    rx51_cur."!cursor_debug"("PASS  ", "", " at pos=", rx51_pos)
+    if_null rx51_debug, debug_172
+    rx51_cur."!cursor_debug"("PASS", "", " at pos=", rx51_pos)
+  debug_172:
     .return (rx51_cur)
   rx51_restart:
-    rx51_cur."!cursor_debug"("NEXT ", "")
+    if_null rx51_debug, debug_173
+    rx51_cur."!cursor_debug"("NEXT", "")
+  debug_173:
   rx51_fail:
     (rx51_rep, rx51_pos, $I10, $P10) = rx51_cur."!mark_fail"(0)
     lt rx51_pos, -1, rx51_done
@@ -480,14 +510,16 @@
     jump $I10
   rx51_done:
     rx51_cur."!cursor_fail"()
-    rx51_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx51_debug, debug_174
+    rx51_cur."!cursor_debug"("FAIL", "")
+  debug_174:
     .return (rx51_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "identifier"  :subid("18_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "identifier"  :subid("18_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
     .local string rx55_tgt
     .local int rx55_pos
@@ -495,7 +527,9 @@
     .local int rx55_eos
     .local int rx55_rep
     .local pmc rx55_cur
+    .local pmc rx55_debug
     (rx55_cur, rx55_pos, rx55_tgt, $I10) = self."!cursor_start"()
+    getattribute rx55_debug, rx55_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx55_cur
     .local pmc match
     .lex "$/", match
@@ -507,7 +541,9 @@
     substr rx55_tgt, rx55_tgt, rx55_off
   rx55_start:
     eq $I10, 1, rx55_restart
-    rx55_cur."!cursor_debug"("START ", "identifier")
+    if_null rx55_debug, debug_178
+    rx55_cur."!cursor_debug"("START", "identifier")
+  debug_178:
     $I10 = self.'from'()
     ne $I10, -1, rxscan59_done
     goto rxscan59_scan
@@ -550,11 +586,15 @@
   rxquantr60_done:
   # rx pass
     rx55_cur."!cursor_pass"(rx55_pos, "identifier")
-    rx55_cur."!cursor_debug"("PASS  ", "identifier", " at pos=", rx55_pos)
+    if_null rx55_debug, debug_179
+    rx55_cur."!cursor_debug"("PASS", "identifier", " at pos=", rx55_pos)
+  debug_179:
     .return (rx55_cur)
   rx55_restart:
 .annotate 'line', 3
-    rx55_cur."!cursor_debug"("NEXT ", "identifier")
+    if_null rx55_debug, debug_180
+    rx55_cur."!cursor_debug"("NEXT", "identifier")
+  debug_180:
   rx55_fail:
     (rx55_rep, rx55_pos, $I10, $P10) = rx55_cur."!mark_fail"(0)
     lt rx55_pos, -1, rx55_done
@@ -562,14 +602,16 @@
     jump $I10
   rx55_done:
     rx55_cur."!cursor_fail"()
-    rx55_cur."!cursor_debug"("FAIL  ", "identifier")
+    if_null rx55_debug, debug_181
+    rx55_cur."!cursor_debug"("FAIL", "identifier")
+  debug_181:
     .return (rx55_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("19_1280467470.54449") :method
+.sub "!PREFIX__identifier"  :subid("19_1282323996.47527") :method
 .annotate 'line', 3
     $P57 = self."!PREFIX__!subrule"("ident", "")
     new $P58, "ResizablePMCArray"
@@ -579,7 +621,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "arg"  :subid("20_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "arg"  :subid("20_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
     .local string rx62_tgt
     .local int rx62_pos
@@ -587,7 +629,9 @@
     .local int rx62_eos
     .local int rx62_rep
     .local pmc rx62_cur
+    .local pmc rx62_debug
     (rx62_cur, rx62_pos, rx62_tgt, $I10) = self."!cursor_start"()
+    getattribute rx62_debug, rx62_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx62_cur
     .local pmc match
     .lex "$/", match
@@ -599,7 +643,9 @@
     substr rx62_tgt, rx62_tgt, rx62_off
   rx62_start:
     eq $I10, 1, rx62_restart
-    rx62_cur."!cursor_debug"("START ", "arg")
+    if_null rx62_debug, debug_182
+    rx62_cur."!cursor_debug"("START", "arg")
+  debug_182:
     $I10 = self.'from'()
     ne $I10, -1, rxscan65_done
     goto rxscan65_scan
@@ -675,11 +721,15 @@
 .annotate 'line', 14
   # rx pass
     rx62_cur."!cursor_pass"(rx62_pos, "arg")
-    rx62_cur."!cursor_debug"("PASS  ", "arg", " at pos=", rx62_pos)
+    if_null rx62_debug, debug_183
+    rx62_cur."!cursor_debug"("PASS", "arg", " at pos=", rx62_pos)
+  debug_183:
     .return (rx62_cur)
   rx62_restart:
 .annotate 'line', 3
-    rx62_cur."!cursor_debug"("NEXT ", "arg")
+    if_null rx62_debug, debug_184
+    rx62_cur."!cursor_debug"("NEXT", "arg")
+  debug_184:
   rx62_fail:
     (rx62_rep, rx62_pos, $I10, $P10) = rx62_cur."!mark_fail"(0)
     lt rx62_pos, -1, rx62_done
@@ -687,14 +737,16 @@
     jump $I10
   rx62_done:
     rx62_cur."!cursor_fail"()
-    rx62_cur."!cursor_debug"("FAIL  ", "arg")
+    if_null rx62_debug, debug_185
+    rx62_cur."!cursor_debug"("FAIL", "arg")
+  debug_185:
     .return (rx62_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__arg"  :subid("21_1280467470.54449") :method
+.sub "!PREFIX__arg"  :subid("21_1282323996.47527") :method
 .annotate 'line', 3
     new $P64, "ResizablePMCArray"
     push $P64, ""
@@ -705,7 +757,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "arglist"  :subid("22_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "arglist"  :subid("22_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
     .local string rx69_tgt
     .local int rx69_pos
@@ -713,8 +765,10 @@
     .local int rx69_eos
     .local int rx69_rep
     .local pmc rx69_cur
+    .local pmc rx69_debug
     (rx69_cur, rx69_pos, rx69_tgt, $I10) = self."!cursor_start"()
     rx69_cur."!cursor_caparray"("arg")
+    getattribute rx69_debug, rx69_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx69_cur
     .local pmc match
     .lex "$/", match
@@ -726,7 +780,9 @@
     substr rx69_tgt, rx69_tgt, rx69_off
   rx69_start:
     eq $I10, 1, rx69_restart
-    rx69_cur."!cursor_debug"("START ", "arglist")
+    if_null rx69_debug, debug_186
+    rx69_cur."!cursor_debug"("START", "arglist")
+  debug_186:
     $I10 = self.'from'()
     ne $I10, -1, rxscan73_done
     goto rxscan73_scan
@@ -770,8 +826,8 @@
     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
+    ord $I11, rx69_tgt, $I11
+    ne $I11, 44, rx69_fail
     add rx69_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx69_cur."!cursor_pos"(rx69_pos)
@@ -798,11 +854,15 @@
     rx69_pos = $P10."pos"()
   # rx pass
     rx69_cur."!cursor_pass"(rx69_pos, "arglist")
-    rx69_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx69_pos)
+    if_null rx69_debug, debug_187
+    rx69_cur."!cursor_debug"("PASS", "arglist", " at pos=", rx69_pos)
+  debug_187:
     .return (rx69_cur)
   rx69_restart:
 .annotate 'line', 3
-    rx69_cur."!cursor_debug"("NEXT ", "arglist")
+    if_null rx69_debug, debug_188
+    rx69_cur."!cursor_debug"("NEXT", "arglist")
+  debug_188:
   rx69_fail:
     (rx69_rep, rx69_pos, $I10, $P10) = rx69_cur."!mark_fail"(0)
     lt rx69_pos, -1, rx69_done
@@ -810,14 +870,16 @@
     jump $I10
   rx69_done:
     rx69_cur."!cursor_fail"()
-    rx69_cur."!cursor_debug"("FAIL  ", "arglist")
+    if_null rx69_debug, debug_189
+    rx69_cur."!cursor_debug"("FAIL", "arglist")
+  debug_189:
     .return (rx69_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("23_1280467470.54449") :method
+.sub "!PREFIX__arglist"  :subid("23_1282323996.47527") :method
 .annotate 'line', 3
     $P71 = self."!PREFIX__!subrule"("ws", "")
     new $P72, "ResizablePMCArray"
@@ -827,7 +889,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "TOP"  :subid("24_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "TOP"  :subid("24_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
     .local string rx81_tgt
     .local int rx81_pos
@@ -835,7 +897,9 @@
     .local int rx81_eos
     .local int rx81_rep
     .local pmc rx81_cur
+    .local pmc rx81_debug
     (rx81_cur, rx81_pos, rx81_tgt, $I10) = self."!cursor_start"()
+    getattribute rx81_debug, rx81_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx81_cur
     .local pmc match
     .lex "$/", match
@@ -847,7 +911,9 @@
     substr rx81_tgt, rx81_tgt, rx81_off
   rx81_start:
     eq $I10, 1, rx81_restart
-    rx81_cur."!cursor_debug"("START ", "TOP")
+    if_null rx81_debug, debug_190
+    rx81_cur."!cursor_debug"("START", "TOP")
+  debug_190:
     $I10 = self.'from'()
     ne $I10, -1, rxscan85_done
     goto rxscan85_scan
@@ -885,11 +951,15 @@
 .annotate 'line', 24
   # rx pass
     rx81_cur."!cursor_pass"(rx81_pos, "TOP")
-    rx81_cur."!cursor_debug"("PASS  ", "TOP", " at pos=", rx81_pos)
+    if_null rx81_debug, debug_191
+    rx81_cur."!cursor_debug"("PASS", "TOP", " at pos=", rx81_pos)
+  debug_191:
     .return (rx81_cur)
   rx81_restart:
 .annotate 'line', 3
-    rx81_cur."!cursor_debug"("NEXT ", "TOP")
+    if_null rx81_debug, debug_192
+    rx81_cur."!cursor_debug"("NEXT", "TOP")
+  debug_192:
   rx81_fail:
     (rx81_rep, rx81_pos, $I10, $P10) = rx81_cur."!mark_fail"(0)
     lt rx81_pos, -1, rx81_done
@@ -897,14 +967,16 @@
     jump $I10
   rx81_done:
     rx81_cur."!cursor_fail"()
-    rx81_cur."!cursor_debug"("FAIL  ", "TOP")
+    if_null rx81_debug, debug_193
+    rx81_cur."!cursor_debug"("FAIL", "TOP")
+  debug_193:
     .return (rx81_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__TOP"  :subid("25_1280467470.54449") :method
+.sub "!PREFIX__TOP"  :subid("25_1282323996.47527") :method
 .annotate 'line', 3
     $P83 = self."!PREFIX__!subrule"("nibbler", "")
     new $P84, "ResizablePMCArray"
@@ -914,7 +986,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "nibbler"  :subid("26_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "nibbler"  :subid("26_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
     .local string rx88_tgt
     .local int rx88_pos
@@ -922,8 +994,10 @@
     .local int rx88_eos
     .local int rx88_rep
     .local pmc rx88_cur
+    .local pmc rx88_debug
     (rx88_cur, rx88_pos, rx88_tgt, $I10) = self."!cursor_start"()
-    rx88_cur."!cursor_caparray"("termish")
+    rx88_cur."!cursor_caparray"("termconj")
+    getattribute rx88_debug, rx88_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx88_cur
     .local pmc match
     .lex "$/", match
@@ -935,7 +1009,9 @@
     substr rx88_tgt, rx88_tgt, rx88_off
   rx88_start:
     eq $I10, 1, rx88_restart
-    rx88_cur."!cursor_debug"("START ", "nibbler")
+    if_null rx88_debug, debug_194
+    rx88_cur."!cursor_debug"("START", "nibbler")
+  debug_194:
     $I10 = self.'from'()
     ne $I10, -1, rxscan91_done
     goto rxscan91_scan
@@ -980,8 +1056,8 @@
     add $I11, rx88_pos, 1
     gt $I11, rx88_eos, rx88_fail
     sub $I11, rx88_pos, rx88_off
-    substr $S10, rx88_tgt, $I11, 1
-    ne $S10, "|", rx88_fail
+    ord $I11, rx88_tgt, $I11
+    ne $I11, 124, rx88_fail
     add rx88_pos, 1
     goto alt93_end
   alt93_2:
@@ -1000,20 +1076,20 @@
     add $I11, rx88_pos, 1
     gt $I11, rx88_eos, rx88_fail
     sub $I11, rx88_pos, rx88_off
-    substr $S10, rx88_tgt, $I11, 1
-    ne $S10, "&", rx88_fail
+    ord $I11, rx88_tgt, $I11
+    ne $I11, 38, rx88_fail
     add rx88_pos, 1
   alt93_end:
     set_addr $I10, rxquantr92_done
     (rx88_rep) = rx88_cur."!mark_commit"($I10)
   rxquantr92_done:
 .annotate 'line', 32
-  # rx subrule "termish" subtype=capture negate=
+  # rx subrule "termconj" subtype=capture negate=
     rx88_cur."!cursor_pos"(rx88_pos)
-    $P10 = rx88_cur."termish"()
+    $P10 = rx88_cur."termconj"()
     unless $P10, rx88_fail
     rx88_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("termish")
+    $P10."!cursor_names"("termconj")
     rx88_pos = $P10."pos"()
 .annotate 'line', 35
   # rx rxquantr94 ** 0..*
@@ -1037,20 +1113,20 @@
     add $I11, rx88_pos, 1
     gt $I11, rx88_eos, rx88_fail
     sub $I11, rx88_pos, rx88_off
-    substr $S10, rx88_tgt, $I11, 1
-    ne $S10, "|", rx88_fail
+    ord $I11, rx88_tgt, $I11
+    ne $I11, 124, rx88_fail
     add rx88_pos, 1
   alt95_end:
   alt96_0:
 .annotate 'line', 34
     set_addr $I10, alt96_1
     rx88_cur."!mark_push"(0, rx88_pos, $I10)
-  # rx subrule "termish" subtype=capture negate=
+  # rx subrule "termconj" subtype=capture negate=
     rx88_cur."!cursor_pos"(rx88_pos)
-    $P10 = rx88_cur."termish"()
+    $P10 = rx88_cur."termconj"()
     unless $P10, rx88_fail
     rx88_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("termish")
+    $P10."!cursor_names"("termconj")
     rx88_pos = $P10."pos"()
     goto alt96_end
   alt96_1:
@@ -1070,11 +1146,15 @@
 .annotate 'line', 29
   # rx pass
     rx88_cur."!cursor_pass"(rx88_pos, "nibbler")
-    rx88_cur."!cursor_debug"("PASS  ", "nibbler", " at pos=", rx88_pos)
+    if_null rx88_debug, debug_195
+    rx88_cur."!cursor_debug"("PASS", "nibbler", " at pos=", rx88_pos)
+  debug_195:
     .return (rx88_cur)
   rx88_restart:
 .annotate 'line', 3
-    rx88_cur."!cursor_debug"("NEXT ", "nibbler")
+    if_null rx88_debug, debug_196
+    rx88_cur."!cursor_debug"("NEXT", "nibbler")
+  debug_196:
   rx88_fail:
     (rx88_rep, rx88_pos, $I10, $P10) = rx88_cur."!mark_fail"(0)
     lt rx88_pos, -1, rx88_done
@@ -1082,14 +1162,16 @@
     jump $I10
   rx88_done:
     rx88_cur."!cursor_fail"()
-    rx88_cur."!cursor_debug"("FAIL  ", "nibbler")
+    if_null rx88_debug, debug_197
+    rx88_cur."!cursor_debug"("FAIL", "nibbler")
+  debug_197:
     .return (rx88_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__nibbler"  :subid("27_1280467470.54449") :method
+.sub "!PREFIX__nibbler"  :subid("27_1282323996.47527") :method
 .annotate 'line', 3
     new $P90, "ResizablePMCArray"
     push $P90, ""
@@ -1098,7 +1180,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "termish"  :subid("28_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "termconj"  :subid("28_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
     .local string rx98_tgt
     .local int rx98_pos
@@ -1106,8 +1188,10 @@
     .local int rx98_eos
     .local int rx98_rep
     .local pmc rx98_cur
+    .local pmc rx98_debug
     (rx98_cur, rx98_pos, rx98_tgt, $I10) = self."!cursor_start"()
-    rx98_cur."!cursor_caparray"("noun")
+    rx98_cur."!cursor_caparray"("termish")
+    getattribute rx98_debug, rx98_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx98_cur
     .local pmc match
     .lex "$/", match
@@ -1119,51 +1203,93 @@
     substr rx98_tgt, rx98_tgt, rx98_off
   rx98_start:
     eq $I10, 1, rx98_restart
-    rx98_cur."!cursor_debug"("START ", "termish")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan101_done
-    goto rxscan101_scan
-  rxscan101_loop:
+    if_null rx98_debug, debug_198
+    rx98_cur."!cursor_debug"("START", "termconj")
+  debug_198:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan102_done
+    goto rxscan102_scan
+  rxscan102_loop:
     ($P10) = rx98_cur."from"()
     inc $P10
     set rx98_pos, $P10
-    ge rx98_pos, rx98_eos, rxscan101_done
-  rxscan101_scan:
-    set_addr $I10, rxscan101_loop
+    ge rx98_pos, rx98_eos, rxscan102_done
+  rxscan102_scan:
+    set_addr $I10, rxscan102_loop
     rx98_cur."!mark_push"(0, rx98_pos, $I10)
-  rxscan101_done:
+  rxscan102_done:
 .annotate 'line', 39
-  # rx rxquantr102 ** 1..*
-    set_addr $I10, rxquantr102_done
-    rx98_cur."!mark_push"(0, -1, $I10)
-  rxquantr102_loop:
-  # rx subrule "quantified_atom" subtype=capture negate=
+  # rx subrule "termish" subtype=capture negate=
     rx98_cur."!cursor_pos"(rx98_pos)
-    $P10 = rx98_cur."quantified_atom"()
+    $P10 = rx98_cur."termish"()
     unless $P10, rx98_fail
-    goto rxsubrule103_pass
-  rxsubrule103_back:
-    $P10 = $P10."!cursor_next"()
+    rx98_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("termish")
+    rx98_pos = $P10."pos"()
+.annotate 'line', 42
+  # rx rxquantr103 ** 0..*
+    set_addr $I10, rxquantr103_done
+    rx98_cur."!mark_push"(0, rx98_pos, $I10)
+  rxquantr103_loop:
+  alt104_0:
+.annotate 'line', 40
+    set_addr $I10, alt104_1
+    rx98_cur."!mark_push"(0, rx98_pos, $I10)
+  # rx literal  "&&"
+    add $I11, rx98_pos, 2
+    gt $I11, rx98_eos, rx98_fail
+    sub $I11, rx98_pos, rx98_off
+    substr $S10, rx98_tgt, $I11, 2
+    ne $S10, "&&", rx98_fail
+    add rx98_pos, 2
+    goto alt104_end
+  alt104_1:
+  # rx literal  "&"
+    add $I11, rx98_pos, 1
+    gt $I11, rx98_eos, rx98_fail
+    sub $I11, rx98_pos, rx98_off
+    ord $I11, rx98_tgt, $I11
+    ne $I11, 38, rx98_fail
+    add rx98_pos, 1
+  alt104_end:
+  alt105_0:
+.annotate 'line', 41
+    set_addr $I10, alt105_1
+    rx98_cur."!mark_push"(0, rx98_pos, $I10)
+  # rx subrule "termish" subtype=capture negate=
+    rx98_cur."!cursor_pos"(rx98_pos)
+    $P10 = rx98_cur."termish"()
+    unless $P10, rx98_fail
+    rx98_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("termish")
+    rx98_pos = $P10."pos"()
+    goto alt105_end
+  alt105_1:
+  # rx subrule "panic" subtype=method negate=
+    rx98_cur."!cursor_pos"(rx98_pos)
+    $P10 = rx98_cur."panic"("Null pattern not allowed")
     unless $P10, rx98_fail
-  rxsubrule103_pass:
-    set_addr $I10, rxsubrule103_back
-    rx98_cur."!mark_push"(0, rx98_pos, $I10, $P10)
-    $P10."!cursor_names"("noun")
     rx98_pos = $P10."pos"()
-    set_addr $I10, rxquantr102_done
+  alt105_end:
+.annotate 'line', 42
+    set_addr $I10, rxquantr103_done
     (rx98_rep) = rx98_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr102_done
+    set_addr $I10, rxquantr103_done
     rx98_cur."!mark_push"(rx98_rep, rx98_pos, $I10)
-    goto rxquantr102_loop
-  rxquantr102_done:
+    goto rxquantr103_loop
+  rxquantr103_done:
 .annotate 'line', 38
   # rx pass
-    rx98_cur."!cursor_pass"(rx98_pos, "termish")
-    rx98_cur."!cursor_debug"("PASS  ", "termish", " at pos=", rx98_pos)
+    rx98_cur."!cursor_pass"(rx98_pos, "termconj")
+    if_null rx98_debug, debug_199
+    rx98_cur."!cursor_debug"("PASS", "termconj", " at pos=", rx98_pos)
+  debug_199:
     .return (rx98_cur)
   rx98_restart:
 .annotate 'line', 3
-    rx98_cur."!cursor_debug"("NEXT ", "termish")
+    if_null rx98_debug, debug_200
+    rx98_cur."!cursor_debug"("NEXT", "termconj")
+  debug_200:
   rx98_fail:
     (rx98_rep, rx98_pos, $I10, $P10) = rx98_cur."!mark_fail"(0)
     lt rx98_pos, -1, rx98_done
@@ -1171,149 +1297,138 @@
     jump $I10
   rx98_done:
     rx98_cur."!cursor_fail"()
-    rx98_cur."!cursor_debug"("FAIL  ", "termish")
+    if_null rx98_debug, debug_201
+    rx98_cur."!cursor_debug"("FAIL", "termconj")
+  debug_201:
     .return (rx98_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__termish"  :subid("29_1280467470.54449") :method
+.sub "!PREFIX__termconj"  :subid("29_1282323996.47527") :method
 .annotate 'line', 3
-    new $P100, "ResizablePMCArray"
-    push $P100, ""
-    .return ($P100)
+    $P100 = self."!PREFIX__!subrule"("termish", "")
+    new $P101, "ResizablePMCArray"
+    push $P101, $P100
+    .return ($P101)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantified_atom"  :subid("30_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .const 'Sub' $P113 = "32_1280467470.54449" 
-    capture_lex $P113
-    .local string rx105_tgt
-    .local int rx105_pos
-    .local int rx105_off
-    .local int rx105_eos
-    .local int rx105_rep
-    .local pmc rx105_cur
-    (rx105_cur, rx105_pos, rx105_tgt, $I10) = self."!cursor_start"()
-    rx105_cur."!cursor_caparray"("quantifier", "backmod")
-    .lex unicode:"$\x{a2}", rx105_cur
-    .local pmc match
-    .lex "$/", match
-    length rx105_eos, rx105_tgt
-    gt rx105_pos, rx105_eos, rx105_done
-    set rx105_off, 0
-    lt rx105_pos, 2, rx105_start
-    sub rx105_off, rx105_pos, 1
-    substr rx105_tgt, rx105_tgt, rx105_off
-  rx105_start:
-    eq $I10, 1, rx105_restart
-    rx105_cur."!cursor_debug"("START ", "quantified_atom")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan109_done
-    goto rxscan109_scan
-  rxscan109_loop:
-    ($P10) = rx105_cur."from"()
-    inc $P10
-    set rx105_pos, $P10
-    ge rx105_pos, rx105_eos, rxscan109_done
-  rxscan109_scan:
-    set_addr $I10, rxscan109_loop
-    rx105_cur."!mark_push"(0, rx105_pos, $I10)
-  rxscan109_done:
-.annotate 'line', 43
-  # rx subrule "atom" subtype=capture negate=
-    rx105_cur."!cursor_pos"(rx105_pos)
-    $P10 = rx105_cur."atom"()
-    unless $P10, rx105_fail
-    rx105_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("atom")
-    rx105_pos = $P10."pos"()
-  # rx rxquantr110 ** 0..1
-    set_addr $I10, rxquantr110_done
-    rx105_cur."!mark_push"(0, rx105_pos, $I10)
-  rxquantr110_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx105_cur."!cursor_pos"(rx105_pos)
-    $P10 = rx105_cur."ws"()
-    unless $P10, rx105_fail
-    rx105_pos = $P10."pos"()
-  alt111_0:
-    set_addr $I10, alt111_1
-    rx105_cur."!mark_push"(0, rx105_pos, $I10)
-  # rx subrule "quantifier" subtype=capture negate=
-    rx105_cur."!cursor_pos"(rx105_pos)
-    $P10 = rx105_cur."quantifier"()
-    unless $P10, rx105_fail
-    rx105_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quantifier")
-    rx105_pos = $P10."pos"()
-    goto alt111_end
-  alt111_1:
-  # rx subrule "before" subtype=zerowidth negate=
-    rx105_cur."!cursor_pos"(rx105_pos)
-    .const 'Sub' $P113 = "32_1280467470.54449" 
-    capture_lex $P113
-    $P10 = rx105_cur."before"($P113)
-    unless $P10, rx105_fail
-  # rx subrule "backmod" subtype=capture negate=
-    rx105_cur."!cursor_pos"(rx105_pos)
-    $P10 = rx105_cur."backmod"()
-    unless $P10, rx105_fail
-    rx105_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("backmod")
-    rx105_pos = $P10."pos"()
-  # rx subrule "alpha" subtype=zerowidth negate=1
-    rx105_cur."!cursor_pos"(rx105_pos)
-    $P10 = rx105_cur."alpha"()
-    if $P10, rx105_fail
-  alt111_end:
-    set_addr $I10, rxquantr110_done
-    (rx105_rep) = rx105_cur."!mark_commit"($I10)
-  rxquantr110_done:
-.annotate 'line', 42
+.sub "termish"  :subid("30_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx107_tgt
+    .local int rx107_pos
+    .local int rx107_off
+    .local int rx107_eos
+    .local int rx107_rep
+    .local pmc rx107_cur
+    .local pmc rx107_debug
+    (rx107_cur, rx107_pos, rx107_tgt, $I10) = self."!cursor_start"()
+    rx107_cur."!cursor_caparray"("noun")
+    getattribute rx107_debug, rx107_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx107_cur
+    .local pmc match
+    .lex "$/", match
+    length rx107_eos, rx107_tgt
+    gt rx107_pos, rx107_eos, rx107_done
+    set rx107_off, 0
+    lt rx107_pos, 2, rx107_start
+    sub rx107_off, rx107_pos, 1
+    substr rx107_tgt, rx107_tgt, rx107_off
+  rx107_start:
+    eq $I10, 1, rx107_restart
+    if_null rx107_debug, debug_202
+    rx107_cur."!cursor_debug"("START", "termish")
+  debug_202:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan110_done
+    goto rxscan110_scan
+  rxscan110_loop:
+    ($P10) = rx107_cur."from"()
+    inc $P10
+    set rx107_pos, $P10
+    ge rx107_pos, rx107_eos, rxscan110_done
+  rxscan110_scan:
+    set_addr $I10, rxscan110_loop
+    rx107_cur."!mark_push"(0, rx107_pos, $I10)
+  rxscan110_done:
+.annotate 'line', 46
+  # rx rxquantr111 ** 1..*
+    set_addr $I10, rxquantr111_done
+    rx107_cur."!mark_push"(0, -1, $I10)
+  rxquantr111_loop:
+  # rx subrule "quantified_atom" subtype=capture negate=
+    rx107_cur."!cursor_pos"(rx107_pos)
+    $P10 = rx107_cur."quantified_atom"()
+    unless $P10, rx107_fail
+    goto rxsubrule112_pass
+  rxsubrule112_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx107_fail
+  rxsubrule112_pass:
+    set_addr $I10, rxsubrule112_back
+    rx107_cur."!mark_push"(0, rx107_pos, $I10, $P10)
+    $P10."!cursor_names"("noun")
+    rx107_pos = $P10."pos"()
+    set_addr $I10, rxquantr111_done
+    (rx107_rep) = rx107_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr111_done
+    rx107_cur."!mark_push"(rx107_rep, rx107_pos, $I10)
+    goto rxquantr111_loop
+  rxquantr111_done:
+.annotate 'line', 45
   # rx pass
-    rx105_cur."!cursor_pass"(rx105_pos, "quantified_atom")
-    rx105_cur."!cursor_debug"("PASS  ", "quantified_atom", " at pos=", rx105_pos)
-    .return (rx105_cur)
-  rx105_restart:
+    rx107_cur."!cursor_pass"(rx107_pos, "termish")
+    if_null rx107_debug, debug_203
+    rx107_cur."!cursor_debug"("PASS", "termish", " at pos=", rx107_pos)
+  debug_203:
+    .return (rx107_cur)
+  rx107_restart:
 .annotate 'line', 3
-    rx105_cur."!cursor_debug"("NEXT ", "quantified_atom")
-  rx105_fail:
-    (rx105_rep, rx105_pos, $I10, $P10) = rx105_cur."!mark_fail"(0)
-    lt rx105_pos, -1, rx105_done
-    eq rx105_pos, -1, rx105_fail
+    if_null rx107_debug, debug_204
+    rx107_cur."!cursor_debug"("NEXT", "termish")
+  debug_204:
+  rx107_fail:
+    (rx107_rep, rx107_pos, $I10, $P10) = rx107_cur."!mark_fail"(0)
+    lt rx107_pos, -1, rx107_done
+    eq rx107_pos, -1, rx107_fail
     jump $I10
-  rx105_done:
-    rx105_cur."!cursor_fail"()
-    rx105_cur."!cursor_debug"("FAIL  ", "quantified_atom")
-    .return (rx105_cur)
+  rx107_done:
+    rx107_cur."!cursor_fail"()
+    if_null rx107_debug, debug_205
+    rx107_cur."!cursor_debug"("FAIL", "termish")
+  debug_205:
+    .return (rx107_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantified_atom"  :subid("31_1280467470.54449") :method
+.sub "!PREFIX__termish"  :subid("31_1282323996.47527") :method
 .annotate 'line', 3
-    $P107 = self."!PREFIX__!subrule"("atom", "")
-    new $P108, "ResizablePMCArray"
-    push $P108, $P107
-    .return ($P108)
+    new $P109, "ResizablePMCArray"
+    push $P109, ""
+    .return ($P109)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block112"  :anon :subid("32_1280467470.54449") :method :outer("30_1280467470.54449")
-.annotate 'line', 43
+.sub "quantified_atom"  :subid("32_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .const 'Sub' $P122 = "34_1282323996.47527" 
+    capture_lex $P122
     .local string rx114_tgt
     .local int rx114_pos
     .local int rx114_off
     .local int rx114_eos
     .local int rx114_rep
     .local pmc rx114_cur
+    .local pmc rx114_debug
     (rx114_cur, rx114_pos, rx114_tgt, $I10) = self."!cursor_start"()
+    rx114_cur."!cursor_caparray"("quantifier", "backmod")
+    getattribute rx114_debug, rx114_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx114_cur
     .local pmc match
     .lex "$/", match
@@ -1325,32 +1440,83 @@
     substr rx114_tgt, rx114_tgt, rx114_off
   rx114_start:
     eq $I10, 1, rx114_restart
-    rx114_cur."!cursor_debug"("START ", "")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan115_done
-    goto rxscan115_scan
-  rxscan115_loop:
+    if_null rx114_debug, debug_206
+    rx114_cur."!cursor_debug"("START", "quantified_atom")
+  debug_206:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan118_done
+    goto rxscan118_scan
+  rxscan118_loop:
     ($P10) = rx114_cur."from"()
     inc $P10
     set rx114_pos, $P10
-    ge rx114_pos, rx114_eos, rxscan115_done
-  rxscan115_scan:
-    set_addr $I10, rxscan115_loop
+    ge rx114_pos, rx114_eos, rxscan118_done
+  rxscan118_scan:
+    set_addr $I10, rxscan118_loop
     rx114_cur."!mark_push"(0, rx114_pos, $I10)
-  rxscan115_done:
-  # rx literal  ":"
-    add $I11, rx114_pos, 1
-    gt $I11, rx114_eos, rx114_fail
-    sub $I11, rx114_pos, rx114_off
-    substr $S10, rx114_tgt, $I11, 1
-    ne $S10, ":", rx114_fail
-    add rx114_pos, 1
+  rxscan118_done:
+.annotate 'line', 50
+  # rx subrule "atom" subtype=capture negate=
+    rx114_cur."!cursor_pos"(rx114_pos)
+    $P10 = rx114_cur."atom"()
+    unless $P10, rx114_fail
+    rx114_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("atom")
+    rx114_pos = $P10."pos"()
+  # rx rxquantr119 ** 0..1
+    set_addr $I10, rxquantr119_done
+    rx114_cur."!mark_push"(0, rx114_pos, $I10)
+  rxquantr119_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx114_cur."!cursor_pos"(rx114_pos)
+    $P10 = rx114_cur."ws"()
+    unless $P10, rx114_fail
+    rx114_pos = $P10."pos"()
+  alt120_0:
+    set_addr $I10, alt120_1
+    rx114_cur."!mark_push"(0, rx114_pos, $I10)
+  # rx subrule "quantifier" subtype=capture negate=
+    rx114_cur."!cursor_pos"(rx114_pos)
+    $P10 = rx114_cur."quantifier"()
+    unless $P10, rx114_fail
+    rx114_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quantifier")
+    rx114_pos = $P10."pos"()
+    goto alt120_end
+  alt120_1:
+  # rx subrule "before" subtype=zerowidth negate=
+    rx114_cur."!cursor_pos"(rx114_pos)
+    .const 'Sub' $P122 = "34_1282323996.47527" 
+    capture_lex $P122
+    $P10 = rx114_cur."before"($P122)
+    unless $P10, rx114_fail
+  # rx subrule "backmod" subtype=capture negate=
+    rx114_cur."!cursor_pos"(rx114_pos)
+    $P10 = rx114_cur."backmod"()
+    unless $P10, rx114_fail
+    rx114_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("backmod")
+    rx114_pos = $P10."pos"()
+  # rx subrule "alpha" subtype=zerowidth negate=1
+    rx114_cur."!cursor_pos"(rx114_pos)
+    $P10 = rx114_cur."alpha"()
+    if $P10, rx114_fail
+  alt120_end:
+    set_addr $I10, rxquantr119_done
+    (rx114_rep) = rx114_cur."!mark_commit"($I10)
+  rxquantr119_done:
+.annotate 'line', 49
   # rx pass
-    rx114_cur."!cursor_pass"(rx114_pos, "")
-    rx114_cur."!cursor_debug"("PASS  ", "", " at pos=", rx114_pos)
+    rx114_cur."!cursor_pass"(rx114_pos, "quantified_atom")
+    if_null rx114_debug, debug_211
+    rx114_cur."!cursor_debug"("PASS", "quantified_atom", " at pos=", rx114_pos)
+  debug_211:
     .return (rx114_cur)
   rx114_restart:
-    rx114_cur."!cursor_debug"("NEXT ", "")
+.annotate 'line', 3
+    if_null rx114_debug, debug_212
+    rx114_cur."!cursor_debug"("NEXT", "quantified_atom")
+  debug_212:
   rx114_fail:
     (rx114_rep, rx114_pos, $I10, $P10) = rx114_cur."!mark_fail"(0)
     lt rx114_pos, -1, rx114_done
@@ -1358,3989 +1524,4360 @@
     jump $I10
   rx114_done:
     rx114_cur."!cursor_fail"()
-    rx114_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx114_debug, debug_213
+    rx114_cur."!cursor_debug"("FAIL", "quantified_atom")
+  debug_213:
     .return (rx114_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "atom"  :subid("33_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "!PREFIX__quantified_atom"  :subid("33_1282323996.47527") :method
 .annotate 'line', 3
-    .const 'Sub' $P126 = "35_1280467470.54449" 
-    capture_lex $P126
-    .local string rx117_tgt
-    .local int rx117_pos
-    .local int rx117_off
-    .local int rx117_eos
-    .local int rx117_rep
-    .local pmc rx117_cur
-    (rx117_cur, rx117_pos, rx117_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx117_cur
-    .local pmc match
-    .lex "$/", match
-    length rx117_eos, rx117_tgt
-    gt rx117_pos, rx117_eos, rx117_done
-    set rx117_off, 0
-    lt rx117_pos, 2, rx117_start
-    sub rx117_off, rx117_pos, 1
-    substr rx117_tgt, rx117_tgt, rx117_off
-  rx117_start:
-    eq $I10, 1, rx117_restart
-    rx117_cur."!cursor_debug"("START ", "atom")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan121_done
-    goto rxscan121_scan
-  rxscan121_loop:
-    ($P10) = rx117_cur."from"()
-    inc $P10
-    set rx117_pos, $P10
-    ge rx117_pos, rx117_eos, rxscan121_done
-  rxscan121_scan:
-    set_addr $I10, rxscan121_loop
-    rx117_cur."!mark_push"(0, rx117_pos, $I10)
-  rxscan121_done:
-  alt122_0:
-.annotate 'line', 48
-    set_addr $I10, alt122_1
-    rx117_cur."!mark_push"(0, rx117_pos, $I10)
-.annotate 'line', 49
+    $P116 = self."!PREFIX__!subrule"("atom", "")
+    new $P117, "ResizablePMCArray"
+    push $P117, $P116
+    .return ($P117)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block121"  :anon :subid("34_1282323996.47527") :method :outer("32_1282323996.47527")
+.annotate 'line', 50
+    .local string rx123_tgt
+    .local int rx123_pos
+    .local int rx123_off
+    .local int rx123_eos
+    .local int rx123_rep
+    .local pmc rx123_cur
+    .local pmc rx123_debug
+    (rx123_cur, rx123_pos, rx123_tgt, $I10) = self."!cursor_start"()
+    getattribute rx123_debug, rx123_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx123_cur
+    .local pmc match
+    .lex "$/", match
+    length rx123_eos, rx123_tgt
+    gt rx123_pos, rx123_eos, rx123_done
+    set rx123_off, 0
+    lt rx123_pos, 2, rx123_start
+    sub rx123_off, rx123_pos, 1
+    substr rx123_tgt, rx123_tgt, rx123_off
+  rx123_start:
+    eq $I10, 1, rx123_restart
+    if_null rx123_debug, debug_207
+    rx123_cur."!cursor_debug"("START", "")
+  debug_207:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan124_done
+    goto rxscan124_scan
+  rxscan124_loop:
+    ($P10) = rx123_cur."from"()
+    inc $P10
+    set rx123_pos, $P10
+    ge rx123_pos, rx123_eos, rxscan124_done
+  rxscan124_scan:
+    set_addr $I10, rxscan124_loop
+    rx123_cur."!mark_push"(0, rx123_pos, $I10)
+  rxscan124_done:
+  # rx literal  ":"
+    add $I11, rx123_pos, 1
+    gt $I11, rx123_eos, rx123_fail
+    sub $I11, rx123_pos, rx123_off
+    ord $I11, rx123_tgt, $I11
+    ne $I11, 58, rx123_fail
+    add rx123_pos, 1
+  # rx pass
+    rx123_cur."!cursor_pass"(rx123_pos, "")
+    if_null rx123_debug, debug_208
+    rx123_cur."!cursor_debug"("PASS", "", " at pos=", rx123_pos)
+  debug_208:
+    .return (rx123_cur)
+  rx123_restart:
+    if_null rx123_debug, debug_209
+    rx123_cur."!cursor_debug"("NEXT", "")
+  debug_209:
+  rx123_fail:
+    (rx123_rep, rx123_pos, $I10, $P10) = rx123_cur."!mark_fail"(0)
+    lt rx123_pos, -1, rx123_done
+    eq rx123_pos, -1, rx123_fail
+    jump $I10
+  rx123_done:
+    rx123_cur."!cursor_fail"()
+    if_null rx123_debug, debug_210
+    rx123_cur."!cursor_debug"("FAIL", "")
+  debug_210:
+    .return (rx123_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "atom"  :subid("35_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .const 'Sub' $P135 = "37_1282323996.47527" 
+    capture_lex $P135
+    .local string rx126_tgt
+    .local int rx126_pos
+    .local int rx126_off
+    .local int rx126_eos
+    .local int rx126_rep
+    .local pmc rx126_cur
+    .local pmc rx126_debug
+    (rx126_cur, rx126_pos, rx126_tgt, $I10) = self."!cursor_start"()
+    getattribute rx126_debug, rx126_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx126_cur
+    .local pmc match
+    .lex "$/", match
+    length rx126_eos, rx126_tgt
+    gt rx126_pos, rx126_eos, rx126_done
+    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:
+    eq $I10, 1, rx126_restart
+    if_null rx126_debug, debug_214
+    rx126_cur."!cursor_debug"("START", "atom")
+  debug_214:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan130_done
+    goto rxscan130_scan
+  rxscan130_loop:
+    ($P10) = rx126_cur."from"()
+    inc $P10
+    set rx126_pos, $P10
+    ge rx126_pos, rx126_eos, rxscan130_done
+  rxscan130_scan:
+    set_addr $I10, rxscan130_loop
+    rx126_cur."!mark_push"(0, rx126_pos, $I10)
+  rxscan130_done:
+  alt131_0:
+.annotate 'line', 55
+    set_addr $I10, alt131_1
+    rx126_cur."!mark_push"(0, rx126_pos, $I10)
+.annotate 'line', 56
   # rx charclass w
-    ge rx117_pos, rx117_eos, rx117_fail
-    sub $I10, rx117_pos, rx117_off
-    is_cclass $I11, 8192, rx117_tgt, $I10
-    unless $I11, rx117_fail
-    inc rx117_pos
-  # rx rxquantr123 ** 0..1
-    set_addr $I10, rxquantr123_done
-    rx117_cur."!mark_push"(0, rx117_pos, $I10)
-  rxquantr123_loop:
-  # rx rxquantg124 ** 1..*
-  rxquantg124_loop:
+    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
+  # rx rxquantr132 ** 0..1
+    set_addr $I10, rxquantr132_done
+    rx126_cur."!mark_push"(0, rx126_pos, $I10)
+  rxquantr132_loop:
+  # rx rxquantg133 ** 1..*
+  rxquantg133_loop:
   # rx charclass w
-    ge rx117_pos, rx117_eos, rx117_fail
-    sub $I10, rx117_pos, rx117_off
-    is_cclass $I11, 8192, rx117_tgt, $I10
-    unless $I11, rx117_fail
-    inc rx117_pos
-    set_addr $I10, rxquantg124_done
-    rx117_cur."!mark_push"(rx117_rep, rx117_pos, $I10)
-    goto rxquantg124_loop
-  rxquantg124_done:
+    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
+    set_addr $I10, rxquantg133_done
+    rx126_cur."!mark_push"(rx126_rep, rx126_pos, $I10)
+    goto rxquantg133_loop
+  rxquantg133_done:
   # rx subrule "before" subtype=zerowidth negate=
-    rx117_cur."!cursor_pos"(rx117_pos)
-    .const 'Sub' $P126 = "35_1280467470.54449" 
-    capture_lex $P126
-    $P10 = rx117_cur."before"($P126)
-    unless $P10, rx117_fail
-    set_addr $I10, rxquantr123_done
-    (rx117_rep) = rx117_cur."!mark_commit"($I10)
-  rxquantr123_done:
-    goto alt122_end
-  alt122_1:
-.annotate 'line', 50
+    rx126_cur."!cursor_pos"(rx126_pos)
+    .const 'Sub' $P135 = "37_1282323996.47527" 
+    capture_lex $P135
+    $P10 = rx126_cur."before"($P135)
+    unless $P10, rx126_fail
+    set_addr $I10, rxquantr132_done
+    (rx126_rep) = rx126_cur."!mark_commit"($I10)
+  rxquantr132_done:
+    goto alt131_end
+  alt131_1:
+.annotate 'line', 57
   # rx subrule "metachar" subtype=capture negate=
-    rx117_cur."!cursor_pos"(rx117_pos)
-    $P10 = rx117_cur."metachar"()
-    unless $P10, rx117_fail
-    rx117_cur."!mark_push"(0, -1, 0, $P10)
+    rx126_cur."!cursor_pos"(rx126_pos)
+    $P10 = rx126_cur."metachar"()
+    unless $P10, rx126_fail
+    rx126_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("metachar")
-    rx117_pos = $P10."pos"()
-  alt122_end:
-.annotate 'line', 46
+    rx126_pos = $P10."pos"()
+  alt131_end:
+.annotate 'line', 53
   # rx pass
-    rx117_cur."!cursor_pass"(rx117_pos, "atom")
-    rx117_cur."!cursor_debug"("PASS  ", "atom", " at pos=", rx117_pos)
-    .return (rx117_cur)
-  rx117_restart:
+    rx126_cur."!cursor_pass"(rx126_pos, "atom")
+    if_null rx126_debug, debug_219
+    rx126_cur."!cursor_debug"("PASS", "atom", " at pos=", rx126_pos)
+  debug_219:
+    .return (rx126_cur)
+  rx126_restart:
 .annotate 'line', 3
-    rx117_cur."!cursor_debug"("NEXT ", "atom")
-  rx117_fail:
-    (rx117_rep, rx117_pos, $I10, $P10) = rx117_cur."!mark_fail"(0)
-    lt rx117_pos, -1, rx117_done
-    eq rx117_pos, -1, rx117_fail
+    if_null rx126_debug, debug_220
+    rx126_cur."!cursor_debug"("NEXT", "atom")
+  debug_220:
+  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
     jump $I10
-  rx117_done:
-    rx117_cur."!cursor_fail"()
-    rx117_cur."!cursor_debug"("FAIL  ", "atom")
-    .return (rx117_cur)
+  rx126_done:
+    rx126_cur."!cursor_fail"()
+    if_null rx126_debug, debug_221
+    rx126_cur."!cursor_debug"("FAIL", "atom")
+  debug_221:
+    .return (rx126_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__atom"  :subid("34_1280467470.54449") :method
+.sub "!PREFIX__atom"  :subid("36_1282323996.47527") :method
 .annotate 'line', 3
-    $P119 = self."!PREFIX__!subrule"("metachar", "")
-    new $P120, "ResizablePMCArray"
-    push $P120, $P119
-    push $P120, ""
-    .return ($P120)
+    $P128 = self."!PREFIX__!subrule"("metachar", "")
+    new $P129, "ResizablePMCArray"
+    push $P129, $P128
+    push $P129, ""
+    .return ($P129)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block125"  :anon :subid("35_1280467470.54449") :method :outer("33_1280467470.54449")
-.annotate 'line', 49
-    .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, $I10) = self."!cursor_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:
-    eq $I10, 1, rx127_restart
-    rx127_cur."!cursor_debug"("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:
+.sub "_block134"  :anon :subid("37_1282323996.47527") :method :outer("35_1282323996.47527")
+.annotate 'line', 56
+    .local string rx136_tgt
+    .local int rx136_pos
+    .local int rx136_off
+    .local int rx136_eos
+    .local int rx136_rep
+    .local pmc rx136_cur
+    .local pmc rx136_debug
+    (rx136_cur, rx136_pos, rx136_tgt, $I10) = self."!cursor_start"()
+    getattribute rx136_debug, rx136_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx136_cur
+    .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
+    substr rx136_tgt, rx136_tgt, rx136_off
+  rx136_start:
+    eq $I10, 1, rx136_restart
+    if_null rx136_debug, debug_215
+    rx136_cur."!cursor_debug"("START", "")
+  debug_215:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan137_done
+    goto rxscan137_scan
+  rxscan137_loop:
+    ($P10) = rx136_cur."from"()
+    inc $P10
+    set rx136_pos, $P10
+    ge rx136_pos, rx136_eos, rxscan137_done
+  rxscan137_scan:
+    set_addr $I10, rxscan137_loop
+    rx136_cur."!mark_push"(0, rx136_pos, $I10)
+  rxscan137_done:
   # rx charclass w
-    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
-    rx127_cur."!cursor_pass"(rx127_pos, "")
-    rx127_cur."!cursor_debug"("PASS  ", "", " at pos=", rx127_pos)
-    .return (rx127_cur)
-  rx127_restart:
-    rx127_cur."!cursor_debug"("NEXT ", "")
-  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
-  rx127_done:
-    rx127_cur."!cursor_fail"()
-    rx127_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx127_cur)
+    ge rx136_pos, rx136_eos, rx136_fail
+    sub $I10, rx136_pos, rx136_off
+    is_cclass $I11, 8192, rx136_tgt, $I10
+    unless $I11, rx136_fail
+    inc rx136_pos
+  # rx pass
+    rx136_cur."!cursor_pass"(rx136_pos, "")
+    if_null rx136_debug, debug_216
+    rx136_cur."!cursor_debug"("PASS", "", " at pos=", rx136_pos)
+  debug_216:
+    .return (rx136_cur)
+  rx136_restart:
+    if_null rx136_debug, debug_217
+    rx136_cur."!cursor_debug"("NEXT", "")
+  debug_217:
+  rx136_fail:
+    (rx136_rep, rx136_pos, $I10, $P10) = rx136_cur."!mark_fail"(0)
+    lt rx136_pos, -1, rx136_done
+    eq rx136_pos, -1, rx136_fail
+    jump $I10
+  rx136_done:
+    rx136_cur."!cursor_fail"()
+    if_null rx136_debug, debug_218
+    rx136_cur."!cursor_debug"("FAIL", "")
+  debug_218:
+    .return (rx136_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier"  :subid("36_1280467470.54449") :method
-.annotate 'line', 54
-    $P130 = self."!protoregex"("quantifier")
-    .return ($P130)
+.sub "quantifier"  :subid("38_1282323996.47527") :method
+.annotate 'line', 61
+    $P139 = self."!protoregex"("quantifier")
+    .return ($P139)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier"  :subid("37_1280467470.54449") :method
-.annotate 'line', 54
-    $P132 = self."!PREFIX__!protoregex"("quantifier")
-    .return ($P132)
+.sub "!PREFIX__quantifier"  :subid("39_1282323996.47527") :method
+.annotate 'line', 61
+    $P141 = self."!PREFIX__!protoregex"("quantifier")
+    .return ($P141)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<*>"  :subid("38_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "quantifier:sym<*>"  :subid("40_1282323996.47527") :method :outer("11_1282323996.47527")
 .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx134_cur
-    .local pmc match
-    .lex "$/", match
-    length rx134_eos, rx134_tgt
-    gt rx134_pos, rx134_eos, rx134_done
-    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:
-    eq $I10, 1, rx134_restart
-    rx134_cur."!cursor_debug"("START ", "quantifier:sym<*>")
-    $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:
-.annotate 'line', 55
+    .local string rx143_tgt
+    .local int rx143_pos
+    .local int rx143_off
+    .local int rx143_eos
+    .local int rx143_rep
+    .local pmc rx143_cur
+    .local pmc rx143_debug
+    (rx143_cur, rx143_pos, rx143_tgt, $I10) = self."!cursor_start"()
+    getattribute rx143_debug, rx143_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx143_cur
+    .local pmc match
+    .lex "$/", match
+    length rx143_eos, rx143_tgt
+    gt rx143_pos, rx143_eos, rx143_done
+    set rx143_off, 0
+    lt rx143_pos, 2, rx143_start
+    sub rx143_off, rx143_pos, 1
+    substr rx143_tgt, rx143_tgt, rx143_off
+  rx143_start:
+    eq $I10, 1, rx143_restart
+    if_null rx143_debug, debug_222
+    rx143_cur."!cursor_debug"("START", "quantifier:sym<*>")
+  debug_222:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan147_done
+    goto rxscan147_scan
+  rxscan147_loop:
+    ($P10) = rx143_cur."from"()
+    inc $P10
+    set rx143_pos, $P10
+    ge rx143_pos, rx143_eos, rxscan147_done
+  rxscan147_scan:
+    set_addr $I10, rxscan147_loop
+    rx143_cur."!mark_push"(0, rx143_pos, $I10)
+  rxscan147_done:
+.annotate 'line', 62
   # rx subcapture "sym"
-    set_addr $I10, rxcap_139_fail
-    rx134_cur."!mark_push"(0, rx134_pos, $I10)
+    set_addr $I10, rxcap_148_fail
+    rx143_cur."!mark_push"(0, rx143_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, rx143_pos, 1
+    gt $I11, rx143_eos, rx143_fail
+    sub $I11, rx143_pos, rx143_off
+    ord $I11, rx143_tgt, $I11
+    ne $I11, 42, rx143_fail
+    add rx143_pos, 1
+    set_addr $I10, rxcap_148_fail
+    ($I12, $I11) = rx143_cur."!mark_peek"($I10)
+    rx143_cur."!cursor_pos"($I11)
+    ($P10) = rx143_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx143_pos, "")
+    rx143_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_148_done
+  rxcap_148_fail:
+    goto rx143_fail
+  rxcap_148_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)
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."backmod"()
+    unless $P10, rx143_fail
+    rx143_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx134_pos = $P10."pos"()
+    rx143_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_restart:
-.annotate 'line', 3
-    rx134_cur."!cursor_debug"("NEXT ", "quantifier:sym<*>")
-  rx134_fail:
-    (rx134_rep, rx134_pos, $I10, $P10) = rx134_cur."!mark_fail"(0)
-    lt rx134_pos, -1, rx134_done
-    eq rx134_pos, -1, rx134_fail
-    jump $I10
-  rx134_done:
-    rx134_cur."!cursor_fail"()
-    rx134_cur."!cursor_debug"("FAIL  ", "quantifier:sym<*>")
-    .return (rx134_cur)
+    rx143_cur."!cursor_pass"(rx143_pos, "quantifier:sym<*>")
+    if_null rx143_debug, debug_223
+    rx143_cur."!cursor_debug"("PASS", "quantifier:sym<*>", " at pos=", rx143_pos)
+  debug_223:
+    .return (rx143_cur)
+  rx143_restart:
+.annotate 'line', 3
+    if_null rx143_debug, debug_224
+    rx143_cur."!cursor_debug"("NEXT", "quantifier:sym<*>")
+  debug_224:
+  rx143_fail:
+    (rx143_rep, rx143_pos, $I10, $P10) = rx143_cur."!mark_fail"(0)
+    lt rx143_pos, -1, rx143_done
+    eq rx143_pos, -1, rx143_fail
+    jump $I10
+  rx143_done:
+    rx143_cur."!cursor_fail"()
+    if_null rx143_debug, debug_225
+    rx143_cur."!cursor_debug"("FAIL", "quantifier:sym<*>")
+  debug_225:
+    .return (rx143_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<*>"  :subid("39_1280467470.54449") :method
-.annotate 'line', 3
-    $P136 = self."!PREFIX__!subrule"("backmod", "*")
-    new $P137, "ResizablePMCArray"
-    push $P137, $P136
-    .return ($P137)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<+>"  :subid("40_1280467470.54449") :method :outer("11_1280467470.54449")
-.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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx141_cur
-    .local pmc match
-    .lex "$/", match
-    length rx141_eos, rx141_tgt
-    gt rx141_pos, rx141_eos, rx141_done
-    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:
-    eq $I10, 1, rx141_restart
-    rx141_cur."!cursor_debug"("START ", "quantifier:sym<+>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan145_done
-    goto rxscan145_scan
-  rxscan145_loop:
-    ($P10) = rx141_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:
-.annotate 'line', 56
+.sub "!PREFIX__quantifier:sym<*>"  :subid("41_1282323996.47527") :method
+.annotate 'line', 3
+    $P145 = self."!PREFIX__!subrule"("backmod", "*")
+    new $P146, "ResizablePMCArray"
+    push $P146, $P145
+    .return ($P146)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "quantifier:sym<+>"  :subid("42_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx150_tgt
+    .local int rx150_pos
+    .local int rx150_off
+    .local int rx150_eos
+    .local int rx150_rep
+    .local pmc rx150_cur
+    .local pmc rx150_debug
+    (rx150_cur, rx150_pos, rx150_tgt, $I10) = self."!cursor_start"()
+    getattribute rx150_debug, rx150_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx150_cur
+    .local pmc match
+    .lex "$/", match
+    length rx150_eos, rx150_tgt
+    gt rx150_pos, rx150_eos, rx150_done
+    set rx150_off, 0
+    lt rx150_pos, 2, rx150_start
+    sub rx150_off, rx150_pos, 1
+    substr rx150_tgt, rx150_tgt, rx150_off
+  rx150_start:
+    eq $I10, 1, rx150_restart
+    if_null rx150_debug, debug_226
+    rx150_cur."!cursor_debug"("START", "quantifier:sym<+>")
+  debug_226:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan154_done
+    goto rxscan154_scan
+  rxscan154_loop:
+    ($P10) = rx150_cur."from"()
+    inc $P10
+    set rx150_pos, $P10
+    ge rx150_pos, rx150_eos, rxscan154_done
+  rxscan154_scan:
+    set_addr $I10, rxscan154_loop
+    rx150_cur."!mark_push"(0, rx150_pos, $I10)
+  rxscan154_done:
+.annotate 'line', 63
   # rx subcapture "sym"
-    set_addr $I10, rxcap_146_fail
-    rx141_cur."!mark_push"(0, rx141_pos, $I10)
+    set_addr $I10, rxcap_155_fail
+    rx150_cur."!mark_push"(0, rx150_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, rx150_pos, 1
+    gt $I11, rx150_eos, rx150_fail
+    sub $I11, rx150_pos, rx150_off
+    ord $I11, rx150_tgt, $I11
+    ne $I11, 43, rx150_fail
+    add rx150_pos, 1
+    set_addr $I10, rxcap_155_fail
+    ($I12, $I11) = rx150_cur."!mark_peek"($I10)
+    rx150_cur."!cursor_pos"($I11)
+    ($P10) = rx150_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx150_pos, "")
+    rx150_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_155_done
+  rxcap_155_fail:
+    goto rx150_fail
+  rxcap_155_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)
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."backmod"()
+    unless $P10, rx150_fail
+    rx150_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx141_pos = $P10."pos"()
+    rx150_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_restart:
-.annotate 'line', 3
-    rx141_cur."!cursor_debug"("NEXT ", "quantifier:sym<+>")
-  rx141_fail:
-    (rx141_rep, rx141_pos, $I10, $P10) = rx141_cur."!mark_fail"(0)
-    lt rx141_pos, -1, rx141_done
-    eq rx141_pos, -1, rx141_fail
-    jump $I10
-  rx141_done:
-    rx141_cur."!cursor_fail"()
-    rx141_cur."!cursor_debug"("FAIL  ", "quantifier:sym<+>")
-    .return (rx141_cur)
+    rx150_cur."!cursor_pass"(rx150_pos, "quantifier:sym<+>")
+    if_null rx150_debug, debug_227
+    rx150_cur."!cursor_debug"("PASS", "quantifier:sym<+>", " at pos=", rx150_pos)
+  debug_227:
+    .return (rx150_cur)
+  rx150_restart:
+.annotate 'line', 3
+    if_null rx150_debug, debug_228
+    rx150_cur."!cursor_debug"("NEXT", "quantifier:sym<+>")
+  debug_228:
+  rx150_fail:
+    (rx150_rep, rx150_pos, $I10, $P10) = rx150_cur."!mark_fail"(0)
+    lt rx150_pos, -1, rx150_done
+    eq rx150_pos, -1, rx150_fail
+    jump $I10
+  rx150_done:
+    rx150_cur."!cursor_fail"()
+    if_null rx150_debug, debug_229
+    rx150_cur."!cursor_debug"("FAIL", "quantifier:sym<+>")
+  debug_229:
+    .return (rx150_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<+>"  :subid("41_1280467470.54449") :method
-.annotate 'line', 3
-    $P143 = self."!PREFIX__!subrule"("backmod", "+")
-    new $P144, "ResizablePMCArray"
-    push $P144, $P143
-    .return ($P144)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<?>"  :subid("42_1280467470.54449") :method :outer("11_1280467470.54449")
-.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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx148_cur
-    .local pmc match
-    .lex "$/", match
-    length rx148_eos, rx148_tgt
-    gt rx148_pos, rx148_eos, rx148_done
-    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:
-    eq $I10, 1, rx148_restart
-    rx148_cur."!cursor_debug"("START ", "quantifier:sym<?>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan152_done
-    goto rxscan152_scan
-  rxscan152_loop:
-    ($P10) = rx148_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:
-.annotate 'line', 57
+.sub "!PREFIX__quantifier:sym<+>"  :subid("43_1282323996.47527") :method
+.annotate 'line', 3
+    $P152 = self."!PREFIX__!subrule"("backmod", "+")
+    new $P153, "ResizablePMCArray"
+    push $P153, $P152
+    .return ($P153)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "quantifier:sym<?>"  :subid("44_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx157_tgt
+    .local int rx157_pos
+    .local int rx157_off
+    .local int rx157_eos
+    .local int rx157_rep
+    .local pmc rx157_cur
+    .local pmc rx157_debug
+    (rx157_cur, rx157_pos, rx157_tgt, $I10) = self."!cursor_start"()
+    getattribute rx157_debug, rx157_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx157_cur
+    .local pmc match
+    .lex "$/", match
+    length rx157_eos, rx157_tgt
+    gt rx157_pos, rx157_eos, rx157_done
+    set rx157_off, 0
+    lt rx157_pos, 2, rx157_start
+    sub rx157_off, rx157_pos, 1
+    substr rx157_tgt, rx157_tgt, rx157_off
+  rx157_start:
+    eq $I10, 1, rx157_restart
+    if_null rx157_debug, debug_230
+    rx157_cur."!cursor_debug"("START", "quantifier:sym<?>")
+  debug_230:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan161_done
+    goto rxscan161_scan
+  rxscan161_loop:
+    ($P10) = rx157_cur."from"()
+    inc $P10
+    set rx157_pos, $P10
+    ge rx157_pos, rx157_eos, rxscan161_done
+  rxscan161_scan:
+    set_addr $I10, rxscan161_loop
+    rx157_cur."!mark_push"(0, rx157_pos, $I10)
+  rxscan161_done:
+.annotate 'line', 64
   # rx subcapture "sym"
-    set_addr $I10, rxcap_153_fail
-    rx148_cur."!mark_push"(0, rx148_pos, $I10)
+    set_addr $I10, rxcap_162_fail
+    rx157_cur."!mark_push"(0, rx157_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, rx157_pos, 1
+    gt $I11, rx157_eos, rx157_fail
+    sub $I11, rx157_pos, rx157_off
+    ord $I11, rx157_tgt, $I11
+    ne $I11, 63, rx157_fail
+    add rx157_pos, 1
+    set_addr $I10, rxcap_162_fail
+    ($I12, $I11) = rx157_cur."!mark_peek"($I10)
+    rx157_cur."!cursor_pos"($I11)
+    ($P10) = rx157_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx157_pos, "")
+    rx157_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_162_done
+  rxcap_162_fail:
+    goto rx157_fail
+  rxcap_162_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)
+    rx157_cur."!cursor_pos"(rx157_pos)
+    $P10 = rx157_cur."backmod"()
+    unless $P10, rx157_fail
+    rx157_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx148_pos = $P10."pos"()
+    rx157_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_restart:
+    rx157_cur."!cursor_pass"(rx157_pos, "quantifier:sym<?>")
+    if_null rx157_debug, debug_231
+    rx157_cur."!cursor_debug"("PASS", "quantifier:sym<?>", " at pos=", rx157_pos)
+  debug_231:
+    .return (rx157_cur)
+  rx157_restart:
 .annotate 'line', 3
-    rx148_cur."!cursor_debug"("NEXT ", "quantifier:sym<?>")
-  rx148_fail:
-    (rx148_rep, rx148_pos, $I10, $P10) = rx148_cur."!mark_fail"(0)
-    lt rx148_pos, -1, rx148_done
-    eq rx148_pos, -1, rx148_fail
+    if_null rx157_debug, debug_232
+    rx157_cur."!cursor_debug"("NEXT", "quantifier:sym<?>")
+  debug_232:
+  rx157_fail:
+    (rx157_rep, rx157_pos, $I10, $P10) = rx157_cur."!mark_fail"(0)
+    lt rx157_pos, -1, rx157_done
+    eq rx157_pos, -1, rx157_fail
     jump $I10
-  rx148_done:
-    rx148_cur."!cursor_fail"()
-    rx148_cur."!cursor_debug"("FAIL  ", "quantifier:sym<?>")
-    .return (rx148_cur)
+  rx157_done:
+    rx157_cur."!cursor_fail"()
+    if_null rx157_debug, debug_233
+    rx157_cur."!cursor_debug"("FAIL", "quantifier:sym<?>")
+  debug_233:
+    .return (rx157_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<?>"  :subid("43_1280467470.54449") :method
+.sub "!PREFIX__quantifier:sym<?>"  :subid("45_1282323996.47527") :method
 .annotate 'line', 3
-    $P150 = self."!PREFIX__!subrule"("backmod", "?")
-    new $P151, "ResizablePMCArray"
-    push $P151, $P150
-    .return ($P151)
+    $P159 = self."!PREFIX__!subrule"("backmod", "?")
+    new $P160, "ResizablePMCArray"
+    push $P160, $P159
+    .return ($P160)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<**>"  :subid("44_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "quantifier:sym<**>"  :subid("46_1282323996.47527") :method :outer("11_1282323996.47527")
 .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, $I10) = self."!cursor_start"()
-    rx155_cur."!cursor_caparray"("max", "normspace")
-    .lex unicode:"$\x{a2}", rx155_cur
-    .local pmc match
-    .lex "$/", match
-    length rx155_eos, rx155_tgt
-    gt rx155_pos, rx155_eos, rx155_done
-    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:
-    eq $I10, 1, rx155_restart
-    rx155_cur."!cursor_debug"("START ", "quantifier:sym<**>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan158_done
-    goto rxscan158_scan
-  rxscan158_loop:
-    ($P10) = rx155_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:
-.annotate 'line', 59
+    .local string rx164_tgt
+    .local int rx164_pos
+    .local int rx164_off
+    .local int rx164_eos
+    .local int rx164_rep
+    .local pmc rx164_cur
+    .local pmc rx164_debug
+    (rx164_cur, rx164_pos, rx164_tgt, $I10) = self."!cursor_start"()
+    rx164_cur."!cursor_caparray"("max", "normspace")
+    getattribute rx164_debug, rx164_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx164_cur
+    .local pmc match
+    .lex "$/", match
+    length rx164_eos, rx164_tgt
+    gt rx164_pos, rx164_eos, rx164_done
+    set rx164_off, 0
+    lt rx164_pos, 2, rx164_start
+    sub rx164_off, rx164_pos, 1
+    substr rx164_tgt, rx164_tgt, rx164_off
+  rx164_start:
+    eq $I10, 1, rx164_restart
+    if_null rx164_debug, debug_234
+    rx164_cur."!cursor_debug"("START", "quantifier:sym<**>")
+  debug_234:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan167_done
+    goto rxscan167_scan
+  rxscan167_loop:
+    ($P10) = rx164_cur."from"()
+    inc $P10
+    set rx164_pos, $P10
+    ge rx164_pos, rx164_eos, rxscan167_done
+  rxscan167_scan:
+    set_addr $I10, rxscan167_loop
+    rx164_cur."!mark_push"(0, rx164_pos, $I10)
+  rxscan167_done:
+.annotate 'line', 66
   # rx subcapture "sym"
-    set_addr $I10, rxcap_159_fail
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
+    set_addr $I10, rxcap_168_fail
+    rx164_cur."!mark_push"(0, rx164_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, rx164_pos, 2
+    gt $I11, rx164_eos, rx164_fail
+    sub $I11, rx164_pos, rx164_off
+    substr $S10, rx164_tgt, $I11, 2
+    ne $S10, "**", rx164_fail
+    add rx164_pos, 2
+    set_addr $I10, rxcap_168_fail
+    ($I12, $I11) = rx164_cur."!mark_peek"($I10)
+    rx164_cur."!cursor_pos"($I11)
+    ($P10) = rx164_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx164_pos, "")
+    rx164_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 rxquantr160 ** 0..1
-    set_addr $I10, rxquantr160_done
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-  rxquantr160_loop:
+    goto rxcap_168_done
+  rxcap_168_fail:
+    goto rx164_fail
+  rxcap_168_done:
+  # rx rxquantr169 ** 0..1
+    set_addr $I10, rxquantr169_done
+    rx164_cur."!mark_push"(0, rx164_pos, $I10)
+  rxquantr169_loop:
   # rx subrule "normspace" subtype=capture negate=
-    rx155_cur."!cursor_pos"(rx155_pos)
-    $P10 = rx155_cur."normspace"()
-    unless $P10, rx155_fail
-    goto rxsubrule161_pass
-  rxsubrule161_back:
+    rx164_cur."!cursor_pos"(rx164_pos)
+    $P10 = rx164_cur."normspace"()
+    unless $P10, rx164_fail
+    goto rxsubrule170_pass
+  rxsubrule170_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx155_fail
-  rxsubrule161_pass:
-    set_addr $I10, rxsubrule161_back
-    rx155_cur."!mark_push"(0, rx155_pos, $I10, $P10)
+    unless $P10, rx164_fail
+  rxsubrule170_pass:
+    set_addr $I10, rxsubrule170_back
+    rx164_cur."!mark_push"(0, rx164_pos, $I10, $P10)
     $P10."!cursor_names"("normspace")
-    rx155_pos = $P10."pos"()
-    set_addr $I10, rxquantr160_done
-    (rx155_rep) = rx155_cur."!mark_commit"($I10)
-  rxquantr160_done:
+    rx164_pos = $P10."pos"()
+    set_addr $I10, rxquantr169_done
+    (rx164_rep) = rx164_cur."!mark_commit"($I10)
+  rxquantr169_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)
+    rx164_cur."!cursor_pos"(rx164_pos)
+    $P10 = rx164_cur."backmod"()
+    unless $P10, rx164_fail
+    rx164_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backmod")
-    rx155_pos = $P10."pos"()
-  # rx rxquantr162 ** 0..1
-    set_addr $I10, rxquantr162_done
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-  rxquantr162_loop:
+    rx164_pos = $P10."pos"()
+  # rx rxquantr171 ** 0..1
+    set_addr $I10, rxquantr171_done
+    rx164_cur."!mark_push"(0, rx164_pos, $I10)
+  rxquantr171_loop:
   # rx subrule "normspace" subtype=capture negate=
-    rx155_cur."!cursor_pos"(rx155_pos)
-    $P10 = rx155_cur."normspace"()
-    unless $P10, rx155_fail
-    goto rxsubrule163_pass
-  rxsubrule163_back:
+    rx164_cur."!cursor_pos"(rx164_pos)
+    $P10 = rx164_cur."normspace"()
+    unless $P10, rx164_fail
+    goto rxsubrule172_pass
+  rxsubrule172_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx155_fail
-  rxsubrule163_pass:
-    set_addr $I10, rxsubrule163_back
-    rx155_cur."!mark_push"(0, rx155_pos, $I10, $P10)
+    unless $P10, rx164_fail
+  rxsubrule172_pass:
+    set_addr $I10, rxsubrule172_back
+    rx164_cur."!mark_push"(0, rx164_pos, $I10, $P10)
     $P10."!cursor_names"("normspace")
-    rx155_pos = $P10."pos"()
-    set_addr $I10, rxquantr162_done
-    (rx155_rep) = rx155_cur."!mark_commit"($I10)
-  rxquantr162_done:
-  alt164_0:
-.annotate 'line', 60
-    set_addr $I10, alt164_1
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-.annotate 'line', 61
+    rx164_pos = $P10."pos"()
+    set_addr $I10, rxquantr171_done
+    (rx164_rep) = rx164_cur."!mark_commit"($I10)
+  rxquantr171_done:
+  alt173_0:
+.annotate 'line', 67
+    set_addr $I10, alt173_1
+    rx164_cur."!mark_push"(0, rx164_pos, $I10)
+.annotate 'line', 68
   # rx subcapture "min"
-    set_addr $I10, rxcap_165_fail
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
+    set_addr $I10, rxcap_174_fail
+    rx164_cur."!mark_push"(0, rx164_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, rx164_pos, rx164_off
+    find_not_cclass $I11, 8, rx164_tgt, $I10, rx164_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx155_fail
-    add rx155_pos, rx155_off, $I11
-    set_addr $I10, rxcap_165_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, rx164_fail
+    add rx164_pos, rx164_off, $I11
+    set_addr $I10, rxcap_174_fail
+    ($I12, $I11) = rx164_cur."!mark_peek"($I10)
+    rx164_cur."!cursor_pos"($I11)
+    ($P10) = rx164_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx164_pos, "")
+    rx164_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("min")
-    goto rxcap_165_done
-  rxcap_165_fail:
-    goto rx155_fail
-  rxcap_165_done:
-.annotate 'line', 68
-  # rx rxquantr166 ** 0..1
-    set_addr $I10, rxquantr166_done
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-  rxquantr166_loop:
-.annotate 'line', 62
+    goto rxcap_174_done
+  rxcap_174_fail:
+    goto rx164_fail
+  rxcap_174_done:
+.annotate 'line', 75
+  # rx rxquantr175 ** 0..1
+    set_addr $I10, rxquantr175_done
+    rx164_cur."!mark_push"(0, rx164_pos, $I10)
+  rxquantr175_loop:
+.annotate 'line', 69
   # 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
-.annotate 'line', 63
+    add $I11, rx164_pos, 2
+    gt $I11, rx164_eos, rx164_fail
+    sub $I11, rx164_pos, rx164_off
+    substr $S10, rx164_tgt, $I11, 2
+    ne $S10, "..", rx164_fail
+    add rx164_pos, 2
+.annotate 'line', 70
   # rx subcapture "max"
-    set_addr $I10, rxcap_168_fail
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-  alt167_0:
-    set_addr $I10, alt167_1
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-.annotate 'line', 64
+    set_addr $I10, rxcap_177_fail
+    rx164_cur."!mark_push"(0, rx164_pos, $I10)
+  alt176_0:
+    set_addr $I10, alt176_1
+    rx164_cur."!mark_push"(0, rx164_pos, $I10)
+.annotate 'line', 71
   # 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, rx164_pos, rx164_off
+    find_not_cclass $I11, 8, rx164_tgt, $I10, rx164_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx155_fail
-    add rx155_pos, rx155_off, $I11
-    goto alt167_end
-  alt167_1:
-    set_addr $I10, alt167_2
-    rx155_cur."!mark_push"(0, rx155_pos, $I10)
-.annotate 'line', 65
+    lt $I11, $I12, rx164_fail
+    add rx164_pos, rx164_off, $I11
+    goto alt176_end
+  alt176_1:
+    set_addr $I10, alt176_2
+    rx164_cur."!mark_push"(0, rx164_pos, $I10)
+.annotate 'line', 72
   # 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 alt167_end
-  alt167_2:
-.annotate 'line', 66
+    add $I11, rx164_pos, 1
+    gt $I11, rx164_eos, rx164_fail
+    sub $I11, rx164_pos, rx164_off
+    ord $I11, rx164_tgt, $I11
+    ne $I11, 42, rx164_fail
+    add rx164_pos, 1
+    goto alt176_end
+  alt176_2:
+.annotate 'line', 73
   # 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"()
-  alt167_end:
-.annotate 'line', 63
-    set_addr $I10, rxcap_168_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)
+    rx164_cur."!cursor_pos"(rx164_pos)
+    $P10 = rx164_cur."panic"("Only integers or '*' allowed as range quantifier endpoint")
+    unless $P10, rx164_fail
+    rx164_pos = $P10."pos"()
+  alt176_end:
+.annotate 'line', 70
+    set_addr $I10, rxcap_177_fail
+    ($I12, $I11) = rx164_cur."!mark_peek"($I10)
+    rx164_cur."!cursor_pos"($I11)
+    ($P10) = rx164_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx164_pos, "")
+    rx164_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("max")
-    goto rxcap_168_done
-  rxcap_168_fail:
-    goto rx155_fail
-  rxcap_168_done:
+    goto rxcap_177_done
+  rxcap_177_fail:
+    goto rx164_fail
+  rxcap_177_done:
+.annotate 'line', 75
+    set_addr $I10, rxquantr175_done
+    (rx164_rep) = rx164_cur."!mark_commit"($I10)
+  rxquantr175_done:
 .annotate 'line', 68
-    set_addr $I10, rxquantr166_done
-    (rx155_rep) = rx155_cur."!mark_commit"($I10)
-  rxquantr166_done:
-.annotate 'line', 61
-    goto alt164_end
-  alt164_1:
-.annotate 'line', 69
+    goto alt173_end
+  alt173_1:
+.annotate 'line', 76
   # 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)
+    rx164_cur."!cursor_pos"(rx164_pos)
+    $P10 = rx164_cur."quantified_atom"()
+    unless $P10, rx164_fail
+    rx164_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quantified_atom")
-    rx155_pos = $P10."pos"()
-  alt164_end:
-.annotate 'line', 58
+    rx164_pos = $P10."pos"()
+  alt173_end:
+.annotate 'line', 65
   # 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_restart:
-.annotate 'line', 3
-    rx155_cur."!cursor_debug"("NEXT ", "quantifier:sym<**>")
-  rx155_fail:
-    (rx155_rep, rx155_pos, $I10, $P10) = rx155_cur."!mark_fail"(0)
-    lt rx155_pos, -1, rx155_done
-    eq rx155_pos, -1, rx155_fail
-    jump $I10
-  rx155_done:
-    rx155_cur."!cursor_fail"()
-    rx155_cur."!cursor_debug"("FAIL  ", "quantifier:sym<**>")
-    .return (rx155_cur)
+    rx164_cur."!cursor_pass"(rx164_pos, "quantifier:sym<**>")
+    if_null rx164_debug, debug_235
+    rx164_cur."!cursor_debug"("PASS", "quantifier:sym<**>", " at pos=", rx164_pos)
+  debug_235:
+    .return (rx164_cur)
+  rx164_restart:
+.annotate 'line', 3
+    if_null rx164_debug, debug_236
+    rx164_cur."!cursor_debug"("NEXT", "quantifier:sym<**>")
+  debug_236:
+  rx164_fail:
+    (rx164_rep, rx164_pos, $I10, $P10) = rx164_cur."!mark_fail"(0)
+    lt rx164_pos, -1, rx164_done
+    eq rx164_pos, -1, rx164_fail
+    jump $I10
+  rx164_done:
+    rx164_cur."!cursor_fail"()
+    if_null rx164_debug, debug_237
+    rx164_cur."!cursor_debug"("FAIL", "quantifier:sym<**>")
+  debug_237:
+    .return (rx164_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<**>"  :subid("45_1280467470.54449") :method
-.annotate 'line', 3
-    new $P157, "ResizablePMCArray"
-    push $P157, "**"
-    .return ($P157)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backmod"  :subid("46_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .const 'Sub' $P177 = "48_1280467470.54449" 
-    capture_lex $P177
-    .local string rx170_tgt
-    .local int rx170_pos
-    .local int rx170_off
-    .local int rx170_eos
-    .local int rx170_rep
-    .local pmc rx170_cur
-    (rx170_cur, rx170_pos, rx170_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx170_cur
-    .local pmc match
-    .lex "$/", match
-    length rx170_eos, rx170_tgt
-    gt rx170_pos, rx170_eos, rx170_done
-    set rx170_off, 0
-    lt rx170_pos, 2, rx170_start
-    sub rx170_off, rx170_pos, 1
-    substr rx170_tgt, rx170_tgt, rx170_off
-  rx170_start:
-    eq $I10, 1, rx170_restart
-    rx170_cur."!cursor_debug"("START ", "backmod")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan173_done
-    goto rxscan173_scan
-  rxscan173_loop:
-    ($P10) = rx170_cur."from"()
-    inc $P10
-    set rx170_pos, $P10
-    ge rx170_pos, rx170_eos, rxscan173_done
-  rxscan173_scan:
-    set_addr $I10, rxscan173_loop
-    rx170_cur."!mark_push"(0, rx170_pos, $I10)
-  rxscan173_done:
-.annotate 'line', 73
-  # rx rxquantr174 ** 0..1
-    set_addr $I10, rxquantr174_done
-    rx170_cur."!mark_push"(0, rx170_pos, $I10)
-  rxquantr174_loop:
+.sub "!PREFIX__quantifier:sym<**>"  :subid("47_1282323996.47527") :method
+.annotate 'line', 3
+    new $P166, "ResizablePMCArray"
+    push $P166, "**"
+    .return ($P166)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backmod"  :subid("48_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .const 'Sub' $P186 = "50_1282323996.47527" 
+    capture_lex $P186
+    .local string rx179_tgt
+    .local int rx179_pos
+    .local int rx179_off
+    .local int rx179_eos
+    .local int rx179_rep
+    .local pmc rx179_cur
+    .local pmc rx179_debug
+    (rx179_cur, rx179_pos, rx179_tgt, $I10) = self."!cursor_start"()
+    getattribute rx179_debug, rx179_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx179_cur
+    .local pmc match
+    .lex "$/", match
+    length rx179_eos, rx179_tgt
+    gt rx179_pos, rx179_eos, rx179_done
+    set rx179_off, 0
+    lt rx179_pos, 2, rx179_start
+    sub rx179_off, rx179_pos, 1
+    substr rx179_tgt, rx179_tgt, rx179_off
+  rx179_start:
+    eq $I10, 1, rx179_restart
+    if_null rx179_debug, debug_238
+    rx179_cur."!cursor_debug"("START", "backmod")
+  debug_238:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan182_done
+    goto rxscan182_scan
+  rxscan182_loop:
+    ($P10) = rx179_cur."from"()
+    inc $P10
+    set rx179_pos, $P10
+    ge rx179_pos, rx179_eos, rxscan182_done
+  rxscan182_scan:
+    set_addr $I10, rxscan182_loop
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+  rxscan182_done:
+.annotate 'line', 80
+  # rx rxquantr183 ** 0..1
+    set_addr $I10, rxquantr183_done
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+  rxquantr183_loop:
   # rx literal  ":"
-    add $I11, rx170_pos, 1
-    gt $I11, rx170_eos, rx170_fail
-    sub $I11, rx170_pos, rx170_off
-    substr $S10, rx170_tgt, $I11, 1
-    ne $S10, ":", rx170_fail
-    add rx170_pos, 1
-    set_addr $I10, rxquantr174_done
-    (rx170_rep) = rx170_cur."!mark_commit"($I10)
-  rxquantr174_done:
-  alt175_0:
-    set_addr $I10, alt175_1
-    rx170_cur."!mark_push"(0, rx170_pos, $I10)
+    add $I11, rx179_pos, 1
+    gt $I11, rx179_eos, rx179_fail
+    sub $I11, rx179_pos, rx179_off
+    ord $I11, rx179_tgt, $I11
+    ne $I11, 58, rx179_fail
+    add rx179_pos, 1
+    set_addr $I10, rxquantr183_done
+    (rx179_rep) = rx179_cur."!mark_commit"($I10)
+  rxquantr183_done:
+  alt184_0:
+    set_addr $I10, alt184_1
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
   # rx literal  "?"
-    add $I11, rx170_pos, 1
-    gt $I11, rx170_eos, rx170_fail
-    sub $I11, rx170_pos, rx170_off
-    substr $S10, rx170_tgt, $I11, 1
-    ne $S10, "?", rx170_fail
-    add rx170_pos, 1
-    goto alt175_end
-  alt175_1:
-    set_addr $I10, alt175_2
-    rx170_cur."!mark_push"(0, rx170_pos, $I10)
+    add $I11, rx179_pos, 1
+    gt $I11, rx179_eos, rx179_fail
+    sub $I11, rx179_pos, rx179_off
+    ord $I11, rx179_tgt, $I11
+    ne $I11, 63, rx179_fail
+    add rx179_pos, 1
+    goto alt184_end
+  alt184_1:
+    set_addr $I10, alt184_2
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
   # rx literal  "!"
-    add $I11, rx170_pos, 1
-    gt $I11, rx170_eos, rx170_fail
-    sub $I11, rx170_pos, rx170_off
-    substr $S10, rx170_tgt, $I11, 1
-    ne $S10, "!", rx170_fail
-    add rx170_pos, 1
-    goto alt175_end
-  alt175_2:
+    add $I11, rx179_pos, 1
+    gt $I11, rx179_eos, rx179_fail
+    sub $I11, rx179_pos, rx179_off
+    ord $I11, rx179_tgt, $I11
+    ne $I11, 33, rx179_fail
+    add rx179_pos, 1
+    goto alt184_end
+  alt184_2:
   # rx subrule "before" subtype=zerowidth negate=1
-    rx170_cur."!cursor_pos"(rx170_pos)
-    .const 'Sub' $P177 = "48_1280467470.54449" 
-    capture_lex $P177
-    $P10 = rx170_cur."before"($P177)
-    if $P10, rx170_fail
-  alt175_end:
-  # rx pass
-    rx170_cur."!cursor_pass"(rx170_pos, "backmod")
-    rx170_cur."!cursor_debug"("PASS  ", "backmod", " at pos=", rx170_pos)
-    .return (rx170_cur)
-  rx170_restart:
-.annotate 'line', 3
-    rx170_cur."!cursor_debug"("NEXT ", "backmod")
-  rx170_fail:
-    (rx170_rep, rx170_pos, $I10, $P10) = rx170_cur."!mark_fail"(0)
-    lt rx170_pos, -1, rx170_done
-    eq rx170_pos, -1, rx170_fail
-    jump $I10
-  rx170_done:
-    rx170_cur."!cursor_fail"()
-    rx170_cur."!cursor_debug"("FAIL  ", "backmod")
-    .return (rx170_cur)
+    rx179_cur."!cursor_pos"(rx179_pos)
+    .const 'Sub' $P186 = "50_1282323996.47527" 
+    capture_lex $P186
+    $P10 = rx179_cur."before"($P186)
+    if $P10, rx179_fail
+  alt184_end:
+  # rx pass
+    rx179_cur."!cursor_pass"(rx179_pos, "backmod")
+    if_null rx179_debug, debug_243
+    rx179_cur."!cursor_debug"("PASS", "backmod", " at pos=", rx179_pos)
+  debug_243:
+    .return (rx179_cur)
+  rx179_restart:
+.annotate 'line', 3
+    if_null rx179_debug, debug_244
+    rx179_cur."!cursor_debug"("NEXT", "backmod")
+  debug_244:
+  rx179_fail:
+    (rx179_rep, rx179_pos, $I10, $P10) = rx179_cur."!mark_fail"(0)
+    lt rx179_pos, -1, rx179_done
+    eq rx179_pos, -1, rx179_fail
+    jump $I10
+  rx179_done:
+    rx179_cur."!cursor_fail"()
+    if_null rx179_debug, debug_245
+    rx179_cur."!cursor_debug"("FAIL", "backmod")
+  debug_245:
+    .return (rx179_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backmod"  :subid("47_1280467470.54449") :method
+.sub "!PREFIX__backmod"  :subid("49_1282323996.47527") :method
 .annotate 'line', 3
-    new $P172, "ResizablePMCArray"
-    push $P172, ""
-    .return ($P172)
+    new $P181, "ResizablePMCArray"
+    push $P181, ""
+    .return ($P181)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block176"  :anon :subid("48_1280467470.54449") :method :outer("46_1280467470.54449")
-.annotate 'line', 73
-    .local string rx178_tgt
-    .local int rx178_pos
-    .local int rx178_off
-    .local int rx178_eos
-    .local int rx178_rep
-    .local pmc rx178_cur
-    (rx178_cur, rx178_pos, rx178_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx178_cur
-    .local pmc match
-    .lex "$/", match
-    length rx178_eos, rx178_tgt
-    gt rx178_pos, rx178_eos, rx178_done
-    set rx178_off, 0
-    lt rx178_pos, 2, rx178_start
-    sub rx178_off, rx178_pos, 1
-    substr rx178_tgt, rx178_tgt, rx178_off
-  rx178_start:
-    eq $I10, 1, rx178_restart
-    rx178_cur."!cursor_debug"("START ", "")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan179_done
-    goto rxscan179_scan
-  rxscan179_loop:
-    ($P10) = rx178_cur."from"()
-    inc $P10
-    set rx178_pos, $P10
-    ge rx178_pos, rx178_eos, rxscan179_done
-  rxscan179_scan:
-    set_addr $I10, rxscan179_loop
-    rx178_cur."!mark_push"(0, rx178_pos, $I10)
-  rxscan179_done:
+.sub "_block185"  :anon :subid("50_1282323996.47527") :method :outer("48_1282323996.47527")
+.annotate 'line', 80
+    .local string rx187_tgt
+    .local int rx187_pos
+    .local int rx187_off
+    .local int rx187_eos
+    .local int rx187_rep
+    .local pmc rx187_cur
+    .local pmc rx187_debug
+    (rx187_cur, rx187_pos, rx187_tgt, $I10) = self."!cursor_start"()
+    getattribute rx187_debug, rx187_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx187_cur
+    .local pmc match
+    .lex "$/", match
+    length rx187_eos, rx187_tgt
+    gt rx187_pos, rx187_eos, rx187_done
+    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:
+    eq $I10, 1, rx187_restart
+    if_null rx187_debug, debug_239
+    rx187_cur."!cursor_debug"("START", "")
+  debug_239:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan188_done
+    goto rxscan188_scan
+  rxscan188_loop:
+    ($P10) = rx187_cur."from"()
+    inc $P10
+    set rx187_pos, $P10
+    ge rx187_pos, rx187_eos, rxscan188_done
+  rxscan188_scan:
+    set_addr $I10, rxscan188_loop
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+  rxscan188_done:
   # rx literal  ":"
-    add $I11, rx178_pos, 1
-    gt $I11, rx178_eos, rx178_fail
-    sub $I11, rx178_pos, rx178_off
-    substr $S10, rx178_tgt, $I11, 1
-    ne $S10, ":", rx178_fail
-    add rx178_pos, 1
-  # rx pass
-    rx178_cur."!cursor_pass"(rx178_pos, "")
-    rx178_cur."!cursor_debug"("PASS  ", "", " at pos=", rx178_pos)
-    .return (rx178_cur)
-  rx178_restart:
-    rx178_cur."!cursor_debug"("NEXT ", "")
-  rx178_fail:
-    (rx178_rep, rx178_pos, $I10, $P10) = rx178_cur."!mark_fail"(0)
-    lt rx178_pos, -1, rx178_done
-    eq rx178_pos, -1, rx178_fail
-    jump $I10
-  rx178_done:
-    rx178_cur."!cursor_fail"()
-    rx178_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx178_cur)
+    add $I11, rx187_pos, 1
+    gt $I11, rx187_eos, rx187_fail
+    sub $I11, rx187_pos, rx187_off
+    ord $I11, rx187_tgt, $I11
+    ne $I11, 58, rx187_fail
+    add rx187_pos, 1
+  # rx pass
+    rx187_cur."!cursor_pass"(rx187_pos, "")
+    if_null rx187_debug, debug_240
+    rx187_cur."!cursor_debug"("PASS", "", " at pos=", rx187_pos)
+  debug_240:
+    .return (rx187_cur)
+  rx187_restart:
+    if_null rx187_debug, debug_241
+    rx187_cur."!cursor_debug"("NEXT", "")
+  debug_241:
+  rx187_fail:
+    (rx187_rep, rx187_pos, $I10, $P10) = rx187_cur."!mark_fail"(0)
+    lt rx187_pos, -1, rx187_done
+    eq rx187_pos, -1, rx187_fail
+    jump $I10
+  rx187_done:
+    rx187_cur."!cursor_fail"()
+    if_null rx187_debug, debug_242
+    rx187_cur."!cursor_debug"("FAIL", "")
+  debug_242:
+    .return (rx187_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar"  :subid("49_1280467470.54449") :method
-.annotate 'line', 75
-    $P181 = self."!protoregex"("metachar")
-    .return ($P181)
+.sub "metachar"  :subid("51_1282323996.47527") :method
+.annotate 'line', 82
+    $P190 = self."!protoregex"("metachar")
+    .return ($P190)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar"  :subid("50_1280467470.54449") :method
-.annotate 'line', 75
-    $P183 = self."!PREFIX__!protoregex"("metachar")
-    .return ($P183)
+.sub "!PREFIX__metachar"  :subid("52_1282323996.47527") :method
+.annotate 'line', 82
+    $P192 = self."!PREFIX__!protoregex"("metachar")
+    .return ($P192)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<ws>"  :subid("51_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "metachar:sym<ws>"  :subid("53_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .local string rx185_tgt
-    .local int rx185_pos
-    .local int rx185_off
-    .local int rx185_eos
-    .local int rx185_rep
-    .local pmc rx185_cur
-    (rx185_cur, rx185_pos, rx185_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx185_cur
-    .local pmc match
-    .lex "$/", match
-    length rx185_eos, rx185_tgt
-    gt rx185_pos, rx185_eos, rx185_done
-    set rx185_off, 0
-    lt rx185_pos, 2, rx185_start
-    sub rx185_off, rx185_pos, 1
-    substr rx185_tgt, rx185_tgt, rx185_off
-  rx185_start:
-    eq $I10, 1, rx185_restart
-    rx185_cur."!cursor_debug"("START ", "metachar:sym<ws>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan189_done
-    goto rxscan189_scan
-  rxscan189_loop:
-    ($P10) = rx185_cur."from"()
-    inc $P10
-    set rx185_pos, $P10
-    ge rx185_pos, rx185_eos, rxscan189_done
-  rxscan189_scan:
-    set_addr $I10, rxscan189_loop
-    rx185_cur."!mark_push"(0, rx185_pos, $I10)
-  rxscan189_done:
-.annotate 'line', 76
+    .local string rx194_tgt
+    .local int rx194_pos
+    .local int rx194_off
+    .local int rx194_eos
+    .local int rx194_rep
+    .local pmc rx194_cur
+    .local pmc rx194_debug
+    (rx194_cur, rx194_pos, rx194_tgt, $I10) = self."!cursor_start"()
+    getattribute rx194_debug, rx194_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx194_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx194_restart
+    if_null rx194_debug, debug_246
+    rx194_cur."!cursor_debug"("START", "metachar:sym<ws>")
+  debug_246:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan198_done
+    goto rxscan198_scan
+  rxscan198_loop:
+    ($P10) = rx194_cur."from"()
+    inc $P10
+    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', 83
   # rx subrule "normspace" subtype=method negate=
-    rx185_cur."!cursor_pos"(rx185_pos)
-    $P10 = rx185_cur."normspace"()
-    unless $P10, rx185_fail
-    rx185_pos = $P10."pos"()
-  # rx pass
-    rx185_cur."!cursor_pass"(rx185_pos, "metachar:sym<ws>")
-    rx185_cur."!cursor_debug"("PASS  ", "metachar:sym<ws>", " at pos=", rx185_pos)
-    .return (rx185_cur)
-  rx185_restart:
-.annotate 'line', 3
-    rx185_cur."!cursor_debug"("NEXT ", "metachar:sym<ws>")
-  rx185_fail:
-    (rx185_rep, rx185_pos, $I10, $P10) = rx185_cur."!mark_fail"(0)
-    lt rx185_pos, -1, rx185_done
-    eq rx185_pos, -1, rx185_fail
-    jump $I10
-  rx185_done:
-    rx185_cur."!cursor_fail"()
-    rx185_cur."!cursor_debug"("FAIL  ", "metachar:sym<ws>")
-    .return (rx185_cur)
+    rx194_cur."!cursor_pos"(rx194_pos)
+    $P10 = rx194_cur."normspace"()
+    unless $P10, rx194_fail
+    rx194_pos = $P10."pos"()
+  # rx pass
+    rx194_cur."!cursor_pass"(rx194_pos, "metachar:sym<ws>")
+    if_null rx194_debug, debug_247
+    rx194_cur."!cursor_debug"("PASS", "metachar:sym<ws>", " at pos=", rx194_pos)
+  debug_247:
+    .return (rx194_cur)
+  rx194_restart:
+.annotate 'line', 3
+    if_null rx194_debug, debug_248
+    rx194_cur."!cursor_debug"("NEXT", "metachar:sym<ws>")
+  debug_248:
+  rx194_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
+  rx194_done:
+    rx194_cur."!cursor_fail"()
+    if_null rx194_debug, debug_249
+    rx194_cur."!cursor_debug"("FAIL", "metachar:sym<ws>")
+  debug_249:
+    .return (rx194_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<ws>"  :subid("52_1280467470.54449") :method
-.annotate 'line', 3
-    $P187 = self."!PREFIX__!subrule"("normspace", "")
-    new $P188, "ResizablePMCArray"
-    push $P188, $P187
-    .return ($P188)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<[ ]>"  :subid("53_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .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:
-    eq $I10, 1, rx191_restart
-    rx191_cur."!cursor_debug"("START ", "metachar:sym<[ ]>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan195_done
-    goto rxscan195_scan
-  rxscan195_loop:
-    ($P10) = rx191_cur."from"()
-    inc $P10
-    set rx191_pos, $P10
-    ge rx191_pos, rx191_eos, rxscan195_done
-  rxscan195_scan:
-    set_addr $I10, rxscan195_loop
-    rx191_cur."!mark_push"(0, rx191_pos, $I10)
-  rxscan195_done:
-.annotate 'line', 77
+.sub "!PREFIX__metachar:sym<ws>"  :subid("54_1282323996.47527") :method
+.annotate 'line', 3
+    $P196 = self."!PREFIX__!subrule"("normspace", "")
+    new $P197, "ResizablePMCArray"
+    push $P197, $P196
+    .return ($P197)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<[ ]>"  :subid("55_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx200_tgt
+    .local int rx200_pos
+    .local int rx200_off
+    .local int rx200_eos
+    .local int rx200_rep
+    .local pmc rx200_cur
+    .local pmc rx200_debug
+    (rx200_cur, rx200_pos, rx200_tgt, $I10) = self."!cursor_start"()
+    getattribute rx200_debug, rx200_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx200_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx200_restart
+    if_null rx200_debug, debug_250
+    rx200_cur."!cursor_debug"("START", "metachar:sym<[ ]>")
+  debug_250:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan204_done
+    goto rxscan204_scan
+  rxscan204_loop:
+    ($P10) = rx200_cur."from"()
+    inc $P10
+    set rx200_pos, $P10
+    ge rx200_pos, rx200_eos, rxscan204_done
+  rxscan204_scan:
+    set_addr $I10, rxscan204_loop
+    rx200_cur."!mark_push"(0, rx200_pos, $I10)
+  rxscan204_done:
+.annotate 'line', 84
   # 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
+    add $I11, rx200_pos, 1
+    gt $I11, rx200_eos, rx200_fail
+    sub $I11, rx200_pos, rx200_off
+    ord $I11, rx200_tgt, $I11
+    ne $I11, 91, rx200_fail
+    add rx200_pos, 1
   # rx subrule "nibbler" subtype=capture negate=
-    rx191_cur."!cursor_pos"(rx191_pos)
-    $P10 = rx191_cur."nibbler"()
-    unless $P10, rx191_fail
-    rx191_cur."!mark_push"(0, -1, 0, $P10)
+    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")
-    rx191_pos = $P10."pos"()
+    rx200_pos = $P10."pos"()
   # 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
-  # rx pass
-    rx191_cur."!cursor_pass"(rx191_pos, "metachar:sym<[ ]>")
-    rx191_cur."!cursor_debug"("PASS  ", "metachar:sym<[ ]>", " at pos=", rx191_pos)
-    .return (rx191_cur)
-  rx191_restart:
-.annotate 'line', 3
-    rx191_cur."!cursor_debug"("NEXT ", "metachar:sym<[ ]>")
-  rx191_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
-  rx191_done:
-    rx191_cur."!cursor_fail"()
-    rx191_cur."!cursor_debug"("FAIL  ", "metachar:sym<[ ]>")
-    .return (rx191_cur)
+    add $I11, rx200_pos, 1
+    gt $I11, rx200_eos, rx200_fail
+    sub $I11, rx200_pos, rx200_off
+    ord $I11, rx200_tgt, $I11
+    ne $I11, 93, rx200_fail
+    add rx200_pos, 1
+  # rx pass
+    rx200_cur."!cursor_pass"(rx200_pos, "metachar:sym<[ ]>")
+    if_null rx200_debug, debug_251
+    rx200_cur."!cursor_debug"("PASS", "metachar:sym<[ ]>", " at pos=", rx200_pos)
+  debug_251:
+    .return (rx200_cur)
+  rx200_restart:
+.annotate 'line', 3
+    if_null rx200_debug, debug_252
+    rx200_cur."!cursor_debug"("NEXT", "metachar:sym<[ ]>")
+  debug_252:
+  rx200_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
+  rx200_done:
+    rx200_cur."!cursor_fail"()
+    if_null rx200_debug, debug_253
+    rx200_cur."!cursor_debug"("FAIL", "metachar:sym<[ ]>")
+  debug_253:
+    .return (rx200_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<[ ]>"  :subid("54_1280467470.54449") :method
-.annotate 'line', 3
-    $P193 = self."!PREFIX__!subrule"("nibbler", "[")
-    new $P194, "ResizablePMCArray"
-    push $P194, $P193
-    .return ($P194)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<( )>"  :subid("55_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx197_cur
-    .local pmc match
-    .lex "$/", match
-    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:
-    eq $I10, 1, rx197_restart
-    rx197_cur."!cursor_debug"("START ", "metachar:sym<( )>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan201_done
-    goto rxscan201_scan
-  rxscan201_loop:
-    ($P10) = rx197_cur."from"()
-    inc $P10
-    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', 78
+.sub "!PREFIX__metachar:sym<[ ]>"  :subid("56_1282323996.47527") :method
+.annotate 'line', 3
+    $P202 = self."!PREFIX__!subrule"("nibbler", "[")
+    new $P203, "ResizablePMCArray"
+    push $P203, $P202
+    .return ($P203)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<( )>"  :subid("57_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx206_tgt
+    .local int rx206_pos
+    .local int rx206_off
+    .local int rx206_eos
+    .local int rx206_rep
+    .local pmc rx206_cur
+    .local pmc rx206_debug
+    (rx206_cur, rx206_pos, rx206_tgt, $I10) = self."!cursor_start"()
+    getattribute rx206_debug, rx206_cur, "$!debug"
+    .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
+    substr rx206_tgt, rx206_tgt, rx206_off
+  rx206_start:
+    eq $I10, 1, rx206_restart
+    if_null rx206_debug, debug_254
+    rx206_cur."!cursor_debug"("START", "metachar:sym<( )>")
+  debug_254:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan210_done
+    goto rxscan210_scan
+  rxscan210_loop:
+    ($P10) = rx206_cur."from"()
+    inc $P10
+    set rx206_pos, $P10
+    ge rx206_pos, rx206_eos, rxscan210_done
+  rxscan210_scan:
+    set_addr $I10, rxscan210_loop
+    rx206_cur."!mark_push"(0, rx206_pos, $I10)
+  rxscan210_done:
+.annotate 'line', 85
   # rx literal  "("
-    add $I11, rx197_pos, 1
-    gt $I11, rx197_eos, rx197_fail
-    sub $I11, rx197_pos, rx197_off
-    substr $S10, rx197_tgt, $I11, 1
-    ne $S10, "(", rx197_fail
-    add rx197_pos, 1
+    add $I11, rx206_pos, 1
+    gt $I11, rx206_eos, rx206_fail
+    sub $I11, rx206_pos, rx206_off
+    ord $I11, rx206_tgt, $I11
+    ne $I11, 40, rx206_fail
+    add rx206_pos, 1
   # rx subrule "nibbler" subtype=capture negate=
-    rx197_cur."!cursor_pos"(rx197_pos)
-    $P10 = rx197_cur."nibbler"()
-    unless $P10, rx197_fail
-    rx197_cur."!mark_push"(0, -1, 0, $P10)
+    rx206_cur."!cursor_pos"(rx206_pos)
+    $P10 = rx206_cur."nibbler"()
+    unless $P10, rx206_fail
+    rx206_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("nibbler")
-    rx197_pos = $P10."pos"()
+    rx206_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx197_pos, 1
-    gt $I11, rx197_eos, rx197_fail
-    sub $I11, rx197_pos, rx197_off
-    substr $S10, rx197_tgt, $I11, 1
-    ne $S10, ")", rx197_fail
-    add rx197_pos, 1
-  # rx pass
-    rx197_cur."!cursor_pass"(rx197_pos, "metachar:sym<( )>")
-    rx197_cur."!cursor_debug"("PASS  ", "metachar:sym<( )>", " at pos=", rx197_pos)
-    .return (rx197_cur)
-  rx197_restart:
-.annotate 'line', 3
-    rx197_cur."!cursor_debug"("NEXT ", "metachar:sym<( )>")
-  rx197_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
-  rx197_done:
-    rx197_cur."!cursor_fail"()
-    rx197_cur."!cursor_debug"("FAIL  ", "metachar:sym<( )>")
-    .return (rx197_cur)
+    add $I11, rx206_pos, 1
+    gt $I11, rx206_eos, rx206_fail
+    sub $I11, rx206_pos, rx206_off
+    ord $I11, rx206_tgt, $I11
+    ne $I11, 41, rx206_fail
+    add rx206_pos, 1
+  # rx pass
+    rx206_cur."!cursor_pass"(rx206_pos, "metachar:sym<( )>")
+    if_null rx206_debug, debug_255
+    rx206_cur."!cursor_debug"("PASS", "metachar:sym<( )>", " at pos=", rx206_pos)
+  debug_255:
+    .return (rx206_cur)
+  rx206_restart:
+.annotate 'line', 3
+    if_null rx206_debug, debug_256
+    rx206_cur."!cursor_debug"("NEXT", "metachar:sym<( )>")
+  debug_256:
+  rx206_fail:
+    (rx206_rep, rx206_pos, $I10, $P10) = rx206_cur."!mark_fail"(0)
+    lt rx206_pos, -1, rx206_done
+    eq rx206_pos, -1, rx206_fail
+    jump $I10
+  rx206_done:
+    rx206_cur."!cursor_fail"()
+    if_null rx206_debug, debug_257
+    rx206_cur."!cursor_debug"("FAIL", "metachar:sym<( )>")
+  debug_257:
+    .return (rx206_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<( )>"  :subid("56_1280467470.54449") :method
-.annotate 'line', 3
-    $P199 = self."!PREFIX__!subrule"("nibbler", "(")
-    new $P200, "ResizablePMCArray"
-    push $P200, $P199
-    .return ($P200)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<'>"  :subid("57_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx203_cur
-    .local pmc match
-    .lex "$/", match
-    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:
-    eq $I10, 1, rx203_restart
-    rx203_cur."!cursor_debug"("START ", "metachar:sym<'>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan206_done
-    goto rxscan206_scan
-  rxscan206_loop:
-    ($P10) = rx203_cur."from"()
-    inc $P10
-    set rx203_pos, $P10
-    ge rx203_pos, rx203_eos, rxscan206_done
-  rxscan206_scan:
-    set_addr $I10, rxscan206_loop
-    rx203_cur."!mark_push"(0, rx203_pos, $I10)
-  rxscan206_done:
-.annotate 'line', 79
+.sub "!PREFIX__metachar:sym<( )>"  :subid("58_1282323996.47527") :method
+.annotate 'line', 3
+    $P208 = self."!PREFIX__!subrule"("nibbler", "(")
+    new $P209, "ResizablePMCArray"
+    push $P209, $P208
+    .return ($P209)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<'>"  :subid("59_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx212_tgt
+    .local int rx212_pos
+    .local int rx212_off
+    .local int rx212_eos
+    .local int rx212_rep
+    .local pmc rx212_cur
+    .local pmc rx212_debug
+    (rx212_cur, rx212_pos, rx212_tgt, $I10) = self."!cursor_start"()
+    getattribute rx212_debug, rx212_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx212_cur
+    .local pmc match
+    .lex "$/", match
+    length rx212_eos, rx212_tgt
+    gt rx212_pos, rx212_eos, rx212_done
+    set rx212_off, 0
+    lt rx212_pos, 2, rx212_start
+    sub rx212_off, rx212_pos, 1
+    substr rx212_tgt, rx212_tgt, rx212_off
+  rx212_start:
+    eq $I10, 1, rx212_restart
+    if_null rx212_debug, debug_258
+    rx212_cur."!cursor_debug"("START", "metachar:sym<'>")
+  debug_258:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan215_done
+    goto rxscan215_scan
+  rxscan215_loop:
+    ($P10) = rx212_cur."from"()
+    inc $P10
+    set rx212_pos, $P10
+    ge rx212_pos, rx212_eos, rxscan215_done
+  rxscan215_scan:
+    set_addr $I10, rxscan215_loop
+    rx212_cur."!mark_push"(0, rx212_pos, $I10)
+  rxscan215_done:
+.annotate 'line', 86
   # rx enumcharlist negate=0 zerowidth
-    ge rx203_pos, rx203_eos, rx203_fail
-    sub $I10, rx203_pos, rx203_off
-    substr $S10, rx203_tgt, $I10, 1
+    ge rx212_pos, rx212_eos, rx212_fail
+    sub $I10, rx212_pos, rx212_off
+    substr $S10, rx212_tgt, $I10, 1
     index $I11, "'", $S10
-    lt $I11, 0, rx203_fail
+    lt $I11, 0, rx212_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx203_cur."!cursor_pos"(rx203_pos)
-    $P10 = rx203_cur."quote_EXPR"(":q")
-    unless $P10, rx203_fail
-    rx203_cur."!mark_push"(0, -1, 0, $P10)
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."quote_EXPR"(":q")
+    unless $P10, rx212_fail
+    rx212_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx203_pos = $P10."pos"()
+    rx212_pos = $P10."pos"()
   # rx pass
-    rx203_cur."!cursor_pass"(rx203_pos, "metachar:sym<'>")
-    rx203_cur."!cursor_debug"("PASS  ", "metachar:sym<'>", " at pos=", rx203_pos)
-    .return (rx203_cur)
-  rx203_restart:
-.annotate 'line', 3
-    rx203_cur."!cursor_debug"("NEXT ", "metachar:sym<'>")
-  rx203_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
-  rx203_done:
-    rx203_cur."!cursor_fail"()
-    rx203_cur."!cursor_debug"("FAIL  ", "metachar:sym<'>")
-    .return (rx203_cur)
+    rx212_cur."!cursor_pass"(rx212_pos, "metachar:sym<'>")
+    if_null rx212_debug, debug_259
+    rx212_cur."!cursor_debug"("PASS", "metachar:sym<'>", " at pos=", rx212_pos)
+  debug_259:
+    .return (rx212_cur)
+  rx212_restart:
+.annotate 'line', 3
+    if_null rx212_debug, debug_260
+    rx212_cur."!cursor_debug"("NEXT", "metachar:sym<'>")
+  debug_260:
+  rx212_fail:
+    (rx212_rep, rx212_pos, $I10, $P10) = rx212_cur."!mark_fail"(0)
+    lt rx212_pos, -1, rx212_done
+    eq rx212_pos, -1, rx212_fail
+    jump $I10
+  rx212_done:
+    rx212_cur."!cursor_fail"()
+    if_null rx212_debug, debug_261
+    rx212_cur."!cursor_debug"("FAIL", "metachar:sym<'>")
+  debug_261:
+    .return (rx212_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<'>"  :subid("58_1280467470.54449") :method
-.annotate 'line', 3
-    new $P205, "ResizablePMCArray"
-    push $P205, "'"
-    .return ($P205)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<\">"  :subid("59_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx208_tgt
-    .local int rx208_pos
-    .local int rx208_off
-    .local int rx208_eos
-    .local int rx208_rep
-    .local pmc rx208_cur
-    (rx208_cur, rx208_pos, rx208_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx208_cur
-    .local pmc match
-    .lex "$/", match
-    length rx208_eos, rx208_tgt
-    gt rx208_pos, rx208_eos, rx208_done
-    set rx208_off, 0
-    lt rx208_pos, 2, rx208_start
-    sub rx208_off, rx208_pos, 1
-    substr rx208_tgt, rx208_tgt, rx208_off
-  rx208_start:
-    eq $I10, 1, rx208_restart
-    rx208_cur."!cursor_debug"("START ", "metachar:sym<\">")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan211_done
-    goto rxscan211_scan
-  rxscan211_loop:
-    ($P10) = rx208_cur."from"()
-    inc $P10
-    set rx208_pos, $P10
-    ge rx208_pos, rx208_eos, rxscan211_done
-  rxscan211_scan:
-    set_addr $I10, rxscan211_loop
-    rx208_cur."!mark_push"(0, rx208_pos, $I10)
-  rxscan211_done:
-.annotate 'line', 80
+.sub "!PREFIX__metachar:sym<'>"  :subid("60_1282323996.47527") :method
+.annotate 'line', 3
+    new $P214, "ResizablePMCArray"
+    push $P214, "'"
+    .return ($P214)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<\">"  :subid("61_1282323996.47527") :method :outer("11_1282323996.47527")
+.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
+    .local pmc rx217_debug
+    (rx217_cur, rx217_pos, rx217_tgt, $I10) = self."!cursor_start"()
+    getattribute rx217_debug, rx217_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx217_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx217_restart
+    if_null rx217_debug, debug_262
+    rx217_cur."!cursor_debug"("START", "metachar:sym<\">")
+  debug_262:
+    $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:
+.annotate 'line', 87
   # rx enumcharlist negate=0 zerowidth
-    ge rx208_pos, rx208_eos, rx208_fail
-    sub $I10, rx208_pos, rx208_off
-    substr $S10, rx208_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, rx208_fail
+    lt $I11, 0, rx217_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx208_cur."!cursor_pos"(rx208_pos)
-    $P10 = rx208_cur."quote_EXPR"(":qq")
-    unless $P10, rx208_fail
-    rx208_cur."!mark_push"(0, -1, 0, $P10)
+    rx217_cur."!cursor_pos"(rx217_pos)
+    $P10 = rx217_cur."quote_EXPR"(":qq")
+    unless $P10, rx217_fail
+    rx217_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx208_pos = $P10."pos"()
+    rx217_pos = $P10."pos"()
   # rx pass
-    rx208_cur."!cursor_pass"(rx208_pos, "metachar:sym<\">")
-    rx208_cur."!cursor_debug"("PASS  ", "metachar:sym<\">", " at pos=", rx208_pos)
-    .return (rx208_cur)
-  rx208_restart:
-.annotate 'line', 3
-    rx208_cur."!cursor_debug"("NEXT ", "metachar:sym<\">")
-  rx208_fail:
-    (rx208_rep, rx208_pos, $I10, $P10) = rx208_cur."!mark_fail"(0)
-    lt rx208_pos, -1, rx208_done
-    eq rx208_pos, -1, rx208_fail
-    jump $I10
-  rx208_done:
-    rx208_cur."!cursor_fail"()
-    rx208_cur."!cursor_debug"("FAIL  ", "metachar:sym<\">")
-    .return (rx208_cur)
+    rx217_cur."!cursor_pass"(rx217_pos, "metachar:sym<\">")
+    if_null rx217_debug, debug_263
+    rx217_cur."!cursor_debug"("PASS", "metachar:sym<\">", " at pos=", rx217_pos)
+  debug_263:
+    .return (rx217_cur)
+  rx217_restart:
+.annotate 'line', 3
+    if_null rx217_debug, debug_264
+    rx217_cur."!cursor_debug"("NEXT", "metachar:sym<\">")
+  debug_264:
+  rx217_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
+  rx217_done:
+    rx217_cur."!cursor_fail"()
+    if_null rx217_debug, debug_265
+    rx217_cur."!cursor_debug"("FAIL", "metachar:sym<\">")
+  debug_265:
+    .return (rx217_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<\">"  :subid("60_1280467470.54449") :method
-.annotate 'line', 3
-    new $P210, "ResizablePMCArray"
-    push $P210, "\""
-    .return ($P210)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<.>"  :subid("61_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx213_cur
-    .local pmc match
-    .lex "$/", match
-    length rx213_eos, rx213_tgt
-    gt rx213_pos, rx213_eos, rx213_done
-    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:
-    eq $I10, 1, rx213_restart
-    rx213_cur."!cursor_debug"("START ", "metachar:sym<.>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan216_done
-    goto rxscan216_scan
-  rxscan216_loop:
-    ($P10) = rx213_cur."from"()
-    inc $P10
-    set rx213_pos, $P10
-    ge rx213_pos, rx213_eos, rxscan216_done
-  rxscan216_scan:
-    set_addr $I10, rxscan216_loop
-    rx213_cur."!mark_push"(0, rx213_pos, $I10)
-  rxscan216_done:
-.annotate 'line', 81
+.sub "!PREFIX__metachar:sym<\">"  :subid("62_1282323996.47527") :method
+.annotate 'line', 3
+    new $P219, "ResizablePMCArray"
+    push $P219, "\""
+    .return ($P219)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<.>"  :subid("63_1282323996.47527") :method :outer("11_1282323996.47527")
+.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
+    .local pmc rx222_debug
+    (rx222_cur, rx222_pos, rx222_tgt, $I10) = self."!cursor_start"()
+    getattribute rx222_debug, rx222_cur, "$!debug"
+    .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:
+    eq $I10, 1, rx222_restart
+    if_null rx222_debug, debug_266
+    rx222_cur."!cursor_debug"("START", "metachar:sym<.>")
+  debug_266:
+    $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', 88
   # rx subcapture "sym"
-    set_addr $I10, rxcap_217_fail
-    rx213_cur."!mark_push"(0, rx213_pos, $I10)
+    set_addr $I10, rxcap_226_fail
+    rx222_cur."!mark_push"(0, rx222_pos, $I10)
   # rx literal  "."
-    add $I11, rx213_pos, 1
-    gt $I11, rx213_eos, rx213_fail
-    sub $I11, rx213_pos, rx213_off
-    substr $S10, rx213_tgt, $I11, 1
-    ne $S10, ".", rx213_fail
-    add rx213_pos, 1
-    set_addr $I10, rxcap_217_fail
-    ($I12, $I11) = rx213_cur."!mark_peek"($I10)
-    rx213_cur."!cursor_pos"($I11)
-    ($P10) = rx213_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx213_pos, "")
-    rx213_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx222_pos, 1
+    gt $I11, rx222_eos, rx222_fail
+    sub $I11, rx222_pos, rx222_off
+    ord $I11, rx222_tgt, $I11
+    ne $I11, 46, 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_217_done
-  rxcap_217_fail:
-    goto rx213_fail
-  rxcap_217_done:
-  # rx pass
-    rx213_cur."!cursor_pass"(rx213_pos, "metachar:sym<.>")
-    rx213_cur."!cursor_debug"("PASS  ", "metachar:sym<.>", " at pos=", rx213_pos)
-    .return (rx213_cur)
-  rx213_restart:
-.annotate 'line', 3
-    rx213_cur."!cursor_debug"("NEXT ", "metachar:sym<.>")
-  rx213_fail:
-    (rx213_rep, rx213_pos, $I10, $P10) = rx213_cur."!mark_fail"(0)
-    lt rx213_pos, -1, rx213_done
-    eq rx213_pos, -1, rx213_fail
-    jump $I10
-  rx213_done:
-    rx213_cur."!cursor_fail"()
-    rx213_cur."!cursor_debug"("FAIL  ", "metachar:sym<.>")
-    .return (rx213_cur)
+    goto rxcap_226_done
+  rxcap_226_fail:
+    goto rx222_fail
+  rxcap_226_done:
+  # rx pass
+    rx222_cur."!cursor_pass"(rx222_pos, "metachar:sym<.>")
+    if_null rx222_debug, debug_267
+    rx222_cur."!cursor_debug"("PASS", "metachar:sym<.>", " at pos=", rx222_pos)
+  debug_267:
+    .return (rx222_cur)
+  rx222_restart:
+.annotate 'line', 3
+    if_null rx222_debug, debug_268
+    rx222_cur."!cursor_debug"("NEXT", "metachar:sym<.>")
+  debug_268:
+  rx222_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
+  rx222_done:
+    rx222_cur."!cursor_fail"()
+    if_null rx222_debug, debug_269
+    rx222_cur."!cursor_debug"("FAIL", "metachar:sym<.>")
+  debug_269:
+    .return (rx222_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<.>"  :subid("62_1280467470.54449") :method
-.annotate 'line', 3
-    new $P215, "ResizablePMCArray"
-    push $P215, "."
-    .return ($P215)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<^>"  :subid("63_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx219_tgt
-    .local int rx219_pos
-    .local int rx219_off
-    .local int rx219_eos
-    .local int rx219_rep
-    .local pmc rx219_cur
-    (rx219_cur, rx219_pos, rx219_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx219_cur
-    .local pmc match
-    .lex "$/", match
-    length rx219_eos, rx219_tgt
-    gt rx219_pos, rx219_eos, rx219_done
-    set rx219_off, 0
-    lt rx219_pos, 2, rx219_start
-    sub rx219_off, rx219_pos, 1
-    substr rx219_tgt, rx219_tgt, rx219_off
-  rx219_start:
-    eq $I10, 1, rx219_restart
-    rx219_cur."!cursor_debug"("START ", "metachar:sym<^>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan222_done
-    goto rxscan222_scan
-  rxscan222_loop:
-    ($P10) = rx219_cur."from"()
-    inc $P10
-    set rx219_pos, $P10
-    ge rx219_pos, rx219_eos, rxscan222_done
-  rxscan222_scan:
-    set_addr $I10, rxscan222_loop
-    rx219_cur."!mark_push"(0, rx219_pos, $I10)
-  rxscan222_done:
-.annotate 'line', 82
+.sub "!PREFIX__metachar:sym<.>"  :subid("64_1282323996.47527") :method
+.annotate 'line', 3
+    new $P224, "ResizablePMCArray"
+    push $P224, "."
+    .return ($P224)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<^>"  :subid("65_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx228_tgt
+    .local int rx228_pos
+    .local int rx228_off
+    .local int rx228_eos
+    .local int rx228_rep
+    .local pmc rx228_cur
+    .local pmc rx228_debug
+    (rx228_cur, rx228_pos, rx228_tgt, $I10) = self."!cursor_start"()
+    getattribute rx228_debug, rx228_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx228_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx228_restart
+    if_null rx228_debug, debug_270
+    rx228_cur."!cursor_debug"("START", "metachar:sym<^>")
+  debug_270:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan231_done
+    goto rxscan231_scan
+  rxscan231_loop:
+    ($P10) = rx228_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', 89
   # rx subcapture "sym"
-    set_addr $I10, rxcap_223_fail
-    rx219_cur."!mark_push"(0, rx219_pos, $I10)
+    set_addr $I10, rxcap_232_fail
+    rx228_cur."!mark_push"(0, rx228_pos, $I10)
   # rx literal  "^"
-    add $I11, rx219_pos, 1
-    gt $I11, rx219_eos, rx219_fail
-    sub $I11, rx219_pos, rx219_off
-    substr $S10, rx219_tgt, $I11, 1
-    ne $S10, "^", rx219_fail
-    add rx219_pos, 1
-    set_addr $I10, rxcap_223_fail
-    ($I12, $I11) = rx219_cur."!mark_peek"($I10)
-    rx219_cur."!cursor_pos"($I11)
-    ($P10) = rx219_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx219_pos, "")
-    rx219_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx228_pos, 1
+    gt $I11, rx228_eos, rx228_fail
+    sub $I11, rx228_pos, rx228_off
+    ord $I11, rx228_tgt, $I11
+    ne $I11, 94, rx228_fail
+    add rx228_pos, 1
+    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_223_done
-  rxcap_223_fail:
-    goto rx219_fail
-  rxcap_223_done:
-  # rx pass
-    rx219_cur."!cursor_pass"(rx219_pos, "metachar:sym<^>")
-    rx219_cur."!cursor_debug"("PASS  ", "metachar:sym<^>", " at pos=", rx219_pos)
-    .return (rx219_cur)
-  rx219_restart:
-.annotate 'line', 3
-    rx219_cur."!cursor_debug"("NEXT ", "metachar:sym<^>")
-  rx219_fail:
-    (rx219_rep, rx219_pos, $I10, $P10) = rx219_cur."!mark_fail"(0)
-    lt rx219_pos, -1, rx219_done
-    eq rx219_pos, -1, rx219_fail
-    jump $I10
-  rx219_done:
-    rx219_cur."!cursor_fail"()
-    rx219_cur."!cursor_debug"("FAIL  ", "metachar:sym<^>")
-    .return (rx219_cur)
+    goto rxcap_232_done
+  rxcap_232_fail:
+    goto rx228_fail
+  rxcap_232_done:
+  # rx pass
+    rx228_cur."!cursor_pass"(rx228_pos, "metachar:sym<^>")
+    if_null rx228_debug, debug_271
+    rx228_cur."!cursor_debug"("PASS", "metachar:sym<^>", " at pos=", rx228_pos)
+  debug_271:
+    .return (rx228_cur)
+  rx228_restart:
+.annotate 'line', 3
+    if_null rx228_debug, debug_272
+    rx228_cur."!cursor_debug"("NEXT", "metachar:sym<^>")
+  debug_272:
+  rx228_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
+  rx228_done:
+    rx228_cur."!cursor_fail"()
+    if_null rx228_debug, debug_273
+    rx228_cur."!cursor_debug"("FAIL", "metachar:sym<^>")
+  debug_273:
+    .return (rx228_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<^>"  :subid("64_1280467470.54449") :method
-.annotate 'line', 3
-    new $P221, "ResizablePMCArray"
-    push $P221, "^"
-    .return ($P221)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<^^>"  :subid("65_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx225_tgt
-    .local int rx225_pos
-    .local int rx225_off
-    .local int rx225_eos
-    .local int rx225_rep
-    .local pmc rx225_cur
-    (rx225_cur, rx225_pos, rx225_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx225_cur
-    .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
-    substr rx225_tgt, rx225_tgt, rx225_off
-  rx225_start:
-    eq $I10, 1, rx225_restart
-    rx225_cur."!cursor_debug"("START ", "metachar:sym<^^>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan228_done
-    goto rxscan228_scan
-  rxscan228_loop:
-    ($P10) = rx225_cur."from"()
-    inc $P10
-    set rx225_pos, $P10
-    ge rx225_pos, rx225_eos, rxscan228_done
-  rxscan228_scan:
-    set_addr $I10, rxscan228_loop
-    rx225_cur."!mark_push"(0, rx225_pos, $I10)
-  rxscan228_done:
-.annotate 'line', 83
+.sub "!PREFIX__metachar:sym<^>"  :subid("66_1282323996.47527") :method
+.annotate 'line', 3
+    new $P230, "ResizablePMCArray"
+    push $P230, "^"
+    .return ($P230)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<^^>"  :subid("67_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx234_tgt
+    .local int rx234_pos
+    .local int rx234_off
+    .local int rx234_eos
+    .local int rx234_rep
+    .local pmc rx234_cur
+    .local pmc rx234_debug
+    (rx234_cur, rx234_pos, rx234_tgt, $I10) = self."!cursor_start"()
+    getattribute rx234_debug, rx234_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx234_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx234_restart
+    if_null rx234_debug, debug_274
+    rx234_cur."!cursor_debug"("START", "metachar:sym<^^>")
+  debug_274:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan237_done
+    goto rxscan237_scan
+  rxscan237_loop:
+    ($P10) = rx234_cur."from"()
+    inc $P10
+    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', 90
   # rx subcapture "sym"
-    set_addr $I10, rxcap_229_fail
-    rx225_cur."!mark_push"(0, rx225_pos, $I10)
+    set_addr $I10, rxcap_238_fail
+    rx234_cur."!mark_push"(0, rx234_pos, $I10)
   # rx literal  "^^"
-    add $I11, rx225_pos, 2
-    gt $I11, rx225_eos, rx225_fail
-    sub $I11, rx225_pos, rx225_off
-    substr $S10, rx225_tgt, $I11, 2
-    ne $S10, "^^", rx225_fail
-    add rx225_pos, 2
-    set_addr $I10, rxcap_229_fail
-    ($I12, $I11) = rx225_cur."!mark_peek"($I10)
-    rx225_cur."!cursor_pos"($I11)
-    ($P10) = rx225_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx225_pos, "")
-    rx225_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx234_pos, 2
+    gt $I11, rx234_eos, rx234_fail
+    sub $I11, rx234_pos, rx234_off
+    substr $S10, rx234_tgt, $I11, 2
+    ne $S10, "^^", rx234_fail
+    add rx234_pos, 2
+    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_229_done
-  rxcap_229_fail:
-    goto rx225_fail
-  rxcap_229_done:
-  # rx pass
-    rx225_cur."!cursor_pass"(rx225_pos, "metachar:sym<^^>")
-    rx225_cur."!cursor_debug"("PASS  ", "metachar:sym<^^>", " at pos=", rx225_pos)
-    .return (rx225_cur)
-  rx225_restart:
-.annotate 'line', 3
-    rx225_cur."!cursor_debug"("NEXT ", "metachar:sym<^^>")
-  rx225_fail:
-    (rx225_rep, rx225_pos, $I10, $P10) = rx225_cur."!mark_fail"(0)
-    lt rx225_pos, -1, rx225_done
-    eq rx225_pos, -1, rx225_fail
-    jump $I10
-  rx225_done:
-    rx225_cur."!cursor_fail"()
-    rx225_cur."!cursor_debug"("FAIL  ", "metachar:sym<^^>")
-    .return (rx225_cur)
+    goto rxcap_238_done
+  rxcap_238_fail:
+    goto rx234_fail
+  rxcap_238_done:
+  # rx pass
+    rx234_cur."!cursor_pass"(rx234_pos, "metachar:sym<^^>")
+    if_null rx234_debug, debug_275
+    rx234_cur."!cursor_debug"("PASS", "metachar:sym<^^>", " at pos=", rx234_pos)
+  debug_275:
+    .return (rx234_cur)
+  rx234_restart:
+.annotate 'line', 3
+    if_null rx234_debug, debug_276
+    rx234_cur."!cursor_debug"("NEXT", "metachar:sym<^^>")
+  debug_276:
+  rx234_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
+  rx234_done:
+    rx234_cur."!cursor_fail"()
+    if_null rx234_debug, debug_277
+    rx234_cur."!cursor_debug"("FAIL", "metachar:sym<^^>")
+  debug_277:
+    .return (rx234_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<^^>"  :subid("66_1280467470.54449") :method
-.annotate 'line', 3
-    new $P227, "ResizablePMCArray"
-    push $P227, "^^"
-    .return ($P227)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<$>"  :subid("67_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx231_tgt
-    .local int rx231_pos
-    .local int rx231_off
-    .local int rx231_eos
-    .local int rx231_rep
-    .local pmc rx231_cur
-    (rx231_cur, rx231_pos, rx231_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx231_cur
-    .local pmc match
-    .lex "$/", match
-    length rx231_eos, rx231_tgt
-    gt rx231_pos, rx231_eos, rx231_done
-    set rx231_off, 0
-    lt rx231_pos, 2, rx231_start
-    sub rx231_off, rx231_pos, 1
-    substr rx231_tgt, rx231_tgt, rx231_off
-  rx231_start:
-    eq $I10, 1, rx231_restart
-    rx231_cur."!cursor_debug"("START ", "metachar:sym<$>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan234_done
-    goto rxscan234_scan
-  rxscan234_loop:
-    ($P10) = rx231_cur."from"()
-    inc $P10
-    set rx231_pos, $P10
-    ge rx231_pos, rx231_eos, rxscan234_done
-  rxscan234_scan:
-    set_addr $I10, rxscan234_loop
-    rx231_cur."!mark_push"(0, rx231_pos, $I10)
-  rxscan234_done:
-.annotate 'line', 84
+.sub "!PREFIX__metachar:sym<^^>"  :subid("68_1282323996.47527") :method
+.annotate 'line', 3
+    new $P236, "ResizablePMCArray"
+    push $P236, "^^"
+    .return ($P236)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<$>"  :subid("69_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx240_tgt
+    .local int rx240_pos
+    .local int rx240_off
+    .local int rx240_eos
+    .local int rx240_rep
+    .local pmc rx240_cur
+    .local pmc rx240_debug
+    (rx240_cur, rx240_pos, rx240_tgt, $I10) = self."!cursor_start"()
+    getattribute rx240_debug, rx240_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx240_cur
+    .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
+    substr rx240_tgt, rx240_tgt, rx240_off
+  rx240_start:
+    eq $I10, 1, rx240_restart
+    if_null rx240_debug, debug_278
+    rx240_cur."!cursor_debug"("START", "metachar:sym<$>")
+  debug_278:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan243_done
+    goto rxscan243_scan
+  rxscan243_loop:
+    ($P10) = rx240_cur."from"()
+    inc $P10
+    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', 91
   # rx subcapture "sym"
-    set_addr $I10, rxcap_235_fail
-    rx231_cur."!mark_push"(0, rx231_pos, $I10)
+    set_addr $I10, rxcap_244_fail
+    rx240_cur."!mark_push"(0, rx240_pos, $I10)
   # rx literal  "$"
-    add $I11, rx231_pos, 1
-    gt $I11, rx231_eos, rx231_fail
-    sub $I11, rx231_pos, rx231_off
-    substr $S10, rx231_tgt, $I11, 1
-    ne $S10, "$", rx231_fail
-    add rx231_pos, 1
-    set_addr $I10, rxcap_235_fail
-    ($I12, $I11) = rx231_cur."!mark_peek"($I10)
-    rx231_cur."!cursor_pos"($I11)
-    ($P10) = rx231_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx231_pos, "")
-    rx231_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx240_pos, 1
+    gt $I11, rx240_eos, rx240_fail
+    sub $I11, rx240_pos, rx240_off
+    ord $I11, rx240_tgt, $I11
+    ne $I11, 36, rx240_fail
+    add rx240_pos, 1
+    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_235_done
-  rxcap_235_fail:
-    goto rx231_fail
-  rxcap_235_done:
-  # rx pass
-    rx231_cur."!cursor_pass"(rx231_pos, "metachar:sym<$>")
-    rx231_cur."!cursor_debug"("PASS  ", "metachar:sym<$>", " at pos=", rx231_pos)
-    .return (rx231_cur)
-  rx231_restart:
-.annotate 'line', 3
-    rx231_cur."!cursor_debug"("NEXT ", "metachar:sym<$>")
-  rx231_fail:
-    (rx231_rep, rx231_pos, $I10, $P10) = rx231_cur."!mark_fail"(0)
-    lt rx231_pos, -1, rx231_done
-    eq rx231_pos, -1, rx231_fail
-    jump $I10
-  rx231_done:
-    rx231_cur."!cursor_fail"()
-    rx231_cur."!cursor_debug"("FAIL  ", "metachar:sym<$>")
-    .return (rx231_cur)
+    goto rxcap_244_done
+  rxcap_244_fail:
+    goto rx240_fail
+  rxcap_244_done:
+  # rx pass
+    rx240_cur."!cursor_pass"(rx240_pos, "metachar:sym<$>")
+    if_null rx240_debug, debug_279
+    rx240_cur."!cursor_debug"("PASS", "metachar:sym<$>", " at pos=", rx240_pos)
+  debug_279:
+    .return (rx240_cur)
+  rx240_restart:
+.annotate 'line', 3
+    if_null rx240_debug, debug_280
+    rx240_cur."!cursor_debug"("NEXT", "metachar:sym<$>")
+  debug_280:
+  rx240_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
+  rx240_done:
+    rx240_cur."!cursor_fail"()
+    if_null rx240_debug, debug_281
+    rx240_cur."!cursor_debug"("FAIL", "metachar:sym<$>")
+  debug_281:
+    .return (rx240_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<$>"  :subid("68_1280467470.54449") :method
-.annotate 'line', 3
-    new $P233, "ResizablePMCArray"
-    push $P233, "$"
-    .return ($P233)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<$$>"  :subid("69_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx237_cur
-    .local pmc match
-    .lex "$/", match
-    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:
-    eq $I10, 1, rx237_restart
-    rx237_cur."!cursor_debug"("START ", "metachar:sym<$$>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan240_done
-    goto rxscan240_scan
-  rxscan240_loop:
-    ($P10) = rx237_cur."from"()
-    inc $P10
-    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', 85
+.sub "!PREFIX__metachar:sym<$>"  :subid("70_1282323996.47527") :method
+.annotate 'line', 3
+    new $P242, "ResizablePMCArray"
+    push $P242, "$"
+    .return ($P242)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<$$>"  :subid("71_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx246_tgt
+    .local int rx246_pos
+    .local int rx246_off
+    .local int rx246_eos
+    .local int rx246_rep
+    .local pmc rx246_cur
+    .local pmc rx246_debug
+    (rx246_cur, rx246_pos, rx246_tgt, $I10) = self."!cursor_start"()
+    getattribute rx246_debug, rx246_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx246_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx246_restart
+    if_null rx246_debug, debug_282
+    rx246_cur."!cursor_debug"("START", "metachar:sym<$$>")
+  debug_282:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan249_done
+    goto rxscan249_scan
+  rxscan249_loop:
+    ($P10) = rx246_cur."from"()
+    inc $P10
+    set rx246_pos, $P10
+    ge rx246_pos, rx246_eos, rxscan249_done
+  rxscan249_scan:
+    set_addr $I10, rxscan249_loop
+    rx246_cur."!mark_push"(0, rx246_pos, $I10)
+  rxscan249_done:
+.annotate 'line', 92
   # rx subcapture "sym"
-    set_addr $I10, rxcap_241_fail
-    rx237_cur."!mark_push"(0, rx237_pos, $I10)
+    set_addr $I10, rxcap_250_fail
+    rx246_cur."!mark_push"(0, rx246_pos, $I10)
   # rx literal  "$$"
-    add $I11, rx237_pos, 2
-    gt $I11, rx237_eos, rx237_fail
-    sub $I11, rx237_pos, rx237_off
-    substr $S10, rx237_tgt, $I11, 2
-    ne $S10, "$$", rx237_fail
-    add rx237_pos, 2
-    set_addr $I10, rxcap_241_fail
-    ($I12, $I11) = rx237_cur."!mark_peek"($I10)
-    rx237_cur."!cursor_pos"($I11)
-    ($P10) = rx237_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx237_pos, "")
-    rx237_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx246_pos, 2
+    gt $I11, rx246_eos, rx246_fail
+    sub $I11, rx246_pos, rx246_off
+    substr $S10, rx246_tgt, $I11, 2
+    ne $S10, "$$", rx246_fail
+    add rx246_pos, 2
+    set_addr $I10, rxcap_250_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_241_done
-  rxcap_241_fail:
-    goto rx237_fail
-  rxcap_241_done:
+    goto rxcap_250_done
+  rxcap_250_fail:
+    goto rx246_fail
+  rxcap_250_done:
   # rx pass
-    rx237_cur."!cursor_pass"(rx237_pos, "metachar:sym<$$>")
-    rx237_cur."!cursor_debug"("PASS  ", "metachar:sym<$$>", " at pos=", rx237_pos)
-    .return (rx237_cur)
-  rx237_restart:
+    rx246_cur."!cursor_pass"(rx246_pos, "metachar:sym<$$>")
+    if_null rx246_debug, debug_283
+    rx246_cur."!cursor_debug"("PASS", "metachar:sym<$$>", " at pos=", rx246_pos)
+  debug_283:
+    .return (rx246_cur)
+  rx246_restart:
 .annotate 'line', 3
-    rx237_cur."!cursor_debug"("NEXT ", "metachar:sym<$$>")
-  rx237_fail:
-    (rx237_rep, rx237_pos, $I10, $P10) = rx237_cur."!mark_fail"(0)
-    lt rx237_pos, -1, rx237_done
-    eq rx237_pos, -1, rx237_fail
+    if_null rx246_debug, debug_284
+    rx246_cur."!cursor_debug"("NEXT", "metachar:sym<$$>")
+  debug_284:
+  rx246_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
-  rx237_done:
-    rx237_cur."!cursor_fail"()
-    rx237_cur."!cursor_debug"("FAIL  ", "metachar:sym<$$>")
-    .return (rx237_cur)
+  rx246_done:
+    rx246_cur."!cursor_fail"()
+    if_null rx246_debug, debug_285
+    rx246_cur."!cursor_debug"("FAIL", "metachar:sym<$$>")
+  debug_285:
+    .return (rx246_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<$$>"  :subid("70_1280467470.54449") :method
+.sub "!PREFIX__metachar:sym<$$>"  :subid("72_1282323996.47527") :method
 .annotate 'line', 3
-    new $P239, "ResizablePMCArray"
-    push $P239, "$$"
-    .return ($P239)
+    new $P248, "ResizablePMCArray"
+    push $P248, "$$"
+    .return ($P248)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<:::>"  :subid("71_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "metachar:sym<:::>"  :subid("73_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .local string rx243_tgt
-    .local int rx243_pos
-    .local int rx243_off
-    .local int rx243_eos
-    .local int rx243_rep
-    .local pmc rx243_cur
-    (rx243_cur, rx243_pos, rx243_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx243_cur
-    .local pmc match
-    .lex "$/", match
-    length rx243_eos, rx243_tgt
-    gt rx243_pos, rx243_eos, rx243_done
-    set rx243_off, 0
-    lt rx243_pos, 2, rx243_start
-    sub rx243_off, rx243_pos, 1
-    substr rx243_tgt, rx243_tgt, rx243_off
-  rx243_start:
-    eq $I10, 1, rx243_restart
-    rx243_cur."!cursor_debug"("START ", "metachar:sym<:::>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan247_done
-    goto rxscan247_scan
-  rxscan247_loop:
-    ($P10) = rx243_cur."from"()
-    inc $P10
-    set rx243_pos, $P10
-    ge rx243_pos, rx243_eos, rxscan247_done
-  rxscan247_scan:
-    set_addr $I10, rxscan247_loop
-    rx243_cur."!mark_push"(0, rx243_pos, $I10)
-  rxscan247_done:
-.annotate 'line', 86
+    .local string rx252_tgt
+    .local int rx252_pos
+    .local int rx252_off
+    .local int rx252_eos
+    .local int rx252_rep
+    .local pmc rx252_cur
+    .local pmc rx252_debug
+    (rx252_cur, rx252_pos, rx252_tgt, $I10) = self."!cursor_start"()
+    getattribute rx252_debug, rx252_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx252_cur
+    .local pmc match
+    .lex "$/", match
+    length rx252_eos, rx252_tgt
+    gt rx252_pos, rx252_eos, rx252_done
+    set rx252_off, 0
+    lt rx252_pos, 2, rx252_start
+    sub rx252_off, rx252_pos, 1
+    substr rx252_tgt, rx252_tgt, rx252_off
+  rx252_start:
+    eq $I10, 1, rx252_restart
+    if_null rx252_debug, debug_286
+    rx252_cur."!cursor_debug"("START", "metachar:sym<:::>")
+  debug_286:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan256_done
+    goto rxscan256_scan
+  rxscan256_loop:
+    ($P10) = rx252_cur."from"()
+    inc $P10
+    set rx252_pos, $P10
+    ge rx252_pos, rx252_eos, rxscan256_done
+  rxscan256_scan:
+    set_addr $I10, rxscan256_loop
+    rx252_cur."!mark_push"(0, rx252_pos, $I10)
+  rxscan256_done:
+.annotate 'line', 93
   # rx subcapture "sym"
-    set_addr $I10, rxcap_248_fail
-    rx243_cur."!mark_push"(0, rx243_pos, $I10)
+    set_addr $I10, rxcap_257_fail
+    rx252_cur."!mark_push"(0, rx252_pos, $I10)
   # rx literal  ":::"
-    add $I11, rx243_pos, 3
-    gt $I11, rx243_eos, rx243_fail
-    sub $I11, rx243_pos, rx243_off
-    substr $S10, rx243_tgt, $I11, 3
-    ne $S10, ":::", rx243_fail
-    add rx243_pos, 3
-    set_addr $I10, rxcap_248_fail
-    ($I12, $I11) = rx243_cur."!mark_peek"($I10)
-    rx243_cur."!cursor_pos"($I11)
-    ($P10) = rx243_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx243_pos, "")
-    rx243_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx252_pos, 3
+    gt $I11, rx252_eos, rx252_fail
+    sub $I11, rx252_pos, rx252_off
+    substr $S10, rx252_tgt, $I11, 3
+    ne $S10, ":::", rx252_fail
+    add rx252_pos, 3
+    set_addr $I10, rxcap_257_fail
+    ($I12, $I11) = rx252_cur."!mark_peek"($I10)
+    rx252_cur."!cursor_pos"($I11)
+    ($P10) = rx252_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx252_pos, "")
+    rx252_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_248_done
-  rxcap_248_fail:
-    goto rx243_fail
-  rxcap_248_done:
+    goto rxcap_257_done
+  rxcap_257_fail:
+    goto rx252_fail
+  rxcap_257_done:
   # rx subrule "panic" subtype=method negate=
-    rx243_cur."!cursor_pos"(rx243_pos)
-    $P10 = rx243_cur."panic"("::: not yet implemented")
-    unless $P10, rx243_fail
-    rx243_pos = $P10."pos"()
-  # rx pass
-    rx243_cur."!cursor_pass"(rx243_pos, "metachar:sym<:::>")
-    rx243_cur."!cursor_debug"("PASS  ", "metachar:sym<:::>", " at pos=", rx243_pos)
-    .return (rx243_cur)
-  rx243_restart:
-.annotate 'line', 3
-    rx243_cur."!cursor_debug"("NEXT ", "metachar:sym<:::>")
-  rx243_fail:
-    (rx243_rep, rx243_pos, $I10, $P10) = rx243_cur."!mark_fail"(0)
-    lt rx243_pos, -1, rx243_done
-    eq rx243_pos, -1, rx243_fail
-    jump $I10
-  rx243_done:
-    rx243_cur."!cursor_fail"()
-    rx243_cur."!cursor_debug"("FAIL  ", "metachar:sym<:::>")
-    .return (rx243_cur)
+    rx252_cur."!cursor_pos"(rx252_pos)
+    $P10 = rx252_cur."panic"("::: not yet implemented")
+    unless $P10, rx252_fail
+    rx252_pos = $P10."pos"()
+  # rx pass
+    rx252_cur."!cursor_pass"(rx252_pos, "metachar:sym<:::>")
+    if_null rx252_debug, debug_287
+    rx252_cur."!cursor_debug"("PASS", "metachar:sym<:::>", " at pos=", rx252_pos)
+  debug_287:
+    .return (rx252_cur)
+  rx252_restart:
+.annotate 'line', 3
+    if_null rx252_debug, debug_288
+    rx252_cur."!cursor_debug"("NEXT", "metachar:sym<:::>")
+  debug_288:
+  rx252_fail:
+    (rx252_rep, rx252_pos, $I10, $P10) = rx252_cur."!mark_fail"(0)
+    lt rx252_pos, -1, rx252_done
+    eq rx252_pos, -1, rx252_fail
+    jump $I10
+  rx252_done:
+    rx252_cur."!cursor_fail"()
+    if_null rx252_debug, debug_289
+    rx252_cur."!cursor_debug"("FAIL", "metachar:sym<:::>")
+  debug_289:
+    .return (rx252_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<:::>"  :subid("72_1280467470.54449") :method
-.annotate 'line', 3
-    $P245 = self."!PREFIX__!subrule"("panic", ":::")
-    new $P246, "ResizablePMCArray"
-    push $P246, $P245
-    .return ($P246)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<::>"  :subid("73_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx250_tgt
-    .local int rx250_pos
-    .local int rx250_off
-    .local int rx250_eos
-    .local int rx250_rep
-    .local pmc rx250_cur
-    (rx250_cur, rx250_pos, rx250_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx250_cur
-    .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
-    substr rx250_tgt, rx250_tgt, rx250_off
-  rx250_start:
-    eq $I10, 1, rx250_restart
-    rx250_cur."!cursor_debug"("START ", "metachar:sym<::>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan254_done
-    goto rxscan254_scan
-  rxscan254_loop:
-    ($P10) = rx250_cur."from"()
-    inc $P10
-    set rx250_pos, $P10
-    ge rx250_pos, rx250_eos, rxscan254_done
-  rxscan254_scan:
-    set_addr $I10, rxscan254_loop
-    rx250_cur."!mark_push"(0, rx250_pos, $I10)
-  rxscan254_done:
-.annotate 'line', 87
+.sub "!PREFIX__metachar:sym<:::>"  :subid("74_1282323996.47527") :method
+.annotate 'line', 3
+    $P254 = self."!PREFIX__!subrule"("panic", ":::")
+    new $P255, "ResizablePMCArray"
+    push $P255, $P254
+    .return ($P255)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<::>"  :subid("75_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx259_tgt
+    .local int rx259_pos
+    .local int rx259_off
+    .local int rx259_eos
+    .local int rx259_rep
+    .local pmc rx259_cur
+    .local pmc rx259_debug
+    (rx259_cur, rx259_pos, rx259_tgt, $I10) = self."!cursor_start"()
+    getattribute rx259_debug, rx259_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx259_cur
+    .local pmc match
+    .lex "$/", match
+    length rx259_eos, rx259_tgt
+    gt rx259_pos, rx259_eos, rx259_done
+    set rx259_off, 0
+    lt rx259_pos, 2, rx259_start
+    sub rx259_off, rx259_pos, 1
+    substr rx259_tgt, rx259_tgt, rx259_off
+  rx259_start:
+    eq $I10, 1, rx259_restart
+    if_null rx259_debug, debug_290
+    rx259_cur."!cursor_debug"("START", "metachar:sym<::>")
+  debug_290:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan263_done
+    goto rxscan263_scan
+  rxscan263_loop:
+    ($P10) = rx259_cur."from"()
+    inc $P10
+    set rx259_pos, $P10
+    ge rx259_pos, rx259_eos, rxscan263_done
+  rxscan263_scan:
+    set_addr $I10, rxscan263_loop
+    rx259_cur."!mark_push"(0, rx259_pos, $I10)
+  rxscan263_done:
+.annotate 'line', 94
   # rx subcapture "sym"
-    set_addr $I10, rxcap_255_fail
-    rx250_cur."!mark_push"(0, rx250_pos, $I10)
+    set_addr $I10, rxcap_264_fail
+    rx259_cur."!mark_push"(0, rx259_pos, $I10)
   # rx literal  "::"
-    add $I11, rx250_pos, 2
-    gt $I11, rx250_eos, rx250_fail
-    sub $I11, rx250_pos, rx250_off
-    substr $S10, rx250_tgt, $I11, 2
-    ne $S10, "::", rx250_fail
-    add rx250_pos, 2
-    set_addr $I10, rxcap_255_fail
-    ($I12, $I11) = rx250_cur."!mark_peek"($I10)
-    rx250_cur."!cursor_pos"($I11)
-    ($P10) = rx250_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx250_pos, "")
-    rx250_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx259_pos, 2
+    gt $I11, rx259_eos, rx259_fail
+    sub $I11, rx259_pos, rx259_off
+    substr $S10, rx259_tgt, $I11, 2
+    ne $S10, "::", rx259_fail
+    add rx259_pos, 2
+    set_addr $I10, rxcap_264_fail
+    ($I12, $I11) = rx259_cur."!mark_peek"($I10)
+    rx259_cur."!cursor_pos"($I11)
+    ($P10) = rx259_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx259_pos, "")
+    rx259_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_255_done
-  rxcap_255_fail:
-    goto rx250_fail
-  rxcap_255_done:
+    goto rxcap_264_done
+  rxcap_264_fail:
+    goto rx259_fail
+  rxcap_264_done:
   # rx subrule "panic" subtype=method negate=
-    rx250_cur."!cursor_pos"(rx250_pos)
-    $P10 = rx250_cur."panic"(":: not yet implemented")
-    unless $P10, rx250_fail
-    rx250_pos = $P10."pos"()
-  # rx pass
-    rx250_cur."!cursor_pass"(rx250_pos, "metachar:sym<::>")
-    rx250_cur."!cursor_debug"("PASS  ", "metachar:sym<::>", " at pos=", rx250_pos)
-    .return (rx250_cur)
-  rx250_restart:
-.annotate 'line', 3
-    rx250_cur."!cursor_debug"("NEXT ", "metachar:sym<::>")
-  rx250_fail:
-    (rx250_rep, rx250_pos, $I10, $P10) = rx250_cur."!mark_fail"(0)
-    lt rx250_pos, -1, rx250_done
-    eq rx250_pos, -1, rx250_fail
-    jump $I10
-  rx250_done:
-    rx250_cur."!cursor_fail"()
-    rx250_cur."!cursor_debug"("FAIL  ", "metachar:sym<::>")
-    .return (rx250_cur)
+    rx259_cur."!cursor_pos"(rx259_pos)
+    $P10 = rx259_cur."panic"(":: not yet implemented")
+    unless $P10, rx259_fail
+    rx259_pos = $P10."pos"()
+  # rx pass
+    rx259_cur."!cursor_pass"(rx259_pos, "metachar:sym<::>")
+    if_null rx259_debug, debug_291
+    rx259_cur."!cursor_debug"("PASS", "metachar:sym<::>", " at pos=", rx259_pos)
+  debug_291:
+    .return (rx259_cur)
+  rx259_restart:
+.annotate 'line', 3
+    if_null rx259_debug, debug_292
+    rx259_cur."!cursor_debug"("NEXT", "metachar:sym<::>")
+  debug_292:
+  rx259_fail:
+    (rx259_rep, rx259_pos, $I10, $P10) = rx259_cur."!mark_fail"(0)
+    lt rx259_pos, -1, rx259_done
+    eq rx259_pos, -1, rx259_fail
+    jump $I10
+  rx259_done:
+    rx259_cur."!cursor_fail"()
+    if_null rx259_debug, debug_293
+    rx259_cur."!cursor_debug"("FAIL", "metachar:sym<::>")
+  debug_293:
+    .return (rx259_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<::>"  :subid("74_1280467470.54449") :method
-.annotate 'line', 3
-    $P252 = self."!PREFIX__!subrule"("panic", "::")
-    new $P253, "ResizablePMCArray"
-    push $P253, $P252
-    .return ($P253)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<lwb>"  :subid("75_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx257_tgt
-    .local int rx257_pos
-    .local int rx257_off
-    .local int rx257_eos
-    .local int rx257_rep
-    .local pmc rx257_cur
-    (rx257_cur, rx257_pos, rx257_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx257_cur
-    .local pmc match
-    .lex "$/", match
-    length rx257_eos, rx257_tgt
-    gt rx257_pos, rx257_eos, rx257_done
-    set rx257_off, 0
-    lt rx257_pos, 2, rx257_start
-    sub rx257_off, rx257_pos, 1
-    substr rx257_tgt, rx257_tgt, rx257_off
-  rx257_start:
-    eq $I10, 1, rx257_restart
-    rx257_cur."!cursor_debug"("START ", "metachar:sym<lwb>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan260_done
-    goto rxscan260_scan
-  rxscan260_loop:
-    ($P10) = rx257_cur."from"()
-    inc $P10
-    set rx257_pos, $P10
-    ge rx257_pos, rx257_eos, rxscan260_done
-  rxscan260_scan:
-    set_addr $I10, rxscan260_loop
-    rx257_cur."!mark_push"(0, rx257_pos, $I10)
-  rxscan260_done:
-.annotate 'line', 88
+.sub "!PREFIX__metachar:sym<::>"  :subid("76_1282323996.47527") :method
+.annotate 'line', 3
+    $P261 = self."!PREFIX__!subrule"("panic", "::")
+    new $P262, "ResizablePMCArray"
+    push $P262, $P261
+    .return ($P262)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<lwb>"  :subid("77_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx266_tgt
+    .local int rx266_pos
+    .local int rx266_off
+    .local int rx266_eos
+    .local int rx266_rep
+    .local pmc rx266_cur
+    .local pmc rx266_debug
+    (rx266_cur, rx266_pos, rx266_tgt, $I10) = self."!cursor_start"()
+    getattribute rx266_debug, rx266_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx266_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx266_restart
+    if_null rx266_debug, debug_294
+    rx266_cur."!cursor_debug"("START", "metachar:sym<lwb>")
+  debug_294:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan269_done
+    goto rxscan269_scan
+  rxscan269_loop:
+    ($P10) = rx266_cur."from"()
+    inc $P10
+    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', 95
   # rx subcapture "sym"
-    set_addr $I10, rxcap_262_fail
-    rx257_cur."!mark_push"(0, rx257_pos, $I10)
-  alt261_0:
-    set_addr $I10, alt261_1
-    rx257_cur."!mark_push"(0, rx257_pos, $I10)
+    set_addr $I10, rxcap_271_fail
+    rx266_cur."!mark_push"(0, rx266_pos, $I10)
+  alt270_0:
+    set_addr $I10, alt270_1
+    rx266_cur."!mark_push"(0, rx266_pos, $I10)
   # rx literal  "<<"
-    add $I11, rx257_pos, 2
-    gt $I11, rx257_eos, rx257_fail
-    sub $I11, rx257_pos, rx257_off
-    substr $S10, rx257_tgt, $I11, 2
-    ne $S10, "<<", rx257_fail
-    add rx257_pos, 2
-    goto alt261_end
-  alt261_1:
+    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, "<<", rx266_fail
+    add rx266_pos, 2
+    goto alt270_end
+  alt270_1:
   # rx literal  unicode:"\x{ab}"
-    add $I11, rx257_pos, 1
-    gt $I11, rx257_eos, rx257_fail
-    sub $I11, rx257_pos, rx257_off
-    substr $S10, rx257_tgt, $I11, 1
-    ne $S10, unicode:"\x{ab}", rx257_fail
-    add rx257_pos, 1
-  alt261_end:
-    set_addr $I10, rxcap_262_fail
-    ($I12, $I11) = rx257_cur."!mark_peek"($I10)
-    rx257_cur."!cursor_pos"($I11)
-    ($P10) = rx257_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx257_pos, "")
-    rx257_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx266_pos, 1
+    gt $I11, rx266_eos, rx266_fail
+    sub $I11, rx266_pos, rx266_off
+    ord $I11, rx266_tgt, $I11
+    ne $I11, 171, rx266_fail
+    add rx266_pos, 1
+  alt270_end:
+    set_addr $I10, rxcap_271_fail
+    ($I12, $I11) = rx266_cur."!mark_peek"($I10)
+    rx266_cur."!cursor_pos"($I11)
+    ($P10) = rx266_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx266_pos, "")
+    rx266_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_262_done
-  rxcap_262_fail:
-    goto rx257_fail
-  rxcap_262_done:
-  # rx pass
-    rx257_cur."!cursor_pass"(rx257_pos, "metachar:sym<lwb>")
-    rx257_cur."!cursor_debug"("PASS  ", "metachar:sym<lwb>", " at pos=", rx257_pos)
-    .return (rx257_cur)
-  rx257_restart:
-.annotate 'line', 3
-    rx257_cur."!cursor_debug"("NEXT ", "metachar:sym<lwb>")
-  rx257_fail:
-    (rx257_rep, rx257_pos, $I10, $P10) = rx257_cur."!mark_fail"(0)
-    lt rx257_pos, -1, rx257_done
-    eq rx257_pos, -1, rx257_fail
-    jump $I10
-  rx257_done:
-    rx257_cur."!cursor_fail"()
-    rx257_cur."!cursor_debug"("FAIL  ", "metachar:sym<lwb>")
-    .return (rx257_cur)
+    goto rxcap_271_done
+  rxcap_271_fail:
+    goto rx266_fail
+  rxcap_271_done:
+  # rx pass
+    rx266_cur."!cursor_pass"(rx266_pos, "metachar:sym<lwb>")
+    if_null rx266_debug, debug_295
+    rx266_cur."!cursor_debug"("PASS", "metachar:sym<lwb>", " at pos=", rx266_pos)
+  debug_295:
+    .return (rx266_cur)
+  rx266_restart:
+.annotate 'line', 3
+    if_null rx266_debug, debug_296
+    rx266_cur."!cursor_debug"("NEXT", "metachar:sym<lwb>")
+  debug_296:
+  rx266_fail:
+    (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
+  rx266_done:
+    rx266_cur."!cursor_fail"()
+    if_null rx266_debug, debug_297
+    rx266_cur."!cursor_debug"("FAIL", "metachar:sym<lwb>")
+  debug_297:
+    .return (rx266_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<lwb>"  :subid("76_1280467470.54449") :method
-.annotate 'line', 3
-    new $P259, "ResizablePMCArray"
-    push $P259, unicode:"\x{ab}"
-    push $P259, "<<"
-    .return ($P259)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<rwb>"  :subid("77_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx264_tgt
-    .local int rx264_pos
-    .local int rx264_off
-    .local int rx264_eos
-    .local int rx264_rep
-    .local pmc rx264_cur
-    (rx264_cur, rx264_pos, rx264_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx264_cur
-    .local pmc match
-    .lex "$/", match
-    length rx264_eos, rx264_tgt
-    gt rx264_pos, rx264_eos, rx264_done
-    set rx264_off, 0
-    lt rx264_pos, 2, rx264_start
-    sub rx264_off, rx264_pos, 1
-    substr rx264_tgt, rx264_tgt, rx264_off
-  rx264_start:
-    eq $I10, 1, rx264_restart
-    rx264_cur."!cursor_debug"("START ", "metachar:sym<rwb>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan267_done
-    goto rxscan267_scan
-  rxscan267_loop:
-    ($P10) = rx264_cur."from"()
-    inc $P10
-    set rx264_pos, $P10
-    ge rx264_pos, rx264_eos, rxscan267_done
-  rxscan267_scan:
-    set_addr $I10, rxscan267_loop
-    rx264_cur."!mark_push"(0, rx264_pos, $I10)
-  rxscan267_done:
-.annotate 'line', 89
+.sub "!PREFIX__metachar:sym<lwb>"  :subid("78_1282323996.47527") :method
+.annotate 'line', 3
+    new $P268, "ResizablePMCArray"
+    push $P268, unicode:"\x{ab}"
+    push $P268, "<<"
+    .return ($P268)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<rwb>"  :subid("79_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx273_tgt
+    .local int rx273_pos
+    .local int rx273_off
+    .local int rx273_eos
+    .local int rx273_rep
+    .local pmc rx273_cur
+    .local pmc rx273_debug
+    (rx273_cur, rx273_pos, rx273_tgt, $I10) = self."!cursor_start"()
+    getattribute rx273_debug, rx273_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx273_cur
+    .local pmc match
+    .lex "$/", match
+    length rx273_eos, rx273_tgt
+    gt rx273_pos, rx273_eos, rx273_done
+    set rx273_off, 0
+    lt rx273_pos, 2, rx273_start
+    sub rx273_off, rx273_pos, 1
+    substr rx273_tgt, rx273_tgt, rx273_off
+  rx273_start:
+    eq $I10, 1, rx273_restart
+    if_null rx273_debug, debug_298
+    rx273_cur."!cursor_debug"("START", "metachar:sym<rwb>")
+  debug_298:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan276_done
+    goto rxscan276_scan
+  rxscan276_loop:
+    ($P10) = rx273_cur."from"()
+    inc $P10
+    set rx273_pos, $P10
+    ge rx273_pos, rx273_eos, rxscan276_done
+  rxscan276_scan:
+    set_addr $I10, rxscan276_loop
+    rx273_cur."!mark_push"(0, rx273_pos, $I10)
+  rxscan276_done:
+.annotate 'line', 96
   # rx subcapture "sym"
-    set_addr $I10, rxcap_269_fail
-    rx264_cur."!mark_push"(0, rx264_pos, $I10)
-  alt268_0:
-    set_addr $I10, alt268_1
-    rx264_cur."!mark_push"(0, rx264_pos, $I10)
+    set_addr $I10, rxcap_278_fail
+    rx273_cur."!mark_push"(0, rx273_pos, $I10)
+  alt277_0:
+    set_addr $I10, alt277_1
+    rx273_cur."!mark_push"(0, rx273_pos, $I10)
   # rx literal  ">>"
-    add $I11, rx264_pos, 2
-    gt $I11, rx264_eos, rx264_fail
-    sub $I11, rx264_pos, rx264_off
-    substr $S10, rx264_tgt, $I11, 2
-    ne $S10, ">>", rx264_fail
-    add rx264_pos, 2
-    goto alt268_end
-  alt268_1:
+    add $I11, rx273_pos, 2
+    gt $I11, rx273_eos, rx273_fail
+    sub $I11, rx273_pos, rx273_off
+    substr $S10, rx273_tgt, $I11, 2
+    ne $S10, ">>", rx273_fail
+    add rx273_pos, 2
+    goto alt277_end
+  alt277_1:
   # rx literal  unicode:"\x{bb}"
-    add $I11, rx264_pos, 1
-    gt $I11, rx264_eos, rx264_fail
-    sub $I11, rx264_pos, rx264_off
-    substr $S10, rx264_tgt, $I11, 1
-    ne $S10, unicode:"\x{bb}", rx264_fail
-    add rx264_pos, 1
-  alt268_end:
-    set_addr $I10, rxcap_269_fail
-    ($I12, $I11) = rx264_cur."!mark_peek"($I10)
-    rx264_cur."!cursor_pos"($I11)
-    ($P10) = rx264_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx264_pos, "")
-    rx264_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx273_pos, 1
+    gt $I11, rx273_eos, rx273_fail
+    sub $I11, rx273_pos, rx273_off
+    ord $I11, rx273_tgt, $I11
+    ne $I11, 187, rx273_fail
+    add rx273_pos, 1
+  alt277_end:
+    set_addr $I10, rxcap_278_fail
+    ($I12, $I11) = rx273_cur."!mark_peek"($I10)
+    rx273_cur."!cursor_pos"($I11)
+    ($P10) = rx273_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx273_pos, "")
+    rx273_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_269_done
-  rxcap_269_fail:
-    goto rx264_fail
-  rxcap_269_done:
-  # rx pass
-    rx264_cur."!cursor_pass"(rx264_pos, "metachar:sym<rwb>")
-    rx264_cur."!cursor_debug"("PASS  ", "metachar:sym<rwb>", " at pos=", rx264_pos)
-    .return (rx264_cur)
-  rx264_restart:
-.annotate 'line', 3
-    rx264_cur."!cursor_debug"("NEXT ", "metachar:sym<rwb>")
-  rx264_fail:
-    (rx264_rep, rx264_pos, $I10, $P10) = rx264_cur."!mark_fail"(0)
-    lt rx264_pos, -1, rx264_done
-    eq rx264_pos, -1, rx264_fail
-    jump $I10
-  rx264_done:
-    rx264_cur."!cursor_fail"()
-    rx264_cur."!cursor_debug"("FAIL  ", "metachar:sym<rwb>")
-    .return (rx264_cur)
+    goto rxcap_278_done
+  rxcap_278_fail:
+    goto rx273_fail
+  rxcap_278_done:
+  # rx pass
+    rx273_cur."!cursor_pass"(rx273_pos, "metachar:sym<rwb>")
+    if_null rx273_debug, debug_299
+    rx273_cur."!cursor_debug"("PASS", "metachar:sym<rwb>", " at pos=", rx273_pos)
+  debug_299:
+    .return (rx273_cur)
+  rx273_restart:
+.annotate 'line', 3
+    if_null rx273_debug, debug_300
+    rx273_cur."!cursor_debug"("NEXT", "metachar:sym<rwb>")
+  debug_300:
+  rx273_fail:
+    (rx273_rep, rx273_pos, $I10, $P10) = rx273_cur."!mark_fail"(0)
+    lt rx273_pos, -1, rx273_done
+    eq rx273_pos, -1, rx273_fail
+    jump $I10
+  rx273_done:
+    rx273_cur."!cursor_fail"()
+    if_null rx273_debug, debug_301
+    rx273_cur."!cursor_debug"("FAIL", "metachar:sym<rwb>")
+  debug_301:
+    .return (rx273_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<rwb>"  :subid("78_1280467470.54449") :method
-.annotate 'line', 3
-    new $P266, "ResizablePMCArray"
-    push $P266, unicode:"\x{bb}"
-    push $P266, ">>"
-    .return ($P266)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<bs>"  :subid("79_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx271_tgt
-    .local int rx271_pos
-    .local int rx271_off
-    .local int rx271_eos
-    .local int rx271_rep
-    .local pmc rx271_cur
-    (rx271_cur, rx271_pos, rx271_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx271_cur
-    .local pmc match
-    .lex "$/", match
-    length rx271_eos, rx271_tgt
-    gt rx271_pos, rx271_eos, rx271_done
-    set rx271_off, 0
-    lt rx271_pos, 2, rx271_start
-    sub rx271_off, rx271_pos, 1
-    substr rx271_tgt, rx271_tgt, rx271_off
-  rx271_start:
-    eq $I10, 1, rx271_restart
-    rx271_cur."!cursor_debug"("START ", "metachar:sym<bs>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan275_done
-    goto rxscan275_scan
-  rxscan275_loop:
-    ($P10) = rx271_cur."from"()
-    inc $P10
-    set rx271_pos, $P10
-    ge rx271_pos, rx271_eos, rxscan275_done
-  rxscan275_scan:
-    set_addr $I10, rxscan275_loop
-    rx271_cur."!mark_push"(0, rx271_pos, $I10)
-  rxscan275_done:
-.annotate 'line', 90
+.sub "!PREFIX__metachar:sym<rwb>"  :subid("80_1282323996.47527") :method
+.annotate 'line', 3
+    new $P275, "ResizablePMCArray"
+    push $P275, unicode:"\x{bb}"
+    push $P275, ">>"
+    .return ($P275)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<bs>"  :subid("81_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx280_tgt
+    .local int rx280_pos
+    .local int rx280_off
+    .local int rx280_eos
+    .local int rx280_rep
+    .local pmc rx280_cur
+    .local pmc rx280_debug
+    (rx280_cur, rx280_pos, rx280_tgt, $I10) = self."!cursor_start"()
+    getattribute rx280_debug, rx280_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx280_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx280_restart
+    if_null rx280_debug, debug_302
+    rx280_cur."!cursor_debug"("START", "metachar:sym<bs>")
+  debug_302:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan284_done
+    goto rxscan284_scan
+  rxscan284_loop:
+    ($P10) = rx280_cur."from"()
+    inc $P10
+    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', 97
   # rx literal  "\\"
-    add $I11, rx271_pos, 1
-    gt $I11, rx271_eos, rx271_fail
-    sub $I11, rx271_pos, rx271_off
-    substr $S10, rx271_tgt, $I11, 1
-    ne $S10, "\\", rx271_fail
-    add rx271_pos, 1
+    add $I11, rx280_pos, 1
+    gt $I11, rx280_eos, rx280_fail
+    sub $I11, rx280_pos, rx280_off
+    ord $I11, rx280_tgt, $I11
+    ne $I11, 92, rx280_fail
+    add rx280_pos, 1
   # rx subrule "backslash" subtype=capture negate=
-    rx271_cur."!cursor_pos"(rx271_pos)
-    $P10 = rx271_cur."backslash"()
-    unless $P10, rx271_fail
-    rx271_cur."!mark_push"(0, -1, 0, $P10)
+    rx280_cur."!cursor_pos"(rx280_pos)
+    $P10 = rx280_cur."backslash"()
+    unless $P10, rx280_fail
+    rx280_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("backslash")
-    rx271_pos = $P10."pos"()
+    rx280_pos = $P10."pos"()
   # rx pass
-    rx271_cur."!cursor_pass"(rx271_pos, "metachar:sym<bs>")
-    rx271_cur."!cursor_debug"("PASS  ", "metachar:sym<bs>", " at pos=", rx271_pos)
-    .return (rx271_cur)
-  rx271_restart:
-.annotate 'line', 3
-    rx271_cur."!cursor_debug"("NEXT ", "metachar:sym<bs>")
-  rx271_fail:
-    (rx271_rep, rx271_pos, $I10, $P10) = rx271_cur."!mark_fail"(0)
-    lt rx271_pos, -1, rx271_done
-    eq rx271_pos, -1, rx271_fail
-    jump $I10
-  rx271_done:
-    rx271_cur."!cursor_fail"()
-    rx271_cur."!cursor_debug"("FAIL  ", "metachar:sym<bs>")
-    .return (rx271_cur)
+    rx280_cur."!cursor_pass"(rx280_pos, "metachar:sym<bs>")
+    if_null rx280_debug, debug_303
+    rx280_cur."!cursor_debug"("PASS", "metachar:sym<bs>", " at pos=", rx280_pos)
+  debug_303:
+    .return (rx280_cur)
+  rx280_restart:
+.annotate 'line', 3
+    if_null rx280_debug, debug_304
+    rx280_cur."!cursor_debug"("NEXT", "metachar:sym<bs>")
+  debug_304:
+  rx280_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
+  rx280_done:
+    rx280_cur."!cursor_fail"()
+    if_null rx280_debug, debug_305
+    rx280_cur."!cursor_debug"("FAIL", "metachar:sym<bs>")
+  debug_305:
+    .return (rx280_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<bs>"  :subid("80_1280467470.54449") :method
-.annotate 'line', 3
-    $P273 = self."!PREFIX__!subrule"("backslash", "\\")
-    new $P274, "ResizablePMCArray"
-    push $P274, $P273
-    .return ($P274)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<mod>"  :subid("81_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx277_cur
-    .local pmc match
-    .lex "$/", match
-    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:
-    eq $I10, 1, rx277_restart
-    rx277_cur."!cursor_debug"("START ", "metachar:sym<mod>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan281_done
-    goto rxscan281_scan
-  rxscan281_loop:
-    ($P10) = rx277_cur."from"()
-    inc $P10
-    set rx277_pos, $P10
-    ge rx277_pos, rx277_eos, rxscan281_done
-  rxscan281_scan:
-    set_addr $I10, rxscan281_loop
-    rx277_cur."!mark_push"(0, rx277_pos, $I10)
-  rxscan281_done:
-.annotate 'line', 91
+.sub "!PREFIX__metachar:sym<bs>"  :subid("82_1282323996.47527") :method
+.annotate 'line', 3
+    $P282 = self."!PREFIX__!subrule"("backslash", "\\")
+    new $P283, "ResizablePMCArray"
+    push $P283, $P282
+    .return ($P283)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<mod>"  :subid("83_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx286_tgt
+    .local int rx286_pos
+    .local int rx286_off
+    .local int rx286_eos
+    .local int rx286_rep
+    .local pmc rx286_cur
+    .local pmc rx286_debug
+    (rx286_cur, rx286_pos, rx286_tgt, $I10) = self."!cursor_start"()
+    getattribute rx286_debug, rx286_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx286_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx286_restart
+    if_null rx286_debug, debug_306
+    rx286_cur."!cursor_debug"("START", "metachar:sym<mod>")
+  debug_306:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan290_done
+    goto rxscan290_scan
+  rxscan290_loop:
+    ($P10) = rx286_cur."from"()
+    inc $P10
+    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', 98
   # rx subrule "mod_internal" subtype=capture negate=
-    rx277_cur."!cursor_pos"(rx277_pos)
-    $P10 = rx277_cur."mod_internal"()
-    unless $P10, rx277_fail
-    rx277_cur."!mark_push"(0, -1, 0, $P10)
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."mod_internal"()
+    unless $P10, rx286_fail
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("mod_internal")
-    rx277_pos = $P10."pos"()
+    rx286_pos = $P10."pos"()
   # rx pass
-    rx277_cur."!cursor_pass"(rx277_pos, "metachar:sym<mod>")
-    rx277_cur."!cursor_debug"("PASS  ", "metachar:sym<mod>", " at pos=", rx277_pos)
-    .return (rx277_cur)
-  rx277_restart:
-.annotate 'line', 3
-    rx277_cur."!cursor_debug"("NEXT ", "metachar:sym<mod>")
-  rx277_fail:
-    (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  ", "metachar:sym<mod>")
-    .return (rx277_cur)
+    rx286_cur."!cursor_pass"(rx286_pos, "metachar:sym<mod>")
+    if_null rx286_debug, debug_307
+    rx286_cur."!cursor_debug"("PASS", "metachar:sym<mod>", " at pos=", rx286_pos)
+  debug_307:
+    .return (rx286_cur)
+  rx286_restart:
+.annotate 'line', 3
+    if_null rx286_debug, debug_308
+    rx286_cur."!cursor_debug"("NEXT", "metachar:sym<mod>")
+  debug_308:
+  rx286_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
+  rx286_done:
+    rx286_cur."!cursor_fail"()
+    if_null rx286_debug, debug_309
+    rx286_cur."!cursor_debug"("FAIL", "metachar:sym<mod>")
+  debug_309:
+    .return (rx286_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<mod>"  :subid("82_1280467470.54449") :method
-.annotate 'line', 3
-    $P279 = self."!PREFIX__!subrule"("mod_internal", "")
-    new $P280, "ResizablePMCArray"
-    push $P280, $P279
-    .return ($P280)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<~>"  :subid("83_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .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:
-    eq $I10, 1, rx283_restart
-    rx283_cur."!cursor_debug"("START ", "metachar:sym<~>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan287_done
-    goto rxscan287_scan
-  rxscan287_loop:
-    ($P10) = rx283_cur."from"()
-    inc $P10
-    set rx283_pos, $P10
-    ge rx283_pos, rx283_eos, rxscan287_done
-  rxscan287_scan:
-    set_addr $I10, rxscan287_loop
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
-  rxscan287_done:
-.annotate 'line', 95
+.sub "!PREFIX__metachar:sym<mod>"  :subid("84_1282323996.47527") :method
+.annotate 'line', 3
+    $P288 = self."!PREFIX__!subrule"("mod_internal", "")
+    new $P289, "ResizablePMCArray"
+    push $P289, $P288
+    .return ($P289)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<~>"  :subid("85_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx292_tgt
+    .local int rx292_pos
+    .local int rx292_off
+    .local int rx292_eos
+    .local int rx292_rep
+    .local pmc rx292_cur
+    .local pmc rx292_debug
+    (rx292_cur, rx292_pos, rx292_tgt, $I10) = self."!cursor_start"()
+    getattribute rx292_debug, rx292_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx292_cur
+    .local pmc match
+    .lex "$/", match
+    length rx292_eos, rx292_tgt
+    gt rx292_pos, rx292_eos, rx292_done
+    set rx292_off, 0
+    lt rx292_pos, 2, rx292_start
+    sub rx292_off, rx292_pos, 1
+    substr rx292_tgt, rx292_tgt, rx292_off
+  rx292_start:
+    eq $I10, 1, rx292_restart
+    if_null rx292_debug, debug_310
+    rx292_cur."!cursor_debug"("START", "metachar:sym<~>")
+  debug_310:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan296_done
+    goto rxscan296_scan
+  rxscan296_loop:
+    ($P10) = rx292_cur."from"()
+    inc $P10
+    set rx292_pos, $P10
+    ge rx292_pos, rx292_eos, rxscan296_done
+  rxscan296_scan:
+    set_addr $I10, rxscan296_loop
+    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+  rxscan296_done:
+.annotate 'line', 102
   # rx subcapture "sym"
-    set_addr $I10, rxcap_288_fail
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+    set_addr $I10, rxcap_297_fail
+    rx292_cur."!mark_push"(0, rx292_pos, $I10)
   # 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
-    set_addr $I10, rxcap_288_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)
+    add $I11, rx292_pos, 1
+    gt $I11, rx292_eos, rx292_fail
+    sub $I11, rx292_pos, rx292_off
+    ord $I11, rx292_tgt, $I11
+    ne $I11, 126, rx292_fail
+    add rx292_pos, 1
+    set_addr $I10, rxcap_297_fail
+    ($I12, $I11) = rx292_cur."!mark_peek"($I10)
+    rx292_cur."!cursor_pos"($I11)
+    ($P10) = rx292_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx292_pos, "")
+    rx292_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_288_done
-  rxcap_288_fail:
-    goto rx283_fail
-  rxcap_288_done:
-.annotate 'line', 96
+    goto rxcap_297_done
+  rxcap_297_fail:
+    goto rx292_fail
+  rxcap_297_done:
+.annotate 'line', 103
   # rx subrule "ws" subtype=method negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."ws"()
-    unless $P10, rx283_fail
-    rx283_pos = $P10."pos"()
+    rx292_cur."!cursor_pos"(rx292_pos)
+    $P10 = rx292_cur."ws"()
+    unless $P10, rx292_fail
+    rx292_pos = $P10."pos"()
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."quantified_atom"()
-    unless $P10, rx283_fail
-    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    rx292_cur."!cursor_pos"(rx292_pos)
+    $P10 = rx292_cur."quantified_atom"()
+    unless $P10, rx292_fail
+    rx292_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("GOAL")
-    rx283_pos = $P10."pos"()
-.annotate 'line', 97
+    rx292_pos = $P10."pos"()
+.annotate 'line', 104
   # rx subrule "ws" subtype=method negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."ws"()
-    unless $P10, rx283_fail
-    rx283_pos = $P10."pos"()
+    rx292_cur."!cursor_pos"(rx292_pos)
+    $P10 = rx292_cur."ws"()
+    unless $P10, rx292_fail
+    rx292_pos = $P10."pos"()
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."quantified_atom"()
-    unless $P10, rx283_fail
-    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    rx292_cur."!cursor_pos"(rx292_pos)
+    $P10 = rx292_cur."quantified_atom"()
+    unless $P10, rx292_fail
+    rx292_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx283_pos = $P10."pos"()
-.annotate 'line', 94
+    rx292_pos = $P10."pos"()
+.annotate 'line', 101
   # rx pass
-    rx283_cur."!cursor_pass"(rx283_pos, "metachar:sym<~>")
-    rx283_cur."!cursor_debug"("PASS  ", "metachar:sym<~>", " at pos=", rx283_pos)
-    .return (rx283_cur)
-  rx283_restart:
-.annotate 'line', 3
-    rx283_cur."!cursor_debug"("NEXT ", "metachar:sym<~>")
-  rx283_fail:
-    (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
-  rx283_done:
-    rx283_cur."!cursor_fail"()
-    rx283_cur."!cursor_debug"("FAIL  ", "metachar:sym<~>")
-    .return (rx283_cur)
+    rx292_cur."!cursor_pass"(rx292_pos, "metachar:sym<~>")
+    if_null rx292_debug, debug_311
+    rx292_cur."!cursor_debug"("PASS", "metachar:sym<~>", " at pos=", rx292_pos)
+  debug_311:
+    .return (rx292_cur)
+  rx292_restart:
+.annotate 'line', 3
+    if_null rx292_debug, debug_312
+    rx292_cur."!cursor_debug"("NEXT", "metachar:sym<~>")
+  debug_312:
+  rx292_fail:
+    (rx292_rep, rx292_pos, $I10, $P10) = rx292_cur."!mark_fail"(0)
+    lt rx292_pos, -1, rx292_done
+    eq rx292_pos, -1, rx292_fail
+    jump $I10
+  rx292_done:
+    rx292_cur."!cursor_fail"()
+    if_null rx292_debug, debug_313
+    rx292_cur."!cursor_debug"("FAIL", "metachar:sym<~>")
+  debug_313:
+    .return (rx292_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<~>"  :subid("84_1280467470.54449") :method
-.annotate 'line', 3
-    $P285 = self."!PREFIX__!subrule"("ws", "~")
-    new $P286, "ResizablePMCArray"
-    push $P286, $P285
-    .return ($P286)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<{*}>"  :subid("85_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx290_tgt
-    .local int rx290_pos
-    .local int rx290_off
-    .local int rx290_eos
-    .local int rx290_rep
-    .local pmc rx290_cur
-    (rx290_cur, rx290_pos, rx290_tgt, $I10) = self."!cursor_start"()
-    rx290_cur."!cursor_caparray"("key")
-    .lex unicode:"$\x{a2}", rx290_cur
-    .local pmc match
-    .lex "$/", match
-    length rx290_eos, rx290_tgt
-    gt rx290_pos, rx290_eos, rx290_done
-    set rx290_off, 0
-    lt rx290_pos, 2, rx290_start
-    sub rx290_off, rx290_pos, 1
-    substr rx290_tgt, rx290_tgt, rx290_off
-  rx290_start:
-    eq $I10, 1, rx290_restart
-    rx290_cur."!cursor_debug"("START ", "metachar:sym<{*}>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan293_done
-    goto rxscan293_scan
-  rxscan293_loop:
-    ($P10) = rx290_cur."from"()
-    inc $P10
-    set rx290_pos, $P10
-    ge rx290_pos, rx290_eos, rxscan293_done
-  rxscan293_scan:
-    set_addr $I10, rxscan293_loop
-    rx290_cur."!mark_push"(0, rx290_pos, $I10)
-  rxscan293_done:
-.annotate 'line', 101
+.sub "!PREFIX__metachar:sym<~>"  :subid("86_1282323996.47527") :method
+.annotate 'line', 3
+    $P294 = self."!PREFIX__!subrule"("ws", "~")
+    new $P295, "ResizablePMCArray"
+    push $P295, $P294
+    .return ($P295)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<{*}>"  :subid("87_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx299_tgt
+    .local int rx299_pos
+    .local int rx299_off
+    .local int rx299_eos
+    .local int rx299_rep
+    .local pmc rx299_cur
+    .local pmc rx299_debug
+    (rx299_cur, rx299_pos, rx299_tgt, $I10) = self."!cursor_start"()
+    rx299_cur."!cursor_caparray"("key")
+    getattribute rx299_debug, rx299_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx299_cur
+    .local pmc match
+    .lex "$/", match
+    length rx299_eos, rx299_tgt
+    gt rx299_pos, rx299_eos, rx299_done
+    set rx299_off, 0
+    lt rx299_pos, 2, rx299_start
+    sub rx299_off, rx299_pos, 1
+    substr rx299_tgt, rx299_tgt, rx299_off
+  rx299_start:
+    eq $I10, 1, rx299_restart
+    if_null rx299_debug, debug_314
+    rx299_cur."!cursor_debug"("START", "metachar:sym<{*}>")
+  debug_314:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan302_done
+    goto rxscan302_scan
+  rxscan302_loop:
+    ($P10) = rx299_cur."from"()
+    inc $P10
+    set rx299_pos, $P10
+    ge rx299_pos, rx299_eos, rxscan302_done
+  rxscan302_scan:
+    set_addr $I10, rxscan302_loop
+    rx299_cur."!mark_push"(0, rx299_pos, $I10)
+  rxscan302_done:
+.annotate 'line', 108
   # rx subcapture "sym"
-    set_addr $I10, rxcap_294_fail
-    rx290_cur."!mark_push"(0, rx290_pos, $I10)
+    set_addr $I10, rxcap_303_fail
+    rx299_cur."!mark_push"(0, rx299_pos, $I10)
   # rx literal  "{*}"
-    add $I11, rx290_pos, 3
-    gt $I11, rx290_eos, rx290_fail
-    sub $I11, rx290_pos, rx290_off
-    substr $S10, rx290_tgt, $I11, 3
-    ne $S10, "{*}", rx290_fail
-    add rx290_pos, 3
-    set_addr $I10, rxcap_294_fail
-    ($I12, $I11) = rx290_cur."!mark_peek"($I10)
-    rx290_cur."!cursor_pos"($I11)
-    ($P10) = rx290_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx290_pos, "")
-    rx290_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx299_pos, 3
+    gt $I11, rx299_eos, rx299_fail
+    sub $I11, rx299_pos, rx299_off
+    substr $S10, rx299_tgt, $I11, 3
+    ne $S10, "{*}", rx299_fail
+    add rx299_pos, 3
+    set_addr $I10, rxcap_303_fail
+    ($I12, $I11) = rx299_cur."!mark_peek"($I10)
+    rx299_cur."!cursor_pos"($I11)
+    ($P10) = rx299_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx299_pos, "")
+    rx299_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_294_done
-  rxcap_294_fail:
-    goto rx290_fail
-  rxcap_294_done:
-.annotate 'line', 102
-  # rx rxquantr295 ** 0..1
-    set_addr $I10, rxquantr295_done
-    rx290_cur."!mark_push"(0, rx290_pos, $I10)
-  rxquantr295_loop:
-  # rx rxquantr296 ** 0..*
-    set_addr $I10, rxquantr296_done
-    rx290_cur."!mark_push"(0, rx290_pos, $I10)
-  rxquantr296_loop:
-  # rx enumcharlist negate=0 
-    ge rx290_pos, rx290_eos, rx290_fail
-    sub $I10, rx290_pos, rx290_off
-    substr $S10, rx290_tgt, $I10, 1
+    goto rxcap_303_done
+  rxcap_303_fail:
+    goto rx299_fail
+  rxcap_303_done:
+.annotate 'line', 109
+  # rx rxquantr304 ** 0..1
+    set_addr $I10, rxquantr304_done
+    rx299_cur."!mark_push"(0, rx299_pos, $I10)
+  rxquantr304_loop:
+  # rx enumcharlist_q negate=0  r 0..-1
+    sub $I10, rx299_pos, rx299_off
+    set rx299_rep, 0
+    sub $I12, rx299_eos, rx299_pos
+  rxenumcharlistq305_loop:
+    le $I12, 0, rxenumcharlistq305_done
+    substr $S10, rx299_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, rx290_fail
-    inc rx290_pos
-    set_addr $I10, rxquantr296_done
-    (rx290_rep) = rx290_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr296_done
-    rx290_cur."!mark_push"(rx290_rep, rx290_pos, $I10)
-    goto rxquantr296_loop
-  rxquantr296_done:
+    lt $I11, 0, rxenumcharlistq305_done
+    inc rx299_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq305_loop
+  rxenumcharlistq305_done:
+    add rx299_pos, rx299_pos, rx299_rep
   # rx literal  "#= "
-    add $I11, rx290_pos, 3
-    gt $I11, rx290_eos, rx290_fail
-    sub $I11, rx290_pos, rx290_off
-    substr $S10, rx290_tgt, $I11, 3
-    ne $S10, "#= ", rx290_fail
-    add rx290_pos, 3
-  # rx rxquantr297 ** 0..*
-    set_addr $I10, rxquantr297_done
-    rx290_cur."!mark_push"(0, rx290_pos, $I10)
-  rxquantr297_loop:
-  # rx enumcharlist negate=0 
-    ge rx290_pos, rx290_eos, rx290_fail
-    sub $I10, rx290_pos, rx290_off
-    substr $S10, rx290_tgt, $I10, 1
+    add $I11, rx299_pos, 3
+    gt $I11, rx299_eos, rx299_fail
+    sub $I11, rx299_pos, rx299_off
+    substr $S10, rx299_tgt, $I11, 3
+    ne $S10, "#= ", rx299_fail
+    add rx299_pos, 3
+  # rx enumcharlist_q negate=0  r 0..-1
+    sub $I10, rx299_pos, rx299_off
+    set rx299_rep, 0
+    sub $I12, rx299_eos, rx299_pos
+  rxenumcharlistq306_loop:
+    le $I12, 0, rxenumcharlistq306_done
+    substr $S10, rx299_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, rx290_fail
-    inc rx290_pos
-    set_addr $I10, rxquantr297_done
-    (rx290_rep) = rx290_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr297_done
-    rx290_cur."!mark_push"(rx290_rep, rx290_pos, $I10)
-    goto rxquantr297_loop
-  rxquantr297_done:
+    lt $I11, 0, rxenumcharlistq306_done
+    inc rx299_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq306_loop
+  rxenumcharlistq306_done:
+    add rx299_pos, rx299_pos, rx299_rep
   # rx subcapture "key"
-    set_addr $I10, rxcap_300_fail
-    rx290_cur."!mark_push"(0, rx290_pos, $I10)
+    set_addr $I10, rxcap_309_fail
+    rx299_cur."!mark_push"(0, rx299_pos, $I10)
   # rx charclass_q S r 1..-1
-    sub $I10, rx290_pos, rx290_off
-    find_cclass $I11, 32, rx290_tgt, $I10, rx290_eos
+    sub $I10, rx299_pos, rx299_off
+    find_cclass $I11, 32, rx299_tgt, $I10, rx299_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx290_fail
-    add rx290_pos, rx290_off, $I11
-  # rx rxquantr298 ** 0..*
-    set_addr $I10, rxquantr298_done
-    rx290_cur."!mark_push"(0, rx290_pos, $I10)
-  rxquantr298_loop:
-  # rx rxquantr299 ** 1..*
-    set_addr $I10, rxquantr299_done
-    rx290_cur."!mark_push"(0, -1, $I10)
-  rxquantr299_loop:
-  # rx enumcharlist negate=0 
-    ge rx290_pos, rx290_eos, rx290_fail
-    sub $I10, rx290_pos, rx290_off
-    substr $S10, rx290_tgt, $I10, 1
+    lt $I11, $I12, rx299_fail
+    add rx299_pos, rx299_off, $I11
+  # rx rxquantr307 ** 0..*
+    set_addr $I10, rxquantr307_done
+    rx299_cur."!mark_push"(0, rx299_pos, $I10)
+  rxquantr307_loop:
+  # rx enumcharlist_q negate=0  r 1..-1
+    sub $I10, rx299_pos, rx299_off
+    set rx299_rep, 0
+    sub $I12, rx299_eos, rx299_pos
+  rxenumcharlistq308_loop:
+    le $I12, 0, rxenumcharlistq308_done
+    substr $S10, rx299_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, rx290_fail
-    inc rx290_pos
-    set_addr $I10, rxquantr299_done
-    (rx290_rep) = rx290_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr299_done
-    rx290_cur."!mark_push"(rx290_rep, rx290_pos, $I10)
-    goto rxquantr299_loop
-  rxquantr299_done:
+    lt $I11, 0, rxenumcharlistq308_done
+    inc rx299_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq308_loop
+  rxenumcharlistq308_done:
+    lt rx299_rep, 1, rx299_fail
+    add rx299_pos, rx299_pos, rx299_rep
   # rx charclass_q S r 1..-1
-    sub $I10, rx290_pos, rx290_off
-    find_cclass $I11, 32, rx290_tgt, $I10, rx290_eos
+    sub $I10, rx299_pos, rx299_off
+    find_cclass $I11, 32, rx299_tgt, $I10, rx299_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx290_fail
-    add rx290_pos, rx290_off, $I11
-    set_addr $I10, rxquantr298_done
-    (rx290_rep) = rx290_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr298_done
-    rx290_cur."!mark_push"(rx290_rep, rx290_pos, $I10)
-    goto rxquantr298_loop
-  rxquantr298_done:
-    set_addr $I10, rxcap_300_fail
-    ($I12, $I11) = rx290_cur."!mark_peek"($I10)
-    rx290_cur."!cursor_pos"($I11)
-    ($P10) = rx290_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx290_pos, "")
-    rx290_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx299_fail
+    add rx299_pos, rx299_off, $I11
+    set_addr $I10, rxquantr307_done
+    (rx299_rep) = rx299_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr307_done
+    rx299_cur."!mark_push"(rx299_rep, rx299_pos, $I10)
+    goto rxquantr307_loop
+  rxquantr307_done:
+    set_addr $I10, rxcap_309_fail
+    ($I12, $I11) = rx299_cur."!mark_peek"($I10)
+    rx299_cur."!cursor_pos"($I11)
+    ($P10) = rx299_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx299_pos, "")
+    rx299_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("key")
-    goto rxcap_300_done
-  rxcap_300_fail:
-    goto rx290_fail
-  rxcap_300_done:
-    set_addr $I10, rxquantr295_done
-    (rx290_rep) = rx290_cur."!mark_commit"($I10)
-  rxquantr295_done:
-.annotate 'line', 100
-  # rx pass
-    rx290_cur."!cursor_pass"(rx290_pos, "metachar:sym<{*}>")
-    rx290_cur."!cursor_debug"("PASS  ", "metachar:sym<{*}>", " at pos=", rx290_pos)
-    .return (rx290_cur)
-  rx290_restart:
-.annotate 'line', 3
-    rx290_cur."!cursor_debug"("NEXT ", "metachar:sym<{*}>")
-  rx290_fail:
-    (rx290_rep, rx290_pos, $I10, $P10) = rx290_cur."!mark_fail"(0)
-    lt rx290_pos, -1, rx290_done
-    eq rx290_pos, -1, rx290_fail
-    jump $I10
-  rx290_done:
-    rx290_cur."!cursor_fail"()
-    rx290_cur."!cursor_debug"("FAIL  ", "metachar:sym<{*}>")
-    .return (rx290_cur)
+    goto rxcap_309_done
+  rxcap_309_fail:
+    goto rx299_fail
+  rxcap_309_done:
+    set_addr $I10, rxquantr304_done
+    (rx299_rep) = rx299_cur."!mark_commit"($I10)
+  rxquantr304_done:
+.annotate 'line', 107
+  # rx pass
+    rx299_cur."!cursor_pass"(rx299_pos, "metachar:sym<{*}>")
+    if_null rx299_debug, debug_315
+    rx299_cur."!cursor_debug"("PASS", "metachar:sym<{*}>", " at pos=", rx299_pos)
+  debug_315:
+    .return (rx299_cur)
+  rx299_restart:
+.annotate 'line', 3
+    if_null rx299_debug, debug_316
+    rx299_cur."!cursor_debug"("NEXT", "metachar:sym<{*}>")
+  debug_316:
+  rx299_fail:
+    (rx299_rep, rx299_pos, $I10, $P10) = rx299_cur."!mark_fail"(0)
+    lt rx299_pos, -1, rx299_done
+    eq rx299_pos, -1, rx299_fail
+    jump $I10
+  rx299_done:
+    rx299_cur."!cursor_fail"()
+    if_null rx299_debug, debug_317
+    rx299_cur."!cursor_debug"("FAIL", "metachar:sym<{*}>")
+  debug_317:
+    .return (rx299_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<{*}>"  :subid("86_1280467470.54449") :method
-.annotate 'line', 3
-    new $P292, "ResizablePMCArray"
-    push $P292, "{*}"
-    .return ($P292)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<assert>"  :subid("87_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx302_tgt
-    .local int rx302_pos
-    .local int rx302_off
-    .local int rx302_eos
-    .local int rx302_rep
-    .local pmc rx302_cur
-    (rx302_cur, rx302_pos, rx302_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx302_cur
-    .local pmc match
-    .lex "$/", match
-    length rx302_eos, rx302_tgt
-    gt rx302_pos, rx302_eos, rx302_done
-    set rx302_off, 0
-    lt rx302_pos, 2, rx302_start
-    sub rx302_off, rx302_pos, 1
-    substr rx302_tgt, rx302_tgt, rx302_off
-  rx302_start:
-    eq $I10, 1, rx302_restart
-    rx302_cur."!cursor_debug"("START ", "metachar:sym<assert>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan306_done
-    goto rxscan306_scan
-  rxscan306_loop:
-    ($P10) = rx302_cur."from"()
-    inc $P10
-    set rx302_pos, $P10
-    ge rx302_pos, rx302_eos, rxscan306_done
-  rxscan306_scan:
-    set_addr $I10, rxscan306_loop
-    rx302_cur."!mark_push"(0, rx302_pos, $I10)
-  rxscan306_done:
-.annotate 'line', 105
+.sub "!PREFIX__metachar:sym<{*}>"  :subid("88_1282323996.47527") :method
+.annotate 'line', 3
+    new $P301, "ResizablePMCArray"
+    push $P301, "{*}"
+    .return ($P301)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<assert>"  :subid("89_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx311_tgt
+    .local int rx311_pos
+    .local int rx311_off
+    .local int rx311_eos
+    .local int rx311_rep
+    .local pmc rx311_cur
+    .local pmc rx311_debug
+    (rx311_cur, rx311_pos, rx311_tgt, $I10) = self."!cursor_start"()
+    getattribute rx311_debug, rx311_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx311_cur
+    .local pmc match
+    .lex "$/", match
+    length rx311_eos, rx311_tgt
+    gt rx311_pos, rx311_eos, rx311_done
+    set rx311_off, 0
+    lt rx311_pos, 2, rx311_start
+    sub rx311_off, rx311_pos, 1
+    substr rx311_tgt, rx311_tgt, rx311_off
+  rx311_start:
+    eq $I10, 1, rx311_restart
+    if_null rx311_debug, debug_318
+    rx311_cur."!cursor_debug"("START", "metachar:sym<assert>")
+  debug_318:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan315_done
+    goto rxscan315_scan
+  rxscan315_loop:
+    ($P10) = rx311_cur."from"()
+    inc $P10
+    set rx311_pos, $P10
+    ge rx311_pos, rx311_eos, rxscan315_done
+  rxscan315_scan:
+    set_addr $I10, rxscan315_loop
+    rx311_cur."!mark_push"(0, rx311_pos, $I10)
+  rxscan315_done:
+.annotate 'line', 112
   # rx literal  "<"
-    add $I11, rx302_pos, 1
-    gt $I11, rx302_eos, rx302_fail
-    sub $I11, rx302_pos, rx302_off
-    substr $S10, rx302_tgt, $I11, 1
-    ne $S10, "<", rx302_fail
-    add rx302_pos, 1
+    add $I11, rx311_pos, 1
+    gt $I11, rx311_eos, rx311_fail
+    sub $I11, rx311_pos, rx311_off
+    ord $I11, rx311_tgt, $I11
+    ne $I11, 60, rx311_fail
+    add rx311_pos, 1
   # rx subrule "assertion" subtype=capture negate=
-    rx302_cur."!cursor_pos"(rx302_pos)
-    $P10 = rx302_cur."assertion"()
-    unless $P10, rx302_fail
-    rx302_cur."!mark_push"(0, -1, 0, $P10)
+    rx311_cur."!cursor_pos"(rx311_pos)
+    $P10 = rx311_cur."assertion"()
+    unless $P10, rx311_fail
+    rx311_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx302_pos = $P10."pos"()
-  alt307_0:
-.annotate 'line', 106
-    set_addr $I10, alt307_1
-    rx302_cur."!mark_push"(0, rx302_pos, $I10)
+    rx311_pos = $P10."pos"()
+  alt316_0:
+.annotate 'line', 113
+    set_addr $I10, alt316_1
+    rx311_cur."!mark_push"(0, rx311_pos, $I10)
   # rx literal  ">"
-    add $I11, rx302_pos, 1
-    gt $I11, rx302_eos, rx302_fail
-    sub $I11, rx302_pos, rx302_off
-    substr $S10, rx302_tgt, $I11, 1
-    ne $S10, ">", rx302_fail
-    add rx302_pos, 1
-    goto alt307_end
-  alt307_1:
+    add $I11, rx311_pos, 1
+    gt $I11, rx311_eos, rx311_fail
+    sub $I11, rx311_pos, rx311_off
+    ord $I11, rx311_tgt, $I11
+    ne $I11, 62, rx311_fail
+    add rx311_pos, 1
+    goto alt316_end
+  alt316_1:
   # rx subrule "panic" subtype=method negate=
-    rx302_cur."!cursor_pos"(rx302_pos)
-    $P10 = rx302_cur."panic"("regex assertion not terminated by angle bracket")
-    unless $P10, rx302_fail
-    rx302_pos = $P10."pos"()
-  alt307_end:
-.annotate 'line', 104
+    rx311_cur."!cursor_pos"(rx311_pos)
+    $P10 = rx311_cur."panic"("regex assertion not terminated by angle bracket")
+    unless $P10, rx311_fail
+    rx311_pos = $P10."pos"()
+  alt316_end:
+.annotate 'line', 111
   # rx pass
-    rx302_cur."!cursor_pass"(rx302_pos, "metachar:sym<assert>")
-    rx302_cur."!cursor_debug"("PASS  ", "metachar:sym<assert>", " at pos=", rx302_pos)
-    .return (rx302_cur)
-  rx302_restart:
-.annotate 'line', 3
-    rx302_cur."!cursor_debug"("NEXT ", "metachar:sym<assert>")
-  rx302_fail:
-    (rx302_rep, rx302_pos, $I10, $P10) = rx302_cur."!mark_fail"(0)
-    lt rx302_pos, -1, rx302_done
-    eq rx302_pos, -1, rx302_fail
-    jump $I10
-  rx302_done:
-    rx302_cur."!cursor_fail"()
-    rx302_cur."!cursor_debug"("FAIL  ", "metachar:sym<assert>")
-    .return (rx302_cur)
+    rx311_cur."!cursor_pass"(rx311_pos, "metachar:sym<assert>")
+    if_null rx311_debug, debug_319
+    rx311_cur."!cursor_debug"("PASS", "metachar:sym<assert>", " at pos=", rx311_pos)
+  debug_319:
+    .return (rx311_cur)
+  rx311_restart:
+.annotate 'line', 3
+    if_null rx311_debug, debug_320
+    rx311_cur."!cursor_debug"("NEXT", "metachar:sym<assert>")
+  debug_320:
+  rx311_fail:
+    (rx311_rep, rx311_pos, $I10, $P10) = rx311_cur."!mark_fail"(0)
+    lt rx311_pos, -1, rx311_done
+    eq rx311_pos, -1, rx311_fail
+    jump $I10
+  rx311_done:
+    rx311_cur."!cursor_fail"()
+    if_null rx311_debug, debug_321
+    rx311_cur."!cursor_debug"("FAIL", "metachar:sym<assert>")
+  debug_321:
+    .return (rx311_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<assert>"  :subid("88_1280467470.54449") :method
-.annotate 'line', 3
-    $P304 = self."!PREFIX__!subrule"("assertion", "<")
-    new $P305, "ResizablePMCArray"
-    push $P305, $P304
-    .return ($P305)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<var>"  :subid("89_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx309_tgt
-    .local int rx309_pos
-    .local int rx309_off
-    .local int rx309_eos
-    .local int rx309_rep
-    .local pmc rx309_cur
-    (rx309_cur, rx309_pos, rx309_tgt, $I10) = self."!cursor_start"()
-    rx309_cur."!cursor_caparray"("quantified_atom")
-    .lex unicode:"$\x{a2}", rx309_cur
-    .local pmc match
-    .lex "$/", match
-    length rx309_eos, rx309_tgt
-    gt rx309_pos, rx309_eos, rx309_done
-    set rx309_off, 0
-    lt rx309_pos, 2, rx309_start
-    sub rx309_off, rx309_pos, 1
-    substr rx309_tgt, rx309_tgt, rx309_off
-  rx309_start:
-    eq $I10, 1, rx309_restart
-    rx309_cur."!cursor_debug"("START ", "metachar:sym<var>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan312_done
-    goto rxscan312_scan
-  rxscan312_loop:
-    ($P10) = rx309_cur."from"()
-    inc $P10
-    set rx309_pos, $P10
-    ge rx309_pos, rx309_eos, rxscan312_done
-  rxscan312_scan:
-    set_addr $I10, rxscan312_loop
-    rx309_cur."!mark_push"(0, rx309_pos, $I10)
-  rxscan312_done:
-  alt313_0:
-.annotate 'line', 110
-    set_addr $I10, alt313_1
-    rx309_cur."!mark_push"(0, rx309_pos, $I10)
-.annotate 'line', 111
+.sub "!PREFIX__metachar:sym<assert>"  :subid("90_1282323996.47527") :method
+.annotate 'line', 3
+    $P313 = self."!PREFIX__!subrule"("assertion", "<")
+    new $P314, "ResizablePMCArray"
+    push $P314, $P313
+    .return ($P314)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<var>"  :subid("91_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx318_tgt
+    .local int rx318_pos
+    .local int rx318_off
+    .local int rx318_eos
+    .local int rx318_rep
+    .local pmc rx318_cur
+    .local pmc rx318_debug
+    (rx318_cur, rx318_pos, rx318_tgt, $I10) = self."!cursor_start"()
+    rx318_cur."!cursor_caparray"("quantified_atom")
+    getattribute rx318_debug, rx318_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx318_cur
+    .local pmc match
+    .lex "$/", match
+    length rx318_eos, rx318_tgt
+    gt rx318_pos, rx318_eos, rx318_done
+    set rx318_off, 0
+    lt rx318_pos, 2, rx318_start
+    sub rx318_off, rx318_pos, 1
+    substr rx318_tgt, rx318_tgt, rx318_off
+  rx318_start:
+    eq $I10, 1, rx318_restart
+    if_null rx318_debug, debug_322
+    rx318_cur."!cursor_debug"("START", "metachar:sym<var>")
+  debug_322:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan321_done
+    goto rxscan321_scan
+  rxscan321_loop:
+    ($P10) = rx318_cur."from"()
+    inc $P10
+    set rx318_pos, $P10
+    ge rx318_pos, rx318_eos, rxscan321_done
+  rxscan321_scan:
+    set_addr $I10, rxscan321_loop
+    rx318_cur."!mark_push"(0, rx318_pos, $I10)
+  rxscan321_done:
+  alt322_0:
+.annotate 'line', 117
+    set_addr $I10, alt322_1
+    rx318_cur."!mark_push"(0, rx318_pos, $I10)
+.annotate 'line', 118
   # rx literal  "$<"
-    add $I11, rx309_pos, 2
-    gt $I11, rx309_eos, rx309_fail
-    sub $I11, rx309_pos, rx309_off
-    substr $S10, rx309_tgt, $I11, 2
-    ne $S10, "$<", rx309_fail
-    add rx309_pos, 2
+    add $I11, rx318_pos, 2
+    gt $I11, rx318_eos, rx318_fail
+    sub $I11, rx318_pos, rx318_off
+    substr $S10, rx318_tgt, $I11, 2
+    ne $S10, "$<", rx318_fail
+    add rx318_pos, 2
   # rx subcapture "name"
-    set_addr $I10, rxcap_315_fail
-    rx309_cur."!mark_push"(0, rx309_pos, $I10)
-  # rx rxquantr314 ** 1..*
-    set_addr $I10, rxquantr314_done
-    rx309_cur."!mark_push"(0, -1, $I10)
-  rxquantr314_loop:
-  # rx enumcharlist negate=1 
-    ge rx309_pos, rx309_eos, rx309_fail
-    sub $I10, rx309_pos, rx309_off
-    substr $S10, rx309_tgt, $I10, 1
+    set_addr $I10, rxcap_324_fail
+    rx318_cur."!mark_push"(0, rx318_pos, $I10)
+  # rx enumcharlist_q negate=1  r 1..-1
+    sub $I10, rx318_pos, rx318_off
+    set rx318_rep, 0
+    sub $I12, rx318_eos, rx318_pos
+  rxenumcharlistq323_loop:
+    le $I12, 0, rxenumcharlistq323_done
+    substr $S10, rx318_tgt, $I10, 1
     index $I11, ">", $S10
-    ge $I11, 0, rx309_fail
-    inc rx309_pos
-    set_addr $I10, rxquantr314_done
-    (rx309_rep) = rx309_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr314_done
-    rx309_cur."!mark_push"(rx309_rep, rx309_pos, $I10)
-    goto rxquantr314_loop
-  rxquantr314_done:
-    set_addr $I10, rxcap_315_fail
-    ($I12, $I11) = rx309_cur."!mark_peek"($I10)
-    rx309_cur."!cursor_pos"($I11)
-    ($P10) = rx309_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx309_pos, "")
-    rx309_cur."!mark_push"(0, -1, 0, $P10)
+    ge $I11, 0, rxenumcharlistq323_done
+    inc rx318_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq323_loop
+  rxenumcharlistq323_done:
+    lt rx318_rep, 1, rx318_fail
+    add rx318_pos, rx318_pos, rx318_rep
+    set_addr $I10, rxcap_324_fail
+    ($I12, $I11) = rx318_cur."!mark_peek"($I10)
+    rx318_cur."!cursor_pos"($I11)
+    ($P10) = rx318_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx318_pos, "")
+    rx318_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    goto rxcap_315_done
-  rxcap_315_fail:
-    goto rx309_fail
-  rxcap_315_done:
+    goto rxcap_324_done
+  rxcap_324_fail:
+    goto rx318_fail
+  rxcap_324_done:
   # rx literal  ">"
-    add $I11, rx309_pos, 1
-    gt $I11, rx309_eos, rx309_fail
-    sub $I11, rx309_pos, rx309_off
-    substr $S10, rx309_tgt, $I11, 1
-    ne $S10, ">", rx309_fail
-    add rx309_pos, 1
-    goto alt313_end
-  alt313_1:
-.annotate 'line', 112
+    add $I11, rx318_pos, 1
+    gt $I11, rx318_eos, rx318_fail
+    sub $I11, rx318_pos, rx318_off
+    ord $I11, rx318_tgt, $I11
+    ne $I11, 62, rx318_fail
+    add rx318_pos, 1
+    goto alt322_end
+  alt322_1:
+.annotate 'line', 119
   # rx literal  "$"
-    add $I11, rx309_pos, 1
-    gt $I11, rx309_eos, rx309_fail
-    sub $I11, rx309_pos, rx309_off
-    substr $S10, rx309_tgt, $I11, 1
-    ne $S10, "$", rx309_fail
-    add rx309_pos, 1
+    add $I11, rx318_pos, 1
+    gt $I11, rx318_eos, rx318_fail
+    sub $I11, rx318_pos, rx318_off
+    ord $I11, rx318_tgt, $I11
+    ne $I11, 36, rx318_fail
+    add rx318_pos, 1
   # rx subcapture "pos"
-    set_addr $I10, rxcap_316_fail
-    rx309_cur."!mark_push"(0, rx309_pos, $I10)
+    set_addr $I10, rxcap_325_fail
+    rx318_cur."!mark_push"(0, rx318_pos, $I10)
   # rx charclass_q d r 1..-1
-    sub $I10, rx309_pos, rx309_off
-    find_not_cclass $I11, 8, rx309_tgt, $I10, rx309_eos
+    sub $I10, rx318_pos, rx318_off
+    find_not_cclass $I11, 8, rx318_tgt, $I10, rx318_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx309_fail
-    add rx309_pos, rx309_off, $I11
-    set_addr $I10, rxcap_316_fail
-    ($I12, $I11) = rx309_cur."!mark_peek"($I10)
-    rx309_cur."!cursor_pos"($I11)
-    ($P10) = rx309_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx309_pos, "")
-    rx309_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx318_fail
+    add rx318_pos, rx318_off, $I11
+    set_addr $I10, rxcap_325_fail
+    ($I12, $I11) = rx318_cur."!mark_peek"($I10)
+    rx318_cur."!cursor_pos"($I11)
+    ($P10) = rx318_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx318_pos, "")
+    rx318_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pos")
-    goto rxcap_316_done
-  rxcap_316_fail:
-    goto rx309_fail
-  rxcap_316_done:
-  alt313_end:
-.annotate 'line', 115
-  # rx rxquantr317 ** 0..1
-    set_addr $I10, rxquantr317_done
-    rx309_cur."!mark_push"(0, rx309_pos, $I10)
-  rxquantr317_loop:
+    goto rxcap_325_done
+  rxcap_325_fail:
+    goto rx318_fail
+  rxcap_325_done:
+  alt322_end:
+.annotate 'line', 122
+  # rx rxquantr326 ** 0..1
+    set_addr $I10, rxquantr326_done
+    rx318_cur."!mark_push"(0, rx318_pos, $I10)
+  rxquantr326_loop:
   # rx subrule "ws" subtype=method negate=
-    rx309_cur."!cursor_pos"(rx309_pos)
-    $P10 = rx309_cur."ws"()
-    unless $P10, rx309_fail
-    rx309_pos = $P10."pos"()
+    rx318_cur."!cursor_pos"(rx318_pos)
+    $P10 = rx318_cur."ws"()
+    unless $P10, rx318_fail
+    rx318_pos = $P10."pos"()
   # rx literal  "="
-    add $I11, rx309_pos, 1
-    gt $I11, rx309_eos, rx309_fail
-    sub $I11, rx309_pos, rx309_off
-    substr $S10, rx309_tgt, $I11, 1
-    ne $S10, "=", rx309_fail
-    add rx309_pos, 1
+    add $I11, rx318_pos, 1
+    gt $I11, rx318_eos, rx318_fail
+    sub $I11, rx318_pos, rx318_off
+    ord $I11, rx318_tgt, $I11
+    ne $I11, 61, rx318_fail
+    add rx318_pos, 1
   # rx subrule "ws" subtype=method negate=
-    rx309_cur."!cursor_pos"(rx309_pos)
-    $P10 = rx309_cur."ws"()
-    unless $P10, rx309_fail
-    rx309_pos = $P10."pos"()
+    rx318_cur."!cursor_pos"(rx318_pos)
+    $P10 = rx318_cur."ws"()
+    unless $P10, rx318_fail
+    rx318_pos = $P10."pos"()
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx309_cur."!cursor_pos"(rx309_pos)
-    $P10 = rx309_cur."quantified_atom"()
-    unless $P10, rx309_fail
-    rx309_cur."!mark_push"(0, -1, 0, $P10)
+    rx318_cur."!cursor_pos"(rx318_pos)
+    $P10 = rx318_cur."quantified_atom"()
+    unless $P10, rx318_fail
+    rx318_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quantified_atom")
-    rx309_pos = $P10."pos"()
-    set_addr $I10, rxquantr317_done
-    (rx309_rep) = rx309_cur."!mark_commit"($I10)
-  rxquantr317_done:
-.annotate 'line', 109
+    rx318_pos = $P10."pos"()
+    set_addr $I10, rxquantr326_done
+    (rx318_rep) = rx318_cur."!mark_commit"($I10)
+  rxquantr326_done:
+.annotate 'line', 116
   # rx pass
-    rx309_cur."!cursor_pass"(rx309_pos, "metachar:sym<var>")
-    rx309_cur."!cursor_debug"("PASS  ", "metachar:sym<var>", " at pos=", rx309_pos)
-    .return (rx309_cur)
-  rx309_restart:
-.annotate 'line', 3
-    rx309_cur."!cursor_debug"("NEXT ", "metachar:sym<var>")
-  rx309_fail:
-    (rx309_rep, rx309_pos, $I10, $P10) = rx309_cur."!mark_fail"(0)
-    lt rx309_pos, -1, rx309_done
-    eq rx309_pos, -1, rx309_fail
-    jump $I10
-  rx309_done:
-    rx309_cur."!cursor_fail"()
-    rx309_cur."!cursor_debug"("FAIL  ", "metachar:sym<var>")
-    .return (rx309_cur)
+    rx318_cur."!cursor_pass"(rx318_pos, "metachar:sym<var>")
+    if_null rx318_debug, debug_323
+    rx318_cur."!cursor_debug"("PASS", "metachar:sym<var>", " at pos=", rx318_pos)
+  debug_323:
+    .return (rx318_cur)
+  rx318_restart:
+.annotate 'line', 3
+    if_null rx318_debug, debug_324
+    rx318_cur."!cursor_debug"("NEXT", "metachar:sym<var>")
+  debug_324:
+  rx318_fail:
+    (rx318_rep, rx318_pos, $I10, $P10) = rx318_cur."!mark_fail"(0)
+    lt rx318_pos, -1, rx318_done
+    eq rx318_pos, -1, rx318_fail
+    jump $I10
+  rx318_done:
+    rx318_cur."!cursor_fail"()
+    if_null rx318_debug, debug_325
+    rx318_cur."!cursor_debug"("FAIL", "metachar:sym<var>")
+  debug_325:
+    .return (rx318_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<var>"  :subid("90_1280467470.54449") :method
-.annotate 'line', 3
-    new $P311, "ResizablePMCArray"
-    push $P311, "$"
-    push $P311, "$<"
-    .return ($P311)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<PIR>"  :subid("91_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx319_tgt
-    .local int rx319_pos
-    .local int rx319_off
-    .local int rx319_eos
-    .local int rx319_rep
-    .local pmc rx319_cur
-    (rx319_cur, rx319_pos, rx319_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx319_cur
-    .local pmc match
-    .lex "$/", match
-    length rx319_eos, rx319_tgt
-    gt rx319_pos, rx319_eos, rx319_done
-    set rx319_off, 0
-    lt rx319_pos, 2, rx319_start
-    sub rx319_off, rx319_pos, 1
-    substr rx319_tgt, rx319_tgt, rx319_off
-  rx319_start:
-    eq $I10, 1, rx319_restart
-    rx319_cur."!cursor_debug"("START ", "metachar:sym<PIR>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan322_done
-    goto rxscan322_scan
-  rxscan322_loop:
-    ($P10) = rx319_cur."from"()
-    inc $P10
-    set rx319_pos, $P10
-    ge rx319_pos, rx319_eos, rxscan322_done
-  rxscan322_scan:
-    set_addr $I10, rxscan322_loop
-    rx319_cur."!mark_push"(0, rx319_pos, $I10)
-  rxscan322_done:
-.annotate 'line', 119
+.sub "!PREFIX__metachar:sym<var>"  :subid("92_1282323996.47527") :method
+.annotate 'line', 3
+    new $P320, "ResizablePMCArray"
+    push $P320, "$"
+    push $P320, "$<"
+    .return ($P320)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<PIR>"  :subid("93_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx328_tgt
+    .local int rx328_pos
+    .local int rx328_off
+    .local int rx328_eos
+    .local int rx328_rep
+    .local pmc rx328_cur
+    .local pmc rx328_debug
+    (rx328_cur, rx328_pos, rx328_tgt, $I10) = self."!cursor_start"()
+    getattribute rx328_debug, rx328_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx328_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx328_restart
+    if_null rx328_debug, debug_326
+    rx328_cur."!cursor_debug"("START", "metachar:sym<PIR>")
+  debug_326:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan331_done
+    goto rxscan331_scan
+  rxscan331_loop:
+    ($P10) = rx328_cur."from"()
+    inc $P10
+    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', 126
   # rx literal  ":PIR{{"
-    add $I11, rx319_pos, 6
-    gt $I11, rx319_eos, rx319_fail
-    sub $I11, rx319_pos, rx319_off
-    substr $S10, rx319_tgt, $I11, 6
-    ne $S10, ":PIR{{", rx319_fail
-    add rx319_pos, 6
+    add $I11, rx328_pos, 6
+    gt $I11, rx328_eos, rx328_fail
+    sub $I11, rx328_pos, rx328_off
+    substr $S10, rx328_tgt, $I11, 6
+    ne $S10, ":PIR{{", rx328_fail
+    add rx328_pos, 6
   # rx subcapture "pir"
-    set_addr $I10, rxcap_325_fail
-    rx319_cur."!mark_push"(0, rx319_pos, $I10)
-  # rx rxquantf323 ** 0..*
-    set_addr $I10, rxquantf323_loop
-    rx319_cur."!mark_push"(0, rx319_pos, $I10)
-    goto rxquantf323_done
-  rxquantf323_loop:
+    set_addr $I10, rxcap_334_fail
+    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+  # rx rxquantf332 ** 0..*
+    set_addr $I10, rxquantf332_loop
+    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+    goto rxquantf332_done
+  rxquantf332_loop:
   # rx charclass .
-    ge rx319_pos, rx319_eos, rx319_fail
-    inc rx319_pos
-    set_addr $I10, rxquantf323_loop
-    rx319_cur."!mark_push"(rx319_rep, rx319_pos, $I10)
-  rxquantf323_done:
-    set_addr $I10, rxcap_325_fail
-    ($I12, $I11) = rx319_cur."!mark_peek"($I10)
-    rx319_cur."!cursor_pos"($I11)
-    ($P10) = rx319_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx319_pos, "")
-    rx319_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx328_pos, rx328_eos, rx328_fail
+    inc rx328_pos
+    set_addr $I10, rxquantf332_loop
+    rx328_cur."!mark_push"(rx328_rep, rx328_pos, $I10)
+  rxquantf332_done:
+    set_addr $I10, rxcap_334_fail
+    ($I12, $I11) = rx328_cur."!mark_peek"($I10)
+    rx328_cur."!cursor_pos"($I11)
+    ($P10) = rx328_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx328_pos, "")
+    rx328_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pir")
-    goto rxcap_325_done
-  rxcap_325_fail:
-    goto rx319_fail
-  rxcap_325_done:
+    goto rxcap_334_done
+  rxcap_334_fail:
+    goto rx328_fail
+  rxcap_334_done:
   # rx literal  "}}"
-    add $I11, rx319_pos, 2
-    gt $I11, rx319_eos, rx319_fail
-    sub $I11, rx319_pos, rx319_off
-    substr $S10, rx319_tgt, $I11, 2
-    ne $S10, "}}", rx319_fail
-    add rx319_pos, 2
-.annotate 'line', 118
+    add $I11, rx328_pos, 2
+    gt $I11, rx328_eos, rx328_fail
+    sub $I11, rx328_pos, rx328_off
+    substr $S10, rx328_tgt, $I11, 2
+    ne $S10, "}}", rx328_fail
+    add rx328_pos, 2
+.annotate 'line', 125
   # rx pass
-    rx319_cur."!cursor_pass"(rx319_pos, "metachar:sym<PIR>")
-    rx319_cur."!cursor_debug"("PASS  ", "metachar:sym<PIR>", " at pos=", rx319_pos)
-    .return (rx319_cur)
-  rx319_restart:
+    rx328_cur."!cursor_pass"(rx328_pos, "metachar:sym<PIR>")
+    if_null rx328_debug, debug_327
+    rx328_cur."!cursor_debug"("PASS", "metachar:sym<PIR>", " at pos=", rx328_pos)
+  debug_327:
+    .return (rx328_cur)
+  rx328_restart:
 .annotate 'line', 3
-    rx319_cur."!cursor_debug"("NEXT ", "metachar:sym<PIR>")
-  rx319_fail:
-    (rx319_rep, rx319_pos, $I10, $P10) = rx319_cur."!mark_fail"(0)
-    lt rx319_pos, -1, rx319_done
-    eq rx319_pos, -1, rx319_fail
+    if_null rx328_debug, debug_328
+    rx328_cur."!cursor_debug"("NEXT", "metachar:sym<PIR>")
+  debug_328:
+  rx328_fail:
+    (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
-  rx319_done:
-    rx319_cur."!cursor_fail"()
-    rx319_cur."!cursor_debug"("FAIL  ", "metachar:sym<PIR>")
-    .return (rx319_cur)
+  rx328_done:
+    rx328_cur."!cursor_fail"()
+    if_null rx328_debug, debug_329
+    rx328_cur."!cursor_debug"("FAIL", "metachar:sym<PIR>")
+  debug_329:
+    .return (rx328_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<PIR>"  :subid("92_1280467470.54449") :method
+.sub "!PREFIX__metachar:sym<PIR>"  :subid("94_1282323996.47527") :method
 .annotate 'line', 3
-    new $P321, "ResizablePMCArray"
-    push $P321, ":PIR{{"
-    .return ($P321)
+    new $P330, "ResizablePMCArray"
+    push $P330, ":PIR{{"
+    .return ($P330)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash"  :subid("93_1280467470.54449") :method
-.annotate 'line', 122
-    $P327 = self."!protoregex"("backslash")
-    .return ($P327)
+.sub "backslash"  :subid("95_1282323996.47527") :method
+.annotate 'line', 129
+    $P336 = self."!protoregex"("backslash")
+    .return ($P336)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash"  :subid("94_1280467470.54449") :method
-.annotate 'line', 122
-    $P329 = self."!PREFIX__!protoregex"("backslash")
-    .return ($P329)
+.sub "!PREFIX__backslash"  :subid("96_1282323996.47527") :method
+.annotate 'line', 129
+    $P338 = self."!PREFIX__!protoregex"("backslash")
+    .return ($P338)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<w>"  :subid("95_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "backslash:sym<w>"  :subid("97_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx331_cur
-    .local pmc match
-    .lex "$/", match
-    length rx331_eos, rx331_tgt
-    gt rx331_pos, rx331_eos, rx331_done
-    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:
-    eq $I10, 1, rx331_restart
-    rx331_cur."!cursor_debug"("START ", "backslash:sym<w>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan334_done
-    goto rxscan334_scan
-  rxscan334_loop:
-    ($P10) = rx331_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', 123
+    .local string rx340_tgt
+    .local int rx340_pos
+    .local int rx340_off
+    .local int rx340_eos
+    .local int rx340_rep
+    .local pmc rx340_cur
+    .local pmc rx340_debug
+    (rx340_cur, rx340_pos, rx340_tgt, $I10) = self."!cursor_start"()
+    getattribute rx340_debug, rx340_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx340_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx340_restart
+    if_null rx340_debug, debug_330
+    rx340_cur."!cursor_debug"("START", "backslash:sym<w>")
+  debug_330:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan343_done
+    goto rxscan343_scan
+  rxscan343_loop:
+    ($P10) = rx340_cur."from"()
+    inc $P10
+    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', 130
   # 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 enumcharlist negate=0 
-    ge rx331_pos, rx331_eos, rx331_fail
-    sub $I10, rx331_pos, rx331_off
-    substr $S10, rx331_tgt, $I10, 1
+    ge rx340_pos, rx340_eos, rx340_fail
+    sub $I10, rx340_pos, rx340_off
+    substr $S10, rx340_tgt, $I10, 1
     index $I11, "dswnDSWN", $S10
-    lt $I11, 0, rx331_fail
-    inc rx331_pos
-    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)
+    lt $I11, 0, rx340_fail
+    inc rx340_pos
+    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:
-  # rx pass
-    rx331_cur."!cursor_pass"(rx331_pos, "backslash:sym<w>")
-    rx331_cur."!cursor_debug"("PASS  ", "backslash:sym<w>", " at pos=", rx331_pos)
-    .return (rx331_cur)
-  rx331_restart:
-.annotate 'line', 3
-    rx331_cur."!cursor_debug"("NEXT ", "backslash:sym<w>")
-  rx331_fail:
-    (rx331_rep, rx331_pos, $I10, $P10) = rx331_cur."!mark_fail"(0)
-    lt rx331_pos, -1, rx331_done
-    eq rx331_pos, -1, rx331_fail
-    jump $I10
-  rx331_done:
-    rx331_cur."!cursor_fail"()
-    rx331_cur."!cursor_debug"("FAIL  ", "backslash:sym<w>")
-    .return (rx331_cur)
+    goto rxcap_344_done
+  rxcap_344_fail:
+    goto rx340_fail
+  rxcap_344_done:
+  # rx pass
+    rx340_cur."!cursor_pass"(rx340_pos, "backslash:sym<w>")
+    if_null rx340_debug, debug_331
+    rx340_cur."!cursor_debug"("PASS", "backslash:sym<w>", " at pos=", rx340_pos)
+  debug_331:
+    .return (rx340_cur)
+  rx340_restart:
+.annotate 'line', 3
+    if_null rx340_debug, debug_332
+    rx340_cur."!cursor_debug"("NEXT", "backslash:sym<w>")
+  debug_332:
+  rx340_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
+  rx340_done:
+    rx340_cur."!cursor_fail"()
+    if_null rx340_debug, debug_333
+    rx340_cur."!cursor_debug"("FAIL", "backslash:sym<w>")
+  debug_333:
+    .return (rx340_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<w>"  :subid("96_1280467470.54449") :method
-.annotate 'line', 3
-    new $P333, "ResizablePMCArray"
-    push $P333, "N"
-    push $P333, "W"
-    push $P333, "S"
-    push $P333, "D"
-    push $P333, "n"
-    push $P333, "w"
-    push $P333, "s"
-    push $P333, "d"
-    .return ($P333)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<b>"  :subid("97_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx337_tgt
-    .local int rx337_pos
-    .local int rx337_off
-    .local int rx337_eos
-    .local int rx337_rep
-    .local pmc rx337_cur
-    (rx337_cur, rx337_pos, rx337_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx337_cur
-    .local pmc match
-    .lex "$/", match
-    length rx337_eos, rx337_tgt
-    gt rx337_pos, rx337_eos, rx337_done
-    set rx337_off, 0
-    lt rx337_pos, 2, rx337_start
-    sub rx337_off, rx337_pos, 1
-    substr rx337_tgt, rx337_tgt, rx337_off
-  rx337_start:
-    eq $I10, 1, rx337_restart
-    rx337_cur."!cursor_debug"("START ", "backslash:sym<b>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan340_done
-    goto rxscan340_scan
-  rxscan340_loop:
-    ($P10) = rx337_cur."from"()
-    inc $P10
-    set rx337_pos, $P10
-    ge rx337_pos, rx337_eos, rxscan340_done
-  rxscan340_scan:
-    set_addr $I10, rxscan340_loop
-    rx337_cur."!mark_push"(0, rx337_pos, $I10)
-  rxscan340_done:
-.annotate 'line', 124
+.sub "!PREFIX__backslash:sym<w>"  :subid("98_1282323996.47527") :method
+.annotate 'line', 3
+    new $P342, "ResizablePMCArray"
+    push $P342, "N"
+    push $P342, "W"
+    push $P342, "S"
+    push $P342, "D"
+    push $P342, "n"
+    push $P342, "w"
+    push $P342, "s"
+    push $P342, "d"
+    .return ($P342)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<b>"  :subid("99_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx346_tgt
+    .local int rx346_pos
+    .local int rx346_off
+    .local int rx346_eos
+    .local int rx346_rep
+    .local pmc rx346_cur
+    .local pmc rx346_debug
+    (rx346_cur, rx346_pos, rx346_tgt, $I10) = self."!cursor_start"()
+    getattribute rx346_debug, rx346_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx346_cur
+    .local pmc match
+    .lex "$/", match
+    length rx346_eos, rx346_tgt
+    gt rx346_pos, rx346_eos, rx346_done
+    set rx346_off, 0
+    lt rx346_pos, 2, rx346_start
+    sub rx346_off, rx346_pos, 1
+    substr rx346_tgt, rx346_tgt, rx346_off
+  rx346_start:
+    eq $I10, 1, rx346_restart
+    if_null rx346_debug, debug_334
+    rx346_cur."!cursor_debug"("START", "backslash:sym<b>")
+  debug_334:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan349_done
+    goto rxscan349_scan
+  rxscan349_loop:
+    ($P10) = rx346_cur."from"()
+    inc $P10
+    set rx346_pos, $P10
+    ge rx346_pos, rx346_eos, rxscan349_done
+  rxscan349_scan:
+    set_addr $I10, rxscan349_loop
+    rx346_cur."!mark_push"(0, rx346_pos, $I10)
+  rxscan349_done:
+.annotate 'line', 131
   # rx subcapture "sym"
-    set_addr $I10, rxcap_341_fail
-    rx337_cur."!mark_push"(0, rx337_pos, $I10)
+    set_addr $I10, rxcap_350_fail
+    rx346_cur."!mark_push"(0, rx346_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx337_pos, rx337_eos, rx337_fail
-    sub $I10, rx337_pos, rx337_off
-    substr $S10, rx337_tgt, $I10, 1
+    ge rx346_pos, rx346_eos, rx346_fail
+    sub $I10, rx346_pos, rx346_off
+    substr $S10, rx346_tgt, $I10, 1
     index $I11, "bB", $S10
-    lt $I11, 0, rx337_fail
-    inc rx337_pos
-    set_addr $I10, rxcap_341_fail
-    ($I12, $I11) = rx337_cur."!mark_peek"($I10)
-    rx337_cur."!cursor_pos"($I11)
-    ($P10) = rx337_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx337_pos, "")
-    rx337_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx346_fail
+    inc rx346_pos
+    set_addr $I10, rxcap_350_fail
+    ($I12, $I11) = rx346_cur."!mark_peek"($I10)
+    rx346_cur."!cursor_pos"($I11)
+    ($P10) = rx346_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx346_pos, "")
+    rx346_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_341_done
-  rxcap_341_fail:
-    goto rx337_fail
-  rxcap_341_done:
-  # rx pass
-    rx337_cur."!cursor_pass"(rx337_pos, "backslash:sym<b>")
-    rx337_cur."!cursor_debug"("PASS  ", "backslash:sym<b>", " at pos=", rx337_pos)
-    .return (rx337_cur)
-  rx337_restart:
-.annotate 'line', 3
-    rx337_cur."!cursor_debug"("NEXT ", "backslash:sym<b>")
-  rx337_fail:
-    (rx337_rep, rx337_pos, $I10, $P10) = rx337_cur."!mark_fail"(0)
-    lt rx337_pos, -1, rx337_done
-    eq rx337_pos, -1, rx337_fail
-    jump $I10
-  rx337_done:
-    rx337_cur."!cursor_fail"()
-    rx337_cur."!cursor_debug"("FAIL  ", "backslash:sym<b>")
-    .return (rx337_cur)
+    goto rxcap_350_done
+  rxcap_350_fail:
+    goto rx346_fail
+  rxcap_350_done:
+  # rx pass
+    rx346_cur."!cursor_pass"(rx346_pos, "backslash:sym<b>")
+    if_null rx346_debug, debug_335
+    rx346_cur."!cursor_debug"("PASS", "backslash:sym<b>", " at pos=", rx346_pos)
+  debug_335:
+    .return (rx346_cur)
+  rx346_restart:
+.annotate 'line', 3
+    if_null rx346_debug, debug_336
+    rx346_cur."!cursor_debug"("NEXT", "backslash:sym<b>")
+  debug_336:
+  rx346_fail:
+    (rx346_rep, rx346_pos, $I10, $P10) = rx346_cur."!mark_fail"(0)
+    lt rx346_pos, -1, rx346_done
+    eq rx346_pos, -1, rx346_fail
+    jump $I10
+  rx346_done:
+    rx346_cur."!cursor_fail"()
+    if_null rx346_debug, debug_337
+    rx346_cur."!cursor_debug"("FAIL", "backslash:sym<b>")
+  debug_337:
+    .return (rx346_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<b>"  :subid("98_1280467470.54449") :method
-.annotate 'line', 3
-    new $P339, "ResizablePMCArray"
-    push $P339, "B"
-    push $P339, "b"
-    .return ($P339)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<e>"  :subid("99_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx343_tgt
-    .local int rx343_pos
-    .local int rx343_off
-    .local int rx343_eos
-    .local int rx343_rep
-    .local pmc rx343_cur
-    (rx343_cur, rx343_pos, rx343_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx343_cur
-    .local pmc match
-    .lex "$/", match
-    length rx343_eos, rx343_tgt
-    gt rx343_pos, rx343_eos, rx343_done
-    set rx343_off, 0
-    lt rx343_pos, 2, rx343_start
-    sub rx343_off, rx343_pos, 1
-    substr rx343_tgt, rx343_tgt, rx343_off
-  rx343_start:
-    eq $I10, 1, rx343_restart
-    rx343_cur."!cursor_debug"("START ", "backslash:sym<e>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan346_done
-    goto rxscan346_scan
-  rxscan346_loop:
-    ($P10) = rx343_cur."from"()
-    inc $P10
-    set rx343_pos, $P10
-    ge rx343_pos, rx343_eos, rxscan346_done
-  rxscan346_scan:
-    set_addr $I10, rxscan346_loop
-    rx343_cur."!mark_push"(0, rx343_pos, $I10)
-  rxscan346_done:
-.annotate 'line', 125
+.sub "!PREFIX__backslash:sym<b>"  :subid("100_1282323996.47527") :method
+.annotate 'line', 3
+    new $P348, "ResizablePMCArray"
+    push $P348, "B"
+    push $P348, "b"
+    .return ($P348)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<e>"  :subid("101_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx352_tgt
+    .local int rx352_pos
+    .local int rx352_off
+    .local int rx352_eos
+    .local int rx352_rep
+    .local pmc rx352_cur
+    .local pmc rx352_debug
+    (rx352_cur, rx352_pos, rx352_tgt, $I10) = self."!cursor_start"()
+    getattribute rx352_debug, rx352_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx352_cur
+    .local pmc match
+    .lex "$/", match
+    length rx352_eos, rx352_tgt
+    gt rx352_pos, rx352_eos, rx352_done
+    set rx352_off, 0
+    lt rx352_pos, 2, rx352_start
+    sub rx352_off, rx352_pos, 1
+    substr rx352_tgt, rx352_tgt, rx352_off
+  rx352_start:
+    eq $I10, 1, rx352_restart
+    if_null rx352_debug, debug_338
+    rx352_cur."!cursor_debug"("START", "backslash:sym<e>")
+  debug_338:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan355_done
+    goto rxscan355_scan
+  rxscan355_loop:
+    ($P10) = rx352_cur."from"()
+    inc $P10
+    set rx352_pos, $P10
+    ge rx352_pos, rx352_eos, rxscan355_done
+  rxscan355_scan:
+    set_addr $I10, rxscan355_loop
+    rx352_cur."!mark_push"(0, rx352_pos, $I10)
+  rxscan355_done:
+.annotate 'line', 132
   # rx subcapture "sym"
-    set_addr $I10, rxcap_347_fail
-    rx343_cur."!mark_push"(0, rx343_pos, $I10)
+    set_addr $I10, rxcap_356_fail
+    rx352_cur."!mark_push"(0, rx352_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx343_pos, rx343_eos, rx343_fail
-    sub $I10, rx343_pos, rx343_off
-    substr $S10, rx343_tgt, $I10, 1
+    ge rx352_pos, rx352_eos, rx352_fail
+    sub $I10, rx352_pos, rx352_off
+    substr $S10, rx352_tgt, $I10, 1
     index $I11, "eE", $S10
-    lt $I11, 0, rx343_fail
-    inc rx343_pos
-    set_addr $I10, rxcap_347_fail
-    ($I12, $I11) = rx343_cur."!mark_peek"($I10)
-    rx343_cur."!cursor_pos"($I11)
-    ($P10) = rx343_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx343_pos, "")
-    rx343_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx352_fail
+    inc rx352_pos
+    set_addr $I10, rxcap_356_fail
+    ($I12, $I11) = rx352_cur."!mark_peek"($I10)
+    rx352_cur."!cursor_pos"($I11)
+    ($P10) = rx352_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx352_pos, "")
+    rx352_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_347_done
-  rxcap_347_fail:
-    goto rx343_fail
-  rxcap_347_done:
-  # rx pass
-    rx343_cur."!cursor_pass"(rx343_pos, "backslash:sym<e>")
-    rx343_cur."!cursor_debug"("PASS  ", "backslash:sym<e>", " at pos=", rx343_pos)
-    .return (rx343_cur)
-  rx343_restart:
-.annotate 'line', 3
-    rx343_cur."!cursor_debug"("NEXT ", "backslash:sym<e>")
-  rx343_fail:
-    (rx343_rep, rx343_pos, $I10, $P10) = rx343_cur."!mark_fail"(0)
-    lt rx343_pos, -1, rx343_done
-    eq rx343_pos, -1, rx343_fail
-    jump $I10
-  rx343_done:
-    rx343_cur."!cursor_fail"()
-    rx343_cur."!cursor_debug"("FAIL  ", "backslash:sym<e>")
-    .return (rx343_cur)
+    goto rxcap_356_done
+  rxcap_356_fail:
+    goto rx352_fail
+  rxcap_356_done:
+  # rx pass
+    rx352_cur."!cursor_pass"(rx352_pos, "backslash:sym<e>")
+    if_null rx352_debug, debug_339
+    rx352_cur."!cursor_debug"("PASS", "backslash:sym<e>", " at pos=", rx352_pos)
+  debug_339:
+    .return (rx352_cur)
+  rx352_restart:
+.annotate 'line', 3
+    if_null rx352_debug, debug_340
+    rx352_cur."!cursor_debug"("NEXT", "backslash:sym<e>")
+  debug_340:
+  rx352_fail:
+    (rx352_rep, rx352_pos, $I10, $P10) = rx352_cur."!mark_fail"(0)
+    lt rx352_pos, -1, rx352_done
+    eq rx352_pos, -1, rx352_fail
+    jump $I10
+  rx352_done:
+    rx352_cur."!cursor_fail"()
+    if_null rx352_debug, debug_341
+    rx352_cur."!cursor_debug"("FAIL", "backslash:sym<e>")
+  debug_341:
+    .return (rx352_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<e>"  :subid("100_1280467470.54449") :method
-.annotate 'line', 3
-    new $P345, "ResizablePMCArray"
-    push $P345, "E"
-    push $P345, "e"
-    .return ($P345)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<f>"  :subid("101_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx349_tgt
-    .local int rx349_pos
-    .local int rx349_off
-    .local int rx349_eos
-    .local int rx349_rep
-    .local pmc rx349_cur
-    (rx349_cur, rx349_pos, rx349_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx349_cur
-    .local pmc match
-    .lex "$/", match
-    length rx349_eos, rx349_tgt
-    gt rx349_pos, rx349_eos, rx349_done
-    set rx349_off, 0
-    lt rx349_pos, 2, rx349_start
-    sub rx349_off, rx349_pos, 1
-    substr rx349_tgt, rx349_tgt, rx349_off
-  rx349_start:
-    eq $I10, 1, rx349_restart
-    rx349_cur."!cursor_debug"("START ", "backslash:sym<f>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan352_done
-    goto rxscan352_scan
-  rxscan352_loop:
-    ($P10) = rx349_cur."from"()
-    inc $P10
-    set rx349_pos, $P10
-    ge rx349_pos, rx349_eos, rxscan352_done
-  rxscan352_scan:
-    set_addr $I10, rxscan352_loop
-    rx349_cur."!mark_push"(0, rx349_pos, $I10)
-  rxscan352_done:
-.annotate 'line', 126
+.sub "!PREFIX__backslash:sym<e>"  :subid("102_1282323996.47527") :method
+.annotate 'line', 3
+    new $P354, "ResizablePMCArray"
+    push $P354, "E"
+    push $P354, "e"
+    .return ($P354)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<f>"  :subid("103_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx358_tgt
+    .local int rx358_pos
+    .local int rx358_off
+    .local int rx358_eos
+    .local int rx358_rep
+    .local pmc rx358_cur
+    .local pmc rx358_debug
+    (rx358_cur, rx358_pos, rx358_tgt, $I10) = self."!cursor_start"()
+    getattribute rx358_debug, rx358_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx358_cur
+    .local pmc match
+    .lex "$/", match
+    length rx358_eos, rx358_tgt
+    gt rx358_pos, rx358_eos, rx358_done
+    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:
+    eq $I10, 1, rx358_restart
+    if_null rx358_debug, debug_342
+    rx358_cur."!cursor_debug"("START", "backslash:sym<f>")
+  debug_342:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan361_done
+    goto rxscan361_scan
+  rxscan361_loop:
+    ($P10) = rx358_cur."from"()
+    inc $P10
+    set rx358_pos, $P10
+    ge rx358_pos, rx358_eos, rxscan361_done
+  rxscan361_scan:
+    set_addr $I10, rxscan361_loop
+    rx358_cur."!mark_push"(0, rx358_pos, $I10)
+  rxscan361_done:
+.annotate 'line', 133
   # rx subcapture "sym"
-    set_addr $I10, rxcap_353_fail
-    rx349_cur."!mark_push"(0, rx349_pos, $I10)
+    set_addr $I10, rxcap_362_fail
+    rx358_cur."!mark_push"(0, rx358_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx349_pos, rx349_eos, rx349_fail
-    sub $I10, rx349_pos, rx349_off
-    substr $S10, rx349_tgt, $I10, 1
+    ge rx358_pos, rx358_eos, rx358_fail
+    sub $I10, rx358_pos, rx358_off
+    substr $S10, rx358_tgt, $I10, 1
     index $I11, "fF", $S10
-    lt $I11, 0, rx349_fail
-    inc rx349_pos
-    set_addr $I10, rxcap_353_fail
-    ($I12, $I11) = rx349_cur."!mark_peek"($I10)
-    rx349_cur."!cursor_pos"($I11)
-    ($P10) = rx349_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx349_pos, "")
-    rx349_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx358_fail
+    inc rx358_pos
+    set_addr $I10, rxcap_362_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)
     $P10."!cursor_names"("sym")
-    goto rxcap_353_done
-  rxcap_353_fail:
-    goto rx349_fail
-  rxcap_353_done:
-  # rx pass
-    rx349_cur."!cursor_pass"(rx349_pos, "backslash:sym<f>")
-    rx349_cur."!cursor_debug"("PASS  ", "backslash:sym<f>", " at pos=", rx349_pos)
-    .return (rx349_cur)
-  rx349_restart:
-.annotate 'line', 3
-    rx349_cur."!cursor_debug"("NEXT ", "backslash:sym<f>")
-  rx349_fail:
-    (rx349_rep, rx349_pos, $I10, $P10) = rx349_cur."!mark_fail"(0)
-    lt rx349_pos, -1, rx349_done
-    eq rx349_pos, -1, rx349_fail
-    jump $I10
-  rx349_done:
-    rx349_cur."!cursor_fail"()
-    rx349_cur."!cursor_debug"("FAIL  ", "backslash:sym<f>")
-    .return (rx349_cur)
+    goto rxcap_362_done
+  rxcap_362_fail:
+    goto rx358_fail
+  rxcap_362_done:
+  # rx pass
+    rx358_cur."!cursor_pass"(rx358_pos, "backslash:sym<f>")
+    if_null rx358_debug, debug_343
+    rx358_cur."!cursor_debug"("PASS", "backslash:sym<f>", " at pos=", rx358_pos)
+  debug_343:
+    .return (rx358_cur)
+  rx358_restart:
+.annotate 'line', 3
+    if_null rx358_debug, debug_344
+    rx358_cur."!cursor_debug"("NEXT", "backslash:sym<f>")
+  debug_344:
+  rx358_fail:
+    (rx358_rep, rx358_pos, $I10, $P10) = rx358_cur."!mark_fail"(0)
+    lt rx358_pos, -1, rx358_done
+    eq rx358_pos, -1, rx358_fail
+    jump $I10
+  rx358_done:
+    rx358_cur."!cursor_fail"()
+    if_null rx358_debug, debug_345
+    rx358_cur."!cursor_debug"("FAIL", "backslash:sym<f>")
+  debug_345:
+    .return (rx358_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<f>"  :subid("102_1280467470.54449") :method
-.annotate 'line', 3
-    new $P351, "ResizablePMCArray"
-    push $P351, "F"
-    push $P351, "f"
-    .return ($P351)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<h>"  :subid("103_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx355_tgt
-    .local int rx355_pos
-    .local int rx355_off
-    .local int rx355_eos
-    .local int rx355_rep
-    .local pmc rx355_cur
-    (rx355_cur, rx355_pos, rx355_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx355_cur
-    .local pmc match
-    .lex "$/", match
-    length rx355_eos, rx355_tgt
-    gt rx355_pos, rx355_eos, rx355_done
-    set rx355_off, 0
-    lt rx355_pos, 2, rx355_start
-    sub rx355_off, rx355_pos, 1
-    substr rx355_tgt, rx355_tgt, rx355_off
-  rx355_start:
-    eq $I10, 1, rx355_restart
-    rx355_cur."!cursor_debug"("START ", "backslash:sym<h>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan358_done
-    goto rxscan358_scan
-  rxscan358_loop:
-    ($P10) = rx355_cur."from"()
-    inc $P10
-    set rx355_pos, $P10
-    ge rx355_pos, rx355_eos, rxscan358_done
-  rxscan358_scan:
-    set_addr $I10, rxscan358_loop
-    rx355_cur."!mark_push"(0, rx355_pos, $I10)
-  rxscan358_done:
-.annotate 'line', 127
+.sub "!PREFIX__backslash:sym<f>"  :subid("104_1282323996.47527") :method
+.annotate 'line', 3
+    new $P360, "ResizablePMCArray"
+    push $P360, "F"
+    push $P360, "f"
+    .return ($P360)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<h>"  :subid("105_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx364_tgt
+    .local int rx364_pos
+    .local int rx364_off
+    .local int rx364_eos
+    .local int rx364_rep
+    .local pmc rx364_cur
+    .local pmc rx364_debug
+    (rx364_cur, rx364_pos, rx364_tgt, $I10) = self."!cursor_start"()
+    getattribute rx364_debug, rx364_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx364_cur
+    .local pmc match
+    .lex "$/", match
+    length rx364_eos, rx364_tgt
+    gt rx364_pos, rx364_eos, rx364_done
+    set rx364_off, 0
+    lt rx364_pos, 2, rx364_start
+    sub rx364_off, rx364_pos, 1
+    substr rx364_tgt, rx364_tgt, rx364_off
+  rx364_start:
+    eq $I10, 1, rx364_restart
+    if_null rx364_debug, debug_346
+    rx364_cur."!cursor_debug"("START", "backslash:sym<h>")
+  debug_346:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan367_done
+    goto rxscan367_scan
+  rxscan367_loop:
+    ($P10) = rx364_cur."from"()
+    inc $P10
+    set rx364_pos, $P10
+    ge rx364_pos, rx364_eos, rxscan367_done
+  rxscan367_scan:
+    set_addr $I10, rxscan367_loop
+    rx364_cur."!mark_push"(0, rx364_pos, $I10)
+  rxscan367_done:
+.annotate 'line', 134
   # rx subcapture "sym"
-    set_addr $I10, rxcap_359_fail
-    rx355_cur."!mark_push"(0, rx355_pos, $I10)
+    set_addr $I10, rxcap_368_fail
+    rx364_cur."!mark_push"(0, rx364_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx355_pos, rx355_eos, rx355_fail
-    sub $I10, rx355_pos, rx355_off
-    substr $S10, rx355_tgt, $I10, 1
+    ge rx364_pos, rx364_eos, rx364_fail
+    sub $I10, rx364_pos, rx364_off
+    substr $S10, rx364_tgt, $I10, 1
     index $I11, "hH", $S10
-    lt $I11, 0, rx355_fail
-    inc rx355_pos
-    set_addr $I10, rxcap_359_fail
-    ($I12, $I11) = rx355_cur."!mark_peek"($I10)
-    rx355_cur."!cursor_pos"($I11)
-    ($P10) = rx355_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx355_pos, "")
-    rx355_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx364_fail
+    inc rx364_pos
+    set_addr $I10, rxcap_368_fail
+    ($I12, $I11) = rx364_cur."!mark_peek"($I10)
+    rx364_cur."!cursor_pos"($I11)
+    ($P10) = rx364_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx364_pos, "")
+    rx364_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_359_done
-  rxcap_359_fail:
-    goto rx355_fail
-  rxcap_359_done:
-  # rx pass
-    rx355_cur."!cursor_pass"(rx355_pos, "backslash:sym<h>")
-    rx355_cur."!cursor_debug"("PASS  ", "backslash:sym<h>", " at pos=", rx355_pos)
-    .return (rx355_cur)
-  rx355_restart:
-.annotate 'line', 3
-    rx355_cur."!cursor_debug"("NEXT ", "backslash:sym<h>")
-  rx355_fail:
-    (rx355_rep, rx355_pos, $I10, $P10) = rx355_cur."!mark_fail"(0)
-    lt rx355_pos, -1, rx355_done
-    eq rx355_pos, -1, rx355_fail
-    jump $I10
-  rx355_done:
-    rx355_cur."!cursor_fail"()
-    rx355_cur."!cursor_debug"("FAIL  ", "backslash:sym<h>")
-    .return (rx355_cur)
+    goto rxcap_368_done
+  rxcap_368_fail:
+    goto rx364_fail
+  rxcap_368_done:
+  # rx pass
+    rx364_cur."!cursor_pass"(rx364_pos, "backslash:sym<h>")
+    if_null rx364_debug, debug_347
+    rx364_cur."!cursor_debug"("PASS", "backslash:sym<h>", " at pos=", rx364_pos)
+  debug_347:
+    .return (rx364_cur)
+  rx364_restart:
+.annotate 'line', 3
+    if_null rx364_debug, debug_348
+    rx364_cur."!cursor_debug"("NEXT", "backslash:sym<h>")
+  debug_348:
+  rx364_fail:
+    (rx364_rep, rx364_pos, $I10, $P10) = rx364_cur."!mark_fail"(0)
+    lt rx364_pos, -1, rx364_done
+    eq rx364_pos, -1, rx364_fail
+    jump $I10
+  rx364_done:
+    rx364_cur."!cursor_fail"()
+    if_null rx364_debug, debug_349
+    rx364_cur."!cursor_debug"("FAIL", "backslash:sym<h>")
+  debug_349:
+    .return (rx364_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<h>"  :subid("104_1280467470.54449") :method
-.annotate 'line', 3
-    new $P357, "ResizablePMCArray"
-    push $P357, "H"
-    push $P357, "h"
-    .return ($P357)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<r>"  :subid("105_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx361_tgt
-    .local int rx361_pos
-    .local int rx361_off
-    .local int rx361_eos
-    .local int rx361_rep
-    .local pmc rx361_cur
-    (rx361_cur, rx361_pos, rx361_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx361_cur
-    .local pmc match
-    .lex "$/", match
-    length rx361_eos, rx361_tgt
-    gt rx361_pos, rx361_eos, rx361_done
-    set rx361_off, 0
-    lt rx361_pos, 2, rx361_start
-    sub rx361_off, rx361_pos, 1
-    substr rx361_tgt, rx361_tgt, rx361_off
-  rx361_start:
-    eq $I10, 1, rx361_restart
-    rx361_cur."!cursor_debug"("START ", "backslash:sym<r>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan364_done
-    goto rxscan364_scan
-  rxscan364_loop:
-    ($P10) = rx361_cur."from"()
-    inc $P10
-    set rx361_pos, $P10
-    ge rx361_pos, rx361_eos, rxscan364_done
-  rxscan364_scan:
-    set_addr $I10, rxscan364_loop
-    rx361_cur."!mark_push"(0, rx361_pos, $I10)
-  rxscan364_done:
-.annotate 'line', 128
+.sub "!PREFIX__backslash:sym<h>"  :subid("106_1282323996.47527") :method
+.annotate 'line', 3
+    new $P366, "ResizablePMCArray"
+    push $P366, "H"
+    push $P366, "h"
+    .return ($P366)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<r>"  :subid("107_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx370_tgt
+    .local int rx370_pos
+    .local int rx370_off
+    .local int rx370_eos
+    .local int rx370_rep
+    .local pmc rx370_cur
+    .local pmc rx370_debug
+    (rx370_cur, rx370_pos, rx370_tgt, $I10) = self."!cursor_start"()
+    getattribute rx370_debug, rx370_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx370_cur
+    .local pmc match
+    .lex "$/", match
+    length rx370_eos, rx370_tgt
+    gt rx370_pos, rx370_eos, rx370_done
+    set rx370_off, 0
+    lt rx370_pos, 2, rx370_start
+    sub rx370_off, rx370_pos, 1
+    substr rx370_tgt, rx370_tgt, rx370_off
+  rx370_start:
+    eq $I10, 1, rx370_restart
+    if_null rx370_debug, debug_350
+    rx370_cur."!cursor_debug"("START", "backslash:sym<r>")
+  debug_350:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan373_done
+    goto rxscan373_scan
+  rxscan373_loop:
+    ($P10) = rx370_cur."from"()
+    inc $P10
+    set rx370_pos, $P10
+    ge rx370_pos, rx370_eos, rxscan373_done
+  rxscan373_scan:
+    set_addr $I10, rxscan373_loop
+    rx370_cur."!mark_push"(0, rx370_pos, $I10)
+  rxscan373_done:
+.annotate 'line', 135
   # rx subcapture "sym"
-    set_addr $I10, rxcap_365_fail
-    rx361_cur."!mark_push"(0, rx361_pos, $I10)
+    set_addr $I10, rxcap_374_fail
+    rx370_cur."!mark_push"(0, rx370_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx361_pos, rx361_eos, rx361_fail
-    sub $I10, rx361_pos, rx361_off
-    substr $S10, rx361_tgt, $I10, 1
+    ge rx370_pos, rx370_eos, rx370_fail
+    sub $I10, rx370_pos, rx370_off
+    substr $S10, rx370_tgt, $I10, 1
     index $I11, "rR", $S10
-    lt $I11, 0, rx361_fail
-    inc rx361_pos
-    set_addr $I10, rxcap_365_fail
-    ($I12, $I11) = rx361_cur."!mark_peek"($I10)
-    rx361_cur."!cursor_pos"($I11)
-    ($P10) = rx361_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx361_pos, "")
-    rx361_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx370_fail
+    inc rx370_pos
+    set_addr $I10, rxcap_374_fail
+    ($I12, $I11) = rx370_cur."!mark_peek"($I10)
+    rx370_cur."!cursor_pos"($I11)
+    ($P10) = rx370_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx370_pos, "")
+    rx370_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_365_done
-  rxcap_365_fail:
-    goto rx361_fail
-  rxcap_365_done:
-  # rx pass
-    rx361_cur."!cursor_pass"(rx361_pos, "backslash:sym<r>")
-    rx361_cur."!cursor_debug"("PASS  ", "backslash:sym<r>", " at pos=", rx361_pos)
-    .return (rx361_cur)
-  rx361_restart:
-.annotate 'line', 3
-    rx361_cur."!cursor_debug"("NEXT ", "backslash:sym<r>")
-  rx361_fail:
-    (rx361_rep, rx361_pos, $I10, $P10) = rx361_cur."!mark_fail"(0)
-    lt rx361_pos, -1, rx361_done
-    eq rx361_pos, -1, rx361_fail
-    jump $I10
-  rx361_done:
-    rx361_cur."!cursor_fail"()
-    rx361_cur."!cursor_debug"("FAIL  ", "backslash:sym<r>")
-    .return (rx361_cur)
+    goto rxcap_374_done
+  rxcap_374_fail:
+    goto rx370_fail
+  rxcap_374_done:
+  # rx pass
+    rx370_cur."!cursor_pass"(rx370_pos, "backslash:sym<r>")
+    if_null rx370_debug, debug_351
+    rx370_cur."!cursor_debug"("PASS", "backslash:sym<r>", " at pos=", rx370_pos)
+  debug_351:
+    .return (rx370_cur)
+  rx370_restart:
+.annotate 'line', 3
+    if_null rx370_debug, debug_352
+    rx370_cur."!cursor_debug"("NEXT", "backslash:sym<r>")
+  debug_352:
+  rx370_fail:
+    (rx370_rep, rx370_pos, $I10, $P10) = rx370_cur."!mark_fail"(0)
+    lt rx370_pos, -1, rx370_done
+    eq rx370_pos, -1, rx370_fail
+    jump $I10
+  rx370_done:
+    rx370_cur."!cursor_fail"()
+    if_null rx370_debug, debug_353
+    rx370_cur."!cursor_debug"("FAIL", "backslash:sym<r>")
+  debug_353:
+    .return (rx370_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<r>"  :subid("106_1280467470.54449") :method
-.annotate 'line', 3
-    new $P363, "ResizablePMCArray"
-    push $P363, "R"
-    push $P363, "r"
-    .return ($P363)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<t>"  :subid("107_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx367_cur
-    .local pmc match
-    .lex "$/", match
-    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:
-    eq $I10, 1, rx367_restart
-    rx367_cur."!cursor_debug"("START ", "backslash:sym<t>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan370_done
-    goto rxscan370_scan
-  rxscan370_loop:
-    ($P10) = rx367_cur."from"()
-    inc $P10
-    set rx367_pos, $P10
-    ge rx367_pos, rx367_eos, rxscan370_done
-  rxscan370_scan:
-    set_addr $I10, rxscan370_loop
-    rx367_cur."!mark_push"(0, rx367_pos, $I10)
-  rxscan370_done:
-.annotate 'line', 129
+.sub "!PREFIX__backslash:sym<r>"  :subid("108_1282323996.47527") :method
+.annotate 'line', 3
+    new $P372, "ResizablePMCArray"
+    push $P372, "R"
+    push $P372, "r"
+    .return ($P372)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<t>"  :subid("109_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx376_tgt
+    .local int rx376_pos
+    .local int rx376_off
+    .local int rx376_eos
+    .local int rx376_rep
+    .local pmc rx376_cur
+    .local pmc rx376_debug
+    (rx376_cur, rx376_pos, rx376_tgt, $I10) = self."!cursor_start"()
+    getattribute rx376_debug, rx376_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx376_cur
+    .local pmc match
+    .lex "$/", match
+    length rx376_eos, rx376_tgt
+    gt rx376_pos, rx376_eos, rx376_done
+    set rx376_off, 0
+    lt rx376_pos, 2, rx376_start
+    sub rx376_off, rx376_pos, 1
+    substr rx376_tgt, rx376_tgt, rx376_off
+  rx376_start:
+    eq $I10, 1, rx376_restart
+    if_null rx376_debug, debug_354
+    rx376_cur."!cursor_debug"("START", "backslash:sym<t>")
+  debug_354:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan379_done
+    goto rxscan379_scan
+  rxscan379_loop:
+    ($P10) = rx376_cur."from"()
+    inc $P10
+    set rx376_pos, $P10
+    ge rx376_pos, rx376_eos, rxscan379_done
+  rxscan379_scan:
+    set_addr $I10, rxscan379_loop
+    rx376_cur."!mark_push"(0, rx376_pos, $I10)
+  rxscan379_done:
+.annotate 'line', 136
   # rx subcapture "sym"
-    set_addr $I10, rxcap_371_fail
-    rx367_cur."!mark_push"(0, rx367_pos, $I10)
+    set_addr $I10, rxcap_380_fail
+    rx376_cur."!mark_push"(0, rx376_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx367_pos, rx367_eos, rx367_fail
-    sub $I10, rx367_pos, rx367_off
-    substr $S10, rx367_tgt, $I10, 1
+    ge rx376_pos, rx376_eos, rx376_fail
+    sub $I10, rx376_pos, rx376_off
+    substr $S10, rx376_tgt, $I10, 1
     index $I11, "tT", $S10
-    lt $I11, 0, rx367_fail
-    inc rx367_pos
-    set_addr $I10, rxcap_371_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)
+    lt $I11, 0, rx376_fail
+    inc rx376_pos
+    set_addr $I10, rxcap_380_fail
+    ($I12, $I11) = rx376_cur."!mark_peek"($I10)
+    rx376_cur."!cursor_pos"($I11)
+    ($P10) = rx376_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx376_pos, "")
+    rx376_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_371_done
-  rxcap_371_fail:
-    goto rx367_fail
-  rxcap_371_done:
-  # rx pass
-    rx367_cur."!cursor_pass"(rx367_pos, "backslash:sym<t>")
-    rx367_cur."!cursor_debug"("PASS  ", "backslash:sym<t>", " at pos=", rx367_pos)
-    .return (rx367_cur)
-  rx367_restart:
-.annotate 'line', 3
-    rx367_cur."!cursor_debug"("NEXT ", "backslash:sym<t>")
-  rx367_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
-  rx367_done:
-    rx367_cur."!cursor_fail"()
-    rx367_cur."!cursor_debug"("FAIL  ", "backslash:sym<t>")
-    .return (rx367_cur)
+    goto rxcap_380_done
+  rxcap_380_fail:
+    goto rx376_fail
+  rxcap_380_done:
+  # rx pass
+    rx376_cur."!cursor_pass"(rx376_pos, "backslash:sym<t>")
+    if_null rx376_debug, debug_355
+    rx376_cur."!cursor_debug"("PASS", "backslash:sym<t>", " at pos=", rx376_pos)
+  debug_355:
+    .return (rx376_cur)
+  rx376_restart:
+.annotate 'line', 3
+    if_null rx376_debug, debug_356
+    rx376_cur."!cursor_debug"("NEXT", "backslash:sym<t>")
+  debug_356:
+  rx376_fail:
+    (rx376_rep, rx376_pos, $I10, $P10) = rx376_cur."!mark_fail"(0)
+    lt rx376_pos, -1, rx376_done
+    eq rx376_pos, -1, rx376_fail
+    jump $I10
+  rx376_done:
+    rx376_cur."!cursor_fail"()
+    if_null rx376_debug, debug_357
+    rx376_cur."!cursor_debug"("FAIL", "backslash:sym<t>")
+  debug_357:
+    .return (rx376_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<t>"  :subid("108_1280467470.54449") :method
-.annotate 'line', 3
-    new $P369, "ResizablePMCArray"
-    push $P369, "T"
-    push $P369, "t"
-    .return ($P369)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<v>"  :subid("109_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx373_tgt
-    .local int rx373_pos
-    .local int rx373_off
-    .local int rx373_eos
-    .local int rx373_rep
-    .local pmc rx373_cur
-    (rx373_cur, rx373_pos, rx373_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx373_cur
-    .local pmc match
-    .lex "$/", match
-    length rx373_eos, rx373_tgt
-    gt rx373_pos, rx373_eos, rx373_done
-    set rx373_off, 0
-    lt rx373_pos, 2, rx373_start
-    sub rx373_off, rx373_pos, 1
-    substr rx373_tgt, rx373_tgt, rx373_off
-  rx373_start:
-    eq $I10, 1, rx373_restart
-    rx373_cur."!cursor_debug"("START ", "backslash:sym<v>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan376_done
-    goto rxscan376_scan
-  rxscan376_loop:
-    ($P10) = rx373_cur."from"()
-    inc $P10
-    set rx373_pos, $P10
-    ge rx373_pos, rx373_eos, rxscan376_done
-  rxscan376_scan:
-    set_addr $I10, rxscan376_loop
-    rx373_cur."!mark_push"(0, rx373_pos, $I10)
-  rxscan376_done:
-.annotate 'line', 130
+.sub "!PREFIX__backslash:sym<t>"  :subid("110_1282323996.47527") :method
+.annotate 'line', 3
+    new $P378, "ResizablePMCArray"
+    push $P378, "T"
+    push $P378, "t"
+    .return ($P378)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<v>"  :subid("111_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx382_tgt
+    .local int rx382_pos
+    .local int rx382_off
+    .local int rx382_eos
+    .local int rx382_rep
+    .local pmc rx382_cur
+    .local pmc rx382_debug
+    (rx382_cur, rx382_pos, rx382_tgt, $I10) = self."!cursor_start"()
+    getattribute rx382_debug, rx382_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx382_cur
+    .local pmc match
+    .lex "$/", match
+    length rx382_eos, rx382_tgt
+    gt rx382_pos, rx382_eos, rx382_done
+    set rx382_off, 0
+    lt rx382_pos, 2, rx382_start
+    sub rx382_off, rx382_pos, 1
+    substr rx382_tgt, rx382_tgt, rx382_off
+  rx382_start:
+    eq $I10, 1, rx382_restart
+    if_null rx382_debug, debug_358
+    rx382_cur."!cursor_debug"("START", "backslash:sym<v>")
+  debug_358:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan385_done
+    goto rxscan385_scan
+  rxscan385_loop:
+    ($P10) = rx382_cur."from"()
+    inc $P10
+    set rx382_pos, $P10
+    ge rx382_pos, rx382_eos, rxscan385_done
+  rxscan385_scan:
+    set_addr $I10, rxscan385_loop
+    rx382_cur."!mark_push"(0, rx382_pos, $I10)
+  rxscan385_done:
+.annotate 'line', 137
   # rx subcapture "sym"
-    set_addr $I10, rxcap_377_fail
-    rx373_cur."!mark_push"(0, rx373_pos, $I10)
+    set_addr $I10, rxcap_386_fail
+    rx382_cur."!mark_push"(0, rx382_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx373_pos, rx373_eos, rx373_fail
-    sub $I10, rx373_pos, rx373_off
-    substr $S10, rx373_tgt, $I10, 1
+    ge rx382_pos, rx382_eos, rx382_fail
+    sub $I10, rx382_pos, rx382_off
+    substr $S10, rx382_tgt, $I10, 1
     index $I11, "vV", $S10
-    lt $I11, 0, rx373_fail
-    inc rx373_pos
-    set_addr $I10, rxcap_377_fail
-    ($I12, $I11) = rx373_cur."!mark_peek"($I10)
-    rx373_cur."!cursor_pos"($I11)
-    ($P10) = rx373_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx373_pos, "")
-    rx373_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx382_fail
+    inc rx382_pos
+    set_addr $I10, rxcap_386_fail
+    ($I12, $I11) = rx382_cur."!mark_peek"($I10)
+    rx382_cur."!cursor_pos"($I11)
+    ($P10) = rx382_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx382_pos, "")
+    rx382_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_377_done
-  rxcap_377_fail:
-    goto rx373_fail
-  rxcap_377_done:
-  # rx pass
-    rx373_cur."!cursor_pass"(rx373_pos, "backslash:sym<v>")
-    rx373_cur."!cursor_debug"("PASS  ", "backslash:sym<v>", " at pos=", rx373_pos)
-    .return (rx373_cur)
-  rx373_restart:
-.annotate 'line', 3
-    rx373_cur."!cursor_debug"("NEXT ", "backslash:sym<v>")
-  rx373_fail:
-    (rx373_rep, rx373_pos, $I10, $P10) = rx373_cur."!mark_fail"(0)
-    lt rx373_pos, -1, rx373_done
-    eq rx373_pos, -1, rx373_fail
-    jump $I10
-  rx373_done:
-    rx373_cur."!cursor_fail"()
-    rx373_cur."!cursor_debug"("FAIL  ", "backslash:sym<v>")
-    .return (rx373_cur)
+    goto rxcap_386_done
+  rxcap_386_fail:
+    goto rx382_fail
+  rxcap_386_done:
+  # rx pass
+    rx382_cur."!cursor_pass"(rx382_pos, "backslash:sym<v>")
+    if_null rx382_debug, debug_359
+    rx382_cur."!cursor_debug"("PASS", "backslash:sym<v>", " at pos=", rx382_pos)
+  debug_359:
+    .return (rx382_cur)
+  rx382_restart:
+.annotate 'line', 3
+    if_null rx382_debug, debug_360
+    rx382_cur."!cursor_debug"("NEXT", "backslash:sym<v>")
+  debug_360:
+  rx382_fail:
+    (rx382_rep, rx382_pos, $I10, $P10) = rx382_cur."!mark_fail"(0)
+    lt rx382_pos, -1, rx382_done
+    eq rx382_pos, -1, rx382_fail
+    jump $I10
+  rx382_done:
+    rx382_cur."!cursor_fail"()
+    if_null rx382_debug, debug_361
+    rx382_cur."!cursor_debug"("FAIL", "backslash:sym<v>")
+  debug_361:
+    .return (rx382_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<v>"  :subid("110_1280467470.54449") :method
-.annotate 'line', 3
-    new $P375, "ResizablePMCArray"
-    push $P375, "V"
-    push $P375, "v"
-    .return ($P375)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<o>"  :subid("111_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx379_tgt
-    .local int rx379_pos
-    .local int rx379_off
-    .local int rx379_eos
-    .local int rx379_rep
-    .local pmc rx379_cur
-    (rx379_cur, rx379_pos, rx379_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx379_cur
-    .local pmc match
-    .lex "$/", match
-    length rx379_eos, rx379_tgt
-    gt rx379_pos, rx379_eos, rx379_done
-    set rx379_off, 0
-    lt rx379_pos, 2, rx379_start
-    sub rx379_off, rx379_pos, 1
-    substr rx379_tgt, rx379_tgt, rx379_off
-  rx379_start:
-    eq $I10, 1, rx379_restart
-    rx379_cur."!cursor_debug"("START ", "backslash:sym<o>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan386_done
-    goto rxscan386_scan
-  rxscan386_loop:
-    ($P10) = rx379_cur."from"()
-    inc $P10
-    set rx379_pos, $P10
-    ge rx379_pos, rx379_eos, rxscan386_done
-  rxscan386_scan:
-    set_addr $I10, rxscan386_loop
-    rx379_cur."!mark_push"(0, rx379_pos, $I10)
-  rxscan386_done:
-.annotate 'line', 131
+.sub "!PREFIX__backslash:sym<v>"  :subid("112_1282323996.47527") :method
+.annotate 'line', 3
+    new $P384, "ResizablePMCArray"
+    push $P384, "V"
+    push $P384, "v"
+    .return ($P384)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<o>"  :subid("113_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx388_tgt
+    .local int rx388_pos
+    .local int rx388_off
+    .local int rx388_eos
+    .local int rx388_rep
+    .local pmc rx388_cur
+    .local pmc rx388_debug
+    (rx388_cur, rx388_pos, rx388_tgt, $I10) = self."!cursor_start"()
+    getattribute rx388_debug, rx388_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx388_cur
+    .local pmc match
+    .lex "$/", match
+    length rx388_eos, rx388_tgt
+    gt rx388_pos, rx388_eos, rx388_done
+    set rx388_off, 0
+    lt rx388_pos, 2, rx388_start
+    sub rx388_off, rx388_pos, 1
+    substr rx388_tgt, rx388_tgt, rx388_off
+  rx388_start:
+    eq $I10, 1, rx388_restart
+    if_null rx388_debug, debug_362
+    rx388_cur."!cursor_debug"("START", "backslash:sym<o>")
+  debug_362:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan395_done
+    goto rxscan395_scan
+  rxscan395_loop:
+    ($P10) = rx388_cur."from"()
+    inc $P10
+    set rx388_pos, $P10
+    ge rx388_pos, rx388_eos, rxscan395_done
+  rxscan395_scan:
+    set_addr $I10, rxscan395_loop
+    rx388_cur."!mark_push"(0, rx388_pos, $I10)
+  rxscan395_done:
+.annotate 'line', 138
   # rx subcapture "sym"
-    set_addr $I10, rxcap_387_fail
-    rx379_cur."!mark_push"(0, rx379_pos, $I10)
+    set_addr $I10, rxcap_396_fail
+    rx388_cur."!mark_push"(0, rx388_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx379_pos, rx379_eos, rx379_fail
-    sub $I10, rx379_pos, rx379_off
-    substr $S10, rx379_tgt, $I10, 1
+    ge rx388_pos, rx388_eos, rx388_fail
+    sub $I10, rx388_pos, rx388_off
+    substr $S10, rx388_tgt, $I10, 1
     index $I11, "oO", $S10
-    lt $I11, 0, rx379_fail
-    inc rx379_pos
-    set_addr $I10, rxcap_387_fail
-    ($I12, $I11) = rx379_cur."!mark_peek"($I10)
-    rx379_cur."!cursor_pos"($I11)
-    ($P10) = rx379_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx379_pos, "")
-    rx379_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx388_fail
+    inc rx388_pos
+    set_addr $I10, rxcap_396_fail
+    ($I12, $I11) = rx388_cur."!mark_peek"($I10)
+    rx388_cur."!cursor_pos"($I11)
+    ($P10) = rx388_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx388_pos, "")
+    rx388_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_387_done
-  rxcap_387_fail:
-    goto rx379_fail
-  rxcap_387_done:
-  alt388_0:
-    set_addr $I10, alt388_1
-    rx379_cur."!mark_push"(0, rx379_pos, $I10)
+    goto rxcap_396_done
+  rxcap_396_fail:
+    goto rx388_fail
+  rxcap_396_done:
+  alt397_0:
+    set_addr $I10, alt397_1
+    rx388_cur."!mark_push"(0, rx388_pos, $I10)
   # rx subrule "octint" subtype=capture negate=
-    rx379_cur."!cursor_pos"(rx379_pos)
-    $P10 = rx379_cur."octint"()
-    unless $P10, rx379_fail
-    rx379_cur."!mark_push"(0, -1, 0, $P10)
+    rx388_cur."!cursor_pos"(rx388_pos)
+    $P10 = rx388_cur."octint"()
+    unless $P10, rx388_fail
+    rx388_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("octint")
-    rx379_pos = $P10."pos"()
-    goto alt388_end
-  alt388_1:
+    rx388_pos = $P10."pos"()
+    goto alt397_end
+  alt397_1:
   # rx literal  "["
-    add $I11, rx379_pos, 1
-    gt $I11, rx379_eos, rx379_fail
-    sub $I11, rx379_pos, rx379_off
-    substr $S10, rx379_tgt, $I11, 1
-    ne $S10, "[", rx379_fail
-    add rx379_pos, 1
+    add $I11, rx388_pos, 1
+    gt $I11, rx388_eos, rx388_fail
+    sub $I11, rx388_pos, rx388_off
+    ord $I11, rx388_tgt, $I11
+    ne $I11, 91, rx388_fail
+    add rx388_pos, 1
   # rx subrule "octints" subtype=capture negate=
-    rx379_cur."!cursor_pos"(rx379_pos)
-    $P10 = rx379_cur."octints"()
-    unless $P10, rx379_fail
-    rx379_cur."!mark_push"(0, -1, 0, $P10)
+    rx388_cur."!cursor_pos"(rx388_pos)
+    $P10 = rx388_cur."octints"()
+    unless $P10, rx388_fail
+    rx388_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("octints")
-    rx379_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx379_pos, 1
-    gt $I11, rx379_eos, rx379_fail
-    sub $I11, rx379_pos, rx379_off
-    substr $S10, rx379_tgt, $I11, 1
-    ne $S10, "]", rx379_fail
-    add rx379_pos, 1
-  alt388_end:
-  # rx pass
-    rx379_cur."!cursor_pass"(rx379_pos, "backslash:sym<o>")
-    rx379_cur."!cursor_debug"("PASS  ", "backslash:sym<o>", " at pos=", rx379_pos)
-    .return (rx379_cur)
-  rx379_restart:
-.annotate 'line', 3
-    rx379_cur."!cursor_debug"("NEXT ", "backslash:sym<o>")
-  rx379_fail:
-    (rx379_rep, rx379_pos, $I10, $P10) = rx379_cur."!mark_fail"(0)
-    lt rx379_pos, -1, rx379_done
-    eq rx379_pos, -1, rx379_fail
-    jump $I10
-  rx379_done:
-    rx379_cur."!cursor_fail"()
-    rx379_cur."!cursor_debug"("FAIL  ", "backslash:sym<o>")
-    .return (rx379_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<o>"  :subid("112_1280467470.54449") :method
-.annotate 'line', 3
-    $P381 = self."!PREFIX__!subrule"("octints", "O[")
-    $P382 = self."!PREFIX__!subrule"("octint", "O")
-    $P383 = self."!PREFIX__!subrule"("octints", "o[")
-    $P384 = self."!PREFIX__!subrule"("octint", "o")
-    new $P385, "ResizablePMCArray"
-    push $P385, $P381
-    push $P385, $P382
-    push $P385, $P383
-    push $P385, $P384
-    .return ($P385)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<x>"  :subid("113_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx390_tgt
-    .local int rx390_pos
-    .local int rx390_off
-    .local int rx390_eos
-    .local int rx390_rep
-    .local pmc rx390_cur
-    (rx390_cur, rx390_pos, rx390_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx390_cur
-    .local pmc match
-    .lex "$/", match
-    length rx390_eos, rx390_tgt
-    gt rx390_pos, rx390_eos, rx390_done
-    set rx390_off, 0
-    lt rx390_pos, 2, rx390_start
-    sub rx390_off, rx390_pos, 1
-    substr rx390_tgt, rx390_tgt, rx390_off
-  rx390_start:
-    eq $I10, 1, rx390_restart
-    rx390_cur."!cursor_debug"("START ", "backslash:sym<x>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan397_done
-    goto rxscan397_scan
-  rxscan397_loop:
-    ($P10) = rx390_cur."from"()
-    inc $P10
-    set rx390_pos, $P10
-    ge rx390_pos, rx390_eos, rxscan397_done
-  rxscan397_scan:
-    set_addr $I10, rxscan397_loop
-    rx390_cur."!mark_push"(0, rx390_pos, $I10)
-  rxscan397_done:
-.annotate 'line', 132
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_398_fail
-    rx390_cur."!mark_push"(0, rx390_pos, $I10)
-  # rx enumcharlist negate=0 
-    ge rx390_pos, rx390_eos, rx390_fail
-    sub $I10, rx390_pos, rx390_off
-    substr $S10, rx390_tgt, $I10, 1
-    index $I11, "xX", $S10
-    lt $I11, 0, rx390_fail
-    inc rx390_pos
-    set_addr $I10, rxcap_398_fail
-    ($I12, $I11) = rx390_cur."!mark_peek"($I10)
-    rx390_cur."!cursor_pos"($I11)
-    ($P10) = rx390_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx390_pos, "")
-    rx390_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_398_done
-  rxcap_398_fail:
-    goto rx390_fail
-  rxcap_398_done:
-  alt399_0:
-    set_addr $I10, alt399_1
-    rx390_cur."!mark_push"(0, rx390_pos, $I10)
-  # rx subrule "hexint" subtype=capture negate=
-    rx390_cur."!cursor_pos"(rx390_pos)
-    $P10 = rx390_cur."hexint"()
-    unless $P10, rx390_fail
-    rx390_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexint")
-    rx390_pos = $P10."pos"()
-    goto alt399_end
-  alt399_1:
-  # rx literal  "["
-    add $I11, rx390_pos, 1
-    gt $I11, rx390_eos, rx390_fail
-    sub $I11, rx390_pos, rx390_off
-    substr $S10, rx390_tgt, $I11, 1
-    ne $S10, "[", rx390_fail
-    add rx390_pos, 1
-  # rx subrule "hexints" subtype=capture negate=
-    rx390_cur."!cursor_pos"(rx390_pos)
-    $P10 = rx390_cur."hexints"()
-    unless $P10, rx390_fail
-    rx390_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexints")
-    rx390_pos = $P10."pos"()
+    rx388_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx390_pos, 1
-    gt $I11, rx390_eos, rx390_fail
-    sub $I11, rx390_pos, rx390_off
-    substr $S10, rx390_tgt, $I11, 1
-    ne $S10, "]", rx390_fail
-    add rx390_pos, 1
-  alt399_end:
-  # rx pass
-    rx390_cur."!cursor_pass"(rx390_pos, "backslash:sym<x>")
-    rx390_cur."!cursor_debug"("PASS  ", "backslash:sym<x>", " at pos=", rx390_pos)
-    .return (rx390_cur)
-  rx390_restart:
-.annotate 'line', 3
-    rx390_cur."!cursor_debug"("NEXT ", "backslash:sym<x>")
-  rx390_fail:
-    (rx390_rep, rx390_pos, $I10, $P10) = rx390_cur."!mark_fail"(0)
-    lt rx390_pos, -1, rx390_done
-    eq rx390_pos, -1, rx390_fail
-    jump $I10
-  rx390_done:
-    rx390_cur."!cursor_fail"()
-    rx390_cur."!cursor_debug"("FAIL  ", "backslash:sym<x>")
-    .return (rx390_cur)
+    add $I11, rx388_pos, 1
+    gt $I11, rx388_eos, rx388_fail
+    sub $I11, rx388_pos, rx388_off
+    ord $I11, rx388_tgt, $I11
+    ne $I11, 93, rx388_fail
+    add rx388_pos, 1
+  alt397_end:
+  # rx pass
+    rx388_cur."!cursor_pass"(rx388_pos, "backslash:sym<o>")
+    if_null rx388_debug, debug_363
+    rx388_cur."!cursor_debug"("PASS", "backslash:sym<o>", " at pos=", rx388_pos)
+  debug_363:
+    .return (rx388_cur)
+  rx388_restart:
+.annotate 'line', 3
+    if_null rx388_debug, debug_364
+    rx388_cur."!cursor_debug"("NEXT", "backslash:sym<o>")
+  debug_364:
+  rx388_fail:
+    (rx388_rep, rx388_pos, $I10, $P10) = rx388_cur."!mark_fail"(0)
+    lt rx388_pos, -1, rx388_done
+    eq rx388_pos, -1, rx388_fail
+    jump $I10
+  rx388_done:
+    rx388_cur."!cursor_fail"()
+    if_null rx388_debug, debug_365
+    rx388_cur."!cursor_debug"("FAIL", "backslash:sym<o>")
+  debug_365:
+    .return (rx388_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<x>"  :subid("114_1280467470.54449") :method
-.annotate 'line', 3
-    $P392 = self."!PREFIX__!subrule"("hexints", "X[")
-    $P393 = self."!PREFIX__!subrule"("hexint", "X")
-    $P394 = self."!PREFIX__!subrule"("hexints", "x[")
-    $P395 = self."!PREFIX__!subrule"("hexint", "x")
-    new $P396, "ResizablePMCArray"
-    push $P396, $P392
-    push $P396, $P393
-    push $P396, $P394
-    push $P396, $P395
-    .return ($P396)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<c>"  :subid("115_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx401_tgt
-    .local int rx401_pos
-    .local int rx401_off
-    .local int rx401_eos
-    .local int rx401_rep
-    .local pmc rx401_cur
-    (rx401_cur, rx401_pos, rx401_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx401_cur
-    .local pmc match
-    .lex "$/", match
-    length rx401_eos, rx401_tgt
-    gt rx401_pos, rx401_eos, rx401_done
-    set rx401_off, 0
-    lt rx401_pos, 2, rx401_start
-    sub rx401_off, rx401_pos, 1
-    substr rx401_tgt, rx401_tgt, rx401_off
-  rx401_start:
-    eq $I10, 1, rx401_restart
-    rx401_cur."!cursor_debug"("START ", "backslash:sym<c>")
+.sub "!PREFIX__backslash:sym<o>"  :subid("114_1282323996.47527") :method
+.annotate 'line', 3
+    $P390 = self."!PREFIX__!subrule"("octints", "O[")
+    $P391 = self."!PREFIX__!subrule"("octint", "O")
+    $P392 = self."!PREFIX__!subrule"("octints", "o[")
+    $P393 = self."!PREFIX__!subrule"("octint", "o")
+    new $P394, "ResizablePMCArray"
+    push $P394, $P390
+    push $P394, $P391
+    push $P394, $P392
+    push $P394, $P393
+    .return ($P394)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<x>"  :subid("115_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx399_tgt
+    .local int rx399_pos
+    .local int rx399_off
+    .local int rx399_eos
+    .local int rx399_rep
+    .local pmc rx399_cur
+    .local pmc rx399_debug
+    (rx399_cur, rx399_pos, rx399_tgt, $I10) = self."!cursor_start"()
+    getattribute rx399_debug, rx399_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx399_cur
+    .local pmc match
+    .lex "$/", match
+    length rx399_eos, rx399_tgt
+    gt rx399_pos, rx399_eos, rx399_done
+    set rx399_off, 0
+    lt rx399_pos, 2, rx399_start
+    sub rx399_off, rx399_pos, 1
+    substr rx399_tgt, rx399_tgt, rx399_off
+  rx399_start:
+    eq $I10, 1, rx399_restart
+    if_null rx399_debug, debug_366
+    rx399_cur."!cursor_debug"("START", "backslash:sym<x>")
+  debug_366:
     $I10 = self.'from'()
     ne $I10, -1, rxscan406_done
     goto rxscan406_scan
   rxscan406_loop:
-    ($P10) = rx401_cur."from"()
+    ($P10) = rx399_cur."from"()
     inc $P10
-    set rx401_pos, $P10
-    ge rx401_pos, rx401_eos, rxscan406_done
+    set rx399_pos, $P10
+    ge rx399_pos, rx399_eos, rxscan406_done
   rxscan406_scan:
     set_addr $I10, rxscan406_loop
-    rx401_cur."!mark_push"(0, rx401_pos, $I10)
+    rx399_cur."!mark_push"(0, rx399_pos, $I10)
   rxscan406_done:
-.annotate 'line', 133
+.annotate 'line', 139
   # rx subcapture "sym"
     set_addr $I10, rxcap_407_fail
-    rx401_cur."!mark_push"(0, rx401_pos, $I10)
+    rx399_cur."!mark_push"(0, rx399_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx401_pos, rx401_eos, rx401_fail
-    sub $I10, rx401_pos, rx401_off
-    substr $S10, rx401_tgt, $I10, 1
-    index $I11, "cC", $S10
-    lt $I11, 0, rx401_fail
-    inc rx401_pos
+    ge rx399_pos, rx399_eos, rx399_fail
+    sub $I10, rx399_pos, rx399_off
+    substr $S10, rx399_tgt, $I10, 1
+    index $I11, "xX", $S10
+    lt $I11, 0, rx399_fail
+    inc rx399_pos
     set_addr $I10, rxcap_407_fail
-    ($I12, $I11) = rx401_cur."!mark_peek"($I10)
-    rx401_cur."!cursor_pos"($I11)
-    ($P10) = rx401_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx401_pos, "")
-    rx401_cur."!mark_push"(0, -1, 0, $P10)
+    ($I12, $I11) = rx399_cur."!mark_peek"($I10)
+    rx399_cur."!cursor_pos"($I11)
+    ($P10) = rx399_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx399_pos, "")
+    rx399_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
     goto rxcap_407_done
   rxcap_407_fail:
-    goto rx401_fail
+    goto rx399_fail
   rxcap_407_done:
-  # rx subrule "charspec" subtype=capture negate=
-    rx401_cur."!cursor_pos"(rx401_pos)
-    $P10 = rx401_cur."charspec"()
-    unless $P10, rx401_fail
-    rx401_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("charspec")
-    rx401_pos = $P10."pos"()
-  # rx pass
-    rx401_cur."!cursor_pass"(rx401_pos, "backslash:sym<c>")
-    rx401_cur."!cursor_debug"("PASS  ", "backslash:sym<c>", " at pos=", rx401_pos)
-    .return (rx401_cur)
-  rx401_restart:
-.annotate 'line', 3
-    rx401_cur."!cursor_debug"("NEXT ", "backslash:sym<c>")
-  rx401_fail:
-    (rx401_rep, rx401_pos, $I10, $P10) = rx401_cur."!mark_fail"(0)
-    lt rx401_pos, -1, rx401_done
-    eq rx401_pos, -1, rx401_fail
-    jump $I10
-  rx401_done:
-    rx401_cur."!cursor_fail"()
-    rx401_cur."!cursor_debug"("FAIL  ", "backslash:sym<c>")
-    .return (rx401_cur)
+  alt408_0:
+    set_addr $I10, alt408_1
+    rx399_cur."!mark_push"(0, rx399_pos, $I10)
+  # rx subrule "hexint" subtype=capture negate=
+    rx399_cur."!cursor_pos"(rx399_pos)
+    $P10 = rx399_cur."hexint"()
+    unless $P10, rx399_fail
+    rx399_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexint")
+    rx399_pos = $P10."pos"()
+    goto alt408_end
+  alt408_1:
+  # rx literal  "["
+    add $I11, rx399_pos, 1
+    gt $I11, rx399_eos, rx399_fail
+    sub $I11, rx399_pos, rx399_off
+    ord $I11, rx399_tgt, $I11
+    ne $I11, 91, rx399_fail
+    add rx399_pos, 1
+  # rx subrule "hexints" subtype=capture negate=
+    rx399_cur."!cursor_pos"(rx399_pos)
+    $P10 = rx399_cur."hexints"()
+    unless $P10, rx399_fail
+    rx399_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexints")
+    rx399_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx399_pos, 1
+    gt $I11, rx399_eos, rx399_fail
+    sub $I11, rx399_pos, rx399_off
+    ord $I11, rx399_tgt, $I11
+    ne $I11, 93, rx399_fail
+    add rx399_pos, 1
+  alt408_end:
+  # rx pass
+    rx399_cur."!cursor_pass"(rx399_pos, "backslash:sym<x>")
+    if_null rx399_debug, debug_367
+    rx399_cur."!cursor_debug"("PASS", "backslash:sym<x>", " at pos=", rx399_pos)
+  debug_367:
+    .return (rx399_cur)
+  rx399_restart:
+.annotate 'line', 3
+    if_null rx399_debug, debug_368
+    rx399_cur."!cursor_debug"("NEXT", "backslash:sym<x>")
+  debug_368:
+  rx399_fail:
+    (rx399_rep, rx399_pos, $I10, $P10) = rx399_cur."!mark_fail"(0)
+    lt rx399_pos, -1, rx399_done
+    eq rx399_pos, -1, rx399_fail
+    jump $I10
+  rx399_done:
+    rx399_cur."!cursor_fail"()
+    if_null rx399_debug, debug_369
+    rx399_cur."!cursor_debug"("FAIL", "backslash:sym<x>")
+  debug_369:
+    .return (rx399_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<c>"  :subid("116_1280467470.54449") :method
-.annotate 'line', 3
-    $P403 = self."!PREFIX__!subrule"("charspec", "C")
-    $P404 = self."!PREFIX__!subrule"("charspec", "c")
+.sub "!PREFIX__backslash:sym<x>"  :subid("116_1282323996.47527") :method
+.annotate 'line', 3
+    $P401 = self."!PREFIX__!subrule"("hexints", "X[")
+    $P402 = self."!PREFIX__!subrule"("hexint", "X")
+    $P403 = self."!PREFIX__!subrule"("hexints", "x[")
+    $P404 = self."!PREFIX__!subrule"("hexint", "x")
     new $P405, "ResizablePMCArray"
+    push $P405, $P401
+    push $P405, $P402
     push $P405, $P403
     push $P405, $P404
     .return ($P405)
@@ -5348,411 +5885,470 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<A>"  :subid("117_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "backslash:sym<c>"  :subid("117_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .local string rx409_tgt
-    .local int rx409_pos
-    .local int rx409_off
-    .local int rx409_eos
-    .local int rx409_rep
-    .local pmc rx409_cur
-    (rx409_cur, rx409_pos, rx409_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx409_cur
-    .local pmc match
-    .lex "$/", match
-    length rx409_eos, rx409_tgt
-    gt rx409_pos, rx409_eos, rx409_done
-    set rx409_off, 0
-    lt rx409_pos, 2, rx409_start
-    sub rx409_off, rx409_pos, 1
-    substr rx409_tgt, rx409_tgt, rx409_off
-  rx409_start:
-    eq $I10, 1, rx409_restart
-    rx409_cur."!cursor_debug"("START ", "backslash:sym<A>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan413_done
-    goto rxscan413_scan
-  rxscan413_loop:
-    ($P10) = rx409_cur."from"()
-    inc $P10
-    set rx409_pos, $P10
-    ge rx409_pos, rx409_eos, rxscan413_done
-  rxscan413_scan:
-    set_addr $I10, rxscan413_loop
-    rx409_cur."!mark_push"(0, rx409_pos, $I10)
-  rxscan413_done:
-.annotate 'line', 134
-  # rx literal  "A"
-    add $I11, rx409_pos, 1
-    gt $I11, rx409_eos, rx409_fail
-    sub $I11, rx409_pos, rx409_off
-    substr $S10, rx409_tgt, $I11, 1
-    ne $S10, "A", rx409_fail
-    add rx409_pos, 1
-  # rx subrule "obs" subtype=method negate=
-    rx409_cur."!cursor_pos"(rx409_pos)
-    $P10 = rx409_cur."obs"("\\A as beginning-of-string matcher", "^")
-    unless $P10, rx409_fail
-    rx409_pos = $P10."pos"()
+    .local string rx410_tgt
+    .local int rx410_pos
+    .local int rx410_off
+    .local int rx410_eos
+    .local int rx410_rep
+    .local pmc rx410_cur
+    .local pmc rx410_debug
+    (rx410_cur, rx410_pos, rx410_tgt, $I10) = self."!cursor_start"()
+    getattribute rx410_debug, rx410_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx410_cur
+    .local pmc match
+    .lex "$/", match
+    length rx410_eos, rx410_tgt
+    gt rx410_pos, rx410_eos, rx410_done
+    set rx410_off, 0
+    lt rx410_pos, 2, rx410_start
+    sub rx410_off, rx410_pos, 1
+    substr rx410_tgt, rx410_tgt, rx410_off
+  rx410_start:
+    eq $I10, 1, rx410_restart
+    if_null rx410_debug, debug_370
+    rx410_cur."!cursor_debug"("START", "backslash:sym<c>")
+  debug_370:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan415_done
+    goto rxscan415_scan
+  rxscan415_loop:
+    ($P10) = rx410_cur."from"()
+    inc $P10
+    set rx410_pos, $P10
+    ge rx410_pos, rx410_eos, rxscan415_done
+  rxscan415_scan:
+    set_addr $I10, rxscan415_loop
+    rx410_cur."!mark_push"(0, rx410_pos, $I10)
+  rxscan415_done:
+.annotate 'line', 140
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_416_fail
+    rx410_cur."!mark_push"(0, rx410_pos, $I10)
+  # rx enumcharlist negate=0 
+    ge rx410_pos, rx410_eos, rx410_fail
+    sub $I10, rx410_pos, rx410_off
+    substr $S10, rx410_tgt, $I10, 1
+    index $I11, "cC", $S10
+    lt $I11, 0, rx410_fail
+    inc rx410_pos
+    set_addr $I10, rxcap_416_fail
+    ($I12, $I11) = rx410_cur."!mark_peek"($I10)
+    rx410_cur."!cursor_pos"($I11)
+    ($P10) = rx410_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx410_pos, "")
+    rx410_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_416_done
+  rxcap_416_fail:
+    goto rx410_fail
+  rxcap_416_done:
+  # rx subrule "charspec" subtype=capture negate=
+    rx410_cur."!cursor_pos"(rx410_pos)
+    $P10 = rx410_cur."charspec"()
+    unless $P10, rx410_fail
+    rx410_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("charspec")
+    rx410_pos = $P10."pos"()
   # rx pass
-    rx409_cur."!cursor_pass"(rx409_pos, "backslash:sym<A>")
-    rx409_cur."!cursor_debug"("PASS  ", "backslash:sym<A>", " at pos=", rx409_pos)
-    .return (rx409_cur)
-  rx409_restart:
-.annotate 'line', 3
-    rx409_cur."!cursor_debug"("NEXT ", "backslash:sym<A>")
-  rx409_fail:
-    (rx409_rep, rx409_pos, $I10, $P10) = rx409_cur."!mark_fail"(0)
-    lt rx409_pos, -1, rx409_done
-    eq rx409_pos, -1, rx409_fail
-    jump $I10
-  rx409_done:
-    rx409_cur."!cursor_fail"()
-    rx409_cur."!cursor_debug"("FAIL  ", "backslash:sym<A>")
-    .return (rx409_cur)
+    rx410_cur."!cursor_pass"(rx410_pos, "backslash:sym<c>")
+    if_null rx410_debug, debug_371
+    rx410_cur."!cursor_debug"("PASS", "backslash:sym<c>", " at pos=", rx410_pos)
+  debug_371:
+    .return (rx410_cur)
+  rx410_restart:
+.annotate 'line', 3
+    if_null rx410_debug, debug_372
+    rx410_cur."!cursor_debug"("NEXT", "backslash:sym<c>")
+  debug_372:
+  rx410_fail:
+    (rx410_rep, rx410_pos, $I10, $P10) = rx410_cur."!mark_fail"(0)
+    lt rx410_pos, -1, rx410_done
+    eq rx410_pos, -1, rx410_fail
+    jump $I10
+  rx410_done:
+    rx410_cur."!cursor_fail"()
+    if_null rx410_debug, debug_373
+    rx410_cur."!cursor_debug"("FAIL", "backslash:sym<c>")
+  debug_373:
+    .return (rx410_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<A>"  :subid("118_1280467470.54449") :method
-.annotate 'line', 3
-    $P411 = self."!PREFIX__!subrule"("obs", "A")
-    new $P412, "ResizablePMCArray"
-    push $P412, $P411
-    .return ($P412)
+.sub "!PREFIX__backslash:sym<c>"  :subid("118_1282323996.47527") :method
+.annotate 'line', 3
+    $P412 = self."!PREFIX__!subrule"("charspec", "C")
+    $P413 = self."!PREFIX__!subrule"("charspec", "c")
+    new $P414, "ResizablePMCArray"
+    push $P414, $P412
+    push $P414, $P413
+    .return ($P414)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<A>"  :subid("119_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx418_tgt
+    .local int rx418_pos
+    .local int rx418_off
+    .local int rx418_eos
+    .local int rx418_rep
+    .local pmc rx418_cur
+    .local pmc rx418_debug
+    (rx418_cur, rx418_pos, rx418_tgt, $I10) = self."!cursor_start"()
+    getattribute rx418_debug, rx418_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx418_cur
+    .local pmc match
+    .lex "$/", match
+    length rx418_eos, rx418_tgt
+    gt rx418_pos, rx418_eos, rx418_done
+    set rx418_off, 0
+    lt rx418_pos, 2, rx418_start
+    sub rx418_off, rx418_pos, 1
+    substr rx418_tgt, rx418_tgt, rx418_off
+  rx418_start:
+    eq $I10, 1, rx418_restart
+    if_null rx418_debug, debug_374
+    rx418_cur."!cursor_debug"("START", "backslash:sym<A>")
+  debug_374:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan422_done
+    goto rxscan422_scan
+  rxscan422_loop:
+    ($P10) = rx418_cur."from"()
+    inc $P10
+    set rx418_pos, $P10
+    ge rx418_pos, rx418_eos, rxscan422_done
+  rxscan422_scan:
+    set_addr $I10, rxscan422_loop
+    rx418_cur."!mark_push"(0, rx418_pos, $I10)
+  rxscan422_done:
+.annotate 'line', 141
+  # rx literal  "A"
+    add $I11, rx418_pos, 1
+    gt $I11, rx418_eos, rx418_fail
+    sub $I11, rx418_pos, rx418_off
+    ord $I11, rx418_tgt, $I11
+    ne $I11, 65, rx418_fail
+    add rx418_pos, 1
+  # rx subrule "obs" subtype=method negate=
+    rx418_cur."!cursor_pos"(rx418_pos)
+    $P10 = rx418_cur."obs"("\\A as beginning-of-string matcher", "^")
+    unless $P10, rx418_fail
+    rx418_pos = $P10."pos"()
+  # rx pass
+    rx418_cur."!cursor_pass"(rx418_pos, "backslash:sym<A>")
+    if_null rx418_debug, debug_375
+    rx418_cur."!cursor_debug"("PASS", "backslash:sym<A>", " at pos=", rx418_pos)
+  debug_375:
+    .return (rx418_cur)
+  rx418_restart:
+.annotate 'line', 3
+    if_null rx418_debug, debug_376
+    rx418_cur."!cursor_debug"("NEXT", "backslash:sym<A>")
+  debug_376:
+  rx418_fail:
+    (rx418_rep, rx418_pos, $I10, $P10) = rx418_cur."!mark_fail"(0)
+    lt rx418_pos, -1, rx418_done
+    eq rx418_pos, -1, rx418_fail
+    jump $I10
+  rx418_done:
+    rx418_cur."!cursor_fail"()
+    if_null rx418_debug, debug_377
+    rx418_cur."!cursor_debug"("FAIL", "backslash:sym<A>")
+  debug_377:
+    .return (rx418_cur)
+    .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<z>"  :subid("119_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx415_cur
-    .local pmc match
-    .lex "$/", match
-    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:
-    eq $I10, 1, rx415_restart
-    rx415_cur."!cursor_debug"("START ", "backslash:sym<z>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan419_done
-    goto rxscan419_scan
-  rxscan419_loop:
-    ($P10) = rx415_cur."from"()
-    inc $P10
-    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', 135
+.sub "!PREFIX__backslash:sym<A>"  :subid("120_1282323996.47527") :method
+.annotate 'line', 3
+    $P420 = self."!PREFIX__!subrule"("obs", "A")
+    new $P421, "ResizablePMCArray"
+    push $P421, $P420
+    .return ($P421)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<z>"  :subid("121_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx424_tgt
+    .local int rx424_pos
+    .local int rx424_off
+    .local int rx424_eos
+    .local int rx424_rep
+    .local pmc rx424_cur
+    .local pmc rx424_debug
+    (rx424_cur, rx424_pos, rx424_tgt, $I10) = self."!cursor_start"()
+    getattribute rx424_debug, rx424_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx424_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx424_restart
+    if_null rx424_debug, debug_378
+    rx424_cur."!cursor_debug"("START", "backslash:sym<z>")
+  debug_378:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan428_done
+    goto rxscan428_scan
+  rxscan428_loop:
+    ($P10) = rx424_cur."from"()
+    inc $P10
+    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', 142
   # rx literal  "z"
-    add $I11, rx415_pos, 1
-    gt $I11, rx415_eos, rx415_fail
-    sub $I11, rx415_pos, rx415_off
-    substr $S10, rx415_tgt, $I11, 1
-    ne $S10, "z", rx415_fail
-    add rx415_pos, 1
+    add $I11, rx424_pos, 1
+    gt $I11, rx424_eos, rx424_fail
+    sub $I11, rx424_pos, rx424_off
+    ord $I11, rx424_tgt, $I11
+    ne $I11, 122, rx424_fail
+    add rx424_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx415_cur."!cursor_pos"(rx415_pos)
-    $P10 = rx415_cur."obs"("\\z as end-of-string matcher", "$")
-    unless $P10, rx415_fail
-    rx415_pos = $P10."pos"()
-  # rx pass
-    rx415_cur."!cursor_pass"(rx415_pos, "backslash:sym<z>")
-    rx415_cur."!cursor_debug"("PASS  ", "backslash:sym<z>", " at pos=", rx415_pos)
-    .return (rx415_cur)
-  rx415_restart:
-.annotate 'line', 3
-    rx415_cur."!cursor_debug"("NEXT ", "backslash:sym<z>")
-  rx415_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
-  rx415_done:
-    rx415_cur."!cursor_fail"()
-    rx415_cur."!cursor_debug"("FAIL  ", "backslash:sym<z>")
-    .return (rx415_cur)
+    rx424_cur."!cursor_pos"(rx424_pos)
+    $P10 = rx424_cur."obs"("\\z as end-of-string matcher", "$")
+    unless $P10, rx424_fail
+    rx424_pos = $P10."pos"()
+  # rx pass
+    rx424_cur."!cursor_pass"(rx424_pos, "backslash:sym<z>")
+    if_null rx424_debug, debug_379
+    rx424_cur."!cursor_debug"("PASS", "backslash:sym<z>", " at pos=", rx424_pos)
+  debug_379:
+    .return (rx424_cur)
+  rx424_restart:
+.annotate 'line', 3
+    if_null rx424_debug, debug_380
+    rx424_cur."!cursor_debug"("NEXT", "backslash:sym<z>")
+  debug_380:
+  rx424_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
+  rx424_done:
+    rx424_cur."!cursor_fail"()
+    if_null rx424_debug, debug_381
+    rx424_cur."!cursor_debug"("FAIL", "backslash:sym<z>")
+  debug_381:
+    .return (rx424_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<z>"  :subid("120_1280467470.54449") :method
-.annotate 'line', 3
-    $P417 = self."!PREFIX__!subrule"("obs", "z")
-    new $P418, "ResizablePMCArray"
-    push $P418, $P417
-    .return ($P418)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<Z>"  :subid("121_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx421_tgt
-    .local int rx421_pos
-    .local int rx421_off
-    .local int rx421_eos
-    .local int rx421_rep
-    .local pmc rx421_cur
-    (rx421_cur, rx421_pos, rx421_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx421_cur
-    .local pmc match
-    .lex "$/", match
-    length rx421_eos, rx421_tgt
-    gt rx421_pos, rx421_eos, rx421_done
-    set rx421_off, 0
-    lt rx421_pos, 2, rx421_start
-    sub rx421_off, rx421_pos, 1
-    substr rx421_tgt, rx421_tgt, rx421_off
-  rx421_start:
-    eq $I10, 1, rx421_restart
-    rx421_cur."!cursor_debug"("START ", "backslash:sym<Z>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan425_done
-    goto rxscan425_scan
-  rxscan425_loop:
-    ($P10) = rx421_cur."from"()
-    inc $P10
-    set rx421_pos, $P10
-    ge rx421_pos, rx421_eos, rxscan425_done
-  rxscan425_scan:
-    set_addr $I10, rxscan425_loop
-    rx421_cur."!mark_push"(0, rx421_pos, $I10)
-  rxscan425_done:
-.annotate 'line', 136
+.sub "!PREFIX__backslash:sym<z>"  :subid("122_1282323996.47527") :method
+.annotate 'line', 3
+    $P426 = self."!PREFIX__!subrule"("obs", "z")
+    new $P427, "ResizablePMCArray"
+    push $P427, $P426
+    .return ($P427)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<Z>"  :subid("123_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx430_tgt
+    .local int rx430_pos
+    .local int rx430_off
+    .local int rx430_eos
+    .local int rx430_rep
+    .local pmc rx430_cur
+    .local pmc rx430_debug
+    (rx430_cur, rx430_pos, rx430_tgt, $I10) = self."!cursor_start"()
+    getattribute rx430_debug, rx430_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx430_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx430_restart
+    if_null rx430_debug, debug_382
+    rx430_cur."!cursor_debug"("START", "backslash:sym<Z>")
+  debug_382:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan434_done
+    goto rxscan434_scan
+  rxscan434_loop:
+    ($P10) = rx430_cur."from"()
+    inc $P10
+    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', 143
   # rx literal  "Z"
-    add $I11, rx421_pos, 1
-    gt $I11, rx421_eos, rx421_fail
-    sub $I11, rx421_pos, rx421_off
-    substr $S10, rx421_tgt, $I11, 1
-    ne $S10, "Z", rx421_fail
-    add rx421_pos, 1
+    add $I11, rx430_pos, 1
+    gt $I11, rx430_eos, rx430_fail
+    sub $I11, rx430_pos, rx430_off
+    ord $I11, rx430_tgt, $I11
+    ne $I11, 90, rx430_fail
+    add rx430_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx421_cur."!cursor_pos"(rx421_pos)
-    $P10 = rx421_cur."obs"("\\Z as end-of-string matcher", "\\n?$")
-    unless $P10, rx421_fail
-    rx421_pos = $P10."pos"()
-  # rx pass
-    rx421_cur."!cursor_pass"(rx421_pos, "backslash:sym<Z>")
-    rx421_cur."!cursor_debug"("PASS  ", "backslash:sym<Z>", " at pos=", rx421_pos)
-    .return (rx421_cur)
-  rx421_restart:
-.annotate 'line', 3
-    rx421_cur."!cursor_debug"("NEXT ", "backslash:sym<Z>")
-  rx421_fail:
-    (rx421_rep, rx421_pos, $I10, $P10) = rx421_cur."!mark_fail"(0)
-    lt rx421_pos, -1, rx421_done
-    eq rx421_pos, -1, rx421_fail
-    jump $I10
-  rx421_done:
-    rx421_cur."!cursor_fail"()
-    rx421_cur."!cursor_debug"("FAIL  ", "backslash:sym<Z>")
-    .return (rx421_cur)
+    rx430_cur."!cursor_pos"(rx430_pos)
+    $P10 = rx430_cur."obs"("\\Z as end-of-string matcher", "\\n?$")
+    unless $P10, rx430_fail
+    rx430_pos = $P10."pos"()
+  # rx pass
+    rx430_cur."!cursor_pass"(rx430_pos, "backslash:sym<Z>")
+    if_null rx430_debug, debug_383
+    rx430_cur."!cursor_debug"("PASS", "backslash:sym<Z>", " at pos=", rx430_pos)
+  debug_383:
+    .return (rx430_cur)
+  rx430_restart:
+.annotate 'line', 3
+    if_null rx430_debug, debug_384
+    rx430_cur."!cursor_debug"("NEXT", "backslash:sym<Z>")
+  debug_384:
+  rx430_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
+  rx430_done:
+    rx430_cur."!cursor_fail"()
+    if_null rx430_debug, debug_385
+    rx430_cur."!cursor_debug"("FAIL", "backslash:sym<Z>")
+  debug_385:
+    .return (rx430_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<Z>"  :subid("122_1280467470.54449") :method
-.annotate 'line', 3
-    $P423 = self."!PREFIX__!subrule"("obs", "Z")
-    new $P424, "ResizablePMCArray"
-    push $P424, $P423
-    .return ($P424)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<Q>"  :subid("123_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx427_tgt
-    .local int rx427_pos
-    .local int rx427_off
-    .local int rx427_eos
-    .local int rx427_rep
-    .local pmc rx427_cur
-    (rx427_cur, rx427_pos, rx427_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx427_cur
-    .local pmc match
-    .lex "$/", match
-    length rx427_eos, rx427_tgt
-    gt rx427_pos, rx427_eos, rx427_done
-    set rx427_off, 0
-    lt rx427_pos, 2, rx427_start
-    sub rx427_off, rx427_pos, 1
-    substr rx427_tgt, rx427_tgt, rx427_off
-  rx427_start:
-    eq $I10, 1, rx427_restart
-    rx427_cur."!cursor_debug"("START ", "backslash:sym<Q>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan431_done
-    goto rxscan431_scan
-  rxscan431_loop:
-    ($P10) = rx427_cur."from"()
-    inc $P10
-    set rx427_pos, $P10
-    ge rx427_pos, rx427_eos, rxscan431_done
-  rxscan431_scan:
-    set_addr $I10, rxscan431_loop
-    rx427_cur."!mark_push"(0, rx427_pos, $I10)
-  rxscan431_done:
-.annotate 'line', 137
+.sub "!PREFIX__backslash:sym<Z>"  :subid("124_1282323996.47527") :method
+.annotate 'line', 3
+    $P432 = self."!PREFIX__!subrule"("obs", "Z")
+    new $P433, "ResizablePMCArray"
+    push $P433, $P432
+    .return ($P433)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<Q>"  :subid("125_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx436_tgt
+    .local int rx436_pos
+    .local int rx436_off
+    .local int rx436_eos
+    .local int rx436_rep
+    .local pmc rx436_cur
+    .local pmc rx436_debug
+    (rx436_cur, rx436_pos, rx436_tgt, $I10) = self."!cursor_start"()
+    getattribute rx436_debug, rx436_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx436_cur
+    .local pmc match
+    .lex "$/", match
+    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:
+    eq $I10, 1, rx436_restart
+    if_null rx436_debug, debug_386
+    rx436_cur."!cursor_debug"("START", "backslash:sym<Q>")
+  debug_386:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan440_done
+    goto rxscan440_scan
+  rxscan440_loop:
+    ($P10) = rx436_cur."from"()
+    inc $P10
+    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', 144
   # rx literal  "Q"
-    add $I11, rx427_pos, 1
-    gt $I11, rx427_eos, rx427_fail
-    sub $I11, rx427_pos, rx427_off
-    substr $S10, rx427_tgt, $I11, 1
-    ne $S10, "Q", rx427_fail
-    add rx427_pos, 1
+    add $I11, rx436_pos, 1
+    gt $I11, rx436_eos, rx436_fail
+    sub $I11, rx436_pos, rx436_off
+    ord $I11, rx436_tgt, $I11
+    ne $I11, 81, rx436_fail
+    add rx436_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx427_cur."!cursor_pos"(rx427_pos)
-    $P10 = rx427_cur."obs"("\\Q as quotemeta", "quotes or literal variable match")
-    unless $P10, rx427_fail
-    rx427_pos = $P10."pos"()
-  # rx pass
-    rx427_cur."!cursor_pass"(rx427_pos, "backslash:sym<Q>")
-    rx427_cur."!cursor_debug"("PASS  ", "backslash:sym<Q>", " at pos=", rx427_pos)
-    .return (rx427_cur)
-  rx427_restart:
-.annotate 'line', 3
-    rx427_cur."!cursor_debug"("NEXT ", "backslash:sym<Q>")
-  rx427_fail:
-    (rx427_rep, rx427_pos, $I10, $P10) = rx427_cur."!mark_fail"(0)
-    lt rx427_pos, -1, rx427_done
-    eq rx427_pos, -1, rx427_fail
-    jump $I10
-  rx427_done:
-    rx427_cur."!cursor_fail"()
-    rx427_cur."!cursor_debug"("FAIL  ", "backslash:sym<Q>")
-    .return (rx427_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<Q>"  :subid("124_1280467470.54449") :method
-.annotate 'line', 3
-    $P429 = self."!PREFIX__!subrule"("obs", "Q")
-    new $P430, "ResizablePMCArray"
-    push $P430, $P429
-    .return ($P430)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<misc>"  :subid("125_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx433_tgt
-    .local int rx433_pos
-    .local int rx433_off
-    .local int rx433_eos
-    .local int rx433_rep
-    .local pmc rx433_cur
-    (rx433_cur, rx433_pos, rx433_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx433_cur
-    .local pmc match
-    .lex "$/", match
-    length rx433_eos, rx433_tgt
-    gt rx433_pos, rx433_eos, rx433_done
-    set rx433_off, 0
-    lt rx433_pos, 2, rx433_start
-    sub rx433_off, rx433_pos, 1
-    substr rx433_tgt, rx433_tgt, rx433_off
-  rx433_start:
-    eq $I10, 1, rx433_restart
-    rx433_cur."!cursor_debug"("START ", "backslash:sym<misc>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan436_done
-    goto rxscan436_scan
-  rxscan436_loop:
-    ($P10) = rx433_cur."from"()
-    inc $P10
-    set rx433_pos, $P10
-    ge rx433_pos, rx433_eos, rxscan436_done
-  rxscan436_scan:
-    set_addr $I10, rxscan436_loop
-    rx433_cur."!mark_push"(0, rx433_pos, $I10)
-  rxscan436_done:
-.annotate 'line', 138
-  # rx charclass W
-    ge rx433_pos, rx433_eos, rx433_fail
-    sub $I10, rx433_pos, rx433_off
-    is_cclass $I11, 8192, rx433_tgt, $I10
-    if $I11, rx433_fail
-    inc rx433_pos
+    rx436_cur."!cursor_pos"(rx436_pos)
+    $P10 = rx436_cur."obs"("\\Q as quotemeta", "quotes or literal variable match")
+    unless $P10, rx436_fail
+    rx436_pos = $P10."pos"()
   # rx pass
-    rx433_cur."!cursor_pass"(rx433_pos, "backslash:sym<misc>")
-    rx433_cur."!cursor_debug"("PASS  ", "backslash:sym<misc>", " at pos=", rx433_pos)
-    .return (rx433_cur)
-  rx433_restart:
+    rx436_cur."!cursor_pass"(rx436_pos, "backslash:sym<Q>")
+    if_null rx436_debug, debug_387
+    rx436_cur."!cursor_debug"("PASS", "backslash:sym<Q>", " at pos=", rx436_pos)
+  debug_387:
+    .return (rx436_cur)
+  rx436_restart:
 .annotate 'line', 3
-    rx433_cur."!cursor_debug"("NEXT ", "backslash:sym<misc>")
-  rx433_fail:
-    (rx433_rep, rx433_pos, $I10, $P10) = rx433_cur."!mark_fail"(0)
-    lt rx433_pos, -1, rx433_done
-    eq rx433_pos, -1, rx433_fail
+    if_null rx436_debug, debug_388
+    rx436_cur."!cursor_debug"("NEXT", "backslash:sym<Q>")
+  debug_388:
+  rx436_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
-  rx433_done:
-    rx433_cur."!cursor_fail"()
-    rx433_cur."!cursor_debug"("FAIL  ", "backslash:sym<misc>")
-    .return (rx433_cur)
+  rx436_done:
+    rx436_cur."!cursor_fail"()
+    if_null rx436_debug, debug_389
+    rx436_cur."!cursor_debug"("FAIL", "backslash:sym<Q>")
+  debug_389:
+    .return (rx436_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<misc>"  :subid("126_1280467470.54449") :method
+.sub "!PREFIX__backslash:sym<Q>"  :subid("126_1282323996.47527") :method
 .annotate 'line', 3
-    new $P435, "ResizablePMCArray"
-    push $P435, ""
-    .return ($P435)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion"  :subid("127_1280467470.54449") :method
-.annotate 'line', 140
-    $P438 = self."!protoregex"("assertion")
-    .return ($P438)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion"  :subid("128_1280467470.54449") :method
-.annotate 'line', 140
-    $P440 = self."!PREFIX__!protoregex"("assertion")
-    .return ($P440)
+    $P438 = self."!PREFIX__!subrule"("obs", "Q")
+    new $P439, "ResizablePMCArray"
+    push $P439, $P438
+    .return ($P439)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<?>"  :subid("129_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "backslash:sym<misc>"  :subid("127_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .const 'Sub' $P449 = "131_1280467470.54449" 
-    capture_lex $P449
     .local string rx442_tgt
     .local int rx442_pos
     .local int rx442_off
     .local int rx442_eos
     .local int rx442_rep
     .local pmc rx442_cur
+    .local pmc rx442_debug
     (rx442_cur, rx442_pos, rx442_tgt, $I10) = self."!cursor_start"()
+    getattribute rx442_debug, rx442_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx442_cur
     .local pmc match
     .lex "$/", match
@@ -5764,53 +6360,39 @@
     substr rx442_tgt, rx442_tgt, rx442_off
   rx442_start:
     eq $I10, 1, rx442_restart
-    rx442_cur."!cursor_debug"("START ", "assertion:sym<?>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan446_done
-    goto rxscan446_scan
-  rxscan446_loop:
+    if_null rx442_debug, debug_390
+    rx442_cur."!cursor_debug"("START", "backslash:sym<misc>")
+  debug_390:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan445_done
+    goto rxscan445_scan
+  rxscan445_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', 142
-  # rx literal  "?"
-    add $I11, rx442_pos, 1
-    gt $I11, rx442_eos, rx442_fail
-    sub $I11, rx442_pos, rx442_off
-    substr $S10, rx442_tgt, $I11, 1
-    ne $S10, "?", rx442_fail
-    add rx442_pos, 1
-  alt447_0:
-    set_addr $I10, alt447_1
+    ge rx442_pos, rx442_eos, rxscan445_done
+  rxscan445_scan:
+    set_addr $I10, rxscan445_loop
     rx442_cur."!mark_push"(0, rx442_pos, $I10)
-  # rx subrule "before" subtype=zerowidth negate=
-    rx442_cur."!cursor_pos"(rx442_pos)
-    .const 'Sub' $P449 = "131_1280467470.54449" 
-    capture_lex $P449
-    $P10 = rx442_cur."before"($P449)
-    unless $P10, rx442_fail
-    goto alt447_end
-  alt447_1:
-  # rx subrule "assertion" subtype=capture negate=
-    rx442_cur."!cursor_pos"(rx442_pos)
-    $P10 = rx442_cur."assertion"()
-    unless $P10, rx442_fail
-    rx442_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("assertion")
-    rx442_pos = $P10."pos"()
-  alt447_end:
-  # rx pass
-    rx442_cur."!cursor_pass"(rx442_pos, "assertion:sym<?>")
-    rx442_cur."!cursor_debug"("PASS  ", "assertion:sym<?>", " at pos=", rx442_pos)
+  rxscan445_done:
+.annotate 'line', 145
+  # rx charclass W
+    ge rx442_pos, rx442_eos, rx442_fail
+    sub $I10, rx442_pos, rx442_off
+    is_cclass $I11, 8192, rx442_tgt, $I10
+    if $I11, rx442_fail
+    inc rx442_pos
+  # rx pass
+    rx442_cur."!cursor_pass"(rx442_pos, "backslash:sym<misc>")
+    if_null rx442_debug, debug_391
+    rx442_cur."!cursor_debug"("PASS", "backslash:sym<misc>", " at pos=", rx442_pos)
+  debug_391:
     .return (rx442_cur)
   rx442_restart:
 .annotate 'line', 3
-    rx442_cur."!cursor_debug"("NEXT ", "assertion:sym<?>")
+    if_null rx442_debug, debug_392
+    rx442_cur."!cursor_debug"("NEXT", "backslash:sym<misc>")
+  debug_392:
   rx442_fail:
     (rx442_rep, rx442_pos, $I10, $P10) = rx442_cur."!mark_fail"(0)
     lt rx442_pos, -1, rx442_done
@@ -5818,330 +6400,329 @@
     jump $I10
   rx442_done:
     rx442_cur."!cursor_fail"()
-    rx442_cur."!cursor_debug"("FAIL  ", "assertion:sym<?>")
+    if_null rx442_debug, debug_393
+    rx442_cur."!cursor_debug"("FAIL", "backslash:sym<misc>")
+  debug_393:
     .return (rx442_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<?>"  :subid("130_1280467470.54449") :method
+.sub "!PREFIX__backslash:sym<misc>"  :subid("128_1282323996.47527") :method
 .annotate 'line', 3
-    $P444 = self."!PREFIX__!subrule"("assertion", "?")
-    new $P445, "ResizablePMCArray"
-    push $P445, $P444
-    push $P445, "?"
-    .return ($P445)
+    new $P444, "ResizablePMCArray"
+    push $P444, ""
+    .return ($P444)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block448"  :anon :subid("131_1280467470.54449") :method :outer("129_1280467470.54449")
-.annotate 'line', 142
-    .local string rx450_tgt
-    .local int rx450_pos
-    .local int rx450_off
-    .local int rx450_eos
-    .local int rx450_rep
-    .local pmc rx450_cur
-    (rx450_cur, rx450_pos, rx450_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx450_cur
-    .local pmc match
-    .lex "$/", match
-    length rx450_eos, rx450_tgt
-    gt rx450_pos, rx450_eos, rx450_done
-    set rx450_off, 0
-    lt rx450_pos, 2, rx450_start
-    sub rx450_off, rx450_pos, 1
-    substr rx450_tgt, rx450_tgt, rx450_off
-  rx450_start:
-    eq $I10, 1, rx450_restart
-    rx450_cur."!cursor_debug"("START ", "")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan451_done
-    goto rxscan451_scan
-  rxscan451_loop:
-    ($P10) = rx450_cur."from"()
-    inc $P10
-    set rx450_pos, $P10
-    ge rx450_pos, rx450_eos, rxscan451_done
-  rxscan451_scan:
-    set_addr $I10, rxscan451_loop
-    rx450_cur."!mark_push"(0, rx450_pos, $I10)
-  rxscan451_done:
-  # rx literal  ">"
-    add $I11, rx450_pos, 1
-    gt $I11, rx450_eos, rx450_fail
-    sub $I11, rx450_pos, rx450_off
-    substr $S10, rx450_tgt, $I11, 1
-    ne $S10, ">", rx450_fail
-    add rx450_pos, 1
-  # rx pass
-    rx450_cur."!cursor_pass"(rx450_pos, "")
-    rx450_cur."!cursor_debug"("PASS  ", "", " at pos=", rx450_pos)
-    .return (rx450_cur)
-  rx450_restart:
-    rx450_cur."!cursor_debug"("NEXT ", "")
-  rx450_fail:
-    (rx450_rep, rx450_pos, $I10, $P10) = rx450_cur."!mark_fail"(0)
-    lt rx450_pos, -1, rx450_done
-    eq rx450_pos, -1, rx450_fail
-    jump $I10
-  rx450_done:
-    rx450_cur."!cursor_fail"()
-    rx450_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx450_cur)
-    .return ()
+.sub "assertion"  :subid("129_1282323996.47527") :method
+.annotate 'line', 147
+    $P447 = self."!protoregex"("assertion")
+    .return ($P447)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__assertion"  :subid("130_1282323996.47527") :method
+.annotate 'line', 147
+    $P449 = self."!PREFIX__!protoregex"("assertion")
+    .return ($P449)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<!>"  :subid("132_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "assertion:sym<?>"  :subid("131_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .const 'Sub' $P460 = "134_1280467470.54449" 
-    capture_lex $P460
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx453_cur
-    .local pmc match
-    .lex "$/", match
-    length rx453_eos, rx453_tgt
-    gt rx453_pos, rx453_eos, rx453_done
-    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:
-    eq $I10, 1, rx453_restart
-    rx453_cur."!cursor_debug"("START ", "assertion:sym<!>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan457_done
-    goto rxscan457_scan
-  rxscan457_loop:
-    ($P10) = rx453_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', 143
-  # rx literal  "!"
-    add $I11, rx453_pos, 1
-    gt $I11, rx453_eos, rx453_fail
-    sub $I11, rx453_pos, rx453_off
-    substr $S10, rx453_tgt, $I11, 1
-    ne $S10, "!", rx453_fail
-    add rx453_pos, 1
-  alt458_0:
-    set_addr $I10, alt458_1
-    rx453_cur."!mark_push"(0, rx453_pos, $I10)
+    .const 'Sub' $P458 = "133_1282323996.47527" 
+    capture_lex $P458
+    .local string rx451_tgt
+    .local int rx451_pos
+    .local int rx451_off
+    .local int rx451_eos
+    .local int rx451_rep
+    .local pmc rx451_cur
+    .local pmc rx451_debug
+    (rx451_cur, rx451_pos, rx451_tgt, $I10) = self."!cursor_start"()
+    getattribute rx451_debug, rx451_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx451_cur
+    .local pmc match
+    .lex "$/", match
+    length rx451_eos, rx451_tgt
+    gt rx451_pos, rx451_eos, rx451_done
+    set rx451_off, 0
+    lt rx451_pos, 2, rx451_start
+    sub rx451_off, rx451_pos, 1
+    substr rx451_tgt, rx451_tgt, rx451_off
+  rx451_start:
+    eq $I10, 1, rx451_restart
+    if_null rx451_debug, debug_394
+    rx451_cur."!cursor_debug"("START", "assertion:sym<?>")
+  debug_394:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan455_done
+    goto rxscan455_scan
+  rxscan455_loop:
+    ($P10) = rx451_cur."from"()
+    inc $P10
+    set rx451_pos, $P10
+    ge rx451_pos, rx451_eos, rxscan455_done
+  rxscan455_scan:
+    set_addr $I10, rxscan455_loop
+    rx451_cur."!mark_push"(0, rx451_pos, $I10)
+  rxscan455_done:
+.annotate 'line', 149
+  # rx literal  "?"
+    add $I11, rx451_pos, 1
+    gt $I11, rx451_eos, rx451_fail
+    sub $I11, rx451_pos, rx451_off
+    ord $I11, rx451_tgt, $I11
+    ne $I11, 63, rx451_fail
+    add rx451_pos, 1
+  alt456_0:
+    set_addr $I10, alt456_1
+    rx451_cur."!mark_push"(0, rx451_pos, $I10)
   # rx subrule "before" subtype=zerowidth negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    .const 'Sub' $P460 = "134_1280467470.54449" 
-    capture_lex $P460
-    $P10 = rx453_cur."before"($P460)
-    unless $P10, rx453_fail
-    goto alt458_end
-  alt458_1:
+    rx451_cur."!cursor_pos"(rx451_pos)
+    .const 'Sub' $P458 = "133_1282323996.47527" 
+    capture_lex $P458
+    $P10 = rx451_cur."before"($P458)
+    unless $P10, rx451_fail
+    goto alt456_end
+  alt456_1:
   # rx subrule "assertion" subtype=capture negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."assertion"()
-    unless $P10, rx453_fail
-    rx453_cur."!mark_push"(0, -1, 0, $P10)
+    rx451_cur."!cursor_pos"(rx451_pos)
+    $P10 = rx451_cur."assertion"()
+    unless $P10, rx451_fail
+    rx451_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx453_pos = $P10."pos"()
-  alt458_end:
+    rx451_pos = $P10."pos"()
+  alt456_end:
   # rx pass
-    rx453_cur."!cursor_pass"(rx453_pos, "assertion:sym<!>")
-    rx453_cur."!cursor_debug"("PASS  ", "assertion:sym<!>", " at pos=", rx453_pos)
-    .return (rx453_cur)
-  rx453_restart:
+    rx451_cur."!cursor_pass"(rx451_pos, "assertion:sym<?>")
+    if_null rx451_debug, debug_399
+    rx451_cur."!cursor_debug"("PASS", "assertion:sym<?>", " at pos=", rx451_pos)
+  debug_399:
+    .return (rx451_cur)
+  rx451_restart:
 .annotate 'line', 3
-    rx453_cur."!cursor_debug"("NEXT ", "assertion:sym<!>")
-  rx453_fail:
-    (rx453_rep, rx453_pos, $I10, $P10) = rx453_cur."!mark_fail"(0)
-    lt rx453_pos, -1, rx453_done
-    eq rx453_pos, -1, rx453_fail
+    if_null rx451_debug, debug_400
+    rx451_cur."!cursor_debug"("NEXT", "assertion:sym<?>")
+  debug_400:
+  rx451_fail:
+    (rx451_rep, rx451_pos, $I10, $P10) = rx451_cur."!mark_fail"(0)
+    lt rx451_pos, -1, rx451_done
+    eq rx451_pos, -1, rx451_fail
     jump $I10
-  rx453_done:
-    rx453_cur."!cursor_fail"()
-    rx453_cur."!cursor_debug"("FAIL  ", "assertion:sym<!>")
-    .return (rx453_cur)
+  rx451_done:
+    rx451_cur."!cursor_fail"()
+    if_null rx451_debug, debug_401
+    rx451_cur."!cursor_debug"("FAIL", "assertion:sym<?>")
+  debug_401:
+    .return (rx451_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<!>"  :subid("133_1280467470.54449") :method
+.sub "!PREFIX__assertion:sym<?>"  :subid("132_1282323996.47527") :method
 .annotate 'line', 3
-    $P455 = self."!PREFIX__!subrule"("assertion", "!")
-    new $P456, "ResizablePMCArray"
-    push $P456, $P455
-    push $P456, "!"
-    .return ($P456)
+    $P453 = self."!PREFIX__!subrule"("assertion", "?")
+    new $P454, "ResizablePMCArray"
+    push $P454, $P453
+    push $P454, "?"
+    .return ($P454)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block459"  :anon :subid("134_1280467470.54449") :method :outer("132_1280467470.54449")
-.annotate 'line', 143
-    .local string rx461_tgt
-    .local int rx461_pos
-    .local int rx461_off
-    .local int rx461_eos
-    .local int rx461_rep
-    .local pmc rx461_cur
-    (rx461_cur, rx461_pos, rx461_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx461_cur
-    .local pmc match
-    .lex "$/", match
-    length rx461_eos, rx461_tgt
-    gt rx461_pos, rx461_eos, rx461_done
-    set rx461_off, 0
-    lt rx461_pos, 2, rx461_start
-    sub rx461_off, rx461_pos, 1
-    substr rx461_tgt, rx461_tgt, rx461_off
-  rx461_start:
-    eq $I10, 1, rx461_restart
-    rx461_cur."!cursor_debug"("START ", "")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan462_done
-    goto rxscan462_scan
-  rxscan462_loop:
-    ($P10) = rx461_cur."from"()
-    inc $P10
-    set rx461_pos, $P10
-    ge rx461_pos, rx461_eos, rxscan462_done
-  rxscan462_scan:
-    set_addr $I10, rxscan462_loop
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-  rxscan462_done:
+.sub "_block457"  :anon :subid("133_1282323996.47527") :method :outer("131_1282323996.47527")
+.annotate 'line', 149
+    .local string rx459_tgt
+    .local int rx459_pos
+    .local int rx459_off
+    .local int rx459_eos
+    .local int rx459_rep
+    .local pmc rx459_cur
+    .local pmc rx459_debug
+    (rx459_cur, rx459_pos, rx459_tgt, $I10) = self."!cursor_start"()
+    getattribute rx459_debug, rx459_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx459_cur
+    .local pmc match
+    .lex "$/", match
+    length rx459_eos, rx459_tgt
+    gt rx459_pos, rx459_eos, rx459_done
+    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:
+    eq $I10, 1, rx459_restart
+    if_null rx459_debug, debug_395
+    rx459_cur."!cursor_debug"("START", "")
+  debug_395:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan460_done
+    goto rxscan460_scan
+  rxscan460_loop:
+    ($P10) = rx459_cur."from"()
+    inc $P10
+    set rx459_pos, $P10
+    ge rx459_pos, rx459_eos, rxscan460_done
+  rxscan460_scan:
+    set_addr $I10, rxscan460_loop
+    rx459_cur."!mark_push"(0, rx459_pos, $I10)
+  rxscan460_done:
   # rx literal  ">"
-    add $I11, rx461_pos, 1
-    gt $I11, rx461_eos, rx461_fail
-    sub $I11, rx461_pos, rx461_off
-    substr $S10, rx461_tgt, $I11, 1
-    ne $S10, ">", rx461_fail
-    add rx461_pos, 1
-  # rx pass
-    rx461_cur."!cursor_pass"(rx461_pos, "")
-    rx461_cur."!cursor_debug"("PASS  ", "", " at pos=", rx461_pos)
-    .return (rx461_cur)
-  rx461_restart:
-    rx461_cur."!cursor_debug"("NEXT ", "")
-  rx461_fail:
-    (rx461_rep, rx461_pos, $I10, $P10) = rx461_cur."!mark_fail"(0)
-    lt rx461_pos, -1, rx461_done
-    eq rx461_pos, -1, rx461_fail
-    jump $I10
-  rx461_done:
-    rx461_cur."!cursor_fail"()
-    rx461_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx461_cur)
+    add $I11, rx459_pos, 1
+    gt $I11, rx459_eos, rx459_fail
+    sub $I11, rx459_pos, rx459_off
+    ord $I11, rx459_tgt, $I11
+    ne $I11, 62, rx459_fail
+    add rx459_pos, 1
+  # rx pass
+    rx459_cur."!cursor_pass"(rx459_pos, "")
+    if_null rx459_debug, debug_396
+    rx459_cur."!cursor_debug"("PASS", "", " at pos=", rx459_pos)
+  debug_396:
+    .return (rx459_cur)
+  rx459_restart:
+    if_null rx459_debug, debug_397
+    rx459_cur."!cursor_debug"("NEXT", "")
+  debug_397:
+  rx459_fail:
+    (rx459_rep, rx459_pos, $I10, $P10) = rx459_cur."!mark_fail"(0)
+    lt rx459_pos, -1, rx459_done
+    eq rx459_pos, -1, rx459_fail
+    jump $I10
+  rx459_done:
+    rx459_cur."!cursor_fail"()
+    if_null rx459_debug, debug_398
+    rx459_cur."!cursor_debug"("FAIL", "")
+  debug_398:
+    .return (rx459_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<method>"  :subid("135_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx464_cur
-    .local pmc match
-    .lex "$/", match
-    length rx464_eos, rx464_tgt
-    gt rx464_pos, rx464_eos, rx464_done
-    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:
-    eq $I10, 1, rx464_restart
-    rx464_cur."!cursor_debug"("START ", "assertion:sym<method>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan468_done
-    goto rxscan468_scan
-  rxscan468_loop:
-    ($P10) = rx464_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', 146
-  # rx literal  "."
-    add $I11, rx464_pos, 1
-    gt $I11, rx464_eos, rx464_fail
-    sub $I11, rx464_pos, rx464_off
-    substr $S10, rx464_tgt, $I11, 1
-    ne $S10, ".", rx464_fail
-    add rx464_pos, 1
+.sub "assertion:sym<!>"  :subid("134_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .const 'Sub' $P469 = "136_1282323996.47527" 
+    capture_lex $P469
+    .local string rx462_tgt
+    .local int rx462_pos
+    .local int rx462_off
+    .local int rx462_eos
+    .local int rx462_rep
+    .local pmc rx462_cur
+    .local pmc rx462_debug
+    (rx462_cur, rx462_pos, rx462_tgt, $I10) = self."!cursor_start"()
+    getattribute rx462_debug, rx462_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx462_cur
+    .local pmc match
+    .lex "$/", match
+    length rx462_eos, rx462_tgt
+    gt rx462_pos, rx462_eos, rx462_done
+    set rx462_off, 0
+    lt rx462_pos, 2, rx462_start
+    sub rx462_off, rx462_pos, 1
+    substr rx462_tgt, rx462_tgt, rx462_off
+  rx462_start:
+    eq $I10, 1, rx462_restart
+    if_null rx462_debug, debug_402
+    rx462_cur."!cursor_debug"("START", "assertion:sym<!>")
+  debug_402:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan466_done
+    goto rxscan466_scan
+  rxscan466_loop:
+    ($P10) = rx462_cur."from"()
+    inc $P10
+    set rx462_pos, $P10
+    ge rx462_pos, rx462_eos, rxscan466_done
+  rxscan466_scan:
+    set_addr $I10, rxscan466_loop
+    rx462_cur."!mark_push"(0, rx462_pos, $I10)
+  rxscan466_done:
+.annotate 'line', 150
+  # rx literal  "!"
+    add $I11, rx462_pos, 1
+    gt $I11, rx462_eos, rx462_fail
+    sub $I11, rx462_pos, rx462_off
+    ord $I11, rx462_tgt, $I11
+    ne $I11, 33, rx462_fail
+    add rx462_pos, 1
+  alt467_0:
+    set_addr $I10, alt467_1
+    rx462_cur."!mark_push"(0, rx462_pos, $I10)
+  # rx subrule "before" subtype=zerowidth negate=
+    rx462_cur."!cursor_pos"(rx462_pos)
+    .const 'Sub' $P469 = "136_1282323996.47527" 
+    capture_lex $P469
+    $P10 = rx462_cur."before"($P469)
+    unless $P10, rx462_fail
+    goto alt467_end
+  alt467_1:
   # rx subrule "assertion" subtype=capture negate=
-    rx464_cur."!cursor_pos"(rx464_pos)
-    $P10 = rx464_cur."assertion"()
-    unless $P10, rx464_fail
-    rx464_cur."!mark_push"(0, -1, 0, $P10)
+    rx462_cur."!cursor_pos"(rx462_pos)
+    $P10 = rx462_cur."assertion"()
+    unless $P10, rx462_fail
+    rx462_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx464_pos = $P10."pos"()
-.annotate 'line', 145
+    rx462_pos = $P10."pos"()
+  alt467_end:
   # rx pass
-    rx464_cur."!cursor_pass"(rx464_pos, "assertion:sym<method>")
-    rx464_cur."!cursor_debug"("PASS  ", "assertion:sym<method>", " at pos=", rx464_pos)
-    .return (rx464_cur)
-  rx464_restart:
+    rx462_cur."!cursor_pass"(rx462_pos, "assertion:sym<!>")
+    if_null rx462_debug, debug_407
+    rx462_cur."!cursor_debug"("PASS", "assertion:sym<!>", " at pos=", rx462_pos)
+  debug_407:
+    .return (rx462_cur)
+  rx462_restart:
 .annotate 'line', 3
-    rx464_cur."!cursor_debug"("NEXT ", "assertion:sym<method>")
-  rx464_fail:
-    (rx464_rep, rx464_pos, $I10, $P10) = rx464_cur."!mark_fail"(0)
-    lt rx464_pos, -1, rx464_done
-    eq rx464_pos, -1, rx464_fail
+    if_null rx462_debug, debug_408
+    rx462_cur."!cursor_debug"("NEXT", "assertion:sym<!>")
+  debug_408:
+  rx462_fail:
+    (rx462_rep, rx462_pos, $I10, $P10) = rx462_cur."!mark_fail"(0)
+    lt rx462_pos, -1, rx462_done
+    eq rx462_pos, -1, rx462_fail
     jump $I10
-  rx464_done:
-    rx464_cur."!cursor_fail"()
-    rx464_cur."!cursor_debug"("FAIL  ", "assertion:sym<method>")
-    .return (rx464_cur)
+  rx462_done:
+    rx462_cur."!cursor_fail"()
+    if_null rx462_debug, debug_409
+    rx462_cur."!cursor_debug"("FAIL", "assertion:sym<!>")
+  debug_409:
+    .return (rx462_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<method>"  :subid("136_1280467470.54449") :method
+.sub "!PREFIX__assertion:sym<!>"  :subid("135_1282323996.47527") :method
 .annotate 'line', 3
-    $P466 = self."!PREFIX__!subrule"("assertion", ".")
-    new $P467, "ResizablePMCArray"
-    push $P467, $P466
-    .return ($P467)
+    $P464 = self."!PREFIX__!subrule"("assertion", "!")
+    new $P465, "ResizablePMCArray"
+    push $P465, $P464
+    push $P465, "!"
+    .return ($P465)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<name>"  :subid("137_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .const 'Sub' $P478 = "139_1280467470.54449" 
-    capture_lex $P478
+.sub "_block468"  :anon :subid("136_1282323996.47527") :method :outer("134_1282323996.47527")
+.annotate 'line', 150
     .local string rx470_tgt
     .local int rx470_pos
     .local int rx470_off
     .local int rx470_eos
     .local int rx470_rep
     .local pmc rx470_cur
+    .local pmc rx470_debug
     (rx470_cur, rx470_pos, rx470_tgt, $I10) = self."!cursor_start"()
-    rx470_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    getattribute rx470_debug, rx470_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx470_cur
     .local pmc match
     .lex "$/", match
@@ -6153,135 +6734,38 @@
     substr rx470_tgt, rx470_tgt, rx470_off
   rx470_start:
     eq $I10, 1, rx470_restart
-    rx470_cur."!cursor_debug"("START ", "assertion:sym<name>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan474_done
-    goto rxscan474_scan
-  rxscan474_loop:
+    if_null rx470_debug, debug_403
+    rx470_cur."!cursor_debug"("START", "")
+  debug_403:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan471_done
+    goto rxscan471_scan
+  rxscan471_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
+    ge rx470_pos, rx470_eos, rxscan471_done
+  rxscan471_scan:
+    set_addr $I10, rxscan471_loop
     rx470_cur."!mark_push"(0, rx470_pos, $I10)
-  rxscan474_done:
-.annotate 'line', 150
-  # rx subrule "identifier" subtype=capture negate=
-    rx470_cur."!cursor_pos"(rx470_pos)
-    $P10 = rx470_cur."identifier"()
-    unless $P10, rx470_fail
-    rx470_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("longname")
-    rx470_pos = $P10."pos"()
-.annotate 'line', 157
-  # rx rxquantr475 ** 0..1
-    set_addr $I10, rxquantr475_done
-    rx470_cur."!mark_push"(0, rx470_pos, $I10)
-  rxquantr475_loop:
-  alt476_0:
-.annotate 'line', 151
-    set_addr $I10, alt476_1
-    rx470_cur."!mark_push"(0, rx470_pos, $I10)
-.annotate 'line', 152
-  # rx subrule "before" subtype=zerowidth negate=
-    rx470_cur."!cursor_pos"(rx470_pos)
-    .const 'Sub' $P478 = "139_1280467470.54449" 
-    capture_lex $P478
-    $P10 = rx470_cur."before"($P478)
-    unless $P10, rx470_fail
-    goto alt476_end
-  alt476_1:
-    set_addr $I10, alt476_2
-    rx470_cur."!mark_push"(0, rx470_pos, $I10)
-.annotate 'line', 153
-  # rx literal  "="
-    add $I11, rx470_pos, 1
-    gt $I11, rx470_eos, rx470_fail
-    sub $I11, rx470_pos, rx470_off
-    substr $S10, rx470_tgt, $I11, 1
-    ne $S10, "=", rx470_fail
-    add rx470_pos, 1
-  # rx subrule "assertion" subtype=capture negate=
-    rx470_cur."!cursor_pos"(rx470_pos)
-    $P10 = rx470_cur."assertion"()
-    unless $P10, rx470_fail
-    rx470_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("assertion")
-    rx470_pos = $P10."pos"()
-    goto alt476_end
-  alt476_2:
-    set_addr $I10, alt476_3
-    rx470_cur."!mark_push"(0, rx470_pos, $I10)
-.annotate 'line', 154
-  # rx literal  ":"
-    add $I11, rx470_pos, 1
-    gt $I11, rx470_eos, rx470_fail
-    sub $I11, rx470_pos, rx470_off
-    substr $S10, rx470_tgt, $I11, 1
-    ne $S10, ":", rx470_fail
-    add rx470_pos, 1
-  # rx subrule "arglist" subtype=capture negate=
-    rx470_cur."!cursor_pos"(rx470_pos)
-    $P10 = rx470_cur."arglist"()
-    unless $P10, rx470_fail
-    rx470_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx470_pos = $P10."pos"()
-    goto alt476_end
-  alt476_3:
-    set_addr $I10, alt476_4
-    rx470_cur."!mark_push"(0, rx470_pos, $I10)
-.annotate 'line', 155
-  # rx literal  "("
-    add $I11, rx470_pos, 1
-    gt $I11, rx470_eos, rx470_fail
-    sub $I11, rx470_pos, rx470_off
-    substr $S10, rx470_tgt, $I11, 1
-    ne $S10, "(", rx470_fail
-    add rx470_pos, 1
-  # rx subrule "arglist" subtype=capture negate=
-    rx470_cur."!cursor_pos"(rx470_pos)
-    $P10 = rx470_cur."arglist"()
-    unless $P10, rx470_fail
-    rx470_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx470_pos = $P10."pos"()
-  # rx literal  ")"
+  rxscan471_done:
+  # rx literal  ">"
     add $I11, rx470_pos, 1
     gt $I11, rx470_eos, rx470_fail
     sub $I11, rx470_pos, rx470_off
-    substr $S10, rx470_tgt, $I11, 1
-    ne $S10, ")", rx470_fail
+    ord $I11, rx470_tgt, $I11
+    ne $I11, 62, rx470_fail
     add rx470_pos, 1
-    goto alt476_end
-  alt476_4:
-.annotate 'line', 156
-  # rx subrule "normspace" subtype=method negate=
-    rx470_cur."!cursor_pos"(rx470_pos)
-    $P10 = rx470_cur."normspace"()
-    unless $P10, rx470_fail
-    rx470_pos = $P10."pos"()
-  # rx subrule "nibbler" subtype=capture negate=
-    rx470_cur."!cursor_pos"(rx470_pos)
-    $P10 = rx470_cur."nibbler"()
-    unless $P10, rx470_fail
-    rx470_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("nibbler")
-    rx470_pos = $P10."pos"()
-  alt476_end:
-.annotate 'line', 157
-    set_addr $I10, rxquantr475_done
-    (rx470_rep) = rx470_cur."!mark_commit"($I10)
-  rxquantr475_done:
-.annotate 'line', 149
   # rx pass
-    rx470_cur."!cursor_pass"(rx470_pos, "assertion:sym<name>")
-    rx470_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx470_pos)
+    rx470_cur."!cursor_pass"(rx470_pos, "")
+    if_null rx470_debug, debug_404
+    rx470_cur."!cursor_debug"("PASS", "", " at pos=", rx470_pos)
+  debug_404:
     .return (rx470_cur)
   rx470_restart:
-.annotate 'line', 3
-    rx470_cur."!cursor_debug"("NEXT ", "assertion:sym<name>")
+    if_null rx470_debug, debug_405
+    rx470_cur."!cursor_debug"("NEXT", "")
+  debug_405:
   rx470_fail:
     (rx470_rep, rx470_pos, $I10, $P10) = rx470_cur."!mark_fail"(0)
     lt rx470_pos, -1, rx470_done
@@ -6289,32 +6773,119 @@
     jump $I10
   rx470_done:
     rx470_cur."!cursor_fail"()
-    rx470_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
+    if_null rx470_debug, debug_406
+    rx470_cur."!cursor_debug"("FAIL", "")
+  debug_406:
     .return (rx470_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("138_1280467470.54449") :method
+.sub "assertion:sym<method>"  :subid("137_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx473_tgt
+    .local int rx473_pos
+    .local int rx473_off
+    .local int rx473_eos
+    .local int rx473_rep
+    .local pmc rx473_cur
+    .local pmc rx473_debug
+    (rx473_cur, rx473_pos, rx473_tgt, $I10) = self."!cursor_start"()
+    getattribute rx473_debug, rx473_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx473_cur
+    .local pmc match
+    .lex "$/", match
+    length rx473_eos, rx473_tgt
+    gt rx473_pos, rx473_eos, rx473_done
+    set rx473_off, 0
+    lt rx473_pos, 2, rx473_start
+    sub rx473_off, rx473_pos, 1
+    substr rx473_tgt, rx473_tgt, rx473_off
+  rx473_start:
+    eq $I10, 1, rx473_restart
+    if_null rx473_debug, debug_410
+    rx473_cur."!cursor_debug"("START", "assertion:sym<method>")
+  debug_410:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan477_done
+    goto rxscan477_scan
+  rxscan477_loop:
+    ($P10) = rx473_cur."from"()
+    inc $P10
+    set rx473_pos, $P10
+    ge rx473_pos, rx473_eos, rxscan477_done
+  rxscan477_scan:
+    set_addr $I10, rxscan477_loop
+    rx473_cur."!mark_push"(0, rx473_pos, $I10)
+  rxscan477_done:
+.annotate 'line', 153
+  # rx literal  "."
+    add $I11, rx473_pos, 1
+    gt $I11, rx473_eos, rx473_fail
+    sub $I11, rx473_pos, rx473_off
+    ord $I11, rx473_tgt, $I11
+    ne $I11, 46, rx473_fail
+    add rx473_pos, 1
+  # rx subrule "assertion" subtype=capture negate=
+    rx473_cur."!cursor_pos"(rx473_pos)
+    $P10 = rx473_cur."assertion"()
+    unless $P10, rx473_fail
+    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("assertion")
+    rx473_pos = $P10."pos"()
+.annotate 'line', 152
+  # rx pass
+    rx473_cur."!cursor_pass"(rx473_pos, "assertion:sym<method>")
+    if_null rx473_debug, debug_411
+    rx473_cur."!cursor_debug"("PASS", "assertion:sym<method>", " at pos=", rx473_pos)
+  debug_411:
+    .return (rx473_cur)
+  rx473_restart:
+.annotate 'line', 3
+    if_null rx473_debug, debug_412
+    rx473_cur."!cursor_debug"("NEXT", "assertion:sym<method>")
+  debug_412:
+  rx473_fail:
+    (rx473_rep, rx473_pos, $I10, $P10) = rx473_cur."!mark_fail"(0)
+    lt rx473_pos, -1, rx473_done
+    eq rx473_pos, -1, rx473_fail
+    jump $I10
+  rx473_done:
+    rx473_cur."!cursor_fail"()
+    if_null rx473_debug, debug_413
+    rx473_cur."!cursor_debug"("FAIL", "assertion:sym<method>")
+  debug_413:
+    .return (rx473_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__assertion:sym<method>"  :subid("138_1282323996.47527") :method
 .annotate 'line', 3
-    $P472 = self."!PREFIX__!subrule"("identifier", "")
-    new $P473, "ResizablePMCArray"
-    push $P473, $P472
-    .return ($P473)
+    $P475 = self."!PREFIX__!subrule"("assertion", ".")
+    new $P476, "ResizablePMCArray"
+    push $P476, $P475
+    .return ($P476)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block477"  :anon :subid("139_1280467470.54449") :method :outer("137_1280467470.54449")
-.annotate 'line', 152
+.sub "assertion:sym<name>"  :subid("139_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .const 'Sub' $P487 = "141_1282323996.47527" 
+    capture_lex $P487
     .local string rx479_tgt
     .local int rx479_pos
     .local int rx479_off
     .local int rx479_eos
     .local int rx479_rep
     .local pmc rx479_cur
+    .local pmc rx479_debug
     (rx479_cur, rx479_pos, rx479_tgt, $I10) = self."!cursor_start"()
+    rx479_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    getattribute rx479_debug, rx479_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx479_cur
     .local pmc match
     .lex "$/", match
@@ -6326,32 +6897,141 @@
     substr rx479_tgt, rx479_tgt, rx479_off
   rx479_start:
     eq $I10, 1, rx479_restart
-    rx479_cur."!cursor_debug"("START ", "")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan480_done
-    goto rxscan480_scan
-  rxscan480_loop:
+    if_null rx479_debug, debug_414
+    rx479_cur."!cursor_debug"("START", "assertion:sym<name>")
+  debug_414:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan483_done
+    goto rxscan483_scan
+  rxscan483_loop:
     ($P10) = rx479_cur."from"()
     inc $P10
     set rx479_pos, $P10
-    ge rx479_pos, rx479_eos, rxscan480_done
-  rxscan480_scan:
-    set_addr $I10, rxscan480_loop
+    ge rx479_pos, rx479_eos, rxscan483_done
+  rxscan483_scan:
+    set_addr $I10, rxscan483_loop
     rx479_cur."!mark_push"(0, rx479_pos, $I10)
-  rxscan480_done:
-  # rx literal  ">"
+  rxscan483_done:
+.annotate 'line', 157
+  # rx subrule "identifier" subtype=capture negate=
+    rx479_cur."!cursor_pos"(rx479_pos)
+    $P10 = rx479_cur."identifier"()
+    unless $P10, rx479_fail
+    rx479_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("longname")
+    rx479_pos = $P10."pos"()
+.annotate 'line', 164
+  # rx rxquantr484 ** 0..1
+    set_addr $I10, rxquantr484_done
+    rx479_cur."!mark_push"(0, rx479_pos, $I10)
+  rxquantr484_loop:
+  alt485_0:
+.annotate 'line', 158
+    set_addr $I10, alt485_1
+    rx479_cur."!mark_push"(0, rx479_pos, $I10)
+.annotate 'line', 159
+  # rx subrule "before" subtype=zerowidth negate=
+    rx479_cur."!cursor_pos"(rx479_pos)
+    .const 'Sub' $P487 = "141_1282323996.47527" 
+    capture_lex $P487
+    $P10 = rx479_cur."before"($P487)
+    unless $P10, rx479_fail
+    goto alt485_end
+  alt485_1:
+    set_addr $I10, alt485_2
+    rx479_cur."!mark_push"(0, rx479_pos, $I10)
+.annotate 'line', 160
+  # rx literal  "="
+    add $I11, rx479_pos, 1
+    gt $I11, rx479_eos, rx479_fail
+    sub $I11, rx479_pos, rx479_off
+    ord $I11, rx479_tgt, $I11
+    ne $I11, 61, rx479_fail
+    add rx479_pos, 1
+  # rx subrule "assertion" subtype=capture negate=
+    rx479_cur."!cursor_pos"(rx479_pos)
+    $P10 = rx479_cur."assertion"()
+    unless $P10, rx479_fail
+    rx479_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("assertion")
+    rx479_pos = $P10."pos"()
+    goto alt485_end
+  alt485_2:
+    set_addr $I10, alt485_3
+    rx479_cur."!mark_push"(0, rx479_pos, $I10)
+.annotate 'line', 161
+  # rx literal  ":"
+    add $I11, rx479_pos, 1
+    gt $I11, rx479_eos, rx479_fail
+    sub $I11, rx479_pos, rx479_off
+    ord $I11, rx479_tgt, $I11
+    ne $I11, 58, rx479_fail
+    add rx479_pos, 1
+  # rx subrule "arglist" subtype=capture negate=
+    rx479_cur."!cursor_pos"(rx479_pos)
+    $P10 = rx479_cur."arglist"()
+    unless $P10, rx479_fail
+    rx479_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx479_pos = $P10."pos"()
+    goto alt485_end
+  alt485_3:
+    set_addr $I10, alt485_4
+    rx479_cur."!mark_push"(0, rx479_pos, $I10)
+.annotate 'line', 162
+  # rx literal  "("
+    add $I11, rx479_pos, 1
+    gt $I11, rx479_eos, rx479_fail
+    sub $I11, rx479_pos, rx479_off
+    ord $I11, rx479_tgt, $I11
+    ne $I11, 40, rx479_fail
+    add rx479_pos, 1
+  # rx subrule "arglist" subtype=capture negate=
+    rx479_cur."!cursor_pos"(rx479_pos)
+    $P10 = rx479_cur."arglist"()
+    unless $P10, rx479_fail
+    rx479_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx479_pos = $P10."pos"()
+  # rx literal  ")"
     add $I11, rx479_pos, 1
     gt $I11, rx479_eos, rx479_fail
     sub $I11, rx479_pos, rx479_off
-    substr $S10, rx479_tgt, $I11, 1
-    ne $S10, ">", rx479_fail
+    ord $I11, rx479_tgt, $I11
+    ne $I11, 41, rx479_fail
     add rx479_pos, 1
+    goto alt485_end
+  alt485_4:
+.annotate 'line', 163
+  # rx subrule "normspace" subtype=method negate=
+    rx479_cur."!cursor_pos"(rx479_pos)
+    $P10 = rx479_cur."normspace"()
+    unless $P10, rx479_fail
+    rx479_pos = $P10."pos"()
+  # rx subrule "nibbler" subtype=capture negate=
+    rx479_cur."!cursor_pos"(rx479_pos)
+    $P10 = rx479_cur."nibbler"()
+    unless $P10, rx479_fail
+    rx479_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("nibbler")
+    rx479_pos = $P10."pos"()
+  alt485_end:
+.annotate 'line', 164
+    set_addr $I10, rxquantr484_done
+    (rx479_rep) = rx479_cur."!mark_commit"($I10)
+  rxquantr484_done:
+.annotate 'line', 156
   # rx pass
-    rx479_cur."!cursor_pass"(rx479_pos, "")
-    rx479_cur."!cursor_debug"("PASS  ", "", " at pos=", rx479_pos)
+    rx479_cur."!cursor_pass"(rx479_pos, "assertion:sym<name>")
+    if_null rx479_debug, debug_419
+    rx479_cur."!cursor_debug"("PASS", "assertion:sym<name>", " at pos=", rx479_pos)
+  debug_419:
     .return (rx479_cur)
   rx479_restart:
-    rx479_cur."!cursor_debug"("NEXT ", "")
+.annotate 'line', 3
+    if_null rx479_debug, debug_420
+    rx479_cur."!cursor_debug"("NEXT", "assertion:sym<name>")
+  debug_420:
   rx479_fail:
     (rx479_rep, rx479_pos, $I10, $P10) = rx479_cur."!mark_fail"(0)
     lt rx479_pos, -1, rx479_done
@@ -6359,118 +7039,36 @@
     jump $I10
   rx479_done:
     rx479_cur."!cursor_fail"()
-    rx479_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx479_debug, debug_421
+    rx479_cur."!cursor_debug"("FAIL", "assertion:sym<name>")
+  debug_421:
     .return (rx479_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<[>"  :subid("140_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .const 'Sub' $P487 = "142_1280467470.54449" 
-    capture_lex $P487
-    .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, $I10) = self."!cursor_start"()
-    rx482_cur."!cursor_caparray"("cclass_elem")
-    .lex unicode:"$\x{a2}", rx482_cur
-    .local pmc match
-    .lex "$/", match
-    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:
-    eq $I10, 1, rx482_restart
-    rx482_cur."!cursor_debug"("START ", "assertion:sym<[>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan485_done
-    goto rxscan485_scan
-  rxscan485_loop:
-    ($P10) = rx482_cur."from"()
-    inc $P10
-    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', 160
-  # rx subrule "before" subtype=zerowidth negate=
-    rx482_cur."!cursor_pos"(rx482_pos)
-    .const 'Sub' $P487 = "142_1280467470.54449" 
-    capture_lex $P487
-    $P10 = rx482_cur."before"($P487)
-    unless $P10, rx482_fail
-  # rx rxquantr491 ** 1..*
-    set_addr $I10, rxquantr491_done
-    rx482_cur."!mark_push"(0, -1, $I10)
-  rxquantr491_loop:
-  # rx subrule "cclass_elem" subtype=capture negate=
-    rx482_cur."!cursor_pos"(rx482_pos)
-    $P10 = rx482_cur."cclass_elem"()
-    unless $P10, rx482_fail
-    goto rxsubrule492_pass
-  rxsubrule492_back:
-    $P10 = $P10."!cursor_next"()
-    unless $P10, rx482_fail
-  rxsubrule492_pass:
-    set_addr $I10, rxsubrule492_back
-    rx482_cur."!mark_push"(0, rx482_pos, $I10, $P10)
-    $P10."!cursor_names"("cclass_elem")
-    rx482_pos = $P10."pos"()
-    set_addr $I10, rxquantr491_done
-    (rx482_rep) = rx482_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr491_done
-    rx482_cur."!mark_push"(rx482_rep, rx482_pos, $I10)
-    goto rxquantr491_loop
-  rxquantr491_done:
-  # rx pass
-    rx482_cur."!cursor_pass"(rx482_pos, "assertion:sym<[>")
-    rx482_cur."!cursor_debug"("PASS  ", "assertion:sym<[>", " at pos=", rx482_pos)
-    .return (rx482_cur)
-  rx482_restart:
-.annotate 'line', 3
-    rx482_cur."!cursor_debug"("NEXT ", "assertion:sym<[>")
-  rx482_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
-  rx482_done:
-    rx482_cur."!cursor_fail"()
-    rx482_cur."!cursor_debug"("FAIL  ", "assertion:sym<[>")
-    .return (rx482_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<[>"  :subid("141_1280467470.54449") :method
+.sub "!PREFIX__assertion:sym<name>"  :subid("140_1282323996.47527") :method
 .annotate 'line', 3
-    new $P484, "ResizablePMCArray"
-    push $P484, ""
-    .return ($P484)
+    $P481 = self."!PREFIX__!subrule"("identifier", "")
+    new $P482, "ResizablePMCArray"
+    push $P482, $P481
+    .return ($P482)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block486"  :anon :subid("142_1280467470.54449") :method :outer("140_1280467470.54449")
-.annotate 'line', 160
+.sub "_block486"  :anon :subid("141_1282323996.47527") :method :outer("139_1282323996.47527")
+.annotate 'line', 159
     .local string rx488_tgt
     .local int rx488_pos
     .local int rx488_off
     .local int rx488_eos
     .local int rx488_rep
     .local pmc rx488_cur
+    .local pmc rx488_debug
     (rx488_cur, rx488_pos, rx488_tgt, $I10) = self."!cursor_start"()
+    getattribute rx488_debug, rx488_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx488_cur
     .local pmc match
     .lex "$/", match
@@ -6482,7 +7080,9 @@
     substr rx488_tgt, rx488_tgt, rx488_off
   rx488_start:
     eq $I10, 1, rx488_restart
-    rx488_cur."!cursor_debug"("START ", "")
+    if_null rx488_debug, debug_415
+    rx488_cur."!cursor_debug"("START", "")
+  debug_415:
     $I10 = self.'from'()
     ne $I10, -1, rxscan489_done
     goto rxscan489_scan
@@ -6495,43 +7095,23 @@
     set_addr $I10, rxscan489_loop
     rx488_cur."!mark_push"(0, rx488_pos, $I10)
   rxscan489_done:
-  alt490_0:
-    set_addr $I10, alt490_1
-    rx488_cur."!mark_push"(0, rx488_pos, $I10)
-  # rx literal  "["
-    add $I11, rx488_pos, 1
-    gt $I11, rx488_eos, rx488_fail
-    sub $I11, rx488_pos, rx488_off
-    substr $S10, rx488_tgt, $I11, 1
-    ne $S10, "[", rx488_fail
-    add rx488_pos, 1
-    goto alt490_end
-  alt490_1:
-    set_addr $I10, alt490_2
-    rx488_cur."!mark_push"(0, rx488_pos, $I10)
-  # rx literal  "+"
-    add $I11, rx488_pos, 1
-    gt $I11, rx488_eos, rx488_fail
-    sub $I11, rx488_pos, rx488_off
-    substr $S10, rx488_tgt, $I11, 1
-    ne $S10, "+", rx488_fail
-    add rx488_pos, 1
-    goto alt490_end
-  alt490_2:
-  # rx literal  "-"
+  # rx literal  ">"
     add $I11, rx488_pos, 1
     gt $I11, rx488_eos, rx488_fail
     sub $I11, rx488_pos, rx488_off
-    substr $S10, rx488_tgt, $I11, 1
-    ne $S10, "-", rx488_fail
+    ord $I11, rx488_tgt, $I11
+    ne $I11, 62, rx488_fail
     add rx488_pos, 1
-  alt490_end:
   # rx pass
     rx488_cur."!cursor_pass"(rx488_pos, "")
-    rx488_cur."!cursor_debug"("PASS  ", "", " at pos=", rx488_pos)
+    if_null rx488_debug, debug_416
+    rx488_cur."!cursor_debug"("PASS", "", " at pos=", rx488_pos)
+  debug_416:
     .return (rx488_cur)
   rx488_restart:
-    rx488_cur."!cursor_debug"("NEXT ", "")
+    if_null rx488_debug, debug_417
+    rx488_cur."!cursor_debug"("NEXT", "")
+  debug_417:
   rx488_fail:
     (rx488_rep, rx488_pos, $I10, $P10) = rx488_cur."!mark_fail"(0)
     lt rx488_pos, -1, rx488_done
@@ -6539,514 +7119,622 @@
     jump $I10
   rx488_done:
     rx488_cur."!cursor_fail"()
-    rx488_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx488_debug, debug_418
+    rx488_cur."!cursor_debug"("FAIL", "")
+  debug_418:
     .return (rx488_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "cclass_elem"  :subid("143_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "assertion:sym<[>"  :subid("142_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .const 'Sub' $P505 = "145_1280467470.54449" 
-    capture_lex $P505
-    .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, $I10) = self."!cursor_start"()
-    rx494_cur."!cursor_caparray"("charspec")
-    .lex unicode:"$\x{a2}", rx494_cur
-    .local pmc match
-    .lex "$/", match
-    length rx494_eos, rx494_tgt
-    gt rx494_pos, rx494_eos, rx494_done
-    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:
-    eq $I10, 1, rx494_restart
-    rx494_cur."!cursor_debug"("START ", "cclass_elem")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan497_done
-    goto rxscan497_scan
-  rxscan497_loop:
-    ($P10) = rx494_cur."from"()
-    inc $P10
-    set rx494_pos, $P10
-    ge rx494_pos, rx494_eos, rxscan497_done
-  rxscan497_scan:
-    set_addr $I10, rxscan497_loop
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
-  rxscan497_done:
-.annotate 'line', 163
-  # rx subcapture "sign"
-    set_addr $I10, rxcap_499_fail
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
-  alt498_0:
-    set_addr $I10, alt498_1
-    rx494_cur."!mark_push"(0, rx494_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 alt498_end
-  alt498_1:
-    set_addr $I10, alt498_2
-    rx494_cur."!mark_push"(0, rx494_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 alt498_end
-  alt498_2:
-  alt498_end:
-    set_addr $I10, rxcap_499_fail
-    ($I12, $I11) = rx494_cur."!mark_peek"($I10)
-    rx494_cur."!cursor_pos"($I11)
-    ($P10) = rx494_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx494_pos, "")
-    rx494_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sign")
-    goto rxcap_499_done
-  rxcap_499_fail:
-    goto rx494_fail
-  rxcap_499_done:
-.annotate 'line', 164
-  # rx rxquantr500 ** 0..1
+    .const 'Sub' $P496 = "144_1282323996.47527" 
+    capture_lex $P496
+    .local string rx491_tgt
+    .local int rx491_pos
+    .local int rx491_off
+    .local int rx491_eos
+    .local int rx491_rep
+    .local pmc rx491_cur
+    .local pmc rx491_debug
+    (rx491_cur, rx491_pos, rx491_tgt, $I10) = self."!cursor_start"()
+    rx491_cur."!cursor_caparray"("cclass_elem")
+    getattribute rx491_debug, rx491_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx491_cur
+    .local pmc match
+    .lex "$/", match
+    length rx491_eos, rx491_tgt
+    gt rx491_pos, rx491_eos, rx491_done
+    set rx491_off, 0
+    lt rx491_pos, 2, rx491_start
+    sub rx491_off, rx491_pos, 1
+    substr rx491_tgt, rx491_tgt, rx491_off
+  rx491_start:
+    eq $I10, 1, rx491_restart
+    if_null rx491_debug, debug_422
+    rx491_cur."!cursor_debug"("START", "assertion:sym<[>")
+  debug_422:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan494_done
+    goto rxscan494_scan
+  rxscan494_loop:
+    ($P10) = rx491_cur."from"()
+    inc $P10
+    set rx491_pos, $P10
+    ge rx491_pos, rx491_eos, rxscan494_done
+  rxscan494_scan:
+    set_addr $I10, rxscan494_loop
+    rx491_cur."!mark_push"(0, rx491_pos, $I10)
+  rxscan494_done:
+.annotate 'line', 167
+  # rx subrule "before" subtype=zerowidth negate=
+    rx491_cur."!cursor_pos"(rx491_pos)
+    .const 'Sub' $P496 = "144_1282323996.47527" 
+    capture_lex $P496
+    $P10 = rx491_cur."before"($P496)
+    unless $P10, rx491_fail
+  # rx rxquantr500 ** 1..*
     set_addr $I10, rxquantr500_done
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
+    rx491_cur."!mark_push"(0, -1, $I10)
   rxquantr500_loop:
-  # rx subrule "normspace" subtype=method negate=
-    rx494_cur."!cursor_pos"(rx494_pos)
-    $P10 = rx494_cur."normspace"()
-    unless $P10, rx494_fail
+  # rx subrule "cclass_elem" subtype=capture negate=
+    rx491_cur."!cursor_pos"(rx491_pos)
+    $P10 = rx491_cur."cclass_elem"()
+    unless $P10, rx491_fail
     goto rxsubrule501_pass
   rxsubrule501_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx494_fail
+    unless $P10, rx491_fail
   rxsubrule501_pass:
     set_addr $I10, rxsubrule501_back
-    rx494_cur."!mark_push"(0, rx494_pos, $I10, $P10)
-    rx494_pos = $P10."pos"()
+    rx491_cur."!mark_push"(0, rx491_pos, $I10, $P10)
+    $P10."!cursor_names"("cclass_elem")
+    rx491_pos = $P10."pos"()
     set_addr $I10, rxquantr500_done
-    (rx494_rep) = rx494_cur."!mark_commit"($I10)
+    (rx491_rep) = rx491_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr500_done
+    rx491_cur."!mark_push"(rx491_rep, rx491_pos, $I10)
+    goto rxquantr500_loop
   rxquantr500_done:
-  alt502_0:
-.annotate 'line', 165
-    set_addr $I10, alt502_1
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
-.annotate 'line', 166
+  # rx pass
+    rx491_cur."!cursor_pass"(rx491_pos, "assertion:sym<[>")
+    if_null rx491_debug, debug_427
+    rx491_cur."!cursor_debug"("PASS", "assertion:sym<[>", " at pos=", rx491_pos)
+  debug_427:
+    .return (rx491_cur)
+  rx491_restart:
+.annotate 'line', 3
+    if_null rx491_debug, debug_428
+    rx491_cur."!cursor_debug"("NEXT", "assertion:sym<[>")
+  debug_428:
+  rx491_fail:
+    (rx491_rep, rx491_pos, $I10, $P10) = rx491_cur."!mark_fail"(0)
+    lt rx491_pos, -1, rx491_done
+    eq rx491_pos, -1, rx491_fail
+    jump $I10
+  rx491_done:
+    rx491_cur."!cursor_fail"()
+    if_null rx491_debug, debug_429
+    rx491_cur."!cursor_debug"("FAIL", "assertion:sym<[>")
+  debug_429:
+    .return (rx491_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__assertion:sym<[>"  :subid("143_1282323996.47527") :method
+.annotate 'line', 3
+    new $P493, "ResizablePMCArray"
+    push $P493, ""
+    .return ($P493)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block495"  :anon :subid("144_1282323996.47527") :method :outer("142_1282323996.47527")
+.annotate 'line', 167
+    .local string rx497_tgt
+    .local int rx497_pos
+    .local int rx497_off
+    .local int rx497_eos
+    .local int rx497_rep
+    .local pmc rx497_cur
+    .local pmc rx497_debug
+    (rx497_cur, rx497_pos, rx497_tgt, $I10) = self."!cursor_start"()
+    getattribute rx497_debug, rx497_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx497_cur
+    .local pmc match
+    .lex "$/", match
+    length rx497_eos, rx497_tgt
+    gt rx497_pos, rx497_eos, rx497_done
+    set rx497_off, 0
+    lt rx497_pos, 2, rx497_start
+    sub rx497_off, rx497_pos, 1
+    substr rx497_tgt, rx497_tgt, rx497_off
+  rx497_start:
+    eq $I10, 1, rx497_restart
+    if_null rx497_debug, debug_423
+    rx497_cur."!cursor_debug"("START", "")
+  debug_423:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan498_done
+    goto rxscan498_scan
+  rxscan498_loop:
+    ($P10) = rx497_cur."from"()
+    inc $P10
+    set rx497_pos, $P10
+    ge rx497_pos, rx497_eos, rxscan498_done
+  rxscan498_scan:
+    set_addr $I10, rxscan498_loop
+    rx497_cur."!mark_push"(0, rx497_pos, $I10)
+  rxscan498_done:
+  alt499_0:
+    set_addr $I10, alt499_1
+    rx497_cur."!mark_push"(0, rx497_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
-.annotate 'line', 169
-  # rx rxquantr503 ** 0..*
-    set_addr $I10, rxquantr503_done
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
-  rxquantr503_loop:
-.annotate 'line', 166
-  # rx subrule $P505 subtype=capture negate=
-    rx494_cur."!cursor_pos"(rx494_pos)
-    .const 'Sub' $P505 = "145_1280467470.54449" 
-    capture_lex $P505
-    $P10 = rx494_cur.$P505()
-    unless $P10, rx494_fail
-    goto rxsubrule523_pass
-  rxsubrule523_back:
+    add $I11, rx497_pos, 1
+    gt $I11, rx497_eos, rx497_fail
+    sub $I11, rx497_pos, rx497_off
+    ord $I11, rx497_tgt, $I11
+    ne $I11, 91, rx497_fail
+    add rx497_pos, 1
+    goto alt499_end
+  alt499_1:
+    set_addr $I10, alt499_2
+    rx497_cur."!mark_push"(0, rx497_pos, $I10)
+  # rx literal  "+"
+    add $I11, rx497_pos, 1
+    gt $I11, rx497_eos, rx497_fail
+    sub $I11, rx497_pos, rx497_off
+    ord $I11, rx497_tgt, $I11
+    ne $I11, 43, rx497_fail
+    add rx497_pos, 1
+    goto alt499_end
+  alt499_2:
+  # rx literal  "-"
+    add $I11, rx497_pos, 1
+    gt $I11, rx497_eos, rx497_fail
+    sub $I11, rx497_pos, rx497_off
+    ord $I11, rx497_tgt, $I11
+    ne $I11, 45, rx497_fail
+    add rx497_pos, 1
+  alt499_end:
+  # rx pass
+    rx497_cur."!cursor_pass"(rx497_pos, "")
+    if_null rx497_debug, debug_424
+    rx497_cur."!cursor_debug"("PASS", "", " at pos=", rx497_pos)
+  debug_424:
+    .return (rx497_cur)
+  rx497_restart:
+    if_null rx497_debug, debug_425
+    rx497_cur."!cursor_debug"("NEXT", "")
+  debug_425:
+  rx497_fail:
+    (rx497_rep, rx497_pos, $I10, $P10) = rx497_cur."!mark_fail"(0)
+    lt rx497_pos, -1, rx497_done
+    eq rx497_pos, -1, rx497_fail
+    jump $I10
+  rx497_done:
+    rx497_cur."!cursor_fail"()
+    if_null rx497_debug, debug_426
+    rx497_cur."!cursor_debug"("FAIL", "")
+  debug_426:
+    .return (rx497_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "cclass_elem"  :subid("145_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .const 'Sub' $P514 = "147_1282323996.47527" 
+    capture_lex $P514
+    .local string rx503_tgt
+    .local int rx503_pos
+    .local int rx503_off
+    .local int rx503_eos
+    .local int rx503_rep
+    .local pmc rx503_cur
+    .local pmc rx503_debug
+    (rx503_cur, rx503_pos, rx503_tgt, $I10) = self."!cursor_start"()
+    rx503_cur."!cursor_caparray"("charspec")
+    getattribute rx503_debug, rx503_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx503_cur
+    .local pmc match
+    .lex "$/", match
+    length rx503_eos, rx503_tgt
+    gt rx503_pos, rx503_eos, rx503_done
+    set rx503_off, 0
+    lt rx503_pos, 2, rx503_start
+    sub rx503_off, rx503_pos, 1
+    substr rx503_tgt, rx503_tgt, rx503_off
+  rx503_start:
+    eq $I10, 1, rx503_restart
+    if_null rx503_debug, debug_430
+    rx503_cur."!cursor_debug"("START", "cclass_elem")
+  debug_430:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan506_done
+    goto rxscan506_scan
+  rxscan506_loop:
+    ($P10) = rx503_cur."from"()
+    inc $P10
+    set rx503_pos, $P10
+    ge rx503_pos, rx503_eos, rxscan506_done
+  rxscan506_scan:
+    set_addr $I10, rxscan506_loop
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
+  rxscan506_done:
+.annotate 'line', 170
+  # rx subcapture "sign"
+    set_addr $I10, rxcap_508_fail
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
+  alt507_0:
+    set_addr $I10, alt507_1
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
+  # rx literal  "+"
+    add $I11, rx503_pos, 1
+    gt $I11, rx503_eos, rx503_fail
+    sub $I11, rx503_pos, rx503_off
+    ord $I11, rx503_tgt, $I11
+    ne $I11, 43, rx503_fail
+    add rx503_pos, 1
+    goto alt507_end
+  alt507_1:
+    set_addr $I10, alt507_2
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
+  # rx literal  "-"
+    add $I11, rx503_pos, 1
+    gt $I11, rx503_eos, rx503_fail
+    sub $I11, rx503_pos, rx503_off
+    ord $I11, rx503_tgt, $I11
+    ne $I11, 45, rx503_fail
+    add rx503_pos, 1
+    goto alt507_end
+  alt507_2:
+  alt507_end:
+    set_addr $I10, rxcap_508_fail
+    ($I12, $I11) = rx503_cur."!mark_peek"($I10)
+    rx503_cur."!cursor_pos"($I11)
+    ($P10) = rx503_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx503_pos, "")
+    rx503_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sign")
+    goto rxcap_508_done
+  rxcap_508_fail:
+    goto rx503_fail
+  rxcap_508_done:
+.annotate 'line', 171
+  # rx rxquantr509 ** 0..1
+    set_addr $I10, rxquantr509_done
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
+  rxquantr509_loop:
+  # rx subrule "normspace" subtype=method negate=
+    rx503_cur."!cursor_pos"(rx503_pos)
+    $P10 = rx503_cur."normspace"()
+    unless $P10, rx503_fail
+    goto rxsubrule510_pass
+  rxsubrule510_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx503_fail
+  rxsubrule510_pass:
+    set_addr $I10, rxsubrule510_back
+    rx503_cur."!mark_push"(0, rx503_pos, $I10, $P10)
+    rx503_pos = $P10."pos"()
+    set_addr $I10, rxquantr509_done
+    (rx503_rep) = rx503_cur."!mark_commit"($I10)
+  rxquantr509_done:
+  alt511_0:
+.annotate 'line', 172
+    set_addr $I10, alt511_1
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
+.annotate 'line', 173
+  # rx literal  "["
+    add $I11, rx503_pos, 1
+    gt $I11, rx503_eos, rx503_fail
+    sub $I11, rx503_pos, rx503_off
+    ord $I11, rx503_tgt, $I11
+    ne $I11, 91, rx503_fail
+    add rx503_pos, 1
+.annotate 'line', 176
+  # rx rxquantr512 ** 0..*
+    set_addr $I10, rxquantr512_done
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
+  rxquantr512_loop:
+.annotate 'line', 173
+  # rx subrule $P514 subtype=capture negate=
+    rx503_cur."!cursor_pos"(rx503_pos)
+    .const 'Sub' $P514 = "147_1282323996.47527" 
+    capture_lex $P514
+    $P10 = rx503_cur.$P514()
+    unless $P10, rx503_fail
+    goto rxsubrule532_pass
+  rxsubrule532_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx494_fail
-  rxsubrule523_pass:
-    set_addr $I10, rxsubrule523_back
-    rx494_cur."!mark_push"(0, rx494_pos, $I10, $P10)
+    unless $P10, rx503_fail
+  rxsubrule532_pass:
+    set_addr $I10, rxsubrule532_back
+    rx503_cur."!mark_push"(0, rx503_pos, $I10, $P10)
     $P10."!cursor_names"("charspec")
-    rx494_pos = $P10."pos"()
-.annotate 'line', 169
-    set_addr $I10, rxquantr503_done
-    (rx494_rep) = rx494_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr503_done
-    rx494_cur."!mark_push"(rx494_rep, rx494_pos, $I10)
-    goto rxquantr503_loop
-  rxquantr503_done:
-.annotate 'line', 170
+    rx503_pos = $P10."pos"()
+.annotate 'line', 176
+    set_addr $I10, rxquantr512_done
+    (rx503_rep) = rx503_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr512_done
+    rx503_cur."!mark_push"(rx503_rep, rx503_pos, $I10)
+    goto rxquantr512_loop
+  rxquantr512_done:
+.annotate 'line', 177
   # rx charclass_q s r 0..-1
-    sub $I10, rx494_pos, rx494_off
-    find_not_cclass $I11, 32, rx494_tgt, $I10, rx494_eos
-    add rx494_pos, rx494_off, $I11
+    sub $I10, rx503_pos, rx503_off
+    find_not_cclass $I11, 32, rx503_tgt, $I10, rx503_eos
+    add rx503_pos, rx503_off, $I11
   # 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
-.annotate 'line', 166
-    goto alt502_end
-  alt502_1:
-.annotate 'line', 171
+    add $I11, rx503_pos, 1
+    gt $I11, rx503_eos, rx503_fail
+    sub $I11, rx503_pos, rx503_off
+    ord $I11, rx503_tgt, $I11
+    ne $I11, 93, rx503_fail
+    add rx503_pos, 1
+.annotate 'line', 173
+    goto alt511_end
+  alt511_1:
+.annotate 'line', 178
   # rx subcapture "name"
-    set_addr $I10, rxcap_524_fail
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
+    set_addr $I10, rxcap_533_fail
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx494_pos, rx494_off
-    find_not_cclass $I11, 8192, rx494_tgt, $I10, rx494_eos
+    sub $I10, rx503_pos, rx503_off
+    find_not_cclass $I11, 8192, rx503_tgt, $I10, rx503_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx494_fail
-    add rx494_pos, rx494_off, $I11
-    set_addr $I10, rxcap_524_fail
-    ($I12, $I11) = rx494_cur."!mark_peek"($I10)
-    rx494_cur."!cursor_pos"($I11)
-    ($P10) = rx494_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx494_pos, "")
-    rx494_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx503_fail
+    add rx503_pos, rx503_off, $I11
+    set_addr $I10, rxcap_533_fail
+    ($I12, $I11) = rx503_cur."!mark_peek"($I10)
+    rx503_cur."!cursor_pos"($I11)
+    ($P10) = rx503_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx503_pos, "")
+    rx503_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    goto rxcap_524_done
-  rxcap_524_fail:
-    goto rx494_fail
-  rxcap_524_done:
-  alt502_end:
-.annotate 'line', 173
-  # rx rxquantr525 ** 0..1
-    set_addr $I10, rxquantr525_done
-    rx494_cur."!mark_push"(0, rx494_pos, $I10)
-  rxquantr525_loop:
+    goto rxcap_533_done
+  rxcap_533_fail:
+    goto rx503_fail
+  rxcap_533_done:
+  alt511_end:
+.annotate 'line', 180
+  # rx rxquantr534 ** 0..1
+    set_addr $I10, rxquantr534_done
+    rx503_cur."!mark_push"(0, rx503_pos, $I10)
+  rxquantr534_loop:
   # rx subrule "normspace" subtype=method negate=
-    rx494_cur."!cursor_pos"(rx494_pos)
-    $P10 = rx494_cur."normspace"()
-    unless $P10, rx494_fail
-    goto rxsubrule526_pass
-  rxsubrule526_back:
+    rx503_cur."!cursor_pos"(rx503_pos)
+    $P10 = rx503_cur."normspace"()
+    unless $P10, rx503_fail
+    goto rxsubrule535_pass
+  rxsubrule535_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx494_fail
-  rxsubrule526_pass:
-    set_addr $I10, rxsubrule526_back
-    rx494_cur."!mark_push"(0, rx494_pos, $I10, $P10)
-    rx494_pos = $P10."pos"()
-    set_addr $I10, rxquantr525_done
-    (rx494_rep) = rx494_cur."!mark_commit"($I10)
-  rxquantr525_done:
-.annotate 'line', 162
+    unless $P10, rx503_fail
+  rxsubrule535_pass:
+    set_addr $I10, rxsubrule535_back
+    rx503_cur."!mark_push"(0, rx503_pos, $I10, $P10)
+    rx503_pos = $P10."pos"()
+    set_addr $I10, rxquantr534_done
+    (rx503_rep) = rx503_cur."!mark_commit"($I10)
+  rxquantr534_done:
+.annotate 'line', 169
   # rx pass
-    rx494_cur."!cursor_pass"(rx494_pos, "cclass_elem")
-    rx494_cur."!cursor_debug"("PASS  ", "cclass_elem", " at pos=", rx494_pos)
-    .return (rx494_cur)
-  rx494_restart:
+    rx503_cur."!cursor_pass"(rx503_pos, "cclass_elem")
+    if_null rx503_debug, debug_447
+    rx503_cur."!cursor_debug"("PASS", "cclass_elem", " at pos=", rx503_pos)
+  debug_447:
+    .return (rx503_cur)
+  rx503_restart:
 .annotate 'line', 3
-    rx494_cur."!cursor_debug"("NEXT ", "cclass_elem")
-  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
+    if_null rx503_debug, debug_448
+    rx503_cur."!cursor_debug"("NEXT", "cclass_elem")
+  debug_448:
+  rx503_fail:
+    (rx503_rep, rx503_pos, $I10, $P10) = rx503_cur."!mark_fail"(0)
+    lt rx503_pos, -1, rx503_done
+    eq rx503_pos, -1, rx503_fail
     jump $I10
-  rx494_done:
-    rx494_cur."!cursor_fail"()
-    rx494_cur."!cursor_debug"("FAIL  ", "cclass_elem")
-    .return (rx494_cur)
+  rx503_done:
+    rx503_cur."!cursor_fail"()
+    if_null rx503_debug, debug_449
+    rx503_cur."!cursor_debug"("FAIL", "cclass_elem")
+  debug_449:
+    .return (rx503_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__cclass_elem"  :subid("144_1280467470.54449") :method
+.sub "!PREFIX__cclass_elem"  :subid("146_1282323996.47527") :method
 .annotate 'line', 3
-    new $P496, "ResizablePMCArray"
-    push $P496, ""
-    push $P496, "-"
-    push $P496, "+"
-    .return ($P496)
+    new $P505, "ResizablePMCArray"
+    push $P505, ""
+    push $P505, "-"
+    push $P505, "+"
+    .return ($P505)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block504"  :anon :subid("145_1280467470.54449") :method :outer("143_1280467470.54449")
-.annotate 'line', 166
-    .const 'Sub' $P520 = "148_1280467470.54449" 
+.sub "_block513"  :anon :subid("147_1282323996.47527") :method :outer("145_1282323996.47527")
+.annotate 'line', 173
+    .const 'Sub' $P529 = "150_1282323996.47527" 
+    capture_lex $P529
+    .const 'Sub' $P524 = "149_1282323996.47527" 
+    capture_lex $P524
+    .const 'Sub' $P520 = "148_1282323996.47527" 
     capture_lex $P520
-    .const 'Sub' $P515 = "147_1280467470.54449" 
-    capture_lex $P515
-    .const 'Sub' $P511 = "146_1280467470.54449" 
-    capture_lex $P511
-    .local string rx506_tgt
-    .local int rx506_pos
-    .local int rx506_off
-    .local int rx506_eos
-    .local int rx506_rep
-    .local pmc rx506_cur
-    (rx506_cur, rx506_pos, rx506_tgt, $I10) = self."!cursor_start"()
-    rx506_cur."!cursor_caparray"("1")
-    .lex unicode:"$\x{a2}", rx506_cur
-    .local pmc match
-    .lex "$/", match
-    length rx506_eos, rx506_tgt
-    gt rx506_pos, rx506_eos, rx506_done
-    set rx506_off, 0
-    lt rx506_pos, 2, rx506_start
-    sub rx506_off, rx506_pos, 1
-    substr rx506_tgt, rx506_tgt, rx506_off
-  rx506_start:
-    eq $I10, 1, rx506_restart
-    rx506_cur."!cursor_debug"("START ", "")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan507_done
-    goto rxscan507_scan
-  rxscan507_loop:
-    ($P10) = rx506_cur."from"()
-    inc $P10
-    set rx506_pos, $P10
-    ge rx506_pos, rx506_eos, rxscan507_done
-  rxscan507_scan:
-    set_addr $I10, rxscan507_loop
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-  rxscan507_done:
-  alt508_0:
-    set_addr $I10, alt508_1
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-.annotate 'line', 167
+    .local string rx515_tgt
+    .local int rx515_pos
+    .local int rx515_off
+    .local int rx515_eos
+    .local int rx515_rep
+    .local pmc rx515_cur
+    .local pmc rx515_debug
+    (rx515_cur, rx515_pos, rx515_tgt, $I10) = self."!cursor_start"()
+    rx515_cur."!cursor_caparray"("1")
+    getattribute rx515_debug, rx515_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx515_cur
+    .local pmc match
+    .lex "$/", match
+    length rx515_eos, rx515_tgt
+    gt rx515_pos, rx515_eos, rx515_done
+    set rx515_off, 0
+    lt rx515_pos, 2, rx515_start
+    sub rx515_off, rx515_pos, 1
+    substr rx515_tgt, rx515_tgt, rx515_off
+  rx515_start:
+    eq $I10, 1, rx515_restart
+    if_null rx515_debug, debug_431
+    rx515_cur."!cursor_debug"("START", "")
+  debug_431:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan516_done
+    goto rxscan516_scan
+  rxscan516_loop:
+    ($P10) = rx515_cur."from"()
+    inc $P10
+    set rx515_pos, $P10
+    ge rx515_pos, rx515_eos, rxscan516_done
+  rxscan516_scan:
+    set_addr $I10, rxscan516_loop
+    rx515_cur."!mark_push"(0, rx515_pos, $I10)
+  rxscan516_done:
+  alt517_0:
+    set_addr $I10, alt517_1
+    rx515_cur."!mark_push"(0, rx515_pos, $I10)
+.annotate 'line', 174
   # rx charclass_q s r 0..-1
-    sub $I10, rx506_pos, rx506_off
-    find_not_cclass $I11, 32, rx506_tgt, $I10, rx506_eos
-    add rx506_pos, rx506_off, $I11
+    sub $I10, rx515_pos, rx515_off
+    find_not_cclass $I11, 32, rx515_tgt, $I10, rx515_eos
+    add rx515_pos, rx515_off, $I11
   # rx literal  "-"
-    add $I11, rx506_pos, 1
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 1
-    ne $S10, "-", rx506_fail
-    add rx506_pos, 1
+    add $I11, rx515_pos, 1
+    gt $I11, rx515_eos, rx515_fail
+    sub $I11, rx515_pos, rx515_off
+    ord $I11, rx515_tgt, $I11
+    ne $I11, 45, rx515_fail
+    add rx515_pos, 1
   # rx subrule "obs" subtype=method negate=
-    rx506_cur."!cursor_pos"(rx506_pos)
-    $P10 = rx506_cur."obs"("- as character range", "..")
-    unless $P10, rx506_fail
-    rx506_pos = $P10."pos"()
-    goto alt508_end
-  alt508_1:
-.annotate 'line', 168
+    rx515_cur."!cursor_pos"(rx515_pos)
+    $P10 = rx515_cur."obs"("- as character range", "..")
+    unless $P10, rx515_fail
+    rx515_pos = $P10."pos"()
+    goto alt517_end
+  alt517_1:
+.annotate 'line', 175
   # rx charclass_q s r 0..-1
-    sub $I10, rx506_pos, rx506_off
-    find_not_cclass $I11, 32, rx506_tgt, $I10, rx506_eos
-    add rx506_pos, rx506_off, $I11
-  alt509_0:
-    set_addr $I10, alt509_1
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
+    sub $I10, rx515_pos, rx515_off
+    find_not_cclass $I11, 32, rx515_tgt, $I10, rx515_eos
+    add rx515_pos, rx515_off, $I11
+  alt518_0:
+    set_addr $I10, alt518_1
+    rx515_cur."!mark_push"(0, rx515_pos, $I10)
   # rx literal  "\\"
-    add $I11, rx506_pos, 1
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 1
-    ne $S10, "\\", rx506_fail
-    add rx506_pos, 1
-  # rx subrule $P511 subtype=capture negate=
-    rx506_cur."!cursor_pos"(rx506_pos)
-    .const 'Sub' $P511 = "146_1280467470.54449" 
-    capture_lex $P511
-    $P10 = rx506_cur.$P511()
-    unless $P10, rx506_fail
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx515_pos, 1
+    gt $I11, rx515_eos, rx515_fail
+    sub $I11, rx515_pos, rx515_off
+    ord $I11, rx515_tgt, $I11
+    ne $I11, 92, rx515_fail
+    add rx515_pos, 1
+  # rx subrule $P520 subtype=capture negate=
+    rx515_cur."!cursor_pos"(rx515_pos)
+    .const 'Sub' $P520 = "148_1282323996.47527" 
+    capture_lex $P520
+    $P10 = rx515_cur.$P520()
+    unless $P10, rx515_fail
+    rx515_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"(0)
-    rx506_pos = $P10."pos"()
-    goto alt509_end
-  alt509_1:
-  # rx subrule $P515 subtype=capture negate=
-    rx506_cur."!cursor_pos"(rx506_pos)
-    .const 'Sub' $P515 = "147_1280467470.54449" 
-    capture_lex $P515
-    $P10 = rx506_cur.$P515()
-    unless $P10, rx506_fail
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    rx515_pos = $P10."pos"()
+    goto alt518_end
+  alt518_1:
+  # rx subrule $P524 subtype=capture negate=
+    rx515_cur."!cursor_pos"(rx515_pos)
+    .const 'Sub' $P524 = "149_1282323996.47527" 
+    capture_lex $P524
+    $P10 = rx515_cur.$P524()
+    unless $P10, rx515_fail
+    rx515_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"(0)
-    rx506_pos = $P10."pos"()
-  alt509_end:
-  # rx rxquantr518 ** 0..1
-    set_addr $I10, rxquantr518_done
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-  rxquantr518_loop:
+    rx515_pos = $P10."pos"()
+  alt518_end:
+  # rx rxquantr527 ** 0..1
+    set_addr $I10, rxquantr527_done
+    rx515_cur."!mark_push"(0, rx515_pos, $I10)
+  rxquantr527_loop:
   # rx charclass_q s r 0..-1
-    sub $I10, rx506_pos, rx506_off
-    find_not_cclass $I11, 32, rx506_tgt, $I10, rx506_eos
-    add rx506_pos, rx506_off, $I11
+    sub $I10, rx515_pos, rx515_off
+    find_not_cclass $I11, 32, rx515_tgt, $I10, rx515_eos
+    add rx515_pos, rx515_off, $I11
   # rx literal  ".."
-    add $I11, rx506_pos, 2
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 2
-    ne $S10, "..", rx506_fail
-    add rx506_pos, 2
+    add $I11, rx515_pos, 2
+    gt $I11, rx515_eos, rx515_fail
+    sub $I11, rx515_pos, rx515_off
+    substr $S10, rx515_tgt, $I11, 2
+    ne $S10, "..", rx515_fail
+    add rx515_pos, 2
   # rx charclass_q s r 0..-1
-    sub $I10, rx506_pos, rx506_off
-    find_not_cclass $I11, 32, rx506_tgt, $I10, rx506_eos
-    add rx506_pos, rx506_off, $I11
-  # rx subrule $P520 subtype=capture negate=
-    rx506_cur."!cursor_pos"(rx506_pos)
-    .const 'Sub' $P520 = "148_1280467470.54449" 
-    capture_lex $P520
-    $P10 = rx506_cur.$P520()
-    unless $P10, rx506_fail
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    sub $I10, rx515_pos, rx515_off
+    find_not_cclass $I11, 32, rx515_tgt, $I10, rx515_eos
+    add rx515_pos, rx515_off, $I11
+  # rx subrule $P529 subtype=capture negate=
+    rx515_cur."!cursor_pos"(rx515_pos)
+    .const 'Sub' $P529 = "150_1282323996.47527" 
+    capture_lex $P529
+    $P10 = rx515_cur.$P529()
+    unless $P10, rx515_fail
+    rx515_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("1")
-    rx506_pos = $P10."pos"()
-    set_addr $I10, rxquantr518_done
-    (rx506_rep) = rx506_cur."!mark_commit"($I10)
-  rxquantr518_done:
-  alt508_end:
-.annotate 'line', 166
-  # rx pass
-    rx506_cur."!cursor_pass"(rx506_pos, "")
-    rx506_cur."!cursor_debug"("PASS  ", "", " at pos=", rx506_pos)
-    .return (rx506_cur)
-  rx506_restart:
-    rx506_cur."!cursor_debug"("NEXT ", "")
-  rx506_fail:
-    (rx506_rep, rx506_pos, $I10, $P10) = rx506_cur."!mark_fail"(0)
-    lt rx506_pos, -1, rx506_done
-    eq rx506_pos, -1, rx506_fail
-    jump $I10
-  rx506_done:
-    rx506_cur."!cursor_fail"()
-    rx506_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx506_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block510"  :anon :subid("146_1280467470.54449") :method :outer("145_1280467470.54449")
-.annotate 'line', 168
-    .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, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx512_cur
-    .local pmc match
-    .lex "$/", match
-    length rx512_eos, rx512_tgt
-    gt rx512_pos, rx512_eos, rx512_done
-    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:
-    eq $I10, 1, rx512_restart
-    rx512_cur."!cursor_debug"("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:
-  # rx charclass .
-    ge rx512_pos, rx512_eos, rx512_fail
-    inc rx512_pos
-  # rx pass
-    rx512_cur."!cursor_pass"(rx512_pos, "")
-    rx512_cur."!cursor_debug"("PASS  ", "", " at pos=", rx512_pos)
-    .return (rx512_cur)
-  rx512_restart:
-    rx512_cur."!cursor_debug"("NEXT ", "")
-  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
-    jump $I10
-  rx512_done:
-    rx512_cur."!cursor_fail"()
-    rx512_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx512_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block514"  :anon :subid("147_1280467470.54449") :method :outer("145_1280467470.54449")
-.annotate 'line', 168
-    .local string rx516_tgt
-    .local int rx516_pos
-    .local int rx516_off
-    .local int rx516_eos
-    .local int rx516_rep
-    .local pmc rx516_cur
-    (rx516_cur, rx516_pos, rx516_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx516_cur
-    .local pmc match
-    .lex "$/", match
-    length rx516_eos, rx516_tgt
-    gt rx516_pos, rx516_eos, rx516_done
-    set rx516_off, 0
-    lt rx516_pos, 2, rx516_start
-    sub rx516_off, rx516_pos, 1
-    substr rx516_tgt, rx516_tgt, rx516_off
-  rx516_start:
-    eq $I10, 1, rx516_restart
-    rx516_cur."!cursor_debug"("START ", "")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan517_done
-    goto rxscan517_scan
-  rxscan517_loop:
-    ($P10) = rx516_cur."from"()
-    inc $P10
-    set rx516_pos, $P10
-    ge rx516_pos, rx516_eos, rxscan517_done
-  rxscan517_scan:
-    set_addr $I10, rxscan517_loop
-    rx516_cur."!mark_push"(0, rx516_pos, $I10)
-  rxscan517_done:
-  # rx enumcharlist negate=1 
-    ge rx516_pos, rx516_eos, rx516_fail
-    sub $I10, rx516_pos, rx516_off
-    substr $S10, rx516_tgt, $I10, 1
-    index $I11, "]\\", $S10
-    ge $I11, 0, rx516_fail
-    inc rx516_pos
+    rx515_pos = $P10."pos"()
+    set_addr $I10, rxquantr527_done
+    (rx515_rep) = rx515_cur."!mark_commit"($I10)
+  rxquantr527_done:
+  alt517_end:
+.annotate 'line', 173
   # rx pass
-    rx516_cur."!cursor_pass"(rx516_pos, "")
-    rx516_cur."!cursor_debug"("PASS  ", "", " at pos=", rx516_pos)
-    .return (rx516_cur)
-  rx516_restart:
-    rx516_cur."!cursor_debug"("NEXT ", "")
-  rx516_fail:
-    (rx516_rep, rx516_pos, $I10, $P10) = rx516_cur."!mark_fail"(0)
-    lt rx516_pos, -1, rx516_done
-    eq rx516_pos, -1, rx516_fail
-    jump $I10
-  rx516_done:
-    rx516_cur."!cursor_fail"()
-    rx516_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx516_cur)
+    rx515_cur."!cursor_pass"(rx515_pos, "")
+    if_null rx515_debug, debug_444
+    rx515_cur."!cursor_debug"("PASS", "", " at pos=", rx515_pos)
+  debug_444:
+    .return (rx515_cur)
+  rx515_restart:
+    if_null rx515_debug, debug_445
+    rx515_cur."!cursor_debug"("NEXT", "")
+  debug_445:
+  rx515_fail:
+    (rx515_rep, rx515_pos, $I10, $P10) = rx515_cur."!mark_fail"(0)
+    lt rx515_pos, -1, rx515_done
+    eq rx515_pos, -1, rx515_fail
+    jump $I10
+  rx515_done:
+    rx515_cur."!cursor_fail"()
+    if_null rx515_debug, debug_446
+    rx515_cur."!cursor_debug"("FAIL", "")
+  debug_446:
+    .return (rx515_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block519"  :anon :subid("148_1280467470.54449") :method :outer("145_1280467470.54449")
-.annotate 'line', 168
+.sub "_block519"  :anon :subid("148_1282323996.47527") :method :outer("147_1282323996.47527")
+.annotate 'line', 175
     .local string rx521_tgt
     .local int rx521_pos
     .local int rx521_off
     .local int rx521_eos
     .local int rx521_rep
     .local pmc rx521_cur
+    .local pmc rx521_debug
     (rx521_cur, rx521_pos, rx521_tgt, $I10) = self."!cursor_start"()
+    getattribute rx521_debug, rx521_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx521_cur
     .local pmc match
     .lex "$/", match
@@ -7058,7 +7746,9 @@
     substr rx521_tgt, rx521_tgt, rx521_off
   rx521_start:
     eq $I10, 1, rx521_restart
-    rx521_cur."!cursor_debug"("START ", "")
+    if_null rx521_debug, debug_432
+    rx521_cur."!cursor_debug"("START", "")
+  debug_432:
     $I10 = self.'from'()
     ne $I10, -1, rxscan522_done
     goto rxscan522_scan
@@ -7076,10 +7766,14 @@
     inc rx521_pos
   # rx pass
     rx521_cur."!cursor_pass"(rx521_pos, "")
-    rx521_cur."!cursor_debug"("PASS  ", "", " at pos=", rx521_pos)
+    if_null rx521_debug, debug_433
+    rx521_cur."!cursor_debug"("PASS", "", " at pos=", rx521_pos)
+  debug_433:
     .return (rx521_cur)
   rx521_restart:
-    rx521_cur."!cursor_debug"("NEXT ", "")
+    if_null rx521_debug, debug_434
+    rx521_cur."!cursor_debug"("NEXT", "")
+  debug_434:
   rx521_fail:
     (rx521_rep, rx521_pos, $I10, $P10) = rx521_cur."!mark_fail"(0)
     lt rx521_pos, -1, rx521_done
@@ -7087,199 +7781,165 @@
     jump $I10
   rx521_done:
     rx521_cur."!cursor_fail"()
-    rx521_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx521_debug, debug_435
+    rx521_cur."!cursor_debug"("FAIL", "")
+  debug_435:
     .return (rx521_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_internal"  :subid("149_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "_block523"  :anon :subid("149_1282323996.47527") :method :outer("147_1282323996.47527")
+.annotate 'line', 175
+    .local string rx525_tgt
+    .local int rx525_pos
+    .local int rx525_off
+    .local int rx525_eos
+    .local int rx525_rep
+    .local pmc rx525_cur
+    .local pmc rx525_debug
+    (rx525_cur, rx525_pos, rx525_tgt, $I10) = self."!cursor_start"()
+    getattribute rx525_debug, rx525_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx525_cur
+    .local pmc match
+    .lex "$/", match
+    length rx525_eos, rx525_tgt
+    gt rx525_pos, rx525_eos, rx525_done
+    set rx525_off, 0
+    lt rx525_pos, 2, rx525_start
+    sub rx525_off, rx525_pos, 1
+    substr rx525_tgt, rx525_tgt, rx525_off
+  rx525_start:
+    eq $I10, 1, rx525_restart
+    if_null rx525_debug, debug_436
+    rx525_cur."!cursor_debug"("START", "")
+  debug_436:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan526_done
+    goto rxscan526_scan
+  rxscan526_loop:
+    ($P10) = rx525_cur."from"()
+    inc $P10
+    set rx525_pos, $P10
+    ge rx525_pos, rx525_eos, rxscan526_done
+  rxscan526_scan:
+    set_addr $I10, rxscan526_loop
+    rx525_cur."!mark_push"(0, rx525_pos, $I10)
+  rxscan526_done:
+  # rx enumcharlist negate=1 
+    ge rx525_pos, rx525_eos, rx525_fail
+    sub $I10, rx525_pos, rx525_off
+    substr $S10, rx525_tgt, $I10, 1
+    index $I11, "]\\", $S10
+    ge $I11, 0, rx525_fail
+    inc rx525_pos
+  # rx pass
+    rx525_cur."!cursor_pass"(rx525_pos, "")
+    if_null rx525_debug, debug_437
+    rx525_cur."!cursor_debug"("PASS", "", " at pos=", rx525_pos)
+  debug_437:
+    .return (rx525_cur)
+  rx525_restart:
+    if_null rx525_debug, debug_438
+    rx525_cur."!cursor_debug"("NEXT", "")
+  debug_438:
+  rx525_fail:
+    (rx525_rep, rx525_pos, $I10, $P10) = rx525_cur."!mark_fail"(0)
+    lt rx525_pos, -1, rx525_done
+    eq rx525_pos, -1, rx525_fail
+    jump $I10
+  rx525_done:
+    rx525_cur."!cursor_fail"()
+    if_null rx525_debug, debug_439
+    rx525_cur."!cursor_debug"("FAIL", "")
+  debug_439:
+    .return (rx525_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block528"  :anon :subid("150_1282323996.47527") :method :outer("147_1282323996.47527")
+.annotate 'line', 175
+    .local string rx530_tgt
+    .local int rx530_pos
+    .local int rx530_off
+    .local int rx530_eos
+    .local int rx530_rep
+    .local pmc rx530_cur
+    .local pmc rx530_debug
+    (rx530_cur, rx530_pos, rx530_tgt, $I10) = self."!cursor_start"()
+    getattribute rx530_debug, rx530_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx530_cur
+    .local pmc match
+    .lex "$/", match
+    length rx530_eos, rx530_tgt
+    gt rx530_pos, rx530_eos, rx530_done
+    set rx530_off, 0
+    lt rx530_pos, 2, rx530_start
+    sub rx530_off, rx530_pos, 1
+    substr rx530_tgt, rx530_tgt, rx530_off
+  rx530_start:
+    eq $I10, 1, rx530_restart
+    if_null rx530_debug, debug_440
+    rx530_cur."!cursor_debug"("START", "")
+  debug_440:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan531_done
+    goto rxscan531_scan
+  rxscan531_loop:
+    ($P10) = rx530_cur."from"()
+    inc $P10
+    set rx530_pos, $P10
+    ge rx530_pos, rx530_eos, rxscan531_done
+  rxscan531_scan:
+    set_addr $I10, rxscan531_loop
+    rx530_cur."!mark_push"(0, rx530_pos, $I10)
+  rxscan531_done:
+  # rx charclass .
+    ge rx530_pos, rx530_eos, rx530_fail
+    inc rx530_pos
+  # rx pass
+    rx530_cur."!cursor_pass"(rx530_pos, "")
+    if_null rx530_debug, debug_441
+    rx530_cur."!cursor_debug"("PASS", "", " at pos=", rx530_pos)
+  debug_441:
+    .return (rx530_cur)
+  rx530_restart:
+    if_null rx530_debug, debug_442
+    rx530_cur."!cursor_debug"("NEXT", "")
+  debug_442:
+  rx530_fail:
+    (rx530_rep, rx530_pos, $I10, $P10) = rx530_cur."!mark_fail"(0)
+    lt rx530_pos, -1, rx530_done
+    eq rx530_pos, -1, rx530_fail
+    jump $I10
+  rx530_done:
+    rx530_cur."!cursor_fail"()
+    if_null rx530_debug, debug_443
+    rx530_cur."!cursor_debug"("FAIL", "")
+  debug_443:
+    .return (rx530_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_internal"  :subid("151_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .const 'Sub' $P536 = "151_1280467470.54449" 
-    capture_lex $P536
-    .local string rx528_tgt
-    .local int rx528_pos
-    .local int rx528_off
-    .local int rx528_eos
-    .local int rx528_rep
-    .local pmc rx528_cur
-    (rx528_cur, rx528_pos, rx528_tgt, $I10) = self."!cursor_start"()
-    rx528_cur."!cursor_caparray"("n")
-    .lex unicode:"$\x{a2}", rx528_cur
-    .local pmc match
-    .lex "$/", match
-    length rx528_eos, rx528_tgt
-    gt rx528_pos, rx528_eos, rx528_done
-    set rx528_off, 0
-    lt rx528_pos, 2, rx528_start
-    sub rx528_off, rx528_pos, 1
-    substr rx528_tgt, rx528_tgt, rx528_off
-  rx528_start:
-    eq $I10, 1, rx528_restart
-    rx528_cur."!cursor_debug"("START ", "mod_internal")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan532_done
-    goto rxscan532_scan
-  rxscan532_loop:
-    ($P10) = rx528_cur."from"()
-    inc $P10
-    set rx528_pos, $P10
-    ge rx528_pos, rx528_eos, rxscan532_done
-  rxscan532_scan:
-    set_addr $I10, rxscan532_loop
-    rx528_cur."!mark_push"(0, rx528_pos, $I10)
-  rxscan532_done:
-  alt533_0:
-.annotate 'line', 177
-    set_addr $I10, alt533_1
-    rx528_cur."!mark_push"(0, rx528_pos, $I10)
-.annotate 'line', 178
-  # rx literal  ":"
-    add $I11, rx528_pos, 1
-    gt $I11, rx528_eos, rx528_fail
-    sub $I11, rx528_pos, rx528_off
-    substr $S10, rx528_tgt, $I11, 1
-    ne $S10, ":", rx528_fail
-    add rx528_pos, 1
-  # rx rxquantr534 ** 1..1
-    set_addr $I10, rxquantr534_done
-    rx528_cur."!mark_push"(0, -1, $I10)
-  rxquantr534_loop:
-  # rx subrule $P536 subtype=capture negate=
-    rx528_cur."!cursor_pos"(rx528_pos)
-    .const 'Sub' $P536 = "151_1280467470.54449" 
-    capture_lex $P536
-    $P10 = rx528_cur.$P536()
-    unless $P10, rx528_fail
-    goto rxsubrule540_pass
-  rxsubrule540_back:
-    $P10 = $P10."!cursor_next"()
-    unless $P10, rx528_fail
-  rxsubrule540_pass:
-    set_addr $I10, rxsubrule540_back
-    rx528_cur."!mark_push"(0, rx528_pos, $I10, $P10)
-    $P10."!cursor_names"("n")
-    rx528_pos = $P10."pos"()
-    set_addr $I10, rxquantr534_done
-    (rx528_rep) = rx528_cur."!mark_commit"($I10)
-  rxquantr534_done:
-  # rx subrule "mod_ident" subtype=capture negate=
-    rx528_cur."!cursor_pos"(rx528_pos)
-    $P10 = rx528_cur."mod_ident"()
-    unless $P10, rx528_fail
-    rx528_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("mod_ident")
-    rx528_pos = $P10."pos"()
-  # rxanchor rwb
-    le rx528_pos, 0, rx528_fail
-    sub $I10, rx528_pos, rx528_off
-    is_cclass $I11, 8192, rx528_tgt, $I10
-    if $I11, rx528_fail
-    dec $I10
-    is_cclass $I11, 8192, rx528_tgt, $I10
-    unless $I11, rx528_fail
-    goto alt533_end
-  alt533_1:
-.annotate 'line', 179
-  # rx literal  ":"
-    add $I11, rx528_pos, 1
-    gt $I11, rx528_eos, rx528_fail
-    sub $I11, rx528_pos, rx528_off
-    substr $S10, rx528_tgt, $I11, 1
-    ne $S10, ":", rx528_fail
-    add rx528_pos, 1
-  # rx subrule "mod_ident" subtype=capture negate=
-    rx528_cur."!cursor_pos"(rx528_pos)
-    $P10 = rx528_cur."mod_ident"()
-    unless $P10, rx528_fail
-    rx528_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("mod_ident")
-    rx528_pos = $P10."pos"()
-  # rx rxquantr541 ** 0..1
-    set_addr $I10, rxquantr541_done
-    rx528_cur."!mark_push"(0, rx528_pos, $I10)
-  rxquantr541_loop:
-  # rx literal  "("
-    add $I11, rx528_pos, 1
-    gt $I11, rx528_eos, rx528_fail
-    sub $I11, rx528_pos, rx528_off
-    substr $S10, rx528_tgt, $I11, 1
-    ne $S10, "(", rx528_fail
-    add rx528_pos, 1
-  # rx subcapture "n"
-    set_addr $I10, rxcap_542_fail
-    rx528_cur."!mark_push"(0, rx528_pos, $I10)
-  # rx charclass_q d r 1..-1
-    sub $I10, rx528_pos, rx528_off
-    find_not_cclass $I11, 8, rx528_tgt, $I10, rx528_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx528_fail
-    add rx528_pos, rx528_off, $I11
-    set_addr $I10, rxcap_542_fail
-    ($I12, $I11) = rx528_cur."!mark_peek"($I10)
-    rx528_cur."!cursor_pos"($I11)
-    ($P10) = rx528_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx528_pos, "")
-    rx528_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("n")
-    goto rxcap_542_done
-  rxcap_542_fail:
-    goto rx528_fail
-  rxcap_542_done:
-  # rx literal  ")"
-    add $I11, rx528_pos, 1
-    gt $I11, rx528_eos, rx528_fail
-    sub $I11, rx528_pos, rx528_off
-    substr $S10, rx528_tgt, $I11, 1
-    ne $S10, ")", rx528_fail
-    add rx528_pos, 1
-    set_addr $I10, rxquantr541_done
-    (rx528_rep) = rx528_cur."!mark_commit"($I10)
-  rxquantr541_done:
-  alt533_end:
-.annotate 'line', 176
-  # rx pass
-    rx528_cur."!cursor_pass"(rx528_pos, "mod_internal")
-    rx528_cur."!cursor_debug"("PASS  ", "mod_internal", " at pos=", rx528_pos)
-    .return (rx528_cur)
-  rx528_restart:
-.annotate 'line', 3
-    rx528_cur."!cursor_debug"("NEXT ", "mod_internal")
-  rx528_fail:
-    (rx528_rep, rx528_pos, $I10, $P10) = rx528_cur."!mark_fail"(0)
-    lt rx528_pos, -1, rx528_done
-    eq rx528_pos, -1, rx528_fail
-    jump $I10
-  rx528_done:
-    rx528_cur."!cursor_fail"()
-    rx528_cur."!cursor_debug"("FAIL  ", "mod_internal")
-    .return (rx528_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_internal"  :subid("150_1280467470.54449") :method
-.annotate 'line', 3
-    $P530 = self."!PREFIX__!subrule"("mod_ident", ":")
-    new $P531, "ResizablePMCArray"
-    push $P531, $P530
-    push $P531, ":"
-    .return ($P531)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block535"  :anon :subid("151_1280467470.54449") :method :outer("149_1280467470.54449")
-.annotate 'line', 178
+    .const 'Sub' $P545 = "153_1282323996.47527" 
+    capture_lex $P545
     .local string rx537_tgt
     .local int rx537_pos
     .local int rx537_off
     .local int rx537_eos
     .local int rx537_rep
     .local pmc rx537_cur
+    .local pmc rx537_debug
     (rx537_cur, rx537_pos, rx537_tgt, $I10) = self."!cursor_start"()
+    rx537_cur."!cursor_caparray"("n")
+    getattribute rx537_debug, rx537_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx537_cur
     .local pmc match
     .lex "$/", match
@@ -7291,44 +7951,141 @@
     substr rx537_tgt, rx537_tgt, rx537_off
   rx537_start:
     eq $I10, 1, rx537_restart
-    rx537_cur."!cursor_debug"("START ", "")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan538_done
-    goto rxscan538_scan
-  rxscan538_loop:
+    if_null rx537_debug, debug_450
+    rx537_cur."!cursor_debug"("START", "mod_internal")
+  debug_450:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan541_done
+    goto rxscan541_scan
+  rxscan541_loop:
     ($P10) = rx537_cur."from"()
     inc $P10
     set rx537_pos, $P10
-    ge rx537_pos, rx537_eos, rxscan538_done
-  rxscan538_scan:
-    set_addr $I10, rxscan538_loop
+    ge rx537_pos, rx537_eos, rxscan541_done
+  rxscan541_scan:
+    set_addr $I10, rxscan541_loop
     rx537_cur."!mark_push"(0, rx537_pos, $I10)
-  rxscan538_done:
-  alt539_0:
-    set_addr $I10, alt539_1
+  rxscan541_done:
+  alt542_0:
+.annotate 'line', 184
+    set_addr $I10, alt542_1
     rx537_cur."!mark_push"(0, rx537_pos, $I10)
-  # rx literal  "!"
+.annotate 'line', 185
+  # rx literal  ":"
+    add $I11, rx537_pos, 1
+    gt $I11, rx537_eos, rx537_fail
+    sub $I11, rx537_pos, rx537_off
+    ord $I11, rx537_tgt, $I11
+    ne $I11, 58, rx537_fail
+    add rx537_pos, 1
+  # rx rxquantr543 ** 1..1
+    set_addr $I10, rxquantr543_done
+    rx537_cur."!mark_push"(0, -1, $I10)
+  rxquantr543_loop:
+  # rx subrule $P545 subtype=capture negate=
+    rx537_cur."!cursor_pos"(rx537_pos)
+    .const 'Sub' $P545 = "153_1282323996.47527" 
+    capture_lex $P545
+    $P10 = rx537_cur.$P545()
+    unless $P10, rx537_fail
+    goto rxsubrule549_pass
+  rxsubrule549_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx537_fail
+  rxsubrule549_pass:
+    set_addr $I10, rxsubrule549_back
+    rx537_cur."!mark_push"(0, rx537_pos, $I10, $P10)
+    $P10."!cursor_names"("n")
+    rx537_pos = $P10."pos"()
+    set_addr $I10, rxquantr543_done
+    (rx537_rep) = rx537_cur."!mark_commit"($I10)
+  rxquantr543_done:
+  # rx subrule "mod_ident" subtype=capture negate=
+    rx537_cur."!cursor_pos"(rx537_pos)
+    $P10 = rx537_cur."mod_ident"()
+    unless $P10, rx537_fail
+    rx537_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("mod_ident")
+    rx537_pos = $P10."pos"()
+  # rxanchor rwb
+    le rx537_pos, 0, rx537_fail
+    sub $I10, rx537_pos, rx537_off
+    is_cclass $I11, 8192, rx537_tgt, $I10
+    if $I11, rx537_fail
+    dec $I10
+    is_cclass $I11, 8192, rx537_tgt, $I10
+    unless $I11, rx537_fail
+    goto alt542_end
+  alt542_1:
+.annotate 'line', 186
+  # rx literal  ":"
+    add $I11, rx537_pos, 1
+    gt $I11, rx537_eos, rx537_fail
+    sub $I11, rx537_pos, rx537_off
+    ord $I11, rx537_tgt, $I11
+    ne $I11, 58, rx537_fail
+    add rx537_pos, 1
+  # rx subrule "mod_ident" subtype=capture negate=
+    rx537_cur."!cursor_pos"(rx537_pos)
+    $P10 = rx537_cur."mod_ident"()
+    unless $P10, rx537_fail
+    rx537_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("mod_ident")
+    rx537_pos = $P10."pos"()
+  # rx rxquantr550 ** 0..1
+    set_addr $I10, rxquantr550_done
+    rx537_cur."!mark_push"(0, rx537_pos, $I10)
+  rxquantr550_loop:
+  # rx literal  "("
     add $I11, rx537_pos, 1
     gt $I11, rx537_eos, rx537_fail
     sub $I11, rx537_pos, rx537_off
-    substr $S10, rx537_tgt, $I11, 1
-    ne $S10, "!", rx537_fail
+    ord $I11, rx537_tgt, $I11
+    ne $I11, 40, rx537_fail
     add rx537_pos, 1
-    goto alt539_end
-  alt539_1:
+  # rx subcapture "n"
+    set_addr $I10, rxcap_551_fail
+    rx537_cur."!mark_push"(0, rx537_pos, $I10)
   # rx charclass_q d r 1..-1
     sub $I10, rx537_pos, rx537_off
     find_not_cclass $I11, 8, rx537_tgt, $I10, rx537_eos
     add $I12, $I10, 1
     lt $I11, $I12, rx537_fail
     add rx537_pos, rx537_off, $I11
-  alt539_end:
+    set_addr $I10, rxcap_551_fail
+    ($I12, $I11) = rx537_cur."!mark_peek"($I10)
+    rx537_cur."!cursor_pos"($I11)
+    ($P10) = rx537_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx537_pos, "")
+    rx537_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("n")
+    goto rxcap_551_done
+  rxcap_551_fail:
+    goto rx537_fail
+  rxcap_551_done:
+  # rx literal  ")"
+    add $I11, rx537_pos, 1
+    gt $I11, rx537_eos, rx537_fail
+    sub $I11, rx537_pos, rx537_off
+    ord $I11, rx537_tgt, $I11
+    ne $I11, 41, rx537_fail
+    add rx537_pos, 1
+    set_addr $I10, rxquantr550_done
+    (rx537_rep) = rx537_cur."!mark_commit"($I10)
+  rxquantr550_done:
+  alt542_end:
+.annotate 'line', 183
   # rx pass
-    rx537_cur."!cursor_pass"(rx537_pos, "")
-    rx537_cur."!cursor_debug"("PASS  ", "", " at pos=", rx537_pos)
+    rx537_cur."!cursor_pass"(rx537_pos, "mod_internal")
+    if_null rx537_debug, debug_455
+    rx537_cur."!cursor_debug"("PASS", "mod_internal", " at pos=", rx537_pos)
+  debug_455:
     .return (rx537_cur)
   rx537_restart:
-    rx537_cur."!cursor_debug"("NEXT ", "")
+.annotate 'line', 3
+    if_null rx537_debug, debug_456
+    rx537_cur."!cursor_debug"("NEXT", "mod_internal")
+  debug_456:
   rx537_fail:
     (rx537_rep, rx537_pos, $I10, $P10) = rx537_cur."!mark_fail"(0)
     lt rx537_pos, -1, rx537_done
@@ -7336,346 +8093,471 @@
     jump $I10
   rx537_done:
     rx537_cur."!cursor_fail"()
-    rx537_cur."!cursor_debug"("FAIL  ", "")
+    if_null rx537_debug, debug_457
+    rx537_cur."!cursor_debug"("FAIL", "mod_internal")
+  debug_457:
     .return (rx537_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident"  :subid("152_1280467470.54449") :method
-.annotate 'line', 183
-    $P544 = self."!protoregex"("mod_ident")
-    .return ($P544)
+.sub "!PREFIX__mod_internal"  :subid("152_1282323996.47527") :method
+.annotate 'line', 3
+    $P539 = self."!PREFIX__!subrule"("mod_ident", ":")
+    new $P540, "ResizablePMCArray"
+    push $P540, $P539
+    push $P540, ":"
+    .return ($P540)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident"  :subid("153_1280467470.54449") :method
-.annotate 'line', 183
-    $P546 = self."!PREFIX__!protoregex"("mod_ident")
-    .return ($P546)
+.sub "_block544"  :anon :subid("153_1282323996.47527") :method :outer("151_1282323996.47527")
+.annotate 'line', 185
+    .local string rx546_tgt
+    .local int rx546_pos
+    .local int rx546_off
+    .local int rx546_eos
+    .local int rx546_rep
+    .local pmc rx546_cur
+    .local pmc rx546_debug
+    (rx546_cur, rx546_pos, rx546_tgt, $I10) = self."!cursor_start"()
+    getattribute rx546_debug, rx546_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx546_cur
+    .local pmc match
+    .lex "$/", match
+    length rx546_eos, rx546_tgt
+    gt rx546_pos, rx546_eos, rx546_done
+    set rx546_off, 0
+    lt rx546_pos, 2, rx546_start
+    sub rx546_off, rx546_pos, 1
+    substr rx546_tgt, rx546_tgt, rx546_off
+  rx546_start:
+    eq $I10, 1, rx546_restart
+    if_null rx546_debug, debug_451
+    rx546_cur."!cursor_debug"("START", "")
+  debug_451:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan547_done
+    goto rxscan547_scan
+  rxscan547_loop:
+    ($P10) = rx546_cur."from"()
+    inc $P10
+    set rx546_pos, $P10
+    ge rx546_pos, rx546_eos, rxscan547_done
+  rxscan547_scan:
+    set_addr $I10, rxscan547_loop
+    rx546_cur."!mark_push"(0, rx546_pos, $I10)
+  rxscan547_done:
+  alt548_0:
+    set_addr $I10, alt548_1
+    rx546_cur."!mark_push"(0, rx546_pos, $I10)
+  # rx literal  "!"
+    add $I11, rx546_pos, 1
+    gt $I11, rx546_eos, rx546_fail
+    sub $I11, rx546_pos, rx546_off
+    ord $I11, rx546_tgt, $I11
+    ne $I11, 33, rx546_fail
+    add rx546_pos, 1
+    goto alt548_end
+  alt548_1:
+  # rx charclass_q d r 1..-1
+    sub $I10, rx546_pos, rx546_off
+    find_not_cclass $I11, 8, rx546_tgt, $I10, rx546_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx546_fail
+    add rx546_pos, rx546_off, $I11
+  alt548_end:
+  # rx pass
+    rx546_cur."!cursor_pass"(rx546_pos, "")
+    if_null rx546_debug, debug_452
+    rx546_cur."!cursor_debug"("PASS", "", " at pos=", rx546_pos)
+  debug_452:
+    .return (rx546_cur)
+  rx546_restart:
+    if_null rx546_debug, debug_453
+    rx546_cur."!cursor_debug"("NEXT", "")
+  debug_453:
+  rx546_fail:
+    (rx546_rep, rx546_pos, $I10, $P10) = rx546_cur."!mark_fail"(0)
+    lt rx546_pos, -1, rx546_done
+    eq rx546_pos, -1, rx546_fail
+    jump $I10
+  rx546_done:
+    rx546_cur."!cursor_fail"()
+    if_null rx546_debug, debug_454
+    rx546_cur."!cursor_debug"("FAIL", "")
+  debug_454:
+    .return (rx546_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident"  :subid("154_1282323996.47527") :method
+.annotate 'line', 190
+    $P553 = self."!protoregex"("mod_ident")
+    .return ($P553)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__mod_ident"  :subid("155_1282323996.47527") :method
+.annotate 'line', 190
+    $P555 = self."!PREFIX__!protoregex"("mod_ident")
+    .return ($P555)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<ignorecase>"  :subid("154_1280467470.54449") :method :outer("11_1280467470.54449")
+.sub "mod_ident:sym<ignorecase>"  :subid("156_1282323996.47527") :method :outer("11_1282323996.47527")
 .annotate 'line', 3
-    .local string rx548_tgt
-    .local int rx548_pos
-    .local int rx548_off
-    .local int rx548_eos
-    .local int rx548_rep
-    .local pmc rx548_cur
-    (rx548_cur, rx548_pos, rx548_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx548_cur
-    .local pmc match
-    .lex "$/", match
-    length rx548_eos, rx548_tgt
-    gt rx548_pos, rx548_eos, rx548_done
-    set rx548_off, 0
-    lt rx548_pos, 2, rx548_start
-    sub rx548_off, rx548_pos, 1
-    substr rx548_tgt, rx548_tgt, rx548_off
-  rx548_start:
-    eq $I10, 1, rx548_restart
-    rx548_cur."!cursor_debug"("START ", "mod_ident:sym<ignorecase>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan551_done
-    goto rxscan551_scan
-  rxscan551_loop:
-    ($P10) = rx548_cur."from"()
-    inc $P10
-    set rx548_pos, $P10
-    ge rx548_pos, rx548_eos, rxscan551_done
-  rxscan551_scan:
-    set_addr $I10, rxscan551_loop
-    rx548_cur."!mark_push"(0, rx548_pos, $I10)
-  rxscan551_done:
-.annotate 'line', 184
+    .local string rx557_tgt
+    .local int rx557_pos
+    .local int rx557_off
+    .local int rx557_eos
+    .local int rx557_rep
+    .local pmc rx557_cur
+    .local pmc rx557_debug
+    (rx557_cur, rx557_pos, rx557_tgt, $I10) = self."!cursor_start"()
+    getattribute rx557_debug, rx557_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx557_cur
+    .local pmc match
+    .lex "$/", match
+    length rx557_eos, rx557_tgt
+    gt rx557_pos, rx557_eos, rx557_done
+    set rx557_off, 0
+    lt rx557_pos, 2, rx557_start
+    sub rx557_off, rx557_pos, 1
+    substr rx557_tgt, rx557_tgt, rx557_off
+  rx557_start:
+    eq $I10, 1, rx557_restart
+    if_null rx557_debug, debug_458
+    rx557_cur."!cursor_debug"("START", "mod_ident:sym<ignorecase>")
+  debug_458:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan560_done
+    goto rxscan560_scan
+  rxscan560_loop:
+    ($P10) = rx557_cur."from"()
+    inc $P10
+    set rx557_pos, $P10
+    ge rx557_pos, rx557_eos, rxscan560_done
+  rxscan560_scan:
+    set_addr $I10, rxscan560_loop
+    rx557_cur."!mark_push"(0, rx557_pos, $I10)
+  rxscan560_done:
+.annotate 'line', 191
   # rx subcapture "sym"
-    set_addr $I10, rxcap_552_fail
-    rx548_cur."!mark_push"(0, rx548_pos, $I10)
+    set_addr $I10, rxcap_561_fail
+    rx557_cur."!mark_push"(0, rx557_pos, $I10)
   # rx literal  "i"
-    add $I11, rx548_pos, 1
-    gt $I11, rx548_eos, rx548_fail
-    sub $I11, rx548_pos, rx548_off
-    substr $S10, rx548_tgt, $I11, 1
-    ne $S10, "i", rx548_fail
-    add rx548_pos, 1
-    set_addr $I10, rxcap_552_fail
-    ($I12, $I11) = rx548_cur."!mark_peek"($I10)
-    rx548_cur."!cursor_pos"($I11)
-    ($P10) = rx548_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx548_pos, "")
-    rx548_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx557_pos, 1
+    gt $I11, rx557_eos, rx557_fail
+    sub $I11, rx557_pos, rx557_off
+    ord $I11, rx557_tgt, $I11
+    ne $I11, 105, rx557_fail
+    add rx557_pos, 1
+    set_addr $I10, rxcap_561_fail
+    ($I12, $I11) = rx557_cur."!mark_peek"($I10)
+    rx557_cur."!cursor_pos"($I11)
+    ($P10) = rx557_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx557_pos, "")
+    rx557_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_552_done
-  rxcap_552_fail:
-    goto rx548_fail
-  rxcap_552_done:
-  # rx rxquantr553 ** 0..1
-    set_addr $I10, rxquantr553_done
-    rx548_cur."!mark_push"(0, rx548_pos, $I10)
-  rxquantr553_loop:
+    goto rxcap_561_done
+  rxcap_561_fail:
+    goto rx557_fail
+  rxcap_561_done:
+  # rx rxquantr562 ** 0..1
+    set_addr $I10, rxquantr562_done
+    rx557_cur."!mark_push"(0, rx557_pos, $I10)
+  rxquantr562_loop:
   # rx literal  "gnorecase"
-    add $I11, rx548_pos, 9
-    gt $I11, rx548_eos, rx548_fail
-    sub $I11, rx548_pos, rx548_off
-    substr $S10, rx548_tgt, $I11, 9
-    ne $S10, "gnorecase", rx548_fail
-    add rx548_pos, 9
-    set_addr $I10, rxquantr553_done
-    (rx548_rep) = rx548_cur."!mark_commit"($I10)
-  rxquantr553_done:
-  # rx pass
-    rx548_cur."!cursor_pass"(rx548_pos, "mod_ident:sym<ignorecase>")
-    rx548_cur."!cursor_debug"("PASS  ", "mod_ident:sym<ignorecase>", " at pos=", rx548_pos)
-    .return (rx548_cur)
-  rx548_restart:
-.annotate 'line', 3
-    rx548_cur."!cursor_debug"("NEXT ", "mod_ident:sym<ignorecase>")
-  rx548_fail:
-    (rx548_rep, rx548_pos, $I10, $P10) = rx548_cur."!mark_fail"(0)
-    lt rx548_pos, -1, rx548_done
-    eq rx548_pos, -1, rx548_fail
-    jump $I10
-  rx548_done:
-    rx548_cur."!cursor_fail"()
-    rx548_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<ignorecase>")
-    .return (rx548_cur)
+    add $I11, rx557_pos, 9
+    gt $I11, rx557_eos, rx557_fail
+    sub $I11, rx557_pos, rx557_off
+    substr $S10, rx557_tgt, $I11, 9
+    ne $S10, "gnorecase", rx557_fail
+    add rx557_pos, 9
+    set_addr $I10, rxquantr562_done
+    (rx557_rep) = rx557_cur."!mark_commit"($I10)
+  rxquantr562_done:
+  # rx pass
+    rx557_cur."!cursor_pass"(rx557_pos, "mod_ident:sym<ignorecase>")
+    if_null rx557_debug, debug_459
+    rx557_cur."!cursor_debug"("PASS", "mod_ident:sym<ignorecase>", " at pos=", rx557_pos)
+  debug_459:
+    .return (rx557_cur)
+  rx557_restart:
+.annotate 'line', 3
+    if_null rx557_debug, debug_460
+    rx557_cur."!cursor_debug"("NEXT", "mod_ident:sym<ignorecase>")
+  debug_460:
+  rx557_fail:
+    (rx557_rep, rx557_pos, $I10, $P10) = rx557_cur."!mark_fail"(0)
+    lt rx557_pos, -1, rx557_done
+    eq rx557_pos, -1, rx557_fail
+    jump $I10
+  rx557_done:
+    rx557_cur."!cursor_fail"()
+    if_null rx557_debug, debug_461
+    rx557_cur."!cursor_debug"("FAIL", "mod_ident:sym<ignorecase>")
+  debug_461:
+    .return (rx557_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<ignorecase>"  :subid("155_1280467470.54449") :method
-.annotate 'line', 3
-    new $P550, "ResizablePMCArray"
-    push $P550, "i"
-    .return ($P550)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<ratchet>"  :subid("156_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx555_tgt
-    .local int rx555_pos
-    .local int rx555_off
-    .local int rx555_eos
-    .local int rx555_rep
-    .local pmc rx555_cur
-    (rx555_cur, rx555_pos, rx555_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx555_cur
-    .local pmc match
-    .lex "$/", match
-    length rx555_eos, rx555_tgt
-    gt rx555_pos, rx555_eos, rx555_done
-    set rx555_off, 0
-    lt rx555_pos, 2, rx555_start
-    sub rx555_off, rx555_pos, 1
-    substr rx555_tgt, rx555_tgt, rx555_off
-  rx555_start:
-    eq $I10, 1, rx555_restart
-    rx555_cur."!cursor_debug"("START ", "mod_ident:sym<ratchet>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan558_done
-    goto rxscan558_scan
-  rxscan558_loop:
-    ($P10) = rx555_cur."from"()
-    inc $P10
-    set rx555_pos, $P10
-    ge rx555_pos, rx555_eos, rxscan558_done
-  rxscan558_scan:
-    set_addr $I10, rxscan558_loop
-    rx555_cur."!mark_push"(0, rx555_pos, $I10)
-  rxscan558_done:
-.annotate 'line', 185
+.sub "!PREFIX__mod_ident:sym<ignorecase>"  :subid("157_1282323996.47527") :method
+.annotate 'line', 3
+    new $P559, "ResizablePMCArray"
+    push $P559, "i"
+    .return ($P559)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident:sym<ratchet>"  :subid("158_1282323996.47527") :method :outer("11_1282323996.47527")
+.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
+    .local pmc rx564_debug
+    (rx564_cur, rx564_pos, rx564_tgt, $I10) = self."!cursor_start"()
+    getattribute rx564_debug, rx564_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx564_cur
+    .local pmc match
+    .lex "$/", match
+    length rx564_eos, rx564_tgt
+    gt rx564_pos, rx564_eos, rx564_done
+    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:
+    eq $I10, 1, rx564_restart
+    if_null rx564_debug, debug_462
+    rx564_cur."!cursor_debug"("START", "mod_ident:sym<ratchet>")
+  debug_462:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan567_done
+    goto rxscan567_scan
+  rxscan567_loop:
+    ($P10) = rx564_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:
+.annotate 'line', 192
   # rx subcapture "sym"
-    set_addr $I10, rxcap_559_fail
-    rx555_cur."!mark_push"(0, rx555_pos, $I10)
+    set_addr $I10, rxcap_568_fail
+    rx564_cur."!mark_push"(0, rx564_pos, $I10)
   # rx literal  "r"
-    add $I11, rx555_pos, 1
-    gt $I11, rx555_eos, rx555_fail
-    sub $I11, rx555_pos, rx555_off
-    substr $S10, rx555_tgt, $I11, 1
-    ne $S10, "r", rx555_fail
-    add rx555_pos, 1
-    set_addr $I10, rxcap_559_fail
-    ($I12, $I11) = rx555_cur."!mark_peek"($I10)
-    rx555_cur."!cursor_pos"($I11)
-    ($P10) = rx555_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx555_pos, "")
-    rx555_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx564_pos, 1
+    gt $I11, rx564_eos, rx564_fail
+    sub $I11, rx564_pos, rx564_off
+    ord $I11, rx564_tgt, $I11
+    ne $I11, 114, 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)
     $P10."!cursor_names"("sym")
-    goto rxcap_559_done
-  rxcap_559_fail:
-    goto rx555_fail
-  rxcap_559_done:
-  # rx rxquantr560 ** 0..1
-    set_addr $I10, rxquantr560_done
-    rx555_cur."!mark_push"(0, rx555_pos, $I10)
-  rxquantr560_loop:
+    goto rxcap_568_done
+  rxcap_568_fail:
+    goto rx564_fail
+  rxcap_568_done:
+  # rx rxquantr569 ** 0..1
+    set_addr $I10, rxquantr569_done
+    rx564_cur."!mark_push"(0, rx564_pos, $I10)
+  rxquantr569_loop:
   # rx literal  "atchet"
-    add $I11, rx555_pos, 6
-    gt $I11, rx555_eos, rx555_fail
-    sub $I11, rx555_pos, rx555_off
-    substr $S10, rx555_tgt, $I11, 6
-    ne $S10, "atchet", rx555_fail
-    add rx555_pos, 6
-    set_addr $I10, rxquantr560_done
-    (rx555_rep) = rx555_cur."!mark_commit"($I10)
-  rxquantr560_done:
-  # rx pass
-    rx555_cur."!cursor_pass"(rx555_pos, "mod_ident:sym<ratchet>")
-    rx555_cur."!cursor_debug"("PASS  ", "mod_ident:sym<ratchet>", " at pos=", rx555_pos)
-    .return (rx555_cur)
-  rx555_restart:
-.annotate 'line', 3
-    rx555_cur."!cursor_debug"("NEXT ", "mod_ident:sym<ratchet>")
-  rx555_fail:
-    (rx555_rep, rx555_pos, $I10, $P10) = rx555_cur."!mark_fail"(0)
-    lt rx555_pos, -1, rx555_done
-    eq rx555_pos, -1, rx555_fail
-    jump $I10
-  rx555_done:
-    rx555_cur."!cursor_fail"()
-    rx555_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<ratchet>")
-    .return (rx555_cur)
+    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
+    set_addr $I10, rxquantr569_done
+    (rx564_rep) = rx564_cur."!mark_commit"($I10)
+  rxquantr569_done:
+  # rx pass
+    rx564_cur."!cursor_pass"(rx564_pos, "mod_ident:sym<ratchet>")
+    if_null rx564_debug, debug_463
+    rx564_cur."!cursor_debug"("PASS", "mod_ident:sym<ratchet>", " at pos=", rx564_pos)
+  debug_463:
+    .return (rx564_cur)
+  rx564_restart:
+.annotate 'line', 3
+    if_null rx564_debug, debug_464
+    rx564_cur."!cursor_debug"("NEXT", "mod_ident:sym<ratchet>")
+  debug_464:
+  rx564_fail:
+    (rx564_rep, rx564_pos, $I10, $P10) = rx564_cur."!mark_fail"(0)
+    lt rx564_pos, -1, rx564_done
+    eq rx564_pos, -1, rx564_fail
+    jump $I10
+  rx564_done:
+    rx564_cur."!cursor_fail"()
+    if_null rx564_debug, debug_465
+    rx564_cur."!cursor_debug"("FAIL", "mod_ident:sym<ratchet>")
+  debug_465:
+    .return (rx564_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<ratchet>"  :subid("157_1280467470.54449") :method
-.annotate 'line', 3
-    new $P557, "ResizablePMCArray"
-    push $P557, "r"
-    .return ($P557)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<sigspace>"  :subid("158_1280467470.54449") :method :outer("11_1280467470.54449")
-.annotate 'line', 3
-    .local string rx562_tgt
-    .local int rx562_pos
-    .local int rx562_off
-    .local int rx562_eos
-    .local int rx562_rep
-    .local pmc rx562_cur
-    (rx562_cur, rx562_pos, rx562_tgt, $I10) = self."!cursor_start"()
-    .lex unicode:"$\x{a2}", rx562_cur
-    .local pmc match
-    .lex "$/", match
-    length rx562_eos, rx562_tgt
-    gt rx562_pos, rx562_eos, rx562_done
-    set rx562_off, 0
-    lt rx562_pos, 2, rx562_start
-    sub rx562_off, rx562_pos, 1
-    substr rx562_tgt, rx562_tgt, rx562_off
-  rx562_start:
-    eq $I10, 1, rx562_restart
-    rx562_cur."!cursor_debug"("START ", "mod_ident:sym<sigspace>")
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan565_done
-    goto rxscan565_scan
-  rxscan565_loop:
-    ($P10) = rx562_cur."from"()
-    inc $P10
-    set rx562_pos, $P10
-    ge rx562_pos, rx562_eos, rxscan565_done
-  rxscan565_scan:
-    set_addr $I10, rxscan565_loop
-    rx562_cur."!mark_push"(0, rx562_pos, $I10)
-  rxscan565_done:
-.annotate 'line', 186
+.sub "!PREFIX__mod_ident:sym<ratchet>"  :subid("159_1282323996.47527") :method
+.annotate 'line', 3
+    new $P566, "ResizablePMCArray"
+    push $P566, "r"
+    .return ($P566)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident:sym<sigspace>"  :subid("160_1282323996.47527") :method :outer("11_1282323996.47527")
+.annotate 'line', 3
+    .local string rx571_tgt
+    .local int rx571_pos
+    .local int rx571_off
+    .local int rx571_eos
+    .local int rx571_rep
+    .local pmc rx571_cur
+    .local pmc rx571_debug
+    (rx571_cur, rx571_pos, rx571_tgt, $I10) = self."!cursor_start"()
+    getattribute rx571_debug, rx571_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx571_cur
+    .local pmc match
+    .lex "$/", match
+    length rx571_eos, rx571_tgt
+    gt rx571_pos, rx571_eos, rx571_done
+    set rx571_off, 0
+    lt rx571_pos, 2, rx571_start
+    sub rx571_off, rx571_pos, 1
+    substr rx571_tgt, rx571_tgt, rx571_off
+  rx571_start:
+    eq $I10, 1, rx571_restart
+    if_null rx571_debug, debug_466
+    rx571_cur."!cursor_debug"("START", "mod_ident:sym<sigspace>")
+  debug_466:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan574_done
+    goto rxscan574_scan
+  rxscan574_loop:
+    ($P10) = rx571_cur."from"()
+    inc $P10
+    set rx571_pos, $P10
+    ge rx571_pos, rx571_eos, rxscan574_done
+  rxscan574_scan:
+    set_addr $I10, rxscan574_loop
+    rx571_cur."!mark_push"(0, rx571_pos, $I10)
+  rxscan574_done:
+.annotate 'line', 193
   # rx subcapture "sym"
-    set_addr $I10, rxcap_566_fail
-    rx562_cur."!mark_push"(0, rx562_pos, $I10)
+    set_addr $I10, rxcap_575_fail
+    rx571_cur."!mark_push"(0, rx571_pos, $I10)
   # rx literal  "s"
-    add $I11, rx562_pos, 1
-    gt $I11, rx562_eos, rx562_fail
-    sub $I11, rx562_pos, rx562_off
-    substr $S10, rx562_tgt, $I11, 1
-    ne $S10, "s", rx562_fail
-    add rx562_pos, 1
-    set_addr $I10, rxcap_566_fail
-    ($I12, $I11) = rx562_cur."!mark_peek"($I10)
-    rx562_cur."!cursor_pos"($I11)
-    ($P10) = rx562_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx562_pos, "")
-    rx562_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx571_pos, 1
+    gt $I11, rx571_eos, rx571_fail
+    sub $I11, rx571_pos, rx571_off
+    ord $I11, rx571_tgt, $I11
+    ne $I11, 115, rx571_fail
+    add rx571_pos, 1
+    set_addr $I10, rxcap_575_fail
+    ($I12, $I11) = rx571_cur."!mark_peek"($I10)
+    rx571_cur."!cursor_pos"($I11)
+    ($P10) = rx571_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx571_pos, "")
+    rx571_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_566_done
-  rxcap_566_fail:
-    goto rx562_fail
-  rxcap_566_done:
-  # rx rxquantr567 ** 0..1
-    set_addr $I10, rxquantr567_done
-    rx562_cur."!mark_push"(0, rx562_pos, $I10)
-  rxquantr567_loop:
+    goto rxcap_575_done
+  rxcap_575_fail:
+    goto rx571_fail
+  rxcap_575_done:
+  # rx rxquantr576 ** 0..1
+    set_addr $I10, rxquantr576_done
+    rx571_cur."!mark_push"(0, rx571_pos, $I10)
+  rxquantr576_loop:
   # rx literal  "igspace"
-    add $I11, rx562_pos, 7
-    gt $I11, rx562_eos, rx562_fail
-    sub $I11, rx562_pos, rx562_off
-    substr $S10, rx562_tgt, $I11, 7
-    ne $S10, "igspace", rx562_fail
-    add rx562_pos, 7
-    set_addr $I10, rxquantr567_done
-    (rx562_rep) = rx562_cur."!mark_commit"($I10)
-  rxquantr567_done:
+    add $I11, rx571_pos, 7
+    gt $I11, rx571_eos, rx571_fail
+    sub $I11, rx571_pos, rx571_off
+    substr $S10, rx571_tgt, $I11, 7
+    ne $S10, "igspace", rx571_fail
+    add rx571_pos, 7
+    set_addr $I10, rxquantr576_done
+    (rx571_rep) = rx571_cur."!mark_commit"($I10)
+  rxquantr576_done:
   # rx pass
-    rx562_cur."!cursor_pass"(rx562_pos, "mod_ident:sym<sigspace>")
-    rx562_cur."!cursor_debug"("PASS  ", "mod_ident:sym<sigspace>", " at pos=", rx562_pos)
-    .return (rx562_cur)
-  rx562_restart:
+    rx571_cur."!cursor_pass"(rx571_pos, "mod_ident:sym<sigspace>")
+    if_null rx571_debug, debug_467
+    rx571_cur."!cursor_debug"("PASS", "mod_ident:sym<sigspace>", " at pos=", rx571_pos)
+  debug_467:
+    .return (rx571_cur)
+  rx571_restart:
 .annotate 'line', 3
-    rx562_cur."!cursor_debug"("NEXT ", "mod_ident:sym<sigspace>")
-  rx562_fail:
-    (rx562_rep, rx562_pos, $I10, $P10) = rx562_cur."!mark_fail"(0)
-    lt rx562_pos, -1, rx562_done
-    eq rx562_pos, -1, rx562_fail
+    if_null rx571_debug, debug_468
+    rx571_cur."!cursor_debug"("NEXT", "mod_ident:sym<sigspace>")
+  debug_468:
+  rx571_fail:
+    (rx571_rep, rx571_pos, $I10, $P10) = rx571_cur."!mark_fail"(0)
+    lt rx571_pos, -1, rx571_done
+    eq rx571_pos, -1, rx571_fail
     jump $I10
-  rx562_done:
-    rx562_cur."!cursor_fail"()
-    rx562_cur."!cursor_debug"("FAIL  ", "mod_ident:sym<sigspace>")
-    .return (rx562_cur)
+  rx571_done:
+    rx571_cur."!cursor_fail"()
+    if_null rx571_debug, debug_469
+    rx571_cur."!cursor_debug"("FAIL", "mod_ident:sym<sigspace>")
+  debug_469:
+    .return (rx571_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<sigspace>"  :subid("159_1280467470.54449") :method
+.sub "!PREFIX__mod_ident:sym<sigspace>"  :subid("161_1282323996.47527") :method
 .annotate 'line', 3
-    new $P564, "ResizablePMCArray"
-    push $P564, "s"
-    .return ($P564)
+    new $P573, "ResizablePMCArray"
+    push $P573, "s"
+    .return ($P573)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block568" :load :anon :subid("160_1280467470.54449")
+.sub "_block577" :load :anon :subid("162_1282323996.47527")
 .annotate 'line', 3
-    .const 'Sub' $P570 = "11_1280467470.54449" 
-    $P571 = $P570()
-    .return ($P571)
+    .const 'Sub' $P579 = "11_1282323996.47527" 
+    $P580 = $P579()
+    .return ($P580)
 .end
 
 
 .namespace []
-.sub "_block573" :load :anon :subid("161_1280467470.54449")
+.sub "_block582" :load :anon :subid("163_1282323996.47527")
 .annotate 'line', 1
-    .const 'Sub' $P575 = "10_1280467470.54449" 
-    $P576 = $P575()
-    .return ($P576)
+    .const 'Sub' $P584 = "10_1282323996.47527" 
+    $P585 = $P584()
+    .return ($P585)
 .end
 
 ### .include 'gen/p6regex-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467473.99327")
+.sub "_block11"  :anon :subid("10_1282323999.42098")
 .annotate 'line', 0
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     capture_lex $P14
@@ -7689,153 +8571,155 @@
 .annotate 'line', 4
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     capture_lex $P14
-    $P1634 = $P14()
+    $P1671 = $P14()
 .annotate 'line', 1
-    .return ($P1634)
-    .const 'Sub' $P1636 = "92_1280467473.99327" 
-    .return ($P1636)
+    .return ($P1671)
+    .const 'Sub' $P1673 = "94_1282323999.42098" 
+    .return ($P1673)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post93") :outer("10_1280467473.99327")
+.sub "" :load :init :subid("post95") :outer("10_1282323999.42098")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467473.99327" 
+    .const 'Sub' $P12 = "10_1282323999.42098" 
     .local pmc block
     set block, $P12
-    $P1639 = get_root_global ["parrot"], "P6metaclass"
-    $P1639."new_class"("Regex::P6Regex::Actions", "HLL::Actions" :named("parent"))
+    $P1676 = get_root_global ["parrot"], "P6metaclass"
+    $P1676."new_class"("Regex::P6Regex::Actions", "HLL::Actions" :named("parent"))
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block13"  :subid("11_1280467473.99327") :outer("10_1280467473.99327")
+.sub "_block13"  :subid("11_1282323999.42098") :outer("10_1282323999.42098")
 .annotate 'line', 4
-    .const 'Sub' $P1611 = "90_1280467473.99327" 
-    capture_lex $P1611
-    .const 'Sub' $P1591 = "89_1280467473.99327" 
-    capture_lex $P1591
-    .const 'Sub' $P1559 = "88_1280467473.99327" 
-    capture_lex $P1559
-    .const 'Sub' $P1490 = "84_1280467473.99327" 
-    capture_lex $P1490
-    .const 'Sub' $P1422 = "82_1280467473.99327" 
-    capture_lex $P1422
-    .const 'Sub' $P1350 = "79_1280467473.99327" 
-    capture_lex $P1350
-    .const 'Sub' $P1336 = "78_1280467473.99327" 
-    capture_lex $P1336
-    .const 'Sub' $P1312 = "77_1280467473.99327" 
-    capture_lex $P1312
-    .const 'Sub' $P1294 = "76_1280467473.99327" 
-    capture_lex $P1294
-    .const 'Sub' $P1280 = "75_1280467473.99327" 
-    capture_lex $P1280
-    .const 'Sub' $P1267 = "74_1280467473.99327" 
-    capture_lex $P1267
-    .const 'Sub' $P1236 = "73_1280467473.99327" 
-    capture_lex $P1236
-    .const 'Sub' $P1205 = "72_1280467473.99327" 
-    capture_lex $P1205
-    .const 'Sub' $P1189 = "71_1280467473.99327" 
-    capture_lex $P1189
-    .const 'Sub' $P1173 = "70_1280467473.99327" 
-    capture_lex $P1173
-    .const 'Sub' $P1157 = "69_1280467473.99327" 
-    capture_lex $P1157
-    .const 'Sub' $P1141 = "68_1280467473.99327" 
-    capture_lex $P1141
-    .const 'Sub' $P1125 = "67_1280467473.99327" 
-    capture_lex $P1125
-    .const 'Sub' $P1109 = "66_1280467473.99327" 
-    capture_lex $P1109
-    .const 'Sub' $P1093 = "65_1280467473.99327" 
-    capture_lex $P1093
-    .const 'Sub' $P1069 = "64_1280467473.99327" 
-    capture_lex $P1069
-    .const 'Sub' $P1054 = "63_1280467473.99327" 
-    capture_lex $P1054
-    .const 'Sub' $P996 = "62_1280467473.99327" 
-    capture_lex $P996
-    .const 'Sub' $P975 = "61_1280467473.99327" 
-    capture_lex $P975
-    .const 'Sub' $P953 = "60_1280467473.99327" 
-    capture_lex $P953
-    .const 'Sub' $P943 = "59_1280467473.99327" 
-    capture_lex $P943
-    .const 'Sub' $P933 = "58_1280467473.99327" 
-    capture_lex $P933
-    .const 'Sub' $P923 = "57_1280467473.99327" 
-    capture_lex $P923
-    .const 'Sub' $P911 = "56_1280467473.99327" 
-    capture_lex $P911
-    .const 'Sub' $P899 = "55_1280467473.99327" 
-    capture_lex $P899
-    .const 'Sub' $P887 = "54_1280467473.99327" 
-    capture_lex $P887
-    .const 'Sub' $P875 = "53_1280467473.99327" 
-    capture_lex $P875
-    .const 'Sub' $P863 = "52_1280467473.99327" 
-    capture_lex $P863
-    .const 'Sub' $P851 = "51_1280467473.99327" 
-    capture_lex $P851
-    .const 'Sub' $P839 = "50_1280467473.99327" 
-    capture_lex $P839
-    .const 'Sub' $P827 = "49_1280467473.99327" 
-    capture_lex $P827
-    .const 'Sub' $P799 = "48_1280467473.99327" 
-    capture_lex $P799
-    .const 'Sub' $P771 = "47_1280467473.99327" 
-    capture_lex $P771
-    .const 'Sub' $P753 = "46_1280467473.99327" 
-    capture_lex $P753
-    .const 'Sub' $P743 = "45_1280467473.99327" 
-    capture_lex $P743
-    .const 'Sub' $P725 = "44_1280467473.99327" 
-    capture_lex $P725
-    .const 'Sub' $P652 = "42_1280467473.99327" 
-    capture_lex $P652
-    .const 'Sub' $P635 = "41_1280467473.99327" 
-    capture_lex $P635
-    .const 'Sub' $P620 = "40_1280467473.99327" 
-    capture_lex $P620
-    .const 'Sub' $P605 = "39_1280467473.99327" 
-    capture_lex $P605
-    .const 'Sub' $P579 = "38_1280467473.99327" 
-    capture_lex $P579
-    .const 'Sub' $P528 = "36_1280467473.99327" 
-    capture_lex $P528
-    .const 'Sub' $P460 = "34_1280467473.99327" 
+    .const 'Sub' $P1648 = "92_1282323999.42098" 
+    capture_lex $P1648
+    .const 'Sub' $P1628 = "91_1282323999.42098" 
+    capture_lex $P1628
+    .const 'Sub' $P1596 = "90_1282323999.42098" 
+    capture_lex $P1596
+    .const 'Sub' $P1527 = "86_1282323999.42098" 
+    capture_lex $P1527
+    .const 'Sub' $P1459 = "84_1282323999.42098" 
+    capture_lex $P1459
+    .const 'Sub' $P1387 = "81_1282323999.42098" 
+    capture_lex $P1387
+    .const 'Sub' $P1373 = "80_1282323999.42098" 
+    capture_lex $P1373
+    .const 'Sub' $P1349 = "79_1282323999.42098" 
+    capture_lex $P1349
+    .const 'Sub' $P1331 = "78_1282323999.42098" 
+    capture_lex $P1331
+    .const 'Sub' $P1317 = "77_1282323999.42098" 
+    capture_lex $P1317
+    .const 'Sub' $P1304 = "76_1282323999.42098" 
+    capture_lex $P1304
+    .const 'Sub' $P1273 = "75_1282323999.42098" 
+    capture_lex $P1273
+    .const 'Sub' $P1242 = "74_1282323999.42098" 
+    capture_lex $P1242
+    .const 'Sub' $P1226 = "73_1282323999.42098" 
+    capture_lex $P1226
+    .const 'Sub' $P1210 = "72_1282323999.42098" 
+    capture_lex $P1210
+    .const 'Sub' $P1194 = "71_1282323999.42098" 
+    capture_lex $P1194
+    .const 'Sub' $P1178 = "70_1282323999.42098" 
+    capture_lex $P1178
+    .const 'Sub' $P1162 = "69_1282323999.42098" 
+    capture_lex $P1162
+    .const 'Sub' $P1146 = "68_1282323999.42098" 
+    capture_lex $P1146
+    .const 'Sub' $P1130 = "67_1282323999.42098" 
+    capture_lex $P1130
+    .const 'Sub' $P1106 = "66_1282323999.42098" 
+    capture_lex $P1106
+    .const 'Sub' $P1091 = "65_1282323999.42098" 
+    capture_lex $P1091
+    .const 'Sub' $P1033 = "64_1282323999.42098" 
+    capture_lex $P1033
+    .const 'Sub' $P1012 = "63_1282323999.42098" 
+    capture_lex $P1012
+    .const 'Sub' $P990 = "62_1282323999.42098" 
+    capture_lex $P990
+    .const 'Sub' $P980 = "61_1282323999.42098" 
+    capture_lex $P980
+    .const 'Sub' $P970 = "60_1282323999.42098" 
+    capture_lex $P970
+    .const 'Sub' $P960 = "59_1282323999.42098" 
+    capture_lex $P960
+    .const 'Sub' $P948 = "58_1282323999.42098" 
+    capture_lex $P948
+    .const 'Sub' $P936 = "57_1282323999.42098" 
+    capture_lex $P936
+    .const 'Sub' $P924 = "56_1282323999.42098" 
+    capture_lex $P924
+    .const 'Sub' $P912 = "55_1282323999.42098" 
+    capture_lex $P912
+    .const 'Sub' $P900 = "54_1282323999.42098" 
+    capture_lex $P900
+    .const 'Sub' $P888 = "53_1282323999.42098" 
+    capture_lex $P888
+    .const 'Sub' $P876 = "52_1282323999.42098" 
+    capture_lex $P876
+    .const 'Sub' $P864 = "51_1282323999.42098" 
+    capture_lex $P864
+    .const 'Sub' $P836 = "50_1282323999.42098" 
+    capture_lex $P836
+    .const 'Sub' $P808 = "49_1282323999.42098" 
+    capture_lex $P808
+    .const 'Sub' $P790 = "48_1282323999.42098" 
+    capture_lex $P790
+    .const 'Sub' $P780 = "47_1282323999.42098" 
+    capture_lex $P780
+    .const 'Sub' $P762 = "46_1282323999.42098" 
+    capture_lex $P762
+    .const 'Sub' $P689 = "44_1282323999.42098" 
+    capture_lex $P689
+    .const 'Sub' $P672 = "43_1282323999.42098" 
+    capture_lex $P672
+    .const 'Sub' $P657 = "42_1282323999.42098" 
+    capture_lex $P657
+    .const 'Sub' $P642 = "41_1282323999.42098" 
+    capture_lex $P642
+    .const 'Sub' $P616 = "40_1282323999.42098" 
+    capture_lex $P616
+    .const 'Sub' $P565 = "38_1282323999.42098" 
+    capture_lex $P565
+    .const 'Sub' $P497 = "36_1282323999.42098" 
+    capture_lex $P497
+    .const 'Sub' $P460 = "34_1282323999.42098" 
     capture_lex $P460
-    .const 'Sub' $P404 = "31_1280467473.99327" 
+    .const 'Sub' $P404 = "31_1282323999.42098" 
     capture_lex $P404
-    .const 'Sub' $P389 = "30_1280467473.99327" 
+    .const 'Sub' $P389 = "30_1282323999.42098" 
     capture_lex $P389
-    .const 'Sub' $P363 = "28_1280467473.99327" 
+    .const 'Sub' $P363 = "28_1282323999.42098" 
     capture_lex $P363
-    .const 'Sub' $P346 = "27_1280467473.99327" 
+    .const 'Sub' $P346 = "27_1282323999.42098" 
     capture_lex $P346
-    .const 'Sub' $P312 = "26_1280467473.99327" 
+    .const 'Sub' $P312 = "26_1282323999.42098" 
     capture_lex $P312
-    .const 'Sub' $P57 = "13_1280467473.99327" 
+    .const 'Sub' $P57 = "13_1282323999.42098" 
     capture_lex $P57
-    .const 'Sub' $P16 = "12_1280467473.99327" 
+    .const 'Sub' $P16 = "12_1282323999.42098" 
     capture_lex $P16
     get_global $P15, "@MODIFIERS"
-    unless_null $P15, vivify_95
+    unless_null $P15, vivify_97
     $P15 = root_new ['parrot';'ResizablePMCArray']
     set_global "@MODIFIERS", $P15
-  vivify_95:
-.annotate 'line', 492
-    .const 'Sub' $P16 = "12_1280467473.99327" 
+  vivify_97:
+.annotate 'line', 506
+    .const 'Sub' $P16 = "12_1282323999.42098" 
     newclosure $P56, $P16
     .lex "buildsub", $P56
-.annotate 'line', 510
-    .const 'Sub' $P57 = "13_1280467473.99327" 
+.annotate 'line', 524
+    .const 'Sub' $P57 = "13_1282323999.42098" 
     newclosure $P311, $P57
     .lex "capnames", $P311
-.annotate 'line', 576
-    .const 'Sub' $P312 = "26_1280467473.99327" 
+.annotate 'line', 590
+    .const 'Sub' $P312 = "26_1282323999.42098" 
     newclosure $P344, $P312
     .lex "backmod", $P344
 .annotate 'line', 4
@@ -7846,90 +8730,90 @@
     $P0."ctxsave"()
   ctxsave_done:
     get_global $P345, "@MODIFIERS"
-.annotate 'line', 485
-    find_lex $P1588, "buildsub"
-    find_lex $P1589, "capnames"
-    find_lex $P1590, "backmod"
-.annotate 'line', 589
-    .const 'Sub' $P1611 = "90_1280467473.99327" 
-    newclosure $P1628, $P1611
+.annotate 'line', 499
+    find_lex $P1625, "buildsub"
+    find_lex $P1626, "capnames"
+    find_lex $P1627, "backmod"
+.annotate 'line', 603
+    .const 'Sub' $P1648 = "92_1282323999.42098" 
+    newclosure $P1665, $P1648
 .annotate 'line', 4
-    .return ($P1628)
-    .const 'Sub' $P1630 = "91_1280467473.99327" 
-    .return ($P1630)
+    .return ($P1665)
+    .const 'Sub' $P1667 = "93_1282323999.42098" 
+    .return ($P1667)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "" :load :init :subid("post94") :outer("11_1280467473.99327")
+.sub "" :load :init :subid("post96") :outer("11_1282323999.42098")
 .annotate 'line', 4
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate 'line', 7
 
-        $P1633 = new ['ResizablePMCArray']
+        $P1670 = new ['ResizablePMCArray']
         $P0 = new ['Hash']
-        push $P1633, $P0
+        push $P1670, $P0
     
-    set_global "@MODIFIERS", $P1633
+    set_global "@MODIFIERS", $P1670
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "buildsub"  :subid("12_1280467473.99327") :outer("11_1280467473.99327")
+.sub "buildsub"  :subid("12_1282323999.42098") :outer("11_1282323999.42098")
     .param pmc param_19
     .param pmc param_20 :optional
     .param int has_param_20 :opt_flag
-.annotate 'line', 492
+.annotate 'line', 506
     new $P18, 'ExceptionHandler'
     set_addr $P18, control_17
     $P18."handle_types"(.CONTROL_RETURN)
     push_eh $P18
     .lex "$rpast", param_19
-    if has_param_20, optparam_96
+    if has_param_20, optparam_98
     get_hll_global $P21, ["PAST"], "Block"
     $P22 = $P21."new"()
     set param_20, $P22
-  optparam_96:
+  optparam_98:
     .lex "$block", param_20
-.annotate 'line', 493
+.annotate 'line', 507
     $P23 = root_new ['parrot';'Hash']
     .lex "%capnames", $P23
     find_lex $P24, "$rpast"
     $P25 = "capnames"($P24, 0)
     store_lex "%capnames", $P25
-.annotate 'line', 494
+.annotate 'line', 508
     new $P26, "Integer"
     assign $P26, 0
     find_lex $P27, "%capnames"
-    unless_null $P27, vivify_97
+    unless_null $P27, vivify_99
     $P27 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P27
-  vivify_97:
+  vivify_99:
     set $P27[""], $P26
-.annotate 'line', 495
+.annotate 'line', 509
     get_hll_global $P28, ["PAST"], "Regex"
-.annotate 'line', 496
+.annotate 'line', 510
     get_hll_global $P29, ["PAST"], "Regex"
     $P30 = $P29."new"("scan" :named("pasttype"))
     find_lex $P31, "$rpast"
-.annotate 'line', 498
+.annotate 'line', 512
     get_hll_global $P32, ["PAST"], "Regex"
-.annotate 'line', 499
+.annotate 'line', 513
     get_global $P35, "@MODIFIERS"
-    unless_null $P35, vivify_98
+    unless_null $P35, vivify_100
     $P35 = root_new ['parrot';'ResizablePMCArray']
-  vivify_98:
+  vivify_100:
     set $P36, $P35[0]
-    unless_null $P36, vivify_99
+    unless_null $P36, vivify_101
     $P36 = root_new ['parrot';'Hash']
-  vivify_99:
+  vivify_101:
     set $P37, $P36["r"]
-    unless_null $P37, vivify_100
+    unless_null $P37, vivify_102
     new $P37, "Undef"
-  vivify_100:
+  vivify_102:
     if $P37, if_34
     new $P39, "String"
     assign $P39, "g"
@@ -7941,34 +8825,34 @@
     set $P33, $P38
   if_34_end:
     $P40 = $P32."new"("pass" :named("pasttype"), $P33 :named("backtrack"))
-.annotate 'line', 498
+.annotate 'line', 512
     find_lex $P41, "%capnames"
     $P42 = $P28."new"($P30, $P31, $P40, "concat" :named("pasttype"), $P41 :named("capnames"))
-.annotate 'line', 495
+.annotate 'line', 509
     store_lex "$rpast", $P42
-.annotate 'line', 503
+.annotate 'line', 517
     find_lex $P44, "$block"
     $P45 = $P44."symbol"(unicode:"$\x{a2}")
     if $P45, unless_43_end
     find_lex $P46, "$block"
     $P46."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
   unless_43_end:
-.annotate 'line', 504
+.annotate 'line', 518
     find_lex $P48, "$block"
     $P49 = $P48."symbol"("$/")
     if $P49, unless_47_end
     find_lex $P50, "$block"
     $P50."symbol"("$/", "lexical" :named("scope"))
   unless_47_end:
-.annotate 'line', 505
+.annotate 'line', 519
     find_lex $P51, "$block"
     find_lex $P52, "$rpast"
     $P51."push"($P52)
-.annotate 'line', 506
+.annotate 'line', 520
     find_lex $P53, "$block"
     $P53."blocktype"("method")
     find_lex $P54, "$block"
-.annotate 'line', 492
+.annotate 'line', 506
     .return ($P54)
   control_17:
     .local pmc exception 
@@ -7980,19 +8864,19 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "capnames"  :subid("13_1280467473.99327") :outer("11_1280467473.99327")
+.sub "capnames"  :subid("13_1282323999.42098") :outer("11_1282323999.42098")
     .param pmc param_60
     .param pmc param_61
-.annotate 'line', 510
-    .const 'Sub' $P286 = "24_1280467473.99327" 
+.annotate 'line', 524
+    .const 'Sub' $P286 = "24_1282323999.42098" 
     capture_lex $P286
-    .const 'Sub' $P223 = "21_1280467473.99327" 
+    .const 'Sub' $P223 = "21_1282323999.42098" 
     capture_lex $P223
-    .const 'Sub' $P181 = "19_1280467473.99327" 
+    .const 'Sub' $P181 = "19_1282323999.42098" 
     capture_lex $P181
-    .const 'Sub' $P139 = "17_1280467473.99327" 
+    .const 'Sub' $P139 = "17_1282323999.42098" 
     capture_lex $P139
-    .const 'Sub' $P72 = "14_1280467473.99327" 
+    .const 'Sub' $P72 = "14_1282323999.42098" 
     capture_lex $P72
     new $P59, 'ExceptionHandler'
     set_addr $P59, control_58
@@ -8000,29 +8884,29 @@
     push_eh $P59
     .lex "$ast", param_60
     .lex "$count", param_61
-.annotate 'line', 511
+.annotate 'line', 525
     $P62 = root_new ['parrot';'Hash']
     .lex "%capnames", $P62
-.annotate 'line', 512
+.annotate 'line', 526
     new $P63, "Undef"
     .lex "$pasttype", $P63
-.annotate 'line', 510
+.annotate 'line', 524
     find_lex $P64, "%capnames"
-.annotate 'line', 512
+.annotate 'line', 526
     find_lex $P65, "$ast"
     $P66 = $P65."pasttype"()
     store_lex "$pasttype", $P66
-.annotate 'line', 513
+.annotate 'line', 527
     find_lex $P68, "$pasttype"
     set $S69, $P68
     iseq $I70, $S69, "alt"
     if $I70, if_67
-.annotate 'line', 526
+.annotate 'line', 540
     find_lex $P130, "$pasttype"
     set $S131, $P130
     iseq $I132, $S131, "concat"
     if $I132, if_129
-.annotate 'line', 535
+.annotate 'line', 549
     find_lex $P174, "$pasttype"
     set $S175, $P174
     iseq $I176, $S175, "subrule"
@@ -8038,41 +8922,41 @@
     set $P172, $I179
   if_173_end:
     if $P172, if_171
-.annotate 'line', 548
+.annotate 'line', 562
     find_lex $P219, "$pasttype"
     set $S220, $P219
     iseq $I221, $S220, "subcapture"
     if $I221, if_218
-.annotate 'line', 565
+.annotate 'line', 579
     find_lex $P282, "$pasttype"
     set $S283, $P282
     iseq $I284, $S283, "quant"
     unless $I284, if_281_end
-    .const 'Sub' $P286 = "24_1280467473.99327" 
+    .const 'Sub' $P286 = "24_1282323999.42098" 
     capture_lex $P286
     $P286()
   if_281_end:
     goto if_218_end
   if_218:
-.annotate 'line', 548
-    .const 'Sub' $P223 = "21_1280467473.99327" 
+.annotate 'line', 562
+    .const 'Sub' $P223 = "21_1282323999.42098" 
     capture_lex $P223
     $P223()
   if_218_end:
     goto if_171_end
   if_171:
-.annotate 'line', 535
-    .const 'Sub' $P181 = "19_1280467473.99327" 
+.annotate 'line', 549
+    .const 'Sub' $P181 = "19_1282323999.42098" 
     capture_lex $P181
     $P181()
   if_171_end:
     goto if_129_end
   if_129:
-.annotate 'line', 527
+.annotate 'line', 541
     find_lex $P134, "$ast"
     $P135 = $P134."list"()
     defined $I136, $P135
-    unless $I136, for_undef_121
+    unless $I136, for_undef_123
     iter $P133, $P135
     new $P169, 'ExceptionHandler'
     set_addr $P169, loop168_handler
@@ -8082,7 +8966,7 @@
     unless $P133, loop168_done
     shift $P137, $P133
   loop168_redo:
-    .const 'Sub' $P139 = "17_1280467473.99327" 
+    .const 'Sub' $P139 = "17_1282323999.42098" 
     capture_lex $P139
     $P139($P137)
   loop168_next:
@@ -8095,26 +8979,26 @@
     eq $P170, .CONTROL_LOOP_REDO, loop168_redo
   loop168_done:
     pop_eh 
-  for_undef_121:
+  for_undef_123:
   if_129_end:
-.annotate 'line', 526
+.annotate 'line', 540
     goto if_67_end
   if_67:
-.annotate 'line', 513
-    .const 'Sub' $P72 = "14_1280467473.99327" 
+.annotate 'line', 527
+    .const 'Sub' $P72 = "14_1282323999.42098" 
     capture_lex $P72
     $P72()
   if_67_end:
-.annotate 'line', 572
+.annotate 'line', 586
     find_lex $P307, "$count"
     find_lex $P308, "%capnames"
-    unless_null $P308, vivify_141
+    unless_null $P308, vivify_143
     $P308 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P308
-  vivify_141:
+  vivify_143:
     set $P308[""], $P307
     find_lex $P309, "%capnames"
-.annotate 'line', 510
+.annotate 'line', 524
     .return ($P309)
   control_58:
     .local pmc exception 
@@ -8126,28 +9010,28 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block285"  :anon :subid("24_1280467473.99327") :outer("13_1280467473.99327")
-.annotate 'line', 565
-    .const 'Sub' $P297 = "25_1280467473.99327" 
+.sub "_block285"  :anon :subid("24_1282323999.42098") :outer("13_1282323999.42098")
+.annotate 'line', 579
+    .const 'Sub' $P297 = "25_1282323999.42098" 
     capture_lex $P297
-.annotate 'line', 566
+.annotate 'line', 580
     $P287 = root_new ['parrot';'Hash']
     .lex "%astcap", $P287
     find_lex $P288, "$ast"
-    unless_null $P288, vivify_101
+    unless_null $P288, vivify_103
     $P288 = root_new ['parrot';'ResizablePMCArray']
-  vivify_101:
+  vivify_103:
     set $P289, $P288[0]
-    unless_null $P289, vivify_102
+    unless_null $P289, vivify_104
     new $P289, "Undef"
-  vivify_102:
+  vivify_104:
     find_lex $P290, "$count"
     $P291 = "capnames"($P289, $P290)
     store_lex "%astcap", $P291
-.annotate 'line', 567
+.annotate 'line', 581
     find_lex $P293, "%astcap"
     defined $I294, $P293
-    unless $I294, for_undef_103
+    unless $I294, for_undef_105
     iter $P292, $P293
     new $P303, 'ExceptionHandler'
     set_addr $P303, loop302_handler
@@ -8157,7 +9041,7 @@
     unless $P292, loop302_done
     shift $P295, $P292
   loop302_redo:
-    .const 'Sub' $P297 = "25_1280467473.99327" 
+    .const 'Sub' $P297 = "25_1282323999.42098" 
     capture_lex $P297
     $P297($P295)
   loop302_next:
@@ -8170,74 +9054,74 @@
     eq $P304, .CONTROL_LOOP_REDO, loop302_redo
   loop302_done:
     pop_eh 
-  for_undef_103:
-.annotate 'line', 570
+  for_undef_105:
+.annotate 'line', 584
     find_lex $P305, "%astcap"
-    unless_null $P305, vivify_105
+    unless_null $P305, vivify_107
     $P305 = root_new ['parrot';'Hash']
-  vivify_105:
+  vivify_107:
     set $P306, $P305[""]
-    unless_null $P306, vivify_106
+    unless_null $P306, vivify_108
     new $P306, "Undef"
-  vivify_106:
+  vivify_108:
     store_lex "$count", $P306
-.annotate 'line', 565
+.annotate 'line', 579
     .return ($P306)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block296"  :anon :subid("25_1280467473.99327") :outer("24_1280467473.99327")
+.sub "_block296"  :anon :subid("25_1282323999.42098") :outer("24_1282323999.42098")
     .param pmc param_298
-.annotate 'line', 567
+.annotate 'line', 581
     .lex "$_", param_298
-.annotate 'line', 568
+.annotate 'line', 582
     new $P299, "Integer"
     assign $P299, 2
     find_lex $P300, "$_"
     find_lex $P301, "%capnames"
-    unless_null $P301, vivify_104
+    unless_null $P301, vivify_106
     $P301 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P301
-  vivify_104:
+  vivify_106:
     set $P301[$P300], $P299
-.annotate 'line', 567
+.annotate 'line', 581
     .return ($P299)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block222"  :anon :subid("21_1280467473.99327") :outer("13_1280467473.99327")
-.annotate 'line', 548
-    .const 'Sub' $P263 = "23_1280467473.99327" 
+.sub "_block222"  :anon :subid("21_1282323999.42098") :outer("13_1282323999.42098")
+.annotate 'line', 562
+    .const 'Sub' $P263 = "23_1282323999.42098" 
     capture_lex $P263
-    .const 'Sub' $P235 = "22_1280467473.99327" 
+    .const 'Sub' $P235 = "22_1282323999.42098" 
     capture_lex $P235
-.annotate 'line', 549
+.annotate 'line', 563
     new $P224, "Undef"
     .lex "$name", $P224
-.annotate 'line', 550
+.annotate 'line', 564
     $P225 = root_new ['parrot';'ResizablePMCArray']
     .lex "@names", $P225
-.annotate 'line', 559
+.annotate 'line', 573
     $P226 = root_new ['parrot';'Hash']
     .lex "%x", $P226
-.annotate 'line', 549
+.annotate 'line', 563
     find_lex $P227, "$ast"
     $P228 = $P227."name"()
     store_lex "$name", $P228
-.annotate 'line', 550
+.annotate 'line', 564
 
             $P0 = find_lex '$name'
             $S0 = $P0
             $P229 = split '=', $S0
         
     store_lex "@names", $P229
-.annotate 'line', 555
+.annotate 'line', 569
     find_lex $P231, "@names"
     defined $I232, $P231
-    unless $I232, for_undef_107
+    unless $I232, for_undef_109
     iter $P230, $P231
     new $P252, 'ExceptionHandler'
     set_addr $P252, loop251_handler
@@ -8247,7 +9131,7 @@
     unless $P230, loop251_done
     shift $P233, $P230
   loop251_redo:
-    .const 'Sub' $P235 = "22_1280467473.99327" 
+    .const 'Sub' $P235 = "22_1282323999.42098" 
     capture_lex $P235
     $P235($P233)
   loop251_next:
@@ -8260,23 +9144,23 @@
     eq $P253, .CONTROL_LOOP_REDO, loop251_redo
   loop251_done:
     pop_eh 
-  for_undef_107:
-.annotate 'line', 559
+  for_undef_109:
+.annotate 'line', 573
     find_lex $P254, "$ast"
-    unless_null $P254, vivify_109
+    unless_null $P254, vivify_111
     $P254 = root_new ['parrot';'ResizablePMCArray']
-  vivify_109:
+  vivify_111:
     set $P255, $P254[0]
-    unless_null $P255, vivify_110
+    unless_null $P255, vivify_112
     new $P255, "Undef"
-  vivify_110:
+  vivify_112:
     find_lex $P256, "$count"
     $P257 = "capnames"($P255, $P256)
     store_lex "%x", $P257
-.annotate 'line', 560
+.annotate 'line', 574
     find_lex $P259, "%x"
     defined $I260, $P259
-    unless $I260, for_undef_111
+    unless $I260, for_undef_113
     iter $P258, $P259
     new $P277, 'ExceptionHandler'
     set_addr $P277, loop276_handler
@@ -8286,7 +9170,7 @@
     unless $P258, loop276_done
     shift $P261, $P258
   loop276_redo:
-    .const 'Sub' $P263 = "23_1280467473.99327" 
+    .const 'Sub' $P263 = "23_1282323999.42098" 
     capture_lex $P263
     $P263($P261)
   loop276_next:
@@ -8299,28 +9183,28 @@
     eq $P278, .CONTROL_LOOP_REDO, loop276_redo
   loop276_done:
     pop_eh 
-  for_undef_111:
-.annotate 'line', 563
+  for_undef_113:
+.annotate 'line', 577
     find_lex $P279, "%x"
-    unless_null $P279, vivify_117
+    unless_null $P279, vivify_119
     $P279 = root_new ['parrot';'Hash']
-  vivify_117:
+  vivify_119:
     set $P280, $P279[""]
-    unless_null $P280, vivify_118
+    unless_null $P280, vivify_120
     new $P280, "Undef"
-  vivify_118:
+  vivify_120:
     store_lex "$count", $P280
-.annotate 'line', 548
+.annotate 'line', 562
     .return ($P280)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block234"  :anon :subid("22_1280467473.99327") :outer("21_1280467473.99327")
+.sub "_block234"  :anon :subid("22_1282323999.42098") :outer("21_1282323999.42098")
     .param pmc param_236
-.annotate 'line', 555
+.annotate 'line', 569
     .lex "$_", param_236
-.annotate 'line', 556
+.annotate 'line', 570
     find_lex $P240, "$_"
     set $S241, $P240
     iseq $I242, $S241, "0"
@@ -8340,78 +9224,78 @@
     add $P247, $P246, 1
     store_lex "$count", $P247
   if_237_end:
-.annotate 'line', 557
+.annotate 'line', 571
     new $P248, "Integer"
     assign $P248, 1
     find_lex $P249, "$_"
     find_lex $P250, "%capnames"
-    unless_null $P250, vivify_108
+    unless_null $P250, vivify_110
     $P250 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P250
-  vivify_108:
+  vivify_110:
     set $P250[$P249], $P248
-.annotate 'line', 555
+.annotate 'line', 569
     .return ($P248)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block262"  :anon :subid("23_1280467473.99327") :outer("21_1280467473.99327")
+.sub "_block262"  :anon :subid("23_1282323999.42098") :outer("21_1282323999.42098")
     .param pmc param_264
-.annotate 'line', 560
+.annotate 'line', 574
     .lex "$_", param_264
-.annotate 'line', 561
+.annotate 'line', 575
     find_lex $P265, "$_"
     find_lex $P266, "%capnames"
-    unless_null $P266, vivify_112
+    unless_null $P266, vivify_114
     $P266 = root_new ['parrot';'Hash']
-  vivify_112:
+  vivify_114:
     set $P267, $P266[$P265]
-    unless_null $P267, vivify_113
+    unless_null $P267, vivify_115
     new $P267, "Undef"
-  vivify_113:
+  vivify_115:
     set $N268, $P267
     new $P269, 'Float'
     set $P269, $N268
     find_lex $P270, "$_"
     find_lex $P271, "%x"
-    unless_null $P271, vivify_114
+    unless_null $P271, vivify_116
     $P271 = root_new ['parrot';'Hash']
-  vivify_114:
+  vivify_116:
     set $P272, $P271[$P270]
-    unless_null $P272, vivify_115
+    unless_null $P272, vivify_117
     new $P272, "Undef"
-  vivify_115:
+  vivify_117:
     add $P273, $P269, $P272
     find_lex $P274, "$_"
     find_lex $P275, "%capnames"
-    unless_null $P275, vivify_116
+    unless_null $P275, vivify_118
     $P275 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P275
-  vivify_116:
+  vivify_118:
     set $P275[$P274], $P273
-.annotate 'line', 560
+.annotate 'line', 574
     .return ($P273)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block180"  :anon :subid("19_1280467473.99327") :outer("13_1280467473.99327")
-.annotate 'line', 535
-    .const 'Sub' $P199 = "20_1280467473.99327" 
+.sub "_block180"  :anon :subid("19_1282323999.42098") :outer("13_1282323999.42098")
+.annotate 'line', 549
+    .const 'Sub' $P199 = "20_1282323999.42098" 
     capture_lex $P199
-.annotate 'line', 536
+.annotate 'line', 550
     new $P182, "Undef"
     .lex "$name", $P182
-.annotate 'line', 538
+.annotate 'line', 552
     $P183 = root_new ['parrot';'ResizablePMCArray']
     .lex "@names", $P183
-.annotate 'line', 536
+.annotate 'line', 550
     find_lex $P184, "$ast"
     $P185 = $P184."name"()
     store_lex "$name", $P185
-.annotate 'line', 537
+.annotate 'line', 551
     find_lex $P187, "$name"
     set $S188, $P187
     iseq $I189, $S188, ""
@@ -8422,17 +9306,17 @@
     find_lex $P192, "$name"
     $P191."name"($P192)
   if_186_end:
-.annotate 'line', 538
+.annotate 'line', 552
 
             $P0 = find_lex '$name'
             $S0 = $P0
             $P193 = split '=', $S0
         
     store_lex "@names", $P193
-.annotate 'line', 543
+.annotate 'line', 557
     find_lex $P195, "@names"
     defined $I196, $P195
-    unless $I196, for_undef_119
+    unless $I196, for_undef_121
     iter $P194, $P195
     new $P216, 'ExceptionHandler'
     set_addr $P216, loop215_handler
@@ -8442,7 +9326,7 @@
     unless $P194, loop215_done
     shift $P197, $P194
   loop215_redo:
-    .const 'Sub' $P199 = "20_1280467473.99327" 
+    .const 'Sub' $P199 = "20_1282323999.42098" 
     capture_lex $P199
     $P199($P197)
   loop215_next:
@@ -8455,18 +9339,18 @@
     eq $P217, .CONTROL_LOOP_REDO, loop215_redo
   loop215_done:
     pop_eh 
-  for_undef_119:
-.annotate 'line', 535
+  for_undef_121:
+.annotate 'line', 549
     .return ($P194)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block198"  :anon :subid("20_1280467473.99327") :outer("19_1280467473.99327")
+.sub "_block198"  :anon :subid("20_1282323999.42098") :outer("19_1282323999.42098")
     .param pmc param_200
-.annotate 'line', 543
+.annotate 'line', 557
     .lex "$_", param_200
-.annotate 'line', 544
+.annotate 'line', 558
     find_lex $P204, "$_"
     set $S205, $P204
     iseq $I206, $S205, "0"
@@ -8486,29 +9370,29 @@
     add $P211, $P210, 1
     store_lex "$count", $P211
   if_201_end:
-.annotate 'line', 545
+.annotate 'line', 559
     new $P212, "Integer"
     assign $P212, 1
     find_lex $P213, "$_"
     find_lex $P214, "%capnames"
-    unless_null $P214, vivify_120
+    unless_null $P214, vivify_122
     $P214 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P214
-  vivify_120:
+  vivify_122:
     set $P214[$P213], $P212
-.annotate 'line', 543
+.annotate 'line', 557
     .return ($P212)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block138"  :anon :subid("17_1280467473.99327") :outer("13_1280467473.99327")
+.sub "_block138"  :anon :subid("17_1282323999.42098") :outer("13_1282323999.42098")
     .param pmc param_141
-.annotate 'line', 527
-    .const 'Sub' $P150 = "18_1280467473.99327" 
+.annotate 'line', 541
+    .const 'Sub' $P150 = "18_1282323999.42098" 
     capture_lex $P150
-.annotate 'line', 528
+.annotate 'line', 542
     $P140 = root_new ['parrot';'Hash']
     .lex "%x", $P140
     .lex "$_", param_141
@@ -8516,10 +9400,10 @@
     find_lex $P143, "$count"
     $P144 = "capnames"($P142, $P143)
     store_lex "%x", $P144
-.annotate 'line', 529
+.annotate 'line', 543
     find_lex $P146, "%x"
     defined $I147, $P146
-    unless $I147, for_undef_122
+    unless $I147, for_undef_124
     iter $P145, $P146
     new $P164, 'ExceptionHandler'
     set_addr $P164, loop163_handler
@@ -8529,7 +9413,7 @@
     unless $P145, loop163_done
     shift $P148, $P145
   loop163_redo:
-    .const 'Sub' $P150 = "18_1280467473.99327" 
+    .const 'Sub' $P150 = "18_1282323999.42098" 
     capture_lex $P150
     $P150($P148)
   loop163_next:
@@ -8542,78 +9426,78 @@
     eq $P165, .CONTROL_LOOP_REDO, loop163_redo
   loop163_done:
     pop_eh 
-  for_undef_122:
-.annotate 'line', 532
+  for_undef_124:
+.annotate 'line', 546
     find_lex $P166, "%x"
-    unless_null $P166, vivify_128
+    unless_null $P166, vivify_130
     $P166 = root_new ['parrot';'Hash']
-  vivify_128:
+  vivify_130:
     set $P167, $P166[""]
-    unless_null $P167, vivify_129
+    unless_null $P167, vivify_131
     new $P167, "Undef"
-  vivify_129:
+  vivify_131:
     store_lex "$count", $P167
-.annotate 'line', 527
+.annotate 'line', 541
     .return ($P167)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block149"  :anon :subid("18_1280467473.99327") :outer("17_1280467473.99327")
+.sub "_block149"  :anon :subid("18_1282323999.42098") :outer("17_1282323999.42098")
     .param pmc param_151
-.annotate 'line', 529
+.annotate 'line', 543
     .lex "$_", param_151
-.annotate 'line', 530
+.annotate 'line', 544
     find_lex $P152, "$_"
     find_lex $P153, "%capnames"
-    unless_null $P153, vivify_123
+    unless_null $P153, vivify_125
     $P153 = root_new ['parrot';'Hash']
-  vivify_123:
+  vivify_125:
     set $P154, $P153[$P152]
-    unless_null $P154, vivify_124
+    unless_null $P154, vivify_126
     new $P154, "Undef"
-  vivify_124:
+  vivify_126:
     set $N155, $P154
     new $P156, 'Float'
     set $P156, $N155
     find_lex $P157, "$_"
     find_lex $P158, "%x"
-    unless_null $P158, vivify_125
+    unless_null $P158, vivify_127
     $P158 = root_new ['parrot';'Hash']
-  vivify_125:
+  vivify_127:
     set $P159, $P158[$P157]
-    unless_null $P159, vivify_126
+    unless_null $P159, vivify_128
     new $P159, "Undef"
-  vivify_126:
+  vivify_128:
     add $P160, $P156, $P159
     find_lex $P161, "$_"
     find_lex $P162, "%capnames"
-    unless_null $P162, vivify_127
+    unless_null $P162, vivify_129
     $P162 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P162
-  vivify_127:
+  vivify_129:
     set $P162[$P161], $P160
-.annotate 'line', 529
+.annotate 'line', 543
     .return ($P160)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block71"  :anon :subid("14_1280467473.99327") :outer("13_1280467473.99327")
-.annotate 'line', 513
-    .const 'Sub' $P81 = "15_1280467473.99327" 
+.sub "_block71"  :anon :subid("14_1282323999.42098") :outer("13_1282323999.42098")
+.annotate 'line', 527
+    .const 'Sub' $P81 = "15_1282323999.42098" 
     capture_lex $P81
-.annotate 'line', 514
+.annotate 'line', 528
     new $P73, "Undef"
     .lex "$max", $P73
     find_lex $P74, "$count"
     store_lex "$max", $P74
-.annotate 'line', 515
+.annotate 'line', 529
     find_lex $P76, "$ast"
     $P77 = $P76."list"()
     defined $I78, $P77
-    unless $I78, for_undef_130
+    unless $I78, for_undef_132
     iter $P75, $P77
     new $P126, 'ExceptionHandler'
     set_addr $P126, loop125_handler
@@ -8623,7 +9507,7 @@
     unless $P75, loop125_done
     shift $P79, $P75
   loop125_redo:
-    .const 'Sub' $P81 = "15_1280467473.99327" 
+    .const 'Sub' $P81 = "15_1282323999.42098" 
     capture_lex $P81
     $P81($P79)
   loop125_next:
@@ -8636,23 +9520,23 @@
     eq $P127, .CONTROL_LOOP_REDO, loop125_redo
   loop125_done:
     pop_eh 
-  for_undef_130:
-.annotate 'line', 524
+  for_undef_132:
+.annotate 'line', 538
     find_lex $P128, "$max"
     store_lex "$count", $P128
-.annotate 'line', 513
+.annotate 'line', 527
     .return ($P128)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block80"  :anon :subid("15_1280467473.99327") :outer("14_1280467473.99327")
+.sub "_block80"  :anon :subid("15_1282323999.42098") :outer("14_1282323999.42098")
     .param pmc param_83
-.annotate 'line', 515
-    .const 'Sub' $P92 = "16_1280467473.99327" 
+.annotate 'line', 529
+    .const 'Sub' $P92 = "16_1282323999.42098" 
     capture_lex $P92
-.annotate 'line', 516
+.annotate 'line', 530
     $P82 = root_new ['parrot';'Hash']
     .lex "%x", $P82
     .lex "$_", param_83
@@ -8660,10 +9544,10 @@
     find_lex $P85, "$count"
     $P86 = "capnames"($P84, $P85)
     store_lex "%x", $P86
-.annotate 'line', 517
+.annotate 'line', 531
     find_lex $P88, "%x"
     defined $I89, $P88
-    unless $I89, for_undef_131
+    unless $I89, for_undef_133
     iter $P87, $P88
     new $P113, 'ExceptionHandler'
     set_addr $P113, loop112_handler
@@ -8673,7 +9557,7 @@
     unless $P87, loop112_done
     shift $P90, $P87
   loop112_redo:
-    .const 'Sub' $P92 = "16_1280467473.99327" 
+    .const 'Sub' $P92 = "16_1282323999.42098" 
     capture_lex $P92
     $P92($P90)
   loop112_next:
@@ -8686,16 +9570,16 @@
     eq $P114, .CONTROL_LOOP_REDO, loop112_redo
   loop112_done:
     pop_eh 
-  for_undef_131:
-.annotate 'line', 522
+  for_undef_133:
+.annotate 'line', 536
     find_lex $P117, "%x"
-    unless_null $P117, vivify_137
+    unless_null $P117, vivify_139
     $P117 = root_new ['parrot';'Hash']
-  vivify_137:
+  vivify_139:
     set $P118, $P117[""]
-    unless_null $P118, vivify_138
+    unless_null $P118, vivify_140
     new $P118, "Undef"
-  vivify_138:
+  vivify_140:
     set $N119, $P118
     find_lex $P120, "$max"
     set $N121, $P120
@@ -8706,36 +9590,36 @@
     goto if_116_end
   if_116:
     find_lex $P123, "%x"
-    unless_null $P123, vivify_139
+    unless_null $P123, vivify_141
     $P123 = root_new ['parrot';'Hash']
-  vivify_139:
+  vivify_141:
     set $P124, $P123[""]
-    unless_null $P124, vivify_140
+    unless_null $P124, vivify_142
     new $P124, "Undef"
-  vivify_140:
+  vivify_142:
     store_lex "$max", $P124
     set $P115, $P124
   if_116_end:
-.annotate 'line', 515
+.annotate 'line', 529
     .return ($P115)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block91"  :anon :subid("16_1280467473.99327") :outer("15_1280467473.99327")
+.sub "_block91"  :anon :subid("16_1282323999.42098") :outer("15_1282323999.42098")
     .param pmc param_93
-.annotate 'line', 517
+.annotate 'line', 531
     .lex "$_", param_93
-.annotate 'line', 518
+.annotate 'line', 532
     find_lex $P98, "$_"
     find_lex $P99, "%capnames"
-    unless_null $P99, vivify_132
+    unless_null $P99, vivify_134
     $P99 = root_new ['parrot';'Hash']
-  vivify_132:
+  vivify_134:
     set $P100, $P99[$P98]
-    unless_null $P100, vivify_133
+    unless_null $P100, vivify_135
     new $P100, "Undef"
-  vivify_133:
+  vivify_135:
     set $N101, $P100
     islt $I102, $N101, 2.0
     if $I102, if_97
@@ -8745,13 +9629,13 @@
   if_97:
     find_lex $P103, "$_"
     find_lex $P104, "%x"
-    unless_null $P104, vivify_134
+    unless_null $P104, vivify_136
     $P104 = root_new ['parrot';'Hash']
-  vivify_134:
+  vivify_136:
     set $P105, $P104[$P103]
-    unless_null $P105, vivify_135
+    unless_null $P105, vivify_137
     new $P105, "Undef"
-  vivify_135:
+  vivify_137:
     set $N106, $P105
     iseq $I107, $N106, 1.0
     new $P96, 'Integer'
@@ -8767,37 +9651,37 @@
     assign $P108, 1
     set $P94, $P108
   if_95_end:
-.annotate 'line', 519
+.annotate 'line', 533
     find_lex $P110, "$_"
     find_lex $P111, "%capnames"
-    unless_null $P111, vivify_136
+    unless_null $P111, vivify_138
     $P111 = root_new ['parrot';'Hash']
     store_lex "%capnames", $P111
-  vivify_136:
+  vivify_138:
     set $P111[$P110], $P94
-.annotate 'line', 517
+.annotate 'line', 531
     .return ($P94)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backmod"  :subid("26_1280467473.99327") :outer("11_1280467473.99327")
+.sub "backmod"  :subid("26_1282323999.42098") :outer("11_1282323999.42098")
     .param pmc param_315
     .param pmc param_316
-.annotate 'line', 576
+.annotate 'line', 590
     new $P314, 'ExceptionHandler'
     set_addr $P314, control_313
     $P314."handle_types"(.CONTROL_RETURN)
     push_eh $P314
     .lex "$ast", param_315
     .lex "$backmod", param_316
-.annotate 'line', 577
+.annotate 'line', 591
     find_lex $P318, "$backmod"
     set $S319, $P318
     iseq $I320, $S319, ":"
     if $I320, if_317
-.annotate 'line', 578
+.annotate 'line', 592
     find_lex $P325, "$backmod"
     set $S326, $P325
     iseq $I327, $S326, ":?"
@@ -8813,7 +9697,7 @@
     set $P323, $I330
   unless_324_end:
     if $P323, if_322
-.annotate 'line', 579
+.annotate 'line', 593
     find_lex $P335, "$backmod"
     set $S336, $P335
     iseq $I337, $S336, ":!"
@@ -8834,18 +9718,18 @@
   if_332_end:
     goto if_322_end
   if_322:
-.annotate 'line', 578
+.annotate 'line', 592
     find_lex $P331, "$ast"
     $P331."backtrack"("f")
   if_322_end:
     goto if_317_end
   if_317:
-.annotate 'line', 577
+.annotate 'line', 591
     find_lex $P321, "$ast"
     $P321."backtrack"("r")
   if_317_end:
     find_lex $P342, "$ast"
-.annotate 'line', 576
+.annotate 'line', 590
     .return ($P342)
   control_313:
     .local pmc exception 
@@ -8857,7 +9741,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "arg"  :subid("27_1280467473.99327") :method :outer("11_1280467473.99327")
+.sub "arg"  :subid("27_1282323999.42098") :method :outer("11_1282323999.42098")
     .param pmc param_349
 .annotate 'line', 14
     new $P348, 'ExceptionHandler'
@@ -8869,35 +9753,35 @@
 .annotate 'line', 15
     find_lex $P350, "$/"
     find_lex $P353, "$/"
-    unless_null $P353, vivify_142
+    unless_null $P353, vivify_144
     $P353 = root_new ['parrot';'Hash']
-  vivify_142:
+  vivify_144:
     set $P354, $P353["quote_EXPR"]
-    unless_null $P354, vivify_143
+    unless_null $P354, vivify_145
     new $P354, "Undef"
-  vivify_143:
+  vivify_145:
     if $P354, if_352
     find_lex $P358, "$/"
-    unless_null $P358, vivify_144
+    unless_null $P358, vivify_146
     $P358 = root_new ['parrot';'Hash']
-  vivify_144:
+  vivify_146:
     set $P359, $P358["val"]
-    unless_null $P359, vivify_145
+    unless_null $P359, vivify_147
     new $P359, "Undef"
-  vivify_145:
+  vivify_147:
     set $N360, $P359
     new $P351, 'Float'
     set $P351, $N360
     goto if_352_end
   if_352:
     find_lex $P355, "$/"
-    unless_null $P355, vivify_146
+    unless_null $P355, vivify_148
     $P355 = root_new ['parrot';'Hash']
-  vivify_146:
+  vivify_148:
     set $P356, $P355["quote_EXPR"]
-    unless_null $P356, vivify_147
+    unless_null $P356, vivify_149
     new $P356, "Undef"
-  vivify_147:
+  vivify_149:
     $P357 = $P356."ast"()
     set $P351, $P357
   if_352_end:
@@ -8914,10 +9798,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "arglist"  :subid("28_1280467473.99327") :method :outer("11_1280467473.99327")
+.sub "arglist"  :subid("28_1282323999.42098") :method :outer("11_1282323999.42098")
     .param pmc param_366
 .annotate 'line', 18
-    .const 'Sub' $P376 = "29_1280467473.99327" 
+    .const 'Sub' $P376 = "29_1282323999.42098" 
     capture_lex $P376
     new $P365, 'ExceptionHandler'
     set_addr $P365, control_364
@@ -8933,15 +9817,15 @@
     store_lex "$past", $P369
 .annotate 'line', 20
     find_lex $P371, "$/"
-    unless_null $P371, vivify_148
+    unless_null $P371, vivify_150
     $P371 = root_new ['parrot';'Hash']
-  vivify_148:
+  vivify_150:
     set $P372, $P371["arg"]
-    unless_null $P372, vivify_149
+    unless_null $P372, vivify_151
     new $P372, "Undef"
-  vivify_149:
+  vivify_151:
     defined $I373, $P372
-    unless $I373, for_undef_150
+    unless $I373, for_undef_152
     iter $P370, $P372
     new $P383, 'ExceptionHandler'
     set_addr $P383, loop382_handler
@@ -8951,7 +9835,7 @@
     unless $P370, loop382_done
     shift $P374, $P370
   loop382_redo:
-    .const 'Sub' $P376 = "29_1280467473.99327" 
+    .const 'Sub' $P376 = "29_1282323999.42098" 
     capture_lex $P376
     $P376($P374)
   loop382_next:
@@ -8964,7 +9848,7 @@
     eq $P384, .CONTROL_LOOP_REDO, loop382_redo
   loop382_done:
     pop_eh 
-  for_undef_150:
+  for_undef_152:
 .annotate 'line', 21
     find_lex $P385, "$/"
     find_lex $P386, "$past"
@@ -8980,7 +9864,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block375"  :anon :subid("29_1280467473.99327") :outer("28_1280467473.99327")
+.sub "_block375"  :anon :subid("29_1282323999.42098") :outer("28_1282323999.42098")
     .param pmc param_377
 .annotate 'line', 20
     .lex "$_", param_377
@@ -8994,7 +9878,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "TOP"  :subid("30_1280467473.99327") :method :outer("11_1280467473.99327")
+.sub "TOP"  :subid("30_1282323999.42098") :method :outer("11_1282323999.42098")
     .param pmc param_392
 .annotate 'line', 24
     new $P391, 'ExceptionHandler'
@@ -9007,13 +9891,13 @@
     new $P393, "Undef"
     .lex "$past", $P393
     find_lex $P394, "$/"
-    unless_null $P394, vivify_151
+    unless_null $P394, vivify_153
     $P394 = root_new ['parrot';'Hash']
-  vivify_151:
+  vivify_153:
     set $P395, $P394["nibbler"]
-    unless_null $P395, vivify_152
+    unless_null $P395, vivify_154
     new $P395, "Undef"
-  vivify_152:
+  vivify_154:
     $P396 = $P395."ast"()
     $P397 = "buildsub"($P396)
     store_lex "$past", $P397
@@ -9037,14 +9921,14 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "nibbler"  :subid("31_1280467473.99327") :method :outer("11_1280467473.99327")
+.sub "nibbler"  :subid("31_1282323999.42098") :method :outer("11_1282323999.42098")
     .param pmc param_407
     .param pmc param_408 :optional
     .param int has_param_408 :opt_flag
 .annotate 'line', 30
-    .const 'Sub' $P443 = "33_1280467473.99327" 
+    .const 'Sub' $P443 = "33_1282323999.42098" 
     capture_lex $P443
-    .const 'Sub' $P416 = "32_1280467473.99327" 
+    .const 'Sub' $P416 = "32_1282323999.42098" 
     capture_lex $P416
     new $P406, 'ExceptionHandler'
     set_addr $P406, control_405
@@ -9052,10 +9936,10 @@
     push_eh $P406
     .lex "self", self
     .lex "$/", param_407
-    if has_param_408, optparam_153
+    if has_param_408, optparam_155
     new $P409, "Undef"
     set param_408, $P409
-  optparam_153:
+  optparam_155:
     .lex "$key", param_408
 .annotate 'line', 39
     new $P410, "Undef"
@@ -9065,7 +9949,7 @@
     set $S413, $P412
     iseq $I414, $S413, "open"
     unless $I414, if_411_end
-    .const 'Sub' $P416 = "32_1280467473.99327" 
+    .const 'Sub' $P416 = "32_1282323999.42098" 
     capture_lex $P416
     $P416()
   if_411_end:
@@ -9075,29 +9959,29 @@
     find_lex $P428, "$past"
 .annotate 'line', 40
     find_lex $P430, "$/"
-    unless_null $P430, vivify_156
+    unless_null $P430, vivify_158
     $P430 = root_new ['parrot';'Hash']
-  vivify_156:
-    set $P431, $P430["termish"]
-    unless_null $P431, vivify_157
+  vivify_158:
+    set $P431, $P430["termconj"]
+    unless_null $P431, vivify_159
     new $P431, "Undef"
-  vivify_157:
+  vivify_159:
     set $N432, $P431
     isgt $I433, $N432, 1.0
     if $I433, if_429
 .annotate 'line', 47
     find_lex $P452, "$/"
-    unless_null $P452, vivify_158
+    unless_null $P452, vivify_160
     $P452 = root_new ['parrot';'Hash']
-  vivify_158:
-    set $P453, $P452["termish"]
-    unless_null $P453, vivify_159
+  vivify_160:
+    set $P453, $P452["termconj"]
+    unless_null $P453, vivify_161
     $P453 = root_new ['parrot';'ResizablePMCArray']
-  vivify_159:
+  vivify_161:
     set $P454, $P453[0]
-    unless_null $P454, vivify_160
+    unless_null $P454, vivify_162
     new $P454, "Undef"
-  vivify_160:
+  vivify_162:
     $P455 = $P454."ast"()
     store_lex "$past", $P455
 .annotate 'line', 46
@@ -9110,15 +9994,15 @@
     store_lex "$past", $P436
 .annotate 'line', 42
     find_lex $P438, "$/"
-    unless_null $P438, vivify_161
+    unless_null $P438, vivify_163
     $P438 = root_new ['parrot';'Hash']
-  vivify_161:
-    set $P439, $P438["termish"]
-    unless_null $P439, vivify_162
+  vivify_163:
+    set $P439, $P438["termconj"]
+    unless_null $P439, vivify_164
     new $P439, "Undef"
-  vivify_162:
+  vivify_164:
     defined $I440, $P439
-    unless $I440, for_undef_163
+    unless $I440, for_undef_165
     iter $P437, $P439
     new $P450, 'ExceptionHandler'
     set_addr $P450, loop449_handler
@@ -9128,7 +10012,7 @@
     unless $P437, loop449_done
     shift $P441, $P437
   loop449_redo:
-    .const 'Sub' $P443 = "33_1280467473.99327" 
+    .const 'Sub' $P443 = "33_1282323999.42098" 
     capture_lex $P443
     $P443($P441)
   loop449_next:
@@ -9141,7 +10025,7 @@
     eq $P451, .CONTROL_LOOP_REDO, loop449_redo
   loop449_done:
     pop_eh 
-  for_undef_163:
+  for_undef_165:
   if_429_end:
 .annotate 'line', 49
     find_lex $P456, "$/"
@@ -9159,7 +10043,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block415"  :anon :subid("32_1280467473.99327") :outer("31_1280467473.99327")
+.sub "_block415"  :anon :subid("32_1282323999.42098") :outer("31_1282323999.42098")
 .annotate 'line', 32
     $P417 = root_new ['parrot';'Hash']
     .lex "%old", $P417
@@ -9168,13 +10052,13 @@
     .lex "%new", $P418
 .annotate 'line', 32
     get_global $P419, "@MODIFIERS"
-    unless_null $P419, vivify_154
+    unless_null $P419, vivify_156
     $P419 = root_new ['parrot';'ResizablePMCArray']
-  vivify_154:
+  vivify_156:
     set $P420, $P419[0]
-    unless_null $P420, vivify_155
+    unless_null $P420, vivify_157
     new $P420, "Undef"
-  vivify_155:
+  vivify_157:
     store_lex "%old", $P420
 .annotate 'line', 33
     find_lex $P421, "%old"
@@ -9197,7 +10081,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block442"  :anon :subid("33_1280467473.99327") :outer("31_1280467473.99327")
+.sub "_block442"  :anon :subid("33_1282323999.42098") :outer("31_1282323999.42098")
     .param pmc param_444
 .annotate 'line', 42
     .lex "$_", param_444
@@ -9213,11 +10097,11 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "termish"  :subid("34_1280467473.99327") :method :outer("11_1280467473.99327")
+.sub "termconj"  :subid("34_1282323999.42098") :method :outer("11_1282323999.42098")
     .param pmc param_463
 .annotate 'line', 52
-    .const 'Sub' $P476 = "35_1280467473.99327" 
-    capture_lex $P476
+    .const 'Sub' $P480 = "35_1282323999.42098" 
+    capture_lex $P480
     new $P462, 'ExceptionHandler'
     set_addr $P462, control_461
     $P462."handle_types"(.CONTROL_RETURN)
@@ -9227,2724 +10111,2841 @@
 .annotate 'line', 53
     new $P464, "Undef"
     .lex "$past", $P464
+.annotate 'line', 52
+    find_lex $P465, "$past"
 .annotate 'line', 54
-    new $P465, "Undef"
-    .lex "$lastlit", $P465
-.annotate 'line', 53
-    get_hll_global $P466, ["PAST"], "Regex"
     find_lex $P467, "$/"
-    $P468 = $P466."new"("concat" :named("pasttype"), $P467 :named("node"))
-    store_lex "$past", $P468
-.annotate 'line', 54
-    new $P469, "Integer"
-    assign $P469, 0
-    store_lex "$lastlit", $P469
+    unless_null $P467, vivify_166
+    $P467 = root_new ['parrot';'Hash']
+  vivify_166:
+    set $P468, $P467["termish"]
+    unless_null $P468, vivify_167
+    new $P468, "Undef"
+  vivify_167:
+    set $N469, $P468
+    isgt $I470, $N469, 1.0
+    if $I470, if_466
+.annotate 'line', 61
+    find_lex $P489, "$/"
+    unless_null $P489, vivify_168
+    $P489 = root_new ['parrot';'Hash']
+  vivify_168:
+    set $P490, $P489["termish"]
+    unless_null $P490, vivify_169
+    $P490 = root_new ['parrot';'ResizablePMCArray']
+  vivify_169:
+    set $P491, $P490[0]
+    unless_null $P491, vivify_170
+    new $P491, "Undef"
+  vivify_170:
+    $P492 = $P491."ast"()
+    store_lex "$past", $P492
+.annotate 'line', 60
+    goto if_466_end
+  if_466:
 .annotate 'line', 55
-    find_lex $P471, "$/"
-    unless_null $P471, vivify_164
-    $P471 = root_new ['parrot';'Hash']
-  vivify_164:
-    set $P472, $P471["noun"]
-    unless_null $P472, vivify_165
-    new $P472, "Undef"
-  vivify_165:
-    defined $I473, $P472
-    unless $I473, for_undef_166
-    iter $P470, $P472
-    new $P522, 'ExceptionHandler'
-    set_addr $P522, loop521_handler
-    $P522."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P522
-  loop521_test:
-    unless $P470, loop521_done
-    shift $P474, $P470
-  loop521_redo:
-    .const 'Sub' $P476 = "35_1280467473.99327" 
-    capture_lex $P476
-    $P476($P474)
-  loop521_next:
-    goto loop521_test
-  loop521_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P523, exception, 'type'
-    eq $P523, .CONTROL_LOOP_NEXT, loop521_next
-    eq $P523, .CONTROL_LOOP_REDO, loop521_redo
-  loop521_done:
+    get_hll_global $P471, ["PAST"], "Regex"
+    find_lex $P472, "$/"
+    $P473 = $P471."new"("conj" :named("pasttype"), $P472 :named("node"))
+    store_lex "$past", $P473
+.annotate 'line', 56
+    find_lex $P475, "$/"
+    unless_null $P475, vivify_171
+    $P475 = root_new ['parrot';'Hash']
+  vivify_171:
+    set $P476, $P475["termish"]
+    unless_null $P476, vivify_172
+    new $P476, "Undef"
+  vivify_172:
+    defined $I477, $P476
+    unless $I477, for_undef_173
+    iter $P474, $P476
+    new $P487, 'ExceptionHandler'
+    set_addr $P487, loop486_handler
+    $P487."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P487
+  loop486_test:
+    unless $P474, loop486_done
+    shift $P478, $P474
+  loop486_redo:
+    .const 'Sub' $P480 = "35_1282323999.42098" 
+    capture_lex $P480
+    $P480($P478)
+  loop486_next:
+    goto loop486_test
+  loop486_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P488, exception, 'type'
+    eq $P488, .CONTROL_LOOP_NEXT, loop486_next
+    eq $P488, .CONTROL_LOOP_REDO, loop486_redo
+  loop486_done:
     pop_eh 
-  for_undef_166:
-.annotate 'line', 70
-    find_lex $P524, "$/"
-    find_lex $P525, "$past"
-    $P526 = $P524."!make"($P525)
+  for_undef_173:
+  if_466_end:
+.annotate 'line', 63
+    find_lex $P493, "$/"
+    find_lex $P494, "$past"
+    $P495 = $P493."!make"($P494)
 .annotate 'line', 52
-    .return ($P526)
+    .return ($P495)
   control_461:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P527, exception, "payload"
-    .return ($P527)
+    getattribute $P496, exception, "payload"
+    .return ($P496)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block475"  :anon :subid("35_1280467473.99327") :outer("34_1280467473.99327")
-    .param pmc param_478
+.sub "_block479"  :anon :subid("35_1282323999.42098") :outer("34_1282323999.42098")
+    .param pmc param_481
 .annotate 'line', 56
-    new $P477, "Undef"
-    .lex "$ast", $P477
-    .lex "$_", param_478
-    find_lex $P479, "$_"
-    $P480 = $P479."ast"()
-    store_lex "$ast", $P480
+    .lex "$_", param_481
 .annotate 'line', 57
-    find_lex $P483, "$ast"
-    if $P483, if_482
-    set $P481, $P483
-    goto if_482_end
-  if_482:
-.annotate 'line', 58
-    find_lex $P490, "$lastlit"
-    if $P490, if_489
-    set $P488, $P490
-    goto if_489_end
-  if_489:
-    find_lex $P491, "$ast"
-    $S492 = $P491."pasttype"()
-    iseq $I493, $S492, "literal"
-    new $P488, 'Integer'
-    set $P488, $I493
-  if_489_end:
-    if $P488, if_487
-    set $P486, $P488
-    goto if_487_end
-  if_487:
-.annotate 'line', 59
-    get_hll_global $P494, ["PAST"], "Node"
-    find_lex $P495, "$ast"
-    unless_null $P495, vivify_167
-    $P495 = root_new ['parrot';'ResizablePMCArray']
-  vivify_167:
-    set $P496, $P495[0]
-    unless_null $P496, vivify_168
-    new $P496, "Undef"
-  vivify_168:
-    $P497 = $P494."ACCEPTS"($P496)
-    isfalse $I498, $P497
-    new $P486, 'Integer'
-    set $P486, $I498
-  if_487_end:
-    if $P486, if_485
-.annotate 'line', 63
-    find_lex $P505, "$past"
-    find_lex $P506, "$ast"
-    $P505."push"($P506)
-.annotate 'line', 64
-    find_lex $P511, "$ast"
-    $S512 = $P511."pasttype"()
-    iseq $I513, $S512, "literal"
-    if $I513, if_510
-    new $P509, 'Integer'
-    set $P509, $I513
-    goto if_510_end
-  if_510:
-.annotate 'line', 65
-    get_hll_global $P514, ["PAST"], "Node"
-    find_lex $P515, "$ast"
-    unless_null $P515, vivify_169
-    $P515 = root_new ['parrot';'ResizablePMCArray']
-  vivify_169:
-    set $P516, $P515[0]
-    unless_null $P516, vivify_170
-    new $P516, "Undef"
-  vivify_170:
-    $P517 = $P514."ACCEPTS"($P516)
-    isfalse $I518, $P517
-    new $P509, 'Integer'
-    set $P509, $I518
-  if_510_end:
-    if $P509, if_508
-    new $P520, "Integer"
-    assign $P520, 0
-    set $P507, $P520
-    goto if_508_end
-  if_508:
-    find_lex $P519, "$ast"
-    set $P507, $P519
-  if_508_end:
+    find_lex $P482, "$past"
+    find_lex $P483, "$_"
+    $P484 = $P483."ast"()
+    $P485 = $P482."push"($P484)
+.annotate 'line', 56
+    .return ($P485)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "termish"  :subid("36_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_500
 .annotate 'line', 66
-    store_lex "$lastlit", $P507
-.annotate 'line', 62
-    set $P484, $P507
-.annotate 'line', 59
-    goto if_485_end
-  if_485:
-.annotate 'line', 60
-    find_lex $P499, "$lastlit"
-    unless_null $P499, vivify_171
-    $P499 = root_new ['parrot';'ResizablePMCArray']
-  vivify_171:
-    set $P500, $P499[0]
-    unless_null $P500, vivify_172
-    new $P500, "Undef"
-  vivify_172:
-    find_lex $P501, "$ast"
-    unless_null $P501, vivify_173
-    $P501 = root_new ['parrot';'ResizablePMCArray']
-  vivify_173:
-    set $P502, $P501[0]
-    unless_null $P502, vivify_174
+    .const 'Sub' $P513 = "37_1282323999.42098" 
+    capture_lex $P513
+    new $P499, 'ExceptionHandler'
+    set_addr $P499, control_498
+    $P499."handle_types"(.CONTROL_RETURN)
+    push_eh $P499
+    .lex "self", self
+    .lex "$/", param_500
+.annotate 'line', 67
+    new $P501, "Undef"
+    .lex "$past", $P501
+.annotate 'line', 68
     new $P502, "Undef"
+    .lex "$lastlit", $P502
+.annotate 'line', 67
+    get_hll_global $P503, ["PAST"], "Regex"
+    find_lex $P504, "$/"
+    $P505 = $P503."new"("concat" :named("pasttype"), $P504 :named("node"))
+    store_lex "$past", $P505
+.annotate 'line', 68
+    new $P506, "Integer"
+    assign $P506, 0
+    store_lex "$lastlit", $P506
+.annotate 'line', 69
+    find_lex $P508, "$/"
+    unless_null $P508, vivify_174
+    $P508 = root_new ['parrot';'Hash']
   vivify_174:
-    concat $P503, $P500, $P502
-    find_lex $P504, "$lastlit"
-    unless_null $P504, vivify_175
-    $P504 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$lastlit", $P504
+    set $P509, $P508["noun"]
+    unless_null $P509, vivify_175
+    new $P509, "Undef"
   vivify_175:
-    set $P504[0], $P503
-.annotate 'line', 59
-    set $P484, $P503
-  if_485_end:
-.annotate 'line', 57
-    set $P481, $P484
-  if_482_end:
-.annotate 'line', 55
-    .return ($P481)
+    defined $I510, $P509
+    unless $I510, for_undef_176
+    iter $P507, $P509
+    new $P559, 'ExceptionHandler'
+    set_addr $P559, loop558_handler
+    $P559."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P559
+  loop558_test:
+    unless $P507, loop558_done
+    shift $P511, $P507
+  loop558_redo:
+    .const 'Sub' $P513 = "37_1282323999.42098" 
+    capture_lex $P513
+    $P513($P511)
+  loop558_next:
+    goto loop558_test
+  loop558_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P560, exception, 'type'
+    eq $P560, .CONTROL_LOOP_NEXT, loop558_next
+    eq $P560, .CONTROL_LOOP_REDO, loop558_redo
+  loop558_done:
+    pop_eh 
+  for_undef_176:
+.annotate 'line', 84
+    find_lex $P561, "$/"
+    find_lex $P562, "$past"
+    $P563 = $P561."!make"($P562)
+.annotate 'line', 66
+    .return ($P563)
+  control_498:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P564, exception, "payload"
+    .return ($P564)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.include "except_types.pasm"
-.sub "quantified_atom"  :subid("36_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_531
+.sub "_block512"  :anon :subid("37_1282323999.42098") :outer("36_1282323999.42098")
+    .param pmc param_515
+.annotate 'line', 70
+    new $P514, "Undef"
+    .lex "$ast", $P514
+    .lex "$_", param_515
+    find_lex $P516, "$_"
+    $P517 = $P516."ast"()
+    store_lex "$ast", $P517
+.annotate 'line', 71
+    find_lex $P520, "$ast"
+    if $P520, if_519
+    set $P518, $P520
+    goto if_519_end
+  if_519:
+.annotate 'line', 72
+    find_lex $P527, "$lastlit"
+    if $P527, if_526
+    set $P525, $P527
+    goto if_526_end
+  if_526:
+    find_lex $P528, "$ast"
+    $S529 = $P528."pasttype"()
+    iseq $I530, $S529, "literal"
+    new $P525, 'Integer'
+    set $P525, $I530
+  if_526_end:
+    if $P525, if_524
+    set $P523, $P525
+    goto if_524_end
+  if_524:
 .annotate 'line', 73
-    .const 'Sub' $P540 = "37_1280467473.99327" 
-    capture_lex $P540
-    new $P530, 'ExceptionHandler'
-    set_addr $P530, control_529
-    $P530."handle_types"(.CONTROL_RETURN)
-    push_eh $P530
-    .lex "self", self
-    .lex "$/", param_531
-.annotate 'line', 74
-    new $P532, "Undef"
-    .lex "$past", $P532
-    find_lex $P533, "$/"
-    unless_null $P533, vivify_176
-    $P533 = root_new ['parrot';'Hash']
-  vivify_176:
-    set $P534, $P533["atom"]
-    unless_null $P534, vivify_177
-    new $P534, "Undef"
+    get_hll_global $P531, ["PAST"], "Node"
+    find_lex $P532, "$ast"
+    unless_null $P532, vivify_177
+    $P532 = root_new ['parrot';'ResizablePMCArray']
   vivify_177:
-    $P535 = $P534."ast"()
-    store_lex "$past", $P535
-.annotate 'line', 75
-    find_lex $P537, "$/"
-    unless_null $P537, vivify_178
-    $P537 = root_new ['parrot';'Hash']
+    set $P533, $P532[0]
+    unless_null $P533, vivify_178
+    new $P533, "Undef"
   vivify_178:
-    set $P538, $P537["quantifier"]
-    unless_null $P538, vivify_179
-    new $P538, "Undef"
+    $P534 = $P531."ACCEPTS"($P533)
+    isfalse $I535, $P534
+    new $P523, 'Integer'
+    set $P523, $I535
+  if_524_end:
+    if $P523, if_522
+.annotate 'line', 77
+    find_lex $P542, "$past"
+    find_lex $P543, "$ast"
+    $P542."push"($P543)
+.annotate 'line', 78
+    find_lex $P548, "$ast"
+    $S549 = $P548."pasttype"()
+    iseq $I550, $S549, "literal"
+    if $I550, if_547
+    new $P546, 'Integer'
+    set $P546, $I550
+    goto if_547_end
+  if_547:
+.annotate 'line', 79
+    get_hll_global $P551, ["PAST"], "Node"
+    find_lex $P552, "$ast"
+    unless_null $P552, vivify_179
+    $P552 = root_new ['parrot';'ResizablePMCArray']
   vivify_179:
-    if $P538, if_536
-.annotate 'line', 81
-    find_lex $P555, "$/"
-    unless_null $P555, vivify_180
-    $P555 = root_new ['parrot';'Hash']
+    set $P553, $P552[0]
+    unless_null $P553, vivify_180
+    new $P553, "Undef"
   vivify_180:
-    set $P556, $P555["backmod"]
-    unless_null $P556, vivify_181
-    $P556 = root_new ['parrot';'ResizablePMCArray']
+    $P554 = $P551."ACCEPTS"($P553)
+    isfalse $I555, $P554
+    new $P546, 'Integer'
+    set $P546, $I555
+  if_547_end:
+    if $P546, if_545
+    new $P557, "Integer"
+    assign $P557, 0
+    set $P544, $P557
+    goto if_545_end
+  if_545:
+    find_lex $P556, "$ast"
+    set $P544, $P556
+  if_545_end:
+.annotate 'line', 80
+    store_lex "$lastlit", $P544
+.annotate 'line', 76
+    set $P521, $P544
+.annotate 'line', 73
+    goto if_522_end
+  if_522:
+.annotate 'line', 74
+    find_lex $P536, "$lastlit"
+    unless_null $P536, vivify_181
+    $P536 = root_new ['parrot';'ResizablePMCArray']
   vivify_181:
-    set $P557, $P556[0]
-    unless_null $P557, vivify_182
-    new $P557, "Undef"
+    set $P537, $P536[0]
+    unless_null $P537, vivify_182
+    new $P537, "Undef"
   vivify_182:
-    unless $P557, if_554_end
-    find_lex $P558, "$past"
-    find_lex $P559, "$/"
-    unless_null $P559, vivify_183
-    $P559 = root_new ['parrot';'Hash']
+    find_lex $P538, "$ast"
+    unless_null $P538, vivify_183
+    $P538 = root_new ['parrot';'ResizablePMCArray']
   vivify_183:
-    set $P560, $P559["backmod"]
-    unless_null $P560, vivify_184
-    $P560 = root_new ['parrot';'ResizablePMCArray']
+    set $P539, $P538[0]
+    unless_null $P539, vivify_184
+    new $P539, "Undef"
   vivify_184:
-    set $P561, $P560[0]
-    unless_null $P561, vivify_185
-    new $P561, "Undef"
+    concat $P540, $P537, $P539
+    find_lex $P541, "$lastlit"
+    unless_null $P541, vivify_185
+    $P541 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$lastlit", $P541
   vivify_185:
-    "backmod"($P558, $P561)
-  if_554_end:
-    goto if_536_end
-  if_536:
-.annotate 'line', 75
-    .const 'Sub' $P540 = "37_1280467473.99327" 
-    capture_lex $P540
-    $P540()
-  if_536_end:
-.annotate 'line', 82
-    find_lex $P567, "$past"
-    if $P567, if_566
-    set $P565, $P567
-    goto if_566_end
-  if_566:
-    find_lex $P568, "$past"
-    $P569 = $P568."backtrack"()
-    isfalse $I570, $P569
-    new $P565, 'Integer'
-    set $P565, $I570
-  if_566_end:
-    if $P565, if_564
-    set $P563, $P565
-    goto if_564_end
-  if_564:
-    get_global $P571, "@MODIFIERS"
-    unless_null $P571, vivify_189
-    $P571 = root_new ['parrot';'ResizablePMCArray']
-  vivify_189:
-    set $P572, $P571[0]
-    unless_null $P572, vivify_190
-    $P572 = root_new ['parrot';'Hash']
-  vivify_190:
-    set $P573, $P572["r"]
-    unless_null $P573, vivify_191
-    new $P573, "Undef"
-  vivify_191:
-    set $P563, $P573
-  if_564_end:
-    unless $P563, if_562_end
-.annotate 'line', 83
-    find_lex $P574, "$past"
-    $P574."backtrack"("r")
-  if_562_end:
-.annotate 'line', 85
-    find_lex $P575, "$/"
-    find_lex $P576, "$past"
-    $P577 = $P575."!make"($P576)
+    set $P541[0], $P540
 .annotate 'line', 73
-    .return ($P577)
-  control_529:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P578, exception, "payload"
-    .return ($P578)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block539"  :anon :subid("37_1280467473.99327") :outer("36_1280467473.99327")
-.annotate 'line', 77
-    new $P541, "Undef"
-    .lex "$qast", $P541
-.annotate 'line', 76
-    find_lex $P543, "$past"
-    isfalse $I544, $P543
-    unless $I544, if_542_end
-    find_lex $P545, "$/"
-    $P546 = $P545."CURSOR"()
-    $P546."panic"("Quantifier follows nothing")
-  if_542_end:
-.annotate 'line', 77
-    find_lex $P547, "$/"
-    unless_null $P547, vivify_186
-    $P547 = root_new ['parrot';'Hash']
-  vivify_186:
-    set $P548, $P547["quantifier"]
-    unless_null $P548, vivify_187
-    $P548 = root_new ['parrot';'ResizablePMCArray']
-  vivify_187:
-    set $P549, $P548[0]
-    unless_null $P549, vivify_188
-    new $P549, "Undef"
-  vivify_188:
-    $P550 = $P549."ast"()
-    store_lex "$qast", $P550
-.annotate 'line', 78
-    find_lex $P551, "$qast"
-    find_lex $P552, "$past"
-    $P551."unshift"($P552)
-.annotate 'line', 79
-    find_lex $P553, "$qast"
-    store_lex "$past", $P553
-.annotate 'line', 75
-    .return ($P553)
+    set $P521, $P540
+  if_522_end:
+.annotate 'line', 71
+    set $P518, $P521
+  if_519_end:
+.annotate 'line', 69
+    .return ($P518)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "atom"  :subid("38_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_582
-.annotate 'line', 88
-    new $P581, 'ExceptionHandler'
-    set_addr $P581, control_580
-    $P581."handle_types"(.CONTROL_RETURN)
-    push_eh $P581
+.sub "quantified_atom"  :subid("38_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_568
+.annotate 'line', 87
+    .const 'Sub' $P577 = "39_1282323999.42098" 
+    capture_lex $P577
+    new $P567, 'ExceptionHandler'
+    set_addr $P567, control_566
+    $P567."handle_types"(.CONTROL_RETURN)
+    push_eh $P567
     .lex "self", self
-    .lex "$/", param_582
-.annotate 'line', 89
-    new $P583, "Undef"
-    .lex "$past", $P583
+    .lex "$/", param_568
 .annotate 'line', 88
-    find_lex $P584, "$past"
-.annotate 'line', 90
-    find_lex $P586, "$/"
-    unless_null $P586, vivify_192
-    $P586 = root_new ['parrot';'Hash']
+    new $P569, "Undef"
+    .lex "$past", $P569
+    find_lex $P570, "$/"
+    unless_null $P570, vivify_186
+    $P570 = root_new ['parrot';'Hash']
+  vivify_186:
+    set $P571, $P570["atom"]
+    unless_null $P571, vivify_187
+    new $P571, "Undef"
+  vivify_187:
+    $P572 = $P571."ast"()
+    store_lex "$past", $P572
+.annotate 'line', 89
+    find_lex $P574, "$/"
+    unless_null $P574, vivify_188
+    $P574 = root_new ['parrot';'Hash']
+  vivify_188:
+    set $P575, $P574["quantifier"]
+    unless_null $P575, vivify_189
+    new $P575, "Undef"
+  vivify_189:
+    if $P575, if_573
+.annotate 'line', 95
+    find_lex $P592, "$/"
+    unless_null $P592, vivify_190
+    $P592 = root_new ['parrot';'Hash']
+  vivify_190:
+    set $P593, $P592["backmod"]
+    unless_null $P593, vivify_191
+    $P593 = root_new ['parrot';'ResizablePMCArray']
+  vivify_191:
+    set $P594, $P593[0]
+    unless_null $P594, vivify_192
+    new $P594, "Undef"
   vivify_192:
-    set $P587, $P586["metachar"]
-    unless_null $P587, vivify_193
-    new $P587, "Undef"
+    unless $P594, if_591_end
+    find_lex $P595, "$past"
+    find_lex $P596, "$/"
+    unless_null $P596, vivify_193
+    $P596 = root_new ['parrot';'Hash']
   vivify_193:
-    if $P587, if_585
-.annotate 'line', 92
-    get_hll_global $P591, ["PAST"], "Regex"
-    find_lex $P592, "$/"
-    set $S593, $P592
-    find_lex $P594, "$/"
-    $P595 = $P591."new"($S593, "literal" :named("pasttype"), $P594 :named("node"))
-    store_lex "$past", $P595
-.annotate 'line', 93
-    get_global $P597, "@MODIFIERS"
+    set $P597, $P596["backmod"]
     unless_null $P597, vivify_194
     $P597 = root_new ['parrot';'ResizablePMCArray']
   vivify_194:
     set $P598, $P597[0]
     unless_null $P598, vivify_195
-    $P598 = root_new ['parrot';'Hash']
+    new $P598, "Undef"
   vivify_195:
-    set $P599, $P598["i"]
-    unless_null $P599, vivify_196
-    new $P599, "Undef"
-  vivify_196:
-    unless $P599, if_596_end
-    find_lex $P600, "$past"
-    $P600."subtype"("ignorecase")
-  if_596_end:
-.annotate 'line', 91
-    goto if_585_end
-  if_585:
-.annotate 'line', 90
-    find_lex $P588, "$/"
-    unless_null $P588, vivify_197
-    $P588 = root_new ['parrot';'Hash']
-  vivify_197:
-    set $P589, $P588["metachar"]
-    unless_null $P589, vivify_198
-    new $P589, "Undef"
-  vivify_198:
-    $P590 = $P589."ast"()
-    store_lex "$past", $P590
-  if_585_end:
-.annotate 'line', 95
-    find_lex $P601, "$/"
-    find_lex $P602, "$past"
-    $P603 = $P601."!make"($P602)
-.annotate 'line', 88
-    .return ($P603)
-  control_580:
+    "backmod"($P595, $P598)
+  if_591_end:
+    goto if_573_end
+  if_573:
+.annotate 'line', 89
+    .const 'Sub' $P577 = "39_1282323999.42098" 
+    capture_lex $P577
+    $P577()
+  if_573_end:
+.annotate 'line', 96
+    find_lex $P604, "$past"
+    if $P604, if_603
+    set $P602, $P604
+    goto if_603_end
+  if_603:
+    find_lex $P605, "$past"
+    $P606 = $P605."backtrack"()
+    isfalse $I607, $P606
+    new $P602, 'Integer'
+    set $P602, $I607
+  if_603_end:
+    if $P602, if_601
+    set $P600, $P602
+    goto if_601_end
+  if_601:
+    get_global $P608, "@MODIFIERS"
+    unless_null $P608, vivify_199
+    $P608 = root_new ['parrot';'ResizablePMCArray']
+  vivify_199:
+    set $P609, $P608[0]
+    unless_null $P609, vivify_200
+    $P609 = root_new ['parrot';'Hash']
+  vivify_200:
+    set $P610, $P609["r"]
+    unless_null $P610, vivify_201
+    new $P610, "Undef"
+  vivify_201:
+    set $P600, $P610
+  if_601_end:
+    unless $P600, if_599_end
+.annotate 'line', 97
+    find_lex $P611, "$past"
+    $P611."backtrack"("r")
+  if_599_end:
+.annotate 'line', 99
+    find_lex $P612, "$/"
+    find_lex $P613, "$past"
+    $P614 = $P612."!make"($P613)
+.annotate 'line', 87
+    .return ($P614)
+  control_566:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P604, exception, "payload"
-    .return ($P604)
+    getattribute $P615, exception, "payload"
+    .return ($P615)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.include "except_types.pasm"
-.sub "quantifier:sym<*>"  :subid("39_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_608
-.annotate 'line', 98
-    new $P607, 'ExceptionHandler'
-    set_addr $P607, control_606
-    $P607."handle_types"(.CONTROL_RETURN)
-    push_eh $P607
-    .lex "self", self
-    .lex "$/", param_608
-.annotate 'line', 99
-    new $P609, "Undef"
-    .lex "$past", $P609
-    get_hll_global $P610, ["PAST"], "Regex"
-    find_lex $P611, "$/"
-    $P612 = $P610."new"("quant" :named("pasttype"), $P611 :named("node"))
-    store_lex "$past", $P612
-.annotate 'line', 100
-    find_lex $P613, "$/"
-    find_lex $P614, "$past"
-    find_lex $P615, "$/"
-    unless_null $P615, vivify_199
-    $P615 = root_new ['parrot';'Hash']
-  vivify_199:
-    set $P616, $P615["backmod"]
-    unless_null $P616, vivify_200
-    new $P616, "Undef"
-  vivify_200:
-    $P617 = "backmod"($P614, $P616)
-    $P618 = $P613."!make"($P617)
-.annotate 'line', 98
-    .return ($P618)
-  control_606:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P619, exception, "payload"
-    .return ($P619)
+.sub "_block576"  :anon :subid("39_1282323999.42098") :outer("38_1282323999.42098")
+.annotate 'line', 91
+    new $P578, "Undef"
+    .lex "$qast", $P578
+.annotate 'line', 90
+    find_lex $P580, "$past"
+    isfalse $I581, $P580
+    unless $I581, if_579_end
+    find_lex $P582, "$/"
+    $P583 = $P582."CURSOR"()
+    $P583."panic"("Quantifier follows nothing")
+  if_579_end:
+.annotate 'line', 91
+    find_lex $P584, "$/"
+    unless_null $P584, vivify_196
+    $P584 = root_new ['parrot';'Hash']
+  vivify_196:
+    set $P585, $P584["quantifier"]
+    unless_null $P585, vivify_197
+    $P585 = root_new ['parrot';'ResizablePMCArray']
+  vivify_197:
+    set $P586, $P585[0]
+    unless_null $P586, vivify_198
+    new $P586, "Undef"
+  vivify_198:
+    $P587 = $P586."ast"()
+    store_lex "$qast", $P587
+.annotate 'line', 92
+    find_lex $P588, "$qast"
+    find_lex $P589, "$past"
+    $P588."unshift"($P589)
+.annotate 'line', 93
+    find_lex $P590, "$qast"
+    store_lex "$past", $P590
+.annotate 'line', 89
+    .return ($P590)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "quantifier:sym<+>"  :subid("40_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_623
-.annotate 'line', 103
-    new $P622, 'ExceptionHandler'
-    set_addr $P622, control_621
-    $P622."handle_types"(.CONTROL_RETURN)
-    push_eh $P622
+.sub "atom"  :subid("40_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_619
+.annotate 'line', 102
+    new $P618, 'ExceptionHandler'
+    set_addr $P618, control_617
+    $P618."handle_types"(.CONTROL_RETURN)
+    push_eh $P618
     .lex "self", self
-    .lex "$/", param_623
+    .lex "$/", param_619
+.annotate 'line', 103
+    new $P620, "Undef"
+    .lex "$past", $P620
+.annotate 'line', 102
+    find_lex $P621, "$past"
 .annotate 'line', 104
+    find_lex $P623, "$/"
+    unless_null $P623, vivify_202
+    $P623 = root_new ['parrot';'Hash']
+  vivify_202:
+    set $P624, $P623["metachar"]
+    unless_null $P624, vivify_203
     new $P624, "Undef"
-    .lex "$past", $P624
-    get_hll_global $P625, ["PAST"], "Regex"
-    find_lex $P626, "$/"
-    $P627 = $P625."new"("quant" :named("pasttype"), 1 :named("min"), $P626 :named("node"))
-    store_lex "$past", $P627
+  vivify_203:
+    if $P624, if_622
+.annotate 'line', 106
+    get_hll_global $P628, ["PAST"], "Regex"
+    find_lex $P629, "$/"
+    set $S630, $P629
+    find_lex $P631, "$/"
+    $P632 = $P628."new"($S630, "literal" :named("pasttype"), $P631 :named("node"))
+    store_lex "$past", $P632
+.annotate 'line', 107
+    get_global $P634, "@MODIFIERS"
+    unless_null $P634, vivify_204
+    $P634 = root_new ['parrot';'ResizablePMCArray']
+  vivify_204:
+    set $P635, $P634[0]
+    unless_null $P635, vivify_205
+    $P635 = root_new ['parrot';'Hash']
+  vivify_205:
+    set $P636, $P635["i"]
+    unless_null $P636, vivify_206
+    new $P636, "Undef"
+  vivify_206:
+    unless $P636, if_633_end
+    find_lex $P637, "$past"
+    $P637."subtype"("ignorecase")
+  if_633_end:
 .annotate 'line', 105
-    find_lex $P628, "$/"
-    find_lex $P629, "$past"
-    find_lex $P630, "$/"
-    unless_null $P630, vivify_201
-    $P630 = root_new ['parrot';'Hash']
-  vivify_201:
-    set $P631, $P630["backmod"]
-    unless_null $P631, vivify_202
-    new $P631, "Undef"
-  vivify_202:
-    $P632 = "backmod"($P629, $P631)
-    $P633 = $P628."!make"($P632)
-.annotate 'line', 103
-    .return ($P633)
-  control_621:
+    goto if_622_end
+  if_622:
+.annotate 'line', 104
+    find_lex $P625, "$/"
+    unless_null $P625, vivify_207
+    $P625 = root_new ['parrot';'Hash']
+  vivify_207:
+    set $P626, $P625["metachar"]
+    unless_null $P626, vivify_208
+    new $P626, "Undef"
+  vivify_208:
+    $P627 = $P626."ast"()
+    store_lex "$past", $P627
+  if_622_end:
+.annotate 'line', 109
+    find_lex $P638, "$/"
+    find_lex $P639, "$past"
+    $P640 = $P638."!make"($P639)
+.annotate 'line', 102
+    .return ($P640)
+  control_617:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P634, exception, "payload"
-    .return ($P634)
+    getattribute $P641, exception, "payload"
+    .return ($P641)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "quantifier:sym<?>"  :subid("41_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_638
-.annotate 'line', 108
-    new $P637, 'ExceptionHandler'
-    set_addr $P637, control_636
-    $P637."handle_types"(.CONTROL_RETURN)
-    push_eh $P637
+.sub "quantifier:sym<*>"  :subid("41_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_645
+.annotate 'line', 112
+    new $P644, 'ExceptionHandler'
+    set_addr $P644, control_643
+    $P644."handle_types"(.CONTROL_RETURN)
+    push_eh $P644
     .lex "self", self
-    .lex "$/", param_638
-.annotate 'line', 109
-    new $P639, "Undef"
-    .lex "$past", $P639
-    get_hll_global $P640, ["PAST"], "Regex"
-    find_lex $P641, "$/"
-    $P642 = $P640."new"("quant" :named("pasttype"), 0 :named("min"), 1 :named("max"), $P641 :named("node"))
-    store_lex "$past", $P642
-.annotate 'line', 110
-    find_lex $P643, "$/"
-    find_lex $P644, "$past"
-    find_lex $P645, "$/"
-    unless_null $P645, vivify_203
-    $P645 = root_new ['parrot';'Hash']
-  vivify_203:
-    set $P646, $P645["backmod"]
-    unless_null $P646, vivify_204
+    .lex "$/", param_645
+.annotate 'line', 113
     new $P646, "Undef"
-  vivify_204:
-    $P647 = "backmod"($P644, $P646)
-    $P643."!make"($P647)
-.annotate 'line', 111
+    .lex "$past", $P646
+    get_hll_global $P647, ["PAST"], "Regex"
     find_lex $P648, "$/"
-    find_lex $P649, "$past"
-    $P650 = $P648."!make"($P649)
-.annotate 'line', 108
-    .return ($P650)
-  control_636:
+    $P649 = $P647."new"("quant" :named("pasttype"), $P648 :named("node"))
+    store_lex "$past", $P649
+.annotate 'line', 114
+    find_lex $P650, "$/"
+    find_lex $P651, "$past"
+    find_lex $P652, "$/"
+    unless_null $P652, vivify_209
+    $P652 = root_new ['parrot';'Hash']
+  vivify_209:
+    set $P653, $P652["backmod"]
+    unless_null $P653, vivify_210
+    new $P653, "Undef"
+  vivify_210:
+    $P654 = "backmod"($P651, $P653)
+    $P655 = $P650."!make"($P654)
+.annotate 'line', 112
+    .return ($P655)
+  control_643:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P651, exception, "payload"
-    .return ($P651)
+    getattribute $P656, exception, "payload"
+    .return ($P656)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "quantifier:sym<**>"  :subid("42_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_655
-.annotate 'line', 114
-    .const 'Sub' $P670 = "43_1280467473.99327" 
-    capture_lex $P670
-    new $P654, 'ExceptionHandler'
-    set_addr $P654, control_653
-    $P654."handle_types"(.CONTROL_RETURN)
-    push_eh $P654
-    .lex "self", self
-    .lex "$/", param_655
-.annotate 'line', 115
-    new $P656, "Undef"
-    .lex "$past", $P656
-.annotate 'line', 116
-    new $P657, "Undef"
-    .lex "$ws", $P657
-.annotate 'line', 114
-    find_lex $P658, "$past"
-.annotate 'line', 116
-    find_lex $P661, "$/"
-    unless_null $P661, vivify_205
-    $P661 = root_new ['parrot';'Hash']
-  vivify_205:
-    set $P662, $P661["normspace"]
-    unless_null $P662, vivify_206
-    new $P662, "Undef"
-  vivify_206:
-    if $P662, if_660
-    set $P659, $P662
-    goto if_660_end
-  if_660:
-    get_global $P663, "@MODIFIERS"
-    unless_null $P663, vivify_207
-    $P663 = root_new ['parrot';'ResizablePMCArray']
-  vivify_207:
-    set $P664, $P663[0]
-    unless_null $P664, vivify_208
-    $P664 = root_new ['parrot';'Hash']
-  vivify_208:
-    set $P665, $P664["s"]
-    unless_null $P665, vivify_209
-    new $P665, "Undef"
-  vivify_209:
-    set $P659, $P665
-  if_660_end:
-    store_lex "$ws", $P659
+.sub "quantifier:sym<+>"  :subid("42_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_660
 .annotate 'line', 117
+    new $P659, 'ExceptionHandler'
+    set_addr $P659, control_658
+    $P659."handle_types"(.CONTROL_RETURN)
+    push_eh $P659
+    .lex "self", self
+    .lex "$/", param_660
+.annotate 'line', 118
+    new $P661, "Undef"
+    .lex "$past", $P661
+    get_hll_global $P662, ["PAST"], "Regex"
+    find_lex $P663, "$/"
+    $P664 = $P662."new"("quant" :named("pasttype"), 1 :named("min"), $P663 :named("node"))
+    store_lex "$past", $P664
+.annotate 'line', 119
+    find_lex $P665, "$/"
+    find_lex $P666, "$past"
     find_lex $P667, "$/"
-    unless_null $P667, vivify_210
+    unless_null $P667, vivify_211
     $P667 = root_new ['parrot';'Hash']
-  vivify_210:
-    set $P668, $P667["quantified_atom"]
-    unless_null $P668, vivify_211
-    new $P668, "Undef"
   vivify_211:
-    if $P668, if_666
-.annotate 'line', 133
-    get_hll_global $P688, ["PAST"], "Regex"
-    find_lex $P689, "$/"
-    unless_null $P689, vivify_212
-    $P689 = root_new ['parrot';'Hash']
+    set $P668, $P667["backmod"]
+    unless_null $P668, vivify_212
+    new $P668, "Undef"
   vivify_212:
-    set $P690, $P689["min"]
-    unless_null $P690, vivify_213
-    new $P690, "Undef"
-  vivify_213:
-    set $N691, $P690
-    find_lex $P692, "$/"
-    $P693 = $P688."new"("quant" :named("pasttype"), $N691 :named("min"), $P692 :named("node"))
-    store_lex "$past", $P693
-.annotate 'line', 134
-    find_lex $P695, "$/"
-    unless_null $P695, vivify_214
-    $P695 = root_new ['parrot';'Hash']
-  vivify_214:
-    set $P696, $P695["max"]
-    unless_null $P696, vivify_215
-    new $P696, "Undef"
-  vivify_215:
-    isfalse $I697, $P696
-    if $I697, if_694
-.annotate 'line', 135
-    find_lex $P703, "$/"
-    unless_null $P703, vivify_216
-    $P703 = root_new ['parrot';'Hash']
-  vivify_216:
-    set $P704, $P703["max"]
-    unless_null $P704, vivify_217
-    $P704 = root_new ['parrot';'ResizablePMCArray']
-  vivify_217:
-    set $P705, $P704[0]
-    unless_null $P705, vivify_218
-    new $P705, "Undef"
-  vivify_218:
-    set $S706, $P705
-    isne $I707, $S706, "*"
-    unless $I707, if_702_end
-    find_lex $P708, "$past"
-    find_lex $P709, "$/"
-    unless_null $P709, vivify_219
-    $P709 = root_new ['parrot';'Hash']
-  vivify_219:
-    set $P710, $P709["max"]
-    unless_null $P710, vivify_220
-    $P710 = root_new ['parrot';'ResizablePMCArray']
-  vivify_220:
-    set $P711, $P710[0]
-    unless_null $P711, vivify_221
-    new $P711, "Undef"
-  vivify_221:
-    set $N712, $P711
-    $P708."max"($N712)
-  if_702_end:
-    goto if_694_end
-  if_694:
-.annotate 'line', 134
-    find_lex $P698, "$past"
-    find_lex $P699, "$/"
-    unless_null $P699, vivify_222
-    $P699 = root_new ['parrot';'Hash']
-  vivify_222:
-    set $P700, $P699["min"]
-    unless_null $P700, vivify_223
-    new $P700, "Undef"
-  vivify_223:
-    set $N701, $P700
-    $P698."max"($N701)
-  if_694_end:
-.annotate 'line', 136
-    find_lex $P714, "$ws"
-    unless $P714, if_713_end
-    find_lex $P715, "$past"
-    get_hll_global $P716, ["PAST"], "Regex"
-    $P717 = $P716."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
-    $P715."sep"($P717)
-  if_713_end:
-.annotate 'line', 132
-    goto if_666_end
-  if_666:
+    $P669 = "backmod"($P666, $P668)
+    $P670 = $P665."!make"($P669)
 .annotate 'line', 117
-    .const 'Sub' $P670 = "43_1280467473.99327" 
-    capture_lex $P670
-    $P670()
-  if_666_end:
-.annotate 'line', 140
-    find_lex $P718, "$/"
-    find_lex $P719, "$past"
-    find_lex $P720, "$/"
-    unless_null $P720, vivify_226
-    $P720 = root_new ['parrot';'Hash']
-  vivify_226:
-    set $P721, $P720["backmod"]
-    unless_null $P721, vivify_227
-    new $P721, "Undef"
-  vivify_227:
-    $P722 = "backmod"($P719, $P721)
-    $P723 = $P718."!make"($P722)
-.annotate 'line', 114
-    .return ($P723)
-  control_653:
+    .return ($P670)
+  control_658:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P724, exception, "payload"
-    .return ($P724)
+    getattribute $P671, exception, "payload"
+    .return ($P671)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block669"  :anon :subid("43_1280467473.99327") :outer("42_1280467473.99327")
-.annotate 'line', 118
-    new $P671, "Undef"
-    .lex "$ast", $P671
-    find_lex $P672, "$/"
-    unless_null $P672, vivify_224
-    $P672 = root_new ['parrot';'Hash']
-  vivify_224:
-    set $P673, $P672["quantified_atom"]
-    unless_null $P673, vivify_225
-    new $P673, "Undef"
-  vivify_225:
-    $P674 = $P673."ast"()
-    store_lex "$ast", $P674
-.annotate 'line', 119
-    find_lex $P676, "$ws"
-    unless $P676, if_675_end
-.annotate 'line', 120
-    get_hll_global $P677, ["PAST"], "Regex"
+.include "except_types.pasm"
+.sub "quantifier:sym<?>"  :subid("43_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_675
 .annotate 'line', 122
-    get_hll_global $P678, ["PAST"], "Regex"
-    $P679 = $P678."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
-    find_lex $P680, "$ast"
-.annotate 'line', 125
-    get_hll_global $P681, ["PAST"], "Regex"
-    $P682 = $P681."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
-    $P683 = $P677."new"($P679, $P680, $P682, "concat" :named("pasttype"))
-.annotate 'line', 120
-    store_lex "$ast", $P683
-  if_675_end:
-.annotate 'line', 129
-    get_hll_global $P684, ["PAST"], "Regex"
-    find_lex $P685, "$ast"
-    find_lex $P686, "$/"
-    $P687 = $P684."new"("quant" :named("pasttype"), 1 :named("min"), $P685 :named("sep"), $P686 :named("node"))
-    store_lex "$past", $P687
-.annotate 'line', 117
-    .return ($P687)
-.end
+    new $P674, 'ExceptionHandler'
+    set_addr $P674, control_673
+    $P674."handle_types"(.CONTROL_RETURN)
+    push_eh $P674
+    .lex "self", self
+    .lex "$/", param_675
+.annotate 'line', 123
+    new $P676, "Undef"
+    .lex "$past", $P676
+    get_hll_global $P677, ["PAST"], "Regex"
+    find_lex $P678, "$/"
+    $P679 = $P677."new"("quant" :named("pasttype"), 0 :named("min"), 1 :named("max"), $P678 :named("node"))
+    store_lex "$past", $P679
+.annotate 'line', 124
+    find_lex $P680, "$/"
+    find_lex $P681, "$past"
+    find_lex $P682, "$/"
+    unless_null $P682, vivify_213
+    $P682 = root_new ['parrot';'Hash']
+  vivify_213:
+    set $P683, $P682["backmod"]
+    unless_null $P683, vivify_214
+    new $P683, "Undef"
+  vivify_214:
+    $P684 = "backmod"($P681, $P683)
+    $P680."!make"($P684)
+.annotate 'line', 125
+    find_lex $P685, "$/"
+    find_lex $P686, "$past"
+    $P687 = $P685."!make"($P686)
+.annotate 'line', 122
+    .return ($P687)
+  control_673:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P688, exception, "payload"
+    .return ($P688)
+.end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<ws>"  :subid("44_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_728
-.annotate 'line', 143
-    new $P727, 'ExceptionHandler'
-    set_addr $P727, control_726
-    $P727."handle_types"(.CONTROL_RETURN)
-    push_eh $P727
+.sub "quantifier:sym<**>"  :subid("44_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_692
+.annotate 'line', 128
+    .const 'Sub' $P707 = "45_1282323999.42098" 
+    capture_lex $P707
+    new $P691, 'ExceptionHandler'
+    set_addr $P691, control_690
+    $P691."handle_types"(.CONTROL_RETURN)
+    push_eh $P691
     .lex "self", self
-    .lex "$/", param_728
-.annotate 'line', 144
-    new $P729, "Undef"
-    .lex "$past", $P729
-.annotate 'line', 145
-    get_global $P732, "@MODIFIERS"
-    unless_null $P732, vivify_228
-    $P732 = root_new ['parrot';'ResizablePMCArray']
+    .lex "$/", param_692
+.annotate 'line', 129
+    new $P693, "Undef"
+    .lex "$past", $P693
+.annotate 'line', 130
+    new $P694, "Undef"
+    .lex "$ws", $P694
+.annotate 'line', 128
+    find_lex $P695, "$past"
+.annotate 'line', 130
+    find_lex $P698, "$/"
+    unless_null $P698, vivify_215
+    $P698 = root_new ['parrot';'Hash']
+  vivify_215:
+    set $P699, $P698["normspace"]
+    unless_null $P699, vivify_216
+    new $P699, "Undef"
+  vivify_216:
+    if $P699, if_697
+    set $P696, $P699
+    goto if_697_end
+  if_697:
+    get_global $P700, "@MODIFIERS"
+    unless_null $P700, vivify_217
+    $P700 = root_new ['parrot';'ResizablePMCArray']
+  vivify_217:
+    set $P701, $P700[0]
+    unless_null $P701, vivify_218
+    $P701 = root_new ['parrot';'Hash']
+  vivify_218:
+    set $P702, $P701["s"]
+    unless_null $P702, vivify_219
+    new $P702, "Undef"
+  vivify_219:
+    set $P696, $P702
+  if_697_end:
+    store_lex "$ws", $P696
+.annotate 'line', 131
+    find_lex $P704, "$/"
+    unless_null $P704, vivify_220
+    $P704 = root_new ['parrot';'Hash']
+  vivify_220:
+    set $P705, $P704["quantified_atom"]
+    unless_null $P705, vivify_221
+    new $P705, "Undef"
+  vivify_221:
+    if $P705, if_703
+.annotate 'line', 147
+    get_hll_global $P725, ["PAST"], "Regex"
+    find_lex $P726, "$/"
+    unless_null $P726, vivify_222
+    $P726 = root_new ['parrot';'Hash']
+  vivify_222:
+    set $P727, $P726["min"]
+    unless_null $P727, vivify_223
+    new $P727, "Undef"
+  vivify_223:
+    set $N728, $P727
+    find_lex $P729, "$/"
+    $P730 = $P725."new"("quant" :named("pasttype"), $N728 :named("min"), $P729 :named("node"))
+    store_lex "$past", $P730
+.annotate 'line', 148
+    find_lex $P732, "$/"
+    unless_null $P732, vivify_224
+    $P732 = root_new ['parrot';'Hash']
+  vivify_224:
+    set $P733, $P732["max"]
+    unless_null $P733, vivify_225
+    new $P733, "Undef"
+  vivify_225:
+    isfalse $I734, $P733
+    if $I734, if_731
+.annotate 'line', 149
+    find_lex $P740, "$/"
+    unless_null $P740, vivify_226
+    $P740 = root_new ['parrot';'Hash']
+  vivify_226:
+    set $P741, $P740["max"]
+    unless_null $P741, vivify_227
+    $P741 = root_new ['parrot';'ResizablePMCArray']
+  vivify_227:
+    set $P742, $P741[0]
+    unless_null $P742, vivify_228
+    new $P742, "Undef"
   vivify_228:
-    set $P733, $P732[0]
-    unless_null $P733, vivify_229
-    $P733 = root_new ['parrot';'Hash']
+    set $S743, $P742
+    isne $I744, $S743, "*"
+    unless $I744, if_739_end
+    find_lex $P745, "$past"
+    find_lex $P746, "$/"
+    unless_null $P746, vivify_229
+    $P746 = root_new ['parrot';'Hash']
   vivify_229:
-    set $P734, $P733["s"]
-    unless_null $P734, vivify_230
-    new $P734, "Undef"
+    set $P747, $P746["max"]
+    unless_null $P747, vivify_230
+    $P747 = root_new ['parrot';'ResizablePMCArray']
   vivify_230:
-    if $P734, if_731
-    new $P738, "Integer"
-    assign $P738, 0
-    set $P730, $P738
+    set $P748, $P747[0]
+    unless_null $P748, vivify_231
+    new $P748, "Undef"
+  vivify_231:
+    set $N749, $P748
+    $P745."max"($N749)
+  if_739_end:
     goto if_731_end
   if_731:
-    get_hll_global $P735, ["PAST"], "Regex"
+.annotate 'line', 148
+    find_lex $P735, "$past"
     find_lex $P736, "$/"
-    $P737 = $P735."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"), $P736 :named("node"))
-    set $P730, $P737
+    unless_null $P736, vivify_232
+    $P736 = root_new ['parrot';'Hash']
+  vivify_232:
+    set $P737, $P736["min"]
+    unless_null $P737, vivify_233
+    new $P737, "Undef"
+  vivify_233:
+    set $N738, $P737
+    $P735."max"($N738)
   if_731_end:
-    store_lex "$past", $P730
-.annotate 'line', 148
-    find_lex $P739, "$/"
-    find_lex $P740, "$past"
-    $P741 = $P739."!make"($P740)
-.annotate 'line', 143
-    .return ($P741)
-  control_726:
+.annotate 'line', 150
+    find_lex $P751, "$ws"
+    unless $P751, if_750_end
+    find_lex $P752, "$past"
+    get_hll_global $P753, ["PAST"], "Regex"
+    $P754 = $P753."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
+    $P752."sep"($P754)
+  if_750_end:
+.annotate 'line', 146
+    goto if_703_end
+  if_703:
+.annotate 'line', 131
+    .const 'Sub' $P707 = "45_1282323999.42098" 
+    capture_lex $P707
+    $P707()
+  if_703_end:
+.annotate 'line', 154
+    find_lex $P755, "$/"
+    find_lex $P756, "$past"
+    find_lex $P757, "$/"
+    unless_null $P757, vivify_236
+    $P757 = root_new ['parrot';'Hash']
+  vivify_236:
+    set $P758, $P757["backmod"]
+    unless_null $P758, vivify_237
+    new $P758, "Undef"
+  vivify_237:
+    $P759 = "backmod"($P756, $P758)
+    $P760 = $P755."!make"($P759)
+.annotate 'line', 128
+    .return ($P760)
+  control_690:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P742, exception, "payload"
-    .return ($P742)
+    getattribute $P761, exception, "payload"
+    .return ($P761)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.include "except_types.pasm"
-.sub "metachar:sym<[ ]>"  :subid("45_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_746
-.annotate 'line', 152
-    new $P745, 'ExceptionHandler'
-    set_addr $P745, control_744
-    $P745."handle_types"(.CONTROL_RETURN)
-    push_eh $P745
-    .lex "self", self
-    .lex "$/", param_746
-.annotate 'line', 153
-    find_lex $P747, "$/"
-    find_lex $P748, "$/"
-    unless_null $P748, vivify_231
-    $P748 = root_new ['parrot';'Hash']
-  vivify_231:
-    set $P749, $P748["nibbler"]
-    unless_null $P749, vivify_232
-    new $P749, "Undef"
-  vivify_232:
-    $P750 = $P749."ast"()
-    $P751 = $P747."!make"($P750)
-.annotate 'line', 152
-    .return ($P751)
-  control_744:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P752, exception, "payload"
-    .return ($P752)
+.sub "_block706"  :anon :subid("45_1282323999.42098") :outer("44_1282323999.42098")
+.annotate 'line', 132
+    new $P708, "Undef"
+    .lex "$ast", $P708
+    find_lex $P709, "$/"
+    unless_null $P709, vivify_234
+    $P709 = root_new ['parrot';'Hash']
+  vivify_234:
+    set $P710, $P709["quantified_atom"]
+    unless_null $P710, vivify_235
+    new $P710, "Undef"
+  vivify_235:
+    $P711 = $P710."ast"()
+    store_lex "$ast", $P711
+.annotate 'line', 133
+    find_lex $P713, "$ws"
+    unless $P713, if_712_end
+.annotate 'line', 134
+    get_hll_global $P714, ["PAST"], "Regex"
+.annotate 'line', 136
+    get_hll_global $P715, ["PAST"], "Regex"
+    $P716 = $P715."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
+    find_lex $P717, "$ast"
+.annotate 'line', 139
+    get_hll_global $P718, ["PAST"], "Regex"
+    $P719 = $P718."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"))
+    $P720 = $P714."new"($P716, $P717, $P719, "concat" :named("pasttype"))
+.annotate 'line', 134
+    store_lex "$ast", $P720
+  if_712_end:
+.annotate 'line', 143
+    get_hll_global $P721, ["PAST"], "Regex"
+    find_lex $P722, "$ast"
+    find_lex $P723, "$/"
+    $P724 = $P721."new"("quant" :named("pasttype"), 1 :named("min"), $P722 :named("sep"), $P723 :named("node"))
+    store_lex "$past", $P724
+.annotate 'line', 131
+    .return ($P724)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<( )>"  :subid("46_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_756
-.annotate 'line', 156
-    new $P755, 'ExceptionHandler'
-    set_addr $P755, control_754
-    $P755."handle_types"(.CONTROL_RETURN)
-    push_eh $P755
-    .lex "self", self
-    .lex "$/", param_756
+.sub "metachar:sym<ws>"  :subid("46_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_765
 .annotate 'line', 157
-    new $P757, "Undef"
-    .lex "$subpast", $P757
+    new $P764, 'ExceptionHandler'
+    set_addr $P764, control_763
+    $P764."handle_types"(.CONTROL_RETURN)
+    push_eh $P764
+    .lex "self", self
+    .lex "$/", param_765
 .annotate 'line', 158
-    new $P758, "Undef"
-    .lex "$past", $P758
+    new $P766, "Undef"
+    .lex "$past", $P766
+.annotate 'line', 159
+    get_global $P769, "@MODIFIERS"
+    unless_null $P769, vivify_238
+    $P769 = root_new ['parrot';'ResizablePMCArray']
+  vivify_238:
+    set $P770, $P769[0]
+    unless_null $P770, vivify_239
+    $P770 = root_new ['parrot';'Hash']
+  vivify_239:
+    set $P771, $P770["s"]
+    unless_null $P771, vivify_240
+    new $P771, "Undef"
+  vivify_240:
+    if $P771, if_768
+    new $P775, "Integer"
+    assign $P775, 0
+    set $P767, $P775
+    goto if_768_end
+  if_768:
+    get_hll_global $P772, ["PAST"], "Regex"
+    find_lex $P773, "$/"
+    $P774 = $P772."new"("ws", "subrule" :named("pasttype"), "method" :named("subtype"), $P773 :named("node"))
+    set $P767, $P774
+  if_768_end:
+    store_lex "$past", $P767
+.annotate 'line', 162
+    find_lex $P776, "$/"
+    find_lex $P777, "$past"
+    $P778 = $P776."!make"($P777)
 .annotate 'line', 157
-    find_lex $P759, "$/"
-    unless_null $P759, vivify_233
-    $P759 = root_new ['parrot';'Hash']
-  vivify_233:
-    set $P760, $P759["nibbler"]
-    unless_null $P760, vivify_234
-    new $P760, "Undef"
-  vivify_234:
-    $P761 = $P760."ast"()
-    $P762 = "buildsub"($P761)
-    store_lex "$subpast", $P762
-.annotate 'line', 158
-    get_hll_global $P763, ["PAST"], "Regex"
-    find_lex $P764, "$subpast"
-    find_lex $P765, "$/"
-    $P766 = $P763."new"($P764, "subrule" :named("pasttype"), "capture" :named("subtype"), $P765 :named("node"))
-    store_lex "$past", $P766
-.annotate 'line', 160
-    find_lex $P767, "$/"
-    find_lex $P768, "$past"
-    $P769 = $P767."!make"($P768)
-.annotate 'line', 156
-    .return ($P769)
-  control_754:
+    .return ($P778)
+  control_763:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P770, exception, "payload"
-    .return ($P770)
+    getattribute $P779, exception, "payload"
+    .return ($P779)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<'>"  :subid("47_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_774
-.annotate 'line', 163
-    new $P773, 'ExceptionHandler'
-    set_addr $P773, control_772
-    $P773."handle_types"(.CONTROL_RETURN)
-    push_eh $P773
-    .lex "self", self
-    .lex "$/", param_774
-.annotate 'line', 164
-    new $P775, "Undef"
-    .lex "$quote", $P775
-.annotate 'line', 166
-    new $P776, "Undef"
-    .lex "$past", $P776
-.annotate 'line', 164
-    find_lex $P777, "$/"
-    unless_null $P777, vivify_235
-    $P777 = root_new ['parrot';'Hash']
-  vivify_235:
-    set $P778, $P777["quote_EXPR"]
-    unless_null $P778, vivify_236
-    new $P778, "Undef"
-  vivify_236:
-    $P779 = $P778."ast"()
-    store_lex "$quote", $P779
-.annotate 'line', 165
-    get_hll_global $P781, ["PAST"], "Val"
-    find_lex $P782, "$quote"
-    $P783 = $P781."ACCEPTS"($P782)
-    unless $P783, if_780_end
-    find_lex $P784, "$quote"
-    $P785 = $P784."value"()
-    store_lex "$quote", $P785
-  if_780_end:
+.sub "metachar:sym<[ ]>"  :subid("47_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_783
 .annotate 'line', 166
-    get_hll_global $P786, ["PAST"], "Regex"
-    find_lex $P787, "$quote"
-    find_lex $P788, "$/"
-    $P789 = $P786."new"($P787, "literal" :named("pasttype"), $P788 :named("node"))
-    store_lex "$past", $P789
+    new $P782, 'ExceptionHandler'
+    set_addr $P782, control_781
+    $P782."handle_types"(.CONTROL_RETURN)
+    push_eh $P782
+    .lex "self", self
+    .lex "$/", param_783
 .annotate 'line', 167
-    get_global $P791, "@MODIFIERS"
-    unless_null $P791, vivify_237
-    $P791 = root_new ['parrot';'ResizablePMCArray']
-  vivify_237:
-    set $P792, $P791[0]
-    unless_null $P792, vivify_238
-    $P792 = root_new ['parrot';'Hash']
-  vivify_238:
-    set $P793, $P792["i"]
-    unless_null $P793, vivify_239
-    new $P793, "Undef"
-  vivify_239:
-    unless $P793, if_790_end
-    find_lex $P794, "$past"
-    $P794."subtype"("ignorecase")
-  if_790_end:
-.annotate 'line', 168
-    find_lex $P795, "$/"
-    find_lex $P796, "$past"
-    $P797 = $P795."!make"($P796)
-.annotate 'line', 163
-    .return ($P797)
-  control_772:
+    find_lex $P784, "$/"
+    find_lex $P785, "$/"
+    unless_null $P785, vivify_241
+    $P785 = root_new ['parrot';'Hash']
+  vivify_241:
+    set $P786, $P785["nibbler"]
+    unless_null $P786, vivify_242
+    new $P786, "Undef"
+  vivify_242:
+    $P787 = $P786."ast"()
+    $P788 = $P784."!make"($P787)
+.annotate 'line', 166
+    .return ($P788)
+  control_781:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P798, exception, "payload"
-    .return ($P798)
+    getattribute $P789, exception, "payload"
+    .return ($P789)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<\">"  :subid("48_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_802
-.annotate 'line', 171
-    new $P801, 'ExceptionHandler'
-    set_addr $P801, control_800
-    $P801."handle_types"(.CONTROL_RETURN)
-    push_eh $P801
+.sub "metachar:sym<( )>"  :subid("48_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_793
+.annotate 'line', 170
+    new $P792, 'ExceptionHandler'
+    set_addr $P792, control_791
+    $P792."handle_types"(.CONTROL_RETURN)
+    push_eh $P792
     .lex "self", self
-    .lex "$/", param_802
-.annotate 'line', 172
-    new $P803, "Undef"
-    .lex "$quote", $P803
-.annotate 'line', 174
-    new $P804, "Undef"
-    .lex "$past", $P804
+    .lex "$/", param_793
+.annotate 'line', 171
+    new $P794, "Undef"
+    .lex "$subpast", $P794
 .annotate 'line', 172
-    find_lex $P805, "$/"
-    unless_null $P805, vivify_240
-    $P805 = root_new ['parrot';'Hash']
-  vivify_240:
-    set $P806, $P805["quote_EXPR"]
-    unless_null $P806, vivify_241
-    new $P806, "Undef"
-  vivify_241:
-    $P807 = $P806."ast"()
-    store_lex "$quote", $P807
-.annotate 'line', 173
-    get_hll_global $P809, ["PAST"], "Val"
-    find_lex $P810, "$quote"
-    $P811 = $P809."ACCEPTS"($P810)
-    unless $P811, if_808_end
-    find_lex $P812, "$quote"
-    $P813 = $P812."value"()
-    store_lex "$quote", $P813
-  if_808_end:
-.annotate 'line', 174
-    get_hll_global $P814, ["PAST"], "Regex"
-    find_lex $P815, "$quote"
-    find_lex $P816, "$/"
-    $P817 = $P814."new"($P815, "literal" :named("pasttype"), $P816 :named("node"))
-    store_lex "$past", $P817
-.annotate 'line', 175
-    get_global $P819, "@MODIFIERS"
-    unless_null $P819, vivify_242
-    $P819 = root_new ['parrot';'ResizablePMCArray']
-  vivify_242:
-    set $P820, $P819[0]
-    unless_null $P820, vivify_243
-    $P820 = root_new ['parrot';'Hash']
+    new $P795, "Undef"
+    .lex "$past", $P795
+.annotate 'line', 171
+    find_lex $P796, "$/"
+    unless_null $P796, vivify_243
+    $P796 = root_new ['parrot';'Hash']
   vivify_243:
-    set $P821, $P820["i"]
-    unless_null $P821, vivify_244
-    new $P821, "Undef"
+    set $P797, $P796["nibbler"]
+    unless_null $P797, vivify_244
+    new $P797, "Undef"
   vivify_244:
-    unless $P821, if_818_end
-    find_lex $P822, "$past"
-    $P822."subtype"("ignorecase")
-  if_818_end:
-.annotate 'line', 176
-    find_lex $P823, "$/"
-    find_lex $P824, "$past"
-    $P825 = $P823."!make"($P824)
-.annotate 'line', 171
-    .return ($P825)
-  control_800:
+    $P798 = $P797."ast"()
+    $P799 = "buildsub"($P798)
+    store_lex "$subpast", $P799
+.annotate 'line', 172
+    get_hll_global $P800, ["PAST"], "Regex"
+    find_lex $P801, "$subpast"
+    find_lex $P802, "$/"
+    $P803 = $P800."new"($P801, "subrule" :named("pasttype"), "capture" :named("subtype"), $P802 :named("node"))
+    store_lex "$past", $P803
+.annotate 'line', 174
+    find_lex $P804, "$/"
+    find_lex $P805, "$past"
+    $P806 = $P804."!make"($P805)
+.annotate 'line', 170
+    .return ($P806)
+  control_791:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P826, exception, "payload"
-    .return ($P826)
+    getattribute $P807, exception, "payload"
+    .return ($P807)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<.>"  :subid("49_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_830
-.annotate 'line', 179
-    new $P829, 'ExceptionHandler'
-    set_addr $P829, control_828
-    $P829."handle_types"(.CONTROL_RETURN)
-    push_eh $P829
+.sub "metachar:sym<'>"  :subid("49_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_811
+.annotate 'line', 177
+    new $P810, 'ExceptionHandler'
+    set_addr $P810, control_809
+    $P810."handle_types"(.CONTROL_RETURN)
+    push_eh $P810
     .lex "self", self
-    .lex "$/", param_830
+    .lex "$/", param_811
+.annotate 'line', 178
+    new $P812, "Undef"
+    .lex "$quote", $P812
 .annotate 'line', 180
-    new $P831, "Undef"
-    .lex "$past", $P831
-    get_hll_global $P832, ["PAST"], "Regex"
-    find_lex $P833, "$/"
-    $P834 = $P832."new"("charclass" :named("pasttype"), "." :named("subtype"), $P833 :named("node"))
-    store_lex "$past", $P834
-.annotate 'line', 181
-    find_lex $P835, "$/"
-    find_lex $P836, "$past"
-    $P837 = $P835."!make"($P836)
+    new $P813, "Undef"
+    .lex "$past", $P813
+.annotate 'line', 178
+    find_lex $P814, "$/"
+    unless_null $P814, vivify_245
+    $P814 = root_new ['parrot';'Hash']
+  vivify_245:
+    set $P815, $P814["quote_EXPR"]
+    unless_null $P815, vivify_246
+    new $P815, "Undef"
+  vivify_246:
+    $P816 = $P815."ast"()
+    store_lex "$quote", $P816
 .annotate 'line', 179
-    .return ($P837)
-  control_828:
+    get_hll_global $P818, ["PAST"], "Val"
+    find_lex $P819, "$quote"
+    $P820 = $P818."ACCEPTS"($P819)
+    unless $P820, if_817_end
+    find_lex $P821, "$quote"
+    $P822 = $P821."value"()
+    store_lex "$quote", $P822
+  if_817_end:
+.annotate 'line', 180
+    get_hll_global $P823, ["PAST"], "Regex"
+    find_lex $P824, "$quote"
+    find_lex $P825, "$/"
+    $P826 = $P823."new"($P824, "literal" :named("pasttype"), $P825 :named("node"))
+    store_lex "$past", $P826
+.annotate 'line', 181
+    get_global $P828, "@MODIFIERS"
+    unless_null $P828, vivify_247
+    $P828 = root_new ['parrot';'ResizablePMCArray']
+  vivify_247:
+    set $P829, $P828[0]
+    unless_null $P829, vivify_248
+    $P829 = root_new ['parrot';'Hash']
+  vivify_248:
+    set $P830, $P829["i"]
+    unless_null $P830, vivify_249
+    new $P830, "Undef"
+  vivify_249:
+    unless $P830, if_827_end
+    find_lex $P831, "$past"
+    $P831."subtype"("ignorecase")
+  if_827_end:
+.annotate 'line', 182
+    find_lex $P832, "$/"
+    find_lex $P833, "$past"
+    $P834 = $P832."!make"($P833)
+.annotate 'line', 177
+    .return ($P834)
+  control_809:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P838, exception, "payload"
-    .return ($P838)
+    getattribute $P835, exception, "payload"
+    .return ($P835)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<^>"  :subid("50_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_842
-.annotate 'line', 184
-    new $P841, 'ExceptionHandler'
-    set_addr $P841, control_840
-    $P841."handle_types"(.CONTROL_RETURN)
-    push_eh $P841
-    .lex "self", self
-    .lex "$/", param_842
+.sub "metachar:sym<\">"  :subid("50_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_839
 .annotate 'line', 185
-    new $P843, "Undef"
-    .lex "$past", $P843
-    get_hll_global $P844, ["PAST"], "Regex"
-    find_lex $P845, "$/"
-    $P846 = $P844."new"("anchor" :named("pasttype"), "bos" :named("subtype"), $P845 :named("node"))
-    store_lex "$past", $P846
+    new $P838, 'ExceptionHandler'
+    set_addr $P838, control_837
+    $P838."handle_types"(.CONTROL_RETURN)
+    push_eh $P838
+    .lex "self", self
+    .lex "$/", param_839
 .annotate 'line', 186
-    find_lex $P847, "$/"
-    find_lex $P848, "$past"
-    $P849 = $P847."!make"($P848)
-.annotate 'line', 184
-    .return ($P849)
-  control_840:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P850, exception, "payload"
-    .return ($P850)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.include "except_types.pasm"
-.sub "metachar:sym<^^>"  :subid("51_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_854
+    new $P840, "Undef"
+    .lex "$quote", $P840
+.annotate 'line', 188
+    new $P841, "Undef"
+    .lex "$past", $P841
+.annotate 'line', 186
+    find_lex $P842, "$/"
+    unless_null $P842, vivify_250
+    $P842 = root_new ['parrot';'Hash']
+  vivify_250:
+    set $P843, $P842["quote_EXPR"]
+    unless_null $P843, vivify_251
+    new $P843, "Undef"
+  vivify_251:
+    $P844 = $P843."ast"()
+    store_lex "$quote", $P844
+.annotate 'line', 187
+    get_hll_global $P846, ["PAST"], "Val"
+    find_lex $P847, "$quote"
+    $P848 = $P846."ACCEPTS"($P847)
+    unless $P848, if_845_end
+    find_lex $P849, "$quote"
+    $P850 = $P849."value"()
+    store_lex "$quote", $P850
+  if_845_end:
+.annotate 'line', 188
+    get_hll_global $P851, ["PAST"], "Regex"
+    find_lex $P852, "$quote"
+    find_lex $P853, "$/"
+    $P854 = $P851."new"($P852, "literal" :named("pasttype"), $P853 :named("node"))
+    store_lex "$past", $P854
 .annotate 'line', 189
-    new $P853, 'ExceptionHandler'
-    set_addr $P853, control_852
-    $P853."handle_types"(.CONTROL_RETURN)
-    push_eh $P853
-    .lex "self", self
-    .lex "$/", param_854
+    get_global $P856, "@MODIFIERS"
+    unless_null $P856, vivify_252
+    $P856 = root_new ['parrot';'ResizablePMCArray']
+  vivify_252:
+    set $P857, $P856[0]
+    unless_null $P857, vivify_253
+    $P857 = root_new ['parrot';'Hash']
+  vivify_253:
+    set $P858, $P857["i"]
+    unless_null $P858, vivify_254
+    new $P858, "Undef"
+  vivify_254:
+    unless $P858, if_855_end
+    find_lex $P859, "$past"
+    $P859."subtype"("ignorecase")
+  if_855_end:
 .annotate 'line', 190
-    new $P855, "Undef"
-    .lex "$past", $P855
-    get_hll_global $P856, ["PAST"], "Regex"
-    find_lex $P857, "$/"
-    $P858 = $P856."new"("anchor" :named("pasttype"), "bol" :named("subtype"), $P857 :named("node"))
-    store_lex "$past", $P858
-.annotate 'line', 191
-    find_lex $P859, "$/"
-    find_lex $P860, "$past"
-    $P861 = $P859."!make"($P860)
-.annotate 'line', 189
-    .return ($P861)
-  control_852:
+    find_lex $P860, "$/"
+    find_lex $P861, "$past"
+    $P862 = $P860."!make"($P861)
+.annotate 'line', 185
+    .return ($P862)
+  control_837:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P862, exception, "payload"
-    .return ($P862)
+    getattribute $P863, exception, "payload"
+    .return ($P863)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<$>"  :subid("52_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_866
-.annotate 'line', 194
-    new $P865, 'ExceptionHandler'
-    set_addr $P865, control_864
-    $P865."handle_types"(.CONTROL_RETURN)
-    push_eh $P865
+.sub "metachar:sym<.>"  :subid("51_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_867
+.annotate 'line', 193
+    new $P866, 'ExceptionHandler'
+    set_addr $P866, control_865
+    $P866."handle_types"(.CONTROL_RETURN)
+    push_eh $P866
     .lex "self", self
-    .lex "$/", param_866
-.annotate 'line', 195
-    new $P867, "Undef"
-    .lex "$past", $P867
-    get_hll_global $P868, ["PAST"], "Regex"
-    find_lex $P869, "$/"
-    $P870 = $P868."new"("anchor" :named("pasttype"), "eos" :named("subtype"), $P869 :named("node"))
-    store_lex "$past", $P870
-.annotate 'line', 196
-    find_lex $P871, "$/"
-    find_lex $P872, "$past"
-    $P873 = $P871."!make"($P872)
+    .lex "$/", param_867
 .annotate 'line', 194
-    .return ($P873)
-  control_864:
+    new $P868, "Undef"
+    .lex "$past", $P868
+    get_hll_global $P869, ["PAST"], "Regex"
+    find_lex $P870, "$/"
+    $P871 = $P869."new"("charclass" :named("pasttype"), "." :named("subtype"), $P870 :named("node"))
+    store_lex "$past", $P871
+.annotate 'line', 195
+    find_lex $P872, "$/"
+    find_lex $P873, "$past"
+    $P874 = $P872."!make"($P873)
+.annotate 'line', 193
+    .return ($P874)
+  control_865:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P874, exception, "payload"
-    .return ($P874)
+    getattribute $P875, exception, "payload"
+    .return ($P875)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<$$>"  :subid("53_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_878
-.annotate 'line', 199
-    new $P877, 'ExceptionHandler'
-    set_addr $P877, control_876
-    $P877."handle_types"(.CONTROL_RETURN)
-    push_eh $P877
+.sub "metachar:sym<^>"  :subid("52_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_879
+.annotate 'line', 198
+    new $P878, 'ExceptionHandler'
+    set_addr $P878, control_877
+    $P878."handle_types"(.CONTROL_RETURN)
+    push_eh $P878
     .lex "self", self
-    .lex "$/", param_878
-.annotate 'line', 200
-    new $P879, "Undef"
-    .lex "$past", $P879
-    get_hll_global $P880, ["PAST"], "Regex"
-    find_lex $P881, "$/"
-    $P882 = $P880."new"("anchor" :named("pasttype"), "eol" :named("subtype"), $P881 :named("node"))
-    store_lex "$past", $P882
-.annotate 'line', 201
-    find_lex $P883, "$/"
-    find_lex $P884, "$past"
-    $P885 = $P883."!make"($P884)
+    .lex "$/", param_879
 .annotate 'line', 199
-    .return ($P885)
-  control_876:
+    new $P880, "Undef"
+    .lex "$past", $P880
+    get_hll_global $P881, ["PAST"], "Regex"
+    find_lex $P882, "$/"
+    $P883 = $P881."new"("anchor" :named("pasttype"), "bos" :named("subtype"), $P882 :named("node"))
+    store_lex "$past", $P883
+.annotate 'line', 200
+    find_lex $P884, "$/"
+    find_lex $P885, "$past"
+    $P886 = $P884."!make"($P885)
+.annotate 'line', 198
+    .return ($P886)
+  control_877:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P886, exception, "payload"
-    .return ($P886)
+    getattribute $P887, exception, "payload"
+    .return ($P887)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<:::>"  :subid("54_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_890
-.annotate 'line', 204
-    new $P889, 'ExceptionHandler'
-    set_addr $P889, control_888
-    $P889."handle_types"(.CONTROL_RETURN)
-    push_eh $P889
+.sub "metachar:sym<^^>"  :subid("53_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_891
+.annotate 'line', 203
+    new $P890, 'ExceptionHandler'
+    set_addr $P890, control_889
+    $P890."handle_types"(.CONTROL_RETURN)
+    push_eh $P890
     .lex "self", self
-    .lex "$/", param_890
-.annotate 'line', 205
-    new $P891, "Undef"
-    .lex "$past", $P891
-    get_hll_global $P892, ["PAST"], "Regex"
-    find_lex $P893, "$/"
-    $P894 = $P892."new"("cut" :named("pasttype"), $P893 :named("node"))
-    store_lex "$past", $P894
-.annotate 'line', 206
-    find_lex $P895, "$/"
-    find_lex $P896, "$past"
-    $P897 = $P895."!make"($P896)
+    .lex "$/", param_891
 .annotate 'line', 204
-    .return ($P897)
-  control_888:
+    new $P892, "Undef"
+    .lex "$past", $P892
+    get_hll_global $P893, ["PAST"], "Regex"
+    find_lex $P894, "$/"
+    $P895 = $P893."new"("anchor" :named("pasttype"), "bol" :named("subtype"), $P894 :named("node"))
+    store_lex "$past", $P895
+.annotate 'line', 205
+    find_lex $P896, "$/"
+    find_lex $P897, "$past"
+    $P898 = $P896."!make"($P897)
+.annotate 'line', 203
+    .return ($P898)
+  control_889:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P898, exception, "payload"
-    .return ($P898)
+    getattribute $P899, exception, "payload"
+    .return ($P899)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<lwb>"  :subid("55_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_902
-.annotate 'line', 209
-    new $P901, 'ExceptionHandler'
-    set_addr $P901, control_900
-    $P901."handle_types"(.CONTROL_RETURN)
-    push_eh $P901
+.sub "metachar:sym<$>"  :subid("54_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_903
+.annotate 'line', 208
+    new $P902, 'ExceptionHandler'
+    set_addr $P902, control_901
+    $P902."handle_types"(.CONTROL_RETURN)
+    push_eh $P902
     .lex "self", self
-    .lex "$/", param_902
-.annotate 'line', 210
-    new $P903, "Undef"
-    .lex "$past", $P903
-    get_hll_global $P904, ["PAST"], "Regex"
-    find_lex $P905, "$/"
-    $P906 = $P904."new"("anchor" :named("pasttype"), "lwb" :named("subtype"), $P905 :named("node"))
-    store_lex "$past", $P906
-.annotate 'line', 211
-    find_lex $P907, "$/"
-    find_lex $P908, "$past"
-    $P909 = $P907."!make"($P908)
+    .lex "$/", param_903
 .annotate 'line', 209
-    .return ($P909)
-  control_900:
+    new $P904, "Undef"
+    .lex "$past", $P904
+    get_hll_global $P905, ["PAST"], "Regex"
+    find_lex $P906, "$/"
+    $P907 = $P905."new"("anchor" :named("pasttype"), "eos" :named("subtype"), $P906 :named("node"))
+    store_lex "$past", $P907
+.annotate 'line', 210
+    find_lex $P908, "$/"
+    find_lex $P909, "$past"
+    $P910 = $P908."!make"($P909)
+.annotate 'line', 208
+    .return ($P910)
+  control_901:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P910, exception, "payload"
-    .return ($P910)
+    getattribute $P911, exception, "payload"
+    .return ($P911)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<rwb>"  :subid("56_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_914
-.annotate 'line', 214
-    new $P913, 'ExceptionHandler'
-    set_addr $P913, control_912
-    $P913."handle_types"(.CONTROL_RETURN)
-    push_eh $P913
+.sub "metachar:sym<$$>"  :subid("55_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_915
+.annotate 'line', 213
+    new $P914, 'ExceptionHandler'
+    set_addr $P914, control_913
+    $P914."handle_types"(.CONTROL_RETURN)
+    push_eh $P914
     .lex "self", self
-    .lex "$/", param_914
-.annotate 'line', 215
-    new $P915, "Undef"
-    .lex "$past", $P915
-    get_hll_global $P916, ["PAST"], "Regex"
-    find_lex $P917, "$/"
-    $P918 = $P916."new"("anchor" :named("pasttype"), "rwb" :named("subtype"), $P917 :named("node"))
-    store_lex "$past", $P918
-.annotate 'line', 216
-    find_lex $P919, "$/"
-    find_lex $P920, "$past"
-    $P921 = $P919."!make"($P920)
+    .lex "$/", param_915
 .annotate 'line', 214
-    .return ($P921)
-  control_912:
+    new $P916, "Undef"
+    .lex "$past", $P916
+    get_hll_global $P917, ["PAST"], "Regex"
+    find_lex $P918, "$/"
+    $P919 = $P917."new"("anchor" :named("pasttype"), "eol" :named("subtype"), $P918 :named("node"))
+    store_lex "$past", $P919
+.annotate 'line', 215
+    find_lex $P920, "$/"
+    find_lex $P921, "$past"
+    $P922 = $P920."!make"($P921)
+.annotate 'line', 213
+    .return ($P922)
+  control_913:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P922, exception, "payload"
-    .return ($P922)
+    getattribute $P923, exception, "payload"
+    .return ($P923)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<bs>"  :subid("57_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_926
-.annotate 'line', 219
-    new $P925, 'ExceptionHandler'
-    set_addr $P925, control_924
-    $P925."handle_types"(.CONTROL_RETURN)
-    push_eh $P925
+.sub "metachar:sym<:::>"  :subid("56_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_927
+.annotate 'line', 218
+    new $P926, 'ExceptionHandler'
+    set_addr $P926, control_925
+    $P926."handle_types"(.CONTROL_RETURN)
+    push_eh $P926
     .lex "self", self
-    .lex "$/", param_926
-.annotate 'line', 220
-    find_lex $P927, "$/"
-    find_lex $P928, "$/"
-    unless_null $P928, vivify_245
-    $P928 = root_new ['parrot';'Hash']
-  vivify_245:
-    set $P929, $P928["backslash"]
-    unless_null $P929, vivify_246
-    new $P929, "Undef"
-  vivify_246:
-    $P930 = $P929."ast"()
-    $P931 = $P927."!make"($P930)
+    .lex "$/", param_927
 .annotate 'line', 219
-    .return ($P931)
-  control_924:
+    new $P928, "Undef"
+    .lex "$past", $P928
+    get_hll_global $P929, ["PAST"], "Regex"
+    find_lex $P930, "$/"
+    $P931 = $P929."new"("cut" :named("pasttype"), $P930 :named("node"))
+    store_lex "$past", $P931
+.annotate 'line', 220
+    find_lex $P932, "$/"
+    find_lex $P933, "$past"
+    $P934 = $P932."!make"($P933)
+.annotate 'line', 218
+    .return ($P934)
+  control_925:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P932, exception, "payload"
-    .return ($P932)
+    getattribute $P935, exception, "payload"
+    .return ($P935)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<mod>"  :subid("58_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_936
+.sub "metachar:sym<lwb>"  :subid("57_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_939
 .annotate 'line', 223
-    new $P935, 'ExceptionHandler'
-    set_addr $P935, control_934
-    $P935."handle_types"(.CONTROL_RETURN)
-    push_eh $P935
+    new $P938, 'ExceptionHandler'
+    set_addr $P938, control_937
+    $P938."handle_types"(.CONTROL_RETURN)
+    push_eh $P938
     .lex "self", self
-    .lex "$/", param_936
+    .lex "$/", param_939
 .annotate 'line', 224
-    find_lex $P937, "$/"
-    find_lex $P938, "$/"
-    unless_null $P938, vivify_247
-    $P938 = root_new ['parrot';'Hash']
-  vivify_247:
-    set $P939, $P938["mod_internal"]
-    unless_null $P939, vivify_248
-    new $P939, "Undef"
-  vivify_248:
-    $P940 = $P939."ast"()
-    $P941 = $P937."!make"($P940)
+    new $P940, "Undef"
+    .lex "$past", $P940
+    get_hll_global $P941, ["PAST"], "Regex"
+    find_lex $P942, "$/"
+    $P943 = $P941."new"("anchor" :named("pasttype"), "lwb" :named("subtype"), $P942 :named("node"))
+    store_lex "$past", $P943
+.annotate 'line', 225
+    find_lex $P944, "$/"
+    find_lex $P945, "$past"
+    $P946 = $P944."!make"($P945)
 .annotate 'line', 223
-    .return ($P941)
-  control_934:
+    .return ($P946)
+  control_937:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P942, exception, "payload"
-    .return ($P942)
+    getattribute $P947, exception, "payload"
+    .return ($P947)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<assert>"  :subid("59_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_946
-.annotate 'line', 227
-    new $P945, 'ExceptionHandler'
-    set_addr $P945, control_944
-    $P945."handle_types"(.CONTROL_RETURN)
-    push_eh $P945
-    .lex "self", self
-    .lex "$/", param_946
+.sub "metachar:sym<rwb>"  :subid("58_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_951
 .annotate 'line', 228
-    find_lex $P947, "$/"
-    find_lex $P948, "$/"
-    unless_null $P948, vivify_249
-    $P948 = root_new ['parrot';'Hash']
-  vivify_249:
-    set $P949, $P948["assertion"]
-    unless_null $P949, vivify_250
-    new $P949, "Undef"
-  vivify_250:
-    $P950 = $P949."ast"()
-    $P951 = $P947."!make"($P950)
-.annotate 'line', 227
-    .return ($P951)
-  control_944:
+    new $P950, 'ExceptionHandler'
+    set_addr $P950, control_949
+    $P950."handle_types"(.CONTROL_RETURN)
+    push_eh $P950
+    .lex "self", self
+    .lex "$/", param_951
+.annotate 'line', 229
+    new $P952, "Undef"
+    .lex "$past", $P952
+    get_hll_global $P953, ["PAST"], "Regex"
+    find_lex $P954, "$/"
+    $P955 = $P953."new"("anchor" :named("pasttype"), "rwb" :named("subtype"), $P954 :named("node"))
+    store_lex "$past", $P955
+.annotate 'line', 230
+    find_lex $P956, "$/"
+    find_lex $P957, "$past"
+    $P958 = $P956."!make"($P957)
+.annotate 'line', 228
+    .return ($P958)
+  control_949:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P952, exception, "payload"
-    .return ($P952)
+    getattribute $P959, exception, "payload"
+    .return ($P959)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<~>"  :subid("60_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_956
-.annotate 'line', 231
-    new $P955, 'ExceptionHandler'
-    set_addr $P955, control_954
-    $P955."handle_types"(.CONTROL_RETURN)
-    push_eh $P955
-    .lex "self", self
-    .lex "$/", param_956
-.annotate 'line', 232
-    find_lex $P957, "$/"
-    get_hll_global $P958, ["PAST"], "Regex"
+.sub "metachar:sym<bs>"  :subid("59_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_963
 .annotate 'line', 233
-    find_lex $P959, "$/"
-    unless_null $P959, vivify_251
-    $P959 = root_new ['parrot';'Hash']
-  vivify_251:
-    set $P960, $P959["EXPR"]
-    unless_null $P960, vivify_252
-    new $P960, "Undef"
-  vivify_252:
-    $P961 = $P960."ast"()
+    new $P962, 'ExceptionHandler'
+    set_addr $P962, control_961
+    $P962."handle_types"(.CONTROL_RETURN)
+    push_eh $P962
+    .lex "self", self
+    .lex "$/", param_963
 .annotate 'line', 234
-    get_hll_global $P962, ["PAST"], "Regex"
-.annotate 'line', 235
-    find_lex $P963, "$/"
-    unless_null $P963, vivify_253
-    $P963 = root_new ['parrot';'Hash']
-  vivify_253:
-    set $P964, $P963["GOAL"]
-    unless_null $P964, vivify_254
-    new $P964, "Undef"
-  vivify_254:
-    $P965 = $P964."ast"()
-.annotate 'line', 236
-    get_hll_global $P966, ["PAST"], "Regex"
-    find_lex $P967, "$/"
-    unless_null $P967, vivify_255
-    $P967 = root_new ['parrot';'Hash']
+    find_lex $P964, "$/"
+    find_lex $P965, "$/"
+    unless_null $P965, vivify_255
+    $P965 = root_new ['parrot';'Hash']
   vivify_255:
-    set $P968, $P967["GOAL"]
-    unless_null $P968, vivify_256
-    new $P968, "Undef"
+    set $P966, $P965["backslash"]
+    unless_null $P966, vivify_256
+    new $P966, "Undef"
   vivify_256:
-    set $S969, $P968
-    $P970 = $P966."new"("FAILGOAL", $S969, "subrule" :named("pasttype"), "method" :named("subtype"))
-    $P971 = $P962."new"($P965, $P970, "alt" :named("pasttype"))
-.annotate 'line', 234
-    $P972 = $P958."new"($P961, $P971, "concat" :named("pasttype"))
-.annotate 'line', 232
-    $P973 = $P957."!make"($P972)
-.annotate 'line', 231
-    .return ($P973)
-  control_954:
+    $P967 = $P966."ast"()
+    $P968 = $P964."!make"($P967)
+.annotate 'line', 233
+    .return ($P968)
+  control_961:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P974, exception, "payload"
-    .return ($P974)
+    getattribute $P969, exception, "payload"
+    .return ($P969)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<{*}>"  :subid("61_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_978
-.annotate 'line', 244
-    new $P977, 'ExceptionHandler'
-    set_addr $P977, control_976
-    $P977."handle_types"(.CONTROL_RETURN)
-    push_eh $P977
+.sub "metachar:sym<mod>"  :subid("60_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_973
+.annotate 'line', 237
+    new $P972, 'ExceptionHandler'
+    set_addr $P972, control_971
+    $P972."handle_types"(.CONTROL_RETURN)
+    push_eh $P972
     .lex "self", self
-    .lex "$/", param_978
-.annotate 'line', 245
-    new $P979, "Undef"
-    .lex "$past", $P979
-.annotate 'line', 246
-    find_lex $P982, "$/"
-    unless_null $P982, vivify_257
-    $P982 = root_new ['parrot';'Hash']
+    .lex "$/", param_973
+.annotate 'line', 238
+    find_lex $P974, "$/"
+    find_lex $P975, "$/"
+    unless_null $P975, vivify_257
+    $P975 = root_new ['parrot';'Hash']
   vivify_257:
-    set $P983, $P982["key"]
-    unless_null $P983, vivify_258
-    new $P983, "Undef"
+    set $P976, $P975["mod_internal"]
+    unless_null $P976, vivify_258
+    new $P976, "Undef"
   vivify_258:
-    if $P983, if_981
-    new $P991, "Integer"
-    assign $P991, 0
-    set $P980, $P991
-    goto if_981_end
-  if_981:
-    get_hll_global $P984, ["PAST"], "Regex"
+    $P977 = $P976."ast"()
+    $P978 = $P974."!make"($P977)
+.annotate 'line', 237
+    .return ($P978)
+  control_971:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P979, exception, "payload"
+    .return ($P979)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "metachar:sym<assert>"  :subid("61_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_983
+.annotate 'line', 241
+    new $P982, 'ExceptionHandler'
+    set_addr $P982, control_981
+    $P982."handle_types"(.CONTROL_RETURN)
+    push_eh $P982
+    .lex "self", self
+    .lex "$/", param_983
+.annotate 'line', 242
+    find_lex $P984, "$/"
     find_lex $P985, "$/"
     unless_null $P985, vivify_259
     $P985 = root_new ['parrot';'Hash']
   vivify_259:
-    set $P986, $P985["key"]
+    set $P986, $P985["assertion"]
     unless_null $P986, vivify_260
-    $P986 = root_new ['parrot';'ResizablePMCArray']
+    new $P986, "Undef"
   vivify_260:
-    set $P987, $P986[0]
-    unless_null $P987, vivify_261
-    new $P987, "Undef"
-  vivify_261:
-    set $S988, $P987
-    find_lex $P989, "$/"
-    $P990 = $P984."new"($S988, "reduce" :named("pasttype"), $P989 :named("node"))
-    set $P980, $P990
-  if_981_end:
-    store_lex "$past", $P980
-.annotate 'line', 248
-    find_lex $P992, "$/"
-    find_lex $P993, "$past"
-    $P994 = $P992."!make"($P993)
-.annotate 'line', 244
-    .return ($P994)
-  control_976:
+    $P987 = $P986."ast"()
+    $P988 = $P984."!make"($P987)
+.annotate 'line', 241
+    .return ($P988)
+  control_981:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P995, exception, "payload"
-    .return ($P995)
+    getattribute $P989, exception, "payload"
+    .return ($P989)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<var>"  :subid("62_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_999
-.annotate 'line', 251
-    new $P998, 'ExceptionHandler'
-    set_addr $P998, control_997
-    $P998."handle_types"(.CONTROL_RETURN)
-    push_eh $P998
+.sub "metachar:sym<~>"  :subid("62_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_993
+.annotate 'line', 245
+    new $P992, 'ExceptionHandler'
+    set_addr $P992, control_991
+    $P992."handle_types"(.CONTROL_RETURN)
+    push_eh $P992
     .lex "self", self
-    .lex "$/", param_999
-.annotate 'line', 252
-    new $P1000, "Undef"
-    .lex "$past", $P1000
-.annotate 'line', 253
-    new $P1001, "Undef"
-    .lex "$name", $P1001
-.annotate 'line', 251
-    find_lex $P1002, "$past"
-.annotate 'line', 253
-    find_lex $P1005, "$/"
-    unless_null $P1005, vivify_262
-    $P1005 = root_new ['parrot';'Hash']
+    .lex "$/", param_993
+.annotate 'line', 246
+    find_lex $P994, "$/"
+    get_hll_global $P995, ["PAST"], "Regex"
+.annotate 'line', 247
+    find_lex $P996, "$/"
+    unless_null $P996, vivify_261
+    $P996 = root_new ['parrot';'Hash']
+  vivify_261:
+    set $P997, $P996["EXPR"]
+    unless_null $P997, vivify_262
+    new $P997, "Undef"
   vivify_262:
-    set $P1006, $P1005["pos"]
-    unless_null $P1006, vivify_263
-    new $P1006, "Undef"
+    $P998 = $P997."ast"()
+.annotate 'line', 248
+    get_hll_global $P999, ["PAST"], "Regex"
+.annotate 'line', 249
+    find_lex $P1000, "$/"
+    unless_null $P1000, vivify_263
+    $P1000 = root_new ['parrot';'Hash']
   vivify_263:
-    if $P1006, if_1004
-    find_lex $P1010, "$/"
-    unless_null $P1010, vivify_264
-    $P1010 = root_new ['parrot';'Hash']
+    set $P1001, $P1000["GOAL"]
+    unless_null $P1001, vivify_264
+    new $P1001, "Undef"
   vivify_264:
-    set $P1011, $P1010["name"]
-    unless_null $P1011, vivify_265
-    new $P1011, "Undef"
+    $P1002 = $P1001."ast"()
+.annotate 'line', 250
+    get_hll_global $P1003, ["PAST"], "Regex"
+    find_lex $P1004, "$/"
+    unless_null $P1004, vivify_265
+    $P1004 = root_new ['parrot';'Hash']
   vivify_265:
-    set $S1012, $P1011
-    new $P1003, 'String'
-    set $P1003, $S1012
-    goto if_1004_end
-  if_1004:
-    find_lex $P1007, "$/"
-    unless_null $P1007, vivify_266
-    $P1007 = root_new ['parrot';'Hash']
+    set $P1005, $P1004["GOAL"]
+    unless_null $P1005, vivify_266
+    new $P1005, "Undef"
   vivify_266:
-    set $P1008, $P1007["pos"]
-    unless_null $P1008, vivify_267
-    new $P1008, "Undef"
-  vivify_267:
-    set $N1009, $P1008
-    new $P1003, 'Float'
-    set $P1003, $N1009
-  if_1004_end:
-    store_lex "$name", $P1003
-.annotate 'line', 254
-    find_lex $P1014, "$/"
-    unless_null $P1014, vivify_268
-    $P1014 = root_new ['parrot';'Hash']
-  vivify_268:
-    set $P1015, $P1014["quantified_atom"]
-    unless_null $P1015, vivify_269
-    new $P1015, "Undef"
-  vivify_269:
-    if $P1015, if_1013
-.annotate 'line', 265
-    get_hll_global $P1046, ["PAST"], "Regex"
-    find_lex $P1047, "$name"
-    find_lex $P1048, "$/"
-    $P1049 = $P1046."new"("!BACKREF", $P1047, "subrule" :named("pasttype"), "method" :named("subtype"), $P1048 :named("node"))
-    store_lex "$past", $P1049
-.annotate 'line', 264
-    goto if_1013_end
-  if_1013:
-.annotate 'line', 255
-    find_lex $P1016, "$/"
-    unless_null $P1016, vivify_270
-    $P1016 = root_new ['parrot';'Hash']
-  vivify_270:
-    set $P1017, $P1016["quantified_atom"]
-    unless_null $P1017, vivify_271
-    $P1017 = root_new ['parrot';'ResizablePMCArray']
-  vivify_271:
-    set $P1018, $P1017[0]
-    unless_null $P1018, vivify_272
-    new $P1018, "Undef"
-  vivify_272:
-    $P1019 = $P1018."ast"()
-    store_lex "$past", $P1019
-.annotate 'line', 256
-    find_lex $P1023, "$past"
-    $S1024 = $P1023."pasttype"()
-    iseq $I1025, $S1024, "quant"
-    if $I1025, if_1022
-    new $P1021, 'Integer'
-    set $P1021, $I1025
-    goto if_1022_end
-  if_1022:
-    find_lex $P1026, "$past"
-    unless_null $P1026, vivify_273
-    $P1026 = root_new ['parrot';'ResizablePMCArray']
-  vivify_273:
-    set $P1027, $P1026[0]
-    unless_null $P1027, vivify_274
-    new $P1027, "Undef"
-  vivify_274:
-    $S1028 = $P1027."pasttype"()
-    iseq $I1029, $S1028, "subrule"
-    new $P1021, 'Integer'
-    set $P1021, $I1029
-  if_1022_end:
-    if $P1021, if_1020
-.annotate 'line', 259
-    find_lex $P1035, "$past"
-    $S1036 = $P1035."pasttype"()
-    iseq $I1037, $S1036, "subrule"
-    if $I1037, if_1034
-.annotate 'line', 261
-    get_hll_global $P1041, ["PAST"], "Regex"
-    find_lex $P1042, "$past"
-    find_lex $P1043, "$name"
-    find_lex $P1044, "$/"
-    $P1045 = $P1041."new"($P1042, $P1043 :named("name"), "subcapture" :named("pasttype"), $P1044 :named("node"))
-    store_lex "$past", $P1045
-.annotate 'line', 260
-    goto if_1034_end
-  if_1034:
-.annotate 'line', 259
-    find_lex $P1038, "self"
-    find_lex $P1039, "$past"
-    find_lex $P1040, "$name"
-    $P1038."subrule_alias"($P1039, $P1040)
-  if_1034_end:
-    goto if_1020_end
-  if_1020:
-.annotate 'line', 257
-    find_lex $P1030, "self"
-    find_lex $P1031, "$past"
-    unless_null $P1031, vivify_275
-    $P1031 = root_new ['parrot';'ResizablePMCArray']
-  vivify_275:
-    set $P1032, $P1031[0]
-    unless_null $P1032, vivify_276
-    new $P1032, "Undef"
-  vivify_276:
-    find_lex $P1033, "$name"
-    $P1030."subrule_alias"($P1032, $P1033)
-  if_1020_end:
-  if_1013_end:
-.annotate 'line', 268
-    find_lex $P1050, "$/"
-    find_lex $P1051, "$past"
-    $P1052 = $P1050."!make"($P1051)
-.annotate 'line', 251
-    .return ($P1052)
-  control_997:
+    set $S1006, $P1005
+    $P1007 = $P1003."new"("FAILGOAL", $S1006, "subrule" :named("pasttype"), "method" :named("subtype"))
+    $P1008 = $P999."new"($P1002, $P1007, "alt" :named("pasttype"))
+.annotate 'line', 248
+    $P1009 = $P995."new"($P998, $P1008, "concat" :named("pasttype"))
+.annotate 'line', 246
+    $P1010 = $P994."!make"($P1009)
+.annotate 'line', 245
+    .return ($P1010)
+  control_991:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1053, exception, "payload"
-    .return ($P1053)
+    getattribute $P1011, exception, "payload"
+    .return ($P1011)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<PIR>"  :subid("63_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1057
-.annotate 'line', 271
-    new $P1056, 'ExceptionHandler'
-    set_addr $P1056, control_1055
-    $P1056."handle_types"(.CONTROL_RETURN)
-    push_eh $P1056
-    .lex "self", self
-    .lex "$/", param_1057
-.annotate 'line', 272
-    find_lex $P1058, "$/"
-    get_hll_global $P1059, ["PAST"], "Regex"
-.annotate 'line', 273
-    get_hll_global $P1060, ["PAST"], "Op"
-    find_lex $P1061, "$/"
-    unless_null $P1061, vivify_277
-    $P1061 = root_new ['parrot';'Hash']
-  vivify_277:
-    set $P1062, $P1061["pir"]
-    unless_null $P1062, vivify_278
-    new $P1062, "Undef"
-  vivify_278:
-    set $S1063, $P1062
-    $P1064 = $P1060."new"($S1063 :named("inline"), "inline" :named("pasttype"))
-    find_lex $P1065, "$/"
-    $P1066 = $P1059."new"($P1064, "pastnode" :named("pasttype"), $P1065 :named("node"))
-.annotate 'line', 272
-    $P1067 = $P1058."!make"($P1066)
-.annotate 'line', 271
-    .return ($P1067)
-  control_1055:
+.sub "metachar:sym<{*}>"  :subid("63_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1015
+.annotate 'line', 258
+    new $P1014, 'ExceptionHandler'
+    set_addr $P1014, control_1013
+    $P1014."handle_types"(.CONTROL_RETURN)
+    push_eh $P1014
+    .lex "self", self
+    .lex "$/", param_1015
+.annotate 'line', 259
+    new $P1016, "Undef"
+    .lex "$past", $P1016
+.annotate 'line', 260
+    find_lex $P1019, "$/"
+    unless_null $P1019, vivify_267
+    $P1019 = root_new ['parrot';'Hash']
+  vivify_267:
+    set $P1020, $P1019["key"]
+    unless_null $P1020, vivify_268
+    new $P1020, "Undef"
+  vivify_268:
+    if $P1020, if_1018
+    new $P1028, "Integer"
+    assign $P1028, 0
+    set $P1017, $P1028
+    goto if_1018_end
+  if_1018:
+    get_hll_global $P1021, ["PAST"], "Regex"
+    find_lex $P1022, "$/"
+    unless_null $P1022, vivify_269
+    $P1022 = root_new ['parrot';'Hash']
+  vivify_269:
+    set $P1023, $P1022["key"]
+    unless_null $P1023, vivify_270
+    $P1023 = root_new ['parrot';'ResizablePMCArray']
+  vivify_270:
+    set $P1024, $P1023[0]
+    unless_null $P1024, vivify_271
+    new $P1024, "Undef"
+  vivify_271:
+    set $S1025, $P1024
+    find_lex $P1026, "$/"
+    $P1027 = $P1021."new"($S1025, "reduce" :named("pasttype"), $P1026 :named("node"))
+    set $P1017, $P1027
+  if_1018_end:
+    store_lex "$past", $P1017
+.annotate 'line', 262
+    find_lex $P1029, "$/"
+    find_lex $P1030, "$past"
+    $P1031 = $P1029."!make"($P1030)
+.annotate 'line', 258
+    .return ($P1031)
+  control_1013:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1068, exception, "payload"
-    .return ($P1068)
+    getattribute $P1032, exception, "payload"
+    .return ($P1032)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<w>"  :subid("64_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1072
-.annotate 'line', 279
-    new $P1071, 'ExceptionHandler'
-    set_addr $P1071, control_1070
-    $P1071."handle_types"(.CONTROL_RETURN)
-    push_eh $P1071
-    .lex "self", self
-    .lex "$/", param_1072
-.annotate 'line', 280
-    new $P1073, "Undef"
-    .lex "$subtype", $P1073
-.annotate 'line', 281
-    new $P1074, "Undef"
-    .lex "$past", $P1074
-.annotate 'line', 280
-    find_lex $P1077, "$/"
-    unless_null $P1077, vivify_279
-    $P1077 = root_new ['parrot';'Hash']
-  vivify_279:
-    set $P1078, $P1077["sym"]
-    unless_null $P1078, vivify_280
-    new $P1078, "Undef"
+.sub "metachar:sym<var>"  :subid("64_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1036
+.annotate 'line', 265
+    new $P1035, 'ExceptionHandler'
+    set_addr $P1035, control_1034
+    $P1035."handle_types"(.CONTROL_RETURN)
+    push_eh $P1035
+    .lex "self", self
+    .lex "$/", param_1036
+.annotate 'line', 266
+    new $P1037, "Undef"
+    .lex "$past", $P1037
+.annotate 'line', 267
+    new $P1038, "Undef"
+    .lex "$name", $P1038
+.annotate 'line', 265
+    find_lex $P1039, "$past"
+.annotate 'line', 267
+    find_lex $P1042, "$/"
+    unless_null $P1042, vivify_272
+    $P1042 = root_new ['parrot';'Hash']
+  vivify_272:
+    set $P1043, $P1042["pos"]
+    unless_null $P1043, vivify_273
+    new $P1043, "Undef"
+  vivify_273:
+    if $P1043, if_1041
+    find_lex $P1047, "$/"
+    unless_null $P1047, vivify_274
+    $P1047 = root_new ['parrot';'Hash']
+  vivify_274:
+    set $P1048, $P1047["name"]
+    unless_null $P1048, vivify_275
+    new $P1048, "Undef"
+  vivify_275:
+    set $S1049, $P1048
+    new $P1040, 'String'
+    set $P1040, $S1049
+    goto if_1041_end
+  if_1041:
+    find_lex $P1044, "$/"
+    unless_null $P1044, vivify_276
+    $P1044 = root_new ['parrot';'Hash']
+  vivify_276:
+    set $P1045, $P1044["pos"]
+    unless_null $P1045, vivify_277
+    new $P1045, "Undef"
+  vivify_277:
+    set $N1046, $P1045
+    new $P1040, 'Float'
+    set $P1040, $N1046
+  if_1041_end:
+    store_lex "$name", $P1040
+.annotate 'line', 268
+    find_lex $P1051, "$/"
+    unless_null $P1051, vivify_278
+    $P1051 = root_new ['parrot';'Hash']
+  vivify_278:
+    set $P1052, $P1051["quantified_atom"]
+    unless_null $P1052, vivify_279
+    new $P1052, "Undef"
+  vivify_279:
+    if $P1052, if_1050
+.annotate 'line', 279
+    get_hll_global $P1083, ["PAST"], "Regex"
+    find_lex $P1084, "$name"
+    find_lex $P1085, "$/"
+    $P1086 = $P1083."new"("!BACKREF", $P1084, "subrule" :named("pasttype"), "method" :named("subtype"), $P1085 :named("node"))
+    store_lex "$past", $P1086
+.annotate 'line', 278
+    goto if_1050_end
+  if_1050:
+.annotate 'line', 269
+    find_lex $P1053, "$/"
+    unless_null $P1053, vivify_280
+    $P1053 = root_new ['parrot';'Hash']
   vivify_280:
-    set $S1079, $P1078
-    iseq $I1080, $S1079, "n"
-    if $I1080, if_1076
-    find_lex $P1082, "$/"
-    unless_null $P1082, vivify_281
-    $P1082 = root_new ['parrot';'Hash']
+    set $P1054, $P1053["quantified_atom"]
+    unless_null $P1054, vivify_281
+    $P1054 = root_new ['parrot';'ResizablePMCArray']
   vivify_281:
-    set $P1083, $P1082["sym"]
-    unless_null $P1083, vivify_282
-    new $P1083, "Undef"
+    set $P1055, $P1054[0]
+    unless_null $P1055, vivify_282
+    new $P1055, "Undef"
   vivify_282:
-    set $S1084, $P1083
-    new $P1075, 'String'
-    set $P1075, $S1084
-    goto if_1076_end
-  if_1076:
-    new $P1081, "String"
-    assign $P1081, "nl"
-    set $P1075, $P1081
-  if_1076_end:
-    store_lex "$subtype", $P1075
-.annotate 'line', 281
-    get_hll_global $P1085, ["PAST"], "Regex"
-    find_lex $P1086, "$subtype"
-    find_lex $P1087, "$/"
-    $P1088 = $P1085."new"("charclass" :named("pasttype"), $P1086 :named("subtype"), $P1087 :named("node"))
-    store_lex "$past", $P1088
+    $P1056 = $P1055."ast"()
+    store_lex "$past", $P1056
+.annotate 'line', 270
+    find_lex $P1060, "$past"
+    $S1061 = $P1060."pasttype"()
+    iseq $I1062, $S1061, "quant"
+    if $I1062, if_1059
+    new $P1058, 'Integer'
+    set $P1058, $I1062
+    goto if_1059_end
+  if_1059:
+    find_lex $P1063, "$past"
+    unless_null $P1063, vivify_283
+    $P1063 = root_new ['parrot';'ResizablePMCArray']
+  vivify_283:
+    set $P1064, $P1063[0]
+    unless_null $P1064, vivify_284
+    new $P1064, "Undef"
+  vivify_284:
+    $S1065 = $P1064."pasttype"()
+    iseq $I1066, $S1065, "subrule"
+    new $P1058, 'Integer'
+    set $P1058, $I1066
+  if_1059_end:
+    if $P1058, if_1057
+.annotate 'line', 273
+    find_lex $P1072, "$past"
+    $S1073 = $P1072."pasttype"()
+    iseq $I1074, $S1073, "subrule"
+    if $I1074, if_1071
+.annotate 'line', 275
+    get_hll_global $P1078, ["PAST"], "Regex"
+    find_lex $P1079, "$past"
+    find_lex $P1080, "$name"
+    find_lex $P1081, "$/"
+    $P1082 = $P1078."new"($P1079, $P1080 :named("name"), "subcapture" :named("pasttype"), $P1081 :named("node"))
+    store_lex "$past", $P1082
+.annotate 'line', 274
+    goto if_1071_end
+  if_1071:
+.annotate 'line', 273
+    find_lex $P1075, "self"
+    find_lex $P1076, "$past"
+    find_lex $P1077, "$name"
+    $P1075."subrule_alias"($P1076, $P1077)
+  if_1071_end:
+    goto if_1057_end
+  if_1057:
+.annotate 'line', 271
+    find_lex $P1067, "self"
+    find_lex $P1068, "$past"
+    unless_null $P1068, vivify_285
+    $P1068 = root_new ['parrot';'ResizablePMCArray']
+  vivify_285:
+    set $P1069, $P1068[0]
+    unless_null $P1069, vivify_286
+    new $P1069, "Undef"
+  vivify_286:
+    find_lex $P1070, "$name"
+    $P1067."subrule_alias"($P1069, $P1070)
+  if_1057_end:
+  if_1050_end:
 .annotate 'line', 282
-    find_lex $P1089, "$/"
-    find_lex $P1090, "$past"
-    $P1091 = $P1089."!make"($P1090)
-.annotate 'line', 279
-    .return ($P1091)
-  control_1070:
+    find_lex $P1087, "$/"
+    find_lex $P1088, "$past"
+    $P1089 = $P1087."!make"($P1088)
+.annotate 'line', 265
+    .return ($P1089)
+  control_1034:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1092, exception, "payload"
-    .return ($P1092)
+    getattribute $P1090, exception, "payload"
+    .return ($P1090)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<b>"  :subid("65_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1096
+.sub "metachar:sym<PIR>"  :subid("65_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1094
 .annotate 'line', 285
-    new $P1095, 'ExceptionHandler'
-    set_addr $P1095, control_1094
-    $P1095."handle_types"(.CONTROL_RETURN)
-    push_eh $P1095
+    new $P1093, 'ExceptionHandler'
+    set_addr $P1093, control_1092
+    $P1093."handle_types"(.CONTROL_RETURN)
+    push_eh $P1093
     .lex "self", self
-    .lex "$/", param_1096
+    .lex "$/", param_1094
 .annotate 'line', 286
-    new $P1097, "Undef"
-    .lex "$past", $P1097
-    get_hll_global $P1098, ["PAST"], "Regex"
+    find_lex $P1095, "$/"
+    get_hll_global $P1096, ["PAST"], "Regex"
 .annotate 'line', 287
-    find_lex $P1099, "$/"
-    unless_null $P1099, vivify_283
-    $P1099 = root_new ['parrot';'Hash']
-  vivify_283:
-    set $P1100, $P1099["sym"]
-    unless_null $P1100, vivify_284
-    new $P1100, "Undef"
-  vivify_284:
-    set $S1101, $P1100
-    iseq $I1102, $S1101, "B"
-    find_lex $P1103, "$/"
-    $P1104 = $P1098."new"("\b", "enumcharlist" :named("pasttype"), $I1102 :named("negate"), $P1103 :named("node"))
+    get_hll_global $P1097, ["PAST"], "Op"
+    find_lex $P1098, "$/"
+    unless_null $P1098, vivify_287
+    $P1098 = root_new ['parrot';'Hash']
+  vivify_287:
+    set $P1099, $P1098["pir"]
+    unless_null $P1099, vivify_288
+    new $P1099, "Undef"
+  vivify_288:
+    set $S1100, $P1099
+    $P1101 = $P1097."new"($S1100 :named("inline"), "inline" :named("pasttype"))
+    find_lex $P1102, "$/"
+    $P1103 = $P1096."new"($P1101, "pastnode" :named("pasttype"), $P1102 :named("node"))
 .annotate 'line', 286
-    store_lex "$past", $P1104
-.annotate 'line', 288
-    find_lex $P1105, "$/"
-    find_lex $P1106, "$past"
-    $P1107 = $P1105."!make"($P1106)
+    $P1104 = $P1095."!make"($P1103)
 .annotate 'line', 285
-    .return ($P1107)
-  control_1094:
+    .return ($P1104)
+  control_1092:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1108, exception, "payload"
-    .return ($P1108)
+    getattribute $P1105, exception, "payload"
+    .return ($P1105)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<e>"  :subid("66_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1112
-.annotate 'line', 291
-    new $P1111, 'ExceptionHandler'
-    set_addr $P1111, control_1110
-    $P1111."handle_types"(.CONTROL_RETURN)
-    push_eh $P1111
-    .lex "self", self
-    .lex "$/", param_1112
-.annotate 'line', 292
-    new $P1113, "Undef"
-    .lex "$past", $P1113
-    get_hll_global $P1114, ["PAST"], "Regex"
+.sub "backslash:sym<w>"  :subid("66_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1109
 .annotate 'line', 293
-    find_lex $P1115, "$/"
-    unless_null $P1115, vivify_285
-    $P1115 = root_new ['parrot';'Hash']
-  vivify_285:
-    set $P1116, $P1115["sym"]
-    unless_null $P1116, vivify_286
-    new $P1116, "Undef"
-  vivify_286:
-    set $S1117, $P1116
-    iseq $I1118, $S1117, "E"
-    find_lex $P1119, "$/"
-    $P1120 = $P1114."new"("\e", "enumcharlist" :named("pasttype"), $I1118 :named("negate"), $P1119 :named("node"))
-.annotate 'line', 292
-    store_lex "$past", $P1120
+    new $P1108, 'ExceptionHandler'
+    set_addr $P1108, control_1107
+    $P1108."handle_types"(.CONTROL_RETURN)
+    push_eh $P1108
+    .lex "self", self
+    .lex "$/", param_1109
+.annotate 'line', 294
+    new $P1110, "Undef"
+    .lex "$subtype", $P1110
+.annotate 'line', 295
+    new $P1111, "Undef"
+    .lex "$past", $P1111
 .annotate 'line', 294
-    find_lex $P1121, "$/"
-    find_lex $P1122, "$past"
-    $P1123 = $P1121."!make"($P1122)
-.annotate 'line', 291
-    .return ($P1123)
-  control_1110:
+    find_lex $P1114, "$/"
+    unless_null $P1114, vivify_289
+    $P1114 = root_new ['parrot';'Hash']
+  vivify_289:
+    set $P1115, $P1114["sym"]
+    unless_null $P1115, vivify_290
+    new $P1115, "Undef"
+  vivify_290:
+    set $S1116, $P1115
+    iseq $I1117, $S1116, "n"
+    if $I1117, if_1113
+    find_lex $P1119, "$/"
+    unless_null $P1119, vivify_291
+    $P1119 = root_new ['parrot';'Hash']
+  vivify_291:
+    set $P1120, $P1119["sym"]
+    unless_null $P1120, vivify_292
+    new $P1120, "Undef"
+  vivify_292:
+    set $S1121, $P1120
+    new $P1112, 'String'
+    set $P1112, $S1121
+    goto if_1113_end
+  if_1113:
+    new $P1118, "String"
+    assign $P1118, "nl"
+    set $P1112, $P1118
+  if_1113_end:
+    store_lex "$subtype", $P1112
+.annotate 'line', 295
+    get_hll_global $P1122, ["PAST"], "Regex"
+    find_lex $P1123, "$subtype"
+    find_lex $P1124, "$/"
+    $P1125 = $P1122."new"("charclass" :named("pasttype"), $P1123 :named("subtype"), $P1124 :named("node"))
+    store_lex "$past", $P1125
+.annotate 'line', 296
+    find_lex $P1126, "$/"
+    find_lex $P1127, "$past"
+    $P1128 = $P1126."!make"($P1127)
+.annotate 'line', 293
+    .return ($P1128)
+  control_1107:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1124, exception, "payload"
-    .return ($P1124)
+    getattribute $P1129, exception, "payload"
+    .return ($P1129)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<f>"  :subid("67_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1128
-.annotate 'line', 297
-    new $P1127, 'ExceptionHandler'
-    set_addr $P1127, control_1126
-    $P1127."handle_types"(.CONTROL_RETURN)
-    push_eh $P1127
-    .lex "self", self
-    .lex "$/", param_1128
-.annotate 'line', 298
-    new $P1129, "Undef"
-    .lex "$past", $P1129
-    get_hll_global $P1130, ["PAST"], "Regex"
+.sub "backslash:sym<b>"  :subid("67_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1133
 .annotate 'line', 299
-    find_lex $P1131, "$/"
-    unless_null $P1131, vivify_287
-    $P1131 = root_new ['parrot';'Hash']
-  vivify_287:
-    set $P1132, $P1131["sym"]
-    unless_null $P1132, vivify_288
-    new $P1132, "Undef"
-  vivify_288:
-    set $S1133, $P1132
-    iseq $I1134, $S1133, "F"
-    find_lex $P1135, "$/"
-    $P1136 = $P1130."new"("\f", "enumcharlist" :named("pasttype"), $I1134 :named("negate"), $P1135 :named("node"))
-.annotate 'line', 298
-    store_lex "$past", $P1136
+    new $P1132, 'ExceptionHandler'
+    set_addr $P1132, control_1131
+    $P1132."handle_types"(.CONTROL_RETURN)
+    push_eh $P1132
+    .lex "self", self
+    .lex "$/", param_1133
 .annotate 'line', 300
-    find_lex $P1137, "$/"
-    find_lex $P1138, "$past"
-    $P1139 = $P1137."!make"($P1138)
-.annotate 'line', 297
-    .return ($P1139)
-  control_1126:
+    new $P1134, "Undef"
+    .lex "$past", $P1134
+    get_hll_global $P1135, ["PAST"], "Regex"
+.annotate 'line', 301
+    find_lex $P1136, "$/"
+    unless_null $P1136, vivify_293
+    $P1136 = root_new ['parrot';'Hash']
+  vivify_293:
+    set $P1137, $P1136["sym"]
+    unless_null $P1137, vivify_294
+    new $P1137, "Undef"
+  vivify_294:
+    set $S1138, $P1137
+    iseq $I1139, $S1138, "B"
+    find_lex $P1140, "$/"
+    $P1141 = $P1135."new"("\b", "enumcharlist" :named("pasttype"), $I1139 :named("negate"), $P1140 :named("node"))
+.annotate 'line', 300
+    store_lex "$past", $P1141
+.annotate 'line', 302
+    find_lex $P1142, "$/"
+    find_lex $P1143, "$past"
+    $P1144 = $P1142."!make"($P1143)
+.annotate 'line', 299
+    .return ($P1144)
+  control_1131:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1140, exception, "payload"
-    .return ($P1140)
+    getattribute $P1145, exception, "payload"
+    .return ($P1145)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<h>"  :subid("68_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1144
-.annotate 'line', 303
-    new $P1143, 'ExceptionHandler'
-    set_addr $P1143, control_1142
-    $P1143."handle_types"(.CONTROL_RETURN)
-    push_eh $P1143
-    .lex "self", self
-    .lex "$/", param_1144
-.annotate 'line', 304
-    new $P1145, "Undef"
-    .lex "$past", $P1145
-    get_hll_global $P1146, ["PAST"], "Regex"
+.sub "backslash:sym<e>"  :subid("68_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1149
 .annotate 'line', 305
-    find_lex $P1147, "$/"
-    unless_null $P1147, vivify_289
-    $P1147 = root_new ['parrot';'Hash']
-  vivify_289:
-    set $P1148, $P1147["sym"]
-    unless_null $P1148, vivify_290
-    new $P1148, "Undef"
-  vivify_290:
-    set $S1149, $P1148
-    iseq $I1150, $S1149, "H"
-    find_lex $P1151, "$/"
-    $P1152 = $P1146."new"(unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", "enumcharlist" :named("pasttype"), $I1150 :named("negate"), $P1151 :named("node"))
-.annotate 'line', 304
-    store_lex "$past", $P1152
+    new $P1148, 'ExceptionHandler'
+    set_addr $P1148, control_1147
+    $P1148."handle_types"(.CONTROL_RETURN)
+    push_eh $P1148
+    .lex "self", self
+    .lex "$/", param_1149
+.annotate 'line', 306
+    new $P1150, "Undef"
+    .lex "$past", $P1150
+    get_hll_global $P1151, ["PAST"], "Regex"
+.annotate 'line', 307
+    find_lex $P1152, "$/"
+    unless_null $P1152, vivify_295
+    $P1152 = root_new ['parrot';'Hash']
+  vivify_295:
+    set $P1153, $P1152["sym"]
+    unless_null $P1153, vivify_296
+    new $P1153, "Undef"
+  vivify_296:
+    set $S1154, $P1153
+    iseq $I1155, $S1154, "E"
+    find_lex $P1156, "$/"
+    $P1157 = $P1151."new"("\e", "enumcharlist" :named("pasttype"), $I1155 :named("negate"), $P1156 :named("node"))
 .annotate 'line', 306
-    find_lex $P1153, "$/"
-    find_lex $P1154, "$past"
-    $P1155 = $P1153."!make"($P1154)
-.annotate 'line', 303
-    .return ($P1155)
-  control_1142:
+    store_lex "$past", $P1157
+.annotate 'line', 308
+    find_lex $P1158, "$/"
+    find_lex $P1159, "$past"
+    $P1160 = $P1158."!make"($P1159)
+.annotate 'line', 305
+    .return ($P1160)
+  control_1147:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1156, exception, "payload"
-    .return ($P1156)
+    getattribute $P1161, exception, "payload"
+    .return ($P1161)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<r>"  :subid("69_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1160
-.annotate 'line', 309
-    new $P1159, 'ExceptionHandler'
-    set_addr $P1159, control_1158
-    $P1159."handle_types"(.CONTROL_RETURN)
-    push_eh $P1159
-    .lex "self", self
-    .lex "$/", param_1160
-.annotate 'line', 310
-    new $P1161, "Undef"
-    .lex "$past", $P1161
-    get_hll_global $P1162, ["PAST"], "Regex"
+.sub "backslash:sym<f>"  :subid("69_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1165
 .annotate 'line', 311
-    find_lex $P1163, "$/"
-    unless_null $P1163, vivify_291
-    $P1163 = root_new ['parrot';'Hash']
-  vivify_291:
-    set $P1164, $P1163["sym"]
-    unless_null $P1164, vivify_292
-    new $P1164, "Undef"
-  vivify_292:
-    set $S1165, $P1164
-    iseq $I1166, $S1165, "R"
-    find_lex $P1167, "$/"
-    $P1168 = $P1162."new"("\r", "enumcharlist" :named("pasttype"), $I1166 :named("negate"), $P1167 :named("node"))
-.annotate 'line', 310
-    store_lex "$past", $P1168
+    new $P1164, 'ExceptionHandler'
+    set_addr $P1164, control_1163
+    $P1164."handle_types"(.CONTROL_RETURN)
+    push_eh $P1164
+    .lex "self", self
+    .lex "$/", param_1165
+.annotate 'line', 312
+    new $P1166, "Undef"
+    .lex "$past", $P1166
+    get_hll_global $P1167, ["PAST"], "Regex"
+.annotate 'line', 313
+    find_lex $P1168, "$/"
+    unless_null $P1168, vivify_297
+    $P1168 = root_new ['parrot';'Hash']
+  vivify_297:
+    set $P1169, $P1168["sym"]
+    unless_null $P1169, vivify_298
+    new $P1169, "Undef"
+  vivify_298:
+    set $S1170, $P1169
+    iseq $I1171, $S1170, "F"
+    find_lex $P1172, "$/"
+    $P1173 = $P1167."new"("\f", "enumcharlist" :named("pasttype"), $I1171 :named("negate"), $P1172 :named("node"))
 .annotate 'line', 312
-    find_lex $P1169, "$/"
-    find_lex $P1170, "$past"
-    $P1171 = $P1169."!make"($P1170)
-.annotate 'line', 309
-    .return ($P1171)
-  control_1158:
+    store_lex "$past", $P1173
+.annotate 'line', 314
+    find_lex $P1174, "$/"
+    find_lex $P1175, "$past"
+    $P1176 = $P1174."!make"($P1175)
+.annotate 'line', 311
+    .return ($P1176)
+  control_1163:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1172, exception, "payload"
-    .return ($P1172)
+    getattribute $P1177, exception, "payload"
+    .return ($P1177)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<t>"  :subid("70_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1176
-.annotate 'line', 315
-    new $P1175, 'ExceptionHandler'
-    set_addr $P1175, control_1174
-    $P1175."handle_types"(.CONTROL_RETURN)
-    push_eh $P1175
-    .lex "self", self
-    .lex "$/", param_1176
-.annotate 'line', 316
-    new $P1177, "Undef"
-    .lex "$past", $P1177
-    get_hll_global $P1178, ["PAST"], "Regex"
+.sub "backslash:sym<h>"  :subid("70_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1181
 .annotate 'line', 317
-    find_lex $P1179, "$/"
-    unless_null $P1179, vivify_293
-    $P1179 = root_new ['parrot';'Hash']
-  vivify_293:
-    set $P1180, $P1179["sym"]
-    unless_null $P1180, vivify_294
-    new $P1180, "Undef"
-  vivify_294:
-    set $S1181, $P1180
-    iseq $I1182, $S1181, "T"
-    find_lex $P1183, "$/"
-    $P1184 = $P1178."new"("\t", "enumcharlist" :named("pasttype"), $I1182 :named("negate"), $P1183 :named("node"))
-.annotate 'line', 316
-    store_lex "$past", $P1184
+    new $P1180, 'ExceptionHandler'
+    set_addr $P1180, control_1179
+    $P1180."handle_types"(.CONTROL_RETURN)
+    push_eh $P1180
+    .lex "self", self
+    .lex "$/", param_1181
+.annotate 'line', 318
+    new $P1182, "Undef"
+    .lex "$past", $P1182
+    get_hll_global $P1183, ["PAST"], "Regex"
+.annotate 'line', 319
+    find_lex $P1184, "$/"
+    unless_null $P1184, vivify_299
+    $P1184 = root_new ['parrot';'Hash']
+  vivify_299:
+    set $P1185, $P1184["sym"]
+    unless_null $P1185, vivify_300
+    new $P1185, "Undef"
+  vivify_300:
+    set $S1186, $P1185
+    iseq $I1187, $S1186, "H"
+    find_lex $P1188, "$/"
+    $P1189 = $P1183."new"(unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", "enumcharlist" :named("pasttype"), $I1187 :named("negate"), $P1188 :named("node"))
 .annotate 'line', 318
-    find_lex $P1185, "$/"
-    find_lex $P1186, "$past"
-    $P1187 = $P1185."!make"($P1186)
-.annotate 'line', 315
-    .return ($P1187)
-  control_1174:
+    store_lex "$past", $P1189
+.annotate 'line', 320
+    find_lex $P1190, "$/"
+    find_lex $P1191, "$past"
+    $P1192 = $P1190."!make"($P1191)
+.annotate 'line', 317
+    .return ($P1192)
+  control_1179:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1188, exception, "payload"
-    .return ($P1188)
+    getattribute $P1193, exception, "payload"
+    .return ($P1193)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<v>"  :subid("71_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1192
-.annotate 'line', 321
-    new $P1191, 'ExceptionHandler'
-    set_addr $P1191, control_1190
-    $P1191."handle_types"(.CONTROL_RETURN)
-    push_eh $P1191
+.sub "backslash:sym<r>"  :subid("71_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1197
+.annotate 'line', 323
+    new $P1196, 'ExceptionHandler'
+    set_addr $P1196, control_1195
+    $P1196."handle_types"(.CONTROL_RETURN)
+    push_eh $P1196
     .lex "self", self
-    .lex "$/", param_1192
-.annotate 'line', 322
-    new $P1193, "Undef"
-    .lex "$past", $P1193
-    get_hll_global $P1194, ["PAST"], "Regex"
+    .lex "$/", param_1197
 .annotate 'line', 324
-    find_lex $P1195, "$/"
-    unless_null $P1195, vivify_295
-    $P1195 = root_new ['parrot';'Hash']
-  vivify_295:
-    set $P1196, $P1195["sym"]
-    unless_null $P1196, vivify_296
-    new $P1196, "Undef"
-  vivify_296:
-    set $S1197, $P1196
-    iseq $I1198, $S1197, "V"
-    find_lex $P1199, "$/"
-    $P1200 = $P1194."new"(unicode:"\n\x{b}\f\r\x{85}\u2028\u2029", "enumcharlist" :named("pasttype"), $I1198 :named("negate"), $P1199 :named("node"))
-.annotate 'line', 322
-    store_lex "$past", $P1200
+    new $P1198, "Undef"
+    .lex "$past", $P1198
+    get_hll_global $P1199, ["PAST"], "Regex"
 .annotate 'line', 325
-    find_lex $P1201, "$/"
-    find_lex $P1202, "$past"
-    $P1203 = $P1201."!make"($P1202)
-.annotate 'line', 321
-    .return ($P1203)
-  control_1190:
+    find_lex $P1200, "$/"
+    unless_null $P1200, vivify_301
+    $P1200 = root_new ['parrot';'Hash']
+  vivify_301:
+    set $P1201, $P1200["sym"]
+    unless_null $P1201, vivify_302
+    new $P1201, "Undef"
+  vivify_302:
+    set $S1202, $P1201
+    iseq $I1203, $S1202, "R"
+    find_lex $P1204, "$/"
+    $P1205 = $P1199."new"("\r", "enumcharlist" :named("pasttype"), $I1203 :named("negate"), $P1204 :named("node"))
+.annotate 'line', 324
+    store_lex "$past", $P1205
+.annotate 'line', 326
+    find_lex $P1206, "$/"
+    find_lex $P1207, "$past"
+    $P1208 = $P1206."!make"($P1207)
+.annotate 'line', 323
+    .return ($P1208)
+  control_1195:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1204, exception, "payload"
-    .return ($P1204)
+    getattribute $P1209, exception, "payload"
+    .return ($P1209)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<o>"  :subid("72_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1208
-.annotate 'line', 328
-    new $P1207, 'ExceptionHandler'
-    set_addr $P1207, control_1206
-    $P1207."handle_types"(.CONTROL_RETURN)
-    push_eh $P1207
-    .lex "self", self
-    .lex "$/", param_1208
+.sub "backslash:sym<t>"  :subid("72_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1213
 .annotate 'line', 329
-    new $P1209, "Undef"
-    .lex "$octlit", $P1209
+    new $P1212, 'ExceptionHandler'
+    set_addr $P1212, control_1211
+    $P1212."handle_types"(.CONTROL_RETURN)
+    push_eh $P1212
+    .lex "self", self
+    .lex "$/", param_1213
 .annotate 'line', 330
-    get_hll_global $P1210, ["HLL";"Actions"], "ints_to_string"
-    find_lex $P1213, "$/"
-    unless_null $P1213, vivify_297
-    $P1213 = root_new ['parrot';'Hash']
-  vivify_297:
-    set $P1214, $P1213["octint"]
-    unless_null $P1214, vivify_298
     new $P1214, "Undef"
-  vivify_298:
-    unless $P1214, unless_1212
-    set $P1211, $P1214
-    goto unless_1212_end
-  unless_1212:
-    find_lex $P1215, "$/"
-    unless_null $P1215, vivify_299
-    $P1215 = root_new ['parrot';'Hash']
-  vivify_299:
-    set $P1216, $P1215["octints"]
-    unless_null $P1216, vivify_300
-    $P1216 = root_new ['parrot';'Hash']
-  vivify_300:
-    set $P1217, $P1216["octint"]
-    unless_null $P1217, vivify_301
-    new $P1217, "Undef"
-  vivify_301:
-    set $P1211, $P1217
-  unless_1212_end:
-    $P1218 = $P1210($P1211)
-    store_lex "$octlit", $P1218
+    .lex "$past", $P1214
+    get_hll_global $P1215, ["PAST"], "Regex"
 .annotate 'line', 331
-    find_lex $P1219, "$/"
-    find_lex $P1222, "$/"
-    unless_null $P1222, vivify_302
-    $P1222 = root_new ['parrot';'Hash']
-  vivify_302:
-    set $P1223, $P1222["sym"]
-    unless_null $P1223, vivify_303
-    new $P1223, "Undef"
+    find_lex $P1216, "$/"
+    unless_null $P1216, vivify_303
+    $P1216 = root_new ['parrot';'Hash']
   vivify_303:
-    set $S1224, $P1223
-    iseq $I1225, $S1224, "O"
-    if $I1225, if_1221
-.annotate 'line', 334
-    get_hll_global $P1230, ["PAST"], "Regex"
-    find_lex $P1231, "$octlit"
-    find_lex $P1232, "$/"
-    $P1233 = $P1230."new"($P1231, "literal" :named("pasttype"), $P1232 :named("node"))
-    set $P1220, $P1233
-.annotate 'line', 331
-    goto if_1221_end
-  if_1221:
+    set $P1217, $P1216["sym"]
+    unless_null $P1217, vivify_304
+    new $P1217, "Undef"
+  vivify_304:
+    set $S1218, $P1217
+    iseq $I1219, $S1218, "T"
+    find_lex $P1220, "$/"
+    $P1221 = $P1215."new"("\t", "enumcharlist" :named("pasttype"), $I1219 :named("negate"), $P1220 :named("node"))
+.annotate 'line', 330
+    store_lex "$past", $P1221
 .annotate 'line', 332
-    get_hll_global $P1226, ["PAST"], "Regex"
-    find_lex $P1227, "$octlit"
-    find_lex $P1228, "$/"
-    $P1229 = $P1226."new"($P1227, "enumcharlist" :named("pasttype"), 1 :named("negate"), $P1228 :named("node"))
-    set $P1220, $P1229
-  if_1221_end:
-    $P1234 = $P1219."!make"($P1220)
-.annotate 'line', 328
-    .return ($P1234)
-  control_1206:
+    find_lex $P1222, "$/"
+    find_lex $P1223, "$past"
+    $P1224 = $P1222."!make"($P1223)
+.annotate 'line', 329
+    .return ($P1224)
+  control_1211:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1235, exception, "payload"
-    .return ($P1235)
+    getattribute $P1225, exception, "payload"
+    .return ($P1225)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<x>"  :subid("73_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1239
-.annotate 'line', 337
-    new $P1238, 'ExceptionHandler'
-    set_addr $P1238, control_1237
-    $P1238."handle_types"(.CONTROL_RETURN)
-    push_eh $P1238
+.sub "backslash:sym<v>"  :subid("73_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1229
+.annotate 'line', 335
+    new $P1228, 'ExceptionHandler'
+    set_addr $P1228, control_1227
+    $P1228."handle_types"(.CONTROL_RETURN)
+    push_eh $P1228
     .lex "self", self
-    .lex "$/", param_1239
+    .lex "$/", param_1229
+.annotate 'line', 336
+    new $P1230, "Undef"
+    .lex "$past", $P1230
+    get_hll_global $P1231, ["PAST"], "Regex"
 .annotate 'line', 338
-    new $P1240, "Undef"
-    .lex "$hexlit", $P1240
-.annotate 'line', 339
-    get_hll_global $P1241, ["HLL";"Actions"], "ints_to_string"
-    find_lex $P1244, "$/"
-    unless_null $P1244, vivify_304
-    $P1244 = root_new ['parrot';'Hash']
-  vivify_304:
-    set $P1245, $P1244["hexint"]
-    unless_null $P1245, vivify_305
-    new $P1245, "Undef"
+    find_lex $P1232, "$/"
+    unless_null $P1232, vivify_305
+    $P1232 = root_new ['parrot';'Hash']
   vivify_305:
-    unless $P1245, unless_1243
-    set $P1242, $P1245
-    goto unless_1243_end
-  unless_1243:
-    find_lex $P1246, "$/"
-    unless_null $P1246, vivify_306
-    $P1246 = root_new ['parrot';'Hash']
+    set $P1233, $P1232["sym"]
+    unless_null $P1233, vivify_306
+    new $P1233, "Undef"
   vivify_306:
-    set $P1247, $P1246["hexints"]
-    unless_null $P1247, vivify_307
-    $P1247 = root_new ['parrot';'Hash']
-  vivify_307:
-    set $P1248, $P1247["hexint"]
-    unless_null $P1248, vivify_308
-    new $P1248, "Undef"
-  vivify_308:
-    set $P1242, $P1248
-  unless_1243_end:
-    $P1249 = $P1241($P1242)
-    store_lex "$hexlit", $P1249
-.annotate 'line', 340
-    find_lex $P1250, "$/"
-    find_lex $P1253, "$/"
-    unless_null $P1253, vivify_309
-    $P1253 = root_new ['parrot';'Hash']
-  vivify_309:
-    set $P1254, $P1253["sym"]
-    unless_null $P1254, vivify_310
-    new $P1254, "Undef"
-  vivify_310:
-    set $S1255, $P1254
-    iseq $I1256, $S1255, "X"
-    if $I1256, if_1252
-.annotate 'line', 343
-    get_hll_global $P1261, ["PAST"], "Regex"
-    find_lex $P1262, "$hexlit"
-    find_lex $P1263, "$/"
-    $P1264 = $P1261."new"($P1262, "literal" :named("pasttype"), $P1263 :named("node"))
-    set $P1251, $P1264
-.annotate 'line', 340
-    goto if_1252_end
-  if_1252:
-.annotate 'line', 341
-    get_hll_global $P1257, ["PAST"], "Regex"
-    find_lex $P1258, "$hexlit"
-    find_lex $P1259, "$/"
-    $P1260 = $P1257."new"($P1258, "enumcharlist" :named("pasttype"), 1 :named("negate"), $P1259 :named("node"))
-    set $P1251, $P1260
-  if_1252_end:
-    $P1265 = $P1250."!make"($P1251)
-.annotate 'line', 337
-    .return ($P1265)
-  control_1237:
+    set $S1234, $P1233
+    iseq $I1235, $S1234, "V"
+    find_lex $P1236, "$/"
+    $P1237 = $P1231."new"(unicode:"\n\x{b}\f\r\x{85}\u2028\u2029", "enumcharlist" :named("pasttype"), $I1235 :named("negate"), $P1236 :named("node"))
+.annotate 'line', 336
+    store_lex "$past", $P1237
+.annotate 'line', 339
+    find_lex $P1238, "$/"
+    find_lex $P1239, "$past"
+    $P1240 = $P1238."!make"($P1239)
+.annotate 'line', 335
+    .return ($P1240)
+  control_1227:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1266, exception, "payload"
-    .return ($P1266)
+    getattribute $P1241, exception, "payload"
+    .return ($P1241)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<c>"  :subid("74_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1270
-.annotate 'line', 346
-    new $P1269, 'ExceptionHandler'
-    set_addr $P1269, control_1268
-    $P1269."handle_types"(.CONTROL_RETURN)
-    push_eh $P1269
-    .lex "self", self
-    .lex "$/", param_1270
-.annotate 'line', 347
-    find_lex $P1271, "$/"
-    get_hll_global $P1272, ["PAST"], "Regex"
-    find_lex $P1273, "$/"
-    unless_null $P1273, vivify_311
-    $P1273 = root_new ['parrot';'Hash']
+.sub "backslash:sym<o>"  :subid("74_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1245
+.annotate 'line', 342
+    new $P1244, 'ExceptionHandler'
+    set_addr $P1244, control_1243
+    $P1244."handle_types"(.CONTROL_RETURN)
+    push_eh $P1244
+    .lex "self", self
+    .lex "$/", param_1245
+.annotate 'line', 343
+    new $P1246, "Undef"
+    .lex "$octlit", $P1246
+.annotate 'line', 344
+    get_hll_global $P1247, ["HLL";"Actions"], "ints_to_string"
+    find_lex $P1250, "$/"
+    unless_null $P1250, vivify_307
+    $P1250 = root_new ['parrot';'Hash']
+  vivify_307:
+    set $P1251, $P1250["octint"]
+    unless_null $P1251, vivify_308
+    new $P1251, "Undef"
+  vivify_308:
+    unless $P1251, unless_1249
+    set $P1248, $P1251
+    goto unless_1249_end
+  unless_1249:
+    find_lex $P1252, "$/"
+    unless_null $P1252, vivify_309
+    $P1252 = root_new ['parrot';'Hash']
+  vivify_309:
+    set $P1253, $P1252["octints"]
+    unless_null $P1253, vivify_310
+    $P1253 = root_new ['parrot';'Hash']
+  vivify_310:
+    set $P1254, $P1253["octint"]
+    unless_null $P1254, vivify_311
+    new $P1254, "Undef"
   vivify_311:
-    set $P1274, $P1273["charspec"]
-    unless_null $P1274, vivify_312
-    new $P1274, "Undef"
+    set $P1248, $P1254
+  unless_1249_end:
+    $P1255 = $P1247($P1248)
+    store_lex "$octlit", $P1255
+.annotate 'line', 345
+    find_lex $P1256, "$/"
+    find_lex $P1259, "$/"
+    unless_null $P1259, vivify_312
+    $P1259 = root_new ['parrot';'Hash']
   vivify_312:
-    $P1275 = $P1274."ast"()
-    find_lex $P1276, "$/"
-    $P1277 = $P1272."new"($P1275, "literal" :named("pasttype"), $P1276 :named("node"))
-    $P1278 = $P1271."!make"($P1277)
+    set $P1260, $P1259["sym"]
+    unless_null $P1260, vivify_313
+    new $P1260, "Undef"
+  vivify_313:
+    set $S1261, $P1260
+    iseq $I1262, $S1261, "O"
+    if $I1262, if_1258
+.annotate 'line', 348
+    get_hll_global $P1267, ["PAST"], "Regex"
+    find_lex $P1268, "$octlit"
+    find_lex $P1269, "$/"
+    $P1270 = $P1267."new"($P1268, "literal" :named("pasttype"), $P1269 :named("node"))
+    set $P1257, $P1270
+.annotate 'line', 345
+    goto if_1258_end
+  if_1258:
 .annotate 'line', 346
-    .return ($P1278)
-  control_1268:
+    get_hll_global $P1263, ["PAST"], "Regex"
+    find_lex $P1264, "$octlit"
+    find_lex $P1265, "$/"
+    $P1266 = $P1263."new"($P1264, "enumcharlist" :named("pasttype"), 1 :named("negate"), $P1265 :named("node"))
+    set $P1257, $P1266
+  if_1258_end:
+    $P1271 = $P1256."!make"($P1257)
+.annotate 'line', 342
+    .return ($P1271)
+  control_1243:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1279, exception, "payload"
-    .return ($P1279)
+    getattribute $P1272, exception, "payload"
+    .return ($P1272)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<misc>"  :subid("75_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1283
-.annotate 'line', 350
-    new $P1282, 'ExceptionHandler'
-    set_addr $P1282, control_1281
-    $P1282."handle_types"(.CONTROL_RETURN)
-    push_eh $P1282
-    .lex "self", self
-    .lex "$/", param_1283
+.sub "backslash:sym<x>"  :subid("75_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1276
 .annotate 'line', 351
-    new $P1284, "Undef"
-    .lex "$past", $P1284
-    get_hll_global $P1285, ["PAST"], "Regex"
-    find_lex $P1286, "$/"
-    set $S1287, $P1286
-    find_lex $P1288, "$/"
-    $P1289 = $P1285."new"($S1287, "literal" :named("pasttype"), $P1288 :named("node"))
-    store_lex "$past", $P1289
+    new $P1275, 'ExceptionHandler'
+    set_addr $P1275, control_1274
+    $P1275."handle_types"(.CONTROL_RETURN)
+    push_eh $P1275
+    .lex "self", self
+    .lex "$/", param_1276
 .annotate 'line', 352
+    new $P1277, "Undef"
+    .lex "$hexlit", $P1277
+.annotate 'line', 353
+    get_hll_global $P1278, ["HLL";"Actions"], "ints_to_string"
+    find_lex $P1281, "$/"
+    unless_null $P1281, vivify_314
+    $P1281 = root_new ['parrot';'Hash']
+  vivify_314:
+    set $P1282, $P1281["hexint"]
+    unless_null $P1282, vivify_315
+    new $P1282, "Undef"
+  vivify_315:
+    unless $P1282, unless_1280
+    set $P1279, $P1282
+    goto unless_1280_end
+  unless_1280:
+    find_lex $P1283, "$/"
+    unless_null $P1283, vivify_316
+    $P1283 = root_new ['parrot';'Hash']
+  vivify_316:
+    set $P1284, $P1283["hexints"]
+    unless_null $P1284, vivify_317
+    $P1284 = root_new ['parrot';'Hash']
+  vivify_317:
+    set $P1285, $P1284["hexint"]
+    unless_null $P1285, vivify_318
+    new $P1285, "Undef"
+  vivify_318:
+    set $P1279, $P1285
+  unless_1280_end:
+    $P1286 = $P1278($P1279)
+    store_lex "$hexlit", $P1286
+.annotate 'line', 354
+    find_lex $P1287, "$/"
     find_lex $P1290, "$/"
-    find_lex $P1291, "$past"
-    $P1292 = $P1290."!make"($P1291)
-.annotate 'line', 350
-    .return ($P1292)
-  control_1281:
+    unless_null $P1290, vivify_319
+    $P1290 = root_new ['parrot';'Hash']
+  vivify_319:
+    set $P1291, $P1290["sym"]
+    unless_null $P1291, vivify_320
+    new $P1291, "Undef"
+  vivify_320:
+    set $S1292, $P1291
+    iseq $I1293, $S1292, "X"
+    if $I1293, if_1289
+.annotate 'line', 357
+    get_hll_global $P1298, ["PAST"], "Regex"
+    find_lex $P1299, "$hexlit"
+    find_lex $P1300, "$/"
+    $P1301 = $P1298."new"($P1299, "literal" :named("pasttype"), $P1300 :named("node"))
+    set $P1288, $P1301
+.annotate 'line', 354
+    goto if_1289_end
+  if_1289:
+.annotate 'line', 355
+    get_hll_global $P1294, ["PAST"], "Regex"
+    find_lex $P1295, "$hexlit"
+    find_lex $P1296, "$/"
+    $P1297 = $P1294."new"($P1295, "enumcharlist" :named("pasttype"), 1 :named("negate"), $P1296 :named("node"))
+    set $P1288, $P1297
+  if_1289_end:
+    $P1302 = $P1287."!make"($P1288)
+.annotate 'line', 351
+    .return ($P1302)
+  control_1274:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1293, exception, "payload"
-    .return ($P1293)
+    getattribute $P1303, exception, "payload"
+    .return ($P1303)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<?>"  :subid("76_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1297
-.annotate 'line', 356
-    new $P1296, 'ExceptionHandler'
-    set_addr $P1296, control_1295
-    $P1296."handle_types"(.CONTROL_RETURN)
-    push_eh $P1296
-    .lex "self", self
-    .lex "$/", param_1297
-.annotate 'line', 357
-    new $P1298, "Undef"
-    .lex "$past", $P1298
-.annotate 'line', 356
-    find_lex $P1299, "$past"
-.annotate 'line', 358
-    find_lex $P1301, "$/"
-    unless_null $P1301, vivify_313
-    $P1301 = root_new ['parrot';'Hash']
-  vivify_313:
-    set $P1302, $P1301["assertion"]
-    unless_null $P1302, vivify_314
-    new $P1302, "Undef"
-  vivify_314:
-    if $P1302, if_1300
-.annotate 'line', 362
-    new $P1307, "Integer"
-    assign $P1307, 0
-    store_lex "$past", $P1307
-    goto if_1300_end
-  if_1300:
-.annotate 'line', 359
-    find_lex $P1303, "$/"
-    unless_null $P1303, vivify_315
-    $P1303 = root_new ['parrot';'Hash']
-  vivify_315:
-    set $P1304, $P1303["assertion"]
-    unless_null $P1304, vivify_316
-    new $P1304, "Undef"
-  vivify_316:
-    $P1305 = $P1304."ast"()
-    store_lex "$past", $P1305
+.sub "backslash:sym<c>"  :subid("76_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1307
 .annotate 'line', 360
-    find_lex $P1306, "$past"
-    $P1306."subtype"("zerowidth")
-  if_1300_end:
-.annotate 'line', 363
+    new $P1306, 'ExceptionHandler'
+    set_addr $P1306, control_1305
+    $P1306."handle_types"(.CONTROL_RETURN)
+    push_eh $P1306
+    .lex "self", self
+    .lex "$/", param_1307
+.annotate 'line', 361
     find_lex $P1308, "$/"
-    find_lex $P1309, "$past"
-    $P1310 = $P1308."!make"($P1309)
-.annotate 'line', 356
-    .return ($P1310)
-  control_1295:
+    get_hll_global $P1309, ["PAST"], "Regex"
+    find_lex $P1310, "$/"
+    unless_null $P1310, vivify_321
+    $P1310 = root_new ['parrot';'Hash']
+  vivify_321:
+    set $P1311, $P1310["charspec"]
+    unless_null $P1311, vivify_322
+    new $P1311, "Undef"
+  vivify_322:
+    $P1312 = $P1311."ast"()
+    find_lex $P1313, "$/"
+    $P1314 = $P1309."new"($P1312, "literal" :named("pasttype"), $P1313 :named("node"))
+    $P1315 = $P1308."!make"($P1314)
+.annotate 'line', 360
+    .return ($P1315)
+  control_1305:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1311, exception, "payload"
-    .return ($P1311)
+    getattribute $P1316, exception, "payload"
+    .return ($P1316)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<!>"  :subid("77_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1315
-.annotate 'line', 366
-    new $P1314, 'ExceptionHandler'
-    set_addr $P1314, control_1313
-    $P1314."handle_types"(.CONTROL_RETURN)
-    push_eh $P1314
-    .lex "self", self
-    .lex "$/", param_1315
-.annotate 'line', 367
-    new $P1316, "Undef"
-    .lex "$past", $P1316
+.sub "backslash:sym<misc>"  :subid("77_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1320
+.annotate 'line', 364
+    new $P1319, 'ExceptionHandler'
+    set_addr $P1319, control_1318
+    $P1319."handle_types"(.CONTROL_RETURN)
+    push_eh $P1319
+    .lex "self", self
+    .lex "$/", param_1320
+.annotate 'line', 365
+    new $P1321, "Undef"
+    .lex "$past", $P1321
+    get_hll_global $P1322, ["PAST"], "Regex"
+    find_lex $P1323, "$/"
+    set $S1324, $P1323
+    find_lex $P1325, "$/"
+    $P1326 = $P1322."new"($S1324, "literal" :named("pasttype"), $P1325 :named("node"))
+    store_lex "$past", $P1326
 .annotate 'line', 366
-    find_lex $P1317, "$past"
-.annotate 'line', 368
-    find_lex $P1319, "$/"
-    unless_null $P1319, vivify_317
-    $P1319 = root_new ['parrot';'Hash']
-  vivify_317:
-    set $P1320, $P1319["assertion"]
-    unless_null $P1320, vivify_318
-    new $P1320, "Undef"
-  vivify_318:
-    if $P1320, if_1318
-.annotate 'line', 374
-    get_hll_global $P1329, ["PAST"], "Regex"
-    find_lex $P1330, "$/"
-    $P1331 = $P1329."new"("anchor" :named("pasttype"), "fail" :named("subtype"), $P1330 :named("node"))
-    store_lex "$past", $P1331
-.annotate 'line', 373
-    goto if_1318_end
-  if_1318:
-.annotate 'line', 369
-    find_lex $P1321, "$/"
-    unless_null $P1321, vivify_319
-    $P1321 = root_new ['parrot';'Hash']
-  vivify_319:
-    set $P1322, $P1321["assertion"]
-    unless_null $P1322, vivify_320
-    new $P1322, "Undef"
-  vivify_320:
-    $P1323 = $P1322."ast"()
-    store_lex "$past", $P1323
-.annotate 'line', 370
-    find_lex $P1324, "$past"
-    find_lex $P1325, "$past"
-    $P1326 = $P1325."negate"()
-    isfalse $I1327, $P1326
-    $P1324."negate"($I1327)
-.annotate 'line', 371
+    find_lex $P1327, "$/"
     find_lex $P1328, "$past"
-    $P1328."subtype"("zerowidth")
-  if_1318_end:
-.annotate 'line', 376
-    find_lex $P1332, "$/"
-    find_lex $P1333, "$past"
-    $P1334 = $P1332."!make"($P1333)
-.annotate 'line', 366
-    .return ($P1334)
-  control_1313:
+    $P1329 = $P1327."!make"($P1328)
+.annotate 'line', 364
+    .return ($P1329)
+  control_1318:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1335, exception, "payload"
-    .return ($P1335)
+    getattribute $P1330, exception, "payload"
+    .return ($P1330)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<method>"  :subid("78_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1339
-.annotate 'line', 379
-    new $P1338, 'ExceptionHandler'
-    set_addr $P1338, control_1337
-    $P1338."handle_types"(.CONTROL_RETURN)
-    push_eh $P1338
+.sub "assertion:sym<?>"  :subid("78_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1334
+.annotate 'line', 370
+    new $P1333, 'ExceptionHandler'
+    set_addr $P1333, control_1332
+    $P1333."handle_types"(.CONTROL_RETURN)
+    push_eh $P1333
     .lex "self", self
-    .lex "$/", param_1339
-.annotate 'line', 380
-    new $P1340, "Undef"
-    .lex "$past", $P1340
-    find_lex $P1341, "$/"
-    unless_null $P1341, vivify_321
-    $P1341 = root_new ['parrot';'Hash']
-  vivify_321:
-    set $P1342, $P1341["assertion"]
-    unless_null $P1342, vivify_322
-    new $P1342, "Undef"
-  vivify_322:
-    $P1343 = $P1342."ast"()
-    store_lex "$past", $P1343
-.annotate 'line', 381
-    find_lex $P1344, "$past"
-    $P1344."subtype"("method")
-.annotate 'line', 382
-    find_lex $P1345, "$past"
-    $P1345."name"("")
-.annotate 'line', 383
-    find_lex $P1346, "$/"
-    find_lex $P1347, "$past"
-    $P1348 = $P1346."!make"($P1347)
-.annotate 'line', 379
-    .return ($P1348)
-  control_1337:
+    .lex "$/", param_1334
+.annotate 'line', 371
+    new $P1335, "Undef"
+    .lex "$past", $P1335
+.annotate 'line', 370
+    find_lex $P1336, "$past"
+.annotate 'line', 372
+    find_lex $P1338, "$/"
+    unless_null $P1338, vivify_323
+    $P1338 = root_new ['parrot';'Hash']
+  vivify_323:
+    set $P1339, $P1338["assertion"]
+    unless_null $P1339, vivify_324
+    new $P1339, "Undef"
+  vivify_324:
+    if $P1339, if_1337
+.annotate 'line', 376
+    new $P1344, "Integer"
+    assign $P1344, 0
+    store_lex "$past", $P1344
+    goto if_1337_end
+  if_1337:
+.annotate 'line', 373
+    find_lex $P1340, "$/"
+    unless_null $P1340, vivify_325
+    $P1340 = root_new ['parrot';'Hash']
+  vivify_325:
+    set $P1341, $P1340["assertion"]
+    unless_null $P1341, vivify_326
+    new $P1341, "Undef"
+  vivify_326:
+    $P1342 = $P1341."ast"()
+    store_lex "$past", $P1342
+.annotate 'line', 374
+    find_lex $P1343, "$past"
+    $P1343."subtype"("zerowidth")
+  if_1337_end:
+.annotate 'line', 377
+    find_lex $P1345, "$/"
+    find_lex $P1346, "$past"
+    $P1347 = $P1345."!make"($P1346)
+.annotate 'line', 370
+    .return ($P1347)
+  control_1332:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1349, exception, "payload"
-    .return ($P1349)
+    getattribute $P1348, exception, "payload"
+    .return ($P1348)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<name>"  :subid("79_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1353
-.annotate 'line', 386
-    .const 'Sub' $P1410 = "81_1280467473.99327" 
-    capture_lex $P1410
-    .const 'Sub' $P1376 = "80_1280467473.99327" 
-    capture_lex $P1376
-    new $P1352, 'ExceptionHandler'
-    set_addr $P1352, control_1351
-    $P1352."handle_types"(.CONTROL_RETURN)
-    push_eh $P1352
+.sub "assertion:sym<!>"  :subid("79_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1352
+.annotate 'line', 380
+    new $P1351, 'ExceptionHandler'
+    set_addr $P1351, control_1350
+    $P1351."handle_types"(.CONTROL_RETURN)
+    push_eh $P1351
     .lex "self", self
-    .lex "$/", param_1353
-.annotate 'line', 387
-    new $P1354, "Undef"
-    .lex "$name", $P1354
-.annotate 'line', 388
-    new $P1355, "Undef"
-    .lex "$past", $P1355
-.annotate 'line', 387
+    .lex "$/", param_1352
+.annotate 'line', 381
+    new $P1353, "Undef"
+    .lex "$past", $P1353
+.annotate 'line', 380
+    find_lex $P1354, "$past"
+.annotate 'line', 382
     find_lex $P1356, "$/"
-    unless_null $P1356, vivify_323
+    unless_null $P1356, vivify_327
     $P1356 = root_new ['parrot';'Hash']
-  vivify_323:
-    set $P1357, $P1356["longname"]
-    unless_null $P1357, vivify_324
-    new $P1357, "Undef"
-  vivify_324:
-    set $S1358, $P1357
-    new $P1359, 'String'
-    set $P1359, $S1358
-    store_lex "$name", $P1359
-    find_lex $P1360, "$past"
-.annotate 'line', 389
-    find_lex $P1362, "$/"
-    unless_null $P1362, vivify_325
-    $P1362 = root_new ['parrot';'Hash']
-  vivify_325:
-    set $P1363, $P1362["assertion"]
-    unless_null $P1363, vivify_326
-    new $P1363, "Undef"
-  vivify_326:
-    if $P1363, if_1361
-.annotate 'line', 393
-    find_lex $P1372, "$name"
-    set $S1373, $P1372
-    iseq $I1374, $S1373, "sym"
-    if $I1374, if_1371
-.annotate 'line', 409
-    find_lex $P1386, "self"
-    find_lex $P1387, "$/"
-    $P1388 = $P1386."named_assertion"($P1387)
-    store_lex "$past", $P1388
-.annotate 'line', 410
-    find_lex $P1390, "$/"
-    unless_null $P1390, vivify_327
-    $P1390 = root_new ['parrot';'Hash']
   vivify_327:
-    set $P1391, $P1390["nibbler"]
-    unless_null $P1391, vivify_328
-    new $P1391, "Undef"
+    set $P1357, $P1356["assertion"]
+    unless_null $P1357, vivify_328
+    new $P1357, "Undef"
   vivify_328:
-    if $P1391, if_1389
-.annotate 'line', 413
-    find_lex $P1399, "$/"
-    unless_null $P1399, vivify_329
-    $P1399 = root_new ['parrot';'Hash']
+    if $P1357, if_1355
+.annotate 'line', 388
+    get_hll_global $P1366, ["PAST"], "Regex"
+    find_lex $P1367, "$/"
+    $P1368 = $P1366."new"("anchor" :named("pasttype"), "fail" :named("subtype"), $P1367 :named("node"))
+    store_lex "$past", $P1368
+.annotate 'line', 387
+    goto if_1355_end
+  if_1355:
+.annotate 'line', 383
+    find_lex $P1358, "$/"
+    unless_null $P1358, vivify_329
+    $P1358 = root_new ['parrot';'Hash']
   vivify_329:
-    set $P1400, $P1399["arglist"]
-    unless_null $P1400, vivify_330
-    new $P1400, "Undef"
+    set $P1359, $P1358["assertion"]
+    unless_null $P1359, vivify_330
+    new $P1359, "Undef"
   vivify_330:
-    unless $P1400, if_1398_end
-.annotate 'line', 414
-    find_lex $P1402, "$/"
-    unless_null $P1402, vivify_331
-    $P1402 = root_new ['parrot';'Hash']
+    $P1360 = $P1359."ast"()
+    store_lex "$past", $P1360
+.annotate 'line', 384
+    find_lex $P1361, "$past"
+    find_lex $P1362, "$past"
+    $P1363 = $P1362."negate"()
+    isfalse $I1364, $P1363
+    $P1361."negate"($I1364)
+.annotate 'line', 385
+    find_lex $P1365, "$past"
+    $P1365."subtype"("zerowidth")
+  if_1355_end:
+.annotate 'line', 390
+    find_lex $P1369, "$/"
+    find_lex $P1370, "$past"
+    $P1371 = $P1369."!make"($P1370)
+.annotate 'line', 380
+    .return ($P1371)
+  control_1350:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1372, exception, "payload"
+    .return ($P1372)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "assertion:sym<method>"  :subid("80_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1376
+.annotate 'line', 393
+    new $P1375, 'ExceptionHandler'
+    set_addr $P1375, control_1374
+    $P1375."handle_types"(.CONTROL_RETURN)
+    push_eh $P1375
+    .lex "self", self
+    .lex "$/", param_1376
+.annotate 'line', 394
+    new $P1377, "Undef"
+    .lex "$past", $P1377
+    find_lex $P1378, "$/"
+    unless_null $P1378, vivify_331
+    $P1378 = root_new ['parrot';'Hash']
   vivify_331:
-    set $P1403, $P1402["arglist"]
-    unless_null $P1403, vivify_332
-    $P1403 = root_new ['parrot';'ResizablePMCArray']
+    set $P1379, $P1378["assertion"]
+    unless_null $P1379, vivify_332
+    new $P1379, "Undef"
   vivify_332:
-    set $P1404, $P1403[0]
-    unless_null $P1404, vivify_333
-    new $P1404, "Undef"
-  vivify_333:
-    $P1405 = $P1404."ast"()
-    $P1406 = $P1405."list"()
-    defined $I1407, $P1406
-    unless $I1407, for_undef_334
-    iter $P1401, $P1406
-    new $P1416, 'ExceptionHandler'
-    set_addr $P1416, loop1415_handler
-    $P1416."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1416
-  loop1415_test:
-    unless $P1401, loop1415_done
-    shift $P1408, $P1401
-  loop1415_redo:
-    .const 'Sub' $P1410 = "81_1280467473.99327" 
-    capture_lex $P1410
-    $P1410($P1408)
-  loop1415_next:
-    goto loop1415_test
-  loop1415_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1417, exception, 'type'
-    eq $P1417, .CONTROL_LOOP_NEXT, loop1415_next
-    eq $P1417, .CONTROL_LOOP_REDO, loop1415_redo
-  loop1415_done:
-    pop_eh 
-  for_undef_334:
-  if_1398_end:
-.annotate 'line', 413
-    goto if_1389_end
-  if_1389:
-.annotate 'line', 411
-    find_lex $P1392, "$past"
+    $P1380 = $P1379."ast"()
+    store_lex "$past", $P1380
+.annotate 'line', 395
+    find_lex $P1381, "$past"
+    $P1381."subtype"("method")
+.annotate 'line', 396
+    find_lex $P1382, "$past"
+    $P1382."name"("")
+.annotate 'line', 397
+    find_lex $P1383, "$/"
+    find_lex $P1384, "$past"
+    $P1385 = $P1383."!make"($P1384)
+.annotate 'line', 393
+    .return ($P1385)
+  control_1374:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1386, exception, "payload"
+    .return ($P1386)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.include "except_types.pasm"
+.sub "assertion:sym<name>"  :subid("81_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1390
+.annotate 'line', 400
+    .const 'Sub' $P1447 = "83_1282323999.42098" 
+    capture_lex $P1447
+    .const 'Sub' $P1413 = "82_1282323999.42098" 
+    capture_lex $P1413
+    new $P1389, 'ExceptionHandler'
+    set_addr $P1389, control_1388
+    $P1389."handle_types"(.CONTROL_RETURN)
+    push_eh $P1389
+    .lex "self", self
+    .lex "$/", param_1390
+.annotate 'line', 401
+    new $P1391, "Undef"
+    .lex "$name", $P1391
+.annotate 'line', 402
+    new $P1392, "Undef"
+    .lex "$past", $P1392
+.annotate 'line', 401
     find_lex $P1393, "$/"
-    unless_null $P1393, vivify_335
+    unless_null $P1393, vivify_333
     $P1393 = root_new ['parrot';'Hash']
+  vivify_333:
+    set $P1394, $P1393["longname"]
+    unless_null $P1394, vivify_334
+    new $P1394, "Undef"
+  vivify_334:
+    set $S1395, $P1394
+    new $P1396, 'String'
+    set $P1396, $S1395
+    store_lex "$name", $P1396
+    find_lex $P1397, "$past"
+.annotate 'line', 403
+    find_lex $P1399, "$/"
+    unless_null $P1399, vivify_335
+    $P1399 = root_new ['parrot';'Hash']
   vivify_335:
-    set $P1394, $P1393["nibbler"]
-    unless_null $P1394, vivify_336
-    $P1394 = root_new ['parrot';'ResizablePMCArray']
+    set $P1400, $P1399["assertion"]
+    unless_null $P1400, vivify_336
+    new $P1400, "Undef"
   vivify_336:
-    set $P1395, $P1394[0]
-    unless_null $P1395, vivify_337
-    new $P1395, "Undef"
+    if $P1400, if_1398
+.annotate 'line', 407
+    find_lex $P1409, "$name"
+    set $S1410, $P1409
+    iseq $I1411, $S1410, "sym"
+    if $I1411, if_1408
+.annotate 'line', 423
+    find_lex $P1423, "self"
+    find_lex $P1424, "$/"
+    $P1425 = $P1423."named_assertion"($P1424)
+    store_lex "$past", $P1425
+.annotate 'line', 424
+    find_lex $P1427, "$/"
+    unless_null $P1427, vivify_337
+    $P1427 = root_new ['parrot';'Hash']
   vivify_337:
-    $P1396 = $P1395."ast"()
-    $P1397 = "buildsub"($P1396)
-    $P1392."push"($P1397)
-  if_1389_end:
-.annotate 'line', 408
-    goto if_1371_end
-  if_1371:
-.annotate 'line', 393
-    .const 'Sub' $P1376 = "80_1280467473.99327" 
-    capture_lex $P1376
-    $P1376()
-  if_1371_end:
-    goto if_1361_end
-  if_1361:
-.annotate 'line', 390
-    find_lex $P1364, "$/"
-    unless_null $P1364, vivify_338
-    $P1364 = root_new ['parrot';'Hash']
+    set $P1428, $P1427["nibbler"]
+    unless_null $P1428, vivify_338
+    new $P1428, "Undef"
   vivify_338:
-    set $P1365, $P1364["assertion"]
-    unless_null $P1365, vivify_339
-    $P1365 = root_new ['parrot';'ResizablePMCArray']
+    if $P1428, if_1426
+.annotate 'line', 427
+    find_lex $P1436, "$/"
+    unless_null $P1436, vivify_339
+    $P1436 = root_new ['parrot';'Hash']
   vivify_339:
-    set $P1366, $P1365[0]
-    unless_null $P1366, vivify_340
-    new $P1366, "Undef"
+    set $P1437, $P1436["arglist"]
+    unless_null $P1437, vivify_340
+    new $P1437, "Undef"
   vivify_340:
-    $P1367 = $P1366."ast"()
-    store_lex "$past", $P1367
-.annotate 'line', 391
-    find_lex $P1368, "self"
-    find_lex $P1369, "$past"
-    find_lex $P1370, "$name"
-    $P1368."subrule_alias"($P1369, $P1370)
-  if_1361_end:
-.annotate 'line', 417
-    find_lex $P1418, "$/"
-    find_lex $P1419, "$past"
-    $P1420 = $P1418."!make"($P1419)
-.annotate 'line', 386
-    .return ($P1420)
-  control_1351:
+    unless $P1437, if_1435_end
+.annotate 'line', 428
+    find_lex $P1439, "$/"
+    unless_null $P1439, vivify_341
+    $P1439 = root_new ['parrot';'Hash']
+  vivify_341:
+    set $P1440, $P1439["arglist"]
+    unless_null $P1440, vivify_342
+    $P1440 = root_new ['parrot';'ResizablePMCArray']
+  vivify_342:
+    set $P1441, $P1440[0]
+    unless_null $P1441, vivify_343
+    new $P1441, "Undef"
+  vivify_343:
+    $P1442 = $P1441."ast"()
+    $P1443 = $P1442."list"()
+    defined $I1444, $P1443
+    unless $I1444, for_undef_344
+    iter $P1438, $P1443
+    new $P1453, 'ExceptionHandler'
+    set_addr $P1453, loop1452_handler
+    $P1453."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1453
+  loop1452_test:
+    unless $P1438, loop1452_done
+    shift $P1445, $P1438
+  loop1452_redo:
+    .const 'Sub' $P1447 = "83_1282323999.42098" 
+    capture_lex $P1447
+    $P1447($P1445)
+  loop1452_next:
+    goto loop1452_test
+  loop1452_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1454, exception, 'type'
+    eq $P1454, .CONTROL_LOOP_NEXT, loop1452_next
+    eq $P1454, .CONTROL_LOOP_REDO, loop1452_redo
+  loop1452_done:
+    pop_eh 
+  for_undef_344:
+  if_1435_end:
+.annotate 'line', 427
+    goto if_1426_end
+  if_1426:
+.annotate 'line', 425
+    find_lex $P1429, "$past"
+    find_lex $P1430, "$/"
+    unless_null $P1430, vivify_345
+    $P1430 = root_new ['parrot';'Hash']
+  vivify_345:
+    set $P1431, $P1430["nibbler"]
+    unless_null $P1431, vivify_346
+    $P1431 = root_new ['parrot';'ResizablePMCArray']
+  vivify_346:
+    set $P1432, $P1431[0]
+    unless_null $P1432, vivify_347
+    new $P1432, "Undef"
+  vivify_347:
+    $P1433 = $P1432."ast"()
+    $P1434 = "buildsub"($P1433)
+    $P1429."push"($P1434)
+  if_1426_end:
+.annotate 'line', 422
+    goto if_1408_end
+  if_1408:
+.annotate 'line', 407
+    .const 'Sub' $P1413 = "82_1282323999.42098" 
+    capture_lex $P1413
+    $P1413()
+  if_1408_end:
+    goto if_1398_end
+  if_1398:
+.annotate 'line', 404
+    find_lex $P1401, "$/"
+    unless_null $P1401, vivify_348
+    $P1401 = root_new ['parrot';'Hash']
+  vivify_348:
+    set $P1402, $P1401["assertion"]
+    unless_null $P1402, vivify_349
+    $P1402 = root_new ['parrot';'ResizablePMCArray']
+  vivify_349:
+    set $P1403, $P1402[0]
+    unless_null $P1403, vivify_350
+    new $P1403, "Undef"
+  vivify_350:
+    $P1404 = $P1403."ast"()
+    store_lex "$past", $P1404
+.annotate 'line', 405
+    find_lex $P1405, "self"
+    find_lex $P1406, "$past"
+    find_lex $P1407, "$name"
+    $P1405."subrule_alias"($P1406, $P1407)
+  if_1398_end:
+.annotate 'line', 431
+    find_lex $P1455, "$/"
+    find_lex $P1456, "$past"
+    $P1457 = $P1455."!make"($P1456)
+.annotate 'line', 400
+    .return ($P1457)
+  control_1388:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1421, exception, "payload"
-    .return ($P1421)
+    getattribute $P1458, exception, "payload"
+    .return ($P1458)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1409"  :anon :subid("81_1280467473.99327") :outer("79_1280467473.99327")
-    .param pmc param_1411
-.annotate 'line', 414
-    .lex "$_", param_1411
-    find_lex $P1412, "$past"
-    find_lex $P1413, "$_"
-    $P1414 = $P1412."push"($P1413)
-    .return ($P1414)
+.sub "_block1446"  :anon :subid("83_1282323999.42098") :outer("81_1282323999.42098")
+    .param pmc param_1448
+.annotate 'line', 428
+    .lex "$_", param_1448
+    find_lex $P1449, "$past"
+    find_lex $P1450, "$_"
+    $P1451 = $P1449."push"($P1450)
+    .return ($P1451)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1375"  :anon :subid("80_1280467473.99327") :outer("79_1280467473.99327")
-.annotate 'line', 394
-    new $P1377, "Undef"
-    .lex "$regexsym", $P1377
+.sub "_block1412"  :anon :subid("82_1282323999.42098") :outer("81_1282323999.42098")
+.annotate 'line', 408
+    new $P1414, "Undef"
+    .lex "$regexsym", $P1414
 
             $P0 = get_global '$REGEXNAME'
             $S0 = $P0
@@ -11952,390 +12953,390 @@
             add $I0, 5
             $S0 = substr $S0, $I0
             $S0 = chopn $S0, 1
-            $P1378 = box $S0
+            $P1415 = box $S0
         
-    store_lex "$regexsym", $P1378
-.annotate 'line', 403
-    get_hll_global $P1379, ["PAST"], "Regex"
-.annotate 'line', 404
-    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', 403
-    store_lex "$past", $P1385
-.annotate 'line', 393
-    .return ($P1385)
+    store_lex "$regexsym", $P1415
+.annotate 'line', 417
+    get_hll_global $P1416, ["PAST"], "Regex"
+.annotate 'line', 418
+    get_hll_global $P1417, ["PAST"], "Regex"
+    find_lex $P1418, "$regexsym"
+    $P1419 = $P1417."new"($P1418, "literal" :named("pasttype"))
+    find_lex $P1420, "$name"
+    find_lex $P1421, "$/"
+    $P1422 = $P1416."new"($P1419, $P1420 :named("name"), "subcapture" :named("pasttype"), $P1421 :named("node"))
+.annotate 'line', 417
+    store_lex "$past", $P1422
+.annotate 'line', 407
+    .return ($P1422)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<[>"  :subid("82_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1425
-.annotate 'line', 420
-    .const 'Sub' $P1460 = "83_1280467473.99327" 
-    capture_lex $P1460
-    new $P1424, 'ExceptionHandler'
-    set_addr $P1424, control_1423
-    $P1424."handle_types"(.CONTROL_RETURN)
-    push_eh $P1424
-    .lex "self", self
-    .lex "$/", param_1425
-.annotate 'line', 421
-    new $P1426, "Undef"
-    .lex "$clist", $P1426
-.annotate 'line', 422
-    new $P1427, "Undef"
-    .lex "$past", $P1427
-.annotate 'line', 431
-    new $P1428, "Undef"
-    .lex "$i", $P1428
-.annotate 'line', 432
-    new $P1429, "Undef"
-    .lex "$n", $P1429
-.annotate 'line', 421
-    find_lex $P1430, "$/"
-    unless_null $P1430, vivify_341
-    $P1430 = root_new ['parrot';'Hash']
-  vivify_341:
-    set $P1431, $P1430["cclass_elem"]
-    unless_null $P1431, vivify_342
-    new $P1431, "Undef"
-  vivify_342:
-    store_lex "$clist", $P1431
-.annotate 'line', 422
-    find_lex $P1432, "$clist"
-    unless_null $P1432, vivify_343
-    $P1432 = root_new ['parrot';'ResizablePMCArray']
-  vivify_343:
-    set $P1433, $P1432[0]
-    unless_null $P1433, vivify_344
-    new $P1433, "Undef"
-  vivify_344:
-    $P1434 = $P1433."ast"()
-    store_lex "$past", $P1434
-.annotate 'line', 423
-    find_lex $P1438, "$past"
-    $P1439 = $P1438."negate"()
-    if $P1439, if_1437
-    set $P1436, $P1439
-    goto if_1437_end
-  if_1437:
-    find_lex $P1440, "$past"
-    $S1441 = $P1440."pasttype"()
-    iseq $I1442, $S1441, "subrule"
-    new $P1436, 'Integer'
-    set $P1436, $I1442
-  if_1437_end:
-    unless $P1436, if_1435_end
-.annotate 'line', 424
-    find_lex $P1443, "$past"
-    $P1443."subtype"("zerowidth")
-.annotate 'line', 425
-    get_hll_global $P1444, ["PAST"], "Regex"
-    find_lex $P1445, "$past"
-.annotate 'line', 427
-    get_hll_global $P1446, ["PAST"], "Regex"
-    $P1447 = $P1446."new"("charclass" :named("pasttype"), "." :named("subtype"))
-    find_lex $P1448, "$/"
-    $P1449 = $P1444."new"($P1445, $P1447, $P1448 :named("node"))
-.annotate 'line', 425
-    store_lex "$past", $P1449
-  if_1435_end:
-.annotate 'line', 431
-    new $P1450, "Integer"
-    assign $P1450, 1
-    store_lex "$i", $P1450
-.annotate 'line', 432
-    find_lex $P1451, "$clist"
-    set $N1452, $P1451
-    new $P1453, 'Float'
-    set $P1453, $N1452
-    store_lex "$n", $P1453
-.annotate 'line', 433
-    new $P1484, 'ExceptionHandler'
-    set_addr $P1484, loop1483_handler
-    $P1484."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1484
-  loop1483_test:
-    find_lex $P1454, "$i"
-    set $N1455, $P1454
-    find_lex $P1456, "$n"
-    set $N1457, $P1456
-    islt $I1458, $N1455, $N1457
-    unless $I1458, loop1483_done
-  loop1483_redo:
-    .const 'Sub' $P1460 = "83_1280467473.99327" 
-    capture_lex $P1460
-    $P1460()
-  loop1483_next:
-    goto loop1483_test
-  loop1483_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1485, exception, 'type'
-    eq $P1485, .CONTROL_LOOP_NEXT, loop1483_next
-    eq $P1485, .CONTROL_LOOP_REDO, loop1483_redo
-  loop1483_done:
-    pop_eh 
-.annotate 'line', 444
-    find_lex $P1486, "$/"
-    find_lex $P1487, "$past"
-    $P1488 = $P1486."!make"($P1487)
-.annotate 'line', 420
-    .return ($P1488)
-  control_1423:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1489, exception, "payload"
-    .return ($P1489)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1459"  :anon :subid("83_1280467473.99327") :outer("82_1280467473.99327")
+.sub "assertion:sym<[>"  :subid("84_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1462
 .annotate 'line', 434
-    new $P1461, "Undef"
-    .lex "$ast", $P1461
-    find_lex $P1462, "$i"
-    set $I1463, $P1462
-    find_lex $P1464, "$clist"
-    unless_null $P1464, vivify_345
-    $P1464 = root_new ['parrot';'ResizablePMCArray']
-  vivify_345:
-    set $P1465, $P1464[$I1463]
-    unless_null $P1465, vivify_346
+    .const 'Sub' $P1497 = "85_1282323999.42098" 
+    capture_lex $P1497
+    new $P1461, 'ExceptionHandler'
+    set_addr $P1461, control_1460
+    $P1461."handle_types"(.CONTROL_RETURN)
+    push_eh $P1461
+    .lex "self", self
+    .lex "$/", param_1462
+.annotate 'line', 435
+    new $P1463, "Undef"
+    .lex "$clist", $P1463
+.annotate 'line', 436
+    new $P1464, "Undef"
+    .lex "$past", $P1464
+.annotate 'line', 445
     new $P1465, "Undef"
-  vivify_346:
-    $P1466 = $P1465."ast"()
-    store_lex "$ast", $P1466
+    .lex "$i", $P1465
+.annotate 'line', 446
+    new $P1466, "Undef"
+    .lex "$n", $P1466
 .annotate 'line', 435
-    find_lex $P1468, "$ast"
-    $P1469 = $P1468."negate"()
-    if $P1469, if_1467
-.annotate 'line', 440
-    get_hll_global $P1476, ["PAST"], "Regex"
-    find_lex $P1477, "$past"
-    find_lex $P1478, "$ast"
-    find_lex $P1479, "$/"
-    $P1480 = $P1476."new"($P1477, $P1478, "alt" :named("pasttype"), $P1479 :named("node"))
-    store_lex "$past", $P1480
-.annotate 'line', 439
-    goto if_1467_end
-  if_1467:
+    find_lex $P1467, "$/"
+    unless_null $P1467, vivify_351
+    $P1467 = root_new ['parrot';'Hash']
+  vivify_351:
+    set $P1468, $P1467["cclass_elem"]
+    unless_null $P1468, vivify_352
+    new $P1468, "Undef"
+  vivify_352:
+    store_lex "$clist", $P1468
 .annotate 'line', 436
-    find_lex $P1470, "$ast"
-    $P1470."subtype"("zerowidth")
+    find_lex $P1469, "$clist"
+    unless_null $P1469, vivify_353
+    $P1469 = root_new ['parrot';'ResizablePMCArray']
+  vivify_353:
+    set $P1470, $P1469[0]
+    unless_null $P1470, vivify_354
+    new $P1470, "Undef"
+  vivify_354:
+    $P1471 = $P1470."ast"()
+    store_lex "$past", $P1471
 .annotate 'line', 437
-    get_hll_global $P1471, ["PAST"], "Regex"
-    find_lex $P1472, "$ast"
-    find_lex $P1473, "$past"
-    find_lex $P1474, "$/"
-    $P1475 = $P1471."new"($P1472, $P1473, "concat" :named("pasttype"), $P1474 :named("node"))
-    store_lex "$past", $P1475
-  if_1467_end:
-.annotate 'line', 442
-    find_lex $P1481, "$i"
-    add $P1482, $P1481, 1
-    store_lex "$i", $P1482
-.annotate 'line', 433
-    .return ($P1482)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Actions"]
-.include "except_types.pasm"
-.sub "cclass_elem"  :subid("84_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1493
+    find_lex $P1475, "$past"
+    $P1476 = $P1475."negate"()
+    if $P1476, if_1474
+    set $P1473, $P1476
+    goto if_1474_end
+  if_1474:
+    find_lex $P1477, "$past"
+    $S1478 = $P1477."pasttype"()
+    iseq $I1479, $S1478, "subrule"
+    new $P1473, 'Integer'
+    set $P1473, $I1479
+  if_1474_end:
+    unless $P1473, if_1472_end
+.annotate 'line', 438
+    find_lex $P1480, "$past"
+    $P1480."subtype"("zerowidth")
+.annotate 'line', 439
+    get_hll_global $P1481, ["PAST"], "Regex"
+    find_lex $P1482, "$past"
+.annotate 'line', 441
+    get_hll_global $P1483, ["PAST"], "Regex"
+    $P1484 = $P1483."new"("charclass" :named("pasttype"), "." :named("subtype"))
+    find_lex $P1485, "$/"
+    $P1486 = $P1481."new"($P1482, $P1484, $P1485 :named("node"))
+.annotate 'line', 439
+    store_lex "$past", $P1486
+  if_1472_end:
+.annotate 'line', 445
+    new $P1487, "Integer"
+    assign $P1487, 1
+    store_lex "$i", $P1487
+.annotate 'line', 446
+    find_lex $P1488, "$clist"
+    set $N1489, $P1488
+    new $P1490, 'Float'
+    set $P1490, $N1489
+    store_lex "$n", $P1490
 .annotate 'line', 447
-    .const 'Sub' $P1518 = "86_1280467473.99327" 
-    capture_lex $P1518
-    .const 'Sub' $P1502 = "85_1280467473.99327" 
-    capture_lex $P1502
-    new $P1492, 'ExceptionHandler'
-    set_addr $P1492, control_1491
-    $P1492."handle_types"(.CONTROL_RETURN)
-    push_eh $P1492
-    .lex "self", self
-    .lex "$/", param_1493
-.annotate 'line', 448
-    new $P1494, "Undef"
-    .lex "$str", $P1494
-.annotate 'line', 449
-    new $P1495, "Undef"
-    .lex "$past", $P1495
-.annotate 'line', 448
-    new $P1496, "String"
-    assign $P1496, ""
-    store_lex "$str", $P1496
-    find_lex $P1497, "$past"
-.annotate 'line', 450
-    find_lex $P1499, "$/"
-    unless_null $P1499, vivify_347
-    $P1499 = root_new ['parrot';'Hash']
-  vivify_347:
-    set $P1500, $P1499["name"]
-    unless_null $P1500, vivify_348
-    new $P1500, "Undef"
-  vivify_348:
-    if $P1500, if_1498
-.annotate 'line', 454
-    find_lex $P1513, "$/"
-    unless_null $P1513, vivify_349
-    $P1513 = root_new ['parrot';'Hash']
-  vivify_349:
-    set $P1514, $P1513["charspec"]
-    unless_null $P1514, vivify_350
-    new $P1514, "Undef"
-  vivify_350:
-    defined $I1515, $P1514
-    unless $I1515, for_undef_351
-    iter $P1512, $P1514
-    new $P1544, 'ExceptionHandler'
-    set_addr $P1544, loop1543_handler
-    $P1544."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1544
-  loop1543_test:
-    unless $P1512, loop1543_done
-    shift $P1516, $P1512
-  loop1543_redo:
-    .const 'Sub' $P1518 = "86_1280467473.99327" 
-    capture_lex $P1518
-    $P1518($P1516)
-  loop1543_next:
-    goto loop1543_test
-  loop1543_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1545, exception, 'type'
-    eq $P1545, .CONTROL_LOOP_NEXT, loop1543_next
-    eq $P1545, .CONTROL_LOOP_REDO, loop1543_redo
-  loop1543_done:
+    new $P1521, 'ExceptionHandler'
+    set_addr $P1521, loop1520_handler
+    $P1521."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1521
+  loop1520_test:
+    find_lex $P1491, "$i"
+    set $N1492, $P1491
+    find_lex $P1493, "$n"
+    set $N1494, $P1493
+    islt $I1495, $N1492, $N1494
+    unless $I1495, loop1520_done
+  loop1520_redo:
+    .const 'Sub' $P1497 = "85_1282323999.42098" 
+    capture_lex $P1497
+    $P1497()
+  loop1520_next:
+    goto loop1520_test
+  loop1520_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1522, exception, 'type'
+    eq $P1522, .CONTROL_LOOP_NEXT, loop1520_next
+    eq $P1522, .CONTROL_LOOP_REDO, loop1520_redo
+  loop1520_done:
     pop_eh 
-  for_undef_351:
-.annotate 'line', 479
-    get_hll_global $P1546, ["PAST"], "Regex"
-    find_lex $P1547, "$str"
-    find_lex $P1548, "$/"
-    $P1549 = $P1546."new"($P1547, "enumcharlist" :named("pasttype"), $P1548 :named("node"))
-    store_lex "$past", $P1549
-.annotate 'line', 453
-    goto if_1498_end
-  if_1498:
-.annotate 'line', 450
-    .const 'Sub' $P1502 = "85_1280467473.99327" 
-    capture_lex $P1502
-    $P1502()
-  if_1498_end:
-.annotate 'line', 481
-    find_lex $P1550, "$past"
-    find_lex $P1551, "$/"
-    unless_null $P1551, vivify_363
-    $P1551 = root_new ['parrot';'Hash']
-  vivify_363:
-    set $P1552, $P1551["sign"]
-    unless_null $P1552, vivify_364
-    new $P1552, "Undef"
-  vivify_364:
-    set $S1553, $P1552
-    iseq $I1554, $S1553, "-"
-    $P1550."negate"($I1554)
-.annotate 'line', 482
-    find_lex $P1555, "$/"
-    find_lex $P1556, "$past"
-    $P1557 = $P1555."!make"($P1556)
-.annotate 'line', 447
-    .return ($P1557)
-  control_1491:
+.annotate 'line', 458
+    find_lex $P1523, "$/"
+    find_lex $P1524, "$past"
+    $P1525 = $P1523."!make"($P1524)
+.annotate 'line', 434
+    .return ($P1525)
+  control_1460:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1558, exception, "payload"
-    .return ($P1558)
+    getattribute $P1526, exception, "payload"
+    .return ($P1526)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1517"  :anon :subid("86_1280467473.99327") :outer("84_1280467473.99327")
-    .param pmc param_1519
-.annotate 'line', 454
-    .const 'Sub' $P1525 = "87_1280467473.99327" 
-    capture_lex $P1525
-    .lex "$_", param_1519
-.annotate 'line', 455
-    find_lex $P1522, "$_"
-    unless_null $P1522, vivify_352
-    $P1522 = root_new ['parrot';'ResizablePMCArray']
-  vivify_352:
-    set $P1523, $P1522[1]
-    unless_null $P1523, vivify_353
-    new $P1523, "Undef"
-  vivify_353:
-    if $P1523, if_1521
-.annotate 'line', 477
-    find_lex $P1539, "$str"
-    find_lex $P1540, "$_"
-    unless_null $P1540, vivify_354
-    $P1540 = root_new ['parrot';'ResizablePMCArray']
-  vivify_354:
-    set $P1541, $P1540[0]
-    unless_null $P1541, vivify_355
-    new $P1541, "Undef"
+.sub "_block1496"  :anon :subid("85_1282323999.42098") :outer("84_1282323999.42098")
+.annotate 'line', 448
+    new $P1498, "Undef"
+    .lex "$ast", $P1498
+    find_lex $P1499, "$i"
+    set $I1500, $P1499
+    find_lex $P1501, "$clist"
+    unless_null $P1501, vivify_355
+    $P1501 = root_new ['parrot';'ResizablePMCArray']
   vivify_355:
-    concat $P1542, $P1539, $P1541
-    store_lex "$str", $P1542
-    set $P1520, $P1542
-.annotate 'line', 455
-    goto if_1521_end
-  if_1521:
-    .const 'Sub' $P1525 = "87_1280467473.99327" 
-    capture_lex $P1525
-    $P1538 = $P1525()
-    set $P1520, $P1538
-  if_1521_end:
+    set $P1502, $P1501[$I1500]
+    unless_null $P1502, vivify_356
+    new $P1502, "Undef"
+  vivify_356:
+    $P1503 = $P1502."ast"()
+    store_lex "$ast", $P1503
+.annotate 'line', 449
+    find_lex $P1505, "$ast"
+    $P1506 = $P1505."negate"()
+    if $P1506, if_1504
 .annotate 'line', 454
-    .return ($P1520)
+    get_hll_global $P1513, ["PAST"], "Regex"
+    find_lex $P1514, "$past"
+    find_lex $P1515, "$ast"
+    find_lex $P1516, "$/"
+    $P1517 = $P1513."new"($P1514, $P1515, "alt" :named("pasttype"), $P1516 :named("node"))
+    store_lex "$past", $P1517
+.annotate 'line', 453
+    goto if_1504_end
+  if_1504:
+.annotate 'line', 450
+    find_lex $P1507, "$ast"
+    $P1507."subtype"("zerowidth")
+.annotate 'line', 451
+    get_hll_global $P1508, ["PAST"], "Regex"
+    find_lex $P1509, "$ast"
+    find_lex $P1510, "$past"
+    find_lex $P1511, "$/"
+    $P1512 = $P1508."new"($P1509, $P1510, "concat" :named("pasttype"), $P1511 :named("node"))
+    store_lex "$past", $P1512
+  if_1504_end:
+.annotate 'line', 456
+    find_lex $P1518, "$i"
+    add $P1519, $P1518, 1
+    store_lex "$i", $P1519
+.annotate 'line', 447
+    .return ($P1519)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1524"  :anon :subid("87_1280467473.99327") :outer("86_1280467473.99327")
-.annotate 'line', 456
-    new $P1526, "Undef"
-    .lex "$a", $P1526
-.annotate 'line', 457
-    new $P1527, "Undef"
-    .lex "$b", $P1527
-.annotate 'line', 458
-    new $P1528, "Undef"
-    .lex "$c", $P1528
-.annotate 'line', 456
-    find_lex $P1529, "$_"
-    unless_null $P1529, vivify_356
-    $P1529 = root_new ['parrot';'ResizablePMCArray']
-  vivify_356:
-    set $P1530, $P1529[0]
-    unless_null $P1530, vivify_357
-    new $P1530, "Undef"
+.include "except_types.pasm"
+.sub "cclass_elem"  :subid("86_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1530
+.annotate 'line', 461
+    .const 'Sub' $P1555 = "88_1282323999.42098" 
+    capture_lex $P1555
+    .const 'Sub' $P1539 = "87_1282323999.42098" 
+    capture_lex $P1539
+    new $P1529, 'ExceptionHandler'
+    set_addr $P1529, control_1528
+    $P1529."handle_types"(.CONTROL_RETURN)
+    push_eh $P1529
+    .lex "self", self
+    .lex "$/", param_1530
+.annotate 'line', 462
+    new $P1531, "Undef"
+    .lex "$str", $P1531
+.annotate 'line', 463
+    new $P1532, "Undef"
+    .lex "$past", $P1532
+.annotate 'line', 462
+    new $P1533, "String"
+    assign $P1533, ""
+    store_lex "$str", $P1533
+    find_lex $P1534, "$past"
+.annotate 'line', 464
+    find_lex $P1536, "$/"
+    unless_null $P1536, vivify_357
+    $P1536 = root_new ['parrot';'Hash']
   vivify_357:
-    store_lex "$a", $P1530
-.annotate 'line', 457
-    find_lex $P1531, "$_"
-    unless_null $P1531, vivify_358
-    $P1531 = root_new ['parrot';'ResizablePMCArray']
+    set $P1537, $P1536["name"]
+    unless_null $P1537, vivify_358
+    new $P1537, "Undef"
   vivify_358:
-    set $P1532, $P1531[1]
-    unless_null $P1532, vivify_359
-    $P1532 = root_new ['parrot';'ResizablePMCArray']
+    if $P1537, if_1535
+.annotate 'line', 468
+    find_lex $P1550, "$/"
+    unless_null $P1550, vivify_359
+    $P1550 = root_new ['parrot';'Hash']
   vivify_359:
-    set $P1533, $P1532[0]
-    unless_null $P1533, vivify_360
-    new $P1533, "Undef"
+    set $P1551, $P1550["charspec"]
+    unless_null $P1551, vivify_360
+    new $P1551, "Undef"
   vivify_360:
-    store_lex "$b", $P1533
-.annotate 'line', 458
+    defined $I1552, $P1551
+    unless $I1552, for_undef_361
+    iter $P1549, $P1551
+    new $P1581, 'ExceptionHandler'
+    set_addr $P1581, loop1580_handler
+    $P1581."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1581
+  loop1580_test:
+    unless $P1549, loop1580_done
+    shift $P1553, $P1549
+  loop1580_redo:
+    .const 'Sub' $P1555 = "88_1282323999.42098" 
+    capture_lex $P1555
+    $P1555($P1553)
+  loop1580_next:
+    goto loop1580_test
+  loop1580_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1582, exception, 'type'
+    eq $P1582, .CONTROL_LOOP_NEXT, loop1580_next
+    eq $P1582, .CONTROL_LOOP_REDO, loop1580_redo
+  loop1580_done:
+    pop_eh 
+  for_undef_361:
+.annotate 'line', 493
+    get_hll_global $P1583, ["PAST"], "Regex"
+    find_lex $P1584, "$str"
+    find_lex $P1585, "$/"
+    $P1586 = $P1583."new"($P1584, "enumcharlist" :named("pasttype"), $P1585 :named("node"))
+    store_lex "$past", $P1586
+.annotate 'line', 467
+    goto if_1535_end
+  if_1535:
+.annotate 'line', 464
+    .const 'Sub' $P1539 = "87_1282323999.42098" 
+    capture_lex $P1539
+    $P1539()
+  if_1535_end:
+.annotate 'line', 495
+    find_lex $P1587, "$past"
+    find_lex $P1588, "$/"
+    unless_null $P1588, vivify_373
+    $P1588 = root_new ['parrot';'Hash']
+  vivify_373:
+    set $P1589, $P1588["sign"]
+    unless_null $P1589, vivify_374
+    new $P1589, "Undef"
+  vivify_374:
+    set $S1590, $P1589
+    iseq $I1591, $S1590, "-"
+    $P1587."negate"($I1591)
+.annotate 'line', 496
+    find_lex $P1592, "$/"
+    find_lex $P1593, "$past"
+    $P1594 = $P1592."!make"($P1593)
+.annotate 'line', 461
+    .return ($P1594)
+  control_1528:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1595, exception, "payload"
+    .return ($P1595)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.sub "_block1554"  :anon :subid("88_1282323999.42098") :outer("86_1282323999.42098")
+    .param pmc param_1556
+.annotate 'line', 468
+    .const 'Sub' $P1562 = "89_1282323999.42098" 
+    capture_lex $P1562
+    .lex "$_", param_1556
+.annotate 'line', 469
+    find_lex $P1559, "$_"
+    unless_null $P1559, vivify_362
+    $P1559 = root_new ['parrot';'ResizablePMCArray']
+  vivify_362:
+    set $P1560, $P1559[1]
+    unless_null $P1560, vivify_363
+    new $P1560, "Undef"
+  vivify_363:
+    if $P1560, if_1558
+.annotate 'line', 491
+    find_lex $P1576, "$str"
+    find_lex $P1577, "$_"
+    unless_null $P1577, vivify_364
+    $P1577 = root_new ['parrot';'ResizablePMCArray']
+  vivify_364:
+    set $P1578, $P1577[0]
+    unless_null $P1578, vivify_365
+    new $P1578, "Undef"
+  vivify_365:
+    concat $P1579, $P1576, $P1578
+    store_lex "$str", $P1579
+    set $P1557, $P1579
+.annotate 'line', 469
+    goto if_1558_end
+  if_1558:
+    .const 'Sub' $P1562 = "89_1282323999.42098" 
+    capture_lex $P1562
+    $P1575 = $P1562()
+    set $P1557, $P1575
+  if_1558_end:
+.annotate 'line', 468
+    .return ($P1557)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Actions"]
+.sub "_block1561"  :anon :subid("89_1282323999.42098") :outer("88_1282323999.42098")
+.annotate 'line', 470
+    new $P1563, "Undef"
+    .lex "$a", $P1563
+.annotate 'line', 471
+    new $P1564, "Undef"
+    .lex "$b", $P1564
+.annotate 'line', 472
+    new $P1565, "Undef"
+    .lex "$c", $P1565
+.annotate 'line', 470
+    find_lex $P1566, "$_"
+    unless_null $P1566, vivify_366
+    $P1566 = root_new ['parrot';'ResizablePMCArray']
+  vivify_366:
+    set $P1567, $P1566[0]
+    unless_null $P1567, vivify_367
+    new $P1567, "Undef"
+  vivify_367:
+    store_lex "$a", $P1567
+.annotate 'line', 471
+    find_lex $P1568, "$_"
+    unless_null $P1568, vivify_368
+    $P1568 = root_new ['parrot';'ResizablePMCArray']
+  vivify_368:
+    set $P1569, $P1568[1]
+    unless_null $P1569, vivify_369
+    $P1569 = root_new ['parrot';'ResizablePMCArray']
+  vivify_369:
+    set $P1570, $P1569[0]
+    unless_null $P1570, vivify_370
+    new $P1570, "Undef"
+  vivify_370:
+    store_lex "$b", $P1570
+.annotate 'line', 472
 
                              $P0 = find_lex '$a'
                              $S0 = $P0
@@ -12351,255 +13352,255 @@
                              inc $I0
                              goto cclass_loop
                            cclass_done:
-                             $P1534 = box $S2
+                             $P1571 = box $S2
                          
-    store_lex "$c", $P1534
-.annotate 'line', 475
-    find_lex $P1535, "$str"
-    find_lex $P1536, "$c"
-    concat $P1537, $P1535, $P1536
-    store_lex "$str", $P1537
-.annotate 'line', 455
-    .return ($P1537)
+    store_lex "$c", $P1571
+.annotate 'line', 489
+    find_lex $P1572, "$str"
+    find_lex $P1573, "$c"
+    concat $P1574, $P1572, $P1573
+    store_lex "$str", $P1574
+.annotate 'line', 469
+    .return ($P1574)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1501"  :anon :subid("85_1280467473.99327") :outer("84_1280467473.99327")
-.annotate 'line', 451
-    new $P1503, "Undef"
-    .lex "$name", $P1503
-    find_lex $P1504, "$/"
-    unless_null $P1504, vivify_361
-    $P1504 = root_new ['parrot';'Hash']
-  vivify_361:
-    set $P1505, $P1504["name"]
-    unless_null $P1505, vivify_362
-    new $P1505, "Undef"
-  vivify_362:
-    set $S1506, $P1505
-    new $P1507, 'String'
-    set $P1507, $S1506
-    store_lex "$name", $P1507
-.annotate 'line', 452
-    get_hll_global $P1508, ["PAST"], "Regex"
-    find_lex $P1509, "$name"
-    find_lex $P1510, "$/"
-    $P1511 = $P1508."new"($P1509, "subrule" :named("pasttype"), "method" :named("subtype"), $P1510 :named("node"))
-    store_lex "$past", $P1511
-.annotate 'line', 450
-    .return ($P1511)
+.sub "_block1538"  :anon :subid("87_1282323999.42098") :outer("86_1282323999.42098")
+.annotate 'line', 465
+    new $P1540, "Undef"
+    .lex "$name", $P1540
+    find_lex $P1541, "$/"
+    unless_null $P1541, vivify_371
+    $P1541 = root_new ['parrot';'Hash']
+  vivify_371:
+    set $P1542, $P1541["name"]
+    unless_null $P1542, vivify_372
+    new $P1542, "Undef"
+  vivify_372:
+    set $S1543, $P1542
+    new $P1544, 'String'
+    set $P1544, $S1543
+    store_lex "$name", $P1544
+.annotate 'line', 466
+    get_hll_global $P1545, ["PAST"], "Regex"
+    find_lex $P1546, "$name"
+    find_lex $P1547, "$/"
+    $P1548 = $P1545."new"($P1546, "subrule" :named("pasttype"), "method" :named("subtype"), $P1547 :named("node"))
+    store_lex "$past", $P1548
+.annotate 'line', 464
+    .return ($P1548)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "mod_internal"  :subid("88_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1562
-.annotate 'line', 485
-    new $P1561, 'ExceptionHandler'
-    set_addr $P1561, control_1560
-    $P1561."handle_types"(.CONTROL_RETURN)
-    push_eh $P1561
-    .lex "self", self
-    .lex "$/", param_1562
-.annotate 'line', 486
-    $P1563 = root_new ['parrot';'Hash']
-    .lex "%mods", $P1563
-.annotate 'line', 487
-    new $P1564, "Undef"
-    .lex "$n", $P1564
-.annotate 'line', 486
-    get_global $P1565, "@MODIFIERS"
-    unless_null $P1565, vivify_365
-    $P1565 = root_new ['parrot';'ResizablePMCArray']
-  vivify_365:
-    set $P1566, $P1565[0]
-    unless_null $P1566, vivify_366
-    new $P1566, "Undef"
-  vivify_366:
-    store_lex "%mods", $P1566
-.annotate 'line', 487
-    find_lex $P1569, "$/"
-    unless_null $P1569, vivify_367
-    $P1569 = root_new ['parrot';'Hash']
-  vivify_367:
-    set $P1570, $P1569["n"]
-    unless_null $P1570, vivify_368
-    $P1570 = root_new ['parrot';'ResizablePMCArray']
-  vivify_368:
-    set $P1571, $P1570[0]
-    unless_null $P1571, vivify_369
-    new $P1571, "Undef"
-  vivify_369:
-    set $S1572, $P1571
-    isgt $I1573, $S1572, ""
-    if $I1573, if_1568
-    new $P1578, "Integer"
-    assign $P1578, 1
-    set $P1567, $P1578
-    goto if_1568_end
-  if_1568:
-    find_lex $P1574, "$/"
-    unless_null $P1574, vivify_370
-    $P1574 = root_new ['parrot';'Hash']
-  vivify_370:
-    set $P1575, $P1574["n"]
-    unless_null $P1575, vivify_371
-    $P1575 = root_new ['parrot';'ResizablePMCArray']
-  vivify_371:
-    set $P1576, $P1575[0]
-    unless_null $P1576, vivify_372
-    new $P1576, "Undef"
-  vivify_372:
-    set $N1577, $P1576
-    new $P1567, 'Float'
-    set $P1567, $N1577
-  if_1568_end:
-    store_lex "$n", $P1567
-.annotate 'line', 488
-    find_lex $P1579, "$n"
-    find_lex $P1580, "$/"
-    unless_null $P1580, vivify_373
-    $P1580 = root_new ['parrot';'Hash']
-  vivify_373:
-    set $P1581, $P1580["mod_ident"]
-    unless_null $P1581, vivify_374
-    $P1581 = root_new ['parrot';'Hash']
-  vivify_374:
-    set $P1582, $P1581["sym"]
-    unless_null $P1582, vivify_375
-    new $P1582, "Undef"
+.sub "mod_internal"  :subid("90_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1599
+.annotate 'line', 499
+    new $P1598, 'ExceptionHandler'
+    set_addr $P1598, control_1597
+    $P1598."handle_types"(.CONTROL_RETURN)
+    push_eh $P1598
+    .lex "self", self
+    .lex "$/", param_1599
+.annotate 'line', 500
+    $P1600 = root_new ['parrot';'Hash']
+    .lex "%mods", $P1600
+.annotate 'line', 501
+    new $P1601, "Undef"
+    .lex "$n", $P1601
+.annotate 'line', 500
+    get_global $P1602, "@MODIFIERS"
+    unless_null $P1602, vivify_375
+    $P1602 = root_new ['parrot';'ResizablePMCArray']
   vivify_375:
-    set $S1583, $P1582
-    find_lex $P1584, "%mods"
-    unless_null $P1584, vivify_376
-    $P1584 = root_new ['parrot';'Hash']
-    store_lex "%mods", $P1584
+    set $P1603, $P1602[0]
+    unless_null $P1603, vivify_376
+    new $P1603, "Undef"
   vivify_376:
-    set $P1584[$S1583], $P1579
-.annotate 'line', 489
-    find_lex $P1585, "$/"
-    $P1586 = $P1585."!make"(0)
-.annotate 'line', 485
-    .return ($P1586)
-  control_1560:
+    store_lex "%mods", $P1603
+.annotate 'line', 501
+    find_lex $P1606, "$/"
+    unless_null $P1606, vivify_377
+    $P1606 = root_new ['parrot';'Hash']
+  vivify_377:
+    set $P1607, $P1606["n"]
+    unless_null $P1607, vivify_378
+    $P1607 = root_new ['parrot';'ResizablePMCArray']
+  vivify_378:
+    set $P1608, $P1607[0]
+    unless_null $P1608, vivify_379
+    new $P1608, "Undef"
+  vivify_379:
+    set $S1609, $P1608
+    isgt $I1610, $S1609, ""
+    if $I1610, if_1605
+    new $P1615, "Integer"
+    assign $P1615, 1
+    set $P1604, $P1615
+    goto if_1605_end
+  if_1605:
+    find_lex $P1611, "$/"
+    unless_null $P1611, vivify_380
+    $P1611 = root_new ['parrot';'Hash']
+  vivify_380:
+    set $P1612, $P1611["n"]
+    unless_null $P1612, vivify_381
+    $P1612 = root_new ['parrot';'ResizablePMCArray']
+  vivify_381:
+    set $P1613, $P1612[0]
+    unless_null $P1613, vivify_382
+    new $P1613, "Undef"
+  vivify_382:
+    set $N1614, $P1613
+    new $P1604, 'Float'
+    set $P1604, $N1614
+  if_1605_end:
+    store_lex "$n", $P1604
+.annotate 'line', 502
+    find_lex $P1616, "$n"
+    find_lex $P1617, "$/"
+    unless_null $P1617, vivify_383
+    $P1617 = root_new ['parrot';'Hash']
+  vivify_383:
+    set $P1618, $P1617["mod_ident"]
+    unless_null $P1618, vivify_384
+    $P1618 = root_new ['parrot';'Hash']
+  vivify_384:
+    set $P1619, $P1618["sym"]
+    unless_null $P1619, vivify_385
+    new $P1619, "Undef"
+  vivify_385:
+    set $S1620, $P1619
+    find_lex $P1621, "%mods"
+    unless_null $P1621, vivify_386
+    $P1621 = root_new ['parrot';'Hash']
+    store_lex "%mods", $P1621
+  vivify_386:
+    set $P1621[$S1620], $P1616
+.annotate 'line', 503
+    find_lex $P1622, "$/"
+    $P1623 = $P1622."!make"(0)
+.annotate 'line', 499
+    .return ($P1623)
+  control_1597:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1587, exception, "payload"
-    .return ($P1587)
+    getattribute $P1624, exception, "payload"
+    .return ($P1624)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "subrule_alias"  :subid("89_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1594
-    .param pmc param_1595
-.annotate 'line', 583
-    new $P1593, 'ExceptionHandler'
-    set_addr $P1593, control_1592
-    $P1593."handle_types"(.CONTROL_RETURN)
-    push_eh $P1593
-    .lex "self", self
-    .lex "$past", param_1594
-    .lex "$name", param_1595
-.annotate 'line', 584
-    find_lex $P1597, "$past"
-    $S1598 = $P1597."name"()
-    isgt $I1599, $S1598, ""
-    if $I1599, if_1596
-.annotate 'line', 585
-    find_lex $P1606, "$past"
-    find_lex $P1607, "$name"
-    $P1606."name"($P1607)
-    goto if_1596_end
-  if_1596:
-.annotate 'line', 584
-    find_lex $P1600, "$past"
-    find_lex $P1601, "$name"
-    concat $P1602, $P1601, "="
-    find_lex $P1603, "$past"
-    $S1604 = $P1603."name"()
-    concat $P1605, $P1602, $S1604
-    $P1600."name"($P1605)
-  if_1596_end:
-.annotate 'line', 586
-    find_lex $P1608, "$past"
-    $P1609 = $P1608."subtype"("capture")
-.annotate 'line', 583
-    .return ($P1609)
-  control_1592:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1610, exception, "payload"
-    .return ($P1610)
+.sub "subrule_alias"  :subid("91_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1631
+    .param pmc param_1632
+.annotate 'line', 597
+    new $P1630, 'ExceptionHandler'
+    set_addr $P1630, control_1629
+    $P1630."handle_types"(.CONTROL_RETURN)
+    push_eh $P1630
+    .lex "self", self
+    .lex "$past", param_1631
+    .lex "$name", param_1632
+.annotate 'line', 598
+    find_lex $P1634, "$past"
+    $S1635 = $P1634."name"()
+    isgt $I1636, $S1635, ""
+    if $I1636, if_1633
+.annotate 'line', 599
+    find_lex $P1643, "$past"
+    find_lex $P1644, "$name"
+    $P1643."name"($P1644)
+    goto if_1633_end
+  if_1633:
+.annotate 'line', 598
+    find_lex $P1637, "$past"
+    find_lex $P1638, "$name"
+    concat $P1639, $P1638, "="
+    find_lex $P1640, "$past"
+    $S1641 = $P1640."name"()
+    concat $P1642, $P1639, $S1641
+    $P1637."name"($P1642)
+  if_1633_end:
+.annotate 'line', 600
+    find_lex $P1645, "$past"
+    $P1646 = $P1645."subtype"("capture")
+.annotate 'line', 597
+    .return ($P1646)
+  control_1629:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1647, exception, "payload"
+    .return ($P1647)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "named_assertion"  :subid("90_1280467473.99327") :method :outer("11_1280467473.99327")
-    .param pmc param_1614
-.annotate 'line', 589
-    new $P1613, 'ExceptionHandler'
-    set_addr $P1613, control_1612
-    $P1613."handle_types"(.CONTROL_RETURN)
-    push_eh $P1613
-    .lex "self", self
-    .lex "$/", param_1614
-.annotate 'line', 590
-    new $P1615, "Undef"
-    .lex "$name", $P1615
-.annotate 'line', 591
-    new $P1616, "Undef"
-    .lex "$past", $P1616
-.annotate 'line', 590
-    find_lex $P1617, "$/"
-    unless_null $P1617, vivify_377
-    $P1617 = root_new ['parrot';'Hash']
-  vivify_377:
-    set $P1618, $P1617["longname"]
-    unless_null $P1618, vivify_378
-    new $P1618, "Undef"
-  vivify_378:
-    set $S1619, $P1618
-    new $P1620, 'String'
-    set $P1620, $S1619
-    store_lex "$name", $P1620
-.annotate 'line', 591
-    get_hll_global $P1621, ["PAST"], "Regex"
-    find_lex $P1622, "$name"
-    find_lex $P1623, "$name"
-    find_lex $P1624, "$/"
-    $P1625 = $P1621."new"($P1622, $P1623 :named("name"), "subrule" :named("pasttype"), "capture" :named("subtype"), $P1624 :named("node"))
-    store_lex "$past", $P1625
-    find_lex $P1626, "$past"
-.annotate 'line', 589
-    .return ($P1626)
-  control_1612:
+.sub "named_assertion"  :subid("92_1282323999.42098") :method :outer("11_1282323999.42098")
+    .param pmc param_1651
+.annotate 'line', 603
+    new $P1650, 'ExceptionHandler'
+    set_addr $P1650, control_1649
+    $P1650."handle_types"(.CONTROL_RETURN)
+    push_eh $P1650
+    .lex "self", self
+    .lex "$/", param_1651
+.annotate 'line', 604
+    new $P1652, "Undef"
+    .lex "$name", $P1652
+.annotate 'line', 605
+    new $P1653, "Undef"
+    .lex "$past", $P1653
+.annotate 'line', 604
+    find_lex $P1654, "$/"
+    unless_null $P1654, vivify_387
+    $P1654 = root_new ['parrot';'Hash']
+  vivify_387:
+    set $P1655, $P1654["longname"]
+    unless_null $P1655, vivify_388
+    new $P1655, "Undef"
+  vivify_388:
+    set $S1656, $P1655
+    new $P1657, 'String'
+    set $P1657, $S1656
+    store_lex "$name", $P1657
+.annotate 'line', 605
+    get_hll_global $P1658, ["PAST"], "Regex"
+    find_lex $P1659, "$name"
+    find_lex $P1660, "$name"
+    find_lex $P1661, "$/"
+    $P1662 = $P1658."new"($P1659, $P1660 :named("name"), "subrule" :named("pasttype"), "capture" :named("subtype"), $P1661 :named("node"))
+    store_lex "$past", $P1662
+    find_lex $P1663, "$past"
+.annotate 'line', 603
+    .return ($P1663)
+  control_1649:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1627, exception, "payload"
-    .return ($P1627)
+    getattribute $P1664, exception, "payload"
+    .return ($P1664)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1629" :load :anon :subid("91_1280467473.99327")
+.sub "_block1666" :load :anon :subid("93_1282323999.42098")
 .annotate 'line', 4
-    .const 'Sub' $P1631 = "11_1280467473.99327" 
-    $P1632 = $P1631()
-    .return ($P1632)
+    .const 'Sub' $P1668 = "11_1282323999.42098" 
+    $P1669 = $P1668()
+    .return ($P1669)
 .end
 
 
 .namespace []
-.sub "_block1635" :load :anon :subid("92_1280467473.99327")
+.sub "_block1672" :load :anon :subid("94_1282323999.42098")
 .annotate 'line', 1
-    .const 'Sub' $P1637 = "10_1280467473.99327" 
-    $P1638 = $P1637()
-    .return ($P1638)
+    .const 'Sub' $P1674 = "10_1282323999.42098" 
+    $P1675 = $P1674()
+    .return ($P1675)
 .end
 
 # .include 'src/cheats/p6regex-grammar.pir'

Modified: branches/unshared_buffers/ext/nqp-rx/src/stage0/Regex-s0.pir
==============================================================================
--- branches/unshared_buffers/ext/nqp-rx/src/stage0/Regex-s0.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/ext/nqp-rx/src/stage0/Regex-s0.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -493,22 +493,27 @@
 =cut
 
 .sub '!cursor_debug' :method
+    .param string tag
     .param pmc args            :slurpy
     $P0 = getattribute self, '$!debug'
     if null $P0 goto done
     unless $P0 goto done
-    .local pmc from, pos, orig
-    .local int line
+    .local pmc fmt, from, pos, orig, line
+    fmt = new ['ResizablePMCArray']
     from = getattribute self, '$!from'
     orig = getattribute self, '$!target'
     line = orig.'lineof'(from)
-    inc line
+
     $P0 = getinterp
     $P1 = $P0.'stdhandle'(2)
-    print $P1, from
-    print $P1, '/'
-    print $P1, line
-    print $P1, ': '
+
+    $N0 = time
+    push fmt, $N0
+    push fmt, from
+    push fmt, line
+    push fmt, tag
+    $S0 = sprintf "%.6f %d/%d %-8s ", fmt
+    print $P1, $S0
     $S0 = join '', args
     print $P1, $S0
     print $P1, "\n"
@@ -1015,6 +1020,11 @@
     .local int pos, eos
     .local string tgt
     (cur, pos, tgt) = self.'!cursor_start'()
+    .local pmc debug
+    debug = getattribute cur, '$!debug'
+    if null debug goto debug_1
+    cur.'!cursor_debug'('START', 'ww')
+  debug_1:
     if pos == 0 goto fail
     eos = length tgt
     if pos == eos goto fail
@@ -1025,7 +1035,13 @@
     unless $I0 goto fail
   pass:
     cur.'!cursor_pass'(pos, 'ww')
+    if null debug goto done
+    cur.'!cursor_debug'('PASS', 'ww')
+    goto done
   fail:
+    if null debug goto done
+    cur.'!cursor_debug'('FAIL', 'ww')
+  done:
     .return (cur)
 .end
 
@@ -1197,11 +1213,20 @@
 .sub '!protoregex' :method
     .param string name
 
+    .local pmc debug
+    debug = getattribute self, '$!debug'
+    if null debug goto have_debug
+    if debug goto have_debug
+    null debug
+  have_debug:
+
     .local pmc tokrx, toklen
     (tokrx, toklen) = self.'!protoregex_tokrx'(name)
   have_tokrx:
 
-    self.'!cursor_debug'('PROTO ', name)
+    if null debug goto debug_skip_1
+    self.'!cursor_debug'('PROTO', name)
+  debug_skip_1:
 
     # If there are no entries at all for this protoregex, we fail outright.
     unless tokrx goto fail
@@ -1219,9 +1244,12 @@
     token1 = substr target, pos, 1
     $I0 = toklen[token1]
     token = substr target, pos, $I0
+
+    if null debug goto debug_skip_2
     $S0 = escape token
     $S1 = escape token1
-    self.'!cursor_debug'('        token1="', $S1, '", token="', $S0, '"')
+    self.'!cursor_debug'('NOTE', 'token1="', $S1, '", token="', $S0, '"')
+  debug_skip_2:
 
     # Create a hash to keep track of the methods we've already called,
     # so that we don't end up calling it twice.
@@ -1267,11 +1295,17 @@
 
   done:
     pos = result.'pos'()
-    self.'!cursor_debug'('PASS  ', name, ' at pos=', pos)
+
+    if null debug goto debug_skip_3
+    self.'!cursor_debug'('PASS', name, ' at pos=', pos)
+  debug_skip_3:
+
     .return (result)
 
   fail:
-    self.'!cursor_debug'('FAIL  ', name)
+    if null debug goto debug_skip_4
+    self.'!cursor_debug'('FAIL', name)
+  debug_skip_4:
     unless null result goto fail_1
     result = self.'!cursor_start'()
     result.'!cursor_fail'()
@@ -1335,7 +1369,7 @@
     toklen = prototable[$S0]
     unless null tokrx goto tokrx_done
 
-    self.'!cursor_debug'('Generating protoregex table for ', name)
+    self.'!cursor_debug'('NOTE','Generating protoregex table for ', name)
 
     .local pmc toklen, tokrx
     toklen = new ['Hash']
@@ -2495,7 +2529,7 @@
     .local string prefix, rname, rtype
     prefix = self.'unique'('rx')
     concat prefix, '_'
-    $P0 = split ' ', 'tgt string pos int off int eos int rep int cur pmc'
+    $P0 = split ' ', 'tgt string pos int off int eos int rep int cur pmc debug pmc'
     $P1 = iter $P0
   iter_loop:
     unless $P1 goto iter_done
@@ -2539,8 +2573,8 @@
     goto capnames_loop
   capnames_done:
 
-    .local string cur, rep, pos, tgt, off, eos
-    (cur, rep, pos, tgt, off, eos) = self.'!rxregs'('cur rep pos tgt off eos')
+    .local string cur, rep, pos, tgt, off, eos, debug
+    (cur, rep, pos, tgt, off, eos, debug) = self.'!rxregs'('cur rep pos tgt off eos debug')
 
     unless regexname goto peek_done
     .local pmc tpast, token, tpost
@@ -2572,6 +2606,7 @@
     self.'!cursorop'(ops, '!cursor_caparray', 0, caparray :flat)
   caparray_skip:
 
+    ops.'push_pirop'('getattribute', debug, cur, '"$!debug"')
     ops.'push_pirop'('.lex', 'unicode:"$\x{a2}"', cur)
     ops.'push_pirop'('.local pmc', 'match')
     ops.'push_pirop'('.lex', '"$/"', 'match')
@@ -2594,12 +2629,12 @@
     ops.'push_pirop'('substr', tgt, tgt, off, 'result'=>tgt)
     ops.'push'(startlabel)
     ops.'push_pirop'('eq', '$I10', 1, restartlabel)
-    self.'!cursorop'(ops, '!cursor_debug', 0, '"START "', regexname_esc)
+    self.'!cursorop'(ops, '!cursor_debug', 0, '"START"', regexname_esc)
 
     $P0 = self.'post_regex'(node)
     ops.'push'($P0)
     ops.'push'(restartlabel)
-    self.'!cursorop'(ops, '!cursor_debug', 0, '"NEXT "', regexname_esc)
+    self.'!cursorop'(ops, '!cursor_debug', 0, '"NEXT"', regexname_esc)
     ops.'push'(faillabel)
     self.'!cursorop'(ops, '!mark_fail', 4, rep, pos, '$I10', '$P10', 0)
     ops.'push_pirop'('lt', pos, CURSOR_FAIL, donelabel)
@@ -2607,7 +2642,7 @@
     ops.'push_pirop'('jump', '$I10')
     ops.'push'(donelabel)
     self.'!cursorop'(ops, '!cursor_fail', 0)
-    self.'!cursorop'(ops, '!cursor_debug', 0, '"FAIL  "', regexname_esc)
+    self.'!cursorop'(ops, '!cursor_debug', 0, '"FAIL"', regexname_esc)
     ops.'push_pirop'('return', cur)
     .return (ops)
 .end
@@ -2631,6 +2666,13 @@
     .param int retelems
     .param pmc args            :slurpy
 
+    $S0 = concat '!cursorop_', func
+    $I0 = can self, $S0
+    unless $I0 goto cursorop_default
+    $P0 = self.$S0(ops, func, retelems, args :flat)
+    unless null $P0 goto done
+
+  cursorop_default:
     if retelems < 1 goto result_done
     .local pmc retargs
     retargs = new ['ResizableStringArray']
@@ -2658,6 +2700,23 @@
     .return (ops)
 .end
 
+.sub '!cursorop_!cursor_debug' :method
+    .param pmc ops
+    .param string func
+    .param int retelems
+    .param pmc args            :slurpy
+
+    .local pmc cur, debug, debuglabel
+    $P99 = get_hll_global ['POST'], 'Label'
+    debuglabel = $P99.'new'('name'=>'debug_')
+    (cur, debug) = self.'!rxregs'('cur debug')
+    ops.'push_pirop'('if_null', debug, debuglabel)
+    $S0 = self.'escape'(func)
+    ops.'push_pirop'('callmethod', $S0, cur, args :flat)
+    ops.'push'(debuglabel)
+    .return (ops)
+.end
+
 
 =item !rxregs(keystr)
 
@@ -3058,6 +3117,70 @@
 .end
 
 
+=item conj(PAST::Regex node)
+
+=cut
+
+.sub 'conj' :method :multi(_, ['PAST';'Regex'])
+    .param pmc node
+
+    .local pmc cur, pos, fail
+    (cur, pos, fail) = self.'!rxregs'('cur pos fail')
+
+    .local string name
+    name = self.'unique'('conj')
+    concat name, '_'
+
+    .local pmc ops, iter
+    ops = self.'post_new'('Ops', 'node'=>node, 'result'=>cur)
+    iter = node.'iterator'()
+    unless iter goto done
+
+    .local pmc clabel
+    $S0 = concat name, 'mark'
+    clabel = self.'post_new'('Label', 'result'=>$S0)
+
+    .local int acount
+    .local pmc alabel, apast, apost
+    acount = 0
+    $S0 = acount
+    $S0 = concat name, $S0
+    alabel = self.'post_new'('Label', 'result'=>$S0)
+
+    ops.'push_pirop'('inline', name, 'inline'=>'  # rx %0')
+    ops.'push_pirop'('set_addr', '$I10', clabel)
+    self.'!cursorop'(ops, '!mark_push', 0, pos, CURSOR_FAIL, '$I10')
+    ops.'push_pirop'('goto', alabel)
+    ops.'push'(clabel)
+    ops.'push_pirop'('goto', fail)
+    ops.'push'(alabel)
+    apast = shift iter
+    apost = self.'post_regex'(apast, cur)
+    ops.'push'(apost)
+    ops.'push_pirop'('set_addr', '$I10', clabel)
+    self.'!cursorop'(ops, '!mark_peek', 1, '$I11', '$I10')
+    self.'!cursorop'(ops, '!mark_push', 0, '$I11', pos, '$I10')
+
+  iter_loop:
+    inc acount
+    $S0 = acount
+    $S0 = concat name, $S0
+    alabel = self.'post_new'('Label', 'result'=>$S0)
+    ops.'push'(alabel)
+    ops.'push_pirop'('set', pos, '$I11')
+    apast = shift iter
+    apost = self.'post_regex'(apast, cur)
+    ops.'push'(apost)
+    ops.'push_pirop'('set_addr', '$I10', clabel)
+    self.'!cursorop'(ops, '!mark_peek', 2, '$I11', '$I12', '$I10')
+    ops.'push_pirop'('ne', pos, '$I12', fail)
+    if iter goto iter_loop
+  iter_done:
+  done:
+    .return (ops)
+.end
+
+
 =item cut(PAST::Regex node)
 
 Generate POST for the cut-group and cut-rule operators.
@@ -3114,6 +3237,69 @@
     .return (ops)
 .end
 
+.sub 'enumcharlist_q' :method :multi(_, ['PAST';'Regex'])
+    .param pmc node
+    .param string backtrack
+    .param int min
+    .param int max
+    .param pmc sep
+
+    if backtrack != 'r' goto pessimistic
+    if sep goto pessimistic
+
+    .local pmc cur, tgt, pos, off, eos, fail, rep, ops
+    (cur, tgt, pos, off, eos, fail, rep) = self.'!rxregs'('cur tgt pos off eos fail rep')
+    ops = self.'post_new'('Ops', 'node'=>node, 'result'=>cur)
+
+    .local string charlist
+    charlist = node[0]
+    charlist = self.'escape'(charlist)
+    .local pmc negate, testop
+    negate = node.'negate'()
+    testop = self.'??!!'(negate, 'ge', 'lt')
+    .local string subtype
+    subtype = node.'subtype'()
+    if subtype == 'zerowidth' goto pessimistic
+
+    .local pmc looplabel, donelabel
+    .local string name
+    name = self.'unique'('rxenumcharlistq')
+    $S1 = concat name, '_loop'
+    looplabel = self.'post_new'('Label', 'result'=>$S1)
+    $S1 = concat name, '_done'
+    donelabel = self.'post_new'('Label', 'result'=>$S1)
+
+    ops.'push_pirop'('inline', negate, subtype, backtrack, min, max, 'inline'=>'  # rx enumcharlist_q negate=%0 %1 %2 %3..%4')
+    ops.'push_pirop'('sub', '$I10', pos, off)
+    ops.'push_pirop'('set', rep, 0)
+    ops.'push_pirop'('sub', '$I12', eos, pos)
+    unless max > 0 goto max1_done
+    ops.'push_pirop'('le', '$I12', max, looplabel)
+    ops.'push_pirop'('set', '$I12', max)
+  max1_done:
+    ops.'push'(looplabel)
+    ops.'push_pirop'('le', '$I12', 0, donelabel)
+    ops.'push_pirop'('substr', '$S10', tgt, '$I10', 1)
+    ops.'push_pirop'('index', '$I11', charlist, '$S10')
+    ops.'push_pirop'(testop, '$I11', 0, donelabel)
+    ops.'push_pirop'('inc', rep)
+    if max == 1 goto max2_done
+    ops.'push_pirop'('inc', '$I10')
+    ops.'push_pirop'('dec', '$I12')
+    ops.'push_pirop'('goto', looplabel)
+  max2_done:
+    ops.'push'(donelabel)
+    unless min > 0 goto min2_done
+    ops.'push_pirop'('lt', rep, min, fail)
+  min2_done:
+    ops.'push_pirop'('add', pos, pos, rep)
+    .return (ops)
+
+  pessimistic:
+    null ops
+    .return (ops)
+.end
+
 
 =item literal(PAST::Regex node)
 
@@ -3165,7 +3351,7 @@
     ops.'push_pirop'('inline', subtype, $S0, 'inline'=>'  # rx literal %0 %1')
     ops.'push'(lpost)
 
-    .local int litlen
+    .local string litlen
     if litconst goto litlen_const
     litlen = '$I10'
     ops.'push_pirop'('length', '$I10', lpost)
@@ -3182,12 +3368,23 @@
 
     # compute string to be matched and fail if mismatch
     ops.'push_pirop'('sub', '$I11', pos, off)
+    if ignorecase goto literal_ignorecase
+    if litlen == "1" goto literal_1
+    ops.'push_pirop'('substr', '$S10', tgt, '$I11', litlen)
+    ops.'push_pirop'('ne', '$S10', lpost, fail)
+    goto literal_pass
+  literal_1:
+    $S0 = lpast
+    $I0 = ord $S0
+    ops.'push_pirop'('ord', '$I11', tgt, '$I11')
+    ops.'push_pirop'('ne', '$I11', $I0, fail)
+    goto literal_pass
+  literal_ignorecase:
     ops.'push_pirop'('substr', '$S10', tgt, '$I11', litlen)
-    unless ignorecase goto literal_test
     ops.'push_pirop'('downcase', '$S10', '$S10')
-  literal_test:
     ops.'push_pirop'('ne', '$S10', lpost, fail)
 
+  literal_pass:
     # increase position by literal length and move on
     ops.'push_pirop'('add', pos, litlen)
   done:
@@ -3240,7 +3437,7 @@
 
     ops.'push_pirop'('inline', 'inline'=>'  # rx pass')
     self.'!cursorop'(ops, '!cursor_pass', 0, pos, regexname)
-    self.'!cursorop'(ops, '!cursor_debug', 0, '"PASS  "', regexname, '" at pos="', pos)
+    self.'!cursorop'(ops, '!cursor_debug', 0, '"PASS"', regexname, '" at pos="', pos)
 
     .local string backtrack
     backtrack = node.'backtrack'()

Modified: branches/unshared_buffers/include/parrot/call.h
==============================================================================
--- branches/unshared_buffers/include/parrot/call.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/call.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -334,45 +334,54 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 FLOATVAL * Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP,
-    ARGIN(PMC *ctx),
+    ARGIN(const PMC *ctx),
     UINTVAL idx)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 INTVAL * Parrot_pcc_get_INTVAL_reg(PARROT_INTERP,
-    ARGIN(PMC *ctx),
+    ARGIN(const PMC *ctx),
     UINTVAL idx)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 PMC ** Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
-Regs_ni* Parrot_pcc_get_regs_ni(PARROT_INTERP, ARGIN(PMC *ctx))
+Regs_ni* Parrot_pcc_get_regs_ni(PARROT_INTERP, ARGIN(const PMC *ctx))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 Regs_ps* Parrot_pcc_get_regs_ps(PARROT_INTERP, ARGIN(PMC *ctx))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-UINTVAL Parrot_pcc_get_regs_used(PARROT_INTERP, ARGIN(PMC *ctx), int type)
+PARROT_PURE_FUNCTION
+UINTVAL Parrot_pcc_get_regs_used(PARROT_INTERP,
+    ARGIN(const PMC *ctx),
+    int type)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 STRING ** Parrot_pcc_get_STRING_reg(PARROT_INTERP,
     ARGIN(PMC *ctx),
@@ -381,8 +390,9 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
-PMC* Parrot_pcc_get_sub(PARROT_INTERP, ARGIN(PMC *ctx))
+PMC* Parrot_pcc_get_sub(PARROT_INTERP, ARGIN(const PMC *ctx))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 

Modified: branches/unshared_buffers/include/parrot/encoding.h
==============================================================================
--- branches/unshared_buffers/include/parrot/encoding.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/encoding.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -30,8 +30,16 @@
 
 struct string_iterator_t;       /* s. parrot/string.h */
 
-typedef void (*encoding_iter_init_t)(PARROT_INTERP, const STRING *src,
-        struct string_iterator_t *);
+typedef UINTVAL (*encoding_iter_get_t)(
+    PARROT_INTERP, const STRING *str, const String_iter *i, INTVAL  offset);
+typedef void    (*encoding_iter_skip_t)(
+    PARROT_INTERP, const STRING *str,       String_iter *i, INTVAL  skip);
+typedef UINTVAL (*encoding_iter_get_and_advance_t)(
+    PARROT_INTERP, const STRING *str,       String_iter *i);
+typedef void    (*encoding_iter_set_and_advance_t)(
+    PARROT_INTERP,       STRING *str,       String_iter *i, UINTVAL c);
+typedef void    (*encoding_iter_set_position_t)(
+    PARROT_INTERP, const STRING *str,       String_iter *i, UINTVAL pos);
 
 struct _encoding {
     ARGIN(const char *name);
@@ -44,9 +52,13 @@
     encoding_get_bytes_t                get_bytes;
     encoding_codepoints_t               codepoints;
     encoding_bytes_t                    bytes;
-    encoding_iter_init_t                iter_init;
     encoding_find_cclass_t              find_cclass;
     encoding_hash_t                     hash;
+    encoding_iter_get_t                 iter_get;
+    encoding_iter_skip_t                iter_skip;
+    encoding_iter_get_and_advance_t     iter_get_and_advance;
+    encoding_iter_set_and_advance_t     iter_set_and_advance;
+    encoding_iter_set_position_t        iter_set_position;
 };
 
 typedef struct _encoding ENCODING;
@@ -209,8 +221,6 @@
     ((src)->encoding)->codepoints((i), (src))
 #define ENCODING_BYTES(i, src) \
     ((src)->encoding)->bytes((i), (src))
-#define ENCODING_ITER_INIT(i, src, iter) \
-    ((src)->encoding)->iter_init((i), (src), (iter))
 #define ENCODING_FIND_CCLASS(i, src, typetable, flags, pos, end) \
     ((src)->encoding)->find_cclass((i), (src), (typetable), (flags), (pos), (end))
 #define ENCODING_HASH(i, src, seed) \

Modified: branches/unshared_buffers/include/parrot/hash.h
==============================================================================
--- branches/unshared_buffers/include/parrot/hash.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/hash.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -21,7 +21,6 @@
 
 /* A BucketIndex is an index into the pool of available buckets. */
 typedef UINTVAL BucketIndex;
-#define INITBucketIndex ((BucketIndex)-2)
 
 #define N_BUCKETS(n) ((n))
 #define HASH_ALLOC_SIZE(n) (N_BUCKETS(n) * sizeof (HashBucket) + \
@@ -51,7 +50,7 @@
     HashBucket *buckets;
 
     /* List of Bucket pointers */
-    HashBucket **bucket_indices;
+    HashBucket **index;
 
     /* Store for empty buckets */
     HashBucket *free_list;
@@ -78,6 +77,51 @@
     hash_hash_key_fn hash_val;
 };
 
+/* Utility macros - use them, do not reinvent the wheel */
+#define parrot_hash_iterate parrot_hash_iterate_linear
+
+#define parrot_hash_iterate_linear(_hash, _code)                            \
+{                                                                           \
+    HashBucket *_bucket = (_hash)->buckets;                                 \
+    UINTVAL     _found  = 0;                                                \
+    while (_found < (_hash)->entries){                                      \
+        if (_bucket->key){                                                  \
+            _found++;                                                       \
+            {                                                               \
+                _code                                                       \
+            }                                                               \
+        }                                                                   \
+       _bucket++;                                                           \
+    }                                                                       \
+}
+
+#define parrot_hash_iterate_indexed(_hash, _code)                           \
+{                                                                           \
+    INTVAL _loc;                                                            \
+    for (_loc = (_hash)->mask; _loc >= 0; --_loc) {                         \
+        HashBucket *_bucket = (_hash)->index[_loc];                         \
+        while (_bucket) {                                                   \
+            _code                                                           \
+            _bucket = _bucket->next;                                        \
+        }                                                                   \
+    }                                                                       \
+}
+
+
+#define parrot_hash_iterator_advance(_hash, _bucket, _loc)                  \
+{                                                                           \
+    /* Try to advance current bucket */                                     \
+    if ((_bucket))                                                          \
+        (_bucket) = (_bucket)->next;                                        \
+    while (!(_bucket)) {                                                    \
+        /* If there is no more buckets */                                   \
+        if ((_loc) == (INTVAL)(_hash)->mask+1)                              \
+            break;                                                          \
+        (_bucket) = (_hash)->index[(_loc)++];                               \
+    }                                                                       \
+}
+
+
 typedef void (*value_free)(ARGFREE(void *));
 
 /* To avoid creating OrderedHashItem PMC we reuse FixedPMCArray PMC */
@@ -146,17 +190,6 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-void * parrot_hash_get_idx(PARROT_INTERP,
-    ARGIN(const Hash *hash),
-    ARGMOD(PMC *key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*key);
-
-PARROT_EXPORT
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 HashBucket* parrot_hash_put(PARROT_INTERP,
@@ -174,16 +207,6 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-void parrot_hash_visit(PARROT_INTERP,
-    ARGMOD(Hash *hash),
-    ARGMOD(void *pinfo))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*hash)
-        FUNC_MODIFIES(*pinfo);
-
-PARROT_EXPORT
 void parrot_mark_hash(PARROT_INTERP, ARGMOD(Hash *hash))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -210,19 +233,40 @@
 Hash * parrot_new_pointer_hash(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-PARROT_CANNOT_RETURN_NULL
-PMC* get_integer_pmc(PARROT_INTERP, INTVAL value)
-        __attribute__nonnull__(1);
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+int hash_compare_int(SHIM_INTERP,
+    ARGIN_NULLOK(const void *a),
+    ARGIN_NULLOK(const void *b));
 
-PARROT_CANNOT_RETURN_NULL
-PMC* get_number_pmc(PARROT_INTERP, FLOATVAL value)
-        __attribute__nonnull__(1);
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+int hash_compare_pmc(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
-PARROT_CANNOT_RETURN_NULL
-PMC * get_string_pmc(PARROT_INTERP, ARGIN(STRING *value))
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+int hash_compare_pointer(SHIM_INTERP,
+    ARGIN_NULLOK(const void *a),
+    ARGIN_NULLOK(const void *b));
+
+PARROT_WARN_UNUSED_RESULT
+int hash_compare_string(PARROT_INTERP,
+    ARGIN(const void *search_key),
+    ARGIN_NULLOK(const void *bucket_key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
+int hash_compare_string_distinct_enc(PARROT_INTERP,
+    ARGIN(const void *search_key),
+    ARGIN(const void *bucket_key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
 PARROT_CAN_RETURN_NULL
 void* hash_key_from_int(PARROT_INTERP, ARGIN(const Hash *hash), INTVAL key)
         __attribute__nonnull__(1)
@@ -321,12 +365,6 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CONST_FUNCTION
-int int_compare(SHIM_INTERP,
-    ARGIN_NULLOK(const void *a),
-    ARGIN_NULLOK(const void *b));
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
 size_t key_hash_int(SHIM_INTERP,
     ARGIN_NULLOK(const void *value),
     size_t seed);
@@ -370,6 +408,19 @@
         __attribute__nonnull__(4)
         __attribute__nonnull__(5);
 
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_MALLOC
+Hash * parrot_create_hash_sized(PARROT_INTERP,
+    PARROT_DATA_TYPE val_type,
+    Hash_key_type hkey_type,
+    NOTNULL(hash_comp_fn compare),
+    NOTNULL(hash_hash_key_fn keyhash),
+    UINTVAL size)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5);
+
 void parrot_hash_clone_prunable(PARROT_INTERP,
     ARGIN(const Hash *hash),
     ARGOUT(Hash *dest),
@@ -379,27 +430,21 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*dest);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-int PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
+void Parrot_hash_freeze(PARROT_INTERP,
+    ARGIN(const Hash *hash),
+    ARGMOD(PMC *info))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-int STRING_compare(PARROT_INTERP,
-    ARGIN(const void *search_key),
-    ARGIN_NULLOK(const void *bucket_key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*info);
 
+PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-int STRING_compare_distinct_cs_enc(PARROT_INTERP,
-    ARGIN(const void *search_key),
-    ARGIN(const void *bucket_key))
+PARROT_MALLOC
+Hash * Parrot_hash_thaw(PARROT_INTERP, ARGMOD(PMC *info))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        FUNC_MODIFIES(*info);
 
 #define ASSERT_ARGS_parrot_dump_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_parrot_hash_clone __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -424,19 +469,11 @@
 #define ASSERT_ARGS_parrot_hash_get_bucket __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
-#define ASSERT_ARGS_parrot_hash_get_idx __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(hash) \
-    , PARROT_ASSERT_ARG(key))
 #define ASSERT_ARGS_parrot_hash_put __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
 #define ASSERT_ARGS_parrot_hash_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(hash))
-#define ASSERT_ARGS_parrot_hash_visit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(hash) \
-    , PARROT_ASSERT_ARG(pinfo))
 #define ASSERT_ARGS_parrot_mark_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
@@ -448,13 +485,20 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_parrot_new_pointer_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_integer_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_number_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_string_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_hash_compare_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_hash_compare_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(value))
+    , PARROT_ASSERT_ARG(a) \
+    , PARROT_ASSERT_ARG(b))
+#define ASSERT_ARGS_hash_compare_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_hash_compare_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(search_key))
+#define ASSERT_ARGS_hash_compare_string_distinct_enc \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(search_key) \
+    , PARROT_ASSERT_ARG(bucket_key))
 #define ASSERT_ARGS_hash_key_from_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
@@ -500,7 +544,6 @@
 #define ASSERT_ARGS_hash_value_to_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
-#define ASSERT_ARGS_int_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_key_hash_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_key_hash_PMC __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -519,22 +562,21 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(compare) \
     , PARROT_ASSERT_ARG(keyhash))
+#define ASSERT_ARGS_parrot_create_hash_sized __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(compare) \
+    , PARROT_ASSERT_ARG(keyhash))
 #define ASSERT_ARGS_parrot_hash_clone_prunable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash) \
     , PARROT_ASSERT_ARG(dest))
-#define ASSERT_ARGS_PMC_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_Parrot_hash_freeze __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(a) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_STRING_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(search_key))
-#define ASSERT_ARGS_STRING_compare_distinct_cs_enc \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+    , PARROT_ASSERT_ARG(hash) \
+    , PARROT_ASSERT_ARG(info))
+#define ASSERT_ARGS_Parrot_hash_thaw __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(search_key) \
-    , PARROT_ASSERT_ARG(bucket_key))
+    , PARROT_ASSERT_ARG(info))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/hash.c */
 

Modified: branches/unshared_buffers/include/parrot/io.h
==============================================================================
--- branches/unshared_buffers/include/parrot/io.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/io.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -875,6 +875,7 @@
         FUNC_MODIFIES(*socket);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 INTVAL Parrot_io_socket_is_closed(ARGMOD(PMC *socket))

Modified: branches/unshared_buffers/include/parrot/oplib/core_ops.h
==============================================================================
--- branches/unshared_buffers/include/parrot/oplib/core_ops.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/oplib/core_ops.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -20,7 +20,7 @@
 #include "parrot/oplib.h"
 #include "parrot/runcore_api.h"
 
- op_lib_t *Parrot_DynOp_core_2_6_0(PARROT_INTERP, long init);
+ op_lib_t *Parrot_DynOp_core_2_7_0(PARROT_INTERP, long init);
 
  opcode_t * Parrot_end(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_noop(opcode_t *, PARROT_INTERP);

Modified: branches/unshared_buffers/include/parrot/packfile.h
==============================================================================
--- branches/unshared_buffers/include/parrot/packfile.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/packfile.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1213,138 +1213,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/packfile/pf_items.c */
 
-
-
-/*
-** Byte Ordering Functions (byteorder.c)
-*/
-
-/* HEADERIZER BEGIN: src/byteorder.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void fetch_buf_be_12(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_be_16(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_be_32(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_be_4(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_be_8(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_12(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_16(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_32(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_4(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_8(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-INTVAL fetch_iv_be(INTVAL w);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-INTVAL fetch_iv_le(INTVAL w);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-opcode_t fetch_op_be(opcode_t w);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-opcode_t fetch_op_le(opcode_t w);
-
-#define ASSERT_ARGS_fetch_buf_be_12 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_be_16 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_be_32 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_be_4 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_be_8 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_12 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_16 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_32 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_4 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_8 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_iv_be __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_fetch_iv_le __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_fetch_op_be __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_fetch_op_le __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/byteorder.c */
-
 #endif /* PARROT_PACKFILE_H_GUARD */
 
 /*

Modified: branches/unshared_buffers/include/parrot/platform_interface.h
==============================================================================
--- branches/unshared_buffers/include/parrot/platform_interface.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/platform_interface.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -49,6 +49,13 @@
 #  define mem_realloc_executable(a, b, c) mem_internal_realloc((a), (c))
 #endif
 
+
+/*
+** Process ID
+*/
+
+UINTVAL Parrot_getpid(void);
+
 /*
 ** Time
 */

Modified: branches/unshared_buffers/include/parrot/pobj.h
==============================================================================
--- branches/unshared_buffers/include/parrot/pobj.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/pobj.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -320,8 +320,8 @@
 
 #define PObj_gc_CLEAR(o) (PObj_get_FLAGS(o) \
     &= ~PObj_custom_destroy_FLAG \
-     | ~PObj_custom_mark_FLAG \
-     | ~PObj_live_FLAG)
+     & ~PObj_custom_mark_FLAG \
+     & ~PObj_live_FLAG)
 
 #endif /* PARROT_POBJ_H_GUARD */
 

Modified: branches/unshared_buffers/include/parrot/scheduler_private.h
==============================================================================
--- branches/unshared_buffers/include/parrot/scheduler_private.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/scheduler_private.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -19,7 +19,8 @@
 typedef enum {
     SCHEDULER_cache_valid_FLAG         = PObj_private0_FLAG,
     SCHEDULER_wake_requested_FLAG      = PObj_private1_FLAG,
-    SCHEDULER_terminate_requested_FLAG = PObj_private2_FLAG
+    SCHEDULER_terminate_requested_FLAG = PObj_private2_FLAG,
+    SCHEDULER_in_handler_FLAG          = PObj_private3_FLAG
 } scheduler_flags_enum;
 
 #define SCHEDULER_get_FLAGS(o) (PObj_get_FLAGS(o))
@@ -42,6 +43,11 @@
 #define SCHEDULER_terminate_requested_SET(o)   SCHEDULER_flag_SET(terminate_requested, o)
 #define SCHEDULER_terminate_requested_CLEAR(o) SCHEDULER_flag_CLEAR(terminate_requested, o)
 
+/* Mark if the scheduler is inside a handler */
+#define SCHEDULER_in_handler_TEST(o)  SCHEDULER_flag_TEST(in_handler, o)
+#define SCHEDULER_in_handler_SET(o)   SCHEDULER_flag_SET(in_handler, o)
+#define SCHEDULER_in_handler_CLEAR(o) SCHEDULER_flag_CLEAR(in_handler, o)
+
 /*
  * Task private flags
  */

Modified: branches/unshared_buffers/include/parrot/string.h
==============================================================================
--- branches/unshared_buffers/include/parrot/string.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/string.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -25,14 +25,23 @@
 
 /* String iterator */
 typedef struct string_iterator_t {
-    const STRING *str;
     UINTVAL bytepos;
     UINTVAL charpos;
-    UINTVAL (*get_and_advance)(PARROT_INTERP, struct string_iterator_t *i);
-    void (*set_and_advance)(PARROT_INTERP, struct string_iterator_t *i, UINTVAL c);
-    void (*set_position)(PARROT_INTERP, struct string_iterator_t *i, UINTVAL pos);
 } String_iter;
 
+#define STRING_ITER_INIT(i, iter) \
+    (iter)->charpos = (iter)->bytepos = 0
+#define STRING_ITER_GET(i, str, iter, offset) \
+    ((str)->encoding)->iter_get((i), (str), (iter), (offset))
+#define STRING_ITER_SKIP(i, str, iter, skip) \
+    ((str)->encoding)->iter_skip((i), (str), (iter), (skip))
+#define STRING_ITER_GET_AND_ADVANCE(i, str, iter) \
+    ((str)->encoding)->iter_get_and_advance((i), (str), (iter))
+#define STRING_ITER_SET_AND_ADVANCE(i, str, iter, c) \
+    ((str)->encoding)->iter_set_and_advance((i), (str), (iter), (c))
+#define STRING_ITER_SET_POSITION(i, str, iter, pos) \
+    ((str)->encoding)->iter_set_position((i), (str), (iter), (pos))
+
 #define STREQ(x, y)  (strcmp((x), (y))==0)
 #define STRNEQ(x, y) (strcmp((x), (y))!=0)
 

Modified: branches/unshared_buffers/include/parrot/string_funcs.h
==============================================================================
--- branches/unshared_buffers/include/parrot/string_funcs.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/include/parrot/string_funcs.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -226,6 +226,31 @@
 INTVAL Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
 
 PARROT_EXPORT
+INTVAL Parrot_str_iter_index(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    ARGMOD(String_iter *start),
+    ARGOUT(String_iter *end),
+    ARGIN(const STRING *search))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*start)
+        FUNC_MODIFIES(*end);
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+STRING * Parrot_str_iter_substr(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGIN(const String_iter *l),
+    ARGIN_NULLOK(const String_iter *r))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 STRING* Parrot_str_join(PARROT_INTERP,
@@ -559,6 +584,16 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_Parrot_str_iter_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src) \
+    , PARROT_ASSERT_ARG(start) \
+    , PARROT_ASSERT_ARG(end) \
+    , PARROT_ASSERT_ARG(search))
+#define ASSERT_ARGS_Parrot_str_iter_substr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(l))
 #define ASSERT_ARGS_Parrot_str_join __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ar))

Modified: branches/unshared_buffers/lib/Parrot/Configure/Compiler.pm
==============================================================================
--- branches/unshared_buffers/lib/Parrot/Configure/Compiler.pm	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/lib/Parrot/Configure/Compiler.pm	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,15 +1,17 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
 
-Parrot::Configure::Compiler - C-Related methods for configuration
+Parrot::Configure::Compiler - C-Related methods for configuration and more
 
 =head1 DESCRIPTION
 
 The Parrot::Configure::Compiler module provides methods inherited by
 Parrot::Configure which prepare and/or run C programs during
-compilation.
+compilation. Also other files like makefiles will be generated with methods
+from this module by replacing entries like C<@key@> with C<key>'s value from
+the configuration system's data.
 
 =head2 Methods
 
@@ -193,6 +195,49 @@
         qw( .exe.manifest .ilk .pdb );
 }
 
+=item C<shebang_mod()>
+
+    $conf->shebang_mod($source, $target);
+
+Takes the specified source file, replacing entries like C<@key@> with
+C<key>'s value from the configuration system's data, and writes the results
+to specified target file. The replacement is only done in the first line of
+the file normally to set the shebang value accordingly.
+
+=cut
+
+sub shebang_mod {
+    my $conf = shift;
+    my ( $source, $target ) = @_;
+
+    open my $in,  '<', $source       or die "Can't open $source: $!";
+    open my $out, '>', "$target.tmp" or die "Can't open $target.tmp: $!";
+
+    my $line = <$in>;
+
+    # interpolate @foo@ values
+    $line =~ s{ \@ (\w+) \@ }{
+        if(defined(my $val=$conf->data->get($1))) {
+            $val;
+        }
+        else {
+            warn "value for '\@$1\@' in $source is undef";
+            '';
+        }
+    }egx;
+
+    print $out $line;
+
+    while ( my $line = <$in> ) {
+        print $out $line;
+    }
+
+    close($in)  or die "Can't close $source: $!";
+    close($out) or die "Can't close $target: $!";
+
+    move_if_diff( "$target.tmp", $target );
+}
+
 =item C<genfile()>
 
     $conf->genfile($source, $target, %options);

Modified: branches/unshared_buffers/lib/Parrot/Docs/Section/Tools.pm
==============================================================================
--- branches/unshared_buffers/lib/Parrot/Docs/Section/Tools.pm	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/lib/Parrot/Docs/Section/Tools.pm	Sun Aug 29 17:09:11 2010	(r48719)
@@ -85,7 +85,7 @@
             $self->new_item( '', 'tools/dev/list_unjitted.pl' ),
             $self->new_item( '', 'tools/dev/gen_class.pl' ),
             $self->new_item( '', 'tools/dev/nm.pl' ),
-            $self->new_item( '', 'tools/util/ncidef2pasm.pl' ),
+            $self->new_item( '', 'tools/dev/ncidef2pasm.pl' ),
             $self->new_item( '', 'tools/dev/pbc_header.pl' ),
         ),
         $self->new_group(

Modified: branches/unshared_buffers/ports/debian/rules
==============================================================================
--- branches/unshared_buffers/ports/debian/rules	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/ports/debian/rules	Sun Aug 29 17:09:11 2010	(r48719)
@@ -42,7 +42,7 @@
 	dh_testdir
 	$(MAKE) installable LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}`pwd`/blib/lib
 	pod2man --section=1 --release="Debian Project" --center="Debian GNU/Linux manual" docs/running.pod debian/parrot.1
-	pod2man --section=1 --release="Debian Project" --center="Debian GNU/Linux manual" tools/util/parrot-config.pir debian/parrot_config.1
+	pod2man --section=1 --release="Debian Project" --center="Debian GNU/Linux manual" tools/dev/parrot-config.pir debian/parrot_config.1
 	pod2man --section=1 --release="Debian Project" --center="Debian GNU/Linux manual" src/pbc_dump.c debian/pbc_dump.1
 	pod2man --section=1 --release="Debian Project" --center="Debian GNU/Linux manual" src/pbc_disassemble.c debian/pbc_disassemble.1
 	pod2man --section=1 --release="Debian Project" --center="Debian GNU/Linux manual" src/parrot_debugger.c debian/parrot_debugger.1

Modified: branches/unshared_buffers/runtime/parrot/library/distutils.pir
==============================================================================
--- branches/unshared_buffers/runtime/parrot/library/distutils.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/runtime/parrot/library/distutils.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -2333,11 +2333,11 @@
     if $I0 goto L1
     $S0 = array
     $S3 = $S0
-    $S2 = $S1 . $S3
     $I0 = index $S0, "build/"
     unless $I0 == 0 goto L0
     $S3 = substr $S0, 6
   L0:
+    $S2 = $S1 . $S3
     files[$S2] = $S0
     goto L2
   L1:

Deleted: branches/unshared_buffers/src/byteorder.c
==============================================================================
--- branches/unshared_buffers/src/byteorder.c	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,567 +0,0 @@
-/*
-Copyright (C) 2001-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/byteorder.c - Byteordering functions
-
-=head1 DESCRIPTION
-
-These are assigned to a vtable when the PBC file is loaded.
-
-If the vtable function for conversion from the native byteorder is called,
-it is a I<no op> and will work, but the caller should know if the
-byteorder in the PBC file is native and skip the conversion and just map
-it in.
-
-=head2 Byte order handlers
-
-Configure will have checked for supported word sizes.
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-
-/* HEADERIZER HFILE: include/parrot/packfile.h */
-
-/*
-
-=item C<INTVAL fetch_iv_le(INTVAL w)>
-
-This function converts a 4 or 8 byte C<INTVAL> into little endian
-format. If the native format is already little endian, then no
-conversion is done.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-INTVAL
-fetch_iv_le(INTVAL w)
-{
-    ASSERT_ARGS(fetch_iv_le)
-#if !PARROT_BIGENDIAN
-    return w;
-#else
-#  if INTVAL_SIZE == 4
-    return (w << 24) | ((w & 0xff00) << 8) | ((w & 0xff0000) >> 8) | (w >> 24);
-#  else
-#    if INTVAL_SIZE == 8
-    INTVAL r;
-
-    r = w << 56;
-    r |= (w & 0xff00) << 40;
-    r |= (w & 0xff0000) << 24;
-    r |= (w & 0xff000000) << 8;
-    r |= (w & 0xff00000000) >> 8;
-    r |= (w & 0xff0000000000) >> 24;
-    r |= (w & 0xff000000000000) >> 40;
-    r |= (w & 0xff00000000000000) >> 56;
-    return r;
-#    else
-    exit_fatal(1, "Unsupported INTVAL_SIZE=%d\n",
-               INTVAL_SIZE);
-#    endif
-#  endif
-#endif
-}
-
-/*
-
-=item C<INTVAL fetch_iv_be(INTVAL w)>
-
-This function converts a 4 or 8 byte C<INTVAL> into big endian format.
-If the native format is already big endian, then no conversion is done.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-INTVAL
-fetch_iv_be(INTVAL w)
-{
-    ASSERT_ARGS(fetch_iv_be)
-#if PARROT_BIGENDIAN
-    return w;
-#else
-#  if INTVAL_SIZE == 4
-    return (w << 24) | ((w & 0xff00) << 8) | ((w & 0xff0000) >> 8) | (w >> 24);
-#  else
-#    if INTVAL_SIZE == 8
-    INTVAL r;
-    r = w << 56;
-    r |= (w & 0xff00) << 40;
-    r |= (w & 0xff0000) << 24;
-    r |= (w & 0xff000000) << 8;
-    r |= (w & 0xff00000000) >> 8;
-    r |= (w & 0xff0000000000) >> 24;
-    r |= (w & 0xff000000000000) >> 40;
-    r |= (w & 0xff00000000000000) >> 56;
-    return r;
-#    else
-    exit_fatal(1, "Unsupported INTVAL_SIZE=%d\n",
-               INTVAL_SIZE);
-#    endif
-#  endif
-#endif
-}
-
-/*
-
-=item C<opcode_t fetch_op_be(opcode_t w)>
-
-Same as C<fetch_iv_be> for opcode_t
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-opcode_t
-fetch_op_be(opcode_t w)
-{
-    ASSERT_ARGS(fetch_op_be)
-#if PARROT_BIGENDIAN
-    return w;
-#else
-#  if OPCODE_T_SIZE == 4
-    return (w << 24) | ((w & 0x0000ff00) << 8) | ((w & 0x00ff0000) >> 8) |
-        ((w & 0xff000000) >> 24);
-#  else
-    opcode_t r;
-
-    r = w << 56;
-    r |= (w & 0xff00) << 40;
-    r |= (w & 0xff0000) << 24;
-    r |= (w & 0xff000000) << 8;
-    r |= (w & 0xff00000000) >> 8;
-    r |= (w & 0xff0000000000) >> 24;
-    r |= (w & 0xff000000000000) >> 40;
-    r |= (w & 0xff00000000000000) >> 56;
-    return r;
-#  endif
-#endif
-}
-
-/*
-
-=item C<opcode_t fetch_op_le(opcode_t w)>
-
-Same as C<fetch_iv_le> for opcode_t
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-opcode_t
-fetch_op_le(opcode_t w)
-{
-    ASSERT_ARGS(fetch_op_le)
-#if !PARROT_BIGENDIAN
-    return w;
-#else
-#  if OPCODE_T_SIZE == 4
-    return (w << 24) | ((w & 0x0000ff00) << 8) | ((w & 0x00ff0000) >> 8) |
-        ((w & 0xff000000) >> 24);
-#  else
-    opcode_t r;
-
-    r = w << 56;
-    r |= (w & 0xff00) << 40;
-    r |= (w & 0xff0000) << 24;
-    r |= (w & 0xff000000) << 8;
-    r |= (w & 0xff00000000) >> 8;
-    r |= (w & 0xff0000000000) >> 24;
-    r |= (w & 0xff000000000000) >> 40;
-    r |= (w & 0xff00000000000000) >> 56;
-    return r;
-#  endif
-#endif
-}
-
-/*
-
-=pod
-
-Unrolled routines for swapping various sizes from 32-128 bits. These
-should only be used if alignment is unknown or we are pulling something
-out of a padded buffer.
-
-=cut
-
-*/
-
-/*
-
-=item C<void fetch_buf_be_4(unsigned char *rb, const unsigned char *b)>
-
-Converts a 4-byte big-endian buffer C<b> into a little-endian C<rb>.
-
-=cut
-
-*/
-
-void
-fetch_buf_be_4(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_4)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 4);
-#else
-    rb[0] = b[3];
-    rb[1] = b[2];
-    rb[2] = b[1];
-    rb[3] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_4(unsigned char *rb, const unsigned char *b)>
-
-Converts a 4-byte little-endian buffer C<b> into a big-endian buffer C<rb>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_4(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_4)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 4);
-#else
-    rb[0] = b[3];
-    rb[1] = b[2];
-    rb[2] = b[1];
-    rb[3] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_be_8(unsigned char *rb, const unsigned char *b)>
-
-Converts an 8-byte big-endian buffer C<b> into a little-endian buffer C<rb>
-
-=cut
-
-*/
-
-void
-fetch_buf_be_8(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_8)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 8);
-#else
-    rb[0] = b[7];
-    rb[1] = b[6];
-    rb[2] = b[5];
-    rb[3] = b[4];
-    rb[4] = b[3];
-    rb[5] = b[2];
-    rb[6] = b[1];
-    rb[7] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_8(unsigned char *rb, const unsigned char *b)>
-
-Converts an 8-byte little-endian buffer C<b> into a big-endian buffer C<rb>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_8(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_8)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 8);
-#else
-    rb[0] = b[7];
-    rb[1] = b[6];
-    rb[2] = b[5];
-    rb[3] = b[4];
-    rb[4] = b[3];
-    rb[5] = b[2];
-    rb[6] = b[1];
-    rb[7] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_12(unsigned char *rb, const unsigned char *b)>
-
-Converts a 12-byte little-endian buffer C<b> into a big-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_12(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_12)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 12);
-#else
-    rb[0] = b[11];
-    rb[1] = b[10];
-    rb[2] = b[9];
-    rb[3] = b[8];
-    rb[4] = b[7];
-    rb[5] = b[6];
-    rb[6] = b[5];
-    rb[7] = b[4];
-    rb[8] = b[3];
-    rb[9] = b[2];
-    rb[10] = b[1];
-    rb[11] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_be_12(unsigned char *rb, const unsigned char *b)>
-
-Converts a 12-byte big-endian buffer C<b> into a little-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_be_12(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_12)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 12);
-#else
-    rb[0] = b[11];
-    rb[1] = b[10];
-    rb[2] = b[9];
-    rb[3] = b[8];
-    rb[4] = b[7];
-    rb[5] = b[6];
-    rb[6] = b[5];
-    rb[7] = b[4];
-    rb[8] = b[3];
-    rb[9] = b[2];
-    rb[10] = b[1];
-    rb[11] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_16(unsigned char *rb, const unsigned char *b)>
-
-Converts a 16-byte little-endian buffer C<b> into a big-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_16(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_16)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 16);
-#else
-    rb[0] = b[15];
-    rb[1] = b[14];
-    rb[2] = b[13];
-    rb[3] = b[12];
-    rb[4] = b[11];
-    rb[5] = b[10];
-    rb[6] = b[9];
-    rb[7] = b[8];
-    rb[8] = b[7];
-    rb[9] = b[6];
-    rb[10] = b[5];
-    rb[11] = b[4];
-    rb[12] = b[3];
-    rb[13] = b[2];
-    rb[14] = b[1];
-    rb[15] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_be_16(unsigned char *rb, const unsigned char *b)>
-
-Converts a 16-byte big-endian buffer C<b> into a little-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_be_16(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_16)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 16);
-#else
-    rb[0] = b[15];
-    rb[1] = b[14];
-    rb[2] = b[13];
-    rb[3] = b[12];
-    rb[4] = b[11];
-    rb[5] = b[10];
-    rb[6] = b[9];
-    rb[7] = b[8];
-    rb[8] = b[7];
-    rb[9] = b[6];
-    rb[10] = b[5];
-    rb[11] = b[4];
-    rb[12] = b[3];
-    rb[13] = b[2];
-    rb[14] = b[1];
-    rb[15] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_32(unsigned char *rb, const unsigned char *b)>
-
-Converts a 32-byte little-endian buffer C<b> into a big-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_32(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_32)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 32);
-#else
-    rb[0] = b[31];
-    rb[1] = b[30];
-    rb[2] = b[29];
-    rb[3] = b[28];
-    rb[4] = b[27];
-    rb[5] = b[26];
-    rb[6] = b[25];
-    rb[7] = b[24];
-    rb[8] = b[23];
-    rb[9] = b[22];
-    rb[10] = b[21];
-    rb[11] = b[20];
-    rb[12] = b[19];
-    rb[13] = b[18];
-    rb[14] = b[17];
-    rb[15] = b[16];
-    rb[16] = b[15];
-    rb[17] = b[14];
-    rb[18] = b[13];
-    rb[19] = b[12];
-    rb[20] = b[11];
-    rb[21] = b[10];
-    rb[22] = b[9];
-    rb[23] = b[8];
-    rb[24] = b[7];
-    rb[25] = b[6];
-    rb[26] = b[5];
-    rb[27] = b[4];
-    rb[28] = b[3];
-    rb[29] = b[2];
-    rb[30] = b[1];
-    rb[31] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_be_32(unsigned char *rb, const unsigned char *b)>
-
-Converts a 32-byte big-endian buffer C<b> into a little-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_be_32(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_32)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 32);
-#else
-    rb[0] = b[31];
-    rb[1] = b[30];
-    rb[2] = b[29];
-    rb[3] = b[28];
-    rb[4] = b[27];
-    rb[5] = b[26];
-    rb[6] = b[25];
-    rb[7] = b[24];
-    rb[8] = b[23];
-    rb[9] = b[22];
-    rb[10] = b[21];
-    rb[11] = b[20];
-    rb[12] = b[19];
-    rb[13] = b[18];
-    rb[14] = b[17];
-    rb[15] = b[16];
-    rb[16] = b[15];
-    rb[17] = b[14];
-    rb[18] = b[13];
-    rb[19] = b[12];
-    rb[20] = b[11];
-    rb[21] = b[10];
-    rb[22] = b[9];
-    rb[23] = b[8];
-    rb[24] = b[7];
-    rb[25] = b[6];
-    rb[26] = b[5];
-    rb[27] = b[4];
-    rb[28] = b[3];
-    rb[29] = b[2];
-    rb[30] = b[1];
-    rb[31] = b[0];
-#endif
-}
-
-/*
-
-=back
-
-=head1 HISTORY
-
-Initial version by Melvin on 2002/05/01
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/unshared_buffers/src/call/args.c
==============================================================================
--- branches/unshared_buffers/src/call/args.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/call/args.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -488,22 +488,12 @@
         }
     }
     else if (VTABLE_does(interp, aggregate, CONST_STRING(interp, "hash"))) {
-        const INTVAL elements = VTABLE_elements(interp, aggregate);
-        INTVAL index;
-        PMC * const key = Parrot_pmc_new(interp, enum_class_Key);
-        VTABLE_set_integer_native(interp, key, 0);
-        SETATTR_Key_next_key(interp, key, (PMC *)INITBucketIndex);
-
-        /* Low-level hash iteration. */
-        for (index = 0; index < elements; ++index) {
-            if (!PMC_IS_NULL(key)) {
-                STRING * const name = (STRING *)parrot_hash_get_idx(interp,
-                                (Hash *)VTABLE_get_pointer(interp, aggregate), key);
-                PARROT_ASSERT(name);
-                VTABLE_set_pmc_keyed_str(interp, call_object, name,
-                    VTABLE_get_pmc_keyed_str(interp, aggregate, name));
-            }
-        }
+        Hash *hash = (Hash *)VTABLE_get_pointer(interp, aggregate);
+
+        parrot_hash_iterate(hash,
+            VTABLE_set_pmc_keyed_str(interp, call_object,
+                (STRING *)_bucket->key,
+                hash_value_to_pmc(interp, hash, _bucket->value));)
     }
     else {
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,

Modified: branches/unshared_buffers/src/call/context.c
==============================================================================
--- branches/unshared_buffers/src/call/context.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/call/context.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -122,7 +122,7 @@
 
 =over 4
 
-=item C<PMC* Parrot_pcc_get_sub(PARROT_INTERP, PMC *ctx)>
+=item C<PMC* Parrot_pcc_get_sub(PARROT_INTERP, const PMC *ctx)>
 
 Get Sub executed inside Context.
 
@@ -131,12 +131,13 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
 PMC*
-Parrot_pcc_get_sub(PARROT_INTERP, ARGIN(PMC *ctx))
+Parrot_pcc_get_sub(PARROT_INTERP, ARGIN(const PMC *ctx))
 {
     ASSERT_ARGS(Parrot_pcc_get_sub)
-    const Parrot_Context *c = CONTEXT_STRUCT(ctx);
+    const Parrot_Context * const c = CONTEXT_STRUCT(ctx);
     return c->current_sub;
 }
 
@@ -687,8 +688,8 @@
 
 /*
 
-=item C<INTVAL * Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, PMC *ctx, UINTVAL
-idx)>
+=item C<INTVAL * Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, const PMC *ctx,
+UINTVAL idx)>
 
 Get pointer to INTVAL register.
 
@@ -697,9 +698,10 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 INTVAL *
-Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
+Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, ARGIN(const PMC *ctx), UINTVAL idx)
 {
     ASSERT_ARGS(Parrot_pcc_get_INTVAL_reg)
     PARROT_ASSERT(Parrot_pcc_get_regs_used(interp, ctx, REGNO_INT) > idx);
@@ -708,8 +710,8 @@
 
 /*
 
-=item C<FLOATVAL * Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, PMC *ctx, UINTVAL
-idx)>
+=item C<FLOATVAL * Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, const PMC *ctx,
+UINTVAL idx)>
 
 Get pointer to FLOATVAL register.
 
@@ -718,9 +720,10 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 FLOATVAL *
-Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
+Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, ARGIN(const PMC *ctx), UINTVAL idx)
 {
     ASSERT_ARGS(Parrot_pcc_get_FLOATVAL_reg)
     PARROT_ASSERT(Parrot_pcc_get_regs_used(interp, ctx, REGNO_NUM) > idx);
@@ -739,6 +742,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 STRING **
 Parrot_pcc_get_STRING_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
@@ -759,6 +763,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 PMC **
 Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
@@ -770,7 +775,8 @@
 
 /*
 
-=item C<UINTVAL Parrot_pcc_get_regs_used(PARROT_INTERP, PMC *ctx, int type)>
+=item C<UINTVAL Parrot_pcc_get_regs_used(PARROT_INTERP, const PMC *ctx, int
+type)>
 
 Return number of used registers of particular type.
 
@@ -778,8 +784,9 @@
 
 */
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 UINTVAL
-Parrot_pcc_get_regs_used(PARROT_INTERP, ARGIN(PMC *ctx), int type)
+Parrot_pcc_get_regs_used(PARROT_INTERP, ARGIN(const PMC *ctx), int type)
 {
     ASSERT_ARGS(Parrot_pcc_get_regs_used)
     return CONTEXT_STRUCT(ctx)->n_regs_used[type];
@@ -805,7 +812,7 @@
 
 /*
 
-=item C<Regs_ni* Parrot_pcc_get_regs_ni(PARROT_INTERP, PMC *ctx)>
+=item C<Regs_ni* Parrot_pcc_get_regs_ni(PARROT_INTERP, const PMC *ctx)>
 
 Get pointer to FLOANFAL and INTVAL registers.
 
@@ -813,9 +820,10 @@
 
 */
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 Regs_ni*
-Parrot_pcc_get_regs_ni(PARROT_INTERP, ARGIN(PMC *ctx))
+Parrot_pcc_get_regs_ni(PARROT_INTERP, ARGIN(const PMC *ctx))
 {
     ASSERT_ARGS(Parrot_pcc_get_regs_ni)
     return &(CONTEXT_STRUCT(ctx)->bp);
@@ -849,6 +857,7 @@
 
 */
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 Regs_ps*
 Parrot_pcc_get_regs_ps(PARROT_INTERP, ARGIN(PMC *ctx))

Modified: branches/unshared_buffers/src/dynext.c
==============================================================================
--- branches/unshared_buffers/src/dynext.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/dynext.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -145,8 +145,7 @@
 =item C<static void set_cstring_prop(PARROT_INTERP, PMC *lib_pmc, const char
 *what, STRING *name)>
 
-Set a property C<name> with value C<what> on the C<ParrotLibrary>
-C<lib_pmc>.
+Sets a property C<name> with value C<what> on the C<ParrotLibrary> C<lib_pmc>.
 
 =cut
 
@@ -164,12 +163,13 @@
     VTABLE_setprop(interp, lib_pmc, key, prop);
 }
 
+
 /*
 
 =item C<static void store_lib_pmc(PARROT_INTERP, PMC *lib_pmc, STRING *path,
 STRING *type, STRING *lib_name)>
 
-Store a C<ParrotLibrary> PMC in the interpreter's C<iglobals>.
+Stores a C<ParrotLibrary> PMC in the interpreter's C<iglobals>.
 
 =cut
 
@@ -194,12 +194,13 @@
     VTABLE_set_pmc_keyed_str(interp, dyn_libs, path, lib_pmc);
 }
 
+
 /*
 
 =item C<static PMC* is_loaded(PARROT_INTERP, STRING *path)>
 
-Check if a C<ParrotLibrary> PMC with the filename path exists.
-If it does, return it. Otherwise, return NULL.
+Returns a C<ParrotLibrary> PMC with the given filename path, if it exists.
+Otherwise returns PMCNULL.
 
 =cut
 
@@ -214,17 +215,16 @@
     PMC * const iglobals = interp->iglobals;
     PMC * const dyn_libs = VTABLE_get_pmc_keyed_int(interp, iglobals,
             IGLOBALS_DYN_LIBS);
-    if (!VTABLE_exists_keyed_str(interp, dyn_libs, path))
-        return PMCNULL;
     return VTABLE_get_pmc_keyed_str(interp, dyn_libs, path);
 }
 
+
 /*
 
 =item C<static void * dlopen_string(PARROT_INTERP, Parrot_dlopen_flags flags,
 STRING *path)>
 
-Call Parrot_dlopen with the Parrot String argument converted to C string.  The
+Calls C<Parrot_dlopen> with the path argument converted to a C string.  The
 flags argument will be converted into native form and used if applicable.
 
 =cut
@@ -244,12 +244,13 @@
     return handle;
 }
 
+
 /*
 
 =item C<static STRING * get_path(PARROT_INTERP, STRING *lib, Parrot_dlopen_flags
 flags, void **handle, STRING *wo_ext, STRING *ext)>
 
-Return path and handle of a dynamic lib, setting lib_name to just the filestem
+Returns path and handle of a dynamic lib, setting lib_name to just the filestem
 (i.e. without path or extension) as a freshly-allocated C string.
 
 =cut
@@ -264,75 +265,76 @@
         ARGIN_NULLOK(STRING *ext))
 {
     ASSERT_ARGS(get_path)
-    STRING *path, *full_name;
-    const char *err = NULL;    /* buffer returned from Parrot_dlerror */
-
-    PMC * const iglobals = interp->iglobals;
+    PMC * const iglobals  = interp->iglobals;
     PMC * const lib_paths = VTABLE_get_pmc_keyed_int(interp, iglobals,
                                                      IGLOBALS_LIB_PATHS);
     PMC * const share_ext = VTABLE_get_pmc_keyed_int(interp, lib_paths,
                                                      PARROT_LIB_DYN_EXTS);
 
-    if (lib == NULL) {
+    STRING *path, *full_name;
+
+    if (! lib) {
         *handle = Parrot_dlopen((char *)NULL, flags);
-        if (*handle) {
+        if (*handle)
             return CONST_STRING(interp, "");
+        else {
+            const char *err = Parrot_dlerror();
+            Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
+                        "Couldn't dlopen(NULL): %s\n",
+                        err ? err : "unknown reason");
+            return NULL;
         }
-        err = Parrot_dlerror();
-        Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
-                    "Couldn't dlopen(NULL): %s\n",
-                    err ? err : "unknown reason");
-        return NULL;
     }
 
-    /*
-     * first, try to add an extension to the file if it has none.
-     */
+    /* first, try to add an extension to the file if it has none */
     if (! ext) {
         const INTVAL n = VTABLE_elements(interp, share_ext);
-        INTVAL i;
+        INTVAL       i;
 
         for (i = 0; i < n; ++i) {
-            ext = VTABLE_get_string_keyed_int(interp, share_ext, i);
+            ext       = VTABLE_get_string_keyed_int(interp, share_ext, i);
             full_name = Parrot_str_concat(interp, wo_ext, ext);
-            path = Parrot_locate_runtime_file_str(interp, full_name,
-                    PARROT_RUNTIME_FT_DYNEXT);
+            path      = Parrot_locate_runtime_file_str(interp, full_name,
+                            PARROT_RUNTIME_FT_DYNEXT);
+
             if (path) {
                 *handle = dlopen_string(interp, flags, path);
-                if (*handle) {
+
+                if (*handle)
                     return path;
+                else {
+                    const char *err = Parrot_dlerror();
+                    Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
+                                "Couldn't load '%Ss': %s\n",
+                            full_name, err ? err : "unknown reason");
+                    return NULL;
                 }
-                err = Parrot_dlerror();
-                Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
-                            "Couldn't load '%Ss': %s\n",
-                        full_name, err ? err : "unknown reason");
-                return NULL;
             }
 
-            /*
-             * File with extension and prefix was not found,
-             * so try file.extension w/o prefix
-             */
+            /* File not found with extension and prefix; try file.extension */
             *handle = dlopen_string(interp, flags, full_name);
-            if (*handle) {
+            if (*handle)
                 return full_name;
-            }
         }
     }
+
     /*
      * finally, try the given file name as is. We still use
      * Parrot_locate_runtime_file so that (a) relative pathnames are searched in
      * the standard locations, and (b) the angle of the slashes are adjusted as
      * required for non-Unix systems.
      */
+
     full_name = Parrot_locate_runtime_file_str(interp, lib,
-            PARROT_RUNTIME_FT_DYNEXT);
+                    PARROT_RUNTIME_FT_DYNEXT);
+
     if (full_name) {
         *handle = dlopen_string(interp, flags, full_name);
-        if (*handle) {
+
+        if (*handle)
             return full_name;
-        }
     }
+
     /*
      * and on windows strip a leading "lib"
      * [shouldn't this happen in Parrot_locate_runtime_file instead?]
@@ -340,10 +342,9 @@
 #ifdef WIN32
     if (!STRING_IS_EMPTY(lib) && memcmp(Buffer_bufstart(lib), "lib", 3) == 0) {
         *handle = Parrot_dlopen((char *)Buffer_bufstart(lib) + 3, 0);
-        if (*handle) {
-            path = Parrot_str_substr(interp, lib, 3, lib->strlen - 3);
-            return path;
-        }
+
+        if (*handle)
+            return Parrot_str_substr(interp, lib, 3, lib->strlen - 3);
     }
 #endif
 
@@ -360,20 +361,22 @@
     }
 #endif
 
-    /* And after-finally,  let the OS use his own search */
-    if (!STRING_IS_EMPTY(lib)) {
+    if (STRING_IS_EMPTY(lib)) {
         *handle = dlopen_string(interp, flags, lib);
         if (*handle)
             return lib;
     }
-
-    err = Parrot_dlerror();
-    Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
-                "Couldn't load '%Ss': %s\n",
-                lib, err ? err : "unknown reason");
-    return NULL;
+    /* And after-finally,  let the OS use his own search */
+    {
+        const char *err = Parrot_dlerror();
+        Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
+                    "Couldn't load '%Ss': %s\n",
+                    lib, err ? err : "unknown reason");
+        return NULL;
+    }
 }
 
+
 /*
 
 =item C<PMC * Parrot_init_lib(PARROT_INTERP, dynext_load_func load_func,
@@ -411,12 +414,13 @@
     return lib_pmc;
 }
 
+
 /*
 
 =item C<void * Parrot_dlsym_str(PARROT_INTERP, void *handle, STRING *symbol)>
 
-Same as Parrot_dlsym but takes the symbol name from a Parrot String instead
-of a C string.
+Loads a symbol named C<symbol> from the shared library represented by
+C<handle>.
 
 =cut
 
@@ -430,25 +434,26 @@
 {
     ASSERT_ARGS(Parrot_dlsym_str)
 
-    void *ptr;
     if (STRING_IS_NULL(symbol))
-        ptr = NULL;
+        return NULL;
+
     else {
         char *const symbol_cs = Parrot_str_to_cstring(interp, symbol);
-        ptr = Parrot_dlsym(handle, symbol_cs);
+        void       *ptr       = Parrot_dlsym(handle, symbol_cs);
         Parrot_str_free_cstring(symbol_cs);
+        return ptr;
     }
-    return ptr;
 }
 
+
 /*
 
 =item C<static PMC * run_init_lib(PARROT_INTERP, void *handle, STRING *lib_name,
 STRING *wo_ext)>
 
-Loads and Initializes a new library and returns a ParrotLibrary PMC.
-Takes the name of a library C<libname>, that is loaded with handle C<handle>.
-Calls the necessary initialization routines, if any.
+Loads and initializes a new library and returns a ParrotLibrary PMC.  Takes the
+name of a library C<lib_name>, that is loaded with handle C<handle>.  Calls the
+necessary initialization routines, if any.
 
 =cut
 
@@ -520,6 +525,7 @@
     return lib_pmc;
 }
 
+
 /*
 
 =item C<static STRING * clone_string_into(Interp *d, Interp *s, PMC *value)>
@@ -538,9 +544,9 @@
 clone_string_into(ARGMOD(Interp *d), ARGIN(Interp *s), ARGIN(PMC *value))
 {
     ASSERT_ARGS(clone_string_into)
-    STRING * const  orig   = VTABLE_get_string(s, value);
-    char   * const raw_str = Parrot_str_to_cstring(s, orig);
-    STRING * const   ret   =
+    STRING * const  orig    = VTABLE_get_string(s, value);
+    char   * const  raw_str = Parrot_str_to_cstring(s, orig);
+    STRING * const  ret     =
         Parrot_str_new_init(d, raw_str, strlen(raw_str),
             PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
             PObj_constant_FLAG);
@@ -548,6 +554,7 @@
     return ret;
 }
 
+
 /*
 
 =item C<static PMC * make_string_pmc(PARROT_INTERP, STRING *string)>
@@ -570,6 +577,7 @@
     return ret;
 }
 
+
 /*
 
 =item C<PMC * Parrot_clone_lib_into(Interp *d, Interp *s, PMC *lib_pmc)>
@@ -608,7 +616,8 @@
          * Anyways, if we hope to share bytecode at runtime, we need to have
          * them have identical opcodes anyways.
          */
-        PMC * const new_lib_pmc = Parrot_pmc_new_constant(d, enum_class_ParrotLibrary);
+         PMC * const new_lib_pmc = Parrot_pmc_new_constant(d,
+                                        enum_class_ParrotLibrary);
 
         PMC_data(new_lib_pmc) = handle;
         VTABLE_setprop(d, new_lib_pmc, CONST_STRING(s, "_filename"), make_string_pmc(d, wo_ext));
@@ -619,11 +628,13 @@
         if (d->n_libs != s->n_libs) {
             INTVAL i;
             if (d->all_op_libs)
-                d->all_op_libs = (op_lib_t **)mem_internal_realloc(d->all_op_libs,
-                    sizeof (op_lib_t *) * s->n_libs);
+                d->all_op_libs
+                    = (op_lib_t **)mem_internal_realloc(d->all_op_libs,
+                        sizeof (op_lib_t *) * s->n_libs);
             else
-                d->all_op_libs = (op_lib_t **)mem_internal_allocate(sizeof (op_lib_t *) *
-                    s->n_libs);
+                d->all_op_libs
+                    = (op_lib_t **)mem_internal_allocate(sizeof (op_lib_t *) *
+                        s->n_libs);
             for (i = d->n_libs; i < s->n_libs; ++i)
                 d->all_op_libs[i] = s->all_op_libs[i];
             d->n_libs = s->n_libs;
@@ -631,11 +642,11 @@
 
         return new_lib_pmc;
     }
-    else {
-        return run_init_lib(d, handle, lib_name, wo_ext);
-    }
+
+    return run_init_lib(d, handle, lib_name, wo_ext);
 }
 
+
 /*
 
 =item C<PMC * Parrot_load_lib(PARROT_INTERP, STRING *lib, PMC *parameters)>
@@ -682,9 +693,8 @@
      *
      * LOCK()
      */
-    if (lib) {
+    if (lib)
         lib_name = parrot_split_path_ext(interp, lib, &wo_ext, &ext);
-    }
     else {
         wo_ext   = CONST_STRING(interp, "");
         lib_name = NULL;
@@ -692,27 +702,27 @@
     }
 
     lib_pmc = is_loaded(interp, wo_ext);
-    if (!PMC_IS_NULL(lib_pmc)) {
-        /* UNLOCK() */
+
+    /* UNLOCK() */
+    if (!PMC_IS_NULL(lib_pmc))
         return lib_pmc;
-    }
 
-    if (!PMC_IS_NULL(parameters)) {
+    if (!PMC_IS_NULL(parameters))
         flags = VTABLE_get_integer(interp, parameters);
-    }
 
     path = get_path(interp, lib, (Parrot_dlopen_flags)flags, &handle, wo_ext, ext);
-    if (!path || !handle) {
-        /*
-         * XXX Parrot_ex_throw_from_c_args? return PMCNULL?
-         * PMC Undef seems convenient, because it can be queried with get_bool()
-         */
+
+    /*
+     * XXX Parrot_ex_throw_from_c_args? return PMCNULL?
+     * PMC Undef seems convenient, because it can be queried with get_bool()
+     */
+    if (!path || !handle)
         return Parrot_pmc_new(interp, enum_class_Undef);
-    }
 
     return run_init_lib(interp, handle, lib_name, wo_ext);
 }
 
+
 /*
 
 =back

Modified: branches/unshared_buffers/src/dynoplibs/math.ops
==============================================================================
--- branches/unshared_buffers/src/dynoplibs/math.ops	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/dynoplibs/math.ops	Sun Aug 29 17:09:11 2010	(r48719)
@@ -95,8 +95,7 @@
 
     result = VTABLE_get_integer(interp, $2) % $3;
 
-    $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
-    VTABLE_set_integer_native(interp, $1, result);
+    $1 = Parrot_pmc_new_init_int(interp, VTABLE_type(interp, $2), result);
 }
 
 inline op cmod(invar PMC, invar PMC, invar PMC) :base_core {
@@ -112,8 +111,7 @@
 
     result = VTABLE_get_integer(interp, $2) % value;
 
-    $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
-    VTABLE_set_integer_native(interp, $1, result);
+    $1 = Parrot_pmc_new_init_int(interp, VTABLE_type(interp, $2), result);
 }
 
 ########################################
@@ -173,8 +171,8 @@
 
     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);
+    $1 = Parrot_pmc_new_init_int(interp,
+        VTABLE_type(interp, $2), (INTVAL)result);
 }
 
 =back

Modified: branches/unshared_buffers/src/dynoplibs/trans.ops
==============================================================================
--- branches/unshared_buffers/src/dynoplibs/trans.ops	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/dynoplibs/trans.ops	Sun Aug 29 17:09:11 2010	(r48719)
@@ -105,6 +105,30 @@
 
 ########################################
 
+=item B<cot>(out NUM, in NUM)
+
+Set $1 to the cotangent of $2 (given in radians).
+
+=cut
+
+inline op cot(out NUM, in NUM) :base_math {
+    $1 = ((FLOATVAL)1) / tan((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<csc>(out NUM, in NUM)
+
+Set $1 to the cosecant of $2 (given in radians).
+
+=cut
+
+inline op csc(out NUM, in NUM) :base_math {
+    $1 = ((FLOATVAL)1) / sin((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

Deleted: branches/unshared_buffers/src/frame_builder.c
==============================================================================
--- branches/unshared_buffers/src/frame_builder.c	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,633 +0,0 @@
-/*
-Copyright (C) 2008-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/frame_builder.c
-
-=head1 DESCRIPTION
-
-Functions for the ManagedStruct PMC and others.
-
-=head1 FUNCTIONS
-
-=cut
-
-*/
-
-/* HEADERIZER HFILE: none */
-/* HEADERIZER STOP */
-
-#include "parrot/parrot.h"
-#include "pmc/pmc_fixedintegerarray.h"
-#include "pmc/pmc_unmanagedstruct.h"
-#include "pmc/pmc_managedstruct.h"
-#include "frame_builder.h"
-
-/*
-
-=over 4
-
-=item C<void Parrot_jit_free_buffer(PARROT_INTERP, void *ptr, void *priv)>
-
-This is a callback to implement the proper freeing semantics.  It is called by
-the ManagedStruct PMC as it is garbage collected.
-
-=cut
-
-*/
-
-void
-Parrot_jit_free_buffer(SHIM_INTERP, void *ptr, void *priv)
-{
-    const struct jit_buffer_private_data * const jit = (struct jit_buffer_private_data*)priv;
-    mem_free_executable(ptr, jit->size);
-    free(priv);
-}
-
-/*
-
-=item C<PMC *Parrot_jit_clone_buffer(PARROT_INTERP, PMC *pmc, void *priv)>
-
-This is a callback to implement the proper cloning semantics for jit buffers.
-It is called by the ManagedStruct PMC's clone() function.
-
-=back
-
-=cut
-
-*/
-
-PMC *
-Parrot_jit_clone_buffer(PARROT_INTERP, PMC *pmc, void *priv)
-{
-    PMC * const rv = Parrot_pmc_new(interp, pmc->vtable->base_type);
-
-    VTABLE_init(interp, rv);
-    /* copy the attributes */
-    {
-        void (*tmpfreefunc)(PARROT_INTERP, void*, void*);
-        GETATTR_ManagedStruct_custom_free_func(interp, pmc, tmpfreefunc);
-        SETATTR_ManagedStruct_custom_free_func(interp, rv , tmpfreefunc);
-    }
-    {
-        PMC* (*tmpclonefunc)(PARROT_INTERP, PMC*, void*);
-        GETATTR_ManagedStruct_custom_clone_func(interp, pmc, tmpclonefunc);
-        SETATTR_ManagedStruct_custom_clone_func(interp, rv , tmpclonefunc);
-    }
-
-    {
-        void *freepriv, *clonepriv;
-        GETATTR_ManagedStruct_custom_free_priv(interp , pmc, freepriv);
-        GETATTR_ManagedStruct_custom_clone_priv(interp, pmc, clonepriv);
-        if (freepriv) {
-            void *tmp = mem_gc_allocate_zeroed_typed(interp, struct jit_buffer_private_data);
-            memcpy(tmp, freepriv, sizeof (struct jit_buffer_private_data));
-            SETATTR_ManagedStruct_custom_free_priv(interp, rv , tmp);
-            if (clonepriv == freepriv) {
-                /* clonepriv is a copy of freepriv, make it a copy in the clone too. */
-                SETATTR_ManagedStruct_custom_clone_priv(interp, rv , tmp);
-                clonepriv = NULL; /* disable the clonepriv copying below */
-            }
-        }
-        if (clonepriv) {
-            void *tmp = mem_gc_allocate_zeroed_typed(interp, struct jit_buffer_private_data);
-            memcpy(tmp, clonepriv, sizeof (struct jit_buffer_private_data));
-            SETATTR_ManagedStruct_custom_clone_priv(interp, rv , tmp);
-        }
-    }
-
-    /* copy the execmem buffer */
-    if (PARROT_MANAGEDSTRUCT(pmc)->ptr) {
-        struct jit_buffer_private_data *jit = (struct jit_buffer_private_data*)priv;
-        void *ptr = PARROT_MANAGEDSTRUCT(pmc)->ptr;
-        void *newptr = mem_alloc_executable(jit->size);
-        if (!newptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                    "Cannot allocate executable memory");
-        memcpy(newptr, ptr, jit->size);
-        PARROT_MANAGEDSTRUCT(rv)->ptr = newptr;
-    }
-
-    return rv;
-}
-
-
-int
-emit_is8bit(long disp)
-{
-    return disp >= -128 && disp <= 127;
-}
-
-char *
-emit_disp8_32(char *pc, int disp)
-{
-    if (emit_is8bit(disp)) {
-        *(pc++) = (char)disp;
-        return pc;
-    }
-    else {
-        *(long *)pc = disp;
-        return pc + 4;
-    }
-}
-
-void
-emit_sib(PARROT_INTERP, char *pc, int scale, int i, int base)
-{
-    int scale_byte;
-
-    switch (scale) {
-      case 1:
-        scale_byte = emit_Scale_1;
-        break;
-      case 2:
-        scale_byte = emit_Scale_2;
-        break;
-      case 4:
-        scale_byte = emit_Scale_4;
-        break;
-      case 8:
-        scale_byte = emit_Scale_8;
-        break;
-      default:
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                "Invalid scale factor %d\n", scale);
-        return;
-    }
-
-    *pc = (char)(scale_byte | (i == emit_None ? emit_Index_None : emit_reg_Index(i)) |
-            emit_reg_Base(base));
-}
-
-char *
-emit_r_X(PARROT_INTERP, char *pc, int reg_opcode, int base, int i, int scale, long disp)
-{
-    if (i && !scale)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-            "emit_r_X passed invalid scale+index combo\n");
-
-    if (base == emit_EBP) {
-    /* modrm disp */
-        if (i == emit_None) {
-            *(pc++) = (char)((emit_is8bit(disp) ? emit_Mod_b01 : emit_Mod_b10)
-                    | reg_opcode | emit_reg_rm(emit_EBP));
-            return emit_disp8_32(pc, disp);
-        }
-        /* modrm sib disp */
-        else {
-            *(pc++) = (char)((emit_is8bit(disp) ? emit_Mod_b01 : emit_Mod_b10)
-                    | reg_opcode | emit_b100);
-            emit_sib(interp, pc++, scale, i, base);
-            return emit_disp8_32(pc, disp);
-        }
-    }
-
-    /* modrm sib disp */
-    if (base == emit_ESP) {
-        *(pc++) = (char)((emit_is8bit(disp) ? emit_Mod_b01 : emit_Mod_b10)
-                | reg_opcode | emit_rm_b100);
-        emit_sib(interp, pc++, scale, i, emit_ESP);
-        return emit_disp8_32(pc, disp);
-    }
-
-    /* modrm disp32 */
-    if (!base && !(i && scale)) {
-        *(pc++) = (char)(emit_Mod_b00 | reg_opcode | emit_rm_b101);
-        *(long *)pc = disp;
-        return pc + 4;
-    }
-
-    /* Ok, everything should be more regular here */
-    *(pc++) = (char)((disp == 0 ? emit_Mod_b00 :
-              (emit_is8bit(disp) ?
-               emit_Mod_b01 : emit_Mod_b10)) |
-               reg_opcode |
-               (!base || (scale && i) ? emit_rm_b100 : emit_reg_rm(base)));
-
-    if (!base || (scale && i)) {
-        emit_sib(interp, pc++, scale, i, base);
-    }
-    if (disp)
-        pc = emit_disp8_32(pc, disp);
-
-    return pc;
-}
-
-char *
-emit_shift_i_r(PARROT_INTERP, char *pc, int opcode, int imm, int reg)
-{
-    if (opcode == emit_b000 && imm < 0) {
-        opcode = emit_b001;     /* -rol => 32 + ror */
-        imm = -imm;
-    }
-
-    if (imm == 0) {
-        /* noop */
-    }
-    else if (imm == 1) {
-        *(pc++) = (char) 0xd1;
-        *(pc++) = (char) emit_alu_X_r(opcode,  reg);
-    }
-    else if (imm > 1 && imm < 33) {
-        *(pc++) = (char) 0xc1;
-        *(pc++) = (char) emit_alu_X_r(opcode,  reg);
-        *(pc++) = (char)imm;
-    }
-    else {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-            "emit_shift_i_r passed invalid shift\n");
-    }
-
-    return pc;
-}
-
-char *
-emit_popl_r(char *pc, int reg)
-{
-    *(pc++) = (char)(0x58 | (reg - 1));
-    return pc;
-}
-
-unsigned char *lastpc;
-
-size_t
-calc_signature_needs(const char *sig, int *strings)
-{
-    size_t stack_size = 0;
-    while (*sig) {
-        switch (*sig) {
-          case 't':
-            ++(*strings);
-            stack_size +=4;
-            break;
-          case 'd':
-            stack_size +=8;
-            break;
-          default:
-            stack_size +=4;
-            break;
-        }
-        ++sig;
-    }
-    return stack_size;
-
-}
-
-/*
- * The function generated here is called as func(interp, nci_info)
- * interp   ...  8(%ebp)
- * nci_info ... 12(%ebp)
- *
- * The generate function for a specific signature looks quite similar to
- * an optimized compile of src/nci.c:pcf_x_yy(). In case of any troubles
- * just compare the disassembly.
- *
- * If a non-NULL sizeptr is passed, the integer it points to will be written
- * with the size of the allocated execmem buffer.
- */
-
-void *
-Parrot_jit_build_call_func(PARROT_INTERP, PMC *pmc_nci, STRING *signature, int *sizeptr)
-{
-    char     *pc;
-    char     *execmem;
-    int       i                    = 0;
-    int       arg_count            = 0;
-    int       string_buffer_count  = 0;
-    const int ST_SIZE_OF           = 124;
-    const int JIT_ALLOC_SIZE       = 1024;
-
-    char    * const signature_str  = Parrot_str_to_cstring(interp, signature);
-    /* skip over the result */
-    char      *sig                = signature_str + 1;
-    size_t     stack_space_needed = calc_signature_needs(sig,
-                                        &string_buffer_count);
-
-    int base_offset        = 0;
-    int strings_offset     = base_offset - (sizeof (char *) * string_buffer_count);
-    int st_offset          = strings_offset - ST_SIZE_OF;
-    int args_offset        = st_offset - stack_space_needed;
-    int temp_calls_offset  = args_offset - 16;
-    int total_stack_needed = -temp_calls_offset;
-
-    UNUSED(pmc_nci);
-
-    /*
-     * ESP
-     * 0-15, 16 bytes for utility calls
-     * stack_space_needed for actual NCI call
-     * st
-     * STRINGS -> char * holding space
-     * EBP
-     */
-
-    /* this ought to be enough - the caller of this function
-     * should free the function pointer returned here
-     */
-    pc = execmem = (char *)mem_alloc_executable(JIT_ALLOC_SIZE);
-    if (! pc)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                "Cannot allocate executable memory");
-
-
-    /* this generated jit function will be called as (INTERP (EBP 8), func_ptr
-    * (ESP 12), args signature (ESP 16)) */
-
-    /* make stack frame, preserve %ebx */
-    jit_emit_stack_frame_enter(pc);
-
-    emitm_subl_i_r(pc, total_stack_needed, emit_ESP);
-
-    /* Parrot_init_arg_nci(interp, &st, "S"); */
-    /* args signature "S" */
-    emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, 16);
-    emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-
-    /*&st*/
-    emitm_lea_m_r(interp,  pc, emit_EAX, emit_EBP, 0, 1, st_offset);
-    emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
-
-    /*interpreter*/
-    emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, 8);
-    emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 0);
-
-    /* XXX FIXME (TT #1325) This whole function require major rework */
-    /* if (sig && *sig) */
-    /*   emitm_call_cfunc(pc, Parrot_init_arg_nci); */
-
-    while (*sig) {
-        emitm_movl_i_m(pc, arg_count, emit_EBP, 0, 1, temp_calls_offset + 8);
-
-        switch (*sig) {
-          case '0':    /* null ptr or such - doesn't consume a reg */
-            jit_emit_bxor_rr_i(interp, pc, emit_EAX, emit_EAX);
-            emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-          case 'f':
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_N); */
-            emitm_fstps(interp, pc, emit_EBP, 0, 1, args_offset);
-            break;
-          case 'N':
-          case 'd':
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_N); */
-            emitm_fstpl(interp, pc, emit_EBP, 0, 1, args_offset);
-            args_offset += 4;
-            break;
-          case 'I':   /* INTVAL */
-          case 'l':   /* long */
-          case 'i':   /* int */
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_I); */
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-          case 't':   /* string, pass a cstring */
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_S); */
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
-            emitm_call_cfunc(pc, string_to_cstring_nullable);
-
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            /* save off temporary allocation address */
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, strings_offset);
-            strings_offset += 4;
-
-            /* reset ESP(4) */
-            emitm_lea_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, st_offset);
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
-            break;
-          case 's':   /* short: movswl intreg_o(base), %eax */
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_I); */
-            emitm_movswl_r_r(pc, emit_EAX, emit_EAX);
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-          case 'c':   /* char: movsbl intreg_o(base), %eax */
-            /* emitm_call_cfunc(pc, get_nci_I); */
-            emitm_movsbl_r_r(pc, emit_EAX, emit_EAX);
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-          case 'J':   /* interpreter */
-            emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, 8);
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            --arg_count;
-            break;
-          case 'p':   /* push pmc->data */
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_p); */
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-          case 'O':   /* push PMC * object in P2 */
-          case 'P':   /* push PMC * */
-          case '@':
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_P); */
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-          case 'v':
-            break;
-          case 'b':   /* buffer (void*) pass Buffer_bufstart(SReg) */
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_S); */
-            emitm_movl_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1,
-                               (size_t) &Buffer_bufstart((STRING *) NULL));
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-          case 'B':   /* buffer (void**) pass &Buffer_bufstart(SReg) */
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_S); */
-            emitm_lea_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1,
-                              (size_t) &Buffer_bufstart((STRING *) NULL));
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-          case 'S':
-            /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_S); */
-            emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            break;
-
-
-            /* I have no idea how to handle these */
-          case '2':
-          case '3':
-          case '4':
-          case 'V':
-            mem_free_executable(execmem, JIT_ALLOC_SIZE);
-            Parrot_str_free_cstring(signature_str);
-            return NULL;
-            break;
-          default:
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                    "Unknown arg Signature %c\n", *sig);
-            /*
-             * oops unknown signature:
-             * cleanup and try nci.c
-             */
-            mem_free_executable(execmem, JIT_ALLOC_SIZE);
-            Parrot_str_free_cstring(signature_str);
-            return NULL;
-        }
-        args_offset +=4;
-        ++arg_count;
-        ++sig;
-    }
-
-    /* prepare to call VTABLE_get_pointer, set up args */
-    /* interpreter - movl 8(%ebp), %eax */
-    emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, 8);
-    emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 0);
-
-    /* pmc - movl 12(%ebp), %eax */
-    emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, 12);
-    emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
-
-    /* get the get_pointer() pointer from the pmc's vtable */
-    emitm_movl_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1, offsetof(PMC, vtable));
-    emitm_movl_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1, offsetof(VTABLE, get_pointer));
-
-    /* call get_pointer(), result goes into eax */
-    emitm_callr(pc, emit_EAX);
-    emitm_addl_i_r(pc, 16, emit_ESP);
-
-    /* call the resulting function pointer */
-    emitm_callr(pc, emit_EAX);
-    emitm_subl_i_r(pc, 16, emit_ESP);
-
-    /* SAVE OFF EAX */
-    emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-
-    /*&st*/
-    emitm_lea_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, st_offset);
-    emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
-
-    /*interpreter*/
-    emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, 8);
-    emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 0);
-
-    /* RESTORE BACK EAX */
-    emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-
-    /* now place return value in registers */
-    /* first in signature is the return value */
-    sig = signature_str; /* the result */
-    switch (*sig) {
-      /* I have no idea how to handle these */
-      case '2':
-      case '3':
-      case '4':
-        /* get integer from pointer - untested */
-        emitm_movl_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1, 0);
-        if (*sig == 2)      /* short */
-            emitm_movswl_r_r(pc, emit_EAX, emit_EAX);
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_I);*/
-        break;
-      case 'f':
-      case 'd':
-        jit_emit_fstore_mb_n(interp, pc, emit_EBP, temp_calls_offset + 8);
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_N); */
-        /* pop num from st(0) and mov to reg */
-        break;
-      case 's':
-        /* movswl %ax, %eax */
-        emitm_movswl_r_r(pc, emit_EAX, emit_EAX);
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_I); */
-        break;
-      case 'c':
-        /* movsbl %al, %eax */
-        emitm_movsbl_r_r(pc, emit_EAX, emit_EAX);
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_I); */
-        break;
-      case 'I':   /* INTVAL */
-      case 'l':
-      case 'i':
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_I); */
-        break;
-      case 'v': /* void - do nothing */
-        break;
-      case 'P':
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_P); */
-        break;
-      case 'p':   /* make a new unmanaged struct */
-        /* save return value on stack */
-
-        /* save pointer p */
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 12);
-
-        /* make new pmc */
-        emitm_movl_i_m(pc, enum_class_UnManagedStruct, emit_EBP, 0, 1, temp_calls_offset + 4);
-        emitm_call_cfunc(pc, Parrot_pmc_new);
-
-        /* restore pointer p to EDX */
-        emitm_movl_m_r(interp, pc, emit_EDX, emit_EBP, 0, 1, temp_calls_offset + 12);
-
-        /* copy UnManagedStruct to stack for set_nci_P call */
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-
-        /* eax = PMC, get return value into edx */
-        /* mov data(%eax), %eax
-           mov %edx, ptr(%eax) */
-        emitm_movl_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1, offsetof(struct PMC, data));
-        emitm_movl_r_m(interp, pc, emit_EDX, emit_EAX, 0, 1,
-                           offsetof(struct Parrot_UnManagedStruct_attributes, ptr));
-
-        /* reset EBP(4) */
-        emitm_lea_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, st_offset);
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
-
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_P); */
-        break;
-      case 'S':
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_S); */
-        break;
-      case 't':   /* string */
-        /* EAX is char* */
-        emitm_movl_i_m(pc, 0, emit_EBP, 0, 1, temp_calls_offset + 8); /* len */
-
-        /* overwrites address of st in EBP(4) */
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
-
-        emitm_call_cfunc(pc, Parrot_str_new);
-
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 8);
-
-        /* reset EBP(4) */
-        emitm_lea_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, st_offset);
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
-
-        /* XXX FIXME (TT #1325) emitm_call_cfunc(pc, set_nci_S); */
-        break;
-      default:
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                "Unknown return Signature %c\n", *sig);
-        /*
-         * oops unknown signature:
-         * cleanup and try nci.c
-         */
-        Parrot_str_free_cstring(signature_str);
-        mem_free_executable(execmem, JIT_ALLOC_SIZE);
-        return NULL;
-    }
-
-    /* free temporary strings */
-    strings_offset = st_offset + ST_SIZE_OF;
-    for (i=0; i<string_buffer_count; ++i) {
-        emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, strings_offset);
-        emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 0);
-        emitm_call_cfunc(pc, Parrot_str_free_cstring);
-        strings_offset += 4;
-    }
-
-    jit_emit_stack_frame_leave(pc);
-    emitm_ret(pc);
-    PARROT_ASSERT(pc - execmem <= JIT_ALLOC_SIZE);
-
-    if (sizeptr)
-        *sizeptr = JIT_ALLOC_SIZE;
-    Parrot_str_free_cstring(signature_str);
-    return (void *)D2FPTR(execmem);
-}
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Deleted: branches/unshared_buffers/src/frame_builder.h
==============================================================================
--- branches/unshared_buffers/src/frame_builder.h	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,1368 +0,0 @@
-/*
- * Copyright (C) 2002-2009, Parrot Foundation.
- */
-
-/*
- * frame_builder.h
- *
- * i386
- *
- * $Id$
- */
-
-#ifndef PARROT_I386_JIT_EMIT_H_GUARD
-#define PARROT_I386_JIT_EMIT_H_GUARD
-
-#if defined(__cplusplus)
-#  define EXTERN extern "C"
-#else
-#  define EXTERN
-#endif
-
-#include <assert.h>
-#include "parrot/parrot.h"
-#include "parrot/hash.h"
-#include "parrot/oplib/ops.h"
-
-/*
- * NCI interface
- */
-void *
-Parrot_jit_build_call_func(Interp *, PMC *, STRING *, int *);
-
-/* custom pmc callback functions */
-void
-Parrot_jit_free_buffer(PARROT_INTERP, void *ptr, void *priv);
-
-PMC*
-Parrot_jit_clone_buffer(PARROT_INTERP, PMC *pmc, void *priv);
-
-struct jit_buffer_private_data {
-    int size;
-};
-
-/* Scale factor values */
-#define emit_Scale(scale) ((scale) << 6)
-#define emit_Scale_1 emit_Scale(0)
-#define emit_Scale_2 emit_Scale(1)
-#define emit_Scale_4 emit_Scale(2)
-#define emit_Scale_8 emit_Scale(3)
-
-/* ESIB byte */
-#define emit_reg_Index(x) (((x)-1) << 3)
-#define emit_reg_Base(x) ((x)-1)
-#define emit_Index_None ((emit_b100) << 3)
-
-/*
- * helper funcs - get argument n
- */
-
-/*
- * if we have a delegated method like typeof_i_p, that returns an INTVAL
- * and that is all in a sequence of JITted opcodes, and when these INTVAL
- * is MAPped, we got a problem. So the EXT_CALL flag is disabled - mapped
- * registers are saved/restored around vtable calls.
- */
-#define  JIT_VTABLE_OPS 1
-
-/* EXEC_SHARED generates code to be used with libparrot.so
- * It grabs the real address of cgp_core from the gcc generated code
- * x/1i cgp_code
- *     jmp *0xXXXX
- * x/1wx 0xXXXX
- *     real address of cpg_core
- * s. exec_emit_end
- * XXX This should be a command line option.
- */
-#undef EXEC_SHARED
-
-extern UINTVAL ld(UINTVAL);
-
-#define NEG_MINUS_ZERO
-/* #define NEG_ZERO_SUB */
-
-/* Register codes */
-#define emit_None 0
-
-/* These are + 1 the real values */
-#define emit_EAX 1
-#define emit_ECX 2
-#define emit_EDX 3
-#define emit_EBX 4
-#define emit_ESP 5
-#define emit_EBP 6
-#define emit_ESI 7
-#define emit_EDI 8
-
-/* Scratch register. */
-
-#define ISR1 emit_EAX
-#define FSR1 0
-
-#define emit_b00 0
-#define emit_b01 1
-#define emit_b10 2
-#define emit_b11 3
-
-#define emit_b000 0
-#define emit_b001 1
-#define emit_b010 2
-#define emit_b011 3
-#define emit_b100 4
-#define emit_b101 5
-#define emit_b110 6
-#define emit_b111 7
-
-/* Mod R/M byte */
-#define emit_reg(x) ((x) << 3)
-#define emit_Mod(Mod) ((Mod) << 6)
-#define emit_reg_rm(x) ((x)-1)
-
-/* Mod values for Mod R/M Byte */
-#define emit_Mod_b00 emit_Mod(emit_b00)
-#define emit_Mod_b01 emit_Mod(emit_b01)
-#define emit_Mod_b10 emit_Mod(emit_b10)
-
-/* special R/M values */
-#define emit_rm_b101 emit_b101
-#define emit_rm_b100 emit_b100
-
-#define emit_r_m(interp, pc, reg1, b, i, s, d) \
-    emit_r_X((interp), (pc), emit_reg((reg1)-1), (b), (i), (s), (d))
-
-#define emit_alu_X_r(X, reg) ((emit_b11 << 6) | ((X) << 3) | ((reg) - 1))
-
-#define emit_alu_r_r(reg1, reg2) emit_alu_X_r(((reg1) - 1), (reg2))
-
-int emit_is8bit(long disp);
-
-char * emit_disp8_32(char *pc, int disp);
-
-void emit_sib(PARROT_INTERP, char *pc, int scale, int i, int base);
-
-char * emit_r_X(PARROT_INTERP, char *pc, int reg_opcode, int base, int i,
-    int scale, long disp);
-
-char * emit_shift_i_r(PARROT_INTERP, char *pc, int opcode, int imm, int reg);
-
-char * emit_shift_i_m(PARROT_INTERP, char *pc, int opcode, int imm,
-               int base, int i, int scale, long disp);
-
-char * emit_shift_r_r(PARROT_INTERP, char *pc, int opcode, int reg1, int reg2);
-
-char * emit_shift_r_m(PARROT_INTERP, char *pc, int opcode, int reg,
-               int base, int i, int scale, long disp);
-
-/* CDQ - need this to do multiply */
-#define emitm_cdq(pc) *((pc)++) = (char) 0x99
-
-/* RET */
-#define emitm_ret(pc) *((pc)++) = (char) 0xc3
-
-/* NOP */
-#define emit_nop(pc) *((pc)++) = (char) 0x90
-
-/* PUSHes */
-
-#define emitm_pushl_r(pc, reg) \
-    *((pc)++) = (char) 0x50 | ((reg) - 1)
-
-#define emitm_pushl_i(pc, imm) { \
-    *((pc)++) = (char) 0x68; \
-    *(long *)(pc) = (long)(imm); \
-    (pc) += 4; }
-
-#define emitm_pushl_m(pc, mem) { \
-       *((pc)++) = (char) 0xff; \
-       *((pc)++) = (char) 0x35; \
-       *(long *)(pc) = (long)(mem); \
-       (pc) += 4; }
-
-char * emit_pushl_m(PARROT_INTERP, char *pc, int base, int i, int scale,
-    long disp);
-
-/* POPs */
-
-char * emit_popl_r(char *pc, int reg);
-
-#  define emitm_popl_r(pc, reg) \
-    (pc) = emit_popl_r((pc), (reg))
-
-char * emit_popl_m(PARROT_INTERP, char *pc, int base, int i, int scale,
-    long disp);
-
-/* MOVes */
-
-char * emit_movb_r_r(char *pc, int reg1, int reg2);
-
-#  define jit_emit_mov_rr_i(pc, reg2, reg1) if ((reg1) != (reg2)) { \
-    *((pc)++) = (char) 0x89; \
-    *((pc)++) = (char) emit_alu_r_r((reg1), (reg2)); }
-
-#  define jit_emit_mov_ri_i(interp, pc, reg, imm) { \
-    *((pc)++) = (char)(0xb8 | ((reg) - 1)); \
-    *(long *)(pc) = (long)(imm); (pc) += 4; }
-
-#  define emitm_movX_Y_Z(interp, op, pc, reg1, b, i, s, d) { \
-    *((pc)++) = (char) (op); \
-    (pc) = emit_r_m((interp), (pc), (reg1), (b), (i), (s), (long)(d)); }
-
-#  define emitm_movb_r_m(interp, pc, reg1, b, i, s, d) \
-    emitm_movX_Y_Z((interp), 0x88, (pc), (reg1), (b), (i), (s), (d))
-
-#  define emitm_movl_r_m(interp, pc, reg1, b, i, s, d) \
-    emitm_movX_Y_Z((interp), 0x89, (pc), (reg1), (b), (i), (s), (d))
-
-/* move byte/word with sign extension */
-#  define emitm_movsbl_r_m(interp, pc, reg1, b, i, s, d) { \
-    *((pc)++) = (char) 0x0f; \
-    emitm_movX_Y_Z((interp), 0xBE, (pc), (reg1), (b), (i), (s), (d)); \
-}
-
-#  define emitm_movswl_r_m(interp, pc, reg1, b, i, s, d) { \
-    *((pc)++) = (char) 0x0f; \
-    emitm_movX_Y_Z((interp), 0xBF, (pc), (reg1), (b), (i), (s), (d)); \
-}
-
-#  define emitm_movsbl_r_r(pc, reg1, reg2) { \
-    *((pc)++) = (char) 0x0f; \
-    *((pc)++) = (char) 0xbe; \
-    *((pc)++) = (char) emit_alu_r_r((reg1), (reg2)); \
-}
-
-#  define emitm_movswl_r_r(pc, reg1, reg2) { \
-    *((pc)++) = (char) 0x0f; \
-    *((pc)++) = (char) 0xbf; \
-    *((pc)++) = (char) emit_alu_r_r((reg1), (reg2)); \
-}
-
-#  define emitm_movb_m_r(interp, pc, reg1, b, i, s, d) \
-    emitm_movX_Y_Z((interp), 0x8a, (pc), (reg1), (b), (i), (s), (d))
-
-#  define emitm_movl_m_r(interp, pc, reg1, b, i, s, d) \
-    emitm_movX_Y_Z((interp), 0x8b, (pc), (reg1), (b), (i), (s), (d))
-
-#  define emitm_lea_m_r(interp, pc, reg1, b, i, s, d) \
-    emitm_movX_Y_Z((interp), 0x8d, (pc), (reg1), (b), (i), (s), (d))
-
-char * emit_movb_i_m(PARROT_INTERP, char *pc, char imm, int base, int i,
-    int scale, long disp);
-
-#  define emitm_movl_i_m(pc, imm, b, i, s, d) { \
-    *((pc)++) = (char) 0xc7; \
-    (pc) = emit_r_X((interp), (pc), emit_reg(emit_b000), (b), (i), (s), (long)(d)); \
-    *(long *)(pc) = (long)(imm); (pc) += 4; }
-
-/* Various ALU formats */
-
-#  define emitm_alul_r_r(pc, op, reg1, reg2) { \
-    *((pc)++) = (char) (op); *((pc)++) = (char) emit_alu_r_r((reg1), (reg2)); }
-
-#  define emitm_alub_i_r(pc, op1, op2, imm, reg) { \
-    *((pc)++) = (char) (op1); *((pc)++) = (char) emit_alu_X_r((op2), (reg)); *((pc)++) = (char)(imm); }
-
-#  define emitm_alul_i_r(pc, op1, op2, imm, reg) { \
-    *((pc)++) = (char) (op1); \
-    *((pc)++) = (char) emit_alu_X_r((op2), (reg)); \
-    *(long *)((pc)) = (long)(imm); (pc) += 4; }
-
-#  define emitm_alul_i_m(pc, op1, op2, imm, b, i, s, d) { \
-    *((pc)++) = (char) (op1); \
-    (pc) = emit_r_X((interp), (pc), emit_reg(op2), (b), (i), (s), (d)); \
-    *(long *)(pc) = (long)(imm); (pc) += 4; }
-
-#  define emitm_alul_r_m(pc, op, reg, b, i, s, d) { \
-    *((pc)++) = (char) (op); \
-    (pc) = emit_r_X((interp), (pc), emit_reg((reg)-1), (b), (i), (s), (long)(d)); }
-
-/* ADDs */
-
-#  define emitm_addb_r_r(pc, reg1, reg2) \
-    emitm_alul_r_r((pc), 0x00, (reg1), (reg2))
-
-#  define emitm_addb_i_r(pc, imm, reg) \
-    emitm_alub_i_r((pc), 0x83, emit_b000, (imm), (reg))
-
-#  define jit_emit_add_rr_i(interp, pc, reg1, reg2) \
-    emitm_alul_r_r((pc), 0x01, (reg2), (reg1))
-
-#  define jit_emit_add_ri_i(interp, pc, reg, imm)   \
-    emitm_alul_i_r((pc), 0x81, emit_b000, (imm), (reg))
-
-#  define emitm_addl_i_r(pc, imm, reg)   \
-    emitm_alul_i_r((pc), 0x81, emit_b000, (imm), (reg))
-
-#  define emitm_addl_i_m(pc, imm, b, i, s, d) \
-    emitm_alul_i_m((pc), 0x81, emit_b000, (imm), (b), (i), (s), (d))
-
-#  define emitm_addl_r_m(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x01, (reg), (b), (i), (s), (d))
-
-#  define emitm_addl_m_r(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x03, (reg), (b), (i), (s), (d))
-
-/* SUBs */
-
-#  define jit_emit_sub_rr_i(interp, pc, reg1, reg2) \
-    emitm_alul_r_r((pc), 0x29, (reg2), (reg1))
-
-#  define emitm_subl_i_r(pc, imm, reg) \
-    emitm_alul_i_r((pc), 0x81, emit_b101, (imm), (reg))
-
-#  define jit_emit_sub_ri_i(interp, pc, r, i) emitm_subl_i_r((pc), (i), (r))
-
-#  define emitm_subl_r_m(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x29, (reg), (b), (i), (s), (d))
-
-#  define emitm_subl_m_r(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x2b, (reg), (b), (i), (s), (d))
-
-#  define emitm_subl_i_m(pc, imm, b, i, s, d) \
-    emitm_alul_i_m((pc), 0x81, emit_b101, (imm), (b), (i), (s), (d))
-
-/* These are used by both signed and unsigned EDIV, but only unsigned MUL */
-#  define emitm_alu_imp_r(pc, op, reg) { \
-    *((pc)++) = (char) 0xf7; \
-    *((pc)++) = (char) emit_alu_X_r((op), (reg)); }
-
-#  define emitm_alu_imp_m(pc, op, b, i, s, d) { \
-    *((pc)++) = (char) 0xf7; \
-    (pc) = emit_r_X((interp), (pc), emit_reg(op), (b), (i), (s), (d)); }
-
-/* Unsigned MUL and EDIV */
-/* EAX implicit destination in multiply and divide */
-
-#  define emitm_umull_r(pc, reg2) emitm_alu_imp_r((pc), emit_b100, (reg2))
-
-#  define emitm_udivl_r(pc, reg2) emitm_alu_imp_r((pc), emit_b110, (reg2))
-
-#  define emitm_umull_m(pc, b, i, s, d) \
-    emitm_alu_imp_m((pc), emit_b100, (b), (i), (s), (d))
-
-#  define emitm_udivl_m(pc, b, i, s, d) \
-    emitm_alu_imp_m((pc), emit_b110, (b), (i), (s), (d))
-
-/* Signed MUL and EDIV */
-
-#  define emitm_sdivl_r(pc, reg2) emitm_alu_imp_r((pc), emit_b111, (reg2))
-
-#  define emitm_sdivl_m(pc, b, i, s, d) \
-    emitm_alu_imp_m((pc), emit_b111, (b), (i), (s), (d))
-
-#  define jit_emit_cdq(pc) *(pc)++ = 0x99
-
-/* TEST for zero */
-#  define jit_emit_test_r_i(pc, reg1) emitm_alul_r_r((pc), 0x85, (reg1), (reg1))
-
-#  define emitm_smull_r(pc, reg2) emitm_alu_imp_r((pc), emit_b101, (reg2))
-
-#  define jit_emit_mul_rr_i(interp, pc, reg1, reg2) { \
-    *(pc)++ = 0xf; \
-    emitm_alul_r_r((pc), 0xaf, (reg1), (reg2)); }
-
-#  define emitm_smull_r_m(pc, reg1, b, i, s, d) { \
-    *(pc)++ = 0xf; \
-    emitm_alul_r_m((pc), 0xaf, (reg1), (b), (i), (s), (d)); }
-
-char * opt_mul(PARROT_INTERP, char *pc, int dest, INTVAL imm, int src);
-
-#  define jit_emit_mul_rir_i(pc, dest, imm, src) \
-       (pc) = opt_mul(interp, (pc), (dest), (imm), (src))
-
-
-#  define jit_emit_mul_ri_i(pc, r, imm) jit_emit_mul_rir_i((pc), (r), (imm), (r))
-
-#  define jit_emit_mul_RIM_ii(pc, reg, imm, ofs) \
-    emitm_alul_r_m((pc), 0x69, (reg), emit_EBX, emit_None, 1, (ofs)); \
-    *(long *)(pc) = (long)(imm); \
-    (pc) += 4;
-
-/* NEG */
-
-#  define jit_emit_neg_r_i(pc, reg) emitm_alu_imp_r((pc), emit_b011, (reg))
-
-#  define emitm_negl_m(pc, b, i, s, d) \
-    emitm_alu_imp_m((pc), emit_b011, (b), (i), (s), (d))
-
-/* AND */
-
-#  define emit_andl_r_r(pc, reg1, reg2) emitm_alul_r_r((pc), 0x21, (reg1), (reg2))
-#  define jit_emit_band_rr_i(interp, pc, r1, r2) emit_andl_r_r((pc), (r2), (r1))
-
-#  define jit_emit_band_ri_i(interp, pc, reg, imm)  \
-    emitm_alul_i_r((pc), 0x81, emit_b100, (imm), (reg))
-
-#  define emitm_andl_r_m(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x21, (reg), (b), (i), (s), (d))
-
-#  define emitm_andl_m_r(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x23, (reg), (b), (i), (s), (d))
-
-#  define emitm_andl_i_m(pc, imm, b, i, s, d) \
-    emitm_alul_i_m((pc), 0x81, emit_b100, (imm), (b), (i), (s), (d))
-
-/* TEST op */
-#  define jit_emit_test_rr_i(pc, r1, r2) emitm_alul_r_r((pc), 0x85, (r1), (r2))
-
-#  define jit_emit_test_ri_i(pc, r, im)  \
-           emitm_alul_i_r((pc), 0xF7, emit_b000, (im), (r))
-
-#  define jit_emit_test_RM_i(pc, r, offs)  \
-           emitm_alul_r_m((pc), 0x85, (r), emit_EBX, 0, 1, (offs))
-
-/* OR */
-
-#  define jit_emit_bor_rr_i(interp, pc, reg1, reg2) emitm_alul_r_r((pc), 0x9, (reg2), (reg1))
-
-#  define jit_emit_bor_ri_i(interp, pc, reg, imm) \
-    emitm_alul_i_r((pc), 0x81, emit_b001, (imm), (reg))
-
-#  define emitm_orl_r_m(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x09, (reg), (b), (i), (s), (d))
-
-#  define emitm_orl_m_r(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x0b, (reg), (b), (i), (s), (d))
-
-#  define emitm_orl_i_m(pc, imm, b, i, s, d) \
-    emitm_alul_i_m((pc), 0x81, emit_b001, (imm), (b), (i), (s), (d))
-
-/* XOR */
-
-#  define jit_emit_bxor_rr_i(interp, pc, reg1, reg2) \
-    emitm_alul_r_r((pc), 0x31, (reg2), (reg1))
-
-#  define jit_emit_bxor_ri_i(intepr, pc, reg, imm) \
-    emitm_alul_i_r((pc), 0x81, emit_b110, (imm), (reg))
-
-#  define emitm_xorl_r_m(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x31, (reg), (b), (i), (s), (d))
-
-#  define emitm_xorl_m_r(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x33, (reg), (b), (i), (s), (d))
-
-#  define emitm_xorl_i_m(pc, imm, b, i, s, d) \
-    emitm_alul_i_m((pc), 0x81, emit_b110, (imm), (b), (i), (s), (d))
-
-/* NOT */
-
-#  define jit_emit_not_r_i(pc, reg) emitm_alu_imp_r((pc), emit_b010, (reg))
-#  define emitm_notl_m(pc, b, i, s, d) \
-    emitm_alu_imp_m((pc), emit_b010, (b), (i), (s), (d))
-
-#  define jit_emit_not_M_i(interp, pc, offs) emitm_notl_m((pc), emit_EBX, 0, 1, (offs))
-
-/* XCHG */
-#  define jit_emit_xchg_rr_i(interp, pc, r1, r2) { \
-    if ((r1) != (r2)) { \
-    *((pc)++) = (char) 0x87; \
-    *((pc)++) = (char) emit_alu_r_r((r1), (r2)); \
-    } \
-}
-
-#  define jit_emit_xchg_rm_i(pc, r, m) { \
-    emitm_alul_r_m((pc), 0x87, (r), emit_None, emit_None, emit_None, (m)) \
-}
-#  define jit_emit_xchg_RM_i(interp, pc, r, offs) { \
-    emitm_alul_r_m((pc), 0x87, (r), emit_EBX, emit_None, 1, (offs)) \
-}
-#  define jit_emit_xchg_MR_i(interp, pc, offs, r) jit_emit_xchg_RM_i((interp), (pc), (r), (offs))
-
-/* SHL */
-
-#  define jit_emit_shl_ri_i(interp, pc, reg, imm) \
-    { (pc) = emit_shift_i_r((interp), (pc), emit_b100, (imm), (reg)); }
-
-#  define emitm_shll_i_m(pc, imm, b, i, s, d) \
-    { (pc) = emit_shift_i_m((pc), emit_b100, (imm), (b), (i), (s), (d)); }
-
-#  define emitm_shll_r_r(interp, pc, reg1, reg2) \
-    { (pc) = emit_shift_r_r((interp), (pc), emit_b100, (reg1), (reg2)); }
-
-#  define emitm_shll_r_m(pc, reg, b, i, s, d) \
-    { (pc) = emit_shift_r_m((pc), emit_b100, (reg), (b), (i), (s), (d)); }
-
-/* SHR */
-
-#  define jit_emit_lsr_ri_i(interp, pc, reg, imm) \
-    { (pc) = emit_shift_i_r((interp), (pc), emit_b101, (imm), (reg)); }
-
-#  define emitm_shrl_i_m(pc, imm, b, i, s, d) \
-    { (pc) = emit_shift_i_m((pc), emit_b101, (imm), (b), (i), (s), (d)); }
-
-#  define emitm_shrl_r_r(interp, pc, reg1, reg2) \
-    { (pc) = emit_shift_r_r((interp), (pc), emit_b101, (reg1), (reg2)); }
-
-#  define emitm_shrl_r_m(pc, reg, b, i, s, d) \
-    { (pc) = emit_shift_r_m((pc), emit_b101, (reg), (b), (i), (s), (d)); }
-
-/* SAL */
-
-#  define emitm_sall_i_r(interp, pc, imm, reg) \
-    { (pc) = emit_shift_i_r((interp), (pc), emit_b100, (imm), (reg)); }
-
-#  define emitm_sall_i_m(pc, imm, b, i, s, d) \
-    { (pc) = emit_shift_i_m((pc), emit_b100, (imm), (b), (i), (s), (d)); }
-
-#  define emitm_sall_r_r(interp, pc, reg1, reg2) \
-    { (pc) = emit_shift_r_r((interp), (pc), emit_b100, (reg1), (reg2)); }
-
-#  define emitm_sall_r_m(pc, reg, b, i, s, d) \
-    { (pc) = emit_shift_r_m((pc), emit_b100, (reg), (b), (i), (s), (d)); }
-
-/* SAR */
-
-#  define jit_emit_shr_ri_i(interp, pc, reg, imm) \
-    { (pc) = emit_shift_i_r((interp), (pc), emit_b111, (imm), (reg)); }
-
-
-#  define emitm_sarl_i_m(pc, imm, b, i, s, d) \
-    { (pc) = emit_shift_i_m((pc), emit_b111, (imm), (b), (i), (s), (d)); }
-
-#  define emitm_sarl_r_r(interp, pc, reg1, reg2) \
-    { (pc) = emit_shift_r_r((interp), (pc), emit_b111, (reg1), (reg2)); }
-
-#  define emitm_sarl_r_m(pc, reg, b, i, s, d) \
-    { (pc) = emit_shift_r_m((pc), emit_b111, (reg), (b), (i), (s), (d)); }
-
-/* rotate */
-
-#  define jit_emit_rol_ri_i(interp, pc, reg, imm) \
-    { (pc) = emit_shift_i_r((interp), (pc), emit_b000, (imm), (reg)); }
-
-#  define jit_emit_ror_ri_i(interp, pc, reg, imm) \
-    { (pc) = emit_shift_i_r((interp), (pc), emit_b001, (imm), (reg)); }
-
-/* interface, shift r1 by r2 bits */
-
-#  define jit_emit_shl_rr_i(interp, pc, r1, r2) \
-    (pc) = opt_shift_rr((interp), jit_info, (r1), (r2), emit_b100)
-
-#  define jit_emit_shl_RM_i(interp, pc, r1, offs)  \
-    (pc) = opt_shift_rm((interp), jit_info, (r1), (offs), emit_b100)
-
-/* shr seems to be the arithmetic shift */
-#  define jit_emit_shr_rr_i(interp, pc, r1, r2)  \
-    (pc) = opt_shift_rr((interp), jit_info, (r1), (r2), emit_b111)
-
-#  define jit_emit_shr_RM_i(interp, pc, r1, offs)  \
-    (pc) = opt_shift_rm((interp), jit_info, (r1), (offs), emit_b111)
-
-#  define jit_emit_lsr_rr_i(interp, pc, r1, r2)  \
-    (pc) = opt_shift_rr((interp), jit_info, (r1), (r2), emit_b101)
-
-#  define jit_emit_lsr_RM_i(interp, pc, r1, offs)  \
-    (pc) = opt_shift_rm((interp), jit_info, (r1), (offs), emit_b101)
-
-/* MOV (reg), reg */
-#  define emit_movm_r_r(pc, src, dest) \
-    *((pc)++) = (char) 0x8b; \
-    *((pc)++) = (char) (src) | (dest) << 3
-
-/* MOV X(reg), reg */
-#  define emit_movb_i_r_r(pc, imm, src, dest) \
-    *((pc)++) = (char)(0x8b); \
-    *((p)c++) = (char)(0x40 | ((src) - 1) | ((dest) - 1) << 3); \
-    *((pc)++) = (imm)
-
-/* INC / DEC */
-#  define jit_emit_inc_r_i(pc, reg) *((pc)++) = (char)(0x40 | ((reg) - 1))
-#  define jit_emit_dec_r_i(pc, reg) *((pc)++) = (char)(0x48 | ((reg) - 1))
-
-/* Floating point ops */
-
-#  define emitm_floatop 0xd8  /* 11011000 */
-#  define jit_emit_dec_fsp(pc) { *((pc)++) = (char) 0xD9; *((pc)++) = (char) 0xF6; }
-#  define jit_emit_inc_fsp(pc) { *((pc)++) = (char) 0xD9; *((pc)++) = (char) 0xF7; }
-
-#  define emitm_fl_2(interp, pc, mf, opa, opb, b, i, s, d) { \
-    *((pc)++) = (char)(emitm_floatop | ((mf) << 1) | (opa)); \
-    (pc) = emit_r_X((interp), (pc), emit_reg(opb), (b), (i), (s), (long)(d)); }
-
-#  define emitm_fl_3(pc, d_p_opa, opb_r, sti) { \
-    *((pc)++) = (char)(emitm_floatop | (d_p_opa)); \
-    *((pc)++) = (char)(0xc0 | ((opb_r) << 3) | (sti)); }
-
-#  define emitm_fl_4(pc, op) { \
-    *((pc)++) = (char)(emitm_floatop | emit_b001); \
-    *((pc)++) = (char)(0xe0 | (op)); }
-
-/* Integer loads and stores */
-#  define emitm_fildl(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 1, emit_b000, (b), (i), (s), (d))
-
-#  define emitm_fistpl(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 1, emit_b011, (b), (i), (s), (d))
-
-#  define emitm_fistl(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 1, emit_b010, (b), (i), (s), (d))
-
-/* long long integer load/store */
-#  define emitm_fildll(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b11, 1, emit_b101, (b), (i), (s), (d))
-
-#  define emitm_fistpll(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b11, 1, emit_b111, (b), (i), (s), (d))
-
-/* Double loads and stores */
-#  define emitm_fldl(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 1, emit_b000, (b), (i), (s), (d))
-
-#  define emitm_fstpl(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 1, emit_b011, (b), (i), (s), (d))
-
-#  define emitm_fstl(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 1, emit_b010, (b), (i), (s), (d))
-
-/* long double load / store */
-#  define emitm_fldt(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 1, emit_b101, (b), (i), (s), (d))
-
-#  define emitm_fstpt(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 1, emit_b111, (b), (i), (s), (d))
-
-/* short float load / store */
-#  define emitm_flds(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b00, 1, emit_b000, (b), (i), (s), (d))
-
-#  define emitm_fstps(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b00, 1, emit_b010, (b), (i), (s), (d))
-
-#if NUMVAL_SIZE == 8
-
-#  define jit_emit_fload_m_n(interp, pc, address) \
-      emitm_fldl((interp), (pc), emit_None, emit_None, emit_None, (address))
-
-#  define jit_emit_fload_mb_n(interp, pc, base, offs) \
-      emitm_fldl((interp), (pc), (base), emit_None, 1, (offs))
-
-#  define jit_emit_fstore_m_n(interp, pc, address) \
-      emitm_fstpl((interp), (pc), emit_None, emit_None, emit_None, (address))
-
-#  define jit_emit_fstore_mb_n(interp, pc, base, offs) \
-      emitm_fstpl((interp), (pc), (base), emit_None, 1, (offs))
-
-#  define jit_emit_fst_mb_n(interp, pc, base, offs) \
-      emitm_fstl((interp), (pc), (base), emit_None, 1, (offs))
-
-#else /* NUMVAL_SIZE */
-
-#  define jit_emit_fload_m_n(interp, pc, address) \
-      emitm_fldt((interp), (pc), emit_None, emit_None, emit_None, (address))
-
-#  define jit_emit_fload_mb_n(interp, pc, base, offs) \
-      emitm_fldt((interp), (pc), (base), emit_None, 1, (offs))
-
-#  define jit_emit_fstore_m_n(pc, address) \
-      emitm_fstpt((interp), (pc), emit_None, emit_None, emit_None, (address))
-
-#  define jit_emit_fstore_mb_n(interp, pc, base, offs) \
-      emitm_fstpt((interp), (pc), (base), emit_None, 1, (offs))
-
-#  define jit_emit_fst_mb_n(interp, pc, base, offs) \
-      emitm_fstt((interp), (pc), (base), emit_None, 1, (offs))
-
-#endif /* NUMVAL_SIZE */
-
-#if INTVAL_SIZE == 4
-
-#  define jit_emit_fload_m_i(interp, pc, address) \
-      emitm_fildl((interp), (pc), emit_None, emit_None, emit_None, (address))
-#  define jit_emit_fload_mb_i(interp, pc, offs) \
-      emitm_fildl((interp), (pc), emit_EBX, emit_None, 1, (offs))
-#  define jit_emit_fstore_m_i(pc, m) \
-      emitm_fistpl((pc), emit_None, emit_None, emit_None, (m))
-
-#else /* INTVAL_SIZE */
-
-#  define jit_emit_fload_m_i(interp, pc, address) \
-      emitm_fildll((interp), (pc), emit_None, emit_None, emit_None, (address))
-#  define jit_emit_fload_mb_i(interp, pc, offs) \
-      emitm_fildll((interp), (pc), emit_EBX, emit_None, 1, (offs))
-#  define jit_emit_fstore_m_i(pc, m) \
-      emitm_fistpll((pc), emit_None, emit_None, emit_None, (m))
-
-#endif /* INTVAL_SIZE */
-
-/* 0xD8 ops */
-#  define emitm_fadd(pc, sti) emitm_fl_3((pc), emit_b000, emit_b000, (sti))
-#  define emitm_fmul(pc, sti) emitm_fl_3((pc), emit_b000, emit_b001, (sti))
-#  define emitm_fsub(pc, sti) emitm_fl_3((pc), emit_b000, emit_b100, (sti))
-#  define emitm_fdiv(pc, sti) emitm_fl_3((pc), emit_b000, emit_b110, (sti))
-
-/* 0xD9 ops */
-#  define emitm_fldz(pc)  { *((pc)++) = (char) 0xd9; *((pc)++) = (char) 0xee; }
-#  define emitm_fld1(pc)  { *((pc)++) = (char) 0xd9; *((pc)++) = (char) 0xe8; }
-#  define emitm_fsqrt(pc) { *((pc)++) = (char) 0xd9; *((pc)++) = (char) 0xfa; }
-#  define emitm_fsin(pc)  { *((pc)++) = (char) 0xd9; *((pc)++) = (char) 0xfe; }
-#  define emitm_fcos(pc)  { *((pc)++) = (char) 0xd9; *((pc)++) = (char) 0xff; }
-#  define emitm_fxam(pc)  { *((pc)++) = (char) 0xd9; *((pc)++) = (char) 0xe5; }
-
-/* FXCH ST, ST(i) , optimize 2 consecutive fxch with same reg */
-#  define emitm_fxch(pc, sti) { \
-    emitm_fl_3((pc), emit_b001, emit_b001, (sti)); \
-}
-
-/* FLD ST, ST(i), optimized FSTP(N+1);FLD(N) => FST(N+1)  */
-extern unsigned char *lastpc;
-#  define emitm_fld(pc, sti) do { \
-     if ((unsigned char *)(pc) == (lastpc + 2) && \
-       (int)(*lastpc) == (int)0xDD && \
-       (int)lastpc[1] == (int)(0xD8+(sti)+1)) \
-       lastpc[1] = 0xD0+(sti)+1; \
-     else \
-       emitm_fl_3((pc), emit_b001, emit_b000, (sti)); \
-  } while (0)
-
-/* 0xDA, 0xDB ops */
-/* FCMOV*, FCOMI PPRO */
-
-/* 0xDC like 0xD8 with reversed operands */
-#  define emitm_faddr(pc, sti) emitm_fl_3((pc), emit_b100, emit_b000, (sti))
-#  define emitm_fmulr(pc, sti) emitm_fl_3((pc), emit_b100, emit_b001, (sti))
-#  define emitm_fsubr(pc, sti) emitm_fl_3((pc), emit_b100, emit_b100, (sti))
-
-/* 0xDD ops */
-/* FFree ST(i) */
-#  define emitm_ffree(pc, sti) emitm_fl_3((pc), emit_b101, emit_b000, (sti))
-
-/* FST ST(i) = ST */
-#  define emitm_fst(pc, sti) emitm_fl_3((pc), emit_b101, emit_b010, (sti))
-
-/* FSTP ST(i) = ST, POP */
-#  define emitm_fstp(pc, sti) { \
-    lastpc = (unsigned char*) (pc); \
-    emitm_fl_3((pc), emit_b101, emit_b011, (sti)); \
-}
-
-/* FUCOM ST(i) <=> ST  unordered compares */
-#  define emitm_fucom(pc, sti) emitm_fl_3((pc), emit_b101, emit_b100, (sti))
-
-/* FUCOMP ST(i) <=> ST, POP */
-#  define emitm_fucomp(pc, sti) emitm_fl_3((pc), emit_b101, emit_b101, (sti))
-
-/* 0xDE ops */
-/* FADDP Add ST(i) = ST + ST(i); POP  */
-#  define emitm_faddp(pc, sti) emitm_fl_3((pc), emit_b110, emit_b000, (sti))
-
-/* FMULP Mul ST(i) = ST * ST(i); POP  */
-#  define emitm_fmulp(pc, sti) emitm_fl_3((pc), emit_b110, emit_b001, (sti))
-
-/* FSUB ST = ST - ST(i) */
-
-/* FSUBRP SubR ST(i) = ST - ST(i); POP  */
-#  define emitm_fsubrp(pc, sti) emitm_fl_3((pc), emit_b110, emit_b100, (sti))
-
-/* FSUBP Sub ST(i) = ST(i) - ST; POP  */
-#  define emitm_fsubp(pc, sti) emitm_fl_3((pc), emit_b110, emit_b101, (sti))
-
-/* FDIVRP DivR ST(i) = ST(i) / ST(0); POP  */
-#  define emitm_fdivrp(pc, sti) emitm_fl_3((pc), emit_b110, emit_b110, (sti))
-
-/* FDIVP Div ST(i) = ST(0) / ST(i); POP ST(0) */
-#  define emitm_fdivp(pc, sti) emitm_fl_3((pc), emit_b110, emit_b111, (sti))
-
-/* 0xDF OPS: FCOMIP, FUCOMIP PPRO */
-
-/* Negate - called change sign */
-#  define emitm_fchs(pc) emitm_fl_4((pc), 0)
-
-/* ABS - ST(0) = ABS(ST(0)) */
-#  define emitm_fabs(pc) emitm_fl_4((pc), 1)
-
-/* Comparisons */
-
-#  define emitm_fcom(pc, sti) emitm_fl_3((pc), emit_b000, emit_b010, (sti))
-
-#  define emitm_fcomp(pc, sti) emitm_fl_3((pc), emit_b000, emit_b011, (sti))
-
-#ifdef PARROT_HAS_JIT_FCOMIP
-#  define emitm_fcomip(pc, sti) emitm_fl_3((pc), emit_b111, emit_b110, (sti))
-#  define emitm_fcomi(pc, sti) emitm_fl_3((pc), emit_b011, emit_b110, (sti))
-#else
-#  define emitm_fcomip(pc, sti) do { \
-      emitm_fcomp((pc), (sti)); \
-      emitm_fstw(pc); \
-      emitm_sahf(pc); \
-    } while (0)
-#  define emitm_fcomi(pc, sti) do { \
-      emitm_fcom((pc), (sti)); \
-      emitm_fstw(pc); \
-      emitm_sahf(pc); \
-    } while (0)
-#endif
-
-#  define emitm_fcompp(pc) { *((pc)++) = (char) 0xde; *((pc)++) = (char) 0xd9; }
-
-#  define emitm_fcom_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 0, emit_b010, (b), (i), (s), (d))
-
-#  define emitm_fcomp_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 0, emit_b011, (b), (i), (s), (d))
-
-/* ST -= real64 */
-#  define emitm_fsub_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 0, emit_b100, (b), (i), (s), (d))
-
-/* ST -= int32_mem */
-#  define emitm_fisub_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 0, emit_b100, (b), (i), (s), (d))
-
-#  define emitm_fadd_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 0, emit_b000, (b), (i), (s), (d))
-
-/* ST += int32_mem */
-#  define emitm_fiadd_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 0, emit_b000, (b), (i), (s), (d))
-
-/* ST *= real64 */
-#  define emitm_fmul_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 0, emit_b001, (b), (i), (s), (d))
-
-/* ST *= int32_mem */
-#  define emitm_fimul_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 0, emit_b001, (b), (i), (s), (d))
-
-/* ST /= real64 */
-#  define emitm_fdiv_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b10, 0, emit_b110, (b), (i), (s), (d))
-
-/* ST /= int32_mem */
-#  define emitm_fidiv_m(interp, pc, b, i, s, d) \
-    emitm_fl_2((interp), (pc), emit_b01, 0, emit_b110, (b), (i), (s), (d))
-
-/* Ops Needed to support loading EFLAGs for conditional branches */
-#  define emitm_fstw(pc) emitm_fl_3((pc), emit_b111, emit_b100, emit_b000)
-
-#  define emitm_sahf(pc) *((pc)++) = (char) 0x9e
-
-/* misc float */
-#  define emitm_ftst(pc) { *(pc)++ = 0xd9; *(pc)++ = 0xE4; }
-#  define emitm_fprem(pc) { *(pc)++ = 0xd9; *(pc)++ = 0xF8; }
-#  define emitm_fprem1(pc) { *(pc)++ = 0xd9; *(pc)++ = 0xF5; }
-
-#  define emitm_fldcw(interp, pc, mem) \
-    emitm_fl_2((interp), (pc), emit_b00, 1, emit_b101, 0, 0, 0, (mem))
-
-#if defined(NEG_MINUS_ZERO)
-#  define jit_emit_neg_r_n(pc, r) { \
-       if (r) { \
-         emitm_fld((pc), (r)); \
-       } \
-       emitm_fchs(pc); \
-       if (r) { \
-         emitm_fstp((pc), ((r)+1)); \
-       } \
-     }
-
-#  define jit_emit_neg_M_n(interp, pc, mem) { \
-       jit_emit_fload_mb_n((interp), (pc), emit_EBX, (mem)); \
-       emitm_fchs(pc); \
-       jit_emit_fstore_mb_n((interp), (pc), emit_EBX, (mem)); \
-     }
-
-#elif defined(NEG_ZERO_SUB)
-
-#  define jit_emit_neg_r_n(pc, r) { \
-       emitm_fldz(pc); \
-       emitm_fsubrp((pc), ((r)+1)); \
-     }
-
-#  define jit_emit_neg_M_n(interp, pc, mem) { \
-       jit_emit_fload_mb_n((interp), (pc), emit_EBX, (mem)); \
-       emitm_fldz(pc); \
-       emitm_fsubrp((pc), 1); \
-       jit_emit_fstore_mb_n((interp), (pc), emit_EBX, (mem)); \
-     }
-#else
-
-#  define jit_emit_neg_r_n(pc, r) { \
-       if (r) { \
-         emitm_fld((pc), (r)); \
-       } \
-       emitm_ftst(pc); \
-       emitm_fstw(pc); \
-       emitm_sahf(pc); \
-       emitm_jxs((pc), emitm_jz, 2); \
-       emitm_fchs(pc); \
-       if (r) { \
-         emitm_fstp((pc), ((r)+1)); \
-       } \
-     }
-
-#  define jit_emit_neg_M_n(interp, pc, mem) { \
-       jit_emit_fload_mb_n((interp), (pc), emit_EBX, (mem)); \
-       emitm_ftst(pc); \
-       emitm_fstw(pc); \
-       emitm_sahf(pc); \
-       emitm_jxs((pc), emitm_jz, 2); \
-       emitm_fchs(pc); \
-       jit_emit_fstore_mb_n((interp), (pc), emit_EBX, (mem)); \
-     }
-#endif
-
-#  define jit_emit_sin_r_n(pc, r) \
-     if (r) { \
-       emitm_fld((pc), (r)); \
-     } \
-     emitm_fsin(pc); \
-     if (r) { \
-       emitm_fstp((pc), ((r)+1)); \
-     }
-
-#  define jit_emit_cos_r_n(pc, r) \
-     if (r) { \
-       emitm_fld((pc), (r)); \
-     } \
-     emitm_fcos(pc); \
-     if (r) { \
-       emitm_fstp((pc), ((r)+1)); \
-     }
-
-#  define jit_emit_sqrt_r_n(pc, r) \
-     if (r) { \
-       emitm_fld((pc), (r)); \
-     } \
-     emitm_fsqrt(pc); \
-     if (r) { \
-       emitm_fstp((pc), ((r)+1)); \
-     }
-
-#  define jit_emit_abs_r_n(pc, r) { \
-     if (r) { \
-       emitm_fld((pc), (r)); \
-     } \
-     emitm_fabs(pc); \
-     if (r) { \
-       emitm_fstp((pc), ((r)+1)); \
-     } \
-   }
-
-#  define jit_emit_abs_r_i(pc, r) { \
-     jit_emit_test_r_i((pc), (r)); \
-     emitm_jxs((pc), emitm_jns, 3); \
-     jit_emit_not_r_i((pc), (r)); \
-     jit_emit_inc_r_i((pc), (r)); \
-   }
-
-#  define jit_emit_abs_m_n(interp, pc, mem) { \
-     jit_emit_fload_m_n((interp), (pc), (mem)); \
-     emitm_fabs(pc); \
-     jit_emit_fstore_m_n((pc), (mem)); \
-   }
-
-/* Integer comparisons */
-#  define jit_emit_cmp_rr(pc, reg1, reg2) \
-    emitm_alul_r_r((pc), 0x39, (reg2), (reg1))
-#  define jit_emit_cmp_rr_i(pc, r1, r2) jit_emit_cmp_rr((pc), (r1), (r2))
-
-#  define emitm_cmpl_r_m(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x3b, (reg), (b), (i), (s), (d))
-
-#  define emitm_cmpl_m_r(pc, reg, b, i, s, d) \
-    emitm_alul_r_m((pc), 0x39, (reg), (b), (i), (s), (d))
-
-#  define jit_emit_cmp_ri_i(interp, pc, reg, imm) \
-    emitm_alul_i_r((pc), 0x81, emit_b111, (imm), (reg))
-
-/* Unconditional Jump/Call */
-
-#  define emitm_call_cfunc(pc, func) emitm_calll((pc), (char *)(func) - (pc) - 4)
-
-#  define emitm_calll(pc, disp) { \
-    *((pc)++) = (char) 0xe8; \
-    *(long *)(pc) = (disp); (pc) += 4; }
-
-#  define emitm_callr(pc, reg) { \
-    *((pc)++) = (char) 0xff; \
-    *((pc)++) = (char) 0xd0 | ((reg) - 1); }
-
-#  define emitm_callm(pc, b, i, s, d) { \
-       *((pc)++) = (char) 0xff; \
-       (pc) = emit_r_X((interp), (pc), emit_reg(emit_b010), (b), (i), (s), (d)); }
-
-#  define emitm_jumps(pc, disp) { \
-    *((pc)++) = (char) 0xeb; \
-    *((pc)++) = (disp); }
-
-#  define emitm_jumpl(pc, disp) { \
-    *((pc)++) = (char) 0xe9; \
-    *(long *)(pc) = (disp); (pc) += 4; }
-
-#  define emitm_jumpr(pc, reg) { \
-    *((pc)++) = (char) 0xff; \
-    *((pc)++) = (char)(0xe0 | ((reg) - 1)); }
-
-#  define emitm_jumpm(pc, b, i, s, d) { \
-       *((pc)++) = (char) 0xff; \
-       (pc) = emit_r_X((interp), (pc), emit_reg(emit_b100), (b), (i), (s), (d)); }
-
-/* Conditional jumps */
-
-/* Short jump - 8 bit disp */
-#  define emitm_jxs(pc, code, disp) { \
-    *((pc)++) = (char)(0x70 | (code)); \
-    *((pc)++) = (char)(disp); }
-
-/* Long jump - 32 bit disp */
-#  define emitm_jxl(pc, code, disp) { \
-    *((pc)++) = (char) 0x0f; \
-    *((pc)++) = (char)(0x80 | (code));  \
-    *(long *)(pc) = (disp); (pc) += 4; }
-
-#  define emitm_jo   0
-#  define emitm_jno  1
-#  define emitm_jb   2
-#  define emitm_jnb  3
-#  define emitm_jz   4
-#  define emitm_je emitm_jz
-#  define emitm_jnz  5
-#  define emitm_jne emitm_jnz
-#  define emitm_jbe  6
-#  define emitm_ja   7
-#  define emitm_js   8
-#  define emitm_jns  9
-#  define emitm_jp  10
-#  define emitm_jnp 11
-#  define emitm_jl  12
-#  define emitm_jnl 13
-#  define emitm_jle 14
-#  define emitm_jg  15
-
-/* set byte conditional */
-#  define jit_emit_setcc_r(pc, cc, r) \
-    *(pc)++ = 0x0f; \
-    *(pc)++ = 0x90 + (cc); \
-    *(pc)++ = (char) emit_alu_X_r(0, (r))
-
-/*
- * core.jit interface
- *
- * The new offset based versions have uppercase RM or MR inside
- * That's probably only during transition time
- */
-
-#  define jit_emit_mov_mi_i(pc, dest, immediate) \
-    emitm_movl_i_m((pc), (immediate), emit_None, emit_None, emit_None, (dest))
-
-#  define jit_emit_mov_MI_i(interp, pc, offs, immediate) \
-    emitm_movl_i_m((pc), (immediate), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_mov_rm_i(interp, pc, reg, address) \
-    emitm_movl_m_r((interp), (pc), (reg), emit_None, emit_None, emit_None, (address))
-
-#  define jit_emit_mov_RM_i(interp, pc, reg, offs) \
-    emitm_movl_m_r((interp), (pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_mov_mr_i(interp, pc, address, reg) \
-    emitm_movl_r_m((interp), (pc), (reg), emit_None, emit_None, emit_None, (address))
-
-#  define jit_emit_mov_MR_i(interp, pc, offs, reg) \
-    emitm_movl_r_m((interp), (pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_mul_RM_i(interp, pc, reg, offs) \
-    emitm_smull_r_m((pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_sub_RM_i(interp, pc, reg, offs) \
-    emitm_subl_m_r((pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_sub_MR_i(interp, pc, offs, reg) \
-    emitm_subl_r_m((pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_sub_MI_i(pc, offs, imm) \
-    emitm_subl_i_m((pc), (imm), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_add_RM_i(interp, pc, reg, offs) \
-    emitm_addl_m_r((pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_add_MR_i(interp, pc, offs, reg) \
-    emitm_addl_r_m((pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_add_MI_i(pc, offs, imm) \
-    emitm_addl_i_m((pc), (imm), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_cmp_rm_i(pc, reg, address) \
-    emitm_cmpl_r_m((pc), (reg), emit_None, emit_None, emit_None, (address))
-
-#  define jit_emit_cmp_RM_i(interp, pc, reg, offs) \
-    emitm_cmpl_r_m((pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-#  define jit_emit_cmp_MR_i(interp, pc, offs, reg) \
-    emitm_cmpl_m_r((pc), (reg), emit_EBX, emit_None, 1, (offs))
-
-/* high level routines, behave like real 2 register FP */
-
-/* mapped float registers numbers are ST(1)-ST(4).
- * scratch register is ST(0)
- */
-
-/* ST(i) <- numvar */
-#  define jit_emit_mov_RM_n(interp, pc, r, d) { \
-    jit_emit_fload_mb_n((interp), (pc), emit_EBX, (d)); \
-    emitm_fstp((pc), ((r)+1)); \
-}
-
-/* ST(i) <= NUM_CONST */
-#  define jit_emit_mov_ri_n(interp, pc, r, i) { \
-    jit_emit_fload_m_n((interp), (pc), (i)); \
-    emitm_fstp((pc), ((r)+1)); \
-}
-
-/* ST(i) <= &INT_CONST */
-#  define jit_emit_mov_ri_ni(interp, pc, r, i) { \
-    jit_emit_fload_m_i((interp), (pc), (i)); \
-    emitm_fstp((pc), ((r)+1)); \
-}
-
-/* ST(i) <= INT_REG */
-#  define jit_emit_mov_RM_ni(interp, pc, r, i) { \
-    jit_emit_fload_mb_i((interp), (pc), (i)); \
-    emitm_fstp((pc), ((r)+1)); \
-}
-
-/* NUM_REG(i) <= &INT_CONST
- * the int const i is loaded from the code memory
- */
-#  define jit_emit_mov_MI_ni(interp, pc, offs, i) { \
-    jit_emit_fload_m_i((interp), (pc), (i)); \
-    jit_emit_fstore_mb_n((interp), (pc), emit_EBX, (offs)); \
-}
-
-/* INT_REG <= ST(i) */
-#  define jit_emit_mov_mr_in(pc, mem, r) { \
-    emitm_fld((pc), (r)); \
-    jit_emit_fstore_m_i((pc), (mem)); \
-}
-
-/* numvar <- ST(i) */
-#  define jit_emit_mov_mr_n(pc, d, r) { \
-    emitm_fld((pc), (r)); \
-    jit_emit_fstore_m_n((pc), (d)); \
-}
-
-#  define jit_emit_mov_MR_n(interp, pc, d, r) { \
-    if (r) { \
-        emitm_fld((pc), (r)); \
-        jit_emit_fstore_mb_n((interp), (pc), emit_EBX, (d)); \
-    } \
-    else { \
-        jit_emit_fst_mb_n((interp), (pc), emit_EBX, (d)); \
-    } \
-}
-
-/* ST(r1) <= ST(r2) */
-#  define jit_emit_mov_rr_n(pc, r1, r2) { \
-    if ((r1) != (r2)) { \
-      if (r2) { \
-        emitm_fld((pc), (r2)); \
-        emitm_fstp((pc), ((r1)+1)); \
-      } \
-      else { \
-        emitm_fst((pc), (r1)); \
-      } \
-    } \
-}
-
-/* ST(r1) xchg ST(r2) */
-#  define jit_emit_xchg_rr_n(interp, pc, r1, r2) { \
-    if ((r1) != (r2)) { \
-      emitm_fld((pc), (r1)); \
-      emitm_fld((pc), ((r2)+1)); \
-      emitm_fstp((pc), ((r1)+2)); \
-      emitm_fstp((pc), ((r2)+1)); \
-    } \
-}
-
-#  define jit_emit_xchg_RM_n(interp, pc, r, offs) { \
-    emitm_fld((pc), (r)); \
-    jit_emit_fload_mb_n((interp), (pc), emit_EBX, (offs)); \
-    emitm_fstp((pc), ((r)+2)); \
-    jit_emit_fstore_mb_n((interp), (pc), emit_EBX, (offs)); \
-}
-
-#  define jit_emit_xchg_MR_n(interp, pc, offs, r) { \
-    emitm_fld((pc), (r)); \
-    jit_emit_fload_mb_n((interp), (pc), emit_EBX, (offs)); \
-    emitm_fstp((pc), ((r)+2)); \
-    jit_emit_fstore_mb_n((interp), (pc), emit_EBX, (offs)); \
-}
-
-#  define jit_emit_finit(pc) { *((pc)++) = (char) 0xdb; *((pc)++) = (char) 0xe3; }
-
-/* ST(i) op= MEM */
-
-#  define jit_emit_xxx_rm_n(interp, op, pc, r, m) { \
-    jit_emit_fload_m_n((interp), (pc), (m)); \
-    emitm_f ## op ## p((pc), ((r)+1)); \
-}
-
-#  define jit_emit_xxx_RM_n(interp, op, pc, r, offs) { \
-    jit_emit_fload_mb_n((interp), (pc), emit_EBX, (offs)); \
-    emitm_f ## op ## p((pc), ((r)+1)); \
-}
-
-/*
- * float ops in two flavors: abs memory for constants, offsets for regs
- */
-
-#  define jit_emit_add_ri_n(interp, pc, r, m) jit_emit_xxx_rm_n((interp), add, (pc), (r), (m))
-#  define jit_emit_sub_ri_n(interp, pc, r, m) jit_emit_xxx_rm_n((interp), sub, (pc), (r), (m))
-#  define jit_emit_mul_ri_n(interp, pc, r, m) jit_emit_xxx_rm_n((interp), mul, (pc), (r), (m))
-
-#  define jit_emit_add_RM_n(interp, pc, r, o) jit_emit_xxx_RM_n((interp), add, (pc), (r), (o))
-#  define jit_emit_sub_RM_n(interp, pc, r, o) jit_emit_xxx_RM_n((interp), sub, (pc), (r), (o))
-#  define jit_emit_mul_RM_n(interp, pc, r, o) jit_emit_xxx_RM_n((interp), mul, (pc), (r), (o))
-
-/* ST(r1) += ST(r2) */
-/* r1 == 0:  ST(0) <- ST(0) + ST(i)
- * r2 == 0:  ST(i) <- ST(0) + ST(i)
- */
-#  define jit_emit_add_rr_n(interp, pc, r1, r2) do { \
-        if (!(r1)) { \
-          emitm_fadd((pc), (r2)); \
-        }  \
-        else if (!(r2)) { \
-          emitm_faddr((pc), (r1)); \
-        }  \
-        else { \
-            emitm_fld((pc), (r2)); \
-            emitm_faddp((pc), ((r1)+1)); \
-        } \
-    } \
-    while (0)
-/*
- * ST(r) += INT_REG
- */
-#  define jit_emit_add_RM_ni(pc, r, offs) { \
-    emitm_fld((pc), (r)); \
-    emitm_fiadd_m((pc), emit_EBX, 0, 1, (offs)); \
-    emitm_fstp((pc), ((r)+1)); \
-}
-
-/* ST(r1) -= ST(r2) */
-/* r1 == 0:  ST(0) <- ST(0) - ST(i)
- * r2 == 0:  ST(i) <- ST(i) - ST(0)
- */
-#  define jit_emit_sub_rr_n(interp, pc, r1, r2) do { \
-        if (!(r1)) { \
-          emitm_fsub((pc), (r2)); \
-        }  \
-        else if (!(r2)) { \
-          emitm_fsubr((pc), (r1)); \
-        }  \
-        else { \
-            emitm_fld((pc), (r2)); \
-            emitm_fsubp((pc), ((r1)+1)); \
-        } \
-    } \
-    while (0)
-
-/*
- * ST(r) -= INT_REG
- */
-#  define jit_emit_sub_RM_ni(pc, r, offs) { \
-    emitm_fld((pc), (r)); \
-    emitm_fisub_m((pc), emit_EBX, 0, 1, (offs)); \
-    emitm_fstp((pc), ((r)+1)); \
-}
-
-#  define jit_emit_inc_r_n(pc, r) { \
-    emitm_fld1(pc); \
-    emitm_faddp((pc), ((r)+1)); \
-}
-
-#  define jit_emit_dec_r_n(pc, r) { \
-    emitm_fld1(pc); \
-    emitm_fsubp((pc), ((r)+1)); \
-}
-
-/* ST(r1) *= ST(r2) */
-/* r1 == 0:  ST(0) <- ST(0) * ST(i)
- * r2 == 0:  ST(i) <- ST(0) * ST(i)
- */
-#  define jit_emit_mul_rr_n(interp, pc, r1, r2) do { \
-        if (!(r1)) { \
-          emitm_fmul((pc), (r2)); \
-        }  \
-        else if (!(r2)) { \
-          emitm_fmulr((pc), (r1)); \
-        }  \
-        else { \
-            emitm_fld((pc), (r2)); \
-            emitm_fmulp((pc), ((r1)+1)); \
-        } \
-    } \
-    while (0)
-
-/*
- * ST(r) *= INT_REG
- */
-#  define jit_emit_mul_RM_ni(pc, r, offs) { \
-    emitm_fld((pc), (r)); \
-    emitm_fimul_m((pc), emit_EBX, 0, 1, (offs)); \
-    emitm_fstp((pc), ((r)+1)); \
-}
-
-/*
- * ST(r) /= INT_REG
- */
-#  define jit_emit_div_RM_ni(pc, r, offs) { \
-    emitm_fld((pc), (r)); \
-    emitm_fidiv_m((pc), emit_EBX, 0, 1, (offs)); \
-    emitm_fstp((pc), ((r)+1)); \
-}
-
-/* test r for zero */
-#  define jit_emit_test_r_n(pc, r) { \
-    if (r) { \
-      emitm_fxch((pc), (r)); \
-    } \
-    emitm_fxam(pc); \
-    emitm_fstw(pc); \
-    emitm_sahf(pc); \
-    if (r) { \
-      emitm_fxch((pc), (r)); \
-    } \
-}
-
-enum { JIT_X86BRANCH, JIT_X86JUMP, JIT_X86CALL };
-
-#  define jit_emit_stack_frame_enter(pc) do { \
-    emitm_pushl_r((pc), emit_EBP); \
-    jit_emit_mov_rr_i((pc), emit_EBP, emit_ESP); \
-} while (0)
-
-#  define jit_emit_stack_frame_leave(pc) do { \
-    jit_emit_mov_rr_i((pc), emit_ESP, emit_EBP); \
-    emitm_popl_r((pc), emit_EBP); \
-} while (0)
-
-#  define jit_emit_end(pc) { \
-       jit_emit_add_ri_i((interp), (pc), emit_ESP, 4); \
-       emitm_popl_r((pc), emit_EDI); \
-       emitm_popl_r((pc), emit_ESI); \
-       emitm_popl_r((pc), emit_EBX); \
-       emitm_popl_r((pc), emit_EBP); \
-       emitm_ret(pc); \
-     }
-
-size_t calc_signature_needs(const char *sig, int *strings);
-
-void * Parrot_jit_build_call_func(PARROT_INTERP, PMC *pmc_nci,
-    STRING *signature, int *sizeptr);
-
-/*
- * register usage
- * %edi, %esi ... mapped, preserved
- * %edx, %ecx ... mapped, not preserved
- * %ebx       ... base pointer for register access, preserved
- * %eax       ... scratch, return value register
- */
-
-#endif /* PARROT_I386_JIT_EMIT_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/unshared_buffers/src/gc/alloc_resources.c
==============================================================================
--- branches/unshared_buffers/src/gc/alloc_resources.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/gc/alloc_resources.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -324,7 +324,7 @@
         size_t new_mem = mem_pools->memory_used -
                          mem_pools->mem_used_last_collect;
         if (!mem_pools->gc_mark_block_level
-            && new_mem > (mem_pools->mem_used_last_collect >> 1)
+            && new_mem > (mem_pools->mem_used_last_collect >> 2)
             && new_mem > GC_SIZE_THRESHOLD) {
             Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
         }
@@ -447,19 +447,21 @@
     if (mem_pools->gc_sweep_block_level)
         return;
 
+    ++mem_pools->gc_sweep_block_level;
+
+    /* We're collecting */
+    mem_pools->mem_allocs_since_last_collect    = 0;
+    mem_pools->header_allocs_since_last_collect = 0;
     ++mem_pools->gc_collect_runs;
 
     /* Snag a block big enough for everything */
     total_size = pad_pool_size(pool);
 
-    if (total_size == 0)
+    if (total_size == 0) {
+        free_old_mem_blocks(mem_pools, pool, pool->top_block, total_size);
+        --mem_pools->gc_sweep_block_level;
         return;
-
-    ++mem_pools->gc_sweep_block_level;
-
-    /* We're collecting */
-    mem_pools->mem_allocs_since_last_collect    = 0;
-    mem_pools->header_allocs_since_last_collect = 0;
+    }
 
     alloc_new_block(mem_pools, total_size, pool, "inside compact");
 
@@ -678,8 +680,7 @@
         else {
             /* Note that we don't have it any more */
             mem_pools->memory_allocated -= cur_block->size;
-            mem_pools->memory_used -=
-                cur_block->size - cur_block->free - cur_block->freed;
+            mem_pools->memory_used -= cur_block->size - cur_block->free;
 
             /* We know the pool body and pool header are a single chunk, so
              * this is enough to get rid of 'em both */

Modified: branches/unshared_buffers/src/gc/api.c
==============================================================================
--- branches/unshared_buffers/src/gc/api.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/gc/api.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -359,9 +359,9 @@
 =item C<STRING * Parrot_gc_new_string_header(PARROT_INTERP, UINTVAL flags)>
 
 Returns a new C<STRING> header from the string pool or the constant string
-pool. Sets default flags on the string object: C<PObj_is_string_FLAG>,
-C<PObj_is_COWable_FLAG>, and C<PObj_live_FLAG> (for GC). Initializes the data
-field of the string buffer to C<NULL>.
+pool. Sets default flags on the string object: C<PObj_is_string_FLAG> and
+C<PObj_is_COWable_FLAG>. Initializes the data field of the string buffer to
+C<NULL>.
 
 =cut
 
@@ -381,7 +381,7 @@
 
     Buffer_bufstart(string) = NULL;
     PObj_get_FLAGS(string) |=
-        flags | PObj_is_string_FLAG | PObj_is_COWable_FLAG | PObj_live_FLAG;
+        flags | PObj_is_string_FLAG | PObj_is_COWable_FLAG;
 
     return string;
 }

Modified: branches/unshared_buffers/src/gc/gc_ms.c
==============================================================================
--- branches/unshared_buffers/src/gc/gc_ms.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/gc/gc_ms.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -17,6 +17,8 @@
 #include "parrot/parrot.h"
 #include "gc_private.h"
 
+#define DEBUG_FREE_LIST 0
+
 PARROT_DOES_NOT_RETURN
 static void failed_allocation(unsigned int line, unsigned long size) /* HEADERIZER SKIP */
 {
@@ -31,6 +33,13 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+PARROT_WARN_UNUSED_RESULT
+static INTVAL contained_in_attr_pool(
+    ARGIN(const PMC_Attribute_Pool *pool),
+    ARGIN(const void *ptr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 static int gc_ms_active_sized_buffers(ARGIN(const Memory_Pools *mem_pools))
         __attribute__nonnull__(1);
 
@@ -253,6 +262,9 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*mem_pools);
 
+#define ASSERT_ARGS_contained_in_attr_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(pool) \
+    , PARROT_ASSERT_ARG(ptr))
 #define ASSERT_ARGS_gc_ms_active_sized_buffers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_gc_ms_add_free_object __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -984,6 +996,37 @@
 
 /*
 
+=item C<static INTVAL contained_in_attr_pool(const PMC_Attribute_Pool *pool,
+const void *ptr)>
+
+Returns whether the given C<*ptr> points to a location in C<pool>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL
+contained_in_attr_pool(ARGIN(const PMC_Attribute_Pool *pool), ARGIN(const void *ptr))
+{
+    ASSERT_ARGS(contained_in_attr_pool)
+    const PMC_Attribute_Arena *arena;
+    const ptrdiff_t item_space = pool->objects_per_alloc * pool->attr_size;
+
+    for (arena = pool->top_arena; arena; arena = arena->next) {
+        const ptrdiff_t ptr_diff = (const char *)ptr - (const char *)(arena + 1);
+
+        if (ptr_diff >= 0
+        &&  ptr_diff < item_space
+        &&  ptr_diff % pool->attr_size == 0)
+            return 1;
+    }
+
+    return 0;
+}
+
+/*
+
 =item C<void gc_ms_free_pmc_attributes(PARROT_INTERP, PMC *pmc)>
 
 Deallocates an attibutes structure from a PMC if it has the auto_attrs
@@ -1022,6 +1065,10 @@
     ASSERT_ARGS(gc_ms_free_attributes_from_pool)
     PMC_Attribute_Free_List * const item = (PMC_Attribute_Free_List *)data;
 
+#if DEBUG_FREE_LIST
+    PARROT_ASSERT(contained_in_attr_pool(pool, data));
+#endif
+
     item->next      = pool->free_list;
     pool->free_list = item;
 
@@ -1236,7 +1283,6 @@
     /* Decrease usage */
     PARROT_ASSERT(Buffer_pool(str));
     Buffer_pool(str)->freed += old_size;
-    interp->mem_pools->memory_used -= old_size;
 
     oldmem               = Buffer_bufstart(str);
     Buffer_bufstart(str) = (void *)mem;
@@ -1504,8 +1550,8 @@
         pool->skip = GC_NO_SKIP;
     else if (pool->skip == GC_NEVER_SKIP
          || (pool->skip == GC_NO_SKIP
-         && (new_mem > (mem_pools->mem_used_last_collect >> 1)
-         &&  mem_pools->header_allocs_since_last_collect >= GC_SIZE_THRESHOLD)))
+         && (new_mem > (mem_pools->mem_used_last_collect >> 2)
+         &&  new_mem >= GC_SIZE_THRESHOLD)))
             Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 
     /* requires that num_free_objects be updated in Parrot_gc_mark_and_sweep.
@@ -1536,6 +1582,10 @@
     ASSERT_ARGS(gc_ms_add_free_object)
     GC_MS_PObj_Wrapper *object = (GC_MS_PObj_Wrapper *)to_add;
 
+#if DEBUG_FREE_LIST
+    PARROT_ASSERT(contained_in_pool(pool, to_add));
+#endif
+
     PObj_flags_SETTO(object, PObj_on_free_list_FLAG);
 
     object->next_ptr = pool->free_list;
@@ -1644,9 +1694,6 @@
 
     if (alloc_size > POOL_MAX_BYTES)
         pool->objects_per_alloc = POOL_MAX_BYTES / pool->object_size;
-
-    if (alloc_size > GC_SIZE_THRESHOLD)
-        pool->skip = GC_NEVER_SKIP;
 }
 
 

Modified: branches/unshared_buffers/src/gc/gc_private.h
==============================================================================
--- branches/unshared_buffers/src/gc/gc_private.h	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/gc/gc_private.h	Sun Aug 29 17:09:11 2010	(r48719)
@@ -86,9 +86,9 @@
 /* how often to skip a full GC when this pool has nothing free */
 typedef enum _gc_skip_type_enum {
     GC_NO_SKIP = 0,
-    GC_ONE_SKIP,
+    GC_ONE_SKIP,        /* unused */
     GC_ALWAYS_SKIP,
-    GC_NEVER_SKIP
+    GC_NEVER_SKIP       /* unused */
 } gc_skip_type_enum;
 
 typedef struct GC_Subsystem {
@@ -316,13 +316,16 @@
                                                  * blocks allocated from
                                                  * the system since the last
                                                  * GC run */
-    size_t  memory_allocated;     /* The total amount of allocatable memory
-                                   * allocated. Doesn't count memory for
-                                   * headers or internal structures or
-                                   * anything */
-    size_t  memory_used;              /* The total amount of
-                                       * memory used for
-                                       * buffers and headers */
+    size_t  memory_allocated;     /* The total amount of memory allocated
+                                   * in fixed and variable size pools.
+                                   * Doesn't count memory for internal
+                                   * structures */
+    size_t  memory_used;          /* The total amount of memory used
+                                   * in fixed and variable size
+                                   * pools. Also includes memory in
+                                   * variable size pools that has been
+                                   * freed but can only be reclaimed
+                                   * by a GC run */
     size_t  mem_used_last_collect;    /* The total amount of
                                        * memory used after
                                        * the last GC run */

Modified: branches/unshared_buffers/src/gc/mark_sweep.c
==============================================================================
--- branches/unshared_buffers/src/gc/mark_sweep.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/gc/mark_sweep.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -32,13 +32,11 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 static void free_buffer(SHIM_INTERP,
-    ARGMOD(Memory_Pools *mem_pools),
+    SHIM(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool),
     ARGMOD(Buffer *b))
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
-        FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*b);
 
@@ -80,8 +78,7 @@
         FUNC_MODIFIES(*mem_pools);
 
 #define ASSERT_ARGS_free_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool) \
+       PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_free_pmc_in_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -481,6 +478,7 @@
 
     pool->last_Arena = new_arena;
     mem_pools->header_allocs_since_last_collect += size;
+    mem_pools->memory_allocated += size;
 }
 
 /*
@@ -658,7 +656,7 @@
 
 static void
 free_buffer(SHIM_INTERP,
-        ARGMOD(Memory_Pools *mem_pools),
+        SHIM(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool),
         ARGMOD(Buffer *b))
 {

Modified: branches/unshared_buffers/src/hash.c
==============================================================================
--- branches/unshared_buffers/src/hash.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/hash.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -25,50 +25,41 @@
 */
 
 #include "parrot/parrot.h"
-#include "pmc/pmc_key.h"
 
 /* the number of entries above which it's faster to hash the hashval instead of
  * looping over the used HashBuckets directly */
-#define INITIAL_BUCKETS  8
+#define INITIAL_SIZE  8
 
 /* HEADERIZER HFILE: include/parrot/hash.h */
 
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-static int cstring_compare(SHIM_INTERP,
-    ARGIN(const char *a),
-    ARGIN(const char *b))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
 static void expand_hash(PARROT_INTERP, ARGMOD(Hash *hash))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*hash);
 
-static UINTVAL get_hash_val(PARROT_INTERP,
-    ARGIN(const Hash *hash),
-    ARGIN_NULLOK(const void *key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_CANNOT_RETURN_NULL
+static PMC* get_integer_pmc(PARROT_INTERP, INTVAL value)
+        __attribute__nonnull__(1);
 
-static void hash_freeze(PARROT_INTERP,
-    ARGIN(const Hash *hash),
-    ARGMOD(PMC *info))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*info);
+PARROT_CANNOT_RETURN_NULL
+static PMC* get_number_pmc(PARROT_INTERP, FLOATVAL value)
+        __attribute__nonnull__(1);
 
-static void hash_thaw(PARROT_INTERP, ARGMOD(Hash *hash), ARGMOD(PMC *info))
+PARROT_CANNOT_RETURN_NULL
+static PMC * get_string_pmc(PARROT_INTERP, ARGIN(STRING *value))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+static int hash_compare_cstring(SHIM_INTERP,
+    ARGIN(const char *a),
+    ARGIN(const char *b))
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*hash)
-        FUNC_MODIFIES(*info);
+        __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
@@ -96,29 +87,19 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-static int pointer_compare(SHIM_INTERP,
-    ARGIN_NULLOK(const void *a),
-    ARGIN_NULLOK(const void *b));
-
-#define ASSERT_ARGS_cstring_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(a) \
-    , PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_expand_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
-#define ASSERT_ARGS_get_hash_val __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(hash))
-#define ASSERT_ARGS_hash_freeze __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_get_integer_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_get_number_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_get_string_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(hash) \
-    , PARROT_ASSERT_ARG(info))
-#define ASSERT_ARGS_hash_thaw __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(hash) \
-    , PARROT_ASSERT_ARG(info))
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_hash_compare_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(a) \
+    , PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_key_hash_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_key_hash_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -132,7 +113,6 @@
 #define ASSERT_ARGS_parrot_mark_hash_values __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
-#define ASSERT_ARGS_pointer_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -164,38 +144,8 @@
 
 /*
 
-=item C<static UINTVAL get_hash_val(PARROT_INTERP, const Hash *hash, const void
-*key)>
-
-An inlinable helper function to avoid the overhead of calling key_hash_STRING()
-when there's already a calculated hash value for the STRING key.
-
-=cut
-
-*/
-
-static UINTVAL
-get_hash_val(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(const void *key))
-{
-    ASSERT_ARGS(get_hash_val)
-    if (hash->hash_val == (hash_hash_key_fn)key_hash_STRING) {
-        /* Must be non-const because str_to_hashval caches the result
-         * in the STRING struct */
-        DECL_CONST_CAST;
-        STRING * const s = (STRING *)PARROT_const_cast(void *, key);
-        if (s->hashval)
-            return s->hashval;
-        return Parrot_str_to_hashval(interp, s);
-    }
-
-    return (hash->hash_val)(interp, key, hash->seed);
-}
-
-
-/*
-
-=item C<int STRING_compare(PARROT_INTERP, const void *search_key, const void
-*bucket_key)>
+=item C<int hash_compare_string(PARROT_INTERP, const void *search_key, const
+void *bucket_key)>
 
 Compares the two strings, returning 0 if they are identical.
 
@@ -205,30 +155,23 @@
 
 PARROT_WARN_UNUSED_RESULT
 int
-STRING_compare(PARROT_INTERP, ARGIN(const void *search_key), ARGIN_NULLOK(const void *bucket_key))
+hash_compare_string(PARROT_INTERP, ARGIN(const void *search_key),
+        ARGIN_NULLOK(const void *bucket_key))
 {
-    ASSERT_ARGS(STRING_compare)
+    ASSERT_ARGS(hash_compare_string)
     STRING const *s1 = (STRING const *)search_key;
     STRING const *s2 = (STRING const *)bucket_key;
 
-    if (!s2)
-        return 1;
-
     if (s1->hashval != s2->hashval)
         return 1;
 
-    /* COWed strings */
-    if (Buffer_bufstart(s1) == Buffer_bufstart(s2)
-    &&  s1->bufused == s2->bufused)
-        return 0;
-
     return CHARSET_COMPARE(interp, s1, s2);
 }
 
 
 /*
 
-=item C<int STRING_compare_distinct_cs_enc(PARROT_INTERP, const void
+=item C<int hash_compare_string_distinct_enc(PARROT_INTERP, const void
 *search_key, const void *bucket_key)>
 
 Compare two strings. Returns 0 if they are identical. Considers differing
@@ -238,10 +181,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 int
-STRING_compare_distinct_cs_enc(PARROT_INTERP, ARGIN(const void *search_key),
+hash_compare_string_distinct_enc(PARROT_INTERP, ARGIN(const void *search_key),
                                                 ARGIN(const void *bucket_key))
 {
-    ASSERT_ARGS(STRING_compare_distinct_cs_enc)
+    ASSERT_ARGS(hash_compare_string_distinct_enc)
     STRING const *s1 = (STRING const *)search_key;
     STRING const *s2 = (STRING const *)bucket_key;
 
@@ -251,13 +194,13 @@
         return 1;
     }
 
-    return STRING_compare(interp, search_key, bucket_key);
+    return hash_compare_string(interp, search_key, bucket_key);
 }
 
 
 /*
 
-=item C<static int pointer_compare(PARROT_INTERP, const void *a, const void *b)>
+=item C<int hash_compare_pointer(PARROT_INTERP, const void *a, const void *b)>
 
 Compares the two pointers, returning 0 if they are identical
 
@@ -267,10 +210,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CONST_FUNCTION
-static int
-pointer_compare(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
+int
+hash_compare_pointer(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
 {
-    ASSERT_ARGS(pointer_compare)
+    ASSERT_ARGS(hash_compare_pointer)
     return a != b;
 }
 
@@ -332,7 +275,8 @@
 
 /*
 
-=item C<static int cstring_compare(PARROT_INTERP, const char *a, const char *b)>
+=item C<static int hash_compare_cstring(PARROT_INTERP, const char *a, const char
+*b)>
 
 Compares two C strings for equality, returning -1, 0, and 1 if the first string
 is less than, equal to, or greater than the second, respectively.
@@ -344,9 +288,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
 static int
-cstring_compare(SHIM_INTERP, ARGIN(const char *a), ARGIN(const char *b))
+hash_compare_cstring(SHIM_INTERP, ARGIN(const char *a), ARGIN(const char *b))
 {
-    ASSERT_ARGS(cstring_compare)
+    ASSERT_ARGS(hash_compare_cstring)
     return strcmp(a, b);
 }
 
@@ -372,7 +316,7 @@
 
 /*
 
-=item C<int PMC_compare(PARROT_INTERP, PMC *a, PMC *b)>
+=item C<int hash_compare_pmc(PARROT_INTERP, PMC *a, PMC *b)>
 
 Compares two PMC for equality, returning 0 if the first is equal to second.
 Uses void pointers to store the PMC, sadly.
@@ -384,9 +328,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
 int
-PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
+hash_compare_pmc(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
 {
-    ASSERT_ARGS(PMC_compare)
+    ASSERT_ARGS(hash_compare_pmc)
 
     /* If pointers are same - PMCs are same */
     if (a == b)
@@ -420,7 +364,7 @@
 
 /*
 
-=item C<int int_compare(PARROT_INTERP, const void *a, const void *b)>
+=item C<int hash_compare_int(PARROT_INTERP, const void *a, const void *b)>
 
 Compares two integers for equality, returning -1, 0, and 1 if the first is less
 than, equal to, or greater than the second, respectively.  Uses void pointers
@@ -433,9 +377,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CONST_FUNCTION
 int
-int_compare(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
+hash_compare_int(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
 {
-    ASSERT_ARGS(int_compare)
+    ASSERT_ARGS(hash_compare_int)
     return a != b;
 }
 
@@ -512,22 +456,9 @@
 parrot_mark_hash_keys(PARROT_INTERP, ARGIN(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash_keys)
-    const UINTVAL entries = hash->entries;
-    UINTVAL found = 0;
-    UINTVAL i;
-
-    HashBucket *bucket = hash->buckets;
-
-    for (i= 0; i <= hash->mask; ++i, ++bucket) {
-        if (bucket->key){
-
-            PARROT_ASSERT(bucket->key);
-            Parrot_gc_mark_PObj_alive(interp, (PObj *)bucket->key);
-
-            if (++found >= entries)
-                break;
-        }
-    }
+    parrot_hash_iterate(hash,
+        PARROT_ASSERT(_bucket->key);
+        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->key););
 }
 
 
@@ -545,24 +476,12 @@
 parrot_mark_hash_values(PARROT_INTERP, ARGIN(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash_values)
-    const UINTVAL entries = hash->entries;
-    UINTVAL found = 0;
-    UINTVAL i;
-
-    HashBucket *bucket = hash->buckets;
-
-    for (i= 0; i <= hash->mask; ++i, ++bucket) {
-        if (bucket->key){
-
-            PARROT_ASSERT(bucket->value);
-            Parrot_gc_mark_PObj_alive(interp, (PObj *)bucket->value);
-
-            if (++found >= entries)
-                break;
-        }
-    }
+    parrot_hash_iterate(hash,
+        PARROT_ASSERT(_bucket->value);
+        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->value););
 }
 
+
 /*
 
 =item C<static void parrot_mark_hash_both(PARROT_INTERP, Hash *hash)>
@@ -577,29 +496,16 @@
 parrot_mark_hash_both(PARROT_INTERP, ARGIN(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash_both)
-    const UINTVAL entries = hash->entries;
-    UINTVAL found = 0;
-    UINTVAL i;
-
-    HashBucket *bucket = hash->buckets;
-
-    for (i= 0; i <= hash->mask; ++i, ++bucket) {
-        if (bucket->key){
-            PARROT_ASSERT(bucket->key);
-            Parrot_gc_mark_PObj_alive(interp, (PObj *)bucket->key);
-
-            PARROT_ASSERT(bucket->value);
-            Parrot_gc_mark_PObj_alive(interp, (PObj *)bucket->value);
-
-            if (++found >= entries)
-                break;
-        }
-    }
+    parrot_hash_iterate(hash,
+        PARROT_ASSERT(_bucket->key);
+        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->key);
+        PARROT_ASSERT(_bucket->value);
+        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->value););
 }
 
 /*
 
-=item C<static void hash_thaw(PARROT_INTERP, Hash *hash, PMC *info)>
+=item C<Hash * Parrot_hash_thaw(PARROT_INTERP, PMC *info)>
 
 Visits the contents of a hash during freeze/thaw.
 
@@ -609,18 +515,46 @@
 
 */
 
-static void
-hash_thaw(PARROT_INTERP, ARGMOD(Hash *hash), ARGMOD(PMC *info))
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_MALLOC
+Hash *
+Parrot_hash_thaw(PARROT_INTERP, ARGMOD(PMC *info))
 {
-    ASSERT_ARGS(hash_thaw)
+    ASSERT_ARGS(Parrot_hash_thaw)
+
+    const size_t            num_entries = VTABLE_shift_integer(interp, info);
+    const Hash_key_type     key_type    = (Hash_key_type)VTABLE_shift_integer(interp, info);
+    const PARROT_DATA_TYPE  entry_type  = (PARROT_DATA_TYPE)VTABLE_shift_integer(interp, info);
+    size_t                  entry_index;
+    Hash                   *hash;
+
+    {
+        hash_comp_fn     cmp_fn;
+        hash_hash_key_fn key_fn;
+
+        switch (key_type) {
+            case Hash_key_type_int:
+                key_fn = (hash_hash_key_fn)key_hash_int;
+                cmp_fn = (hash_comp_fn)hash_compare_int;
+                break;
+            case Hash_key_type_STRING:
+                key_fn = (hash_hash_key_fn)key_hash_STRING;
+                cmp_fn = (hash_comp_fn)hash_compare_string;
+                break;
+            case Hash_key_type_PMC:
+                key_fn = (hash_hash_key_fn)key_hash_PMC;
+                cmp_fn = (hash_comp_fn)hash_compare_pmc;
+                break;
+            default:
+                Parrot_ex_throw_from_c_args(interp, NULL, 1,
+                        "unimplemented key type");
+                break;
+        }
 
-    /* during thaw, info->extra is the key/value count */
-    const size_t           num_entries = (size_t) hash->entries;
-    const Hash_key_type    key_type    = hash->key_type;
-    const PARROT_DATA_TYPE entry_type  = hash->entry_type;
-    size_t                 entry_index;
+        hash = parrot_create_hash_sized(interp, entry_type, key_type, cmp_fn, key_fn, num_entries);
 
-    hash->entries = 0;
+    }
 
     /* special case for great speed */
     if (key_type   == Hash_key_type_STRING
@@ -631,7 +565,7 @@
             parrot_hash_put(interp, hash, (void *)key, (void *)i);
         }
 
-        return;
+        return hash;
     }
 
     for (entry_index = 0; entry_index < num_entries; ++entry_index) {
@@ -687,101 +621,68 @@
             break;
         }
     }
+
+    return hash;
 }
 
 
 /*
 
-=item C<static void hash_freeze(PARROT_INTERP, const Hash *hash, PMC *info)>
+=item C<void Parrot_hash_freeze(PARROT_INTERP, const Hash *hash, PMC *info)>
 
 Freezes hash into a string.
 
 Takes an interpreter, a pointer to the hash, and a pointer to the structure
 containing the string start location.
 
-Use by parrot_hash_visit.
-
 =cut
 
 */
 
-static void
-hash_freeze(PARROT_INTERP, ARGIN(const Hash *hash), ARGMOD(PMC *info))
+void
+Parrot_hash_freeze(PARROT_INTERP, ARGIN(const Hash *hash), ARGMOD(PMC *info))
 {
-    ASSERT_ARGS(hash_freeze)
+    ASSERT_ARGS(Parrot_hash_freeze)
     const Hash_key_type    key_type   = hash->key_type;
     const PARROT_DATA_TYPE entry_type = hash->entry_type;
     const size_t           entries    = hash->entries;
     size_t                 i;
 
-    for (i = 0; i < entries; ++i) {
-        HashBucket * const b = hash->buckets + i;
+    VTABLE_push_integer(interp, info, entries);
+    VTABLE_push_integer(interp, info, key_type);
+    VTABLE_push_integer(interp, info, entry_type);
 
+    parrot_hash_iterate(hash,
         switch (key_type) {
           case Hash_key_type_int:
-            VTABLE_push_integer(interp, info, (INTVAL)b->key);
+            VTABLE_push_integer(interp, info, (INTVAL)_bucket->key);
             break;
           case Hash_key_type_STRING:
-            VTABLE_push_string(interp, info, (STRING *)b->key);
+            VTABLE_push_string(interp, info, (STRING *)_bucket->key);
             break;
           case Hash_key_type_PMC:
-            VTABLE_push_pmc(interp, info, (PMC *)b->key);
+            VTABLE_push_pmc(interp, info, (PMC *)_bucket->key);
             break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented key type");
             break;
         }
-
         switch (entry_type) {
           case enum_hash_int:
-            VTABLE_push_integer(interp, info, (INTVAL)b->value);
+            VTABLE_push_integer(interp, info, (INTVAL)_bucket->value);
             break;
           case enum_hash_string:
-            VTABLE_push_string(interp, info, (STRING *)b->value);
+            VTABLE_push_string(interp, info, (STRING *)_bucket->value);
             break;
           case enum_hash_pmc:
-            VTABLE_push_pmc(interp, info, (PMC *)b->value);
+            VTABLE_push_pmc(interp, info, (PMC *)_bucket->value);
             break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented value type");
             break;
-        }
-    }
-}
-
-
-/*
-
-=item C<void parrot_hash_visit(PARROT_INTERP, Hash *hash, void *pinfo)>
-
-Freezes or thaws a hash as specified.  Takes an interpreter, a pointer to the
-hash, and a pointer to the structure identifying what to do and the location of
-the string.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-parrot_hash_visit(PARROT_INTERP, ARGMOD(Hash *hash), ARGMOD(void *pinfo))
-{
-    ASSERT_ARGS(parrot_hash_visit)
-    PMC* const info = (PMC*) pinfo;
-
-    switch (VTABLE_get_integer(interp, info)) {
-      case VISIT_THAW_NORMAL:
-        hash_thaw(interp, hash, info);
-        break;
-      case VISIT_FREEZE_NORMAL:
-        hash_freeze(interp, hash, info);
-        break;
-      default:
-        Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                "unimplemented visit mode");
-    }
+        });
 }
 
 
@@ -828,8 +729,12 @@
     const UINTVAL old_size   = hash->mask + 1;
     const UINTVAL new_size   = old_size << 1; /* Double. Right-shift is 2x */
     const UINTVAL old_nb     = N_BUCKETS(old_size);
+    const UINTVAL new_nb     = N_BUCKETS(new_size);
     size_t        offset, i;
 
+    const hash_hash_key_fn hash_val_func = hash->hash_val;
+    const int              is_string_key = (hash_val_func == (hash_hash_key_fn)key_hash_STRING);
+
     /*
        allocate some less buckets
        e.g. 3 buckets, 4 pointers:
@@ -838,7 +743,7 @@
          | --> buckets |     |
          +---+---+---+-+-+-+-+
          ^             ^
-         | old_mem     | hash->bucket_indices
+         | old_mem     | hash->index
     */
 
     /* resize mem */
@@ -859,12 +764,12 @@
          |  buckets  | old_bi    |  new_bi       |
          +---+---+---+---+---+---+-+-+-+-+-+-+-+-+
          ^                       ^
-         | new_mem               | hash->bucket_indices
+         | new_mem               | hash->index
     */
 
     bs     = new_mem;
     old_bi = (HashBucket **)(bs + old_nb);
-    new_bi = (HashBucket **)(bs + N_BUCKETS(new_size));
+    new_bi = (HashBucket **)(bs + new_nb);
 
     /* things can have moved by this offset */
     offset = (char *)new_mem - (char *)old_mem;
@@ -873,57 +778,55 @@
     mem_sys_memmove(new_bi, old_bi, old_size * sizeof (HashBucket *));
 
     /* update hash data */
-    hash->bucket_indices = new_bi;
+    hash->index = new_bi;
     hash->buckets        = bs;
     hash->mask = new_size - 1;
 
     /* clear freshly allocated bucket index */
-    memset(new_bi + old_size, 0, sizeof (HashBucket *) * old_size);
+    memset(new_bi + old_size, 0, sizeof (HashBucket *) * (new_size - old_size));
 
-    /*
-     * reloc pointers - this part would be also needed, if we
-     * allocate hash memory from GC movable memory, and then
-     * also the free_list needs updating (this is empty now,
-     * as expand_hash is only called for that case).
-     */
-    if (offset) {
-        size_t j;
-        for (j = 0; j < old_size; ++j) {
-            HashBucket **next_p = new_bi + j;
-            while (*next_p) {
-                *next_p = (HashBucket *)((char *)*next_p + offset);
-                b       = *next_p;
-                next_p  = &b->next;
-            }
-        }
-    }
-
-    /* recalc bucket index */
+    /* reloc pointers and recalc bucket indices */
     for (i = 0; i < old_size; ++i) {
         HashBucket **next_p = new_bi + i;
 
-        while ((b = *next_p) != NULL) {
+        while (*next_p != NULL) {
+            size_t new_loc;
+            size_t hashval;
+
+            b = (HashBucket *)((char *)*next_p + offset);
+
             /* rehash the bucket */
-            const size_t new_loc =
-                get_hash_val(interp, hash, b->key) & (new_size - 1);
+            if (is_string_key) {
+                STRING *s = (STRING *)b->key;
+                hashval   = s->hashval;
+            }
+            else {
+                hashval = hash_val_func(interp, b->key, hash->seed);
+            }
+
+            new_loc = hashval & (new_size - 1);
 
             if (i != new_loc) {
                 *next_p         = b->next;
                 b->next         = new_bi[new_loc];
                 new_bi[new_loc] = b;
             }
-            else
-                next_p = &b->next;
+            else {
+                *next_p = b;
+                next_p  = &b->next;
+            }
         }
     }
 
-    /* add new buckets to free_list in reverse order
+    /* add new buckets to free_list
      * lowest bucket is top on free list and will be used first */
-    for (i = 0, b = (HashBucket *)new_bi - 1; i < old_nb; ++i, --b) {
-        b->next         = hash->free_list;
-        b->key          = b->value         = NULL;
-        hash->free_list = b;
+    for (b = bs + old_nb; b < bs + new_nb - 1; ++b) {
+        b->next = b + 1;
+        b->key  = b->value = NULL;
     }
+
+    b->next = hash->free_list;
+    hash->free_list = bs + old_nb;
 }
 
 
@@ -946,7 +849,7 @@
     return parrot_create_hash(interp,
             enum_type_PMC,
             Hash_key_type_STRING,
-            STRING_compare,
+            hash_compare_string,
             (hash_hash_key_fn)key_hash_STRING);
 }
 
@@ -970,7 +873,7 @@
     return parrot_create_hash(interp,
             enum_type_PMC,
             Hash_key_type_cstring,
-            (hash_comp_fn)cstring_compare,
+            (hash_comp_fn)hash_compare_cstring,
             (hash_hash_key_fn)key_hash_cstring);
 }
 
@@ -994,7 +897,7 @@
     return parrot_create_hash(interp,
             enum_type_ptr,
             Hash_key_type_ptr,
-            pointer_compare,
+            hash_compare_pointer,
             key_hash_pointer);
 }
 
@@ -1021,7 +924,7 @@
     return parrot_create_hash(interp,
             enum_type_INTVAL,
             Hash_key_type_int,
-            int_compare,
+            hash_compare_int,
             key_hash_int);
 }
 
@@ -1046,20 +949,68 @@
         NOTNULL(hash_comp_fn compare), NOTNULL(hash_hash_key_fn keyhash))
 {
     ASSERT_ARGS(parrot_create_hash)
+    return parrot_create_hash_sized(interp, val_type, hkey_type, compare, keyhash,
+                                    INITIAL_SIZE);
+}
+
+
+/*
+
+=item C<static UINTVAL round_up_pow2(UINTVAL x)>
+
+Round a value up to the nearest power of 2.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static UINTVAL
+round_up_pow2(UINTVAL x) {
+    UINTVAL y = 1;
+    while (y < x)
+        y <<= 1;
+    return y;
+}
+
+
+/*
+
+=item C<Hash * parrot_create_hash_sized(PARROT_INTERP, PARROT_DATA_TYPE
+val_type, Hash_key_type hkey_type, hash_comp_fn compare, hash_hash_key_fn
+keyhash, UINTVAL size)>
+
+Creates and initializes a hash, similar to C<parrot_create_hash>.
+
+Preallocates at least C<size> buckets.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_MALLOC
+Hash *
+parrot_create_hash_sized(PARROT_INTERP, PARROT_DATA_TYPE val_type, Hash_key_type hkey_type,
+        NOTNULL(hash_comp_fn compare), NOTNULL(hash_hash_key_fn keyhash), UINTVAL size)
+{
+    ASSERT_ARGS(parrot_create_hash_sized)
+    UINTVAL      initial_buckets = size > INITIAL_SIZE ? round_up_pow2(size) : INITIAL_SIZE;
     HashBucket  *bp;
     void        *alloc = Parrot_gc_allocate_memory_chunk_with_interior_pointers(
-                            interp, sizeof (Hash) + HASH_ALLOC_SIZE(INITIAL_BUCKETS));
+                            interp, sizeof (Hash) + HASH_ALLOC_SIZE(initial_buckets));
     Hash * const hash  = (Hash*)alloc;
     size_t       i;
 
-    PARROT_ASSERT(INITIAL_BUCKETS % 4 == 0);
+    PARROT_ASSERT(initial_buckets % 4 == 0);
 
     hash->compare    = compare;
     hash->hash_val   = keyhash;
     hash->entry_type = val_type;
     hash->key_type   = hkey_type;
     hash->seed       = interp->hash_seed;
-    hash->mask       = INITIAL_BUCKETS - 1;
+    hash->mask       = initial_buckets - 1;
     hash->entries    = 0;
 
     bp = (HashBucket *)((char *)alloc + sizeof (Hash));
@@ -1070,10 +1021,10 @@
      * was deleted */
 
     hash->buckets = bp;
-    bp += N_BUCKETS(INITIAL_BUCKETS);
-    hash->bucket_indices = (HashBucket **)bp;
+    bp += N_BUCKETS(initial_buckets);
+    hash->index = (HashBucket **)bp;
 
-    for (i = 0, --bp; i < N_BUCKETS(INITIAL_BUCKETS); ++i, --bp) {
+    for (i = 0, --bp; i < N_BUCKETS(initial_buckets); ++i, --bp) {
         bp->next        = hash->free_list;
         hash->free_list = bp;
     }
@@ -1121,17 +1072,9 @@
 parrot_chash_destroy(PARROT_INTERP, ARGMOD(Hash *hash))
 {
     ASSERT_ARGS(parrot_chash_destroy)
-    UINTVAL i;
-
-    for (i = 0; i <= hash->mask; ++i) {
-        HashBucket *bucket = hash->bucket_indices[i];
-        while (bucket) {
-            mem_gc_free(interp, bucket->key);
-            mem_gc_free(interp, bucket->value);
-            bucket = bucket->next;
-        }
-    }
-
+    parrot_hash_iterate(hash,
+        mem_gc_free(interp, _bucket->key);
+        mem_gc_free(interp, _bucket->value););
     parrot_hash_destroy(interp, hash);
 }
 
@@ -1157,14 +1100,8 @@
     ASSERT_ARGS(parrot_chash_destroy_values)
     UINTVAL i;
 
-    for (i = 0; i <= hash->mask; ++i) {
-        HashBucket *bucket = hash->bucket_indices[i];
-        while (bucket) {
-            mem_gc_free(interp, bucket->key);
-            func(bucket->value);
-            bucket = bucket->next;
-        }
-    }
+    parrot_hash_iterate(hash,
+        mem_gc_free(interp, _bucket->key););
 
     parrot_hash_destroy(interp, hash);
 }
@@ -1194,72 +1131,6 @@
 
 /*
 
-=item C<void * parrot_hash_get_idx(PARROT_INTERP, const Hash *hash, PMC *key)>
-
-Finds the next index into the hash's internal storage for the given Key.  Used
-by iterators.  Ugly.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-void *
-parrot_hash_get_idx(PARROT_INTERP, ARGIN(const Hash *hash), ARGMOD(PMC *key))
-{
-    ASSERT_ARGS(parrot_hash_get_idx)
-    HashBucket       *b;
-    void             *res;
-    INTVAL            i  = VTABLE_get_integer(interp, key);
-    PMC              *fake_bi;
-    BucketIndex       bi;
-
-    /* idx directly in the bucket store, which is at negative
-     * address from the data pointer */
-    /* locate initial */
-    const INTVAL size = (INTVAL)N_BUCKETS(hash->mask + 1);
-
-    GETATTR_Key_next_key(interp, key, fake_bi);
-    bi = (BucketIndex)fake_bi;
-
-    if (bi == INITBucketIndex) {
-        i             = 0;
-        SETATTR_Key_next_key(interp, key, NULL);
-    }
-    else if (i >= size || i < 0) {
-        /* NOTE: These instances of SETATTR_Key_int_key can't be VTABLE
-         * functions because of the "special" way hash iterators work. */
-        SETATTR_Key_int_key(interp, key, -1);
-        return NULL;
-    }
-
-    res = NULL;
-
-    for (b = hash->buckets + i; i < size ; ++i, ++b) {
-        /* XXX int keys may be zero - use different iterator */
-        if (b->key) {
-            if (!res)
-                res = b->key;
-
-            /* found next key - FIXME hash iter does auto next */
-            else
-                break;
-        }
-    }
-
-    if (i >= size)
-        i = -1;
-
-    SETATTR_Key_int_key(interp, key, i);
-
-    return res;
-}
-
-
-/*
-
 =item C<HashBucket * parrot_hash_get_bucket(PARROT_INTERP, const Hash *hash,
 const void *key)>
 
@@ -1276,15 +1147,41 @@
 parrot_hash_get_bucket(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(const void *key))
 {
     ASSERT_ARGS(parrot_hash_get_bucket)
+    UINTVAL     hashval;
+    HashBucket *bucket;
+    const hash_hash_key_fn hash_val = hash->hash_val;
+    const hash_comp_fn     compare  = hash->compare;
 
     if (hash->entries <= 0)
         return NULL;
 
-    /* if the fast search didn't work, try the normal hashing search */
-    {
-        const UINTVAL hashval = get_hash_val(interp, hash, key);
-        HashBucket   *bucket  = hash->bucket_indices[hashval & hash->mask];
-        const hash_comp_fn compare = hash->compare;
+    if (hash_val == (hash_hash_key_fn)key_hash_STRING
+    &&  compare == hash_compare_string) {
+        /* fast path for string keys */
+        DECL_CONST_CAST;
+        STRING * const s = (STRING *)PARROT_const_cast(void *, key);
+
+        if (s->hashval)
+            hashval = s->hashval;
+        else
+            hashval = Parrot_str_to_hashval(interp, s);
+
+        bucket = hash->index[hashval & hash->mask];
+
+        while (bucket) {
+            const STRING *s2 = (const STRING *)bucket->key;
+
+            if (s == s2
+            || (hashval == s2->hashval
+            &&  CHARSET_COMPARE(interp, s, s2) == 0))
+                return bucket;
+
+            bucket = bucket->next;
+        }
+    }
+    else {
+        hashval = hash_val(interp, key, hash->seed);
+        bucket  = hash->index[hashval & hash->mask];
 
         while (bucket) {
             /* key equality is always a match, so it's worth checking */
@@ -1364,16 +1261,45 @@
         ARGIN_NULLOK(void *key), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(parrot_hash_put)
-    const UINTVAL hashval = get_hash_val(interp, hash, key);
-    HashBucket   *bucket  = hash->bucket_indices[hashval & hash->mask];
-    const hash_comp_fn compare = hash->compare;
-
-    /* See if we have an existing value for this key */
-    while (bucket) {
-        /* store hash_val or not */
-        if ((compare)(interp, key, bucket->key) == 0)
-            break;
-        bucket = bucket->next;
+    UINTVAL     hashval;
+    HashBucket *bucket;
+    const hash_hash_key_fn hash_val = hash->hash_val;
+    const hash_comp_fn     compare  = hash->compare;
+
+    if (hash_val == (hash_hash_key_fn)key_hash_STRING
+    &&  compare == hash_compare_string) {
+        /* fast path for string keys */
+        STRING *s = (STRING *)key;
+
+        if (s->hashval)
+            hashval = s->hashval;
+        else
+            hashval = Parrot_str_to_hashval(interp, s);
+
+        bucket = hash->index[hashval & hash->mask];
+
+        while (bucket) {
+            const STRING *s2 = (const STRING *)bucket->key;
+
+            if (s == s2
+            || (hashval == s2->hashval
+            &&  CHARSET_COMPARE(interp, s, s2) == 0))
+                break;
+
+            bucket = bucket->next;
+        }
+    }
+    else {
+        hashval = hash_val(interp, key, hash->seed);
+        bucket  = hash->index[hashval & hash->mask];
+
+        /* See if we have an existing value for this key */
+        while (bucket) {
+            /* store hash_val or not */
+            if (compare(interp, key, bucket->key) == 0)
+                break;
+            bucket = bucket->next;
+        }
     }
 
     /* If we have a bucket already, put the value in it. Otherwise, we need
@@ -1394,8 +1320,8 @@
         hash->free_list                = bucket->next;
         bucket->key                    = key;
         bucket->value                  = value;
-        bucket->next = hash->bucket_indices[hashval & hash->mask];
-        hash->bucket_indices[hashval & hash->mask] = bucket;
+        bucket->next = hash->index[hashval & hash->mask];
+        hash->index[hashval & hash->mask] = bucket;
     }
 
     return bucket;
@@ -1418,7 +1344,7 @@
 {
     ASSERT_ARGS(parrot_hash_delete)
     const UINTVAL hashval = (hash->hash_val)(interp, key, hash->seed) & hash->mask;
-    HashBucket   **prev   = &hash->bucket_indices[hashval];
+    HashBucket   **prev   = &hash->index[hashval];
     if (*prev) {
         const hash_comp_fn compare = hash->compare;
         for (; *prev; prev = &(*prev)->next) {
@@ -1472,33 +1398,30 @@
     ARGOUT(Hash *dest), int deep)
 {
     ASSERT_ARGS(parrot_hash_clone_prunable)
-    UINTVAL entries = hash->entries;
-    UINTVAL i;
 
-    for (i = 0; i < entries; ++i) {
+    parrot_hash_iterate(hash,
         void         *valtmp;
-        HashBucket   *b   = hash->buckets + i;
-        void * const  key = b->key;
+        void * const  key = _bucket->key;
 
         switch (hash->entry_type) {
           case enum_type_undef:
           case enum_type_ptr:
           case enum_type_INTVAL:
-            valtmp = (void *)b->value;
+            valtmp = (void *)_bucket->value;
             break;
 
           case enum_type_STRING:
-            valtmp = b->value;
+            valtmp = _bucket->value;
             break;
 
           case enum_type_PMC:
-            if (PMC_IS_NULL((PMC *)b->value))
+            if (PMC_IS_NULL((PMC *)_bucket->value))
                 valtmp = (void *)PMCNULL;
             else
                 if (deep)
-                    valtmp = (void *)VTABLE_clone(interp, (PMC*)b->value);
+                    valtmp = (void *)VTABLE_clone(interp, (PMC*)_bucket->value);
                 else
-                    valtmp = b->value;
+                    valtmp = _bucket->value;
             break;
 
           default:
@@ -1506,15 +1429,13 @@
             Parrot_ex_throw_from_c_args(interp, NULL, -1,
                     "hash corruption: type = %d\n", hash->entry_type);
         };
-
         if (key)
-            parrot_hash_put(interp, dest, key, valtmp);
-    }
+            parrot_hash_put(interp, dest, key, valtmp););
 }
 
 /*
 
-=item C<PMC* get_integer_pmc(PARROT_INTERP, INTVAL value)>
+=item C<static PMC* get_integer_pmc(PARROT_INTERP, INTVAL value)>
 
 Lookup the PMC type which is used for storing native integers.
 
@@ -1523,7 +1444,7 @@
 */
 
 PARROT_CANNOT_RETURN_NULL
-PMC*
+static PMC*
 get_integer_pmc(PARROT_INTERP, INTVAL value)
 {
     ASSERT_ARGS(get_integer_pmc)
@@ -1535,7 +1456,7 @@
 
 /*
 
-=item C<PMC* get_number_pmc(PARROT_INTERP, FLOATVAL value)>
+=item C<static PMC* get_number_pmc(PARROT_INTERP, FLOATVAL value)>
 
 Lookup the PMC type which is used for floating point numbers.
 
@@ -1544,7 +1465,7 @@
 */
 
 PARROT_CANNOT_RETURN_NULL
-PMC*
+static PMC*
 get_number_pmc(PARROT_INTERP, FLOATVAL value)
 {
     ASSERT_ARGS(get_number_pmc)
@@ -1555,7 +1476,7 @@
 
 /*
 
-=item C<PMC * get_string_pmc(PARROT_INTERP, STRING *value)>
+=item C<static PMC * get_string_pmc(PARROT_INTERP, STRING *value)>
 
 Lookup the PMC type which is used for storing strings.
 
@@ -1564,7 +1485,7 @@
 */
 
 PARROT_CANNOT_RETURN_NULL
-PMC *
+static PMC *
 get_string_pmc(PARROT_INTERP, ARGIN(STRING *value))
 {
     ASSERT_ARGS(get_string_pmc)

Modified: branches/unshared_buffers/src/io/socket_api.c
==============================================================================
--- branches/unshared_buffers/src/io/socket_api.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/io/socket_api.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -107,6 +107,7 @@
 
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 INTVAL

Modified: branches/unshared_buffers/src/io/utf8.c
==============================================================================
--- branches/unshared_buffers/src/io/utf8.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/io/utf8.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -57,7 +57,7 @@
     s->encoding = Parrot_utf8_encoding_ptr;
 
     /* count chars, verify utf8 */
-    Parrot_utf8_encoding_ptr->iter_init(interp, s, &iter);
+    STRING_ITER_INIT(interp, &iter);
 
     while (iter.bytepos < s->bufused) {
         if (iter.bytepos + 4 > s->bufused) {
@@ -84,8 +84,6 @@
 
                 s->strlen    = iter.charpos;
                 s            = Parrot_str_concat(interp, s, s2);
-                /* String is updated. Poke into iterator to replace old string */
-                iter.str     = s;
                 *buf         = s;
                 len         += len2 + 1;
 
@@ -93,7 +91,7 @@
             }
         }
 ok:
-        iter.get_and_advance(interp, &iter);
+        Parrot_utf8_encoding_ptr->iter_get_and_advance(interp, *buf, &iter);
     }
     s->strlen = iter.charpos;
     return len;

Modified: branches/unshared_buffers/src/ops/core_ops.c
==============================================================================
--- branches/unshared_buffers/src/ops/core_ops.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/ops/core_ops.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -26104,7 +26104,7 @@
   PARROT_FUNCTION_CORE,                       /* core_type = PARROT_XX_CORE */
   0,                                /* flags */
   2,    /* major_version */
-  6,    /* minor_version */
+  7,    /* minor_version */
   0,    /* patch_version */
   1083,             /* op_count */
   core_op_info_table,       /* op_info_table */
@@ -26231,7 +26231,7 @@
     hop_buckets = NULL;
 }
 op_lib_t *
-Parrot_DynOp_core_2_6_0(PARROT_INTERP, long init) {
+Parrot_DynOp_core_2_7_0(PARROT_INTERP, long init) {
     /* initialize and return op_lib ptr */
     if (init == 1) {
 
@@ -26260,7 +26260,7 @@
 
 {
     PMC *const lib = Parrot_pmc_new(interp, enum_class_ParrotLibrary);
-    ((Parrot_ParrotLibrary_attributes*)PMC_data(lib))->oplib_init = (void *) Parrot_DynOp_core_2_6_0;
+    ((Parrot_ParrotLibrary_attributes*)PMC_data(lib))->oplib_init = (void *) Parrot_DynOp_core_2_7_0;
     dynop_register(interp, lib);
     return lib;
 }

Modified: branches/unshared_buffers/src/ops/set.ops
==============================================================================
--- branches/unshared_buffers/src/ops/set.ops	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/ops/set.ops	Sun Aug 29 17:09:11 2010	(r48719)
@@ -40,6 +40,9 @@
 
 =item B<set>(out INT, in NUM)
 
+A floating-point number is truncated (rounded toward zero) when assigned
+to an integer register.
+
 =item B<set>(out INT, invar PMC)
 
 =item B<set>(out INT, invar PMC)

Modified: branches/unshared_buffers/src/ops/var.ops
==============================================================================
--- branches/unshared_buffers/src/ops/var.ops	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/ops/var.ops	Sun Aug 29 17:09:11 2010	(r48719)
@@ -455,9 +455,10 @@
 
 =item B<find_name>(out PMC, in STR)
 
-Find the name $2 in lexical, current, global, or builtin namespace and
-store it in $1. If the name doesn't exist
-either throws an exception or sets $1 to PMCNULL, depending on current
+Find the name C<$2> in lexicals, then the current namespace, then the HLL
+root namespace, and finally Parrot builtins. These are checked in order
+and the first match is returned in C<$1>. If no matches are found,
+either throws an exception or sets C<$1> to PMCNULL, depending on current
 errors settings. See B<errorson>.
 
 =cut

Modified: branches/unshared_buffers/src/packfile.c
==============================================================================
--- branches/unshared_buffers/src/packfile.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/packfile.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -2632,15 +2632,28 @@
         mem_gc_free(interp, byte_code->op_func_table);
     if (byte_code->op_info_table)
         mem_gc_free(interp, byte_code->op_info_table);
-    if (byte_code->op_mapping.libs)
+    if (byte_code->op_mapping.libs) {
+        opcode_t n_libs = byte_code->op_mapping.n_libs;
+        opcode_t i;
+
+        for (i = 0; i < n_libs; i++) {
+            mem_gc_free(interp, byte_code->op_mapping.libs[i].table_ops);
+            mem_gc_free(interp, byte_code->op_mapping.libs[i].lib_ops);
+        }
+
         mem_gc_free(interp, byte_code->op_mapping.libs);
+    }
 
-    byte_code->fixups          = NULL;
+    if (byte_code->annotations)
+        PackFile_Annotations_destroy(interp, (PackFile_Segment *)byte_code->annotations);
+
+    byte_code->annotations     = NULL;
     byte_code->const_table     = NULL;
     byte_code->debugs          = NULL;
-    byte_code->op_mapping.libs = NULL;
+    byte_code->fixups          = NULL;
     byte_code->op_func_table   = NULL;
     byte_code->op_info_table   = NULL;
+    byte_code->op_mapping.libs = NULL;
 }
 
 
@@ -3471,22 +3484,11 @@
     if (!hash)
         return;
 
-    for (i = 0; i <= hash->mask; ++i) {
-        HashBucket *bucket = hash->bucket_indices[i];
-
-        while (bucket) {
-            PackFile_ConstTable * const table      =
-                (PackFile_ConstTable *)bucket->key;
-            PackFile_Constant * const orig_consts = table->constants;
-            PackFile_Constant * const consts      =
-                (PackFile_Constant *) bucket->value;
-            INTVAL j;
-
-            mem_gc_free(interp, consts);
-            bucket = bucket->next;
-        }
-    }
-
+    parrot_hash_iterate(hash,
+        PackFile_ConstTable * const table     = (PackFile_ConstTable *)_bucket->key;
+        PackFile_Constant * const orig_consts = table->constants;
+        PackFile_Constant * const consts      = (PackFile_Constant *) _bucket->value;
+        mem_gc_free(interp, consts););
     parrot_hash_destroy(interp, hash);
 }
 
@@ -4310,6 +4312,10 @@
     /* Free any entries. */
     if (self->entries)
         mem_gc_free(interp, self->entries);
+
+    self->keys    = NULL;
+    self->groups  = NULL;
+    self->entries = NULL;
 }
 
 
@@ -4452,6 +4458,7 @@
     self->num_entries = PF_fetch_opcode(seg->pf, &cursor);
     self->entries     = mem_gc_allocate_n_zeroed_typed(interp,
             self->num_entries, PackFile_Annotations_Entry);
+
     for (i = 0; i < self->num_entries; ++i) {
         PackFile_Annotations_Entry * const entry = self->entries + i;
         entry->bytecode_offset = PF_fetch_opcode(seg->pf, &cursor);
@@ -4648,11 +4655,11 @@
 
     /* Add annotations entry. */
     if (self->entries)
-            self->entries = mem_gc_realloc_n_typed(interp, self->entries,
-                    1 + self->num_entries, PackFile_Annotations_Entry);
-        else
-            self->entries = mem_gc_allocate_n_typed(interp,
-                    1 + self->num_entries, PackFile_Annotations_Entry);
+        self->entries = mem_gc_realloc_n_typed(interp, self->entries,
+                1 + self->num_entries, PackFile_Annotations_Entry);
+    else
+        self->entries = mem_gc_allocate_n_typed(interp,
+                1 + self->num_entries, PackFile_Annotations_Entry);
 
     self->entries[self->num_entries].bytecode_offset = offset;
     self->entries[self->num_entries].key             = key_id;

Copied: branches/unshared_buffers/src/packfile/byteorder.h (from r48712, trunk/src/packfile/byteorder.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/src/packfile/byteorder.h	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/src/packfile/byteorder.h)
@@ -0,0 +1,572 @@
+/*
+Copyright (C) 2001-2009, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/byteorder.c - Byteordering functions
+
+=head1 DESCRIPTION
+
+These are assigned to a vtable when the PBC file is loaded.
+
+If the vtable function for conversion from the native byteorder is called,
+it is a I<no op> and will work, but the caller should know if the
+byteorder in the PBC file is native and skip the conversion and just map
+it in.
+
+=head2 Byte order handlers
+
+Configure will have checked for supported word sizes.
+
+=over 4
+
+=cut
+
+*/
+
+#ifndef PARROT_BYTEORDER_H_GUARD
+#define PARROT_BYTEORDER_H_GUARD
+
+#include "parrot/parrot.h"
+
+/* HEADERIZER HFILE: none */
+
+/*
+
+=item C<static INTVAL fetch_iv_le(INTVAL w)>
+
+This function converts a 4 or 8 byte C<INTVAL> into little endian
+format. If the native format is already little endian, then no
+conversion is done.
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static INTVAL
+fetch_iv_le(INTVAL w)
+{
+#if !PARROT_BIGENDIAN
+    return w;
+#else
+#  if INTVAL_SIZE == 4
+    return (w << 24) | ((w & 0xff00) << 8) | ((w & 0xff0000) >> 8) | (w >> 24);
+#  else
+#    if INTVAL_SIZE == 8
+    INTVAL r;
+
+    r = w << 56;
+    r |= (w & 0xff00) << 40;
+    r |= (w & 0xff0000) << 24;
+    r |= (w & 0xff000000) << 8;
+    r |= (w & 0xff00000000) >> 8;
+    r |= (w & 0xff0000000000) >> 24;
+    r |= (w & 0xff000000000000) >> 40;
+    r |= (w & 0xff00000000000000) >> 56;
+    return r;
+#    else
+    exit_fatal(1, "Unsupported INTVAL_SIZE=%d\n",
+               INTVAL_SIZE);
+#    endif
+#  endif
+#endif
+}
+
+/*
+
+=item C<static INTVAL fetch_iv_be(INTVAL w)>
+
+This function converts a 4 or 8 byte C<INTVAL> into big endian format.
+If the native format is already big endian, then no conversion is done.
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static INTVAL
+fetch_iv_be(INTVAL w)
+{
+#if PARROT_BIGENDIAN
+    return w;
+#else
+#  if INTVAL_SIZE == 4
+    return (w << 24) | ((w & 0xff00) << 8) | ((w & 0xff0000) >> 8) | (w >> 24);
+#  else
+#    if INTVAL_SIZE == 8
+    INTVAL r;
+    r = w << 56;
+    r |= (w & 0xff00) << 40;
+    r |= (w & 0xff0000) << 24;
+    r |= (w & 0xff000000) << 8;
+    r |= (w & 0xff00000000) >> 8;
+    r |= (w & 0xff0000000000) >> 24;
+    r |= (w & 0xff000000000000) >> 40;
+    r |= (w & 0xff00000000000000) >> 56;
+    return r;
+#    else
+    exit_fatal(1, "Unsupported INTVAL_SIZE=%d\n",
+               INTVAL_SIZE);
+#    endif
+#  endif
+#endif
+}
+
+/*
+
+=item C<static opcode_t fetch_op_be(opcode_t w)>
+
+Same as C<fetch_iv_be> for opcode_t
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static opcode_t
+fetch_op_be(opcode_t w)
+{
+#if PARROT_BIGENDIAN
+    return w;
+#else
+#  if OPCODE_T_SIZE == 4
+    return (w << 24) | ((w & 0x0000ff00) << 8) | ((w & 0x00ff0000) >> 8) |
+        ((w & 0xff000000) >> 24);
+#  else
+    opcode_t r;
+
+    r = w << 56;
+    r |= (w & 0xff00) << 40;
+    r |= (w & 0xff0000) << 24;
+    r |= (w & 0xff000000) << 8;
+    r |= (w & 0xff00000000) >> 8;
+    r |= (w & 0xff0000000000) >> 24;
+    r |= (w & 0xff000000000000) >> 40;
+    r |= (w & 0xff00000000000000) >> 56;
+    return r;
+#  endif
+#endif
+}
+
+/*
+
+=item C<static opcode_t fetch_op_le(opcode_t w)>
+
+Same as C<fetch_iv_le> for opcode_t
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static opcode_t
+fetch_op_le(opcode_t w)
+{
+#if !PARROT_BIGENDIAN
+    return w;
+#else
+#  if OPCODE_T_SIZE == 4
+    return (w << 24) | ((w & 0x0000ff00) << 8) | ((w & 0x00ff0000) >> 8) |
+        ((w & 0xff000000) >> 24);
+#  else
+    opcode_t r;
+
+    r = w << 56;
+    r |= (w & 0xff00) << 40;
+    r |= (w & 0xff0000) << 24;
+    r |= (w & 0xff000000) << 8;
+    r |= (w & 0xff00000000) >> 8;
+    r |= (w & 0xff0000000000) >> 24;
+    r |= (w & 0xff000000000000) >> 40;
+    r |= (w & 0xff00000000000000) >> 56;
+    return r;
+#  endif
+#endif
+}
+
+/*
+
+=pod
+
+Unrolled routines for swapping various sizes from 32-128 bits. These
+should only be used if alignment is unknown or we are pulling something
+out of a padded buffer.
+
+=cut
+
+*/
+
+/*
+
+=item C<static void fetch_buf_be_4(unsigned char *rb, const unsigned char *b)>
+
+Converts a 4-byte big-endian buffer C<b> into a little-endian C<rb>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_4(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 4);
+#else
+    rb[0] = b[3];
+    rb[1] = b[2];
+    rb[2] = b[1];
+    rb[3] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_4(unsigned char *rb, const unsigned char *b)>
+
+Converts a 4-byte little-endian buffer C<b> into a big-endian buffer C<rb>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_4(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 4);
+#else
+    rb[0] = b[3];
+    rb[1] = b[2];
+    rb[2] = b[1];
+    rb[3] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_be_8(unsigned char *rb, const unsigned char *b)>
+
+Converts an 8-byte big-endian buffer C<b> into a little-endian buffer C<rb>
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_8(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 8);
+#else
+    rb[0] = b[7];
+    rb[1] = b[6];
+    rb[2] = b[5];
+    rb[3] = b[4];
+    rb[4] = b[3];
+    rb[5] = b[2];
+    rb[6] = b[1];
+    rb[7] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_8(unsigned char *rb, const unsigned char *b)>
+
+Converts an 8-byte little-endian buffer C<b> into a big-endian buffer C<rb>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_8(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 8);
+#else
+    rb[0] = b[7];
+    rb[1] = b[6];
+    rb[2] = b[5];
+    rb[3] = b[4];
+    rb[4] = b[3];
+    rb[5] = b[2];
+    rb[6] = b[1];
+    rb[7] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_12(unsigned char *rb, const unsigned char *b)>
+
+Converts a 12-byte little-endian buffer C<b> into a big-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_12(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 12);
+#else
+    rb[0] = b[11];
+    rb[1] = b[10];
+    rb[2] = b[9];
+    rb[3] = b[8];
+    rb[4] = b[7];
+    rb[5] = b[6];
+    rb[6] = b[5];
+    rb[7] = b[4];
+    rb[8] = b[3];
+    rb[9] = b[2];
+    rb[10] = b[1];
+    rb[11] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_be_12(unsigned char *rb, const unsigned char *b)>
+
+Converts a 12-byte big-endian buffer C<b> into a little-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_12(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 12);
+#else
+    rb[0] = b[11];
+    rb[1] = b[10];
+    rb[2] = b[9];
+    rb[3] = b[8];
+    rb[4] = b[7];
+    rb[5] = b[6];
+    rb[6] = b[5];
+    rb[7] = b[4];
+    rb[8] = b[3];
+    rb[9] = b[2];
+    rb[10] = b[1];
+    rb[11] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_16(unsigned char *rb, const unsigned char *b)>
+
+Converts a 16-byte little-endian buffer C<b> into a big-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_16(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 16);
+#else
+    rb[0] = b[15];
+    rb[1] = b[14];
+    rb[2] = b[13];
+    rb[3] = b[12];
+    rb[4] = b[11];
+    rb[5] = b[10];
+    rb[6] = b[9];
+    rb[7] = b[8];
+    rb[8] = b[7];
+    rb[9] = b[6];
+    rb[10] = b[5];
+    rb[11] = b[4];
+    rb[12] = b[3];
+    rb[13] = b[2];
+    rb[14] = b[1];
+    rb[15] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_be_16(unsigned char *rb, const unsigned char *b)>
+
+Converts a 16-byte big-endian buffer C<b> into a little-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_16(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 16);
+#else
+    rb[0] = b[15];
+    rb[1] = b[14];
+    rb[2] = b[13];
+    rb[3] = b[12];
+    rb[4] = b[11];
+    rb[5] = b[10];
+    rb[6] = b[9];
+    rb[7] = b[8];
+    rb[8] = b[7];
+    rb[9] = b[6];
+    rb[10] = b[5];
+    rb[11] = b[4];
+    rb[12] = b[3];
+    rb[13] = b[2];
+    rb[14] = b[1];
+    rb[15] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_32(unsigned char *rb, const unsigned char *b)>
+
+Converts a 32-byte little-endian buffer C<b> into a big-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_32(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 32);
+#else
+    rb[0] = b[31];
+    rb[1] = b[30];
+    rb[2] = b[29];
+    rb[3] = b[28];
+    rb[4] = b[27];
+    rb[5] = b[26];
+    rb[6] = b[25];
+    rb[7] = b[24];
+    rb[8] = b[23];
+    rb[9] = b[22];
+    rb[10] = b[21];
+    rb[11] = b[20];
+    rb[12] = b[19];
+    rb[13] = b[18];
+    rb[14] = b[17];
+    rb[15] = b[16];
+    rb[16] = b[15];
+    rb[17] = b[14];
+    rb[18] = b[13];
+    rb[19] = b[12];
+    rb[20] = b[11];
+    rb[21] = b[10];
+    rb[22] = b[9];
+    rb[23] = b[8];
+    rb[24] = b[7];
+    rb[25] = b[6];
+    rb[26] = b[5];
+    rb[27] = b[4];
+    rb[28] = b[3];
+    rb[29] = b[2];
+    rb[30] = b[1];
+    rb[31] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_be_32(unsigned char *rb, const unsigned char *b)>
+
+Converts a 32-byte big-endian buffer C<b> into a little-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_32(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 32);
+#else
+    rb[0] = b[31];
+    rb[1] = b[30];
+    rb[2] = b[29];
+    rb[3] = b[28];
+    rb[4] = b[27];
+    rb[5] = b[26];
+    rb[6] = b[25];
+    rb[7] = b[24];
+    rb[8] = b[23];
+    rb[9] = b[22];
+    rb[10] = b[21];
+    rb[11] = b[20];
+    rb[12] = b[19];
+    rb[13] = b[18];
+    rb[14] = b[17];
+    rb[15] = b[16];
+    rb[16] = b[15];
+    rb[17] = b[14];
+    rb[18] = b[13];
+    rb[19] = b[12];
+    rb[20] = b[11];
+    rb[21] = b[10];
+    rb[22] = b[9];
+    rb[23] = b[8];
+    rb[24] = b[7];
+    rb[25] = b[6];
+    rb[26] = b[5];
+    rb[27] = b[4];
+    rb[28] = b[3];
+    rb[29] = b[2];
+    rb[30] = b[1];
+    rb[31] = b[0];
+#endif
+}
+
+#endif /* PARROT_BYTEORDER_H_GUARD */
+
+/*
+
+=back
+
+=head1 HISTORY
+
+Initial version by Melvin on 2002/05/01
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/unshared_buffers/src/packfile/pf_items.c
==============================================================================
--- branches/unshared_buffers/src/packfile/pf_items.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/packfile/pf_items.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -33,6 +33,7 @@
 */
 
 #include "parrot/parrot.h"
+#include "byteorder.h"
 
 /* HEADERIZER HFILE: include/parrot/packfile.h */
 
@@ -892,16 +893,14 @@
         unsigned char buf[4];
         opcode_t o;
     } u;
-#if PARROT_BIGENDIAN
     fetch_buf_le_4(u.buf, b);
+#if PARROT_BIGENDIAN
 #  if OPCODE_T_SIZE == 8
     return (Parrot_Int4)(u.o >> 32);
 #  else
     return (opcode_t) fetch_iv_be((INTVAL)u.o);
 #  endif
 #else
-    /* inlining the effects of the fetch_buf_le_4() call is worth it */
-    memcpy(u.buf, b, 4);
 #  if OPCODE_T_SIZE == 8
     /* without the cast we would not get a negative int, the vtable indices */
     return (Parrot_Int4)(u.o & 0xffffffff);

Modified: branches/unshared_buffers/src/packout.c
==============================================================================
--- branches/unshared_buffers/src/packout.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/packout.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -346,7 +346,6 @@
     ASSERT_ARGS(PackFile_Constant_pack)
     PMC *key;
     size_t i;
-    STRING *image;
 
     *cursor++ = self->type;
 

Modified: branches/unshared_buffers/src/pmc.c
==============================================================================
--- branches/unshared_buffers/src/pmc.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -127,7 +127,7 @@
 
 #ifndef NDEBUG
 
-    pmc->vtable      = (VTABLE  *)0xdeadbeef;
+    pmc->data = (DPOINTER *)0xdeadbeef;
 
 #endif
 

Modified: branches/unshared_buffers/src/pmc/addrregistry.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/addrregistry.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/addrregistry.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -47,7 +47,7 @@
         Hash  *registry = parrot_create_hash(INTERP,
                 enum_type_int,
                 Hash_key_type_PMC,
-                int_compare,
+                hash_compare_int,
                 key_hash_int);
 
         SET_ATTR_hash(INTERP, SELF, registry);

Modified: branches/unshared_buffers/src/pmc/bigint.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/bigint.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/bigint.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -699,7 +699,6 @@
 =item C<static void bigint_sub_bigint_int(PARROT_INTERP, PMC *self, INTVAL
 value, PMC *dest)>
 
-
 =cut
 
 */
@@ -1259,6 +1258,12 @@
         PObj_custom_destroy_SET(SELF);
     }
 
+    VTABLE void init_int(INTVAL iv) {
+        bigint_init(INTERP, SELF);
+        bigint_set_long(INTERP, SELF, (long)iv);
+        PObj_custom_destroy_SET(SELF);
+    }
+
     VTABLE PMC *clone() {
         PMC *res = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
         bigint_set(INTERP, res, SELF);

Modified: branches/unshared_buffers/src/pmc/callcontext.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/callcontext.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/callcontext.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -157,8 +157,6 @@
 =item C<static void ensure_positionals_storage(PARROT_INTERP, PMC *self, INTVAL
 size)>
 
-
-
 =cut
 
 */
@@ -182,8 +180,6 @@
 =item C<static void ensure_positionals_storage_ap(PARROT_INTERP, PMC *self,
 INTVAL size, INTVAL allocated_positionals)>
 
-
-
 =cut
 
 */
@@ -212,7 +208,7 @@
         GETATTR_CallContext_num_positionals(interp, self, num_positionals);
         memcpy(new_array, array, num_positionals * sizeof (Pcc_cell));
 
-        if (num_positionals > 8)
+        if (allocated_positionals > 8)
             Parrot_gc_free_memory_chunk(interp, array);
         else
             Parrot_gc_free_fixed_size_storage(interp,
@@ -227,8 +223,6 @@
 
 =item C<static Pcc_cell* get_cell_at(PARROT_INTERP, PMC *self, INTVAL key)>
 
-
-
 =cut
 
 */
@@ -248,8 +242,6 @@
 
 =item C<static INTVAL autobox_intval(PARROT_INTERP, const Pcc_cell *cell)>
 
-
-
 =cut
 
 */
@@ -281,8 +273,6 @@
 
 =item C<static FLOATVAL autobox_floatval(PARROT_INTERP, const Pcc_cell *cell)>
 
-
-
 =cut
 
 */
@@ -314,8 +304,6 @@
 
 =item C<static STRING * autobox_string(PARROT_INTERP, const Pcc_cell *cell)>
 
-
-
 =cut
 
 */
@@ -348,8 +336,6 @@
 
 =item C<static PMC * autobox_pmc(PARROT_INTERP, Pcc_cell *cell, INTVAL type)>
 
-
-
 =cut
 
 */
@@ -388,8 +374,6 @@
 
 =item C<static Hash * get_hash(PARROT_INTERP, PMC *SELF)>
 
-
-
 =cut
 
 */
@@ -407,7 +391,7 @@
         hash = parrot_create_hash(interp,
             enum_type_ptr,
             Hash_key_type_STRING,
-            STRING_compare,
+            hash_compare_string,
             (hash_hash_key_fn)key_hash_STRING);
 
         SETATTR_CallContext_hash(interp, SELF, hash);
@@ -420,8 +404,6 @@
 
 =item C<static void mark_cell(PARROT_INTERP, Pcc_cell *c)>
 
-
-
 =cut
 
 */
@@ -451,8 +433,6 @@
 
 =item C<static void mark_positionals(PARROT_INTERP, PMC *self)>
 
-
-
 =cut
 
 */
@@ -479,8 +459,6 @@
 
 =item C<static void mark_hash(PARROT_INTERP, Hash *h)>
 
-
-
 =cut
 
 */
@@ -490,25 +468,15 @@
 mark_hash(PARROT_INTERP, ARGIN(Hash *h))
 {
     ASSERT_ARGS(mark_hash)
-    INTVAL  i;
-
-    for (i = h->mask; i >= 0; --i) {
-        HashBucket *b = h->bucket_indices[i];
-
-        while (b) {
-            Parrot_gc_mark_STRING_alive(interp, (STRING *)b->key);
-            mark_cell(interp, (Pcc_cell *)b->value);
-            b = b->next;
-        }
-    }
+    parrot_hash_iterate(h,
+        Parrot_gc_mark_STRING_alive(interp, (STRING *)_bucket->key);
+        mark_cell(interp, (Pcc_cell *)_bucket->value););
 }
 
 /*
 
 =item C<static PMC * get_named_names(PARROT_INTERP, PMC *SELF)>
 
-
-
 =cut
 
 */
@@ -524,19 +492,10 @@
 
     /* yes, this *looks* risky, but it's a Parrot STRING hash internally */
     if (hash && hash->entries) {
-        UINTVAL i, j = 0;
+        UINTVAL j = 0;
         PMC *result = Parrot_pmc_new_init_int(interp, enum_class_FixedStringArray, hash->entries);
-
-        for (i = 0; i <= hash->mask; ++i) {
-            HashBucket *b = hash->bucket_indices[i];
-
-            while (b) {
-                VTABLE_set_string_keyed_int(interp, result,
-                    j++, (STRING *)b->key);
-                b = b->next;
-            }
-        }
-
+        parrot_hash_iterate(hash,
+            VTABLE_set_string_keyed_int(interp, result, j++, (STRING *)_bucket->key););
         return result;
     }
 
@@ -726,17 +685,8 @@
         GET_ATTR_hash(INTERP, SELF, hash);
 
         if (hash) {
-            UINTVAL i;
-
-            for (i = 0; i <= hash->mask; ++i) {
-                HashBucket *b = hash->bucket_indices[i];
-
-                while (b) {
-                    FREE_CELL(INTERP, (Pcc_cell *)b->value);
-                    b = b->next;
-                }
-            }
-
+            parrot_hash_iterate(hash,
+               FREE_CELL(INTERP, (Pcc_cell *)_bucket->value););
             parrot_hash_destroy(INTERP, hash);
             SET_ATTR_hash(INTERP, SELF, NULL);
         }
@@ -764,17 +714,8 @@
         }
 
         if (hash) {
-            UINTVAL i;
-
-            for (i = 0; i <= hash->mask; ++i) {
-                HashBucket *b = hash->bucket_indices[i];
-
-                while (b) {
-                    FREE_CELL(INTERP, (Pcc_cell *)b->value);
-                    b = b->next;
-                }
-            }
-
+            parrot_hash_iterate(hash,
+                FREE_CELL(INTERP, (Pcc_cell *)_bucket->value););
             parrot_hash_destroy(INTERP, hash);
         }
 
@@ -1048,14 +989,14 @@
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "handlers")))
             GET_ATTR_handlers(INTERP, SELF, value);
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "current_HLL"))) {
-            /* This function from src/hash.c. */
-            /* We probably have to move it to more suitable place */
             GET_ATTR_current_HLL(INTERP, SELF, hll);
-            value = get_integer_pmc(INTERP, hll);
+            value = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, value, hll);
         }
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "current_hll"))) {
             GET_ATTR_current_HLL(INTERP, SELF, hll);
-            value = get_string_pmc(INTERP, Parrot_get_HLL_name(INTERP, hll));
+            value = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
+            VTABLE_set_string_native(interp, value, Parrot_get_HLL_name(INTERP, hll));
         }
         else
             Parrot_ex_throw_from_c_args(INTERP, NULL,

Modified: branches/unshared_buffers/src/pmc/capture.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/capture.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/capture.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -731,6 +731,8 @@
             GET_ATTR_hash(INTERP, capture, hash);
             SET_ATTR_array(INTERP, SELF, array);
             SET_ATTR_hash(INTERP, SELF, hash);
+            if (!PMC_IS_NULL(array) || !PMC_IS_NULL(hash))
+                PObj_custom_mark_SET(SELF);
         }
         else
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,

Modified: branches/unshared_buffers/src/pmc/class.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/class.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/class.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -151,10 +151,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static int pointer_compare(SHIM_INTERP,
-    ARGIN_NULLOK(const void *a),
-    ARGIN_NULLOK(const void *b));
-
 #define ASSERT_ARGS_build_attrib_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self))
@@ -183,35 +179,14 @@
 #define ASSERT_ARGS_make_class_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(SELF))
-#define ASSERT_ARGS_pointer_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
 /*
 
-=item C<static int pointer_compare(PARROT_INTERP, const void *a, const void *b)>
-
-
-
-=cut
-
-*/
-
-static int
-pointer_compare(SHIM_INTERP, ARGIN_NULLOK(const void *a),
-    ARGIN_NULLOK(const void *b))
-{
-    ASSERT_ARGS(pointer_compare)
-    return a != b;
-}
-
-/*
-
 =item C<static size_t key_hash_pointer(PARROT_INTERP, const void *value, size_t
 seed)>
 
-
-
 =cut
 
 */
@@ -228,8 +203,6 @@
 =item C<static int cache_class_attribs(PARROT_INTERP, PMC *cur_class, PMC
 *attrib_index, PMC *cache, int cur_index)>
 
-
-
 =cut
 
 */
@@ -489,8 +462,6 @@
 =item C<static void initialize_parents(PARROT_INTERP, PMC *object, PMC
 *all_parents)>
 
-
-
 =cut
 
 */
@@ -529,8 +500,6 @@
 =item C<static void initialize_parents_pmc(PARROT_INTERP, PMC *object, PMC
 *all_parents, PMC *init)>
 
-
-
 =cut
 
 */
@@ -699,7 +668,7 @@
                 (Parrot_Class_attributes *) PMC_data(SELF);
 
         /* Set flag for custom GC mark. */
-        PObj_custom_mark_SET(SELF);
+        PObj_custom_mark_destroy_SETALL(SELF);
 
         /* Set up the object. */
         _class->name            = CONST_STRING(INTERP, "");
@@ -718,7 +687,7 @@
         _class->parent_overrides = Parrot_pmc_new(INTERP, enum_class_Hash);
         _class->isa_cache        = parrot_create_hash(INTERP,
             enum_type_INTVAL, Hash_key_type_PMC,
-            (hash_comp_fn)pointer_compare, (hash_hash_key_fn)key_hash_pointer);
+            (hash_comp_fn)hash_compare_pointer, (hash_hash_key_fn)key_hash_pointer);
 
         /* We put ourself on the all parents list. */
         VTABLE_push_pmc(INTERP, _class->all_parents, SELF);
@@ -1461,10 +1430,14 @@
         if (PMC_IS_NULL(lookup))
             return 0;
 
-        if (PObj_is_class_TEST(lookup) && lookup == SELF)
-            return 1;
-
-        classobj = Parrot_oo_get_class(INTERP, lookup);
+        if (PObj_is_class_TEST(lookup)) {
+            if (lookup == SELF)
+                return 1;
+            else
+                classobj = lookup;
+        }
+        else
+            classobj = Parrot_oo_get_class(INTERP, lookup);
 
         if (PMC_IS_NULL(classobj))
             return 0;

Modified: branches/unshared_buffers/src/pmc/eval.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/eval.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/eval.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -57,8 +57,6 @@
 =item C<static void clear_fixups(PARROT_INTERP, const Parrot_Sub_attributes
 *sub_data)>
 
-
-
 =cut
 
 */
@@ -95,8 +93,6 @@
 
 =item C<static PMC* get_sub(PARROT_INTERP, PMC *self, int idx)>
 
-
-
 =cut
 
 */
@@ -141,8 +137,6 @@
 
 =item C<static void mark_subs(PARROT_INTERP, PMC *self)>
 
-
-
 =cut
 
 */

Modified: branches/unshared_buffers/src/pmc/exception.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/exception.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/exception.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -166,6 +166,46 @@
 
 /*
 
+=item C<PMC *clone()>
+
+Create a copy of the Exception.
+
+Copy only the user supplied values, not the throwing and handling
+information.
+
+=cut
+
+*/
+
+    VTABLE PMC *clone() {
+        PMC * const dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        INTVAL   id;
+        STRING   *message;
+        PMC      *payload;
+        INTVAL   severity;
+        INTVAL   type;
+        INTVAL   exit_code;
+        GET_ATTR_id(INTERP, SELF, id);
+        SET_ATTR_id(INTERP, dest, id);
+        GET_ATTR_message(INTERP, SELF, message);
+        SET_ATTR_message(INTERP, dest, message);
+        GET_ATTR_severity(INTERP, SELF, severity);
+        SET_ATTR_severity(INTERP, dest, severity);
+        GET_ATTR_type(INTERP, SELF, type);
+        SET_ATTR_type(INTERP, dest, type);
+        GET_ATTR_exit_code(INTERP, SELF, exit_code);
+        SET_ATTR_exit_code(INTERP, dest, exit_code);
+
+        GET_ATTR_payload(INTERP, SELF, payload);
+        if (!PMC_IS_NULL(payload)) {
+            payload = VTABLE_clone(INTERP, payload);
+            SET_ATTR_payload(INTERP, dest, payload);
+        }
+        return dest;
+    }
+
+/*
+
 =item C<void mark()>
 
 Mark any active exception data as live.
@@ -261,7 +301,7 @@
 
 /*
 
-=item C<INTVAL get_integer_keyed(PMC *key)>
+=item C<INTVAL get_integer_keyed_str(STRING *key)>
 
 Returns the integer value for C<*key>.
 
@@ -269,11 +309,9 @@
 
 */
 
-    VTABLE INTVAL get_integer_keyed(PMC *key) {
-        STRING * const name = VTABLE_get_string(INTERP, key);
-        INTVAL  result = 0;
-
-        switch (getAttrEnum(INTERP, name)) {
+    VTABLE INTVAL get_integer_keyed_str(STRING *key) {
+        INTVAL result = 0;
+        switch (getAttrEnum(INTERP, key)) {
           case attr_type:
             GET_ATTR_type(INTERP, SELF, result);
             break;
@@ -289,7 +327,7 @@
           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);
+                "No such integer attribute '%S'", key);
         }
 
         return result;
@@ -297,7 +335,7 @@
 
 /*
 
-=item C<INTVAL get_integer_keyed_str(STRING *key)>
+=item C<INTVAL get_integer_keyed(PMC *key)>
 
 Returns the integer value for C<*key>.
 
@@ -305,28 +343,9 @@
 
 */
 
-    VTABLE INTVAL get_integer_keyed_str(STRING *key) {
-        INTVAL result = 0;
-        switch (getAttrEnum(INTERP, key)) {
-          case attr_type:
-            GET_ATTR_type(INTERP, SELF, result);
-            break;
-          case attr_severity:
-            GET_ATTR_severity(INTERP, SELF, result);
-            break;
-          case attr_exit_code:
-            GET_ATTR_exit_code(INTERP, SELF, result);
-            break;
-          case attr_handled:
-            GET_ATTR_handled(INTERP, SELF, result);
-            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);
-        }
-
-        return result;
+    VTABLE INTVAL get_integer_keyed(PMC *key) {
+        STRING * const name = VTABLE_get_string(INTERP, key);
+        return SELF.get_integer_keyed_str(name);
     }
 
 /*
@@ -414,7 +433,7 @@
 
 /*
 
-=item C<void set_integer_keyed(PMC *key, INTVAL value)>
+=item C<void set_integer_keyed_str(STRING *key, INTVAL value) >
 
 Sets the integer value for C<*key>.
 
@@ -422,9 +441,8 @@
 
 */
 
-    VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
-        STRING * const name = VTABLE_get_string(INTERP, key);
-        switch (getAttrEnum(INTERP, name)) {
+    VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
+        switch (getAttrEnum(INTERP, key)) {
           case attr_type:
             SET_ATTR_type(INTERP, SELF, value);
             break;
@@ -440,13 +458,13 @@
           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);
+                "No such integer attribute '%S'", key);
         }
     }
 
 /*
 
-=item C<void set_integer_keyed_str(STRING *key, INTVAL value) >
+=item C<void set_integer_keyed(PMC *key, INTVAL value)>
 
 Sets the integer value for C<*key>.
 
@@ -454,25 +472,9 @@
 
 */
 
-    VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
-        switch (getAttrEnum(INTERP, key)) {
-          case attr_type:
-            SET_ATTR_type(INTERP, SELF, value);
-            break;
-          case attr_severity:
-            SET_ATTR_severity(INTERP, SELF, value);
-            break;
-          case attr_exit_code:
-            SET_ATTR_exit_code(INTERP, SELF, value);
-            break;
-          case attr_handled:
-            SET_ATTR_handled(INTERP, SELF, value);
-            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);
-        }
+    VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
+        STRING * const name = VTABLE_get_string(INTERP, key);
+        SELF.set_integer_keyed_str(name, value);
     }
 
 /*

Modified: branches/unshared_buffers/src/pmc/filehandle.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/filehandle.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/filehandle.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -438,46 +438,67 @@
 */
 
     METHOD readall(STRING *name :optional, INTVAL got_name :opt_flag) {
-        STRING *result;
+        PMC    *filehandle;
+        STRING *result      = STRINGNULL;
+        size_t  size        = 0;
 
         if (got_name) {
             /* called as class method - open, slurp, close file */
-            PMC    *filehandle;
             STRING *encoding;
-            size_t  size;
-
-            GET_ATTR_encoding(INTERP, SELF, encoding);
 
             if (!Parrot_io_is_closed_filehandle(INTERP, SELF))
                 Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
                     "Cannot readall on a new file from an already open filehandle");
 
-            filehandle  = Parrot_io_open(INTERP, PMCNULL, name, NULL);
+            GET_ATTR_encoding(INTERP, SELF, encoding);
 
+            filehandle  = Parrot_io_open(INTERP, PMCNULL, name, NULL);
             PARROT_ASSERT(filehandle->vtable->base_type == enum_class_FileHandle);
 
             SET_ATTR_encoding(INTERP, filehandle, encoding);
             size = (size_t)(Parrot_stat_info_intval(INTERP, name, STAT_FILESIZE));
-
-            result = Parrot_io_reads(INTERP, filehandle, size);
-            Parrot_io_close(INTERP, filehandle);
         }
         else {
-            /* slurp open file */
+            /* Just get size of already opened file */
+            STRING *filename;
+            Parrot_runloop   jump_point;
+
             if (Parrot_io_is_closed_filehandle(INTERP, SELF))
                 Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
                     "Cannot readall without a file name or open filehandle");
 
-            /* Do line buffering on the filehandle */
-            if (!(PARROT_FILEHANDLE(SELF)->flags & PIO_F_LINEBUF))
-                Parrot_io_setlinebuf(INTERP, SELF);
+            GET_ATTR_filename(INTERP, SELF, filename);
 
-            result = STRINGNULL;
-            do {
-                STRING * const part = Parrot_io_reads(INTERP, SELF, 0);
-                result = STRING_IS_NULL(result) ? part :
+            /* stat_info ca throw exception. Switch to chunked loading */
+            if (setjmp(jump_point.resume)) {
+                /* caught exception */
+                Parrot_cx_delete_handler_local(interp,
+                    Parrot_str_new_constant(interp, "exception"));
+
+                /* Do line buffering on the filehandle */
+                if (!(PARROT_FILEHANDLE(SELF)->flags & PIO_F_LINEBUF))
+                    Parrot_io_setlinebuf(INTERP, SELF);
+
+                do {
+                    STRING * const part = Parrot_io_reads(INTERP, SELF, 0);
+                    result = STRING_IS_NULL(result) ? part :
                         Parrot_str_concat(INTERP, result, part);
-            } while (!Parrot_io_eof(INTERP, SELF));
+                } while (!Parrot_io_eof(INTERP, SELF));
+            }
+            else {
+                /* run normally */
+                Parrot_ex_add_c_handler(interp, &jump_point);
+
+                size = (size_t)(Parrot_stat_info_intval(INTERP, filename, STAT_FILESIZE));
+                filehandle = SELF;
+            }
+        }
+
+        if (size)
+            result = Parrot_io_reads(INTERP, filehandle, size);
+
+        if (got_name) {
+            Parrot_io_close(INTERP, filehandle);
         }
 
         RETURN(STRING *result);

Modified: branches/unshared_buffers/src/pmc/float.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/float.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/float.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -77,7 +77,8 @@
 
 =item C<INTVAL get_integer()>
 
-Returns an integer representation of the number (by casting).
+Returns an integer representation of the number by truncating
+(rounding toward zero).
 
 =cut
 
@@ -391,6 +392,10 @@
 
 =item C<METHOD PMC *cosh()>
 
+=item C<METHOD PMC *cot()>
+
+=item C<METHOD PMC *csc()>
+
 =item C<METHOD PMC *exp()>
 
 =item C<METHOD PMC *ln()>
@@ -425,13 +430,6 @@
         RETURN(PMC *d);
     }
 
-    METHOD cos() {
-        PMC * const d  = Parrot_pmc_new(INTERP,
-                Parrot_get_ctx_HLL_type(INTERP, enum_class_Float));
-        SET_ATTR_fv(INTERP, d, cos(SELF.get_number()));
-        RETURN(PMC *d);
-    }
-
     METHOD asec() {
         PMC * const d  = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
         SET_ATTR_fv(INTERP, d, acos(1.0 / SELF.get_number()));
@@ -456,12 +454,31 @@
         RETURN(PMC *d);
     }
 
+    METHOD cos() {
+        PMC * const d  = Parrot_pmc_new(INTERP,
+                Parrot_get_ctx_HLL_type(INTERP, enum_class_Float));
+        SET_ATTR_fv(INTERP, d, cos(SELF.get_number()));
+        RETURN(PMC *d);
+    }
+
     METHOD cosh() {
         PMC * const d  = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
         SET_ATTR_fv(INTERP, d, cosh(SELF.get_number()));
         RETURN(PMC *d);
     }
 
+    METHOD cot() {
+        PMC * const d  = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
+        SET_ATTR_fv(INTERP, d, 1.0 / tan(SELF.get_number()));
+        RETURN(PMC *d);
+    }
+
+    METHOD csc() {
+        PMC * const d  = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
+        SET_ATTR_fv(INTERP, d, 1.0 / sin(SELF.get_number()));
+        RETURN(PMC *d);
+    }
+
     METHOD exp() {
         PMC * const d  = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
         SET_ATTR_fv(INTERP, d, exp(SELF.get_number()));

Modified: branches/unshared_buffers/src/pmc/hash.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/hash.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/hash.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -50,8 +50,62 @@
 
 /* HEADERIZER HFILE: none */
 /* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC* get_next_hash(PARROT_INTERP,
+    ARGMOD(Hash *hash),
+    ARGIN(void *key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*hash);
+
+#define ASSERT_ARGS_get_next_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hash) \
+    , PARROT_ASSERT_ARG(key))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/*
+
+=item C<static PMC* get_next_hash(PARROT_INTERP, Hash *hash, void *key)>
+
+Get the next hash for multipart keys. Autovivify a hash if it doesn't exist.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC*
+get_next_hash(PARROT_INTERP, ARGMOD(Hash *hash), ARGIN(void *key))
+{
+    ASSERT_ARGS(get_next_hash)
+    PMC        *next_hash;
+    HashBucket *bucket;
+
+    if (hash->entry_type != enum_type_PMC)
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            "Hash entry type must be PMC for multipart keys.");
+
+    bucket = parrot_hash_get_bucket(interp, hash, key);
+
+    if (bucket) {
+        next_hash = (PMC *)bucket->value;
+    }
+    else {
+        /* autovivify a Hash */
+        next_hash = Parrot_pmc_new(interp, enum_class_Hash);
+        parrot_hash_put(interp, hash, key, next_hash);
+    }
+
+    return next_hash;
+}
+
 pmclass Hash provides hash auto_attrs {
     ATTR Hash *hash;
 
@@ -88,7 +142,7 @@
         attr->hash = parrot_create_hash(INTERP,
                 (PARROT_DATA_TYPE)value_type,
                 Hash_key_type_STRING,
-                STRING_compare,
+                hash_compare_string,
                 (hash_hash_key_fn)key_hash_STRING);
         PObj_custom_mark_destroy_SETALL(SELF);
     }
@@ -98,6 +152,7 @@
         if (hash)
             parrot_hash_destroy(INTERP, hash);
     }
+
 /*
 
 =item C<void mark()>
@@ -179,21 +234,21 @@
             new_hash = parrot_create_hash(INTERP,
                     entry_type,
                     Hash_key_type_STRING,
-                    STRING_compare,
+                    hash_compare_string,
                     (hash_hash_key_fn)key_hash_STRING);
         else if (type == Hash_key_type_int)
             /* new_int_hash set BOTH keys and values to INTVAL */
             new_hash = parrot_create_hash(INTERP,
                     entry_type,
                     Hash_key_type_int,
-                    int_compare,
+                    hash_compare_int,
                     key_hash_int);
         else if (type == Hash_key_type_PMC)
             /* new_int_hash set BOTH keys and values to INTVAL */
             new_hash = parrot_create_hash(INTERP,
                     entry_type,
                     Hash_key_type_PMC,
-                    (hash_comp_fn)PMC_compare,
+                    (hash_comp_fn)hash_compare_pmc,
                     (hash_hash_key_fn)key_hash_PMC);
         else
             /* We probably will not implement other types of keys. They are way
@@ -243,9 +298,9 @@
 
         /*
         If someone called Hash.set_pointer with NULL pointer...
-        It will create STRING* keys hash. Because we can't use STRING_compare
-        directly - it declared static in F<src/hash.c>
+        It will create STRING* keys hash.
         */
+
         if (old_hash && old_hash->entry_type == type)
             return;
 
@@ -256,7 +311,7 @@
             new_hash = parrot_create_hash(INTERP,
                         (PARROT_DATA_TYPE)type,
                         old_hash ? old_hash->key_type : Hash_key_type_STRING,
-                        old_hash ? old_hash->compare : STRING_compare,
+                        old_hash ? old_hash->compare  : hash_compare_string,
                         old_hash ? old_hash->hash_val : (hash_hash_key_fn)key_hash_STRING);
             break;
           default:
@@ -416,24 +471,25 @@
 
     /* Handling Keys */
     VTABLE INTVAL get_integer_keyed(PMC *key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
-        HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
-                hash_key_from_pmc(INTERP, hash, key));
-        PMC        *valpmc;
-        PMC        *nextkey;
+        const Hash * const hash     = (Hash *)SELF.get_pointer();
+        const void * const hash_key = hash_key_from_pmc(INTERP, hash, key);
+        HashBucket * const b        = parrot_hash_get_bucket(INTERP, hash, hash_key);
 
         if (!b)
             return 0;
 
-        nextkey = key_next(INTERP, key);
-        valpmc  = hash_value_to_pmc(INTERP, hash, b->value);
+        key = key_next(INTERP, key);
 
         /* Stop recursion. This is last step */
-        if (!nextkey)
-            return VTABLE_get_integer(INTERP, valpmc);
+        if (!key)
+            return hash_value_to_int(INTERP, hash, b->value);
 
-        /* Recusively call to enclosed aggregate */
-        return VTABLE_get_integer_keyed(INTERP, valpmc, nextkey);
+        if (hash->entry_type != enum_type_PMC)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+                "Hash entry type must be PMC for multipart keys.");
+
+        /* Recursively call to enclosed aggregate */
+        return VTABLE_get_integer_keyed(INTERP, (PMC *)b->value, key);
     }
 
 /*
@@ -445,11 +501,8 @@
 */
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
-        Hash   * const hash    = (Hash *)SELF.get_pointer();
-        void   * const keystr  = hash_key_from_pmc(INTERP, hash, key);
-        PMC    * const nextkey = key_next(INTERP, key);
-        PMC    *box;
-        HashBucket *b;
+        Hash * const hash     = (Hash *)SELF.get_pointer();
+        void * const hash_key = hash_key_from_pmc(INTERP, hash, key);
 
         if (PObj_constant_TEST(SELF)
         && !PObj_constant_TEST((PObj *)key))
@@ -457,23 +510,16 @@
                 EXCEPTION_INVALID_OPERATION,
                 "Used non-constant PMC key in constant hash.");
 
-        if (!nextkey) {
-            parrot_hash_put(INTERP, hash, keystr,
+        key = key_next(INTERP, key);
+
+        if (!key) {
+            parrot_hash_put(INTERP, hash, hash_key,
                     hash_value_from_int(INTERP, hash, value));
-            return;
         }
-
-        b = parrot_hash_get_bucket(INTERP, hash, keystr);
-        if (b)
-            box = hash_value_to_pmc(INTERP, hash, b->value);
         else {
-            /* autovivify an Hash */
-            box = Parrot_pmc_new(INTERP, SELF.type());
-            parrot_hash_put(INTERP, hash, keystr,
-                    hash_value_from_pmc(INTERP, hash, box));
+            PMC * const next_hash = get_next_hash(INTERP, hash, hash_key);
+            VTABLE_set_integer_keyed(INTERP, next_hash, key, value);
         }
-
-        VTABLE_set_integer_keyed(INTERP, box, nextkey, value);
     }
 
     VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value) {
@@ -547,22 +593,23 @@
 
     /* I can't migrate this function right now. Some problem with JITting */
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
-        PMC               *nextkey;
-        PMC               *valpmc;
-        const Hash * const hash   = (Hash *)SELF.get_pointer();
-        void       * const keystr = hash_key_from_pmc(INTERP, hash, key);
-        HashBucket * const b      = parrot_hash_get_bucket(INTERP, hash, keystr);
+        const Hash * const hash     = (Hash *)SELF.get_pointer();
+        void       * const hash_key = hash_key_from_pmc(INTERP, hash, key);
+        HashBucket * const b        = parrot_hash_get_bucket(INTERP, hash, hash_key);
 
         if (!b)
             return 0.0;
 
-        nextkey = key_next(INTERP, key);
-        valpmc  = hash_value_to_pmc(INTERP, hash, b->value);
+        key = key_next(INTERP, key);
 
-        if (!nextkey)
-            return VTABLE_get_number(INTERP, valpmc);
+        if (!key)
+            return hash_value_to_number(INTERP, hash, b->value);
 
-        return VTABLE_get_number_keyed(INTERP, valpmc, nextkey);
+        if (hash->entry_type != enum_type_PMC)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+                "Hash entry type must be PMC for multipart keys.");
+
+        return VTABLE_get_number_keyed(INTERP, (PMC *)b->value, key);
     }
 
 
@@ -609,24 +656,25 @@
 */
 
     VTABLE STRING *get_string_keyed(PMC *key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
-        HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
-                hash_key_from_pmc(INTERP, hash, key));
-        PMC        *valpmc;
-        PMC        *nextkey;
+        const Hash * const hash     = (Hash *)SELF.get_pointer();
+        const void * const hash_key = hash_key_from_pmc(INTERP, hash, key);
+        HashBucket * const b        = parrot_hash_get_bucket(INTERP, hash, hash_key);
 
         if (!b)
             return Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
 
-        nextkey = key_next(INTERP, key);
-        valpmc  = hash_value_to_pmc(INTERP, hash, b->value);
+        key = key_next(INTERP, key);
 
         /* Stop recursion. This is last step */
-        if (!nextkey)
-            return VTABLE_get_string(INTERP, valpmc);
+        if (!key)
+            return hash_value_to_string(INTERP, hash, b->value);
 
-        /* Recusively call to enclosed aggregate */
-        return VTABLE_get_string_keyed(INTERP, valpmc, nextkey);
+        if (hash->entry_type != enum_type_PMC)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+                "Hash entry type must be PMC for multipart keys.");
+
+        /* Recursively call to enclosed aggregate */
+        return VTABLE_get_string_keyed(INTERP, (PMC *)b->value, key);
     }
 
 /*
@@ -638,11 +686,8 @@
 */
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
-        Hash   * const hash    = (Hash *)SELF.get_pointer();
-        void   * const keystr  = hash_key_from_pmc(INTERP, hash, key);
-        PMC    * const nextkey = key_next(INTERP, key);
-        PMC    *box;
-        HashBucket *b;
+        Hash * const hash     = (Hash *)SELF.get_pointer();
+        void * const hash_key = hash_key_from_pmc(INTERP, hash, key);
 
         if (PObj_constant_TEST(SELF)){
             if (!PObj_constant_TEST((PObj *)key))
@@ -655,23 +700,16 @@
                     "Used non-constant STRING value in constant hash.");
         }
 
-        if (!nextkey) {
-            parrot_hash_put(INTERP, hash, keystr,
+        key = key_next(INTERP, key);
+
+        if (!key) {
+            parrot_hash_put(INTERP, hash, hash_key,
                     hash_value_from_string(INTERP, hash, value));
-            return;
         }
-
-        b = parrot_hash_get_bucket(INTERP, hash, keystr);
-        if (b)
-            box = hash_value_to_pmc(INTERP, hash, b->value);
         else {
-            /* autovivify an Hash */
-            box = Parrot_pmc_new(INTERP, SELF.type());
-            parrot_hash_put(INTERP, hash, keystr,
-                    hash_value_from_pmc(INTERP, hash, box));
+            PMC * const next_hash = get_next_hash(INTERP, hash, hash_key);
+            VTABLE_set_string_keyed(INTERP, next_hash, key, value);
         }
-
-        VTABLE_set_string_keyed(INTERP, box, nextkey, value);
     }
 
 /*
@@ -696,8 +734,7 @@
                     "Used non-constant STRING value in constant hash.");
         }
 
-        parrot_hash_put(INTERP, hash,
-                hash_key_from_string(INTERP, hash, key),
+        parrot_hash_put(INTERP, hash, hash_key_from_string(INTERP, hash, key),
                 hash_value_from_string(INTERP, hash, value));
     }
 
@@ -731,14 +768,13 @@
 
     VTABLE PMC *get_pmc_keyed_str(STRING *key) {
         const Hash *hash;
-        HashBucket *b = NULL;
+        HashBucket *b;
 
         GET_ATTR_hash(INTERP, SELF, hash);
 
         /* special case the most likely key type, for speed */
-        key = hash->key_type == Hash_key_type_STRING
-            ? key
-            : (STRING *)hash_key_from_string(INTERP, hash, key);
+        if (hash->key_type != Hash_key_type_STRING)
+            key = (STRING *)hash_key_from_string(INTERP, hash, key);
 
         b = parrot_hash_get_bucket(INTERP, hash, key);
 
@@ -765,24 +801,25 @@
 
     /* Compound Key */
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
-        HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
-                hash_key_from_pmc(INTERP, hash, key));
-        PMC        *valpmc;
-        PMC        *nextkey;
+        const Hash * const hash     = (Hash *)SELF.get_pointer();
+        const void * const hash_key = hash_key_from_pmc(INTERP, hash, key);
+        HashBucket * const b        = parrot_hash_get_bucket(INTERP, hash, hash_key);
 
         if (!b)
             return PMCNULL;
 
-        nextkey = key_next(INTERP, key);
-        valpmc  = hash_value_to_pmc(INTERP, hash, b->value);
+        key = key_next(INTERP, key);
 
         /* Stop recursion. This is last step */
-        if (!nextkey)
-            return valpmc;
+        if (!key)
+            return hash_value_to_pmc(INTERP, hash, b->value);
 
-        /* Recusively call to enclosed aggregate */
-        return VTABLE_get_pmc_keyed(INTERP, valpmc, nextkey);
+        if (hash->entry_type != enum_type_PMC)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+                "Hash entry type must be PMC for multipart keys.");
+
+        /* Recursively call to enclosed aggregate */
+        return VTABLE_get_pmc_keyed(INTERP, (PMC *)b->value, key);
     }
 
 /*
@@ -794,11 +831,8 @@
 */
 
     VTABLE void set_number_keyed(PMC *key, FLOATVAL value) {
-        Hash   * const hash    = (Hash *)SELF.get_pointer();
-        void   * const keystr  = hash_key_from_pmc(INTERP, hash, key);
-        PMC    * const nextkey = key_next(INTERP, key);
-        PMC    *box            = PMCNULL;
-        HashBucket *b;
+        Hash * const hash     = (Hash *)SELF.get_pointer();
+        void * const hash_key = hash_key_from_pmc(INTERP, hash, key);
 
         if (PObj_constant_TEST(SELF)
         && !PObj_constant_TEST((PObj *)key))
@@ -806,21 +840,16 @@
                 EXCEPTION_INVALID_OPERATION,
                 "Used non-constant PMC key in constant hash.");
 
-        if (!nextkey) {
-            PMC * const val = get_number_pmc(INTERP, value);
-            parrot_hash_put(INTERP, hash, keystr, hash_value_from_pmc(INTERP, hash, val));
-            return;
-        }
-
-        b = parrot_hash_get_bucket(INTERP, (Hash *)SELF.get_pointer(), keystr);
-        if (b)
-            box = hash_value_to_pmc(INTERP, hash, b->value);
-
-        /* autovivify an Hash */
-        if (PMC_IS_NULL(box))
-            box = Parrot_pmc_new(INTERP, SELF.type());
+        key = key_next(INTERP, key);
 
-        VTABLE_set_number_keyed(INTERP, box, nextkey, value);
+        if (!key) {
+            parrot_hash_put(INTERP, hash, hash_key,
+                    hash_value_from_number(INTERP, hash, value));
+        }
+        else {
+            PMC * const next_hash = get_next_hash(INTERP, hash, hash_key);
+            VTABLE_set_number_keyed(INTERP, next_hash, key, value);
+        }
     }
 
 /*
@@ -834,7 +863,7 @@
 */
 
     VTABLE void set_number_keyed_str(STRING *key, FLOATVAL value) {
-        PMC * const val  = get_number_pmc(INTERP, value);
+        Hash * const hash = (Hash *)SELF.get_pointer();
 
         if (PObj_constant_TEST(SELF)
         && !PObj_constant_TEST((PObj *)key))
@@ -842,7 +871,8 @@
                 EXCEPTION_INVALID_OPERATION,
                 "Used non-constant STRING key in constant hash.");
 
-        parrot_hash_put(INTERP, (Hash *)SELF.get_pointer(), key, val);
+        parrot_hash_put(INTERP, hash, hash_key_from_string(INTERP, hash, key),
+                hash_value_from_number(INTERP, hash, value));
     }
 
 /*
@@ -854,11 +884,8 @@
 */
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        Hash   * const hash    = (Hash *)SELF.get_pointer();
-        void   * const keystr  = hash_key_from_pmc(INTERP, hash, key);
-        PMC    * const nextkey = key_next(INTERP, key);
-        PMC    *box;
-        HashBucket *b;
+        Hash * const hash     = (Hash *)SELF.get_pointer();
+        void * const hash_key = hash_key_from_pmc(INTERP, hash, key);
 
         if (PObj_constant_TEST(SELF)) {
             if (!PObj_constant_TEST((PObj *)key))
@@ -872,23 +899,15 @@
                     "Used non-constant PMC value in constant hash.");
         }
 
-        if (!nextkey) {
-            parrot_hash_put(INTERP, hash, keystr, value);
-            return;
-        }
+        key = key_next(INTERP, key);
 
-        b = parrot_hash_get_bucket(INTERP, hash, keystr);
-        if (b)
-            box = hash_value_to_pmc(INTERP, hash, b->value);
+        if (!key) {
+            parrot_hash_put(INTERP, hash, hash_key, value);
+        }
         else {
-            /* autovivify an Hash */
-            box = Parrot_pmc_new(INTERP, SELF.type());
-            parrot_hash_put(INTERP, hash, keystr,
-                    hash_value_from_pmc(INTERP, hash, box));
+            PMC * const next_hash = get_next_hash(INTERP, hash, hash_key);
+            VTABLE_set_pmc_keyed(INTERP, next_hash, key, value);
         }
-
-
-        VTABLE_set_pmc_keyed(INTERP, box, nextkey, value);
     }
 
 /*
@@ -960,7 +979,12 @@
         if (!key)
             return 1;
 
-        return VTABLE_exists_keyed(INTERP, hash_value_to_pmc(INTERP, h, b->value), key);
+        if (h->entry_type != enum_type_PMC)
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Hash entry type must be PMC for multipart keys.");
+
+        return VTABLE_exists_keyed(INTERP, (PMC *)b->value, key);
     }
 
 /*
@@ -1006,9 +1030,13 @@
 
         if (!key)
             return VTABLE_defined(INTERP, hash_value_to_pmc(INTERP, h, b->value));
-        else
-            return VTABLE_defined_keyed(INTERP,
-                    hash_value_to_pmc(INTERP, h, b->value), key);
+
+        if (h->entry_type != enum_type_PMC)
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Hash entry type must be PMC for multipart keys.");
+
+        return VTABLE_defined_keyed(INTERP, (PMC *)b->value, key);
     }
 
 /*
@@ -1045,10 +1073,17 @@
 
         key = key_next(INTERP, key);
 
-        if (!key)
+        if (!key) {
             parrot_hash_delete(INTERP, h, sx);
-        else
-            VTABLE_delete_keyed(INTERP, (PMC *)b->value, key);
+            return;
+        }
+
+        if (h->entry_type != enum_type_PMC)
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Hash entry type must be PMC for multipart keys.");
+
+        VTABLE_delete_keyed(INTERP, (PMC *)b->value, key);
     }
 
 /*
@@ -1154,21 +1189,6 @@
 
 /*
 
-=item C<void visit(PMC *info)>
-
-Used during archiving to visit the elements in the hash.
-
-=cut
-
-*/
-
-    VTABLE void visit(PMC *info) {
-        parrot_hash_visit(INTERP, (Hash *)SELF.get_pointer(), info);
-        SUPER(info);
-    }
-
-/*
-
 =item C<void freeze(PMC *info)>
 
 Used to archive the hash.
@@ -1178,12 +1198,8 @@
 */
 
     VTABLE void freeze(PMC *info) {
-        Hash     * const hash = (Hash *)SELF.get_pointer();
-
         SUPER(info);
-        VTABLE_push_integer(INTERP, info, VTABLE_elements(INTERP, SELF));
-        VTABLE_push_integer(INTERP, info, (INTVAL)hash->key_type);
-        VTABLE_push_integer(INTERP, info, hash->entry_type);
+        Parrot_hash_freeze(INTERP, (Hash *)SELF.get_pointer(), info);
     }
 
 /*
@@ -1198,47 +1214,7 @@
 
     VTABLE void thaw(PMC *info) {
         SUPER(info);
-
-        {
-            const INTVAL elems  = VTABLE_shift_integer(INTERP, info);
-            const INTVAL k_type = VTABLE_shift_integer(INTERP, info);
-            const INTVAL v_type = VTABLE_shift_integer(INTERP, info);
-            Hash        *hash;
-
-            if (k_type != Hash_key_type_STRING || v_type != enum_hash_pmc) {
-                hash_comp_fn cmp_fn;
-                hash_hash_key_fn key_fn;
-
-                switch (k_type) {
-                  case Hash_key_type_int:
-                    key_fn = (hash_hash_key_fn)key_hash_int;
-                    cmp_fn = (hash_comp_fn)int_compare;
-                    break;
-                  case Hash_key_type_STRING:
-                    key_fn = (hash_hash_key_fn)key_hash_STRING;
-                    cmp_fn = (hash_comp_fn)STRING_compare;
-                    break;
-                  case Hash_key_type_PMC:
-                    key_fn = (hash_hash_key_fn)key_hash_PMC;
-                    cmp_fn = (hash_comp_fn)PMC_compare;
-                    break;
-                  default:
-                    Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
-                            "unimplemented key type");
-                    break;
-                }
-
-                SELF.set_pointer(parrot_create_hash(INTERP, (PARROT_DATA_TYPE)v_type,
-                                                    (Hash_key_type)k_type, cmp_fn, key_fn));
-            }
-
-            hash = (Hash *)SELF.get_pointer();
-
-            PARROT_ASSERT((INTVAL)hash->key_type == k_type);
-            PARROT_ASSERT(hash->entry_type       == v_type);
-
-            hash->entries   = elems;
-        }
+        SELF.set_pointer((void *)Parrot_hash_thaw(INTERP, info));
     }
 }
 

Modified: branches/unshared_buffers/src/pmc/hashiterator.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/hashiterator.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/hashiterator.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -78,24 +78,9 @@
 advance_to_next(PARROT_INTERP, ARGMOD(PMC *self))
 {
     ASSERT_ARGS(advance_to_next)
-
     Parrot_HashIterator_attributes * const attrs  = PARROT_HASHITERATOR(self);
-    HashBucket                            *bucket = attrs->bucket;
-
-    /* Try to advance current bucket */
-    if (bucket)
-        bucket = bucket->next;
-
-    while (!bucket) {
-        /* If there is no more buckets */
-        if (attrs->pos == attrs->total_buckets)
-            break;
-
-        bucket = attrs->parrot_hash->bucket_indices[attrs->pos++];
-    }
-    attrs->bucket = bucket;
+    parrot_hash_iterator_advance(attrs->parrot_hash, attrs->bucket, attrs->pos);
     --attrs->elements;
-
     return;
 }
 

Modified: branches/unshared_buffers/src/pmc/imageio.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/imageio.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/imageio.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -82,20 +82,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
-static void visit_todo_list_freeze(PARROT_INTERP,
-    ARGIN_NULLOK(PMC* pmc),
-    ARGMOD(PMC* info))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(* info);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PARROT_INLINE
-static PMC * visit_todo_list_thaw(PARROT_INTERP, ARGIN(PMC* info))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 #define ASSERT_ARGS_create_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(info))
@@ -114,12 +100,6 @@
 #define ASSERT_ARGS_SET_VISIT_CURSOR __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pmc) \
     , PARROT_ASSERT_ARG(cursor))
-#define ASSERT_ARGS_visit_todo_list_freeze __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(info))
-#define ASSERT_ARGS_visit_todo_list_thaw __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(info))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -127,8 +107,6 @@
 
 =item C<static opcode_t * GET_VISIT_CURSOR(const PMC *pmc)>
 
-
-
 =cut
 
 */
@@ -150,8 +128,6 @@
 
 =item C<static void SET_VISIT_CURSOR(PMC *pmc, const char *cursor)>
 
-
-
 =cut
 
 */
@@ -171,8 +147,6 @@
 
 =item C<static void INC_VISIT_CURSOR(PMC *pmc, UINTVAL inc)>
 
-
-
 =cut
 
 */
@@ -195,8 +169,6 @@
 
 =item C<static void create_buffer(PARROT_INTERP, PMC *pmc, PMC *info)>
 
-
-
 =cut
 
 */
@@ -270,8 +242,6 @@
 
 =item C<static INTVAL INFO_HAS_DATA(const PMC *io)>
 
-
-
 =cut
 
 */
@@ -290,8 +260,6 @@
 
 =item C<static PMC* id_list_get(PARROT_INTERP, const PMC *io, UINTVAL id)>
 
-
-
 =cut
 
 */
@@ -307,131 +275,6 @@
     return VTABLE_get_pmc_keyed_int(interp, PARROT_IMAGEIO(io)->todo, id - 1);
 }
 
-/*
-
-=item C<static PMC * visit_todo_list_thaw(PARROT_INTERP, PMC* info)>
-
-
-
-=cut
-
-*/
-
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PARROT_INLINE
-static PMC *
-visit_todo_list_thaw(PARROT_INTERP, ARGIN(PMC* info))
-{
-    ASSERT_ARGS(visit_todo_list_thaw)
-
-    const UINTVAL  n            = VTABLE_shift_integer(interp, info);
-    const INTVAL   id           = PackID_get_PMCID(n);
-    const int      packid_flags = PackID_get_FLAGS(n);
-    PMC           *pmc          = PMCNULL;
-
-    PARROT_ASSERT(PARROT_IMAGEIO(info)->what == VISIT_THAW_NORMAL);
-
-    switch (packid_flags) {
-      case enum_PackID_seen:
-        if (id) /* got a non-NULL PMC */
-            pmc = id_list_get(interp, info, id);
-        break;
-      case enum_PackID_normal:
-        {
-            PMC * const  todo = PARROT_IMAGEIO(info)->todo;
-            const INTVAL type = VTABLE_shift_integer(interp, info);
-
-            PARROT_ASSERT(id - 1
-                 == VTABLE_elements(interp, PARROT_IMAGEIO(info)->todo));
-
-            if (type <= 0 || type > interp->n_vtable_max)
-                Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                    "Unknown PMC type to thaw %d", type);
-
-            /* workaround to keep ParrotInterpreter PBC hack working */
-            if (type == enum_class_ParrotInterpreter)
-                PObj_flag_CLEAR(private1, info);
-
-            pmc = Parrot_pmc_new_noinit(interp, type);
-
-            VTABLE_set_pmc_keyed_int(interp, todo, id - 1, pmc);
-        }
-        break;
-      default:
-        Parrot_ex_throw_from_c_args(interp, NULL, 1,
-            "Unknown PMC id args thaw %d", packid_flags);
-        break;
-    }
-
-    return pmc;
-}
-
-/*
-
-=item C<static void visit_todo_list_freeze(PARROT_INTERP, PMC* pmc, PMC* info)>
-
-
-
-=cut
-
-*/
-
-
-static void
-visit_todo_list_freeze(PARROT_INTERP, ARGIN_NULLOK(PMC* pmc), ARGMOD(PMC* info))
-{
-    ASSERT_ARGS(visit_todo_list_freeze)
-
-    UINTVAL id;
-    int packid_type;
-
-    PARROT_ASSERT(PARROT_IMAGEIO(info)->what == VISIT_FREEZE_NORMAL);
-
-    if (PMC_IS_NULL(pmc)) {
-        id   = 0;
-        packid_type = enum_PackID_seen;
-    }
-    else {
-        Hash * const hash = (Hash *)VTABLE_get_pointer(interp,
-            PARROT_IMAGEIO(info)->seen);
-        HashBucket * const b = parrot_hash_get_bucket(interp, hash, pmc);
-
-        if (b) {
-            id = (UINTVAL)b->value;
-            packid_type = enum_PackID_seen;
-        }
-        else {
-            ++PARROT_IMAGEIO(info)->id; /* next id to freeze */
-            id = PARROT_IMAGEIO(info)->id;
-            packid_type = enum_PackID_normal;
-        }
-    }
-
-    VTABLE_push_integer(interp, info, PackID_new(id, packid_type));
-
-    if (packid_type == enum_PackID_normal) {
-        Hash * const hash = (Hash *)VTABLE_get_pointer(interp,
-            PARROT_IMAGEIO(info)->seen);
-
-        PARROT_ASSERT(pmc);
-
-        /* workaround to keep ParrotInterpreter PBC hack working */
-        if (pmc->vtable->base_type == enum_class_ParrotInterpreter)
-            PObj_flag_CLEAR(private1, info);
-
-        VTABLE_push_integer(interp, info,
-            PObj_is_object_TEST(pmc)
-                ? (INTVAL) enum_class_Object
-                : pmc->vtable->base_type);
-
-        parrot_hash_put(interp, hash, pmc, (void *)id);
-        VTABLE_push_pmc(interp, PARROT_IMAGEIO(info)->todo, pmc);
-    }
-}
-
-
 pmclass ImageIO auto_attrs {
     ATTR Buffer              *buffer;      /* buffer to store the image */
     ATTR size_t               pos;         /* current read/write buf position */
@@ -660,7 +503,51 @@
 */
 
     VTABLE void push_pmc(PMC *v) {
-        visit_todo_list_freeze(INTERP, v, SELF);
+        UINTVAL id;
+        int packid_type;
+
+        PARROT_ASSERT(PARROT_IMAGEIO(SELF)->what == VISIT_FREEZE_NORMAL);
+
+        if (PMC_IS_NULL(v)) {
+            id   = 0;
+            packid_type = enum_PackID_seen;
+        }
+        else {
+            Hash * const hash = (Hash *)VTABLE_get_pointer(INTERP,
+                    PARROT_IMAGEIO(SELF)->seen);
+            HashBucket * const b = parrot_hash_get_bucket(INTERP, hash, v);
+
+            if (b) {
+                id = (UINTVAL)b->value;
+                packid_type = enum_PackID_seen;
+            }
+            else {
+                ++PARROT_IMAGEIO(SELF)->id; /* next id to freeze */
+                id = PARROT_IMAGEIO(SELF)->id;
+                packid_type = enum_PackID_normal;
+            }
+        }
+
+        SELF.push_integer(PackID_new(id, packid_type));
+
+        if (packid_type == enum_PackID_normal) {
+            Hash * const hash = (Hash *)VTABLE_get_pointer(INTERP,
+                    PARROT_IMAGEIO(SELF)->seen);
+
+            PARROT_ASSERT(v);
+
+            /* workaround to keep ParrotInterpreter PBC hack working */
+            if (v->vtable->base_type == enum_class_ParrotInterpreter)
+                PObj_flag_CLEAR(private1, SELF);
+
+            SELF.push_integer(
+                    PObj_is_object_TEST(v)
+                    ? (INTVAL) enum_class_Object
+                    : v->vtable->base_type);
+
+            parrot_hash_put(INTERP, hash, v, (void *)id);
+            VTABLE_push_pmc(INTERP, PARROT_IMAGEIO(SELF)->todo, v);
+        }
     }
 
 
@@ -774,7 +661,46 @@
 */
 
     VTABLE PMC *shift_pmc() {
-        return visit_todo_list_thaw(INTERP, SELF);
+        const UINTVAL  n            = SELF.shift_integer();
+        const INTVAL   id           = PackID_get_PMCID(n);
+        const int      packid_flags = PackID_get_FLAGS(n);
+        PMC           *pmc          = PMCNULL;
+
+        PARROT_ASSERT(PARROT_IMAGEIO(SELF)->what == VISIT_THAW_NORMAL);
+
+        switch (packid_flags) {
+            case enum_PackID_seen:
+                if (id) /* got a non-NULL PMC */
+                    pmc = id_list_get(INTERP, SELF, id);
+                break;
+            case enum_PackID_normal:
+                {
+                    PMC * const  todo = PARROT_IMAGEIO(SELF)->todo;
+                    const INTVAL type = VTABLE_shift_integer(INTERP, SELF);
+
+                    PARROT_ASSERT(id - 1
+                            == VTABLE_elements(INTERP, PARROT_IMAGEIO(SELF)->todo));
+
+                    if (type <= 0 || type > INTERP->n_vtable_max)
+                        Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
+                                "Unknown PMC type to thaw %d", type);
+
+                    /* workaround to keep ParrotInterpreter PBC hack working */
+                    if (type == enum_class_ParrotInterpreter)
+                        PObj_flag_CLEAR(private1, SELF);
+
+                    pmc = Parrot_pmc_new_noinit(INTERP, type);
+
+                    VTABLE_set_pmc_keyed_int(INTERP, todo, id - 1, pmc);
+                }
+                break;
+            default:
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
+                        "Unknown PMC id args thaw %d", packid_flags);
+                break;
+        }
+
+        return pmc;
     }
 
     VTABLE void set_pmc(PMC *p)

Modified: branches/unshared_buffers/src/pmc/imageiosize.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/imageiosize.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/imageiosize.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -17,64 +17,6 @@
 #define GROW_TO_16_BYTE_BOUNDARY(size) ((size) + ((size) % 16 ? 16 - (size) % 16 : 0))
 
 /* HEADERIZER HFILE: none */
-/* HEADERIZER BEGIN: static */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-static void visit_todo_list_freeze(PARROT_INTERP,
-    ARGIN(PMC* pmc),
-    ARGMOD(PMC* info))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(* info);
-
-#define ASSERT_ARGS_visit_todo_list_freeze __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmc) \
-    , PARROT_ASSERT_ARG(info))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: static */
-
-/*
-
-=head1 METHODS
-
-=over 4
-
-=item C<static void visit_todo_list_freeze(PARROT_INTERP, PMC* pmc, PMC* info)>
-
-=back
-
-=cut
-
-   */
-
-static void
-visit_todo_list_freeze(PARROT_INTERP, ARGIN(PMC* pmc), ARGMOD(PMC* info))
-{
-    int is_new = 0;
-
-    if (!PMC_IS_NULL(pmc)) {
-        Hash * const hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIOSIZE(info)->seen);
-        HashBucket * const b = parrot_hash_get_bucket(interp, hash, pmc);
-        is_new = !b;
-    }
-
-    VTABLE_push_integer(interp, info, 0);
-
-    if (is_new) {
-        Hash * const hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIOSIZE(info)->seen);
-
-        parrot_hash_put(interp, hash, pmc, pmc);
-
-        /* workaround to keep ParrotInterpreter PBC hack working */
-        if (pmc->vtable->base_type == enum_class_ParrotInterpreter)
-            PObj_flag_CLEAR(private1, info);
-
-        VTABLE_push_integer(interp, info, pmc->vtable->base_type);
-        VTABLE_push_pmc(interp, PARROT_IMAGEIOSIZE(info)->todo, pmc);
-    }
-}
 
 pmclass ImageIOSize auto_attrs {
     ATTR PMC                        *seen; /* seen hash */
@@ -298,7 +240,28 @@
 */
 
     VTABLE void push_pmc(PMC *v) {
-        visit_todo_list_freeze(INTERP, v, SELF);
+        int is_new = 0;
+
+        if (!PMC_IS_NULL(v)) {
+            Hash * const hash = (Hash *)VTABLE_get_pointer(INTERP, PARROT_IMAGEIOSIZE(SELF)->seen);
+            HashBucket * const b = parrot_hash_get_bucket(INTERP, hash, v);
+            is_new = !b;
+        }
+
+        SELF.push_integer(0);
+
+        if (is_new) {
+            Hash * const hash = (Hash *)VTABLE_get_pointer(INTERP, PARROT_IMAGEIOSIZE(SELF)->seen);
+
+            parrot_hash_put(INTERP, hash, v, v);
+
+            /* workaround to keep ParrotInterpreter PBC hack working */
+            if (v->vtable->base_type == enum_class_ParrotInterpreter)
+                PObj_flag_CLEAR(private1, SELF);
+
+            VTABLE_push_integer(INTERP, SELF, v->vtable->base_type);
+            VTABLE_push_pmc(INTERP, PARROT_IMAGEIOSIZE(SELF)->todo, v);
+        }
     }
 
     VTABLE void set_pmc(PMC *p)
@@ -308,7 +271,7 @@
             PARROT_IMAGEIOSIZE(SELF)->size += header_length;
         }
 
-        visit_todo_list_freeze(INTERP, p, SELF);
+        STATICSELF.push_pmc(p);
         Parrot_visit_loop_visit(INTERP, SELF);
     }
 

Modified: branches/unshared_buffers/src/pmc/imageiostrings.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/imageiostrings.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/imageiostrings.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -50,6 +50,8 @@
             parrot_new_intval_hash(INTERP));
 
         PARROT_IMAGEIOSTRINGS(SELF)->list = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
+
+        PObj_custom_mark_SET(SELF);
     }
 
 /*

Modified: branches/unshared_buffers/src/pmc/integer.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/integer.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/integer.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -141,9 +141,8 @@
 
 */
     VTABLE PMC *clone() {
-        PMC * const clone = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
-        VTABLE_set_integer_native(INTERP, clone, SELF.get_integer());
-        return clone;
+        return Parrot_pmc_new_init_int(INTERP, SELF->vtable->base_type,
+            SELF.get_integer());
     }
 
 /*
@@ -321,18 +320,13 @@
         const INTVAL b = VTABLE_get_integer(INTERP, value);
         const INTVAL c = a + b;
 
-        if ((c^a) >= 0 || (c^b) >= 0) {
-            dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-            /* need this for e.g. Undef PMC */
-            VTABLE_set_integer_native(INTERP, dest, c);
-            return dest;
-        }
+        if ((c^a) >= 0 || (c^b) >= 0)
+            return Parrot_pmc_new_init_int(INTERP,
+                    VTABLE_type(INTERP, SELF), c);
         else {
-            PMC * temp;
+            PMC *temp;
             maybe_throw_overflow_error(INTERP);
-            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-            VTABLE_set_integer_native(INTERP, temp, a);
+            temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, a);
             return VTABLE_add(INTERP, temp, value, dest);
         }
     }
@@ -340,10 +334,9 @@
 
     MULTI PMC *add(Complex value, PMC *dest) {
         const INTVAL a = SELF.get_integer();
-        dest           = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, value));
-
-        VTABLE_set_number_native(INTERP, dest,
-                a + VTABLE_get_number_keyed_int(INTERP, value, 0));
+        dest           = Parrot_pmc_new_init_int(INTERP,
+                            VTABLE_type(INTERP, value),
+                            a + VTABLE_get_number_keyed_int(INTERP, value, 0));
         VTABLE_set_number_keyed_int(INTERP, dest, 1,
                 VTABLE_get_number_keyed_int(INTERP, value, 1));
 
@@ -354,17 +347,16 @@
     MULTI PMC *add(BigInt value, PMC *dest) {
         PMC *temp;
         maybe_throw_overflow_error(INTERP);
-        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
+        temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt,
+                SELF.get_integer());
         return VTABLE_add(INTERP, temp, value, dest);
     }
 
 
     MULTI PMC *add(DEFAULT value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, value));
-
         VTABLE_set_number_native(INTERP, dest,
-                SELF.get_integer() + VTABLE_get_number(INTERP, value));
+            SELF.get_integer() + VTABLE_get_number(interp, value));
         return dest;
     }
 
@@ -373,17 +365,13 @@
         const INTVAL a = VTABLE_get_integer(INTERP, SELF);
         const INTVAL c = a + b;
 
-        if ((c^a) >= 0 || (c^b) >= 0) {
-            dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-            VTABLE_set_integer_native(INTERP, dest, c);
-            return dest;
-        }
+        if ((c^a) >= 0 || (c^b) >= 0)
+            return Parrot_pmc_new_init_int(INTERP,
+                    VTABLE_type(INTERP, SELF), c);
         else {
             PMC *temp;
             maybe_throw_overflow_error(INTERP);
-            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-            VTABLE_set_integer_native(INTERP, temp, a);
+            temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, a);
             return VTABLE_add_int(INTERP, temp, b, dest);
         }
     }
@@ -463,17 +451,13 @@
         const INTVAL b = VTABLE_get_integer(INTERP, value);
         const INTVAL c = a - b;
 
-        if ((c^a) >= 0 || (c^~b) >= 0) {
-            dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-            VTABLE_set_integer_native(INTERP, dest, c);
-            return dest;
-        }
+        if ((c^a) >= 0 || (c^~b) >= 0)
+            return Parrot_pmc_new_init_int(INTERP,
+                    VTABLE_type(INTERP, SELF), c);
         else {
             PMC *temp;
             maybe_throw_overflow_error(INTERP);
-            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-            VTABLE_set_integer_native(INTERP, temp, a);
+            temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, a);
             return VTABLE_subtract(INTERP, temp, value, dest);
         }
     }
@@ -495,8 +479,8 @@
     MULTI PMC *subtract(BigInt value, PMC *dest) {
         PMC *temp;
         maybe_throw_overflow_error(INTERP);
-        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
+        temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt,
+                 SELF.get_integer());
         return VTABLE_subtract(INTERP, temp, value, dest);
     }
 
@@ -524,17 +508,13 @@
         const INTVAL a = SELF.get_integer();
         const INTVAL c = a - b;
 
-        if ((c^a) >= 0 || (c^~b) >= 0) {
-            dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-            VTABLE_set_integer_native(INTERP, dest, c);
-            return dest;
-        }
+        if ((c^a) >= 0 || (c^~b) >= 0)
+            return Parrot_pmc_new_init_int(INTERP,
+                    VTABLE_type(INTERP, SELF), c);
         else {
             PMC *temp;
             maybe_throw_overflow_error(INTERP);
-            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-            VTABLE_set_integer_native(INTERP, temp, a);
+            temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, a);
             return VTABLE_subtract_int(INTERP, temp, b, dest);
         }
     }
@@ -624,17 +604,13 @@
         const INTVAL c  = a * b;
         const double cf = (double)a * (double)b;
 
-        if ((double) c == cf) {
-            dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-            VTABLE_set_integer_native(INTERP, dest, c);
-            return dest;
-        }
+        if ((double) c == cf)
+            return Parrot_pmc_new_init_int(INTERP,
+                    VTABLE_type(INTERP, SELF), c);
         else {
             PMC *temp;
             maybe_throw_overflow_error(INTERP);
-            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-            VTABLE_set_integer_native(INTERP, temp, a);
+            temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, a);
             return VTABLE_multiply(INTERP, temp, value, dest);
         }
     }
@@ -657,10 +633,8 @@
 
     MULTI PMC *multiply(DEFAULT value, PMC *dest) {
         const FLOATVAL valf = VTABLE_get_number(INTERP, value);
-        dest                = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_number_native(INTERP, dest, SELF.get_number() * valf);
-        return dest;
+        return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
+            SELF.get_number() * valf);
     }
 
 
@@ -669,17 +643,13 @@
         const INTVAL c  = a * b;
         const double cf = (double)a * (double)b;
 
-        if ((double) c == cf) {
-            dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-            VTABLE_set_integer_native(INTERP, dest, c);
-            return dest;
-        }
+        if ((double) c == cf)
+            return Parrot_pmc_new_init_int(INTERP,
+                    VTABLE_type(INTERP, SELF), c);
         else {
             PMC *temp;
             maybe_throw_overflow_error(INTERP);
-            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-            VTABLE_set_integer_native(INTERP, temp, a);
+            temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, a);
             return VTABLE_multiply_int(INTERP, temp, b, dest);
         }
     }
@@ -765,8 +735,8 @@
     MULTI PMC *divide(BigInt value, PMC *dest) {
         PMC *temp;
         maybe_throw_overflow_error(INTERP);
-        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
+        temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt,
+            SELF.get_integer());
         return VTABLE_divide(INTERP, temp, value, dest);
     }
 
@@ -777,9 +747,8 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
                     "float division by zero");
 
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-        VTABLE_set_number_native(INTERP, dest, SELF.get_number() / d);
-        return dest;
+        return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
+                    SELF.get_number() / d);
     }
 
 
@@ -826,8 +795,8 @@
     MULTI PMC *floor_divide(BigInt value, PMC *dest) {
         PMC *temp;
         maybe_throw_overflow_error(INTERP);
-        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
+        temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt,
+                SELF.get_integer());
         return VTABLE_floor_divide(INTERP, temp, value, dest);
     }
 
@@ -840,11 +809,9 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
                     "float division by zero");
 
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
         f = floor(SELF.get_number() / d);
-        VTABLE_set_integer_native(INTERP, dest, (INTVAL)f);
-        return dest;
+        return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
+            (INTVAL)f);
     }
 
 
@@ -855,12 +822,9 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
                     "float division by zero");
 
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
         f = floor(SELF.get_number() / value);
-        VTABLE_set_integer_native(INTERP, dest, (INTVAL)f);
-
-        return dest;
+        return Parrot_pmc_new_init_int(INTERP,
+               VTABLE_type(INTERP, SELF), (INTVAL)f);
     }
 
     VTABLE PMC *floor_divide_float(FLOATVAL value, PMC *dest) {
@@ -870,12 +834,9 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
                     "float division by zero");
 
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
         f = floor(SELF.get_number() / value);
-        VTABLE_set_integer_native(INTERP, dest, (INTVAL)f);
-
-        return dest;
+        return Parrot_pmc_new_init_int(INTERP,
+                VTABLE_type(INTERP, SELF), (INTVAL)f);
     }
 
     MULTI void i_floor_divide(BigInt value) {
@@ -948,8 +909,8 @@
     MULTI PMC *modulus(BigInt value, PMC *dest) {
         PMC *temp;
         maybe_throw_overflow_error(INTERP);
-        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
+        temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt,
+             SELF.get_integer());
         return VTABLE_modulus(INTERP, temp, value, dest);
     }
 
@@ -961,11 +922,8 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
                     "int modulus by zero");
 
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_integer_native(INTERP, dest,
+        return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
                 intval_mod(SELF.get_integer(), d));
-        return dest;
     }
 
 
@@ -974,11 +932,8 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
                     "int modulus by zero");
 
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_integer_native(INTERP, dest,
+        return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
                 intval_mod(SELF.get_integer(), value));
-        return dest;
     }
 
 
@@ -987,11 +942,8 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
                     "int modulus by zero");
 
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_integer_native(INTERP, dest,
+        return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
                 intval_mod(SELF.get_integer(), (INTVAL)value));
-        return dest;
     }
 
 
@@ -1045,15 +997,16 @@
 
     VTABLE INTVAL is_equal(PMC *value) {
         INTVAL retval;
-        PMC *temp;
 
         switch (value->vtable->base_type) {
           case enum_class_BigInt:
-            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
-            VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
+          {
+            PMC const *temp = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt,
+                SELF.get_integer());
             Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                     "is_equal", "PP->I", temp, value, &retval);
             return retval;
+          }
             break;
           default:
             return (VTABLE_get_integer(INTERP, SELF)
@@ -1074,15 +1027,20 @@
 */
 
     MULTI INTVAL cmp(String value) {
-        const FLOATVAL fdiff = SELF.get_number() - VTABLE_get_number(INTERP, value);
+        INTVAL iv;
+        GET_ATTR_iv(INTERP, SELF, iv);
+        {
+            const FLOATVAL fdiff =
+                (FLOATVAL)iv - VTABLE_get_number(INTERP, value);
 
-        if (FLOAT_IS_ZERO(fdiff)) {
-            const INTVAL idiff =
-                SELF.get_integer() - VTABLE_get_integer(INTERP, value);
-            return idiff > 0 ? 1 : idiff < 0 ? -1 : 0;
-        }
+            if (FLOAT_IS_ZERO(fdiff)) {
+                const INTVAL idiff =
+                    SELF.get_integer() - VTABLE_get_integer(INTERP, value);
+                return idiff > 0 ? 1 : idiff < 0 ? -1 : 0;
+            }
 
-        return fdiff > 0 ? 1 : -1;
+            return fdiff > 0 ? 1 : -1;
+        }
     }
 
 
@@ -1210,11 +1168,7 @@
         const INTVAL a = abs(SELF.get_integer());
 
         /* TT # 1245 overflow for -maxint */
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_integer_native(INTERP, dest, a);
-        return dest;
-
+        return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF), a);
     }
 
 

Modified: branches/unshared_buffers/src/pmc/lexinfo.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/lexinfo.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/lexinfo.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -56,8 +56,7 @@
     }
 
     VTABLE void init() {
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
-                "Cannot create a LexInfo PMC without an initializer");
+        SELF.init_pmc(PMCNULL);
     }
 
     VTABLE void init_pmc(PMC *sub) {
@@ -99,25 +98,10 @@
         if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "symbols"))) {
             PMC * const result    = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
             const Hash *hash      = (Hash *)SELF.get_pointer();
-            const UINTVAL entries = hash->entries;
 
-            UINTVAL found   = 0;
-            INTVAL  i;
-
-            for (i = hash->mask; i >= 0; --i) {
-                HashBucket *bucket = hash->bucket_indices[i];
-                while (bucket) {
-                    if (++found > entries)
-                        Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
-                            "Detected corruption at LexInfo hash %p entries %d",
-                            hash, (int)entries);
-
-                    PARROT_ASSERT(bucket->key);
-                    VTABLE_push_string(INTERP, result, (STRING *)bucket->key);
-
-                    bucket = bucket->next;
-                }
-            }
+            parrot_hash_iterate(hash,
+                PARROT_ASSERT(_bucket->key);
+                VTABLE_push_string(INTERP, result, (STRING *)_bucket->key););
 
             return result;
         }
@@ -125,41 +109,6 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Unknown introspection value '%S'", what);
     }
-
-/*
-
-=item C<void visit(PMC *info)>
-
-=item C<void freeze(PMC *info)>
-
-=item C<void thaw(PMC *info)>
-
-Freeze/thaw interface used during freeze/thaw of the Sub PMC.
-The implementation of the Hash PMC is called.
-
-=cut
-
-*/
-
-
-    VTABLE void thaw(PMC *info) {
-        const INTVAL elems  = VTABLE_shift_integer(INTERP, info);
-        const INTVAL k_type = VTABLE_shift_integer(INTERP, info);
-        const INTVAL v_type = VTABLE_shift_integer(INTERP, info);
-        Hash        *hash;
-
-        UNUSED(k_type);
-        UNUSED(v_type);
-
-        PARROT_ASSERT(v_type == enum_hash_int);
-        /* TODO make a better interface for hash creation
-         * TODO create hash with needed types in the first place
-         */
-
-        SELF.init_pmc(NULL);
-        hash          = (Hash *)SELF.get_pointer();
-        hash->entries = elems;
-    }
 }
 
 

Modified: branches/unshared_buffers/src/pmc/namespace.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/namespace.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/namespace.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -98,6 +98,15 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/*
+
+=item C<static void add_to_class(PARROT_INTERP, Parrot_NameSpace_attributes
+*nsinfo, PMC *classobj, STRING *key, PMC *value)>
+
+=cut
+
+*/
+
 static void
 add_to_class(PARROT_INTERP, ARGMOD(Parrot_NameSpace_attributes *nsinfo),
         ARGMOD_NULLOK(PMC *classobj), ARGIN(STRING *key), ARGIN(PMC *value))
@@ -120,6 +129,15 @@
     }
 }
 
+/*
+
+=item C<static int ns_insert_sub_keyed_str(PARROT_INTERP, PMC *self, STRING
+*key, PMC *value)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 static int
 ns_insert_sub_keyed_str(PARROT_INTERP, ARGIN(PMC *self), ARGIN(STRING *key),
@@ -181,6 +199,15 @@
     return stored;
 }
 
+/*
+
+=item C<static int maybe_add_sub_to_namespace(PARROT_INTERP, PMC *SELF, STRING
+*key, PMC *value)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 static int
 maybe_add_sub_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
@@ -198,6 +225,15 @@
     return 0;
 }
 
+/*
+
+=item C<static void add_nci_to_namespace(PARROT_INTERP, PMC *SELF, STRING *key,
+PMC *value)>
+
+=cut
+
+*/
+
 static void
 add_nci_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
         ARGIN_NULLOK(PMC *value))
@@ -216,6 +252,15 @@
     }
 }
 
+/*
+
+=item C<static void add_multi_to_namespace(PARROT_INTERP, PMC *SELF, STRING
+*key, PMC *value)>
+
+=cut
+
+*/
+
 static void
 add_multi_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
         ARGIN_NULLOK(PMC *value))

Modified: branches/unshared_buffers/src/pmc/nci.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/nci.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/nci.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -49,6 +49,14 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/*
+
+=item C<static void pcc_params(PARROT_INTERP, STRING *sig, Parrot_NCI_attributes
+*nci_info, size_t sig_length)>
+
+=cut
+
+*/
 
 static void
 pcc_params(PARROT_INTERP, ARGIN(STRING *sig), ARGMOD(Parrot_NCI_attributes *nci_info),
@@ -143,7 +151,16 @@
         mem_sys_free(sig_buf);
 }
 
-/* actually build the NCI thunk */
+/*
+
+=item C<static nci_thunk_t build_func(PARROT_INTERP, Parrot_NCI_attributes
+*nci_info)>
+
+Actually build the NCI thunk.
+
+=cut
+
+*/
 
 PARROT_IGNORABLE_RESULT
 static nci_thunk_t

Modified: branches/unshared_buffers/src/pmc/null.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/null.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/null.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -11,10 +11,6 @@
 This simply creates a way of catching C<NULL> register accesses without
 really slowing down the bytecode execution.
 
-=head2 Methods
-
-=over 4
-
 =cut
 
 */
@@ -32,30 +28,14 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-/*
-
-=item C<static void null_pmc_access(PARROT_INTERP, int index)>
-
-
-
-=cut
-
-*/
-
-PARROT_DOES_NOT_RETURN
-static void
-null_pmc_access(PARROT_INTERP, int index)
-{
-    ASSERT_ARGS(null_pmc_access)
-    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_NULL_REG_ACCESS,
-            "Null PMC access in %s()",
-            Parrot_get_vtable_name(interp, index));
-}
-
 pmclass Null singleton {
 
 /*
 
+=head2 Vtable functions
+
+=over 4
+
 =item C<void init()>
 
 Overrides the default to do nothing.
@@ -102,9 +82,9 @@
 
 =item C<PMC *find_method(STRING *method_name)>
 
-=cut
+Gives a more informative message than the automaticaly generated version.
 
-Gives a more informative message than the automaticaaly generated version.
+=cut
 
 */
 
@@ -120,6 +100,32 @@
 
 =back
 
+=head2 Auxiliar functions
+
+=over 4
+
+=item C<static void null_pmc_access(PARROT_INTERP, int index)>
+
+Throws the Null PMC access exception.
+
+=cut
+
+*/
+
+PARROT_DOES_NOT_RETURN
+static void
+null_pmc_access(PARROT_INTERP, int index)
+{
+    ASSERT_ARGS(null_pmc_access)
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_NULL_REG_ACCESS,
+            "Null PMC access in %s()",
+            Parrot_get_vtable_name(interp, index));
+}
+
+/*
+
+=back
+
 =cut
 
 */

Modified: branches/unshared_buffers/src/pmc/object.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/object.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/object.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -85,6 +85,14 @@
 /* This finds the index of an attribute in an object's attribute store and
  * returns it. Returns -1 if the attribute does not exist. */
 
+/*
+
+=item C<static INTVAL get_attrib_index(PARROT_INTERP, PMC *self, STRING *name)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 static INTVAL
 get_attrib_index(PARROT_INTERP, ARGIN(PMC *self), ARGIN(STRING *name))
@@ -138,10 +146,18 @@
     return -1;
 }
 
+/*
+
+=item C<static INTVAL get_attrib_index_keyed(PARROT_INTERP, PMC *self, PMC *key,
+STRING *name)>
+
+This variation bypasses the cache and finds the index of a particular
+parent's attribute in an object's attribute store and returns it.
+Returns C<-1> if the attribute does not exist.
 
-/* This variation bypasses the cache and finds the index of a particular
- * parent's attribute in an object's attribute store and returns it. Returns -1
- * if the attribute does not exist. */
+=cut
+
+*/
 
 PARROT_WARN_UNUSED_RESULT
 static INTVAL
@@ -176,6 +192,13 @@
     return -1;
 }
 
+/*
+
+=item C<static PMC * find_cached(PARROT_INTERP, PMC *_class, STRING *name)>
+
+=cut
+
+*/
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
@@ -192,6 +215,14 @@
     return VTABLE_get_pmc_keyed_str(interp, cache, name);
 }
 
+/*
+
+=item C<static void cache_method(PARROT_INTERP, PMC *_class, STRING *name, PMC
+*method)>
+
+=cut
+
+*/
 
 static void
 cache_method(PARROT_INTERP, ARGIN(PMC *_class), ARGIN(STRING *name),

Modified: branches/unshared_buffers/src/pmc/parrotinterpreter.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/parrotinterpreter.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/parrotinterpreter.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -848,6 +848,23 @@
         RETURN(PMC *handle);
     }
 
+/*
+
+=item METHOD getpid()
+
+Returns the pid of the current process, 0 in platforms that doesn't
+support it.
+
+This method is experimental. See TT #1564.
+
+=cut
+
+*/
+
+    METHOD getpid() {
+        INTVAL id = Parrot_getpid();
+        RETURN(INTVAL id);
+    }
 
 }
 

Modified: branches/unshared_buffers/src/pmc/parrotlibrary.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/parrotlibrary.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/parrotlibrary.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -49,9 +49,7 @@
 
 */
 
-    VTABLE void init() {
-        PObj_custom_destroy_SET(SELF);
-    }
+    VTABLE void init() {}
 
 /*
 
@@ -82,8 +80,14 @@
 
     VTABLE PMC *clone() {
         PMC * const dest     = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
-        PMC_oplib_init(dest) = PMC_oplib_init(SELF);
-        PMC_dlhandle(dest)   = PMC_dlhandle(SELF);
+
+        if (PMC_oplib_init(SELF))
+            PMC_oplib_init(dest) = PMC_oplib_init(SELF);
+
+        if (PMC_dlhandle(SELF)) {
+            PMC_dlhandle(dest)   = PMC_dlhandle(SELF);
+            PObj_custom_destroy_SET(dest);
+        }
 
         if (PMC_metadata(SELF))
             PMC_metadata(dest) = VTABLE_clone(INTERP, PMC_metadata(SELF));
@@ -126,7 +130,7 @@
 
 =item C<void *get_pointer()>
 
-Get the pointer to the shared library handle.
+Gets the pointer to the shared library handle.
 
 =cut
 
@@ -140,7 +144,7 @@
 
 =item C<void set_pointer(void *handle)>
 
-Set the pointer to the shared library handle.
+Sets the pointer to the shared library handle.
 
 =cut
 
@@ -148,6 +152,7 @@
 
     VTABLE void set_pointer(void *handle) {
         PMC_dlhandle(SELF) = handle;
+        PObj_custom_destroy_SET(SELF);
     }
 }
 
@@ -155,16 +160,6 @@
 
 =back
 
-=head1 SEE ALSO
-
-    Date:    Mon, 29 Sep 2003 14:37:11 -0400 (EDT)
-    Subject: Library loading and initialization sequence
-    From:    Dan Sugalski
-
-=head1 HISTORY
-
-Initial version by leo 2003.10.12.
-
 =cut
 
 */

Modified: branches/unshared_buffers/src/pmc/stringbuilder.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/stringbuilder.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/stringbuilder.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -66,7 +66,7 @@
         buffer->encoding  = Parrot_default_encoding_ptr;
         buffer->charset   = Parrot_default_charset_ptr;
         /* We need all string flags here because we use this buffer in substr_str */
-        buffer->flags     = PObj_is_string_FLAG | PObj_live_FLAG;
+        buffer->flags     = PObj_is_string_FLAG;
         Buffer_bufstart(buffer) = mem_gc_allocate_n_typed(INTERP,
                 initial_size, char);
         Buffer_buflen(buffer) = initial_size;
@@ -145,7 +145,7 @@
             STRING * const new_buffer = Parrot_unicode_charset_ptr->to_charset(interp, buffer);
             mem_gc_free(INTERP, Buffer_bufstart(buffer));
             STRUCT_COPY(buffer, new_buffer);
-            buffer->flags     = PObj_is_string_FLAG | PObj_live_FLAG;
+            buffer->flags     = PObj_is_string_FLAG;
 
             Buffer_bufstart(buffer) = mem_gc_allocate_n_typed(INTERP,
                                                     Buffer_buflen(new_buffer), char);
@@ -351,16 +351,13 @@
             }
             else if (Parrot_str_equal(INTERP, key, comma)) {
                 INTVAL num_args = VTABLE_elements(INTERP, args);
-                INTVAL pos_args = 1;
+                INTVAL pos_args;
 
-                VTABLE_push_string(INTERP, stringbuilder,
-                    VTABLE_get_string_keyed_int(INTERP, args, 0));
-
-                while (pos_args < num_args) {
-                    VTABLE_push_string(INTERP, stringbuilder, comma_space);
+                for (pos_args = 0; pos_args < num_args; ++pos_args) {
+                    if (pos_args > 0)
+                        VTABLE_push_string(INTERP, stringbuilder, comma_space);
                     VTABLE_push_string(INTERP, stringbuilder,
                         VTABLE_get_string_keyed_int(INTERP, args, pos_args));
-                    pos_args++;
                 }
             }
             else if (Parrot_str_equal(INTERP, key, percent)) {

Modified: branches/unshared_buffers/src/pmc/stringiterator.pmc
==============================================================================
--- branches/unshared_buffers/src/pmc/stringiterator.pmc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/pmc/stringiterator.pmc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -27,11 +27,9 @@
 /* HEADERIZER END: static */
 
 pmclass StringIterator auto_attrs extends Iterator {
-    ATTR PMC    *string;    /* String to iterate over */
-    ATTR INTVAL  pos;       /* Current position of iterator for forward iterator */
-                            /* Previous position of iterator for reverse iterator */
-    ATTR INTVAL  length;    /* Length of C<string> */
-    ATTR INTVAL  reverse;   /* Direction of iteration. 1 - for reverse iteration */
+    ATTR STRING      *str_val;   /* String to iterate over */
+    ATTR String_iter  iter;      /* String iterator */
+    ATTR INTVAL       reverse;   /* Direction of iteration. 1 - for reverse iteration */
 
 /*
 
@@ -43,10 +41,13 @@
 
 */
     VTABLE void init_pmc(PMC *string) {
-        SET_ATTR_string(INTERP, SELF, string);
+        String_iter * const iter    = &PARROT_STRINGITERATOR(SELF)->iter;
+        STRING      * const str_val = VTABLE_get_string(INTERP, string);
+
+        SET_ATTR_str_val(INTERP, SELF, str_val);
+        STRING_ITER_INIT(INTERP, iter);
+        SET_ATTR_reverse(INTERP, SELF, ITERATE_FROM_START);
 
-        /* by default, iterate from start */
-        SELF.set_integer_native(ITERATE_FROM_START);
         PObj_custom_mark_SET(SELF);
     }
 
@@ -61,9 +62,10 @@
 */
 
     VTABLE void mark() {
-        PMC *string;
-        GET_ATTR_string(INTERP, SELF, string);
-        Parrot_gc_mark_PMC_alive(INTERP, string);
+        STRING *str_val;
+
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        Parrot_gc_mark_STRING_alive(INTERP, str_val);
     }
 
 /*
@@ -74,15 +76,21 @@
 
 */
     VTABLE PMC* clone() {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
-        PMC                              * const clone =
-                Parrot_pmc_new_init(INTERP, enum_class_StringIterator, attrs->string);
-        Parrot_StringIterator_attributes * const clone_attrs =
-                PARROT_STRINGITERATOR(clone);
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+        PMC         *clone, *str_pmc;
+        String_iter *clone_iter;
+        STRING      *str_val;
+        INTVAL       reverse;
+
+        str_pmc = Parrot_pmc_new(INTERP, enum_class_String);
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        VTABLE_set_string_native(INTERP, str_pmc, str_val);
+        clone = Parrot_pmc_new_init(INTERP, enum_class_StringIterator, str_pmc);
+        clone_iter = &PARROT_STRINGITERATOR(clone)->iter;
+        *clone_iter = *iter;
+        GET_ATTR_reverse(INTERP, SELF, reverse);
+        SET_ATTR_reverse(INTERP, clone, reverse);
 
-        clone_attrs->pos     = attrs->pos;
-        clone_attrs->reverse = attrs->reverse;
         return clone;
     }
 
@@ -111,12 +119,17 @@
 */
 
     VTABLE INTVAL elements() {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
-        if (attrs->reverse)
-            return attrs->pos;
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+        STRING *str_val;
+        INTVAL  reverse;
+
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        GET_ATTR_reverse(INTERP, SELF, reverse);
+
+        if (reverse)
+            return iter->charpos;
         else
-            return attrs->length - attrs->pos;
+            return str_val->strlen - iter->charpos;
     }
 
     VTABLE INTVAL get_integer() {
@@ -137,20 +150,19 @@
 */
 
     VTABLE void set_integer_native(INTVAL value) {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
-        switch (value) {
-          case ITERATE_FROM_START:
-            attrs->reverse   = 0;
-            attrs->pos       = 0;
-            attrs->length    = VTABLE_elements(INTERP, attrs->string);
-            break;
-          case ITERATE_FROM_END:
-            attrs->reverse   = 1;
-            attrs->pos       = attrs->length
-                             = VTABLE_elements(INTERP, attrs->string);
-            break;
-          default:
+        STRING *str_val;
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        if (value == ITERATE_FROM_START) {
+            SET_ATTR_reverse(INTERP, SELF, 0);
+            STRING_ITER_SET_POSITION(INTERP, str_val, iter, 0);
+        }
+        else if (value == ITERATE_FROM_END) {
+            SET_ATTR_reverse(INTERP, SELF, 1);
+            STRING_ITER_SET_POSITION(INTERP, str_val, iter, str_val->strlen);
+        }
+        else {
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                     "Wrong direction for StringIterator");
         }
@@ -167,9 +179,13 @@
 */
 
     VTABLE PMC *get_pmc() {
-        PMC *string;
-        GET_ATTR_string(INTERP, SELF, string);
-        return string ? string : PMCNULL;
+        PMC * const string = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(
+            interp, enum_class_String));
+        STRING *str_val;
+
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        VTABLE_set_string_native(interp, string, str_val);
+        return string;
     }
 
 /*
@@ -182,17 +198,20 @@
 
 */
     VTABLE PMC *shift_pmc() {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
         PMC *ret;
+        STRING *str_val, *substr;
+        const String_iter old_iter = *iter;
 
-        if (attrs->pos >= attrs->length)
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        if (iter->charpos >= str_val->strlen)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
         ret = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp, enum_class_String));
-        VTABLE_set_string_native(INTERP, ret,
-                VTABLE_get_string_keyed_int(INTERP, attrs->string, attrs->pos++));
+        STRING_ITER_SKIP(INTERP, str_val, iter, 1);
+        substr = Parrot_str_iter_substr(INTERP, str_val, &old_iter, iter);
+        VTABLE_set_string_native(INTERP, ret, substr);
         return ret;
     }
 
@@ -206,14 +225,17 @@
 
 */
     VTABLE STRING *shift_string() {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+        STRING *str_val;
+        const String_iter old_iter = *iter;
 
-        if (attrs->pos >= attrs->length)
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        if (iter->charpos >= str_val->strlen)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        return VTABLE_get_string_keyed_int(INTERP, attrs->string, attrs->pos++);
+        STRING_ITER_SKIP(INTERP, str_val, iter, 1);
+        return Parrot_str_iter_substr(INTERP, str_val, &old_iter, iter);
     }
 
 /*
@@ -226,14 +248,15 @@
 
 */
     VTABLE INTVAL shift_integer() {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+        STRING *str_val;
 
-        if (attrs->pos >= attrs->length)
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        if (iter->charpos >= str_val->strlen)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        return VTABLE_get_integer_keyed_int(INTERP, attrs->string, attrs->pos++);
+        return STRING_ITER_GET_AND_ADVANCE(INTERP, str_val, iter);
     }
 
 /*
@@ -246,17 +269,21 @@
 
 */
     VTABLE PMC *pop_pmc() {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+        STRING *str_val, *substr;
         PMC *ret;
+        const String_iter old_iter = *iter;
 
-        if (!STATICSELF.get_bool())
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        /* Shouldn't this test be (iter->charpos <= 0) ? */
+        if (SELF.elements() <= 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
         ret = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp, enum_class_String));
-        VTABLE_set_string_native(INTERP, ret,
-                VTABLE_get_string_keyed_int(INTERP, attrs->string, --attrs->pos));
+        STRING_ITER_SKIP(INTERP, str_val, iter, -1);
+        substr = Parrot_str_iter_substr(INTERP, str_val, iter, &old_iter);
+        VTABLE_set_string_native(INTERP, ret, substr);
         return ret;
     }
 
@@ -270,14 +297,18 @@
 
 */
     VTABLE STRING *pop_string() {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
-
-        if (!STATICSELF.get_bool())
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+        STRING *str_val;
+        const String_iter old_iter = *iter;
+
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        /* Shouldn't this test be (iter->charpos <= 0) ? */
+        if (SELF.elements() <= 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        return VTABLE_get_string_keyed_int(INTERP, attrs->string, --attrs->pos);
+        STRING_ITER_SKIP(INTERP, str_val, iter, -1);
+        return Parrot_str_iter_substr(INTERP, str_val, iter, &old_iter);
     }
 
 /*
@@ -290,14 +321,17 @@
 
 */
     VTABLE INTVAL pop_integer() {
-        Parrot_StringIterator_attributes * const attrs =
-                PARROT_STRINGITERATOR(SELF);
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+        STRING *str_val;
 
-        if (!STATICSELF.get_bool())
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        /* Shouldn't this test be (iter->charpos <= 0) ? */
+        if (SELF.elements() <= 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        return VTABLE_get_integer_keyed_int(INTERP, attrs->string, --attrs->pos);
+        STRING_ITER_SKIP(INTERP, str_val, iter, -1);
+        return STRING_ITER_GET(INTERP, str_val, iter, 0);
     }
 
 /*
@@ -311,8 +345,16 @@
 */
 
     VTABLE INTVAL get_integer_keyed_int(INTVAL idx) {
-        return VTABLE_get_integer_keyed_int(INTERP, STATICSELF.get_pmc(),
-                PARROT_STRINGITERATOR(SELF)->pos + idx);
+        String_iter * const iter = &PARROT_STRINGITERATOR(SELF)->iter;
+        STRING *str_val;
+        const UINTVAL offset = iter->charpos + idx;
+
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        if (offset >= str_val->strlen)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                "StopIteration");
+
+        return STRING_ITER_GET(INTERP, str_val, iter, idx);
     }
 
 /*
@@ -326,8 +368,22 @@
 */
 
     VTABLE STRING *get_string_keyed_int(INTVAL idx) {
-        return VTABLE_get_string_keyed_int(INTERP, STATICSELF.get_pmc(),
-                PARROT_STRINGITERATOR(SELF)->pos + idx);
+        String_iter iter = PARROT_STRINGITERATOR(SELF)->iter;
+        String_iter next_iter;
+        STRING *str_val;
+        const UINTVAL offset = iter.charpos + idx;
+
+        GET_ATTR_str_val(INTERP, SELF, str_val);
+        if (offset >= str_val->strlen)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                "StopIteration");
+
+        if (idx != 0)
+            STRING_ITER_SKIP(INTERP, str_val, &iter, idx);
+        next_iter = iter;
+        STRING_ITER_SKIP(INTERP, str_val, &next_iter, 1);
+
+        return Parrot_str_iter_substr(INTERP, str_val, &iter, &next_iter);
     }
 }
 

Modified: branches/unshared_buffers/src/runcore/cores.c
==============================================================================
--- branches/unshared_buffers/src/runcore/cores.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/runcore/cores.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -675,7 +675,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                 "attempt to access code outside of current code segment");
 
-        Parrot_gc_mark_and_sweep(interp, GC_TRACE_FULL);
+        Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
         Parrot_pcc_set_pc(interp, CURRENT_CONTEXT(interp), pc);
 
         DO_OP(pc, interp);
@@ -717,7 +717,7 @@
                     "attempt to access code outside of current code segment");
 
         if (interp->pdb->state & PDB_GCDEBUG)
-            Parrot_gc_mark_and_sweep(interp, 0);
+            Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 
         if (interp->pdb->state & PDB_TRACING) {
             trace_op(interp,

Modified: branches/unshared_buffers/src/runcore/main.c
==============================================================================
--- branches/unshared_buffers/src/runcore/main.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/runcore/main.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -322,6 +322,11 @@
     interp->cores    = NULL;
     interp->run_core = NULL;
 
+    if (interp->all_op_libs)
+        mem_gc_free(interp, interp->all_op_libs);
+
+    interp->all_op_libs = NULL;
+
     /* dynop libs */
     if (interp->n_libs <= 0)
         return;

Modified: branches/unshared_buffers/src/runcore/trace.c
==============================================================================
--- branches/unshared_buffers/src/runcore/trace.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/runcore/trace.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -127,15 +127,15 @@
         return;
     }
 
-    if (!pmc->vtable || (UINTVAL)pmc->vtable == 0xdeadbeef) {
-        Parrot_io_eprintf(debugger, "<!!no vtable!!>");
-        return;
-    }
-
     if (PObj_on_free_list_TEST(pmc))
         Parrot_io_eprintf(debugger,
             "**************** PMC is on free list *****\n");
 
+    if (!pmc->vtable) {
+        Parrot_io_eprintf(debugger, "<!!no vtable!!>");
+        return;
+    }
+
     if (pmc->vtable->pmc_class == pmc) {
         STRING * const name = trace_class_name(interp, pmc);
         Parrot_io_eprintf(debugger, "Class=%Ss:PMC(%#p)", name, pmc);

Modified: branches/unshared_buffers/src/scheduler.c
==============================================================================
--- branches/unshared_buffers/src/scheduler.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/scheduler.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -111,8 +111,7 @@
 =item C<void Parrot_cx_handle_tasks(PARROT_INTERP, PMC *scheduler)>
 
 Handle the pending tasks in the scheduler's task list. Returns when there are
-no more pending tasks. Returns 0 to terminate the scheduler runloop, or 1 to
-continue the runloop.
+no more pending tasks.
 
 =cut
 
@@ -123,6 +122,12 @@
 Parrot_cx_handle_tasks(PARROT_INTERP, ARGMOD(PMC *scheduler))
 {
     ASSERT_ARGS(Parrot_cx_handle_tasks)
+
+    /* avoid recursive calls */
+    if (SCHEDULER_in_handler_TEST(scheduler))
+        return;
+
+    SCHEDULER_in_handler_SET(scheduler);
     SCHEDULER_wake_requested_CLEAR(scheduler);
     Parrot_cx_refresh_task_list(interp, scheduler);
 
@@ -159,6 +164,8 @@
             Parrot_cx_refresh_task_list(interp, scheduler);
 
     } /* end of pending tasks */
+
+    SCHEDULER_in_handler_CLEAR(scheduler);
 }
 
 /*

Modified: branches/unshared_buffers/src/string/api.c
==============================================================================
--- branches/unshared_buffers/src/string/api.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/api.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -353,8 +353,7 @@
 
     /* Clear COW flag. We own buffer */
     PObj_get_FLAGS(result)  = PObj_is_string_FLAG
-                            | PObj_is_COWable_FLAG
-                            | PObj_live_FLAG;
+                            | PObj_is_COWable_FLAG;
 
     /* Allocate new chunk of memory */
     Parrot_gc_allocate_string_storage(interp, result, alloc_size);
@@ -1085,6 +1084,111 @@
     return CHARSET_GET_CODEPOINTS(interp, src, true_offset, true_length);
 }
 
+/*
+
+=item C<STRING * Parrot_str_iter_substr(PARROT_INTERP, const STRING *str, const
+String_iter *l, const String_iter *r)>
+
+Returns the substring between iterators C<l> and C<r>.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+STRING *
+Parrot_str_iter_substr(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGIN(const String_iter *l), ARGIN_NULLOK(const String_iter *r))
+{
+    ASSERT_ARGS(Parrot_str_iter_substr)
+    UINTVAL flags = PObj_get_FLAGS(str) & ~PObj_constant_FLAG;
+    STRING * dest = Parrot_gc_new_string_header(interp, flags);
+    UINTVAL length, size;
+
+    if (r == NULL) {
+        size   = str->bufused - l->bytepos;
+        length = str->strlen  - l->charpos;
+    }
+    else {
+        size   = r->bytepos - l->bytepos;
+        length = r->charpos - l->charpos;
+    }
+
+    Parrot_gc_allocate_string_storage(interp, dest, size);
+    mem_sys_memcopy(Buffer_bufstart(dest), (char *)Buffer_bufstart(str) + l->bytepos, size);
+
+    dest->encoding = str->encoding;
+    dest->charset  = str->charset;
+    dest->strlen   = length;
+    dest->bufused  = size;
+    dest->hashval  = 0;
+
+    return dest;
+}
+
+/*
+
+=item C<INTVAL Parrot_str_iter_index(PARROT_INTERP, const STRING *src,
+String_iter *start, String_iter *end, const STRING *search)>
+
+Find the next occurence of STRING C<search> in STRING C<src> starting at
+String_iter C<start>. If C<search> is found C<start> is modified to mark the
+beginning of C<search> and String_iter C<end> is set to the character after
+C<search> in C<src>.  Returns the character position where C<search> was found
+or -1 if it wasn't found.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+INTVAL
+Parrot_str_iter_index(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    ARGMOD(String_iter *start), ARGOUT(String_iter *end),
+    ARGIN(const STRING *search))
+{
+    ASSERT_ARGS(Parrot_str_iter_index)
+    String_iter search_iter, search_start, next_start;
+    const UINTVAL len = search->strlen;
+    UINTVAL c0;
+
+    if (len == 0) {
+        *end = *start;
+        return start->charpos;
+    }
+
+    STRING_ITER_INIT(interp, &search_iter);
+    c0 = STRING_ITER_GET_AND_ADVANCE(interp, search, &search_iter);
+    search_start = search_iter;
+    next_start = *start;
+
+    while (start->charpos + len <= src->strlen) {
+        UINTVAL c1 = STRING_ITER_GET_AND_ADVANCE(interp, src, &next_start);
+
+        if (c1 == c0) {
+            UINTVAL c2;
+            *end = next_start;
+
+            do {
+                if (search_iter.charpos >= len)
+                    return start->charpos;
+                c1 = STRING_ITER_GET_AND_ADVANCE(interp, src, end);
+                c2 = STRING_ITER_GET_AND_ADVANCE(interp, search, &search_iter);
+            } while (c1 == c2);
+
+            search_iter = search_start;
+        }
+
+        *start = next_start;
+    }
+
+    return -1;
+}
+
 
 /*
 
@@ -1126,7 +1230,7 @@
     UINTVAL         true_offset = (UINTVAL)offset;
     UINTVAL         true_length = (UINTVAL)length;
 
-    UINTVAL         start_byte, end_byte;
+    UINTVAL         start_byte, end_byte, start_char, end_char;
     INTVAL          buf_size;
 
     if (STRING_IS_NULL(src)) {
@@ -1162,13 +1266,15 @@
     }
 
     /* get byte position of the part that will be replaced */
-    ENCODING_ITER_INIT(interp, src, &iter);
+    STRING_ITER_INIT(interp, &iter);
 
-    iter.set_position(interp, &iter, true_offset);
+    STRING_ITER_SET_POSITION(interp, src, &iter, true_offset);
     start_byte = iter.bytepos;
+    start_char = iter.charpos;
 
-    iter.set_position(interp, &iter, true_offset + true_length);
+    STRING_ITER_SKIP(interp, src, &iter, true_length);
     end_byte   = iter.bytepos;
+    end_char   = iter.charpos;
 
     /* not possible.... */
     if (end_byte < start_byte)
@@ -1185,8 +1291,7 @@
 
     /* Clear COW flag. We own buffer */
     PObj_get_FLAGS(dest) = PObj_is_string_FLAG
-                         | PObj_is_COWable_FLAG
-                         | PObj_live_FLAG;
+                         | PObj_is_COWable_FLAG;
 
             /* size            removed bytes            added bytes */
     buf_size = src->bufused - (end_byte - start_byte) + rep->bufused;
@@ -1207,7 +1312,7 @@
             (char *)Buffer_bufstart(src) + end_byte,
             src->bufused - end_byte);
 
-    dest->strlen  = CHARSET_CODEPOINTS(interp, dest);
+    dest->strlen  = src->strlen - (end_char - start_char) + rep->strlen;
     dest->hashval = 0;
 
     return dest;
@@ -1815,13 +1920,12 @@
         int                 sign      = 1;
         UINTVAL             i         = 0;
         String_iter         iter;
-        UINTVAL             offs;
         number_parse_state  state = parse_start;
 
-        ENCODING_ITER_INIT(interp, s, &iter);
+        STRING_ITER_INIT(interp, &iter);
 
-        for (offs = 0; (state != parse_end) && (offs < s->strlen); ++offs) {
-            const UINTVAL c = iter.get_and_advance(interp, &iter);
+        while (state != parse_end && iter.charpos < s->strlen) {
+            const UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, s, &iter);
             /* Check for overflow */
             if (c > 255)
                 break;
@@ -1911,17 +2015,16 @@
     int           d_length  = 0;
     int           check_nan = 0;    /* Check for NaN and Inf after main loop */
     String_iter iter;
-    UINTVAL     offs;
     number_parse_state state = parse_start;
 
     if (STRING_IS_NULL(s))
         return 0.0;
 
-    ENCODING_ITER_INIT(interp, s, &iter);
+    STRING_ITER_INIT(interp, &iter);
 
-    /* Handcrafter FSM to read float value */
-    for (offs = 0; (state != parse_end) && (offs < s->strlen); ++offs) {
-        const UINTVAL c = iter.get_and_advance(interp, &iter);
+    /* Handcrafted FSM to read float value */
+    while (state != parse_end && iter.charpos < s->strlen) {
+        const UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, s, &iter);
         /* Check for overflow */
         if (c > 255)
             break;
@@ -2286,13 +2389,15 @@
 
     size_t hashval = interp->hash_seed;
 
-    if ((!STRING_IS_NULL(s)) && s->strlen) {
-        if (s->encoding->hash)
-            hashval = ENCODING_HASH(interp, s, hashval);
-        else if (s->charset->compute_hash)
-            hashval = CHARSET_COMPUTE_HASH(interp, s, hashval);
-        else {
-            exit_fatal(1, "String subsystem not properly initialized");
+    if (!STRING_IS_NULL(s)) {
+        if (s->strlen) {
+            if (s->encoding->hash)
+                hashval = ENCODING_HASH(interp, s, hashval);
+            else if (s->charset->compute_hash)
+                hashval = CHARSET_COMPUTE_HASH(interp, s, hashval);
+            else {
+                exit_fatal(1, "String subsystem not properly initialized");
+            }
         }
 
         s->hashval = hashval;
@@ -2369,11 +2474,11 @@
             Parrot_fixed_8_encoding_ptr, Parrot_ascii_charset_ptr, 0);
 
     /* more work TODO */
-    ENCODING_ITER_INIT(interp, src, &iter);
+    STRING_ITER_INIT(interp, &iter);
     dp = (unsigned char *)Buffer_bufstart(result);
 
     for (i = 0; len > 0; --len) {
-        UINTVAL c = iter.get_and_advance(interp, &iter);
+        UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
         if (c < 0x7f) {
             /* process ASCII chars */
             if (i >= charlen - 2) {
@@ -2513,17 +2618,17 @@
     Parrot_gc_allocate_string_storage(interp, result, reserved);
     result->bufused = reserved;
 
-    src->encoding->iter_init(interp, src, &itersrc);
-    encoding->iter_init(interp, result, &iterdest);
+    STRING_ITER_INIT(interp, &itersrc);
+    STRING_ITER_INIT(interp, &iterdest);
     while (itersrc.bytepos < srclen) {
-        INTVAL c = itersrc.get_and_advance(interp, &itersrc);
+        INTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
         INTVAL next;
 
         do {
             pending = 0;
             next = c;
             if (c == '\\') {
-                c = itersrc.get_and_advance(interp, &itersrc);
+                c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                 switch (c) {
                 /* Common one char sequences */
                 case 'a': next = '\a'; break;
@@ -2533,10 +2638,10 @@
                 case 'v': next = '\v'; break;
                 case 'f': next = '\f'; break;
                 case 'r': next = '\r'; break;
-                case 'e': next = '\e'; break;
+                case 'e': next = '\x1B'; break;
                 /* Escape character */
                 case 'c':
-                    c = itersrc.get_and_advance(interp, &itersrc);
+                    c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                     /* This assumes ascii-alike encoding */
                     if (c < 'A' || c > 'Z')
                         throw_illegal_escape(interp);
@@ -2544,11 +2649,11 @@
                     break;
                 case 'x':
                     digcount = 0;
-                    c = itersrc.get_and_advance(interp, &itersrc);
+                    c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                     if (c == '{') {
                         /* \x{h..h} 1..8 hex digits */
                         while (itersrc.bytepos < srclen) {
-                            c = itersrc.get_and_advance(interp, &itersrc);
+                            c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                             if (c == '}')
                                 break;
                             if (!isxdigit(c))
@@ -2572,7 +2677,7 @@
                                 pending = 0;
                                 break;
                             }
-                            c = itersrc.get_and_advance(interp, &itersrc);
+                            c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                         }
                     }
                     if (digcount == 0)
@@ -2583,7 +2688,7 @@
                 case 'u':
                     /* \uhhhh 4 hex digits */
                     for (digcount = 0; digcount < 4; ++digcount) {
-                        c = itersrc.get_and_advance(interp, &itersrc);
+                        c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                         if (!isxdigit(c))
                             throw_illegal_escape(interp);
                         digbuf[digcount] = c;
@@ -2594,7 +2699,7 @@
                 case 'U':
                     /* \Uhhhhhhhh 8 hex digits */
                     for (digcount = 0; digcount < 8; ++digcount) {
-                        c = itersrc.get_and_advance(interp, &itersrc);
+                        c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                         if (!isxdigit(c))
                             throw_illegal_escape(interp);
                         digbuf[digcount] = c;
@@ -2607,7 +2712,7 @@
                     /* \ooo 1..3 oct digits */
                     digbuf[0] = c;
                     for (digcount = 1; digcount < 3; ++digcount) {
-                        c = itersrc.get_and_advance(interp, &itersrc);
+                        c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                         if (c < '0' || c > '7')
                             break;
                         digbuf[digcount] = c;
@@ -2621,7 +2726,7 @@
                     next = c;
                 }
             }
-            iterdest.set_and_advance(interp, &iterdest, next);
+            STRING_ITER_SET_AND_ADVANCE(interp, result, &iterdest, next);
         } while (pending);
     }
     result->bufused = iterdest.bytepos;
@@ -2702,7 +2807,7 @@
         encoding = result->encoding;
     }
 
-    encoding->iter_init(interp, result, &iter);
+    STRING_ITER_INIT(interp, &iter);
 
     for (offs = d = 0; offs < clength; ++offs) {
         r = (Parrot_UInt4)((unsigned char *)Buffer_bufstart(result))[offs];
@@ -2725,7 +2830,7 @@
         }
 
         PARROT_ASSERT(d < offs);
-        iter.set_and_advance(interp, &iter, r);
+        encoding->iter_set_and_advance(interp, result, &iter, r);
         ++d;
     }
 
@@ -3223,8 +3328,10 @@
     ARGIN_NULLOK(const STRING *delim), ARGIN_NULLOK(STRING *str))
 {
     ASSERT_ARGS(Parrot_str_split)
-    PMC    *res;
-    INTVAL  slen, dlen, ps, pe;
+    PMC     *res;
+    STRING  *tstr;
+    UINTVAL  slen, dlen;
+    String_iter iter;
 
     if (STRING_IS_NULL(delim) || STRING_IS_NULL(str))
         return PMCNULL;
@@ -3236,44 +3343,38 @@
     if (!slen)
         return res;
 
+    STRING_ITER_INIT(interp, &iter);
     dlen = Parrot_str_length(interp, delim);
 
     if (dlen == 0) {
-        int i;
         VTABLE_set_integer_native(interp, res, slen);
 
-        for (i = 0; i < slen; ++i) {
-            STRING * const p = Parrot_str_substr(interp, str, i, 1);
-            VTABLE_set_string_keyed_int(interp, res, i, p);
-        }
-
-        return res;
-    }
+        do {
+            const String_iter old_iter = iter;
 
-    pe = Parrot_str_find_index(interp, str, delim, 0);
+            STRING_ITER_SKIP(interp, str, &iter, 1);
+            tstr = Parrot_str_iter_substr(interp, str, &old_iter, &iter);
+            VTABLE_set_string_keyed_int(interp, res, old_iter.charpos, tstr);
+        } while (iter.charpos < slen);
 
-    if (pe < 0) {
-        VTABLE_push_string(interp, res, str);
         return res;
     }
 
-    ps = 0;
-
-    while (ps <= slen) {
-        const int      pl   = pe - ps;
-        STRING * const tstr = Parrot_str_substr(interp, str, ps, pl);
-
-        VTABLE_push_string(interp, res, tstr);
-        ps = pe + Parrot_str_length(interp, delim);
+    do {
+        String_iter start, end;
+        INTVAL pos;
 
-        if (ps > slen)
+        start = iter;
+        if (Parrot_str_iter_index(interp, str, &start, &end, delim) < 0)
             break;
 
-        pe = Parrot_str_find_index(interp, str, delim, ps);
+        tstr = Parrot_str_iter_substr(interp, str, &iter, &start);
+        VTABLE_push_string(interp, res, tstr);
+        iter = end;
+    } while (iter.charpos < slen);
 
-        if (pe < 0)
-            pe = slen;
-    }
+    tstr = Parrot_str_iter_substr(interp, str, &iter, NULL);
+    VTABLE_push_string(interp, res, tstr);
 
     return res;
 }

Modified: branches/unshared_buffers/src/string/charset/ascii.c
==============================================================================
--- branches/unshared_buffers/src/string/charset/ascii.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/charset/ascii.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -201,7 +201,6 @@
 {
     ASSERT_ARGS(to_ascii)
     String_iter iter;
-    UINTVAL offs;
     unsigned char *p;
     const UINTVAL len = src->strlen;
 
@@ -209,9 +208,9 @@
     STRING * const dest = Parrot_str_clone(interp, src);
 
     p = (unsigned char *)Buffer_bufstart(dest);
-    ENCODING_ITER_INIT(interp, src, &iter);
-    for (offs = 0; offs < len; ++offs) {
-        const UINTVAL c = iter.get_and_advance(interp, &iter);
+    STRING_ITER_INIT(interp, &iter);
+    while (iter.charpos < len) {
+        const UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
         if (c >= 128)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LOSSY_CONVERSION,
                     "can't convert unicode string to ascii");
@@ -493,11 +492,10 @@
             return ret_val < 0 ? -1 : 1;
     }
     else {
-        UINTVAL offs;
-        ENCODING_ITER_INIT(interp, rhs, &iter);
-        for (offs = 0; offs < min_len; ++offs) {
-            const UINTVAL cl = ENCODING_GET_BYTE(interp, lhs, offs);
-            const UINTVAL cr = iter.get_and_advance(interp, &iter);
+        STRING_ITER_INIT(interp, &iter);
+        while (iter.charpos < min_len) {
+            const UINTVAL cl = ENCODING_GET_BYTE(interp, lhs, iter.charpos);
+            const UINTVAL cr = STRING_ITER_GET_AND_ADVANCE(interp, rhs, &iter);
             if (cl != cr)
                 return cl < cr ? -1 : 1;
         }
@@ -531,35 +529,12 @@
     UINTVAL offs)
 {
     ASSERT_ARGS(mixed_cs_index)
+    String_iter start, end;
 
-    if (search->strlen <= src->strlen) {
-        String_iter src_iter, search_iter;
-        const UINTVAL maxpos = src->strlen - search->strlen + 1;
-        const UINTVAL cfirst = Parrot_str_indexed(interp, search, 0);
-
-        ENCODING_ITER_INIT(interp, src, &src_iter);
-        src_iter.set_position(interp, &src_iter, offs);
-        ENCODING_ITER_INIT(interp, search, &search_iter);
-
-        while (src_iter.charpos < maxpos) {
-            if (cfirst == src_iter.get_and_advance(interp, &src_iter)) {
-                const INTVAL next_pos = src_iter.charpos;
-                const INTVAL next_byte = src_iter.bytepos;
-                UINTVAL len;
-                search_iter.set_position(interp, &search_iter, 1);
-                for (len = search->strlen - 1; len; --len) {
-                    if ((src_iter.get_and_advance(interp, &src_iter)) !=
-                            (search_iter.get_and_advance(interp, &search_iter)))
-                        break;
-                }
-                if (len == 0)
-                    return next_pos - 1;
-                src_iter.charpos = next_pos;
-                src_iter.bytepos = next_byte;
-            }
-        }
-    }
-    return -1;
+    STRING_ITER_INIT(interp, &start);
+    STRING_ITER_SET_POSITION(interp, src, &start, offs);
+
+    return Parrot_str_iter_index(interp, src, &start, &end, search);
 }
 
 /*
@@ -638,13 +613,12 @@
 validate(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(validate)
-    INTVAL      offset;
     String_iter iter;
     const INTVAL length = Parrot_str_length(interp, src);
 
-    ENCODING_ITER_INIT(interp, src, &iter);
-    for (offset = 0; offset < length; ++offset) {
-        const UINTVAL codepoint = iter.get_and_advance(interp, &iter);
+    STRING_ITER_INIT(interp, &iter);
+    while (iter.charpos < length) {
+        const UINTVAL codepoint = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
         if (codepoint >= 0x80)
             return 0;
     }

Modified: branches/unshared_buffers/src/string/charset/iso-8859-1.c
==============================================================================
--- branches/unshared_buffers/src/string/charset/iso-8859-1.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/charset/iso-8859-1.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -178,24 +178,24 @@
 to_iso_8859_1(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_iso_8859_1)
-    UINTVAL offs, src_len;
+    UINTVAL src_len;
     String_iter iter;
     /* iso-8859-1 is never bigger then source */
     STRING * dest = Parrot_str_clone(interp, src);
 
-    ENCODING_ITER_INIT(interp, src, &iter);
+    STRING_ITER_INIT(interp, &iter);
     src_len = src->strlen;
     dest->bufused = src_len;
-    dest->charset = Parrot_iso_8859_1_charset_ptr;
-    dest->encoding = Parrot_fixed_8_encoding_ptr;
-    for (offs = 0; offs < src_len; ++offs) {
-        const UINTVAL c = iter.get_and_advance(interp, &iter);
+    while (iter.charpos < src_len) {
+        const UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
         if (c >= 0x100)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LOSSY_CONVERSION,
                 "lossy conversion to iso-8559-1");
 
-        ENCODING_SET_BYTE(interp, dest, offs, c);
+        Parrot_fixed_8_encoding_ptr->set_byte(interp, dest, iter.charpos - 1, c);
     }
+    dest->charset = Parrot_iso_8859_1_charset_ptr;
+    dest->encoding = Parrot_fixed_8_encoding_ptr;
     return dest;
 }
 
@@ -221,18 +221,18 @@
     dest->charset = Parrot_unicode_charset_ptr;
     dest->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, dest);
     Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-    ENCODING_ITER_INIT(interp, dest, &iter);
-    for (offs = 0; offs < src->strlen; ++offs) {
-        const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
+    STRING_ITER_INIT(interp, &iter);
+    while (iter.charpos < src->strlen) {
+        const UINTVAL c = ENCODING_GET_BYTE(interp, src, iter.charpos);
 
         if (iter.bytepos >= Buffer_buflen(dest) - 4) {
-            UINTVAL need = (UINTVAL)((src->strlen - offs) * 1.5);
+            UINTVAL need = (UINTVAL)((src->strlen - iter.charpos) * 1.5);
             if (need < 16)
                 need = 16;
             Parrot_gc_reallocate_string_storage(interp, dest,
                     Buffer_buflen(dest) + need);
         }
-        iter.set_and_advance(interp, &iter, c);
+        STRING_ITER_SET_AND_ADVANCE(interp, dest, &iter, c);
     }
     dest->bufused = iter.bytepos;
     dest->strlen  = iter.charpos;

Modified: branches/unshared_buffers/src/string/charset/unicode.c
==============================================================================
--- branches/unshared_buffers/src/string/charset/unicode.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/charset/unicode.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -651,20 +651,20 @@
 {
     ASSERT_ARGS(compare)
     String_iter l_iter, r_iter;
-    UINTVAL offs, cl, cr, min_len, l_len, r_len;
+    UINTVAL min_len, l_len, r_len;
 
     /* TODO make optimized equal - strings are equal length then already */
-    ENCODING_ITER_INIT(interp, lhs, &l_iter);
-    ENCODING_ITER_INIT(interp, rhs, &r_iter);
+    STRING_ITER_INIT(interp, &l_iter);
+    STRING_ITER_INIT(interp, &r_iter);
 
     l_len = lhs->strlen;
     r_len = rhs->strlen;
 
     min_len = l_len > r_len ? r_len : l_len;
 
-    for (offs = 0; offs < min_len; ++offs) {
-        cl = l_iter.get_and_advance(interp, &l_iter);
-        cr = r_iter.get_and_advance(interp, &r_iter);
+    while (l_iter.charpos < min_len) {
+        const UINTVAL cl = STRING_ITER_GET_AND_ADVANCE(interp, lhs, &l_iter);
+        const UINTVAL cr = STRING_ITER_GET_AND_ADVANCE(interp, rhs, &r_iter);
 
         if (cl != cr)
             return cl < cr ? -1 : 1;
@@ -716,13 +716,12 @@
 validate(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(validate)
-    INTVAL      offset;
     String_iter iter;
     const INTVAL length = Parrot_str_length(interp, src);
 
-    ENCODING_ITER_INIT(interp, src, &iter);
-    for (offset = 0; offset < length; ++offset) {
-        const UINTVAL codepoint = iter.get_and_advance(interp, &iter);
+    STRING_ITER_INIT(interp, &iter);
+    while (iter.charpos < length) {
+        const UINTVAL codepoint = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
         /* Check for Unicode non-characters */
         if (codepoint >= 0xfdd0
         && (codepoint <= 0xfdef || (codepoint & 0xfffe) == 0xfffe)
@@ -877,24 +876,22 @@
     ASSERT_ARGS(find_cclass)
     String_iter iter;
     UINTVAL     codepoint;
-    UINTVAL     pos = offset;
     UINTVAL     end = offset + count;
 
-    ENCODING_ITER_INIT(interp, src, &iter);
-
-    iter.set_position(interp, &iter, pos);
+    STRING_ITER_INIT(interp, &iter);
+    STRING_ITER_SET_POSITION(interp, src, &iter, offset);
 
     end = src->strlen < end ? src->strlen : end;
 
-    for (; pos < end; ++pos) {
-        codepoint = iter.get_and_advance(interp, &iter);
+    while (iter.charpos < end) {
+        codepoint = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
         if (codepoint >= 256) {
             if (u_iscclass(interp, codepoint, flags))
-                    return pos;
+                    return iter.charpos - 1;
         }
         else {
             if (Parrot_iso_8859_1_typetable[codepoint] & flags)
-                return pos;
+                return iter.charpos - 1;
         }
     }
 
@@ -920,37 +917,36 @@
     ASSERT_ARGS(find_not_cclass)
     String_iter iter;
     UINTVAL     codepoint;
-    UINTVAL     pos = offset;
     UINTVAL     end = offset + count;
     int         bit;
 
-    if (pos > src->strlen) {
+    if (offset > src->strlen) {
         /* XXX: Throw in this case? */
         return offset + count;
     }
 
-    ENCODING_ITER_INIT(interp, src, &iter);
+    STRING_ITER_INIT(interp, &iter);
 
-    if (pos)
-        iter.set_position(interp, &iter, pos);
+    if (offset)
+        STRING_ITER_SET_POSITION(interp, src, &iter, offset);
 
     end = src->strlen < end ? src->strlen : end;
 
     if (flags == enum_cclass_any)
         return end;
 
-    for (; pos < end; ++pos) {
-        codepoint = iter.get_and_advance(interp, &iter);
+    while (iter.charpos < end) {
+        codepoint = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
         if (codepoint >= 256) {
             for (bit = enum_cclass_uppercase;
                     bit <= enum_cclass_word ; bit <<= 1) {
                 if ((bit & flags) && !u_iscclass(interp, codepoint, bit))
-                    return pos;
+                    return iter.charpos - 1;
             }
         }
         else {
             if (!(Parrot_iso_8859_1_typetable[codepoint] & flags))
-                return pos;
+                return iter.charpos - 1;
         }
     }
 
@@ -978,8 +974,8 @@
 
     dest->strlen = 1;
 
-    ENCODING_ITER_INIT(interp, dest, &iter);
-    iter.set_and_advance(interp, &iter, codepoint);
+    STRING_ITER_INIT(interp, &iter);
+    STRING_ITER_SET_AND_ADVANCE(interp, dest, &iter, codepoint);
     dest->bufused = iter.bytepos;
 
     return dest;
@@ -1002,13 +998,12 @@
 {
     ASSERT_ARGS(compute_hash)
     String_iter iter;
-    UINTVAL     offs;
     size_t      hashval = seed;
 
-    ENCODING_ITER_INIT(interp, src, &iter);
+    STRING_ITER_INIT(interp, &iter);
 
-    for (offs = 0; offs < src->strlen; ++offs) {
-        const UINTVAL c = iter.get_and_advance(interp, &iter);
+    while (iter.charpos < src->strlen) {
+        const UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
         hashval += hashval << 5;
         hashval += c;
     }

Modified: branches/unshared_buffers/src/string/encoding/fixed_8.c
==============================================================================
--- branches/unshared_buffers/src/string/encoding/fixed_8.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/encoding/fixed_8.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -41,22 +41,46 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-static UINTVAL fixed8_get_next(PARROT_INTERP, ARGMOD(String_iter *iter))
+static UINTVAL fixed8_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGIN(const String_iter *iter),
+    INTVAL offset)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static UINTVAL fixed8_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *iter))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*iter);
 
-static void fixed8_set_next(PARROT_INTERP,
+static void fixed8_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str),
     ARGMOD(String_iter *iter),
     UINTVAL c)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*str)
         FUNC_MODIFIES(*iter);
 
-static void fixed8_set_position(SHIM_INTERP,
+static void fixed8_iter_set_position(SHIM_INTERP,
+    ARGIN(const STRING *str),
     ARGMOD(String_iter *iter),
     UINTVAL pos)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*iter);
+
+static void fixed8_iter_skip(SHIM_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *iter),
+    INTVAL skip)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*iter);
 
 static size_t fixed_8_hash(SHIM_INTERP,
@@ -95,13 +119,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void iter_init(SHIM_INTERP,
-    ARGIN(const STRING *src),
-    ARGOUT(String_iter *iter))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*iter);
-
 static void set_byte(PARROT_INTERP,
     ARGIN(const STRING *src),
     UINTVAL offset,
@@ -122,14 +139,24 @@
 #define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s) \
     , PARROT_ASSERT_ARG(typetable))
-#define ASSERT_ARGS_fixed8_get_next __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_fixed8_iter_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed8_iter_get_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(iter))
-#define ASSERT_ARGS_fixed8_set_next __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_fixed8_iter_set_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed8_iter_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed8_iter_skip __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(iter))
-#define ASSERT_ARGS_fixed8_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(iter))
 #define ASSERT_ARGS_fixed_8_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_get_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -143,9 +170,6 @@
 #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(src) \
-    , PARROT_ASSERT_ARG(iter))
 #define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -380,85 +404,105 @@
 
 /*
 
-=item C<static UINTVAL fixed8_get_next(PARROT_INTERP, String_iter *iter)>
+=item C<static UINTVAL fixed8_iter_get(PARROT_INTERP, const STRING *str, const
+String_iter *iter, INTVAL offset)>
 
-Moves the string iterator C<i> to the next codepoint.
+Get the character at C<iter> plus C<offset>.
 
 =cut
 
 */
 
 static UINTVAL
-fixed8_get_next(PARROT_INTERP, ARGMOD(String_iter *iter))
+fixed8_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGIN(const String_iter *iter), INTVAL offset)
 {
-    ASSERT_ARGS(fixed8_get_next)
-    const UINTVAL c = get_byte(interp, iter->str, iter->charpos++);
-    ++iter->bytepos;
-    return c;
+    ASSERT_ARGS(fixed8_iter_get)
+    return get_byte(interp, str, iter->charpos + offset);
 }
 
 /*
 
-=item C<static void fixed8_set_next(PARROT_INTERP, String_iter *iter, UINTVAL
-c)>
+=item C<static void fixed8_iter_skip(PARROT_INTERP, const STRING *str,
+String_iter *iter, INTVAL skip)>
 
-With the string iterator C<i>, appends the codepoint C<c> and advances to the
-next position in the string.
+Moves the string iterator C<i> by C<skip> characters.
 
 =cut
 
 */
 
 static void
-fixed8_set_next(PARROT_INTERP, ARGMOD(String_iter *iter), UINTVAL c)
+fixed8_iter_skip(SHIM_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *iter), INTVAL skip)
 {
-    ASSERT_ARGS(fixed8_set_next)
-    set_byte(interp, iter->str, iter->charpos++, c);
-    ++iter->bytepos;
+    ASSERT_ARGS(fixed8_iter_skip)
+    iter->bytepos += skip;
+    iter->charpos += skip;
+    PARROT_ASSERT(iter->bytepos <= Buffer_buflen(str));
 }
 
 /*
 
-=item C<static void fixed8_set_position(PARROT_INTERP, String_iter *iter,
-UINTVAL pos)>
+=item C<static UINTVAL fixed8_iter_get_and_advance(PARROT_INTERP, const STRING
+*str, String_iter *iter)>
 
-Moves the string iterator C<i> to the position C<n> in the string.
+Moves the string iterator C<i> to the next codepoint.
 
 =cut
 
 */
 
-static void
-fixed8_set_position(SHIM_INTERP, ARGMOD(String_iter *iter), UINTVAL pos)
+static UINTVAL
+fixed8_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *iter))
 {
-    ASSERT_ARGS(fixed8_set_position)
-    iter->bytepos = iter->charpos = pos;
-    PARROT_ASSERT(pos <= Buffer_buflen(iter->str));
+    ASSERT_ARGS(fixed8_iter_get_and_advance)
+    const UINTVAL c = get_byte(interp, str, iter->charpos++);
+    iter->bytepos++;
+    return c;
 }
 
-
 /*
 
-=item C<static void iter_init(PARROT_INTERP, const STRING *src, String_iter
-*iter)>
+=item C<static void fixed8_iter_set_and_advance(PARROT_INTERP, STRING *str,
+String_iter *iter, UINTVAL c)>
 
-Initializes for string C<src> the string iterator C<iter>.
+With the string iterator C<i>, appends the codepoint C<c> and advances to the
+next position in the string.
 
 =cut
 
 */
 
 static void
-iter_init(SHIM_INTERP, ARGIN(const STRING *src), ARGOUT(String_iter *iter))
+fixed8_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str), ARGMOD(String_iter *iter), UINTVAL c)
 {
-    ASSERT_ARGS(iter_init)
-    iter->str             = src;
-    iter->bytepos         = iter->charpos        = 0;
-    iter->get_and_advance = fixed8_get_next;
-    iter->set_and_advance = fixed8_set_next;
-    iter->set_position    = fixed8_set_position;
+    ASSERT_ARGS(fixed8_iter_set_and_advance)
+    set_byte(interp, str, iter->charpos++, c);
+    iter->bytepos++;
 }
 
+/*
+
+=item C<static void fixed8_iter_set_position(PARROT_INTERP, const STRING *str,
+String_iter *iter, UINTVAL pos)>
+
+Moves the string iterator C<i> to the position C<n> in the string.
+
+=cut
+
+*/
+
+static void
+fixed8_iter_set_position(SHIM_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *iter), UINTVAL pos)
+{
+    ASSERT_ARGS(fixed8_iter_set_position)
+    iter->bytepos = iter->charpos = pos;
+    PARROT_ASSERT(pos <= Buffer_buflen(str));
+}
 
 /*
 
@@ -514,9 +558,13 @@
         get_bytes,
         codepoints,
         bytes,
-        iter_init,
         find_cclass,
-        fixed_8_hash
+        fixed_8_hash,
+        fixed8_iter_get,
+        fixed8_iter_skip,
+        fixed8_iter_get_and_advance,
+        fixed8_iter_set_and_advance,
+        fixed8_iter_set_position
     };
 
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);

Modified: branches/unshared_buffers/src/string/encoding/ucs2.c
==============================================================================
--- branches/unshared_buffers/src/string/encoding/ucs2.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/encoding/ucs2.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -84,14 +84,6 @@
         __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),
@@ -104,26 +96,54 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static UINTVAL ucs2_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
+static size_t ucs2_hash(PARROT_INTERP,
+    ARGIN(const STRING *s),
+    size_t hashval)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static UINTVAL ucs2_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGIN(const String_iter *i),
+    INTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static UINTVAL ucs2_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *i))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
-static void ucs2_encode_and_advance(SHIM_INTERP,
+static void ucs2_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str),
     ARGMOD(String_iter *i),
     UINTVAL c)
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*str)
         FUNC_MODIFIES(*i);
 
-static size_t ucs2_hash(PARROT_INTERP,
-    ARGIN(const STRING *s),
-    size_t hashval)
+static void ucs2_iter_set_position(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *i),
+    UINTVAL n)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*i);
 
-static void ucs2_set_position(SHIM_INTERP,
+static void ucs2_iter_skip(PARROT_INTERP,
+    ARGIN(const STRING *str),
     ARGMOD(String_iter *i),
-    UINTVAL n)
+    INTVAL skip)
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -145,24 +165,34 @@
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
-#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_ucs2_decode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(i))
-#define ASSERT_ARGS_ucs2_encode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(i))
 #define ASSERT_ARGS_ucs2_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_ucs2_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs2_iter_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs2_iter_get_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs2_iter_set_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs2_iter_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs2_iter_skip __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -406,7 +436,55 @@
 
 /*
 
-=item C<static UINTVAL ucs2_decode_and_advance(PARROT_INTERP, String_iter *i)>
+=item C<static UINTVAL ucs2_iter_get(PARROT_INTERP, const STRING *str, const
+String_iter *i, INTVAL offset)>
+
+Get the character at C<i> + C<offset>.
+
+=cut
+
+*/
+
+static UINTVAL
+ucs2_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGIN(const String_iter *i), INTVAL offset)
+{
+    ASSERT_ARGS(ucs2_iter_get)
+    return get_codepoint(interp, str, i->charpos + offset);
+}
+
+/*
+
+=item C<static void ucs2_iter_skip(PARROT_INTERP, const STRING *str, String_iter
+*i, INTVAL skip)>
+
+Moves the string iterator C<i> by C<skip> characters.
+
+=cut
+
+*/
+
+static void
+ucs2_iter_skip(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i), INTVAL skip)
+{
+    ASSERT_ARGS(ucs2_iter_skip)
+    UNUSED(str);
+
+#if PARROT_HAS_ICU
+    i->charpos += skip;
+    i->bytepos += skip * sizeof (UChar);
+#else
+    UNUSED(i);
+    UNUSED(skip);
+    no_ICU_lib(interp);
+#endif
+}
+
+/*
+
+=item C<static UINTVAL ucs2_iter_get_and_advance(PARROT_INTERP, const STRING
+*str, String_iter *i)>
 
 Moves the string iterator C<i> to the next UCS-2 codepoint.
 
@@ -415,35 +493,34 @@
 */
 
 static UINTVAL
-ucs2_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
+ucs2_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i))
 {
-    ASSERT_ARGS(ucs2_decode_and_advance)
+    ASSERT_ARGS(ucs2_iter_get_and_advance)
 
 #if PARROT_HAS_ICU
-    const UChar * const s = (const UChar*) Buffer_bufstart(i->str);
+    UChar * const s = (UChar*) Buffer_bufstart(str);
     size_t pos = i->bytepos / sizeof (UChar);
 
     /* TODO either make sure that we don't go past end or use SAFE
      *      iter versions
      */
     const UChar c = s[pos++];
-    ++i->charpos;
+    i->charpos++;
     i->bytepos = pos * sizeof (UChar);
     return c;
 #else
-    /* This function must never be called if compiled without ICU.
-     * See TT #557
-     */
-    PARROT_ASSERT(0);
+    UNUSED(str);
     UNUSED(i);
+    no_ICU_lib(interp);
     return (UINTVAL)0; /* Stop the static analyzers from panicing */
 #endif
 }
 
 /*
 
-=item C<static void ucs2_encode_and_advance(PARROT_INTERP, String_iter *i,
-UINTVAL c)>
+=item C<static void ucs2_iter_set_and_advance(PARROT_INTERP, STRING *str,
+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.
@@ -453,64 +530,29 @@
 */
 
 static void
-ucs2_encode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL c)
+ucs2_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str), ARGMOD(String_iter *i), UINTVAL c)
 {
-    ASSERT_ARGS(ucs2_encode_and_advance)
+    ASSERT_ARGS(ucs2_iter_set_and_advance)
 
 #if PARROT_HAS_ICU
-    UChar    *s = (UChar*) Buffer_bufstart(i->str);
+    UChar * const s = (UChar*) Buffer_bufstart(str);
     UINTVAL pos = i->bytepos / sizeof (UChar);
-    s[pos++]    = (UChar)c;
-    ++i->charpos;
+    s[pos++] = (UChar)c;
+    i->charpos++;
     i->bytepos = pos * sizeof (UChar);
 #else
-    /* This function must never be called if compiled without ICU.
-     * See TT #557
-     */
+    UNUSED(str);
     UNUSED(i);
     UNUSED(c);
-    PARROT_ASSERT(0);
-#endif
-}
-
-/*
-
-=item C<static size_t ucs2_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
-ucs2_hash(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval)
-{
-    ASSERT_ARGS(ucs2_hash)
-#if PARROT_HAS_ICU
-    const UChar *pos = (const UChar*) Buffer_bufstart(s);
-    UINTVAL len = s->strlen;
-    UNUSED(interp);
-
-    while (len--) {
-        hashval += hashval << 5;
-        hashval += *(pos++);
-    }
-
-    return hashval;
-
-#else
-    UNUSED(s);
-    UNUSED(hashval);
-
     no_ICU_lib(interp);
 #endif
 }
 
-
 /*
 
-=item C<static void ucs2_set_position(PARROT_INTERP, String_iter *i, UINTVAL n)>
+=item C<static void ucs2_iter_set_position(PARROT_INTERP, const STRING *str,
+String_iter *i, UINTVAL n)>
 
 Moves the string iterator C<i> to the position C<n> in the string.
 
@@ -519,50 +561,52 @@
 */
 
 static void
-ucs2_set_position(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL n)
+ucs2_iter_set_position(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i), UINTVAL n)
 {
-    ASSERT_ARGS(ucs2_set_position)
+    ASSERT_ARGS(ucs2_iter_set_position)
+    UNUSED(str);
 
 #if PARROT_HAS_ICU
     i->charpos = n;
     i->bytepos = n * sizeof (UChar);
 #else
-    /* This function must never be called if compiled without ICU.
-     * See TT #557
-     */
     UNUSED(i);
     UNUSED(n);
-    PARROT_ASSERT(0);
+    no_ICU_lib(interp);
 #endif
 }
 
-
 /*
 
-=item C<static void iter_init(PARROT_INTERP, const STRING *src, String_iter
-*iter)>
+=item C<static size_t ucs2_hash(PARROT_INTERP, const STRING *s, size_t hashval)>
 
-Initializes for string C<src> the string iterator C<iter>.
+Returns the hashed value of the string, given a seed in hashval.
 
 =cut
 
 */
 
-static void
-iter_init(PARROT_INTERP, ARGIN(const STRING *src), ARGOUT(String_iter *iter))
+static size_t
+ucs2_hash(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval)
 {
-    ASSERT_ARGS(iter_init)
+    ASSERT_ARGS(ucs2_hash)
 #if PARROT_HAS_ICU
+    const UChar *pos = (const UChar*) Buffer_bufstart(s);
+    UINTVAL len = s->strlen;
     UNUSED(interp);
-    iter->str             = src;
-    iter->bytepos         = 0;
-    iter->charpos         = 0;
-    iter->get_and_advance = ucs2_decode_and_advance;
-    iter->set_and_advance = ucs2_encode_and_advance;
-    iter->set_position    = ucs2_set_position;
+
+    while (len--) {
+        hashval += hashval << 5;
+        hashval += *(pos++);
+    }
+
+    return hashval;
+
 #else
-    UNUSED(src);
-    UNUSED(iter);
+    UNUSED(s);
+    UNUSED(hashval);
+
     no_ICU_lib(interp);
 #endif
 }
@@ -594,9 +638,13 @@
         get_bytes,
         codepoints,
         bytes,
-        iter_init,
         find_cclass,
-        ucs2_hash
+        ucs2_hash,
+        ucs2_iter_get,
+        ucs2_iter_skip,
+        ucs2_iter_get_and_advance,
+        ucs2_iter_set_and_advance,
+        ucs2_iter_set_position
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "ucs2", return_encoding);

Modified: branches/unshared_buffers/src/string/encoding/ucs4.c
==============================================================================
--- branches/unshared_buffers/src/string/encoding/ucs4.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/encoding/ucs4.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -84,14 +84,6 @@
         __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),
@@ -104,30 +96,54 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static UINTVAL ucs4_decode_and_advance(PARROT_INTERP,
+static size_t ucs4_hash(PARROT_INTERP,
+    ARGIN(const STRING *s),
+    size_t hashval)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static UINTVAL ucs4_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGIN(const String_iter *i),
+    INTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static UINTVAL ucs4_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str),
     ARGMOD(String_iter *i))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
-static void ucs4_encode_and_advance(PARROT_INTERP,
+static void ucs4_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str),
     ARGMOD(String_iter *i),
     UINTVAL c)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*str)
         FUNC_MODIFIES(*i);
 
-static size_t ucs4_hash(PARROT_INTERP,
-    ARGIN(const STRING *s),
-    size_t hashval)
+static void ucs4_iter_set_position(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *i),
+    UINTVAL n)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*i);
 
-static void ucs4_set_position(PARROT_INTERP,
+static void ucs4_iter_skip(PARROT_INTERP,
+    ARGIN(const STRING *str),
     ARGMOD(String_iter *i),
-    UINTVAL n)
+    INTVAL skip)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -149,26 +165,33 @@
 #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 = (\
+#define ASSERT_ARGS_ucs4_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_ucs4_iter_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(i))
-#define ASSERT_ARGS_ucs4_encode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_ucs4_iter_get_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(i))
-#define ASSERT_ARGS_ucs4_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_ucs4_iter_set_and_advance __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(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs4_iter_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs4_iter_skip __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(i))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
@@ -203,7 +226,7 @@
         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 *) Buffer_bufstart(res);
+        UChar32 *buf = (UChar32*) Buffer_bufstart(res);
         UINTVAL offs;
         for (offs = 0; offs < len; offs++){
             buf[offs] = src->encoding->get_codepoint(interp, src, offs);
@@ -432,90 +455,115 @@
 
 /*
 
-=item C<static UINTVAL ucs4_decode_and_advance(PARROT_INTERP, String_iter *i)>
+=item C<static UINTVAL ucs4_iter_get(PARROT_INTERP, const STRING *str, const
+String_iter *i, INTVAL offset)>
 
-Moves the string iterator C<i> to the next UCS-4 codepoint.
+Get the character at C<i> + C<offset>.
 
 =cut
 
 */
 
 static UINTVAL
-ucs4_decode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i))
+ucs4_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGIN(const String_iter *i), INTVAL offset)
+{
+    ASSERT_ARGS(ucs4_iter_get)
+    return get_codepoint(interp, str, i->charpos + offset);
+}
+
+/*
+
+=item C<static void ucs4_iter_skip(PARROT_INTERP, const STRING *str, String_iter
+*i, INTVAL skip)>
+
+Moves the string iterator C<i> by C<skip> characters.
+
+=cut
+
+*/
+
+static void
+ucs4_iter_skip(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i), INTVAL skip)
 {
-    ASSERT_ARGS(ucs4_decode_and_advance)
+    ASSERT_ARGS(ucs4_iter_skip)
+    UNUSED(str);
+
 #if PARROT_HAS_ICU
-    const UChar32 * const s = (const UChar32 *) Buffer_bufstart(i->str);
-    size_t pos              = i->bytepos / sizeof (UChar32);
-    const UChar32         c = s[pos++];
-    ++i->charpos;
-    i->bytepos = pos * sizeof (UChar32);
-    return c;
+    i->charpos += skip;
+    i->bytepos += skip * sizeof (UChar32);
 #else
     UNUSED(i);
+    UNUSED(skip);
     no_ICU_lib(interp);
 #endif
 }
 
 /*
 
-=item C<static void ucs4_encode_and_advance(PARROT_INTERP, String_iter *i,
-UINTVAL c)>
+=item C<static UINTVAL ucs4_iter_get_and_advance(PARROT_INTERP, const STRING
+*str, String_iter *i)>
 
-With the string iterator C<i>, appends the codepoint C<c> and advances to the
-next position in the string.
+Moves the string iterator C<i> to the next codepoint.
 
 =cut
 
 */
 
-static void
-ucs4_encode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL c)
+static UINTVAL
+ucs4_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i))
 {
-    ASSERT_ARGS(ucs4_encode_and_advance)
+    ASSERT_ARGS(ucs4_iter_get_and_advance)
+
 #if PARROT_HAS_ICU
-    UChar32 *s   = (UChar32 *) Buffer_bufstart(i->str);
-    size_t   pos = i->bytepos / sizeof (UChar32);
-    s[pos++] = (UChar32) c;
-    ++i->charpos;
-    i->bytepos = pos * sizeof (UChar32);
+    const UChar32 * const s = (const UChar32*) Buffer_bufstart(str);
+    const UChar32 c = s[i->charpos++];
+    i->bytepos += sizeof (UChar32);
+    return c;
 #else
+    UNUSED(str);
     UNUSED(i);
     no_ICU_lib(interp);
+    return (UINTVAL)0; /* Stop the static analyzers from panicing */
 #endif
 }
 
-#if PARROT_HAS_ICU
 /*
 
-=item C<static size_t ucs4_hash(PARROT_INTERP, const STRING *s, size_t hashval)>
+=item C<static void ucs4_iter_set_and_advance(PARROT_INTERP, STRING *str,
+String_iter *i, UINTVAL c)>
 
-Returns the hashed value of the string, given a seed in hashval.
+With the string iterator C<i>, appends the codepoint C<c> and advances to the
+next position in the string.
 
 =cut
 
 */
 
-static size_t
-ucs4_hash(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval)
+static void
+ucs4_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str), ARGMOD(String_iter *i), UINTVAL c)
 {
-    ASSERT_ARGS(ucs4_hash)
-    const UChar32 *pos = (const UChar32*) Buffer_bufstart(s);
-    UINTVAL len = s->strlen;
-    UNUSED(interp);
-
-    while (len--) {
-        hashval += hashval << 5;
-        hashval += *(pos++);
-    }
+    ASSERT_ARGS(ucs4_iter_set_and_advance)
 
-    return hashval;
-}
+#if PARROT_HAS_ICU
+    UChar32 * const s = (UChar32*) Buffer_bufstart(str);
+    s[i->charpos++] = (UChar32)c;
+    i->bytepos += sizeof (UChar32);
+#else
+    UNUSED(str);
+    UNUSED(i);
+    UNUSED(c);
+    no_ICU_lib(interp);
 #endif
+}
 
 /*
 
-=item C<static void ucs4_set_position(PARROT_INTERP, String_iter *i, UINTVAL n)>
+=item C<static void ucs4_iter_set_position(PARROT_INTERP, const STRING *str,
+String_iter *i, UINTVAL n)>
 
 Moves the string iterator C<i> to the position C<n> in the string.
 
@@ -524,9 +572,12 @@
 */
 
 static void
-ucs4_set_position(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL n)
+ucs4_iter_set_position(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i), UINTVAL n)
 {
-    ASSERT_ARGS(ucs4_set_position)
+    ASSERT_ARGS(ucs4_iter_set_position)
+    UNUSED(str);
+
 #if PARROT_HAS_ICU
     i->charpos = n;
     i->bytepos = n * sizeof (UChar32);
@@ -537,36 +588,33 @@
 #endif
 }
 
-
+#if PARROT_HAS_ICU
 /*
 
-=item C<static void iter_init(PARROT_INTERP, const STRING *src, String_iter
-*iter)>
+=item C<static size_t ucs4_hash(PARROT_INTERP, const STRING *s, size_t hashval)>
 
-Initializes for string C<src> the string iterator C<iter>.
+Returns the hashed value of the string, given a seed in hashval.
 
 =cut
 
 */
 
-static void
-iter_init(PARROT_INTERP, ARGIN(const STRING *src), ARGOUT(String_iter *iter))
+static size_t
+ucs4_hash(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval)
 {
-    ASSERT_ARGS(iter_init)
-#if PARROT_HAS_ICU
+    ASSERT_ARGS(ucs4_hash)
+    const UChar32 *pos = (const UChar32*) Buffer_bufstart(s);
+    UINTVAL len = s->strlen;
     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
+
+    while (len--) {
+        hashval += hashval << 5;
+        hashval += *(pos++);
+    }
+
+    return hashval;
 }
+#endif
 
 /*
 
@@ -595,13 +643,17 @@
         get_bytes,
         codepoints,
         bytes,
-        iter_init,
         find_cclass,
 #if PARROT_HAS_ICU
-        ucs4_hash
+        ucs4_hash,
 #else
-        NULL
+        NULL,
 #endif
+        ucs4_iter_get,
+        ucs4_iter_skip,
+        ucs4_iter_get_and_advance,
+        ucs4_iter_set_and_advance,
+        ucs4_iter_set_position
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "ucs4", return_encoding);

Modified: branches/unshared_buffers/src/string/encoding/utf16.c
==============================================================================
--- branches/unshared_buffers/src/string/encoding/utf16.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/encoding/utf16.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -75,14 +75,6 @@
         __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,
     ARGIN(const STRING *src),
     UINTVAL offset,
@@ -96,21 +88,49 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+static UINTVAL utf16_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGIN(const String_iter *i),
+    INTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL utf16_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
+static UINTVAL utf16_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *i))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
-static void utf16_encode_and_advance(SHIM_INTERP,
+static void utf16_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str),
     ARGMOD(String_iter *i),
     UINTVAL c)
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*str)
         FUNC_MODIFIES(*i);
 
-static void utf16_set_position(SHIM_INTERP,
+static void utf16_iter_set_position(PARROT_INTERP,
+    ARGIN(const STRING *str),
     ARGMOD(String_iter *i),
     UINTVAL n)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*i);
+
+static void utf16_iter_skip(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *i),
+    INTVAL skip)
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -133,22 +153,32 @@
 #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) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_utf16_decode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(i))
-#define ASSERT_ARGS_utf16_encode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(i))
-#define ASSERT_ARGS_utf16_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf16_iter_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf16_iter_get_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf16_iter_set_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf16_iter_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf16_iter_skip __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -377,24 +407,24 @@
 get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_codepoints)
+    UChar const * const s = (UChar*) Buffer_bufstart(src);
     const UINTVAL flags = PObj_get_FLAGS(src) & ~PObj_constant_FLAG;
     STRING * const dst  = Parrot_gc_new_string_header(interp, flags);
-    String_iter    iter;
-    UINTVAL        start, size;
+    UINTVAL       start = 0;
+    UINTVAL end, size;
 
-    iter_init(interp, src, &iter);
-    iter.set_position(interp, &iter, offset);
-    start = iter.bytepos;
-    iter.set_position(interp, &iter, offset + count);
-    size = iter.bytepos - start;
+    U16_FWD_N_UNSAFE(s, start, offset);
+    end = start;
+    U16_FWD_N_UNSAFE(s, end, count);
 
+    size = (end - start) * sizeof (UChar);
 
     if (!(flags & PObj_external_FLAG)){
         Parrot_gc_allocate_string_storage(interp, dst, size);
-        mem_sys_memcopy(Buffer_bufstart(dst), Buffer_bufstart(src) + start, size);
+        mem_sys_memcopy(Buffer_bufstart(dst), s + start, size);
     }
     else {
-        Buffer_bufstart(dst) = Buffer_bufstart(src) + start;
+        Buffer_bufstart(dst) = s + start;
         Buffer_buflen(dst)   = 0;
     }
 
@@ -446,15 +476,24 @@
 codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
-    String_iter iter;
+#if PARROT_HAS_ICU
+    const UChar * const s = (UChar*) Buffer_bufstart(src);
+    UINTVAL pos = 0, charpos = 0;
     /*
      * this is used to initially calculate src->strlen,
      * therefore we must scan the whole string
      */
-    iter_init(interp, src, &iter);
-    while (iter.bytepos < src->bufused)
-        iter.get_and_advance(interp, &iter);
-    return iter.charpos;
+    while (pos * sizeof (UChar) < src->bufused) {
+        U16_FWD_1_UNSAFE(s, pos);
+        ++charpos;
+    }
+    return charpos;
+#else
+    UNUSED(src);
+
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
 }
 
 /*
@@ -475,106 +514,184 @@
     return src->bufused;
 }
 
-#if PARROT_HAS_ICU
 /*
 
-=item C<static UINTVAL utf16_decode_and_advance(PARROT_INTERP, String_iter *i)>
+=item C<static UINTVAL utf16_iter_get(PARROT_INTERP, const STRING *str, const
+String_iter *i, INTVAL offset)>
 
-Moves the string iterator C<i> to the next UTF-16 codepoint.
+Get the character at C<i> plus C<offset>.
 
 =cut
 
 */
 
-PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-utf16_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
+utf16_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGIN(const String_iter *i), INTVAL offset)
 {
-    ASSERT_ARGS(utf16_decode_and_advance)
-    const UChar * const s = (const UChar*) Buffer_bufstart(i->str);
-    UINTVAL pos = i->bytepos / sizeof (UChar);
-    UINTVAL c;
+    ASSERT_ARGS(utf16_iter_get)
+#if PARROT_HAS_ICU
+    const UChar * const s = (UChar*) Buffer_bufstart(str);
+    UINTVAL c, pos;
+
+    pos = i->bytepos / sizeof (UChar);
+    if (offset > 0) {
+        U16_FWD_N_UNSAFE(s, pos, offset);
+    }
+    else if (offset < 0) {
+        U16_BACK_N_UNSAFE(s, pos, -offset);
+    }
+    U16_GET_UNSAFE(s, pos, c);
 
-    /* TODO either make sure that we don't go past end or use SAFE
-     *      iter versions
-     */
-    U16_NEXT_UNSAFE(s, pos, c);
-    ++i->charpos;
-    i->bytepos = pos * sizeof (UChar);
     return c;
+#else
+    UNUSED(str);
+    UNUSED(i);
+    UNUSED(offset);
+
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
 }
 
 /*
 
-=item C<static void utf16_encode_and_advance(PARROT_INTERP, String_iter *i,
-UINTVAL c)>
+=item C<static void utf16_iter_skip(PARROT_INTERP, const STRING *str,
+String_iter *i, INTVAL skip)>
 
-With the string iterator C<i>, appends the codepoint C<c> and advances to the
-next position in the string.
+Moves the string iterator C<i> by C<skip> characters.
 
 =cut
 
 */
 
 static void
-utf16_encode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL c)
+utf16_iter_skip(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i), INTVAL skip)
 {
-    ASSERT_ARGS(utf16_encode_and_advance)
-    UChar * const s = (UChar*) Buffer_bufstart(i->str);
+    ASSERT_ARGS(utf16_iter_skip)
+#if PARROT_HAS_ICU
+    const UChar * const s = (UChar*) Buffer_bufstart(str);
     UINTVAL pos = i->bytepos / sizeof (UChar);
-    U16_APPEND_UNSAFE(s, pos, c);
-    ++i->charpos;
+
+    if (skip > 0) {
+        U16_FWD_N_UNSAFE(s, pos, skip);
+    }
+    else if (skip < 0) {
+        U16_BACK_N_UNSAFE(s, pos, -skip);
+    }
+
+    i->charpos += skip;
     i->bytepos = pos * sizeof (UChar);
+#else
+    UNUSED(str);
+    UNUSED(i);
+    UNUSED(skip);
+
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
 }
 
 /*
 
-=item C<static void utf16_set_position(PARROT_INTERP, String_iter *i, UINTVAL
-n)>
+=item C<static UINTVAL utf16_iter_get_and_advance(PARROT_INTERP, const STRING
+*str, String_iter *i)>
 
-Moves the string iterator C<i> to the position C<n> in the string.
+Moves the string iterator C<i> to the next UTF-16 codepoint.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL
+utf16_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i))
+{
+    ASSERT_ARGS(utf16_iter_get_and_advance)
+#if PARROT_HAS_ICU
+    const UChar * const s = (UChar*) Buffer_bufstart(str);
+    UINTVAL c, pos;
+    pos = i->bytepos / sizeof (UChar);
+    /* TODO either make sure that we don't go past end or use SAFE
+     *      iter versions
+     */
+    U16_NEXT_UNSAFE(s, pos, c);
+    i->charpos++;
+    i->bytepos = pos * sizeof (UChar);
+    return c;
+#else
+    UNUSED(str);
+    UNUSED(i);
+
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
+}
+
+/*
+
+=item C<static void utf16_iter_set_and_advance(PARROT_INTERP, STRING *str,
+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
-utf16_set_position(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL n)
+utf16_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str), ARGMOD(String_iter *i), UINTVAL c)
 {
-    ASSERT_ARGS(utf16_set_position)
-    UChar * const s = (UChar*) Buffer_bufstart(i->str);
+    ASSERT_ARGS(utf16_iter_set_and_advance)
+#if PARROT_HAS_ICU
+    UChar * const s = (UChar*) Buffer_bufstart(str);
     UINTVAL pos;
-    pos = 0;
-    U16_FWD_N_UNSAFE(s, pos, n);
-    i->charpos = n;
+    pos = i->bytepos / sizeof (UChar);
+    U16_APPEND_UNSAFE(s, pos, c);
+    i->charpos++;
     i->bytepos = pos * sizeof (UChar);
-}
+#else
+    UNUSED(str);
+    UNUSED(i);
+    UNUSED(c);
 
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
 #endif
+}
 
 /*
 
-=item C<static void iter_init(PARROT_INTERP, const STRING *src, String_iter
-*iter)>
+=item C<static void utf16_iter_set_position(PARROT_INTERP, const STRING *str,
+String_iter *i, UINTVAL n)>
 
-Initializes for string C<src> the string iterator C<iter>.
+Moves the string iterator C<i> to the position C<n> in the string.
 
 =cut
 
 */
 
 static void
-iter_init(PARROT_INTERP, ARGIN(const STRING *src), ARGOUT(String_iter *iter))
+utf16_iter_set_position(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i), UINTVAL n)
 {
-    ASSERT_ARGS(iter_init)
-    iter->str = src;
-    iter->bytepos = iter->charpos = 0;
+    ASSERT_ARGS(utf16_iter_set_position)
 #if PARROT_HAS_ICU
-    UNUSED(interp);
-    iter->get_and_advance = utf16_decode_and_advance;
-    iter->set_and_advance = utf16_encode_and_advance;
-    iter->set_position =    utf16_set_position;
+    UChar * const s = (UChar*) Buffer_bufstart(str);
+    UINTVAL pos;
+    pos = 0;
+    U16_FWD_N_UNSAFE(s, pos, n);
+    i->charpos = n;
+    i->bytepos = pos * sizeof (UChar);
 #else
+    UNUSED(str);
+    UNUSED(i);
+    UNUSED(n);
+
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no ICU lib loaded");
 #endif
@@ -607,9 +724,13 @@
         get_bytes,
         codepoints,
         bytes,
-        iter_init,
         find_cclass,
-        NULL
+        NULL,
+        utf16_iter_get,
+        utf16_iter_skip,
+        utf16_iter_get_and_advance,
+        utf16_iter_set_and_advance,
+        utf16_iter_set_position
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "utf16", return_encoding);

Modified: branches/unshared_buffers/src/string/encoding/utf8.c
==============================================================================
--- branches/unshared_buffers/src/string/encoding/utf8.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/encoding/utf8.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -71,13 +71,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void iter_init(SHIM_INTERP,
-    ARGIN(const STRING *src),
-    ARGOUT(String_iter *iter))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*iter);
-
 static void set_byte(PARROT_INTERP,
     ARGIN(const STRING *src),
     UINTVAL offset,
@@ -100,28 +93,51 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static UINTVAL utf8_decode_and_advance(PARROT_INTERP,
-    ARGMOD(String_iter *i))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*i);
-
 PARROT_CANNOT_RETURN_NULL
 static void * utf8_encode(PARROT_INTERP, ARGIN(void *ptr), UINTVAL c)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void utf8_encode_and_advance(PARROT_INTERP,
+static UINTVAL utf8_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGIN(const String_iter *i),
+    INTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static UINTVAL utf8_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *i))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*i);
+
+static void utf8_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str),
     ARGMOD(String_iter *i),
     UINTVAL c)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*str)
         FUNC_MODIFIES(*i);
 
-static void utf8_set_position(SHIM_INTERP,
+static void utf8_iter_set_position(SHIM_INTERP,
+    ARGIN(const STRING *str),
     ARGMOD(String_iter *i),
     UINTVAL pos)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*i);
+
+static void utf8_iter_skip(SHIM_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *i),
+    INTVAL skip)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
 PARROT_WARN_UNUSED_RESULT
@@ -151,9 +167,6 @@
 #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(src) \
-    , PARROT_ASSERT_ARG(iter))
 #define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -166,17 +179,27 @@
 #define ASSERT_ARGS_utf8_decode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ptr))
-#define ASSERT_ARGS_utf8_decode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(i))
 #define ASSERT_ARGS_utf8_encode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ptr))
-#define ASSERT_ARGS_utf8_encode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_utf8_iter_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf8_iter_get_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf8_iter_set_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf8_iter_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf8_iter_skip __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(i))
-#define ASSERT_ARGS_utf8_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(i))
 #define ASSERT_ARGS_utf8_skip_backward __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(ptr))
 #define ASSERT_ARGS_utf8_skip_forward __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -387,7 +410,65 @@
 
 /*
 
-=item C<static UINTVAL utf8_decode_and_advance(PARROT_INTERP, String_iter *i)>
+=item C<static UINTVAL utf8_iter_get(PARROT_INTERP, const STRING *str, const
+String_iter *i, INTVAL offset)>
+
+Get the character at C<i> plus C<offset>.
+
+=cut
+
+*/
+
+static UINTVAL
+utf8_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGIN(const String_iter *i), INTVAL offset)
+{
+    ASSERT_ARGS(utf8_iter_get)
+    const utf8_t *u8ptr = (utf8_t *)((char *)Buffer_bufstart(str) + i->bytepos);
+
+    if (offset > 0) {
+        u8ptr = (const utf8_t *)utf8_skip_forward(u8ptr, offset);
+    }
+    else if (offset < 0) {
+        u8ptr = (const utf8_t *)utf8_skip_backward(u8ptr, -offset);
+    }
+
+    return utf8_decode(interp, u8ptr);
+}
+
+/*
+
+=item C<static void utf8_iter_skip(PARROT_INTERP, const STRING *str, String_iter
+*i, INTVAL skip)>
+
+Moves the string iterator C<i> by C<skip> characters.
+
+=cut
+
+*/
+
+static void
+utf8_iter_skip(SHIM_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i), INTVAL skip)
+{
+    ASSERT_ARGS(utf8_iter_skip)
+    const utf8_t *u8ptr = (utf8_t *)((char *)Buffer_bufstart(str) + i->bytepos);
+
+    if (skip > 0) {
+        u8ptr = (const utf8_t *)utf8_skip_forward(u8ptr, skip);
+    }
+    else if (skip < 0) {
+        u8ptr = (const utf8_t *)utf8_skip_backward(u8ptr, -skip);
+    }
+
+    i->charpos += skip;
+    i->bytepos = (const char *)u8ptr - (const char *)Buffer_bufstart(str);
+}
+
+/*
+
+=item C<static UINTVAL utf8_iter_get_and_advance(PARROT_INTERP, const STRING
+*str, String_iter *i)>
 
 The UTF-8 implementation of the string iterator's C<get_and_advance>
 function.
@@ -397,10 +478,11 @@
 */
 
 static UINTVAL
-utf8_decode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i))
+utf8_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i))
 {
-    ASSERT_ARGS(utf8_decode_and_advance)
-    const utf8_t *u8ptr = (utf8_t *)((char *)Buffer_bufstart(i->str) + i->bytepos);
+    ASSERT_ARGS(utf8_iter_get_and_advance)
+    const utf8_t *u8ptr = (utf8_t *)((char *)Buffer_bufstart(str) + i->bytepos);
     UINTVAL c = *u8ptr;
 
     if (UTF8_IS_START(c)) {
@@ -408,13 +490,12 @@
 
         c &= UTF8_START_MASK(len);
         i->bytepos += len;
-        for (--len; len; --len) {
-            ++u8ptr;
+        for (len--; len; len--) {
+            u8ptr++;
 
             if (!UTF8_IS_CONTINUATION(*u8ptr))
                 Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_UTF8,
                     "Malformed UTF-8 string\n");
-
             c = UTF8_ACCUMULATE(c, *u8ptr);
         }
 
@@ -427,17 +508,17 @@
             "Malformed UTF-8 string\n");
     }
     else {
-        ++i->bytepos;
+        i->bytepos++;
     }
 
-    ++i->charpos;
+    i->charpos++;
     return c;
 }
 
 /*
 
-=item C<static void utf8_encode_and_advance(PARROT_INTERP, String_iter *i,
-UINTVAL c)>
+=item C<static void utf8_iter_set_and_advance(PARROT_INTERP, STRING *str,
+String_iter *i, UINTVAL c)>
 
 The UTF-8 implementation of the string iterator's C<set_and_advance>
 function.
@@ -447,23 +528,23 @@
 */
 
 static void
-utf8_encode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL c)
+utf8_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str), ARGMOD(String_iter *i), UINTVAL c)
 {
-    ASSERT_ARGS(utf8_encode_and_advance)
-    const STRING * const s = i->str;
-    unsigned char * const pos = (unsigned char *)Buffer_bufstart(s) + i->bytepos;
+    ASSERT_ARGS(utf8_iter_set_and_advance)
+    unsigned char * const pos = (unsigned char *)Buffer_bufstart(str) + i->bytepos;
     unsigned char * const new_pos = (unsigned char *)utf8_encode(interp, pos, c);
 
     i->bytepos += (new_pos - pos);
     /* XXX possible buffer overrun exception? */
-    PARROT_ASSERT(i->bytepos <= Buffer_buflen(s));
-    ++i->charpos;
+    PARROT_ASSERT(i->bytepos <= Buffer_buflen(str));
+    i->charpos++;
 }
 
 /*
 
-=item C<static void utf8_set_position(PARROT_INTERP, String_iter *i, UINTVAL
-pos)>
+=item C<static void utf8_iter_set_position(PARROT_INTERP, const STRING *str,
+String_iter *i, UINTVAL pos)>
 
 The UTF-8 implementation of the string iterator's C<set_position>
 function.
@@ -473,25 +554,46 @@
 */
 
 static void
-utf8_set_position(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL pos)
+utf8_iter_set_position(SHIM_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *i), UINTVAL pos)
 {
-    ASSERT_ARGS(utf8_set_position)
-    const utf8_t *u8ptr = (const utf8_t *)Buffer_bufstart(i->str);
+    ASSERT_ARGS(utf8_iter_set_position)
+    const utf8_t *u8ptr = (const utf8_t *)Buffer_bufstart(str);
 
-    /* start from last known charpos, if we can */
-    if (i->charpos <= pos) {
-        const UINTVAL old_pos = pos;
-        pos       -= i->charpos;
-        u8ptr     += i->bytepos;
-        i->charpos = old_pos;
+    if (pos == 0) {
+        i->charpos = 0;
+        i->bytepos = 0;
+        return;
     }
-    else
-        i->charpos = pos;
 
-    while (pos-- > 0)
-        u8ptr += UTF8SKIP(u8ptr);
+    /*
+     * we know the byte offsets of three positions: start, current and end
+     * now find the shortest way to reach pos
+     */
+    if (pos < i->charpos) {
+        if (pos <= (i->charpos >> 1)) {
+            /* go forward from start */
+            u8ptr = (const utf8_t *)utf8_skip_forward(u8ptr, pos);
+        }
+        else {
+            /* go backward from current */
+            u8ptr = (const utf8_t *)utf8_skip_backward(u8ptr + i->bytepos, i->charpos - pos);
+        }
+    }
+    else {
+        const UINTVAL  len = str->strlen;
+        if (pos <= i->charpos + ((len - i->charpos) >> 1)) {
+            /* go forward from current */
+            u8ptr = (const utf8_t *)utf8_skip_forward(u8ptr + i->bytepos, pos - i->charpos);
+        }
+        else {
+            /* go backward from end */
+            u8ptr = (const utf8_t *)utf8_skip_backward(u8ptr + str->bufused, len - pos);
+        }
+    }
 
-    i->bytepos = (const char *)u8ptr - (const char *)Buffer_bufstart(i->str);
+    i->charpos = pos;
+    i->bytepos = (const char *)u8ptr - (const char *)Buffer_bufstart(str);
 }
 
 
@@ -513,8 +615,8 @@
 {
     ASSERT_ARGS(to_encoding)
     STRING *result;
-    String_iter src_iter;
-    UINTVAL offs, dest_len, dest_pos, src_len;
+    const ENCODING *src_encoding;
+    UINTVAL dest_len, dest_pos, src_len;
     unsigned char *p;
 
     if (src->encoding == Parrot_utf8_encoding_ptr)
@@ -523,8 +625,8 @@
     result = Parrot_gc_new_string_header(interp, 0);
     src_len = src->strlen;
 
-    /* init iter before possilby changing encoding */
-    ENCODING_ITER_INIT(interp, src, &src_iter);
+    /* save source encoding before possibly changing it */
+    src_encoding = src->encoding;
     result->charset  = Parrot_unicode_charset_ptr;
     result->encoding = Parrot_utf8_encoding_ptr;
     result->strlen   = src_len;
@@ -542,15 +644,17 @@
         result->bufused = dest_len;
     }
     else {
+        String_iter src_iter;
+        STRING_ITER_INIT(interp, &src_iter);
         dest_len = src_len;
         dest_pos = 0;
-        for (offs = 0; offs < src_len; ++offs) {
-            const UINTVAL c = src_iter.get_and_advance(interp, &src_iter);
+        while (src_iter.charpos < src_len) {
+            const UINTVAL c = src_encoding->iter_get_and_advance(interp, src, &src_iter);
             unsigned char *new_pos;
             unsigned char *pos;
 
             if (dest_len - dest_pos < 6) {
-                UINTVAL need = (UINTVAL)((src->strlen - offs) * 1.5);
+                UINTVAL need = (UINTVAL)((src->strlen - src_iter.charpos + 1) * 1.5);
                 if (need < 16)
                     need = 16;
                 dest_len += need;
@@ -683,10 +787,16 @@
     String_iter    iter;
     UINTVAL        start, size;
 
-    iter_init(interp, src, &iter);
-    iter.set_position(interp, &iter, offset);
-    start = iter.bytepos;
-    iter.set_position(interp, &iter, offset + count);
+    STRING_ITER_INIT(interp, &iter);
+
+    if (offset)
+        utf8_iter_set_position(interp, src, &iter, offset);
+
+    start                   = iter.bytepos;
+
+    if (count)
+        utf8_iter_set_position(interp, src, &iter, offset + count);
+
     size = iter.bytepos - start;
 
     if (!(flags & PObj_external_FLAG)){
@@ -747,9 +857,9 @@
      * this is used to initially calculate src->strlen,
      * therefore we must scan the whole string
      */
-    iter_init(interp, src, &iter);
+    STRING_ITER_INIT(interp, &iter);
     while (iter.bytepos < src->bufused)
-        iter.get_and_advance(interp, &iter);
+        utf8_iter_get_and_advance(interp, src, &iter);
     return iter.charpos;
 }
 
@@ -773,29 +883,6 @@
 
 /*
 
-=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(SHIM_INTERP, ARGIN(const STRING *src), ARGOUT(String_iter *iter))
-{
-    ASSERT_ARGS(iter_init)
-    iter->str             = src;
-    iter->bytepos         = 0;
-    iter->charpos         = 0;
-    iter->get_and_advance = utf8_decode_and_advance;
-    iter->set_and_advance = utf8_encode_and_advance;
-    iter->set_position    = utf8_set_position;
-}
-
-/*
-
 =item C<void Parrot_encoding_utf8_init(PARROT_INTERP)>
 
 Initializes the UTF-8 encoding.
@@ -821,9 +908,13 @@
         get_bytes,
         codepoints,
         bytes,
-        iter_init,
         find_cclass,
-        NULL
+        NULL,
+        utf8_iter_get,
+        utf8_iter_skip,
+        utf8_iter_get_and_advance,
+        utf8_iter_set_and_advance,
+        utf8_iter_set_position
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "utf8", return_encoding);

Modified: branches/unshared_buffers/src/string/primitives.c
==============================================================================
--- branches/unshared_buffers/src/string/primitives.c	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/src/string/primitives.c	Sun Aug 29 17:09:11 2010	(r48719)
@@ -329,7 +329,7 @@
 #if PARROT_HAS_ICU
     return u_charDigitValue(character);
 #else
-    if ((character >= 0x30) || (character <= 0x39))
+    if ((character >= 0x30) && (character <= 0x39))
         return character - 0x30;
     return -1;
 #endif

Modified: branches/unshared_buffers/t/codingstd/c_macro_args.t
==============================================================================
--- branches/unshared_buffers/t/codingstd/c_macro_args.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/codingstd/c_macro_args.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -60,6 +60,9 @@
             if ($definition ne "") {
                 foreach my $arg (split /\s*,\s*/, $args) {
 
+                    # skip args that are code blocks
+                    next if $arg eq '_code';
+
                     # eliminate any properly formed usage of the macro arg
                     $definition =~ s/\Q($arg)//g;
                     $definition =~ s/\Q[$arg]//g;

Modified: branches/unshared_buffers/t/codingstd/c_operator.t
==============================================================================
--- branches/unshared_buffers/t/codingstd/c_operator.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/codingstd/c_operator.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -84,16 +84,27 @@
                 }{defined $1 ? "$1$2" : defined $3 ? "$3$4" : "$5$6"}egsx;
 
         my @lines = split( /\n/, $buf );
-        for my $line (@lines) {
+        $comma_space{$path} = [];
+        for (my $i=0; $i <= $#lines; $i++) {
             # after a comma there should be one space or a newline
-            if ( $line =~ m{ ( (?:,) (?! \s ) (?= .+) ) }gx ) {
-                $comma_space{$path} = undef;
+            if ( $lines[$i] =~ m{ ( (?:,) (?! \s ) (?= .+) ) }gx ) {
+                push @{ $comma_space{$path} }, $i;
             }
         }
     }
 
 ## L<PDD07/Code Formatting"there should be one space or a newline after a comma">/
-    is( join("\n", keys %comma_space), "", "there should be one space or a newline after a comma" );
+    my $files_with_errors = 0;
+    for my $path ( sort keys %comma_space ) {
+        $files_with_errors++ if scalar @{ $comma_space{$path} };
+    }
+    is( $files_with_errors, 0, "there should be one space or a newline after a comma" )
+        or diag( do {
+            for my $k (sort keys %comma_space) {
+                my @lines_failed = @{$comma_space{$k}};
+                print "$k: line(s): @lines_failed\n" if scalar(@lines_failed);
+            }
+        } );
 }
 
 # Local Variables:

Modified: branches/unshared_buffers/t/codingstd/perlcritic.t
==============================================================================
--- branches/unshared_buffers/t/codingstd/perlcritic.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/codingstd/perlcritic.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -22,7 +22,7 @@
 violations.
 
 This test uses a standard perlcriticrc file, located in
-F<tools/utils/perlcritic.conf>
+F<tools/dev/perlcritic.conf>
 
 If you wish to run a specific policy, the easiest way to do so is to
 temporarily add a custom theme to the configuration file and then specify
@@ -62,7 +62,7 @@
     'theme=s'   => \$theme
 );
 
-my $config = File::Spec->catfile( $PConfig{build_dir}, qw{tools util perlcritic.conf} );
+my $config = File::Spec->catfile( $PConfig{build_dir}, qw{tools dev perlcritic.conf} );
 
 Test::Perl::Critic->import(
     -profile => $config,

Modified: branches/unshared_buffers/t/codingstd/pir_code_coda.t
==============================================================================
--- branches/unshared_buffers/t/codingstd/pir_code_coda.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/codingstd/pir_code_coda.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -1,5 +1,5 @@
 #! perl
-# Copyright (C) 2006-2009, Parrot Foundation.
+# Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -73,11 +73,9 @@
         if $vim_many > 1 || $emacs_many > 1;
 }
 
-ok( !scalar(@no_coda), 'PIR code coda present' )
-    or diag( "PIR code coda missing in " . scalar @no_coda . " files:\n at no_coda" );
-
-ok( !scalar(@extra_coda), 'PIR code coda appears only once' )
-    or diag( "PIR code coda repeating in " . scalar @extra_coda . " files:\n at extra_coda" );
+# If we use is_deeply, then the differences will show in the test output.
+is_deeply( \@no_coda,    [], 'PIR code coda present' );
+is_deeply( \@extra_coda, [], 'PIR code coda appears only once' );
 
 # Local Variables:
 #   mode: cperl

Modified: branches/unshared_buffers/t/codingstd/pmc_docs.t
==============================================================================
--- branches/unshared_buffers/t/codingstd/pmc_docs.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/codingstd/pmc_docs.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -130,7 +130,6 @@
 src/pmc/imageio.pmc
 src/pmc/namespace.pmc
 src/pmc/nci.pmc
-src/pmc/null.pmc
 src/pmc/object.pmc
 src/pmc/sub.pmc
 src/pmc/threadinterpreter.pmc

Modified: branches/unshared_buffers/t/dynoplibs/trans-infnan.t
==============================================================================
--- branches/unshared_buffers/t/dynoplibs/trans-infnan.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/dynoplibs/trans-infnan.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -20,7 +20,7 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(67)
+    plan(70)
 
     test_exp()
     test_sin()
@@ -36,6 +36,7 @@
     test_coth()
     test_acot()
     test_sec()
+    test_csc()
     test_sech()
     test_asec()
     test_ln()
@@ -232,6 +233,18 @@
     is($N1, 'NaN', '... sec NaN')
 .end
 
+.sub test_csc
+    $N0 = 'Inf'
+    $N1 = csc $N0
+    is($N1, 'NaN', 'csc: csc Inf')
+    $N0 = '-Inf'
+    $N1 = csc $N0
+    is($N1, 'NaN', '... csc -Inf')
+    $N0 = 'NaN'
+    $N1 = csc $N0
+    is($N1, 'NaN', '... csc NaN')
+.end
+
 .sub test_sech
     $N0 = 'Inf'
     $N1 = sech $N0
@@ -295,20 +308,16 @@
     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')
+    $N1 = cot $N0
+    is($N1, 'NaN', 'cot: cot Inf')
+    $N0 = '-Inf'
+    $N1 = cot $N0
+    is($N1, 'NaN', '... cot -Inf')
+    $N0 = 'NaN'
+    $N1 = cot $N0
+    is($N1, 'NaN', '... cot NaN')
 .end
 
 .sub test_pow

Modified: branches/unshared_buffers/t/dynoplibs/trans.t
==============================================================================
--- branches/unshared_buffers/t/dynoplibs/trans.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/dynoplibs/trans.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -23,7 +23,7 @@
     .local num epsilon
     epsilon = _epsilon()
 
-    plan(69)
+    plan(77)
 
     test_sin_n(epsilon)
     test_sin_i(epsilon)
@@ -31,8 +31,12 @@
     test_cos_i(epsilon)
     test_tan_n(epsilon)
     test_tan_i(epsilon)
+    test_cot_n(epsilon)
+    test_cot_i(epsilon)
     test_sec_n(epsilon)
     test_sec_i(epsilon)
+    test_csc_n(epsilon)
+    test_csc_i(epsilon)
     test_atan_n(epsilon)
     test_atan_i(epsilon)
     test_asin_n(epsilon)
@@ -137,6 +141,26 @@
     is($N0, 1.557408, "tan(1)", epsilon)
 .end
 
+.sub test_cot_n
+    .param num epsilon
+
+    $N0 = cot 0.5
+    is($N0,  1.8305, "cot(0.5)", epsilon)
+
+    $N0 = cot 1.0
+    is($N0,  0.64209, "cot(1.0)", epsilon)
+.end
+
+.sub test_cot_i
+    .param num epsilon
+
+    $N0 = cot 1
+    is($N0, 0.64209, "cot(1)", epsilon)
+
+    $N0 = cot 2
+    is($N0,  -0.45766, "cot(2)", epsilon)
+.end
+
 .sub test_sec_n
     .param num epsilon
 
@@ -153,6 +177,26 @@
     is($N1, 1.850816, "sec(1)", epsilon)
 .end
 
+.sub test_csc_n
+    .param num epsilon
+
+    $N0 = csc 0.5
+    is($N0,   2.0858, "csc(0.5)", epsilon)
+
+    $N0 = csc 1.0
+    is($N0,  1.1884, "csc(1.0)", epsilon)
+.end
+
+.sub test_csc_i
+    .param num epsilon
+
+    $N0 = csc 1
+    is($N0, 1.1884, "csc(1)", epsilon)
+
+    $N0 = csc 2
+    is($N0,   1.0998, "csc(2)", epsilon)
+.end
+
 .sub test_atan_n
     .param num epsilon
 

Copied: branches/unshared_buffers/t/examples/pgegrep.t (from r48712, trunk/t/examples/pgegrep.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/t/examples/pgegrep.t	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/t/examples/pgegrep.t)
@@ -0,0 +1,111 @@
+#! perl
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/tools/pgegrep.t - test the script tools/utils/pgegrep
+
+=head1 SYNOPSIS
+
+    % prove t/examples/tools/pgegrep.t
+
+=head1 DESCRIPTION
+
+Tests the features of of the C<pgegrep> utility (see F<examples/pgegrep>).
+
+=cut
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+
+use Fatal qw{open close};
+use Test::More;
+use Parrot::Test tests => 10;
+use Parrot::Config;
+use File::Spec   ();
+
+my $testdata = File::Spec->catfile(qw{. t tools testdata });
+my $testdata_escaped = $testdata;
+$testdata_escaped =~ s!\\!\\\\!g;
+
+sub pgegrep_output_like {
+    my ($options, $snippet, $desc)  = @_;
+
+    my $PARROT  = ".$PConfig{slash}$PConfig{test_prog}";
+    my $pgegrep = File::Spec->catfile( qw{. examples tools pgegrep} );
+    my $out     = `$PARROT $pgegrep $options`;
+
+    like( $out, $snippet, $desc );
+
+    return;
+}
+
+pgegrep_output_like(
+    '-V',
+    qr!\Qpgegrep v0.0.1\E!,
+    'pge reports correct version'
+);
+
+pgegrep_output_like(
+    "cat $testdata",
+    qr!keyboardcat!,
+    'basic sanity of matching a literal'
+);
+
+pgegrep_output_like(
+    "-n cat $testdata",
+    qr!1:keyboardcat!,
+    'matching a literal with line number'
+);
+
+pgegrep_output_like(
+    "--line-number cat $testdata",
+    qr!1:keyboardcat!,
+    'matching a literal with line number with long option'
+);
+
+pgegrep_output_like(
+    "-H cat $testdata",
+    qr!$testdata_escaped:keyboardcat!,
+    'matching a literal with file name'
+);
+
+pgegrep_output_like(
+    "--with-filename cat $testdata",
+    qr!$testdata_escaped:keyboardcat!,
+    'matching a literal with file name with long option'
+);
+
+
+pgegrep_output_like(
+    "-v cat $testdata",
+    qr!saxophonegiraffe!,
+    'test inversion of match'
+);
+
+pgegrep_output_like(
+    "--invert-match cat $testdata",
+    qr!saxophonegiraffe!,
+    'test inversion of match with long option'
+);
+
+pgegrep_output_like(
+    "-l cat $testdata",
+    qr!$testdata_escaped!,
+    'find files that match'
+);
+
+pgegrep_output_like(
+    "--files-with-matches cat $testdata",
+    qr!$testdata_escaped!,
+    'find files that match with long option'
+);
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Deleted: branches/unshared_buffers/t/native_pbc/annotations.pbc
==============================================================================
Binary file. No diff available.

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

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

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

Deleted: branches/unshared_buffers/t/native_pbc/testdata/annotations.pir
==============================================================================
--- branches/unshared_buffers/t/native_pbc/testdata/annotations.pir	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,18 +0,0 @@
-# Copyright (C) 2009, Parrot Foundation.
-# $Id$
-
-.sub 'main'
-.annotate "file", "annotations.pir"
-.annotate "creator", "Parrot Foundation"
-.annotate "line", 1
-    say "Hi"
-    say "line"
-.annotate "line", 2
-    .return ()
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/unshared_buffers/t/oo/isa.t
==============================================================================
--- branches/unshared_buffers/t/oo/isa.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/oo/isa.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -20,7 +20,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(29)
+    plan(30)
 
     isa_by_string_name()
     isa_by_class_object()
@@ -28,6 +28,7 @@
     subclass_isa_by_class_object()
     string_isa_and_pmc_isa_have_same_result()
     string_register_and_string_pmc_isa_have_same_result()
+    isa_accepts_rsa()
 .end
 
 
@@ -181,6 +182,14 @@
     ok( $I0, '... and false when it is not' )
 .end
 
+.sub isa_accepts_rsa
+    $P0 = newclass ['Foo';'Buz']
+    $P1 = new $P0
+    $P0 = split "::", "Foo::Buz"
+    $I0 = isa $P1, $P0
+    ok($I0, "isa accepts a ResizablePMCArray")
+ .end
+
 .HLL 'foo'
 .namespace ['XYZ']
 

Copied: branches/unshared_buffers/t/op/gc-active-buffers.t (from r48712, trunk/t/op/gc-active-buffers.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/t/op/gc-active-buffers.t	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/t/op/gc-active-buffers.t)
@@ -0,0 +1,62 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/op/gc-active-buffers.t - Test that buffers are freed as soon as possible
+
+=head1 SYNOPSIS
+
+    % prove t/op/gc-active-buffers.t
+
+=head1 DESCRIPTION
+
+Tests that unused buffers (strings) are freed in the first GC run. See
+TT1603 - http://trac.parrot.org/parrot/ticket/1603
+
+=cut
+
+.include 'interpinfo.pasm'
+
+.sub _main :main
+    .include 'test_more.pir'
+
+    plan(1)
+
+    sweep 1
+    $I0 = interpinfo .INTERPINFO_ACTIVE_BUFFERS
+
+    .local int count
+    count= 1000
+  loop:
+        unless count goto done
+
+        # original test form TT1603
+        $P0 = new 'CodeString'
+        $P0.'emit'("a")
+        $S0 = $P0
+
+        # another way to trigger the problem
+        $S1 = "abc"
+        $S2 = substr $S1, 0, 1
+
+        dec count
+    goto loop
+  done:
+
+    sweep 1
+    $I1 = interpinfo .INTERPINFO_ACTIVE_BUFFERS
+
+    $I2 = $I1 - $I0
+    $S0 = $I2
+    $S0 .= " additional active buffers (which should be <= 100)"
+    $I3 = isle $I2, 100
+    ok($I3, $S0)
+ .end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/unshared_buffers/t/op/gc-leaky-box.t (from r48712, trunk/t/op/gc-leaky-box.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/t/op/gc-leaky-box.t	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/t/op/gc-leaky-box.t)
@@ -0,0 +1,77 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/op/gc-leaky-box.t - test for memory leaks in the Garbage Collector
+
+=head1 SYNOPSIS
+
+    % prove t/op/gc-leaky-box.t
+
+=head1 DESCRIPTION
+
+Tests that we actually do a GC mark and sweep after a large number of PMC's have
+been created. Test suggested by chromatic++ . Also includes tests for
+TT1465 - http://trac.parrot.org/parrot/ticket/1465 .
+
+=cut
+
+# 20:57 <chromatic> For every million PMCs allocated, see that the GC has performed a mark/sweep.
+
+.include 'interpinfo.pasm'
+
+.sub _main :main
+    .include 'test_more.pir'
+
+    plan(3)
+
+    $S0 = interpinfo .INTERPINFO_GC_SYS_NAME
+    if $S0 == "inf" goto dont_run_hanging_tests
+
+    test_gc_mark_sweep()
+
+    goto test_end
+  dont_run_hanging_tests:
+    ok(1, "#TODO - Test disabled on gc_inf")
+    ok(1, "#TODO - Test disabled on gc_inf")
+    ok(1, "#TODO - Test disabled on gc_inf")
+  test_end:
+.end
+
+.sub test_gc_mark_sweep
+    .local int counter
+
+    counter = 0
+  loop:
+    $P0 = box 0
+    inc counter
+    if counter < 2e6 goto loop
+
+    $I1 = interpinfo.INTERPINFO_GC_COLLECT_RUNS
+    $I2 = interpinfo.INTERPINFO_GC_MARK_RUNS
+    $I3 = interpinfo.INTERPINFO_TOTAL_MEM_ALLOC
+
+    $S1 = $I1
+    $S0 = "performed " . $S1
+    $S0 .= " (which should be >=1) GC collect runs"
+    ok($I1,$S0)
+
+    $S1 = $I2
+    $S0 = "performed " . $S1
+    $S0 .= " (which should be >=1) GC mark runs"
+    ok($I2,$S0)
+
+    $S1 = $I3
+    $S0 = "allocated " . $S1
+    $S0 .= " (which should be <= 2_000_000) bytes of memory"
+    $I4 = isle $I3, 2000000
+    ok($I4,$S0)
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/unshared_buffers/t/op/gc-leaky-call.t (from r48712, trunk/t/op/gc-leaky-call.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/t/op/gc-leaky-call.t	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/t/op/gc-leaky-call.t)
@@ -0,0 +1,77 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/op/gc-leaky-call.t - test for memory leaks in the Garbage Collector
+
+=head1 SYNOPSIS
+
+    % prove t/op/gc-leaky-call.t
+
+=head1 DESCRIPTION
+
+Tests that we actually do a GC mark and sweep after a large number of
+function calls.
+
+=cut
+
+.include 'interpinfo.pasm'
+
+.sub _main :main
+    .include 'test_more.pir'
+
+    plan(3)
+
+    $S0 = interpinfo .INTERPINFO_GC_SYS_NAME
+    if $S0 == "inf" goto dont_run_hanging_tests
+
+    test_gc_mark_sweep()
+
+    goto test_end
+  dont_run_hanging_tests:
+    ok(1, "#TODO - Test disabled on gc_inf")
+    ok(1, "#TODO - Test disabled on gc_inf")
+    ok(1, "#TODO - Test disabled on gc_inf")
+  test_end:
+.end
+
+.sub test_gc_mark_sweep
+    .local int counter
+
+    counter = 0
+  loop:
+    consume()
+    inc counter
+    if counter < 1e6 goto loop
+
+    $I1 = interpinfo.INTERPINFO_GC_COLLECT_RUNS
+    $I2 = interpinfo.INTERPINFO_GC_MARK_RUNS
+    $I3 = interpinfo.INTERPINFO_TOTAL_MEM_ALLOC
+
+    $S1 = $I1
+    $S0 = "performed " . $S1
+    $S0 .= " (which should be >=1) GC collect runs"
+    ok($I1,$S0)
+
+    $S1 = $I2
+    $S0 = "performed " . $S1
+    $S0 .= " (which should be >=1) GC mark runs"
+    ok($I2,$S0)
+
+    $S1 = $I3
+    $S0 = "allocated " . $S1
+    $S0 .= " (which should be <= 2_000_000) bytes of memory"
+    $I4 = isle $I3, 2000000
+    ok($I4,$S0)
+.end
+
+.sub consume
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Deleted: branches/unshared_buffers/t/op/gc-leaky.t
==============================================================================
--- branches/unshared_buffers/t/op/gc-leaky.t	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,73 +0,0 @@
-#!./parrot
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/op/gc-leaky.t - test for memory leaks in the Garbage Collector
-
-=head1 SYNOPSIS
-
-    % prove t/op/gc-leaky.t
-
-=head1 DESCRIPTION
-
-Tests that we actually do a GC mark and sweep after a large number of PMC's have
-been created. Test suggested by chromatic++ . More tests are needed to close
-TT1465 - http://trac.parrot.org/parrot/ticket/1465 .
-
-=cut
-
-# 20:57 <chromatic> For every million PMCs allocated, see that the GC has performed a mark/sweep.
-
-.include 'interpinfo.pasm'
-
-.sub _main :main
-    .include 'test_more.pir'
-
-    plan(2)
-
-    $S0 = interpinfo .INTERPINFO_GC_SYS_NAME
-    if $S0 == "inf" goto dont_run_hanging_tests
-
-    test_gc_mark_sweep()
-
-    goto test_end
-  dont_run_hanging_tests:
-    ok(1, "#TODO - Test disabled on gc_inf")
-    ok(1, "#TODO - Test disabled on gc_inf")
-  test_end:
-.end
-
-.sub test_gc_mark_sweep
-    .local int counter
-    counter = 0
-    loop:
-        $P0 = box 0
-        inc counter
-        if counter > 1e6 goto done
-        goto loop
-    done:
-        diag("")
-        $I1 = interpinfo.INTERPINFO_GC_COLLECT_RUNS
-        $I2 = interpinfo.INTERPINFO_GC_MARK_RUNS
-
-        $I3 = isge $I1, 1
-        $I4 = isge $I2, 1
-
-        $S1 = $I1
-        $S0 = "performed " . $S1
-        $S0 .= " (which should be >=1) GC collect runs"
-        ok($I2,$S0)
-
-        $S1 = $I2
-        $S0 = "performed " . $S1
-        $S0 .= " (which should be >=1) GC mark runs"
-        ok($I2,$S0)
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/unshared_buffers/t/op/string.t
==============================================================================
--- branches/unshared_buffers/t/op/string.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/op/string.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -16,6 +16,8 @@
 
 =cut
 
+.include 'except_types.pasm'
+
 .sub main :main
     .include 'test_more.pir'
 
@@ -30,8 +32,9 @@
     three_argument_chopn__oob_values()
     substr_tests()
     neg_substr_offset()
+    exception_substr_null_string()
     exception_substr_oob()
-    exception_substr_oob()
+    exception_substr_oob_neg()
     len_greater_than_strlen()
     len_greater_than_strlen_neg_offset()
     replace_w_rep_eq_length()
@@ -308,26 +311,61 @@
     is( $S1, "length", '' )
 .end
 
+.sub exception_substr_null_string
+    .local string s
+    .local pmc eh
+    .local int r
+    null s
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_SUBSTR_OUT_OF_STRING)
+    set_addr eh, handler
+    push_eh eh
+    r = 1
+    substr s, s, 0, 0
+    r = 0
+  handler:
+    pop_eh
+    is(r, 1, "substr with null string throws" )
+.end
+
 # This asks for substring that shouldn't be allowed...
 .sub exception_substr_oob
+    .local pmc eh
+    .local int r
     set $S0, "A string of length 21"
-    set $I0, -99
+    set $I0, 99
     set $I1, 6
-    push_eh handler
-        substr $S1, $S0, $I0, $I1
-handler:
-    .exception_is( "Cannot take substr outside string" )
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_SUBSTR_OUT_OF_STRING)
+    set_addr eh, handler
+    push_eh eh
+    r = 1
+
+    substr $S1, $S0, $I0, $I1
+    r = 0
+  handler:
+    pop_eh
+    is(r, 1, "substr outside string throws" )
 .end
 
 # This asks for substring that shouldn't be allowed...
-.sub exception_substr_oob
+.sub exception_substr_oob_neg
+    .local pmc eh
+    .local int r
     set $S0, "A string of length 21"
-    set $I0, 99
+    set $I0, -99
     set $I1, 6
-    push_eh handler
-        substr $S1, $S0, $I0, $I1
-handler:
-    .exception_is( "Cannot take substr outside string" )
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_SUBSTR_OUT_OF_STRING)
+    set_addr eh, handler
+    push_eh eh
+    r = 1
+
+    substr $S1, $S0, $I0, $I1
+    r = 0
+  handler:
+    pop_eh
+    is(r, 1, "substr outside string throws - negative" )
 .end
 
 # This asks for substring much greater than length of original string

Modified: branches/unshared_buffers/t/pmc/exception.t
==============================================================================
--- branches/unshared_buffers/t/pmc/exception.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/exception.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -16,11 +16,14 @@
 
 =cut
 
+.include 'except_types.pasm'
+
 .sub main :main
     .include 'test_more.pir'
-    plan(20)
+    plan(31)
     test_bool()
     test_int()
+    test_integer_keyed()
     test_attrs()
     test_attributes()
     test_push_pop_eh()
@@ -28,28 +31,62 @@
     test_push_eh_throw()
     test_die()
     test_throw_obj()
+    test_throw_clone()
 .end
 
 .sub test_bool
-    $P0 = new 'ExceptionHandler'
-    set_addr $P0, _handler
-    ok($P0,'ExceptionHandler object return true')
     $P1 = new 'Exception'
     ok($P1,'Exception object return true')
-    .return()
-  _handler:
-    say "howdy bool!"
 .end
 
 .sub test_int
-    $P0 = new 'ExceptionHandler'
-    set_addr $P0, _handler
-    push_eh $P0
+    $P0 = new 'Exception'
+    $P0 = 42
     $I0 = $P0
-    ok(1,'get_integer on ExceptionHandler ')
-    .return()
-  _handler:
-    say "howdy int!"
+    is($I0, 42, 'set/get integer on Exception')
+.end
+
+.sub test_integer_keyed
+    .local pmc ex, eh
+    .local int value
+    ex = new ['Exception']
+
+    value = ex['type']
+    is(value, 0, 'get type default value')
+    ex['type'] = .EXCEPTION_SYNTAX_ERROR
+    value = ex['type']
+    is(value, .EXCEPTION_SYNTAX_ERROR, 'get type value changed')
+
+    value = ex['exit_code']
+    is(value, 0, 'get exit_code default value')
+    ex['exit_code'] = 127
+    value = ex['exit_code']
+    is(value, 127, 'get exit_code value changed')
+
+    value = ex['handled']
+    is(value, 0, 'get handled default is false')
+    ex['handled'] = 1
+    value = ex['handled']
+    is(value, 1, 'get handled value changed')
+
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_ATTRIB_NOT_FOUND)
+    set_label eh, catch
+    push_eh eh
+    value = 1
+    ex['the droids you are looking for'] = 42
+    value = 0
+  catch:
+    finalize eh
+    is(value, 1, 'set invalid key throws')
+
+    set_label eh, catch2
+    value = 1
+    value = ex['the droids you are looking for']
+    value = 0
+  catch2:
+    finalize eh
+    is(value, 1, 'get invalid key throws')
 .end
 
 .sub test_attrs
@@ -173,6 +210,59 @@
     ok(1,'caught exception object thrown')
 .end
 
+# Test clone vtable function
+.sub test_throw_clone
+    .local pmc ex, exclone, eh, ehguard
+    .local int result
+    ex = new ['Exception']
+    ex['type'] = .EXCEPTION_SYNTAX_ERROR
+    exclone = clone ex
+
+    result = iseq ex, exclone
+    is(result, 1, 'cloned Exception is equal to original')
+
+    ehguard = new ['ExceptionHandler']
+    set_label ehguard, catchall
+    push_eh ehguard
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_SYNTAX_ERROR)
+    set_label eh, catch
+    result = 0
+    push_eh eh
+    throw exclone
+    goto catchall
+  catch:
+    result = 1
+  catchall:
+    finalize eh
+    finalize ehguard
+    is(result, 1, 'caught a cloned Exception')
+
+    null exclone
+    result = 0
+    .local pmc pay, getpay, exc
+    set_label ehguard, catchall2
+    set_label eh, catch2
+
+    pay = new ['Integer'], 9875
+    ex['payload'] = pay
+    exclone = clone ex
+    result = iseq ex, exclone
+    is(result, 1, 'cloned Exception with payload is equal to original')
+
+    result = 0
+    throw exclone
+    goto catchall2
+  catch2:
+    .get_results(exc)
+    getpay = exc['payload']
+    $I0 = getpay
+    if $I0 != 9875 goto catchall2
+    result = 1
+  catchall2:
+    is(result, 1, 'caught a cloned Exception with payload')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/unshared_buffers/t/pmc/exceptionhandler.t
==============================================================================
--- branches/unshared_buffers/t/pmc/exceptionhandler.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/exceptionhandler.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -23,7 +23,10 @@
     .include 'test_more.pir'
 
     # If test exited with "bad plan" MyHandlerCan.can_handle wasn't invoked.
-    plan(15)
+    plan(18)
+
+    test_bool()
+    test_int()
 
     .local pmc eh, eh2
     eh = new ['ExceptionHandler']
@@ -136,6 +139,26 @@
     ok($I0, 'Exception Handler subclass catch exception')
 .end
 
+.sub test_bool
+    $P0 = new 'ExceptionHandler'
+    nok($P0,'ExceptionHandler without address is false')
+    set_addr $P0, _handler
+    ok($P0,'ExceptionHandler with address is true')
+  _handler:
+.end
+
+.sub test_int
+    $P0 = new 'ExceptionHandler'
+    set_addr $P0, _handler
+    push_eh $P0
+    $I0 = $P0
+    ok(1,'get_integer on ExceptionHandler ')
+    .return()
+  _handler:
+    say "howdy int!"
+.end
+
+
 .sub subclass_exception_handler
     .local pmc myhandler
     myhandler = subclass 'ExceptionHandler', [ 'MyHandler' ]

Modified: branches/unshared_buffers/t/pmc/float.t
==============================================================================
--- branches/unshared_buffers/t/pmc/float.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/float.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -16,7 +16,7 @@
 
 =cut
 
-.const int TESTS = 162
+.const int TESTS = 166
 .const num PRECISION = 0.000001
 
 .sub 'test' :main
@@ -78,10 +78,12 @@
     log10_method()
     log2_method()
     sec_method()
+    csc_method()
     sech_method()
     sin_method()
     sinh_method()
     tan_method()
+    cot_method()
     tanh_method()
     sqrt_method()
 .end
@@ -998,6 +1000,11 @@
     test_method('sec', 0.5, 1.139493927)
 .end
 
+.sub 'csc_method'
+    test_method('csc', 0.5, 2.0858296)
+    test_method('csc', 1.0, 1.1883951)
+.end
+
 .sub 'sech_method'
     test_method('sech', 0.0, 1.0)
     test_method('sech', 0.5, 0.886818884)
@@ -1018,6 +1025,11 @@
     test_method('tan', 0.5, 0.546302490)
 .end
 
+.sub 'cot_method'
+    test_method('cot', 0.5, 1.8304877)
+    test_method('cot', 1.0, 0.64209262)
+.end
+
 .sub 'tanh_method'
     test_method('tanh', 0.0, 0.0)
     test_method('tanh', 0.5, 0.462117157)

Modified: branches/unshared_buffers/t/pmc/hash.t
==============================================================================
--- branches/unshared_buffers/t/pmc/hash.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/hash.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -25,11 +25,12 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(172)
+    plan(174)
 
     initial_hash_tests()
     more_than_one_hash()
     hash_key_type()
+    hash_value_type()
     null_key()
     hash_keys_with_nulls_in_them()
     nearly_the_same_hash_keys()
@@ -156,6 +157,26 @@
 end:
 .end
 
+.sub hash_value_type
+    .local pmc h, eh
+    .local int r
+    h = new ['Hash']
+
+    h.'set_value_type'(.DATATYPE_INTVAL)
+    r  = h.'get_value_type'()
+    is(r, .DATATYPE_INTVAL, 'get/set _value_type')
+
+    r = 1
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_UNIMPLEMENTED)
+    set_label eh, catch
+    push_eh eh
+    h.'set_value_type'(999999)
+    r = 0
+  catch:
+    is(r, 1, 'set_value_type with invalid type throws')
+.end
+
 .sub null_key
     new $P0, ['Hash']
     $P0['yum'] = 5
@@ -718,6 +739,10 @@
 .end
 
 .sub freeze_thaw_preserves_order
+    # is internal order important somehow?
+    todo("freeze/thaw preserves hash internal order")
+    .return ()
+
     .local pmc h, cloned
     .local string s1, s2
     .local int all_ok

Modified: branches/unshared_buffers/t/pmc/lexinfo.t
==============================================================================
--- branches/unshared_buffers/t/pmc/lexinfo.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/lexinfo.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -19,23 +19,11 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(4)
+    plan(3)
 
-    new_test()
     inspect_test()
 .end
 
-.sub new_test
-    push_eh eh
-    $P0 = new ['LexInfo']
-    pop_eh
-    ok(0, "shouldn't be able to create a LexInfo without an initializer")
-    goto end
-eh:
-    ok(1, "can't create a LexInfo without an initializer")
-end:
-.end
-
 .sub inspect_test
     .lex "$a", $P0
     .lex "$b", $P1

Modified: branches/unshared_buffers/t/pmc/packfile.t
==============================================================================
--- branches/unshared_buffers/t/pmc/packfile.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/packfile.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -9,14 +9,13 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfile.t
 
 =head1 DESCRIPTION
 
 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'
@@ -25,12 +24,12 @@
 .sub main :main
 .include 'test_more.pir'
 
-    plan(37)
+    plan(42)
     'test_new'()
     'test_set_string_native'()
     'test_get_string'()
     'test_set_string'()
-    'test_get_integer'()
+    'test_get_integer_keyed_str'()
     'test_set_integer'()
     'test_get_directory'()
     'test_load'()
@@ -77,13 +76,16 @@
 
 
 .sub 'test_get_string'
-    .local pmc pf
+    .local pmc pf, eh
     pf = new ['Packfile']
     $S0 = pf["uuid"]
     ok(1, 'get_string(uuid)')
 
     # Requesting unknown key should throw exception
-    push_eh unknown_key
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_KEY_NOT_FOUND)
+    set_label eh, unknown_key
+    push_eh eh
     $S0 = pf["foo"]
     ok(0, "get_string_keyed_int return unknown key")
     .return ()
@@ -121,20 +123,61 @@
     .return ()
 .end
 
+# Compose the message for the given key
+.sub 'keyed_str_msg'
+    .param string key
+    .local string msg
+    msg = 'get_integer_keyed_str('
+    msg = concat msg, key
+    msg = concat msg, ')'
+    .return(msg)
+.end
+
+# Check the given key in the Packfile pf
+.sub 'do_get_integer_keyed_str'
+    .param pmc pf
+    .param string key
+    .local string msg
+    .local int result
+    msg = 'keyed_str_msg'(key)
+    result = 0
+    push_eh fail
+
+    $I0 = pf[key]
+    result = 1
+    goto end
+  fail:
+    .get_results($P0)
+    pop_eh
+  end:
+    ok(result, msg)
+.end
+
+.sub 'test_get_integer_keyed_str'
+    .local pmc pf, keys
+    .local int nkeys, i
+
+    keys = new ['ResizableStringArray']
+    push keys, 'wordsize'
+    push keys, 'byteorder'
+    push keys, 'fptype'
+    push keys, 'version_major'
+    push keys, 'version_minor'
+    push keys, 'version_patch'
+    push keys, 'bytecode_major'
+    push keys, 'bytecode_minor'
+    nkeys = elements keys
 
-.sub 'test_get_integer'
-    .local pmc pf
     push_eh load_error
     pf  = _pbc()
     pop_eh
-    $I0 = pf["version_major"]
-    ok(1, "get_integer_keyed_str(version_major)")
-
-    $I1 = pf["version_minor"]
-    ok(1, "get_integer_keyed_str(version_minor)")
 
-    $I2 = pf["version_patch"]
-    ok(1, "get_integer_keyed_str(version_patch)")
+    i = 0
+  nextkey:
+    $S0 = keys[i]
+    do_get_integer_keyed_str(pf, $S0)
+    inc i
+    if i < nkeys goto nextkey
 
     # Requesting unknown key should throw exception
     push_eh unknown_key
@@ -146,12 +189,20 @@
     pop_eh
     ok(1, "get_integer_keyed_str handle unknown key properly")
     .return ()
+
+    # On load error report a failure for each test
 load_error:
     .get_results($P0)
     pop_eh
-    report_load_error($P0, "get_integer_keyed_str(version_major)")
-    report_load_error($P0, "get_integer_keyed_str(version_minor)")
-    report_load_error($P0, "get_integer_keyed_str(version_patch)")
+
+    i = 0
+  nexterr:
+    $S0 = keys[i]
+    $S0 = keyed_str_msg($S0)
+    report_load_error($P0, $S0)
+    inc i
+    if i < nkeys goto nexterr
+
     report_load_error($P0, "get_integer_keyed_str unknown key")
     .return()
 .end

Modified: branches/unshared_buffers/t/pmc/packfileannotations.t
==============================================================================
--- branches/unshared_buffers/t/pmc/packfileannotations.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/packfileannotations.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -9,6 +9,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfileannotations.t
 
 =head1 DESCRIPTION
@@ -19,6 +20,9 @@
 
 .include 't/pmc/testlib/packfile_common.pir'
 
+.const string annofilename = 't/pmc/testlib/annotations.pbc'
+
+
 .sub 'main' :main
 .include 'test_more.pir'
     plan(17)
@@ -42,7 +46,7 @@
 
     push_eh load_error
     $P0 = new ['FileHandle']
-    $P0.'open'('t/native_pbc/annotations.pbc', 'r')
+    $P0.'open'(annofilename, 'r')
     $P0.'encoding'('binary')
     $S0 = $P0.'readall'()
     pf = new 'Packfile'
@@ -98,6 +102,9 @@
     $P6 = 2
     anns[3] = $P6
 
+    # Make sure the mark vtable is exercised and the content survives
+    sweep 1
+
     # Pack
     $S0 = pf
     pf = new 'Packfile'

Modified: branches/unshared_buffers/t/pmc/packfileconstanttable.t
==============================================================================
--- branches/unshared_buffers/t/pmc/packfileconstanttable.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/packfileconstanttable.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -8,6 +8,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfileconstanttable.t
 
 =head1 DESCRIPTION
@@ -62,6 +63,10 @@
     pf      = _pbc()
     pop_eh
     pftable = _get_consttable(pf)
+
+    # Make sure the mark vtable is exercised and the content survives
+    sweep 1
+
     size    = elements pftable
     ok(size, "PackfileConstantTable.elements returns non-zero")
     .return ()

Modified: branches/unshared_buffers/t/pmc/packfiledirectory.t
==============================================================================
--- branches/unshared_buffers/t/pmc/packfiledirectory.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/packfiledirectory.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -9,6 +9,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfiledirectory.t
 
 =head1 DESCRIPTION

Modified: branches/unshared_buffers/t/pmc/packfilefixupentry.t
==============================================================================
--- branches/unshared_buffers/t/pmc/packfilefixupentry.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/packfilefixupentry.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -8,6 +8,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfilefixupentry.t
 
 =head1 DESCRIPTION

Modified: branches/unshared_buffers/t/pmc/packfilefixuptable.t
==============================================================================
--- branches/unshared_buffers/t/pmc/packfilefixuptable.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/packfilefixuptable.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -9,6 +9,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfilefixuptable.t
 
 =head1 DESCRIPTION

Modified: branches/unshared_buffers/t/pmc/packfilerawsegment.t
==============================================================================
--- branches/unshared_buffers/t/pmc/packfilerawsegment.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/packfilerawsegment.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -9,6 +9,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfilerawsegment.t
 
 =head1 DESCRIPTION

Copied: branches/unshared_buffers/t/pmc/testlib/annotations.pir (from r48712, trunk/t/pmc/testlib/annotations.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/t/pmc/testlib/annotations.pir	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/t/pmc/testlib/annotations.pir)
@@ -0,0 +1,20 @@
+# Copyright (C) 2009-2010, Parrot Foundation.
+# $Id$
+
+# This file is used from Packfile PMCs tests
+
+.sub 'main'
+.annotate "file", "annotations.pir"
+.annotate "creator", "Parrot Foundation"
+.annotate "line", 1
+    say "Hi"
+    say "line"
+.annotate "line", 2
+    .return ()
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/unshared_buffers/t/pmc/testlib/number.pasm (from r48712, trunk/t/pmc/testlib/number.pasm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/t/pmc/testlib/number.pasm	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/t/pmc/testlib/number.pasm)
@@ -0,0 +1,91 @@
+# Copyright (C) 2009-2010, Parrot Foundation.
+# $Id$
+
+# This file is used from Packfile PMCs tests
+
+        set     N0, 1.0
+        set     N1, 4.0
+        set     N2, 16.0
+        set     N3, 64.0
+        set     N4, 256.0
+        set     N5, 1024.0
+        set     N6, 4096.0
+        set     N7, 16384.0
+        set     N8, 65536.0
+        set     N9, 262144.0
+        set     N10, 1048576.0
+        set     N11, 4194304.0
+        set     N12, 16777216.0
+        set     N13, 67108864.0
+        set     N14, 268435456.0
+        set     N15, 1073741824.0
+        set     N16, 4294967296.0
+        set     N17, 17179869184.0
+        set     N18, 68719476736.0
+        set     N19, 274877906944.0
+        set     N20, 1099511627776.0
+        set     N21, 4398046511104.0
+        set     N22, 17592186044416.0
+        set     N23, 70368744177664.0
+        set     N24, 281474976710656.0
+        set     N25, 1.12589990684262e+15
+
+        print   N0
+        print   "\n"
+        print   N1
+        print   "\n"
+        print   N2
+        print   "\n"
+        print   N3
+        print   "\n"
+        print   N4
+        print   "\n"
+        print   N5
+        print   "\n"
+        print   N6
+        print   "\n"
+        print   N7
+        print   "\n"
+        print   N8
+        print   "\n"
+        print   N9
+        print   "\n"
+        print   N10
+        print   "\n"
+        print   N11
+        print   "\n"
+        print   N12
+        print   "\n"
+        print   N13
+        print   "\n"
+        print   N14
+        print   "\n"
+        print   N15
+        print   "\n"
+        print   N16
+        print   "\n"
+        print   N17
+        print   "\n"
+        print   N18
+        print   "\n"
+        print   N19
+        print   "\n"
+        print   N20
+        print   "\n"
+        print   N21
+        print   "\n"
+        print   N22
+        print   "\n"
+        print   N23
+        print   "\n"
+        print   N24
+        print   "\n"
+        print   N25
+        print   "\n"
+        end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/unshared_buffers/t/pmc/testlib/packfile_common.pir
==============================================================================
--- branches/unshared_buffers/t/pmc/testlib/packfile_common.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/testlib/packfile_common.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -9,7 +9,7 @@
 
 .sub '_filename'
     .local string filename
-    filename = 't/native_pbc/number.pbc'
+    filename = 't/pmc/testlib/number.pbc'
     .return (filename)
 .end
 

Modified: branches/unshared_buffers/t/pmc/timer.t
==============================================================================
--- branches/unshared_buffers/t/pmc/timer.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/pmc/timer.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 6;
+use Parrot::Test tests => 7;
 use Parrot::Config;
 
 =head1 NAME
@@ -200,6 +200,38 @@
 0
 OUTPUT
 
+pir_output_is( << 'CODE', << 'OUTPUT', "Timer - many repetitions" );
+
+.include 'timer.pasm'
+
+.sub expired
+    $P0 = get_global "expired_count"
+    inc $P0
+.end
+
+.sub main :main
+    $P2 = new 'Integer'
+    set_global "expired_count", $P2
+
+    $P0 = new 'Timer'
+    $P1 = get_global "expired"
+
+    $P0[.PARROT_TIMER_HANDLER]  = $P1
+    $P0[.PARROT_TIMER_SEC]      = 0
+    $P0[.PARROT_TIMER_REPEAT]   = 9999
+    $P0[.PARROT_TIMER_RUNNING]  = 1
+
+loop:
+    sleep 0
+    if $P2 < 10000 goto loop
+
+    sleep 0.5
+    say $P2
+.end
+CODE
+10000
+OUTPUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/unshared_buffers/t/steps/auto/pmc-01.t
==============================================================================
--- branches/unshared_buffers/t/steps/auto/pmc-01.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/steps/auto/pmc-01.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  23;
+use Test::More tests =>  33;
 use Carp;
 use Cwd;
 use File::Path qw| mkpath |;
@@ -17,6 +17,7 @@
 use Parrot::Configure::Test qw(
     test_step_constructor_and_description
 );
+use IO::CaptureOutput qw( capture );
 
 ########## regular ##########
 
@@ -94,14 +95,14 @@
     my $pmcdir = qq{$tdir/src/pmc};
     ok(mkpath($pmcdir, { mode => 0755 }), "Able to make directory for testing");
     my $num = qq{$pmcdir/pmc.num};
-    open my $IN3, ">", $num or croak "Unable to open file for writing: $!";
-    print $IN3 "# comment line\n";
-    print $IN3 "\n";
-    print $IN3 "default.pmc\t0\n";
-    print $IN3 "null.pmc    1\n";
-    print $IN3 "env.pmc 2\n";
-    print $IN3 "notapmc 3\n";
-    close $IN3 or croak "Unable to close file after writing: $!";
+    open my $OUT3, ">", $num or croak "Unable to open file for writing: $!";
+    print $OUT3 "# comment line\n";
+    print $OUT3 "\n";
+    print $OUT3 "default.pmc\t0\n";
+    print $OUT3 "null.pmc    1\n";
+    print $OUT3 "env.pmc 2\n";
+    print $OUT3 "notapmc 3\n";
+    close $OUT3 or croak "Unable to close file after writing: $!";
     my $order_ref = auto::pmc::get_pmc_order();
     is_deeply(
         $order_ref,
@@ -114,7 +115,12 @@
     );
 
     my @pmcs = qw| env.pmc default.pmc null.pmc other.pmc |;
-    my @sorted_pmcs = auto::pmc::sort_pmcs(@pmcs);
+    my $pseudoman = 'MANIFEST';
+    open my $MAN, '>', $pseudoman or croak "Unable to open $pseudoman";
+    print $MAN "src/pmc/$_\n" for @pmcs;
+    close $MAN or croak;
+    my @sorted_pmcs =
+        split / /, auto::pmc::get_sorted_pmc_str(@pmcs);
     is_deeply(
         \@sorted_pmcs,
         [ qw| default.pmc null.pmc env.pmc other.pmc | ],
@@ -130,6 +136,61 @@
 
     my $pmcdir = qq{$tdir/src/pmc};
     ok(mkpath($pmcdir, { mode => 0755 }), "Able to make directory for testing");
+    my $num = qq{$pmcdir/pmc.num};
+    open my $OUT4, ">", $num or croak "Unable to open file for writing: $!";
+    print $OUT4 "# comment line\n";
+    print $OUT4 "\n";
+    print $OUT4 "default.pmc\t0\n";
+    print $OUT4 "null.pmc    1\n";
+    print $OUT4 "env.pmc 2\n";
+    print $OUT4 "notapmc 3\n";
+    close $OUT4 or croak "Unable to close file after writing: $!";
+    my $order_ref = auto::pmc::get_pmc_order();
+    is_deeply(
+        $order_ref,
+        {
+            'default.pmc' => 0,
+            'null.pmc' => 1,
+            'env.pmc' => 2,
+        },
+        "Able to read src/pmc/pmc.num correctly"
+    );
+
+    my @pmcs = qw| env.pmc default.pmc null.pmc other.pmc |;
+    my $pseudoman = 'MANIFEST';
+    open my $MAN, '>', $pseudoman or croak "Unable to open $pseudoman";
+    print $MAN "src/pmc/$_\n" for @pmcs[0..2];
+    close $MAN or croak;
+    {
+        my ($stdout, $stderr);
+        my @sorted_pmcs;
+        capture( sub {
+            @sorted_pmcs = split / /,
+                auto::pmc::get_sorted_pmc_str(@pmcs);
+            },
+            \$stdout,
+            \$stderr,
+        );
+        like( $stderr,
+            qr/PMCs found in \/src\/pmc not found in MANIFEST: $pmcs[3]/,
+            "Got expected warning",
+        );
+        is_deeply(
+            \@sorted_pmcs,
+            [ qw| default.pmc null.pmc env.pmc other.pmc | ],
+            "PMCs sorted correctly"
+        );
+    }
+
+    ok( chdir $cwd, 'changed back to original directory after testing' );
+}
+
+{
+    my $tdir = tempdir( CLEANUP => 1 );
+    ok( chdir $tdir, 'changed to temp directory for testing' );
+
+    my $pmcdir = qq{$tdir/src/pmc};
+    ok(mkpath($pmcdir, { mode => 0755 }), "Able to make directory for testing");
     eval { my $order_ref = auto::pmc::get_pmc_order(); };
     like($@,
         qr/Can't read src\/pmc\/pmc\.num/, "Got expected 'die' message");
@@ -138,6 +199,28 @@
     ok( chdir $cwd, 'changed back to original directory after testing' );
 }
 
+my $seen_man = auto::pmc::pmcs_in_manifest();
+ok( keys %{$seen_man}, 'src/pmc/*.pmc files were seen in MANIFEST' );
+
+{
+    my $tdir = tempdir( CLEANUP => 1 );
+    ok( chdir $tdir, 'changed to temp directory for testing' );
+
+    my @pmcs = qw| env.pmc default.pmc null.pmc other.pmc |;
+    my $pseudoman = 'foobar';
+    open my $MAN, '>', $pseudoman or croak "Unable to open $pseudoman";
+    print $MAN "src/pmc/$_\n" for @pmcs;
+    close $MAN or croak;
+
+    my $seen_manifest = auto::pmc::pmcs_in_manifest($pseudoman);
+    is_deeply(
+        $seen_manifest,
+        { map { $_ => 1} @pmcs },
+        "Got expected files in differently named MANIFEST",
+    );
+    ok( chdir $cwd, 'changed back to original directory after testing' );
+}
+
 pass("Completed all tests in $0");
 
 ################### DOCUMENTATION ###################

Modified: branches/unshared_buffers/t/tools/dump_pbc.t
==============================================================================
--- branches/unshared_buffers/t/tools/dump_pbc.t	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/t/tools/dump_pbc.t	Sun Aug 29 17:09:11 2010	(r48719)
@@ -4,7 +4,7 @@
 
 =head1 NAME
 
-t/tools/dumb_pbc.t - test the script tools/utils/dump_pbc.pl
+t/tools/dumb_pbc.t - test the script tools/dev/dump_pbc.pl
 
 =head1 SYNOPSIS
 
@@ -34,7 +34,7 @@
 
     my $PARROT   = ".$PConfig{slash}$PConfig{test_prog}";
     system( "$PARROT --output $pbc_fn $pir_fn" );
-    my $cmd = File::Spec->catfile( qw{. tools util dump_pbc.pl} );
+    my $cmd = File::Spec->catfile( qw{. tools dev dump_pbc.pl} );
     my $out = `$PConfig{perl} $cmd $pbc_fn`;
 
     like( $out, $snippet, $desc );

Deleted: branches/unshared_buffers/t/tools/pgegrep.t
==============================================================================
--- branches/unshared_buffers/t/tools/pgegrep.t	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,111 +0,0 @@
-#! perl
-# Copyright (C) 2009, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/tools/pgegrep.t - test the script tools/utils/pgegrep
-
-=head1 SYNOPSIS
-
-    % prove t/tools/pgegrep.t
-
-=head1 DESCRIPTION
-
-Tests the features of of the C<pgegrep> utility.
-
-=cut
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-
-use Fatal qw{open close};
-use Test::More;
-use Parrot::Test tests => 10;
-use Parrot::Config;
-use File::Spec   ();
-
-my $testdata = File::Spec->catfile(qw{. t tools testdata });
-my $testdata_escaped = $testdata;
-$testdata_escaped =~ s!\\!\\\\!g;
-
-sub pgegrep_output_like {
-    my ($options, $snippet, $desc)  = @_;
-
-    my $PARROT  = ".$PConfig{slash}$PConfig{test_prog}";
-    my $pgegrep = File::Spec->catfile( qw{. tools util pgegrep} );
-    my $out     = `$PARROT $pgegrep $options`;
-
-    like( $out, $snippet, $desc );
-
-    return;
-}
-
-pgegrep_output_like(
-    '-V',
-    qr!\Qpgegrep v0.0.1\E!,
-    'pge reports correct version'
-);
-
-pgegrep_output_like(
-    "cat $testdata",
-    qr!keyboardcat!,
-    'basic sanity of matching a literal'
-);
-
-pgegrep_output_like(
-    "-n cat $testdata",
-    qr!1:keyboardcat!,
-    'matching a literal with line number'
-);
-
-pgegrep_output_like(
-    "--line-number cat $testdata",
-    qr!1:keyboardcat!,
-    'matching a literal with line number with long option'
-);
-
-pgegrep_output_like(
-    "-H cat $testdata",
-    qr!$testdata_escaped:keyboardcat!,
-    'matching a literal with file name'
-);
-
-pgegrep_output_like(
-    "--with-filename cat $testdata",
-    qr!$testdata_escaped:keyboardcat!,
-    'matching a literal with file name with long option'
-);
-
-
-pgegrep_output_like(
-    "-v cat $testdata",
-    qr!saxophonegiraffe!,
-    'test inversion of match'
-);
-
-pgegrep_output_like(
-    "--invert-match cat $testdata",
-    qr!saxophonegiraffe!,
-    'test inversion of match with long option'
-);
-
-pgegrep_output_like(
-    "-l cat $testdata",
-    qr!$testdata_escaped!,
-    'find files that match'
-);
-
-pgegrep_output_like(
-    "--files-with-matches cat $testdata",
-    qr!$testdata_escaped!,
-    'find files that match with long option'
-);
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Copied: branches/unshared_buffers/tools/build/README (from r48712, trunk/tools/build/README)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/build/README	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/build/README)
@@ -0,0 +1,13 @@
+# $Id$
+README for tools/build/
+
+This directory is intended to hold programs, templates and configuration files
+invoked by the default 'make' target ('make all'), with or without
+command-line options, during the Parrot build process.
+
+Programs, templates and configuration files invoked by 'make install' or
+'make install-dev' should be placed in tools/release/.
+
+Other things being equal, programs, templates and configuration files invoked
+by all other 'make' targets (e.g., 'make headerizer') should be placed in
+tools/dev/.

Deleted: branches/unshared_buffers/tools/build/addopstags.pl
==============================================================================
--- branches/unshared_buffers/tools/build/addopstags.pl	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,54 +0,0 @@
-#!perl
-
-# Copyright (C) 2004-2006, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-
-=head1 NAME
-
-tools/build/addopstags.pl - add src/ops/*.ops to tags
-
-=head1 SYNOPSIS
-
- perl tools/build/addopstags.pl src/ops/*.ops
-
-=head1 DESCRIPTION
-
-Add src/ops/*.ops to tags file.
-
-=cut
-
-my %seen;
-my @tags;
-
-# Pull ops tags
-while (<>) {
-    if (/\bop \s+ (\w+) \s* \(/x) {
-        next if $seen{$1}++;
-
-        # tag file excmd xflags
-        push @tags, join( "\t", $1, $ARGV, qq{$.;"}, "f" ) . "\n";
-    }
-}
-continue {
-    close ARGV if eof;    # reset $.
-}
-
-# Pull existing tags
-open my $T, '<', 'tags';
-push @tags, <$T>;
-close $T;
-
-# Spit 'em out sorted
-open $T, '>', 'tags';
-print $T sort @tags;
-close $T;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/unshared_buffers/tools/build/headerizer.pl
==============================================================================
--- branches/unshared_buffers/tools/build/headerizer.pl	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,497 +0,0 @@
-#! perl
-# Copyright (C) 2001-2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-tools/build/headerizer.pl - Generates the function header parts of .h
-files from .c files
-
-=head1 SYNOPSIS
-
-    % perl tools/build/headerizer.pl OBJFILES
-
-=head1 DESCRIPTION
-
-Update the headers in F<include/parrot> with the function declarations in
-the F<*.pmc> or F<*.c> files that correspond to the F<*.o> files passed
-on the command line.
-
-=head1 TODO
-
-* Generate docs from funcs
-
-* Somehow handle static functions in the source file
-
-=head1 NOTES
-
-* the .c files MUST have a /* HEADERIZER HFILE: foo/bar.h */ directive in them
-
-* Support for multiple .c files pointing at the same .h file
-
-* Does NOT remove all blocks in the .h file, so if a .c file
-disappears, its block is "orphaned" and will remain there.
-
-=head1 COMMAND-LINE OPTIONS
-
-=over 4
-
-=item C<--macro=X>
-
-Print a list of all functions that have macro X.  For example, --macro=PARROT_EXPORT.
-
-=back
-
-=head1 COMMAND-LINE ARGUMENTS
-
-=over 4
-
-=item C<OBJFILES>
-
-One or more object file names.
-
-=back
-
-=cut
-
-use strict;
-use warnings;
-
-use Getopt::Long;
-use lib qw( lib );
-use Parrot::Config;
-use Parrot::Headerizer;
-
-my $headerizer = Parrot::Headerizer->new;
-
-main();
-
-=head1 FUNCTIONS
-
-=head2 extract_function_declaration_and_update_source( $cfile_name )
-
-Extract all the function declarations from the C file specified by
-I<$cfile_name>, and update the comment blocks within.
-
-=cut
-
-sub extract_function_declarations_and_update_source {
-    my $cfile_name = shift;
-
-    open( my $fhin, '<', $cfile_name ) or die "Can't open $cfile_name: $!";
-    my $text = join( '', <$fhin> );
-    close $fhin;
-
-    my @func_declarations = $headerizer->extract_function_declarations( $text );
-    for my $decl ( @func_declarations ) {
-        my $specs = $headerizer->function_components_from_declaration( $cfile_name, $decl );
-        my $name = $specs->{name};
-
-        my $heading = $headerizer->generate_documentation_signature($decl);
-
-        $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;
-    close $fhout;
-
-    return @func_declarations;
-}
-
-
-sub attrs_from_args {
-    my $func = shift;
-    my @args = @_;
-
-    my @attrs = ();
-    my @mods  = ();
-
-    my $name = $func->{name};
-    my $file = $func->{file};
-    my $n = 0;
-    for my $arg (@args) {
-        ++$n;
-        if ( $arg =~ m{ARG(?:MOD|OUT)(?:_NULLOK)?\((.+?)\)} ) {
-            my $modified = $1;
-            if ( $modified =~ s/.*\*/*/ ) {
-                # We're OK
-            }
-            else {
-                $modified =~ s/.* (\w+)$/$1/ or die qq{Unable to figure out the modified parm out of "$modified"};
-            }
-            push( @mods, "FUNC_MODIFIES($modified)" );
-        }
-        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|ARGFREE_NOTNULL|NOTNULL)\(} || $arg eq 'PARROT_INTERP' ) {
-            push( @attrs, "__attribute__nonnull__($n)" );
-        }
-        if ( ( $arg =~ m{\*} ) && ( $arg !~ /\b(SHIM|((ARGIN|ARGOUT|ARGMOD)(_NULLOK)?)|ARGFREE(_NOTNULL)?)\b/ ) ) {
-            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} );
-        }
-    }
-
-    return (@attrs, at mods);
-}
-
-sub asserts_from_args {
-    my @args = @_;
-    my @asserts;
-
-    for my $arg (@args) {
-        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|ARGFREE_NOTNULL|NOTNULL)\((.+)\)} ) {
-            my $var = $2;
-            if($var =~ /\(*\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\)\s*\(/) {
-                # argument is a function pointer
-                $var = $1;
-            }
-            else {
-                # try to isolate the variable's name;
-                # strip off everything before the final space or asterisk.
-                $var =~ s{.+[* ]([^* ]+)$}{$1};
-                # strip off a trailing "[]", if any.
-                $var =~ s{\[\]$}{};
-            }
-            push( @asserts, "PARROT_ASSERT_ARG($var)" );
-        }
-        if( $arg eq 'PARROT_INTERP' ) {
-            push( @asserts, "PARROT_ASSERT_ARG(interp)" );
-        }
-    }
-
-    return (@asserts);
-}
-
-sub make_function_decls {
-    my @funcs = @_;
-
-    my @decls;
-    foreach my $func (@funcs) {
-        my $multiline = 0;
-
-        my $return = $func->{return_type};
-        my $alt_void = ' ';
-
-        # Splint can't handle /*@alt void@*/ on pointers, although this page
-        # http://www.mail-archive.com/lclint-interest@virginia.edu/msg00139.html
-        # seems to say that we can.
-        if ( $func->{is_ignorable} && ($return !~ /\*/) ) {
-            $alt_void = " /*\@alt void@*/\n";
-        }
-
-        my $decl = sprintf( "%s%s%s(", $return, $alt_void, $func->{name} );
-        $decl = "static $decl" if $func->{is_static};
-
-        my @args    = @{ $func->{args} };
-        my @attrs   = attrs_from_args( $func, @args );
-
-        for my $arg (@args) {
-            if ( $arg =~ m{SHIM\((.+)\)} ) {
-                $arg = $1;
-                if ( $func->{is_static} || ( $arg =~ /\*/ ) ) {
-                    $arg = "SHIM($arg)";
-                }
-                else {
-                    $arg = "NULLOK($arg)";
-                }
-            }
-        }
-
-        my $argline = join( ", ", @args );
-        if ( length( $decl . $argline ) <= 75 ) {
-            $decl = "$decl$argline)";
-        }
-        else {
-            if ( $args[0] =~ /^((SHIM|PARROT)_INTERP|Interp)\b/ ) {
-                $decl .= ( shift @args );
-                $decl .= "," if @args;
-            }
-            $argline   = join( ",", map { "\n\t$_" } @args );
-            $decl      = "$decl$argline)";
-            $multiline = 1;
-        }
-
-        my $attrs = join( "", map { "\n\t\t$_" } @attrs );
-        if ($attrs) {
-            $decl .= $attrs;
-            $multiline = 1;
-        }
-        my @macros = @{ $func->{macros} };
-        $multiline = 1 if @macros;
-
-        $decl .= $multiline ? ";\n" : ";";
-        $decl = join( "\n", @macros, $decl );
-        $decl =~ s/\t/    /g;
-        push( @decls, $decl );
-    }
-
-    foreach my $func (@funcs) {
-        my @args    = @{ $func->{args} };
-        my @asserts = asserts_from_args( @args );
-
-        my $assert = "#define ASSERT_ARGS_" . $func->{name};
-        if(length($func->{name}) > 29) {
-            $assert .= " \\\n    ";
-        }
-        $assert .= " __attribute__unused__ int _ASSERT_ARGS_CHECK = (";
-        if(@asserts) {
-            $assert .= "\\\n       ";
-            $assert .= join(" \\\n    , ", @asserts);
-        }
-        else {
-            $assert .= "0";
-        }
-        $assert .= ")";
-        push(@decls, $assert);
-    }
-
-    return @decls;
-}
-
-sub read_file {
-    my $filename = shift;
-
-    open my $fh, '<', $filename or die "couldn't read '$filename': $!";
-    my $text = do { local $/ = undef; <$fh> };
-    close $fh;
-
-    return $text;
-}
-
-sub write_file {
-    my $filename = shift;
-    my $text     = shift;
-
-    open my $fh, '>', $filename or die "couldn't write '$filename': $!";
-    print {$fh} $text;
-    close $fh;
-}
-
-sub replace_headerized_declarations {
-    my $source_code = shift;
-    my $sourcefile = shift;
-    my $hfile       = shift;
-    my @funcs       = @_;
-
-    # Allow a way to not headerize statics
-    if ( $source_code =~ m{/\*\s*HEADERIZER NONE:\s*$sourcefile\s*\*/} ) {
-        return $source_code;
-    }
-
-    @funcs = sort api_first_then_alpha @funcs;
-
-    my @function_decls = make_function_decls(@funcs);
-
-    my $function_decls = join( "\n", @function_decls );
-    my $STARTMARKER    = qr{/\* HEADERIZER BEGIN: $sourcefile \*/\n};
-    my $ENDMARKER      = qr{/\* HEADERIZER END: $sourcefile \*/\n?};
-    my $DO_NOT_TOUCH   = q{/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */};
-
-    $source_code =~
-        s{($STARTMARKER)(?:.*?)($ENDMARKER)}
-         {$1$DO_NOT_TOUCH\n\n$function_decls\n$DO_NOT_TOUCH\n$2}s
-        or die "Need begin/end HEADERIZER markers for $sourcefile in $hfile\n";
-
-    return $source_code;
-}
-
-sub api_first_then_alpha {
-    return ( ( $b->{is_api} || 0 ) <=> ( $a->{is_api} || 0 ) )
-        || ( lc $a->{name} cmp lc $b->{name} );
-}
-
-sub main {
-    my $macro_match;
-    GetOptions(
-        'macro=s' => \$macro_match,
-    ) or exit(1);
-
-    die 'No files specified.' unless @ARGV;
-    my %ofiles;
-    ++$ofiles{$_} for @ARGV;
-    my @ofiles = sort keys %ofiles;
-    for (@ofiles) {
-        print "$_ is specified more than once.\n" if $ofiles{$_} > 1;
-    }
-    my %sourcefiles;
-    my %sourcefiles_with_statics;
-    my %api;
-
-    # Walk the object files and find corresponding source (either .c or .pmc)
-    for my $ofile (@ofiles) {
-        next if $ofile =~ m/^\Qsrc$PConfig{slash}ops\E/;
-
-        $ofile =~ s/\\/\//g;
-
-        my $is_yacc = ($ofile =~ /\.y$/);
-        if ( !$is_yacc ) {
-            my $sfile = $ofile;
-            $sfile    =~ s/\Q$PConfig{o}\E$/.s/;
-            next if -f $sfile;
-        }
-
-        my $cfile = $ofile;
-        $cfile =~ s/\Q$PConfig{o}\E$/.c/ or $is_yacc
-            or die "$cfile doesn't look like an object file";
-
-        my $pmcfile = $ofile;
-        $pmcfile =~ s/\Q$PConfig{o}\E$/.pmc/;
-
-        my $from_pmc = -f $pmcfile && !$is_yacc;
-
-        my $sourcefile = $from_pmc ? $pmcfile : $cfile;
-
-        my $source_code = read_file( $sourcefile );
-        die qq{can't find HEADERIZER HFILE directive in "$sourcefile"}
-            unless $source_code =~
-                m{ /\* \s+ HEADERIZER\ HFILE: \s+ ([^*]+?) \s+ \*/ }sx;
-
-        my $hfile = $1;
-        if ( ( $hfile ne 'none' ) && ( not -f $hfile ) ) {
-            die qq{"$hfile" not found (referenced from "$sourcefile")};
-        }
-
-        my @decls;
-        if ( $macro_match ) {
-            @decls = $headerizer->extract_function_declarations( $source_code );
-        }
-        else {
-            @decls = extract_function_declarations_and_update_source( $sourcefile );
-        }
-
-        for my $decl (@decls) {
-            my $components = $headerizer->function_components_from_declaration( $sourcefile, $decl );
-            push( @{ $sourcefiles{$hfile}->{$sourcefile} }, $components ) unless $hfile eq 'none';
-            push( @{ $sourcefiles_with_statics{$sourcefile} }, $components ) if $components->{is_static};
-            if ( $macro_match ) {
-                if ( grep { $_ eq $macro_match } @{$components->{macros}} ) {
-                    push( @{ $api{$sourcefile} }, $components );
-                }
-            }
-        }
-    }    # for @cfiles
-
-    if ( $macro_match ) {
-        my $nfuncs = 0;
-        for my $cfile ( sort keys %api ) {
-            my @funcs = sort { $a->{name} cmp $b->{name} } @{$api{$cfile}};
-            print "$cfile\n";
-            for my $func ( @funcs ) {
-                print "    $func->{name}\n";
-                ++$nfuncs;
-            }
-        }
-        my $s = $nfuncs == 1 ? '' : 's';
-        print "$nfuncs $macro_match function$s\n";
-    }
-    else { # Normal headerization and updating
-        # Update all the .h files
-        for my $hfile ( sort keys %sourcefiles ) {
-            my $sourcefiles = $sourcefiles{$hfile};
-
-            my $header = read_file($hfile);
-
-            for my $cfile ( sort keys %{$sourcefiles} ) {
-                my @funcs = @{ $sourcefiles->{$cfile} };
-                @funcs = grep { not $_->{is_static} } @funcs;    # skip statics
-
-                $header = replace_headerized_declarations( $header, $cfile, $hfile, @funcs );
-            }
-
-            write_file( $hfile, $header );
-        }
-
-        # Update all the .c files in place
-        for my $cfile ( sort keys %sourcefiles_with_statics ) {
-            my @funcs = @{ $sourcefiles_with_statics{$cfile} };
-            @funcs = grep { $_->{is_static} } @funcs;
-
-            my $source = read_file($cfile);
-            $source = replace_headerized_declarations( $source, 'static', $cfile, @funcs );
-
-            write_file( $cfile, $source );
-        }
-        print "Headerization complete.\n";
-    }
-
-    my %warnings = %{$headerizer->{warnings}};
-    if ( keys %warnings ) {
-        my $nwarnings     = 0;
-        my $nwarningfuncs = 0;
-        my $nwarningfiles = 0;
-        for my $file ( sort keys %warnings ) {
-            ++$nwarningfiles;
-            print "$file\n";
-            my $funcs = $warnings{$file};
-            for my $func ( sort keys %{$funcs} ) {
-                ++$nwarningfuncs;
-                for my $error ( @{ $funcs->{$func} } ) {
-                    print "    $func: $error\n";
-                    ++$nwarnings;
-                }
-            }
-        }
-
-        print "$nwarnings warnings in $nwarningfuncs funcs in $nwarningfiles C files\n";
-    }
-
-    return;
-}
-
-=head1 NAME
-
-headerizer.pl
-
-=head1 SYNOPSIS
-
-  $ tools/build/headerizer.pl [object files]
-
-Generates C function declarations based on the function definitions in
-the C source code.
-
-=head1 DIRECTIVES
-
-The headerizer works off of directives in the source and header files.
-
-One source file's public declarations can only go into one header file.
-However, one header file can have declarations from multiple source files.
-In other words, headers-to-source is one-to-many.
-
-=over 4
-
-=item HEADERIZER BEGIN: F<source-filename> / HEADERIZER END: F<source-filename>
-
-Marks the beginning and end of a block of declarations in a header file.
-
-    # In file foo.h
-    /* HEADERIZER BEGIN: src/foo.c */
-    /* HEADERIZER END: src/foo.c */
-
-    /* HEADERIZER BEGIN: src/bar.c */
-    /* HEADERIZER END: src/bar.c */
-
-=item HEADERIZER HFILE: F<header-filename>
-
-Tells the headerizer where the declarations for the functions should go
-
-    # In file foo.c
-    /* HEADERIZER HFILE: foo.h */
-
-    # In file bar.c
-    /* HEADERIZER HFILE: foo.h */
-
-=back
-
-=cut
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Copied: branches/unshared_buffers/tools/dev/README (from r48712, trunk/tools/dev/README)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/README	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/README)
@@ -0,0 +1,7 @@
+# $Id$
+README for tools/dev/
+
+This directory is intended to hold programs, templates and configuration files
+found useful by Parrot developed other than those (a) invoked by the default
+'make' target ('make all'), with or without command-line options, during the
+Parrot build process; or (b) invoked by 'make install' or 'make install-dev'.

Copied: branches/unshared_buffers/tools/dev/addopstags.pl (from r48712, trunk/tools/dev/addopstags.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/addopstags.pl	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/addopstags.pl)
@@ -0,0 +1,54 @@
+#!perl
+
+# Copyright (C) 2004-2006, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+=head1 NAME
+
+tools/dev/addopstags.pl - add src/ops/*.ops to tags
+
+=head1 SYNOPSIS
+
+ perl tools/dev/addopstags.pl src/ops/*.ops
+
+=head1 DESCRIPTION
+
+Add src/ops/*.ops to tags file.
+
+=cut
+
+my %seen;
+my @tags;
+
+# Pull ops tags
+while (<>) {
+    if (/\bop \s+ (\w+) \s* \(/x) {
+        next if $seen{$1}++;
+
+        # tag file excmd xflags
+        push @tags, join( "\t", $1, $ARGV, qq{$.;"}, "f" ) . "\n";
+    }
+}
+continue {
+    close ARGV if eof;    # reset $.
+}
+
+# Pull existing tags
+open my $T, '<', 'tags';
+push @tags, <$T>;
+close $T;
+
+# Spit 'em out sorted
+open $T, '>', 'tags';
+print $T sort @tags;
+close $T;
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/unshared_buffers/tools/dev/as2c.pl
==============================================================================
--- branches/unshared_buffers/tools/dev/as2c.pl	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/tools/dev/as2c.pl	Sun Aug 29 17:09:11 2010	(r48719)
@@ -6,16 +6,16 @@
 
 =head1 NAME
 
-as2c.pl - convert gas assembler listing to i386 code array
+as2c.pl - convert GNU Assembler listing to i386 code array
 
 =head1 DESCRIPTION
 
-The plan behind of as2c.pl is to create compiler independent
-machine code for an architecture. Code in e.g. masm, gas, nasm syntax
-doesn't fit all compilers. Therefore as2c.pl translates gas syntax to a
+The plan behind of F<as2c.pl> is to create compiler independent
+machine code for an architecture. Code in, I<e.g.,> MASM, GAS, NASM syntax
+doesn't fit all compilers. Therefore F<as2c.pl> translates GAS syntax to a
 bytestring, which is then used as the asm code.
 
-as2c.pl is used very rarely. Once the code is generated and
+F<as2c.pl> is used very rarely. Once the code is generated and
 checked in, there's usually no need to change it later.
 
 =cut
@@ -125,6 +125,16 @@
     close $IN;
 }
 
+=head1 REFERENCES
+
+GNU Assembler: (GAS) L<http://en.wikipedia.org/wiki/GNU_Assembler>
+
+Microsoft Macro Assembler (MASM): L<http://en.wikipedia.org/wiki/Microsoft_Macro_Assembler>
+
+Netwide Assembler (NASM) L<http://en.wikipedia.org/wiki/Netwide_Assembler>
+
+=cut
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Copied: branches/unshared_buffers/tools/dev/dump_pbc.pl (from r48712, trunk/tools/dev/dump_pbc.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/dump_pbc.pl	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/dump_pbc.pl)
@@ -0,0 +1,125 @@
+#! perl
+
+# Copyright (C) 2008, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+tools/dev/dump_pbc.pl - Weave together PBC disassembly with PIR source
+
+=head1 SYNOPSIS
+
+ perl tools/dev/dump_pbc.pl foo.pbc
+
+=head1 DESCRIPTION
+
+dump_pbc.pl uses Parrot's F<pbc_disassemble> program to disassemble the opcodes
+in a PBC (Parrot ByteCode) file, then weaves the disassembly together with
+the original PIR source file(s).  This makes it easier to see how the PIR
+syntactic sugar is desugared into raw Parrot opcodes.
+
+=head1 BUGS
+
+This program has only been tested for a few simple cases.  Also, the name
+might suggest a different use than its actual purpose.
+
+While it is not a bug in F<dump_pbc.pl> per se, there is a line numbering
+bug for some PBC opcode sequences that will result in the disassembled
+opcodes appearing just before the source lines they represent, rather
+than just after.  There does not appear to be consensus yet about where
+this bug actually resides.
+
+=cut
+
+use strict;
+use warnings;
+use Cwd;
+use FindBin;
+
+my ($PARROT_ROOT, $RUNTIME_DIR);
+BEGIN {
+    $PARROT_ROOT = Cwd::abs_path("$FindBin::Bin/../..");
+    $RUNTIME_DIR = "$PARROT_ROOT/runtime/parrot";
+}
+
+use lib "$PARROT_ROOT/lib";
+use Parrot::Config '%PConfig';
+
+my $DISASSEMBLER = "$PConfig{build_dir}$PConfig{slash}pbc_disassemble$PConfig{exe}";
+
+go(@ARGV);
+
+sub go {
+    my $pbc = shift;
+
+    # The following mess brought to you by Win32, where pipe open doesn't work,
+    # and thus its greater security and cleaner error handling are unavailable.
+
+    -f $pbc && -r _
+        or die "PBC file '$pbc' does not exist or is not readable.\n";
+
+    -f $DISASSEMBLER && -x _
+        or die  "Can't find disassembler '$DISASSEMBLER';"
+              . "did you remember to make parrot first?\n";
+
+    my @dis = `$DISASSEMBLER $pbc`;
+    die "No disassembly; errors: $?, $!" unless @dis;
+
+    my $cur_file = '';
+    my $cur_line = -1;
+    my %cache;
+
+    foreach (@dis) {
+        if (/^(?:# )?Current Source Filename (.*)/) {
+            my $found = $1;
+            $found =~ s/^'//;
+            $found =~ s/'$//;
+            if ($cur_file ne $found) {
+                $cur_file           = $found;
+                $cache{$cur_file} ||= slurp_file($cur_file);
+                $cur_line           = -1;
+
+                print "\n#### $cur_file\n";
+            }
+        }
+        elsif (my ($info, $seq, $pc, $line, $code) = /^((\d+)-(\d+) (\d+): )(.*)/) {
+            my $int_line = int    $line;
+            my $len_line = length $line;
+            if ($cur_line != $int_line) {
+                $cur_line = 0 if $cur_line == -1;
+                print "\n";
+                foreach my $i ($cur_line + 1 .. $int_line) {
+                    my $source_code = $cache{$cur_file}[$i-1];
+                    # next    unless $source_code =~ /\S/;
+                    printf "# %*d:   %s", $len_line, $i, $source_code;
+                    print  "\n" if $source_code =~ /^\.end/;
+                }
+                $cur_line  = $int_line;
+            }
+
+            print ' ' x ($len_line + 4), "$code\n";
+        }
+    }
+}
+
+sub slurp_file {
+    my $file = shift;
+    my $source;
+
+       open $source, '<', $file
+    or open $source, '<', "$PARROT_ROOT/$file"
+    or open $source, '<', "$RUNTIME_DIR/$file"
+    or die "Could not open source file '$file': $!";
+
+    my @lines = <$source>;
+
+    return \@lines;
+}
+
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/unshared_buffers/tools/dev/faces.pl
==============================================================================
--- branches/unshared_buffers/tools/dev/faces.pl	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/tools/dev/faces.pl	Sun Aug 29 17:09:11 2010	(r48719)
@@ -7,9 +7,21 @@
 
 use Gravatar::URL;
 
-=for usage
+=head1 NAME
 
-use to generate source for http://trac.parrot.org/parrot/wiki/ParrotFaces
+faces.pl - Generate source for Parrot wiki ParrotFaces page
+
+=head1 SYNOPSIS
+
+    perl tools/dev/faces.pl
+
+=head1 DESCRIPTION
+
+Used to create L<http://trac.parrot.org/parrot/wiki/ParrotFaces>
+
+=head1 PREREQUISITE
+
+Gravatar::URL (L<http://search.cpan.org/dist/Gravatar-URL/>).
 
 =cut
 

Modified: branches/unshared_buffers/tools/dev/fetch_languages.pl
==============================================================================
--- branches/unshared_buffers/tools/dev/fetch_languages.pl	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/tools/dev/fetch_languages.pl	Sun Aug 29 17:09:11 2010	(r48719)
@@ -3,7 +3,8 @@
 
 =head1 NAME
 
-fetch_languages.pl - A helper to fetch language implementations from the SCM repoistories
+fetch_languages.pl - Fetch language implementations from their source code
+management repositories
 
 =head1 SYNOPSIS
 

Copied: branches/unshared_buffers/tools/dev/headerizer.pl (from r48712, trunk/tools/dev/headerizer.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/headerizer.pl	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/headerizer.pl)
@@ -0,0 +1,464 @@
+#! perl
+# Copyright (C) 2001-2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+tools/dev/headerizer.pl - Generates the function header parts of .h
+files from .c files
+
+=head1 SYNOPSIS
+
+  $ perl tools/dev/headerizer.pl [object files]
+
+Generates C function declarations based on the function definitions in
+the C source code.
+
+=head1 DESCRIPTION
+
+The headerizer works off of directives in the source and header files.
+
+One source file's public declarations can only go into one header file.
+However, one header file can have declarations from multiple source files.
+In other words, headers-to-source is one-to-many.
+
+=over 4
+
+=item C<HEADERIZER BEGIN:> F<source-filename> / C<HEADERIZER END:> F<source-filename>
+
+Marks the beginning and end of a block of declarations in a header file.
+
+    # In file foo.h
+    /* HEADERIZER BEGIN: src/foo.c */
+    /* HEADERIZER END: src/foo.c */
+
+    /* HEADERIZER BEGIN: src/bar.c */
+    /* HEADERIZER END: src/bar.c */
+
+=item C<HEADERIZER HFILE:> F<header-filename>
+
+Tells the headerizer where the declarations for the functions should go
+
+    # In file foo.c
+    /* HEADERIZER HFILE: foo.h */
+
+    # In file bar.c
+    /* HEADERIZER HFILE: foo.h */
+
+=back
+
+=head1 COMMAND-LINE OPTIONS
+
+=over 4
+
+=item C<--macro=X>
+
+Print a list of all functions that have macro X.  For example, --macro=PARROT_EXPORT.
+
+=back
+
+=cut
+
+use strict;
+use warnings;
+
+use Getopt::Long;
+use lib qw( lib );
+use Parrot::Config;
+use Parrot::Headerizer;
+
+my $headerizer = Parrot::Headerizer->new;
+
+main();
+
+=head1 FUNCTIONS
+
+=head2 extract_function_declaration_and_update_source( $cfile_name )
+
+Extract all the function declarations from the C file specified by
+I<$cfile_name>, and update the comment blocks within.
+
+=cut
+
+sub extract_function_declarations_and_update_source {
+    my $cfile_name = shift;
+
+    open( my $fhin, '<', $cfile_name ) or die "Can't open $cfile_name: $!";
+    my $text = join( '', <$fhin> );
+    close $fhin;
+
+    my @func_declarations = $headerizer->extract_function_declarations( $text );
+    for my $decl ( @func_declarations ) {
+        my $specs = $headerizer->function_components_from_declaration( $cfile_name, $decl );
+        my $name = $specs->{name};
+
+        my $heading = $headerizer->generate_documentation_signature($decl);
+
+        $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;
+    close $fhout;
+
+    return @func_declarations;
+}
+
+
+sub attrs_from_args {
+    my $func = shift;
+    my @args = @_;
+
+    my @attrs = ();
+    my @mods  = ();
+
+    my $name = $func->{name};
+    my $file = $func->{file};
+    my $n = 0;
+    for my $arg (@args) {
+        ++$n;
+        if ( $arg =~ m{ARG(?:MOD|OUT)(?:_NULLOK)?\((.+?)\)} ) {
+            my $modified = $1;
+            if ( $modified =~ s/.*\*/*/ ) {
+                # We're OK
+            }
+            else {
+                $modified =~ s/.* (\w+)$/$1/ or die qq{Unable to figure out the modified parm out of "$modified"};
+            }
+            push( @mods, "FUNC_MODIFIES($modified)" );
+        }
+        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|ARGFREE_NOTNULL|NOTNULL)\(} || $arg eq 'PARROT_INTERP' ) {
+            push( @attrs, "__attribute__nonnull__($n)" );
+        }
+        if ( ( $arg =~ m{\*} ) && ( $arg !~ /\b(SHIM|((ARGIN|ARGOUT|ARGMOD)(_NULLOK)?)|ARGFREE(_NOTNULL)?)\b/ ) ) {
+            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} );
+        }
+    }
+
+    return (@attrs, at mods);
+}
+
+sub asserts_from_args {
+    my @args = @_;
+    my @asserts;
+
+    for my $arg (@args) {
+        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|ARGFREE_NOTNULL|NOTNULL)\((.+)\)} ) {
+            my $var = $2;
+            if($var =~ /\(*\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\)\s*\(/) {
+                # argument is a function pointer
+                $var = $1;
+            }
+            else {
+                # try to isolate the variable's name;
+                # strip off everything before the final space or asterisk.
+                $var =~ s{.+[* ]([^* ]+)$}{$1};
+                # strip off a trailing "[]", if any.
+                $var =~ s{\[\]$}{};
+            }
+            push( @asserts, "PARROT_ASSERT_ARG($var)" );
+        }
+        if( $arg eq 'PARROT_INTERP' ) {
+            push( @asserts, "PARROT_ASSERT_ARG(interp)" );
+        }
+    }
+
+    return (@asserts);
+}
+
+sub make_function_decls {
+    my @funcs = @_;
+
+    my @decls;
+    foreach my $func (@funcs) {
+        my $multiline = 0;
+
+        my $return = $func->{return_type};
+        my $alt_void = ' ';
+
+        # Splint can't handle /*@alt void@*/ on pointers, although this page
+        # http://www.mail-archive.com/lclint-interest@virginia.edu/msg00139.html
+        # seems to say that we can.
+        if ( $func->{is_ignorable} && ($return !~ /\*/) ) {
+            $alt_void = " /*\@alt void@*/\n";
+        }
+
+        my $decl = sprintf( "%s%s%s(", $return, $alt_void, $func->{name} );
+        $decl = "static $decl" if $func->{is_static};
+
+        my @args    = @{ $func->{args} };
+        my @attrs   = attrs_from_args( $func, @args );
+
+        for my $arg (@args) {
+            if ( $arg =~ m{SHIM\((.+)\)} ) {
+                $arg = $1;
+                if ( $func->{is_static} || ( $arg =~ /\*/ ) ) {
+                    $arg = "SHIM($arg)";
+                }
+                else {
+                    $arg = "NULLOK($arg)";
+                }
+            }
+        }
+
+        my $argline = join( ", ", @args );
+        if ( length( $decl . $argline ) <= 75 ) {
+            $decl = "$decl$argline)";
+        }
+        else {
+            if ( $args[0] =~ /^((SHIM|PARROT)_INTERP|Interp)\b/ ) {
+                $decl .= ( shift @args );
+                $decl .= "," if @args;
+            }
+            $argline   = join( ",", map { "\n\t$_" } @args );
+            $decl      = "$decl$argline)";
+            $multiline = 1;
+        }
+
+        my $attrs = join( "", map { "\n\t\t$_" } @attrs );
+        if ($attrs) {
+            $decl .= $attrs;
+            $multiline = 1;
+        }
+        my @macros = @{ $func->{macros} };
+        $multiline = 1 if @macros;
+
+        $decl .= $multiline ? ";\n" : ";";
+        $decl = join( "\n", @macros, $decl );
+        $decl =~ s/\t/    /g;
+        push( @decls, $decl );
+    }
+
+    foreach my $func (@funcs) {
+        my @args    = @{ $func->{args} };
+        my @asserts = asserts_from_args( @args );
+
+        my $assert = "#define ASSERT_ARGS_" . $func->{name};
+        if(length($func->{name}) > 29) {
+            $assert .= " \\\n    ";
+        }
+        $assert .= " __attribute__unused__ int _ASSERT_ARGS_CHECK = (";
+        if(@asserts) {
+            $assert .= "\\\n       ";
+            $assert .= join(" \\\n    , ", @asserts);
+        }
+        else {
+            $assert .= "0";
+        }
+        $assert .= ")";
+        push(@decls, $assert);
+    }
+
+    return @decls;
+}
+
+sub read_file {
+    my $filename = shift;
+
+    open my $fh, '<', $filename or die "couldn't read '$filename': $!";
+    my $text = do { local $/ = undef; <$fh> };
+    close $fh;
+
+    return $text;
+}
+
+sub write_file {
+    my $filename = shift;
+    my $text     = shift;
+
+    open my $fh, '>', $filename or die "couldn't write '$filename': $!";
+    print {$fh} $text;
+    close $fh;
+}
+
+sub replace_headerized_declarations {
+    my $source_code = shift;
+    my $sourcefile = shift;
+    my $hfile       = shift;
+    my @funcs       = @_;
+
+    # Allow a way to not headerize statics
+    if ( $source_code =~ m{/\*\s*HEADERIZER NONE:\s*$sourcefile\s*\*/} ) {
+        return $source_code;
+    }
+
+    @funcs = sort api_first_then_alpha @funcs;
+
+    my @function_decls = make_function_decls(@funcs);
+
+    my $function_decls = join( "\n", @function_decls );
+    my $STARTMARKER    = qr{/\* HEADERIZER BEGIN: $sourcefile \*/\n};
+    my $ENDMARKER      = qr{/\* HEADERIZER END: $sourcefile \*/\n?};
+    my $DO_NOT_TOUCH   = q{/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */};
+
+    $source_code =~
+        s{($STARTMARKER)(?:.*?)($ENDMARKER)}
+         {$1$DO_NOT_TOUCH\n\n$function_decls\n$DO_NOT_TOUCH\n$2}s
+        or die "Need begin/end HEADERIZER markers for $sourcefile in $hfile\n";
+
+    return $source_code;
+}
+
+sub api_first_then_alpha {
+    return ( ( $b->{is_api} || 0 ) <=> ( $a->{is_api} || 0 ) )
+        || ( lc $a->{name} cmp lc $b->{name} );
+}
+
+sub main {
+    my $macro_match;
+    GetOptions(
+        'macro=s' => \$macro_match,
+    ) or exit(1);
+
+    die 'No files specified.' unless @ARGV;
+    my %ofiles;
+    ++$ofiles{$_} for @ARGV;
+    my @ofiles = sort keys %ofiles;
+    for (@ofiles) {
+        print "$_ is specified more than once.\n" if $ofiles{$_} > 1;
+    }
+    my %sourcefiles;
+    my %sourcefiles_with_statics;
+    my %api;
+
+    # Walk the object files and find corresponding source (either .c or .pmc)
+    for my $ofile (@ofiles) {
+        next if $ofile =~ m/^\Qsrc$PConfig{slash}ops\E/;
+
+        $ofile =~ s/\\/\//g;
+
+        my $is_yacc = ($ofile =~ /\.y$/);
+        if ( !$is_yacc ) {
+            my $sfile = $ofile;
+            $sfile    =~ s/\Q$PConfig{o}\E$/.s/;
+            next if -f $sfile;
+        }
+
+        my $cfile = $ofile;
+        $cfile =~ s/\Q$PConfig{o}\E$/.c/ or $is_yacc
+            or die "$cfile doesn't look like an object file";
+
+        my $pmcfile = $ofile;
+        $pmcfile =~ s/\Q$PConfig{o}\E$/.pmc/;
+
+        my $from_pmc = -f $pmcfile && !$is_yacc;
+
+        my $sourcefile = $from_pmc ? $pmcfile : $cfile;
+
+        my $source_code = read_file( $sourcefile );
+        die qq{can't find HEADERIZER HFILE directive in "$sourcefile"}
+            unless $source_code =~
+                m{ /\* \s+ HEADERIZER\ HFILE: \s+ ([^*]+?) \s+ \*/ }sx;
+
+        my $hfile = $1;
+        if ( ( $hfile ne 'none' ) && ( not -f $hfile ) ) {
+            die qq{"$hfile" not found (referenced from "$sourcefile")};
+        }
+
+        my @decls;
+        if ( $macro_match ) {
+            @decls = $headerizer->extract_function_declarations( $source_code );
+        }
+        else {
+            @decls = extract_function_declarations_and_update_source( $sourcefile );
+        }
+
+        for my $decl (@decls) {
+            my $components = $headerizer->function_components_from_declaration( $sourcefile, $decl );
+            push( @{ $sourcefiles{$hfile}->{$sourcefile} }, $components ) unless $hfile eq 'none';
+            push( @{ $sourcefiles_with_statics{$sourcefile} }, $components ) if $components->{is_static};
+            if ( $macro_match ) {
+                if ( grep { $_ eq $macro_match } @{$components->{macros}} ) {
+                    push( @{ $api{$sourcefile} }, $components );
+                }
+            }
+        }
+    }    # for @cfiles
+
+    if ( $macro_match ) {
+        my $nfuncs = 0;
+        for my $cfile ( sort keys %api ) {
+            my @funcs = sort { $a->{name} cmp $b->{name} } @{$api{$cfile}};
+            print "$cfile\n";
+            for my $func ( @funcs ) {
+                print "    $func->{name}\n";
+                ++$nfuncs;
+            }
+        }
+        my $s = $nfuncs == 1 ? '' : 's';
+        print "$nfuncs $macro_match function$s\n";
+    }
+    else { # Normal headerization and updating
+        # Update all the .h files
+        for my $hfile ( sort keys %sourcefiles ) {
+            my $sourcefiles = $sourcefiles{$hfile};
+
+            my $header = read_file($hfile);
+
+            for my $cfile ( sort keys %{$sourcefiles} ) {
+                my @funcs = @{ $sourcefiles->{$cfile} };
+                @funcs = grep { not $_->{is_static} } @funcs;    # skip statics
+
+                $header = replace_headerized_declarations( $header, $cfile, $hfile, @funcs );
+            }
+
+            write_file( $hfile, $header );
+        }
+
+        # Update all the .c files in place
+        for my $cfile ( sort keys %sourcefiles_with_statics ) {
+            my @funcs = @{ $sourcefiles_with_statics{$cfile} };
+            @funcs = grep { $_->{is_static} } @funcs;
+
+            my $source = read_file($cfile);
+            $source = replace_headerized_declarations( $source, 'static', $cfile, @funcs );
+
+            write_file( $cfile, $source );
+        }
+        print "Headerization complete.\n";
+    }
+
+    my %warnings = %{$headerizer->{warnings}};
+    if ( keys %warnings ) {
+        my $nwarnings     = 0;
+        my $nwarningfuncs = 0;
+        my $nwarningfiles = 0;
+        for my $file ( sort keys %warnings ) {
+            ++$nwarningfiles;
+            print "$file\n";
+            my $funcs = $warnings{$file};
+            for my $func ( sort keys %{$funcs} ) {
+                ++$nwarningfuncs;
+                for my $error ( @{ $funcs->{$func} } ) {
+                    print "    $func: $error\n";
+                    ++$nwarnings;
+                }
+            }
+        }
+
+        print "$nwarnings warnings in $nwarningfuncs funcs in $nwarningfiles C files\n";
+    }
+
+    return;
+}
+
+# From earlier documentation:
+# * Generate docs from funcs
+# * Somehow handle static functions in the source file
+# * the .c files MUST have a /* HEADERIZER HFILE: foo/bar.h */ directive in them
+# * Support for multiple .c files pointing at the same .h file
+# * Does NOT remove all blocks in the .h file, so if a .c file
+#   disappears, its block is "orphaned" and will remain there.
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/unshared_buffers/tools/dev/mk_language_shell.in (from r48712, trunk/tools/dev/mk_language_shell.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/mk_language_shell.in	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/mk_language_shell.in)
@@ -0,0 +1,787 @@
+#!@perl@
+# Copyright (C) 2007-2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+tools/dev/mk_language_shell.pl -- create initial files for a new language implementation
+
+=head1 SYNOPSIS
+
+ % perl tools/dev/mk_language_shell.pl [options] Xyz [path]
+
+option:
+
+ --with-doc
+ --with-ops
+ --with-pmc
+
+=head1 DESCRIPTION
+
+This script populates a directory with files for building a
+new language translator in Parrot. The first argument is the
+name of the language to be built. The C<path> argument
+says where to populate the directory, if no C<path> is specified
+then it is taken to be a subdirectory of the current directory
+with the same name as the language (converted to lowercase).
+
+For a language 'Xyz', this script will create the following
+files and directories (relative to C<path>, which defaults
+to F<xyz> if an explicit C<path> isn't given):
+
+    PARROT_REVISION
+    README
+    setup.pir
+    xyz.pir
+    doc/running.pod
+    doc/Xyz.pod
+    src/Xyz.pir
+    src/Xyz/Grammar.pm
+    src/Xyz/Actions.pm
+    src/Xyz/Compiler.pm
+    src/Xyz/Runtime.pm
+    src/pmc/xyz.pmc
+    src/ops/xyz.ops
+    src/xyz.pir
+    t/00-sanity.t
+    xyz/.ignore
+
+Any files that already exist are skipped, so this script can
+be used to repopulate a language directory with omitted files.
+
+If all goes well, after creating the language shell one can simply
+change to the language directory and type
+
+    $ parrot setup.pir
+    $ parrot setup.pir test
+
+to verify that the new language compiles and configures properly.
+
+=cut
+
+use strict;
+use warnings;
+
+use FindBin qw($Bin);
+use lib "$Bin/../lib";    # install location
+use lib "$Bin/../../lib"; # build location
+
+use File::Path;
+use File::Spec;
+use Getopt::Long;
+
+use Parrot::Config qw/ %PConfig /;
+
+my ($with_doc, $with_ops, $with_pmc);
+GetOptions(
+    'with-doc' => \$with_doc,
+    'with-ops' => \$with_ops,
+    'with-pmc' => \$with_pmc,
+);
+
+unless (@ARGV) {
+    die "usage: $0 language [path]\n";
+}
+
+##  determine the language we're trying to build
+my $lang = $ARGV[0];
+my $lclang = lc $lang;
+my $uclang = uc $lang;
+
+## the name and revision of the script, for use in the generated README
+my $script = $0;
+my $rev = '$Revision$';
+$rev =~ s/^\D*(\d+)\D*$/$1/;
+
+my $no_doc = $with_doc ? '' : '#';
+my $no_ops = $with_ops ? '' : '#';
+my $no_pmc = $with_pmc ? '' : '#';
+
+##  get the path from the command line, or if not supplied then
+##  use $lclang.
+my $path = $ARGV[1] || $lclang;
+
+##  now loop through the file information (see below), substituting
+##  any instances of @lang@, @lclang@, @UCLANG@, and @Id@ with
+##  the language name or the svn id tag.  If the line has the form
+##  __filepath__, then start a new file.
+my $fh;
+while (<DATA>) {
+    last if /^__DATA__$/;
+    s{\@lang\@}   {$lang}g;
+    s{\@lclang\@} {$lclang}ig;
+    s{\@UCLANG\@} {$uclang}ig;
+    s{\@Id\@}     {\$Id\$}ig;
+    s{\@script\@} {$script}ig;
+    s{\@rev\@}    {$rev}ig;
+    s{\@no_doc\@} {$no_doc}ig;
+    s{\@no_ops\@} {$no_ops}ig;
+    s{\@no_pmc\@} {$no_pmc}ig;
+    s{\@rev\@}    {$rev}ig;
+    if (/^__(.*)__$/) { start_new_file("$path$PConfig{slash}$1"); }
+    elsif ($fh) { print $fh $_; }
+}
+##  close the last file
+close($fh) if $fh;
+
+##  we're done
+1;
+
+
+##  this function closes any previous opened file, and determines
+##  if we're creating a new file.  It also calls C<mkpath> to
+##  create any needed parent subdirectories.
+sub start_new_file {
+    my ($filepath) = @_;
+    if ($fh) {
+        close $fh;
+        undef $fh;
+    }
+    if (-e $filepath) {
+        print "skipping $filepath\n";
+        return;
+    }
+    if (!$with_doc and $filepath =~ /doc/) {
+        print "no doc: skipping $filepath\n";
+        return;
+    }
+    if (!$with_ops and $filepath =~ /ops/) {
+        print "no ops: skipping $filepath\n";
+        return;
+    }
+    if (!$with_pmc and $filepath =~ /pmc/) {
+        print "no pmc: skipping $filepath\n";
+        return;
+    }
+    if (!$with_ops and!$with_pmc and $filepath =~ /dynext/) {
+        print "no dynext: skipping $filepath\n";
+        return;
+    }
+    my ($volume, $dir, $base) = File::Spec->splitpath($filepath);
+    my $filedir = File::Spec->catpath($volume, $dir);
+    unless (-d $filedir) {
+        print "creating $filedir\n";
+        mkpath( [ $filedir ], 0, 0777 );
+    }
+    print "creating $filepath\n";
+    open $fh, '>', $filepath;
+
+    return;
+}
+
+
+
+###  The section below contains the text of the files to be created.
+###  The name of the file to be created is given as C<__filepath__>,
+###  and all subsequent lines up to the next C<__filepath__> are
+###  placed in the file (performing substitutions on @lang@, @lclang@,
+###  @UCLANG@, and @Id@ as appropriate).
+
+__DATA__
+__README__
+Language '@lang@' was created with @script@, r at rev@.
+
+    $ parrot setup.pir
+    $ parrot setup.pir test
+
+__setup.pir__
+#!/usr/bin/env parrot
+# @Id@
+
+=head1 NAME
+
+setup.pir - Python distutils style
+
+=head1 DESCRIPTION
+
+No Configure step, no Makefile generated.
+
+=head1 USAGE
+
+    $ parrot setup.pir build
+    $ parrot setup.pir test
+    $ sudo parrot setup.pir install
+
+=cut
+
+.sub 'main' :main
+    .param pmc args
+    $S0 = shift args
+    load_bytecode 'distutils.pbc'
+
+    .local int reqsvn
+    $P0 = new 'FileHandle'
+    $P0.'open'('PARROT_REVISION', 'r')
+    $S0 = $P0.'readline'()
+    reqsvn = $S0
+    $P0.'close'()
+
+    .local pmc config
+    config = get_config()
+    $I0 = config['revision']
+    unless $I0 goto L1
+    unless reqsvn > $I0 goto L1
+    $S1 = "Parrot revision r"
+    $S0 = reqsvn
+    $S1 .= $S0
+    $S1 .= " required (currently r"
+    $S0 = $I0
+    $S1 .= $S0
+    $S1 .= ")\n"
+    print $S1
+    end
+  L1:
+
+    $P0 = new 'Hash'
+    $P0['name'] = '@lang@'
+    $P0['abstract'] = 'the @lang@ compiler'
+    $P0['description'] = 'the @lang@ for Parrot VM.'
+
+    # build
+ at no_ops@    $P1 = new 'Hash'
+ at no_ops@    $P1['@lclang at _ops'] = 'src/ops/@lclang at .ops'
+ at no_ops@    $P0['dynops'] = $P1
+
+ at no_pmc@    $P2 = new 'Hash'
+ at no_pmc@    $P3 = split ' ', 'src/pmc/@lclang at .pmc'
+ at no_pmc@    $P2['@lclang at _group'] = $P3
+ at no_pmc@    $P0['dynpmc'] = $P2
+
+    $P4 = new 'Hash'
+    $P4['src/gen_actions.pir'] = 'src/@lang@/Actions.pm'
+    $P4['src/gen_compiler.pir'] = 'src/@lang@/Compiler.pm'
+    $P4['src/gen_grammar.pir'] = 'src/@lang@/Grammar.pm'
+    $P4['src/gen_runtime.pir'] = 'src/@lang@/Runtime.pm'
+    $P0['pir_nqp-rx'] = $P4
+
+    $P5 = new 'Hash'
+    $P6 = split "\n", <<'SOURCES'
+src/@lclang at .pir
+src/gen_actions.pir
+src/gen_compiler.pir
+src/gen_grammar.pir
+src/gen_runtime.pir
+SOURCES
+    $S0 = pop $P6
+    $P5['@lclang@/@lclang at .pbc'] = $P6
+    $P5['@lclang at .pbc'] = '@lclang at .pir'
+    $P0['pbc_pir'] = $P5
+
+    $P7 = new 'Hash'
+    $P7['parrot- at lclang@'] = '@lclang at .pbc'
+    $P0['installable_pbc'] = $P7
+
+    # test
+    $S0 = get_parrot()
+    $S0 .= ' @lclang at .pbc'
+    $P0['prove_exec'] = $S0
+
+    # install
+    $P0['inst_lang'] = '@lclang@/@lclang at .pbc'
+
+    # dist
+    $P0['doc_files'] = 'README'
+
+    .tailcall setup(args :flat, $P0 :flat :named)
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+
+__PARROT_REVISION__
+ at rev@
+__doc/@lang at .pod__
+# @Id@
+
+=head1 @lang@
+
+=head1 Design
+
+=head1 SEE ALSO
+
+=cut
+
+# Local Variables:
+#   fill-column:78
+# End:
+# vim: expandtab shiftwidth=4:
+__doc/running.pod__
+# @Id@
+
+=head1 Running
+
+This document describes how to use the command line @lclang@ program, which
+...
+
+=head2 Usage
+
+  parrot @lclang at .pbc [OPTIONS] <input>
+
+or
+
+  parrot- at lclang@@exe [OPTIONS] <input>
+
+A number of additional options are available:
+
+  -q  Quiet mode; suppress output of summary at the end.
+
+=cut
+
+# Local Variables:
+#   fill-column:78
+# End:
+# vim: expandtab shiftwidth=4:
+
+__dynext/.ignore__
+
+__ at lclang@/.ignore__
+
+__ at lclang@.pir__
+# @Id@
+
+=head1 TITLE
+
+ at lclang@.pir - A @lang@ compiler.
+
+=head2 Description
+
+This is the entry point for the @lang@ compiler.
+
+=head2 Functions
+
+=over 4
+
+=item main(args :slurpy)  :main
+
+Start compilation by passing any command line C<args>
+to the @lang@ compiler.
+
+=cut
+
+.sub 'main' :main
+    .param pmc args
+
+    load_language '@lclang@'
+
+    $P0 = compreg '@lang@'
+    $P1 = $P0.'command_line'(args)
+.end
+
+=back
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+
+__src/@lclang at .pir__
+# @Id@
+
+=head1 TITLE
+
+ at lclang@.pir - A @lang@ compiler.
+
+=head2 Description
+
+This is the base file for the @lang@ compiler.
+
+This file includes the parsing and grammar rules from
+the src/ directory, loads the relevant PGE libraries,
+and registers the compiler under the name '@lang@'.
+
+=head2 Functions
+
+=over 4
+
+=item onload()
+
+Creates the @lang@ compiler using a C<PCT::HLLCompiler>
+object.
+
+=cut
+
+.HLL '@lclang@'
+ at no_pmc@.loadlib '@lclang at _group'
+
+.namespace []
+
+.sub '' :anon :load
+    load_bytecode 'HLL.pbc'
+
+    .local pmc hllns, parrotns, imports
+    hllns = get_hll_namespace
+    parrotns = get_root_namespace ['parrot']
+    imports = split ' ', 'PAST PCT HLL Regex Hash'
+    parrotns.'export_to'(hllns, imports)
+.end
+
+.include 'src/gen_grammar.pir'
+.include 'src/gen_actions.pir'
+.include 'src/gen_compiler.pir'
+.include 'src/gen_runtime.pir'
+
+=back
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+
+__src/@lang@/Grammar.pm__
+=begin overview
+
+This is the grammar for @lang@ in Perl 6 rules.
+
+=end overview
+
+grammar @lang@::Grammar is HLL::Grammar;
+
+token TOP {
+    <statementlist>
+    [ $ || <.panic: "Syntax error"> ]
+}
+
+## Lexer items
+
+# This <ws> rule treats # as "comment to eol".
+token ws {
+    <!ww>
+    [ '#' \N* \n? | \s+ ]*
+}
+
+## Statements
+
+rule statementlist { [ <statement> | <?> ] ** ';' }
+
+rule statement {
+    | <statement_control>
+    | <EXPR>
+}
+
+proto token statement_control { <...> }
+rule statement_control:sym<say>   { <sym> [ <EXPR> ] ** ','  }
+rule statement_control:sym<print> { <sym> [ <EXPR> ] ** ','  }
+
+## Terms
+
+token term:sym<integer> { <integer> }
+token term:sym<quote> { <quote> }
+
+proto token quote { <...> }
+token quote:sym<'> { <?[']> <quote_EXPR: ':q'> }
+token quote:sym<"> { <?["]> <quote_EXPR: ':qq'> }
+
+## Operators
+
+INIT {
+    @lang@::Grammar.O(':prec<u>, :assoc<left>',  '%multiplicative');
+    @lang@::Grammar.O(':prec<t>, :assoc<left>',  '%additive');
+}
+
+token circumfix:sym<( )> { '(' <.ws> <EXPR> ')' }
+
+token infix:sym<*>  { <sym> <O('%multiplicative, :pirop<mul>')> }
+token infix:sym</>  { <sym> <O('%multiplicative, :pirop<div>')> }
+
+token infix:sym<+>  { <sym> <O('%additive, :pirop<add>')> }
+token infix:sym<->  { <sym> <O('%additive, :pirop<sub>')> }
+__src/@lang@/Actions.pm__
+class @lang@::Actions is HLL::Actions;
+
+method TOP($/) {
+    make PAST::Block.new( $<statementlist>.ast , :hll<@lclang@>, :node($/) );
+}
+
+method statementlist($/) {
+    my $past := PAST::Stmts.new( :node($/) );
+    for $<statement> { $past.push( $_.ast ); }
+    make $past;
+}
+
+method statement($/) {
+    make $<statement_control> ?? $<statement_control>.ast !! $<EXPR>.ast;
+}
+
+method statement_control:sym<say>($/) {
+    my $past := PAST::Op.new( :name<say>, :pasttype<call>, :node($/) );
+    for $<EXPR> { $past.push( $_.ast ); }
+    make $past;
+}
+
+method statement_control:sym<print>($/) {
+    my $past := PAST::Op.new( :name<print>, :pasttype<call>, :node($/) );
+    for $<EXPR> { $past.push( $_.ast ); }
+    make $past;
+}
+
+method term:sym<integer>($/) { make $<integer>.ast; }
+method term:sym<quote>($/) { make $<quote>.ast; }
+
+method quote:sym<'>($/) { make $<quote_EXPR>.ast; }
+method quote:sym<">($/) { make $<quote_EXPR>.ast; }
+
+method circumfix:sym<( )>($/) { make $<EXPR>.ast; }
+
+__src/@lang@/Compiler.pm__
+class @lang@::Compiler is HLL::Compiler;
+
+INIT {
+    @lang@::Compiler.language('@lang@');
+    @lang@::Compiler.parsegrammar(@lang@::Grammar);
+    @lang@::Compiler.parseactions(@lang@::Actions);
+}
+__src/@lang@/Runtime.pm__
+# language-specific runtime functions go here
+
+sub print(*@args) {
+    pir::print(pir::join('', @args));
+    1;
+}
+
+sub say(*@args) {
+    pir::say(pir::join('', @args));
+    1;
+}
+__src/pmc/@lclang at .pmc__
+/*
+Copyright (C) 20xx, Parrot Foundation.
+ at Id@
+
+=head1 NAME
+
+src/pmc/@lang at .pmc - @lang@
+
+=head1 DESCRIPTION
+
+These are the vtable functions for the @lang@ class.
+
+=cut
+
+=head2 Helper functions
+
+=over 4
+
+=item INTVAL size(INTERP, PMC, PMC)
+
+*/
+
+#include "parrot/parrot.h"
+
+static INTVAL
+size(Interp *interp, PMC* self, PMC* obj)
+{
+    INTVAL retval;
+    INTVAL dimension;
+    INTVAL length;
+    INTVAL pos;
+
+    if (!obj || PMC_IS_NULL(obj)) {
+        /* not set, so a simple 1D */
+        return VTABLE_get_integer(interp, self);
+    }
+
+    retval = 1;
+    dimension = VTABLE_get_integer(interp, obj);
+    for (pos = 0; pos < dimension; pos++)
+    {
+        length = VTABLE_get_integer_keyed_int(interp, obj, pos);
+        retval *= length;
+    }
+    return retval;
+}
+
+/*
+
+=back
+
+=head2 Methods
+
+=over 4
+
+=cut
+
+*/
+
+pmclass @lang@
+    extends ResizablePMCArray
+    provides array
+    group   @lclang at _group
+    auto_attrs
+    dynpmc
+    {
+/*
+
+=item C<void class_init()>
+
+initialize the pmc class. Store some constants, etc.
+
+=cut
+
+*/
+
+    void class_init() {
+    }
+
+
+/*
+
+=item C<PMC* init()>
+
+initialize the instance.
+
+=cut
+
+*/
+
+void init() {
+    SUPER();
+};
+
+=item C<PMC* get()>
+
+Returns a vector-like PMC.
+
+=cut
+
+*/
+
+    METHOD PMC* get() {
+        PMC* property;
+        INTVAL array_t;
+        STRING* property_name;
+
+        property_name = string_from_literal(INTERP, "property");
+        shape = VTABLE_getprop(INTERP, SELF, property_name);
+        if (PMC_IS_NULL(property)) {
+           /*
+            * No property has been set yet. This means that we are
+            * a simple vector
+            *
+            * we use our own type here. Perhaps a better way to
+            * specify it?
+            */
+            /*
+            array_t = Parrot_pmc_get_type_str(INTERP,
+                string_from_literal(INTERP, "@lang@"));
+            */
+            property = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
+
+            VTABLE_set_integer_native(INTERP, property, 1);
+            VTABLE_set_integer_keyed_int(INTERP, property, 0,
+                VTABLE_get_integer(INTERP, SELF));
+            VTABLE_setprop(INTERP, SELF, property_name, property);
+        }
+        RETURN(PMC* property);
+    }
+
+/*
+
+=item C<PMC* set()>
+
+Change the existing @lang@ by passing in an existing vector.
+
+If the new property is larger than our old property, pad the end of the vector
+with elements from the beginning.
+
+If the new property is shorter than our old property, truncate elements from
+the end of the vector.
+
+=cut
+
+*/
+
+    METHOD set(PMC *new_property) {
+        STRING* property_name;
+        PMC*    old_property;
+        INTVAL  old_size, new_size, pos;
+
+        /* save the old property momentarily, set the new property */
+        property_name = string_from_literal(INTERP, "property");
+        old_property = VTABLE_getprop(INTERP, SELF, property_name);
+        VTABLE_setprop(INTERP, SELF, property_name, new_property);
+
+        /* how big are these property? */
+        old_size = size(INTERP, SELF, old_property);
+        new_size = size(INTERP, SELF, new_property);
+
+        if (old_size > new_size) {
+            for (; new_size != old_size; new_size++) {
+                VTABLE_pop_pmc(INTERP, SELF);
+            }
+        } else if (new_size > old_size) {
+            pos = 0;
+            for (; new_size != old_size; old_size++, pos++) {
+                VTABLE_push_pmc(INTERP, SELF,
+                    VTABLE_get_pmc_keyed_int(INTERP, SELF, pos));
+            }
+        }
+    }
+
+/*
+
+=back
+
+=cut
+
+*/
+
+}
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+__src/ops/@lclang at .ops__
+/*
+ * @id@
+ * Copyright (C) 20xx, Parrot Foundation.
+ */
+
+BEGIN_OPS_PREAMBLE
+
+#include "parrot/dynext.h"
+
+END_OPS_PREAMBLE
+
+/* Op to get the address of a PMC. */
+inline op @lclang at _pmc_addr(out INT, invar PMC) :base_core {
+    $1 = (int) $2;
+    goto NEXT();
+}
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+
+__t/00-sanity.t__
+# This just checks that the basic parsing and call to builtin say() works.
+say '1..4';
+say 'ok 1';
+say 'ok ', 2;
+say 'ok ', 2 + 1;
+say 'ok', ' ', 4;
+__DATA__
+
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
+

Deleted: branches/unshared_buffers/tools/dev/mk_language_shell.pl
==============================================================================
--- branches/unshared_buffers/tools/dev/mk_language_shell.pl	Sun Aug 29 17:09:11 2010	(r48718)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,787 +0,0 @@
-#! perl
-# Copyright (C) 2007-2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-tools/dev/mk_language_shell.pl -- create initial files for a new language implementation
-
-=head1 SYNOPSIS
-
- % perl tools/dev/mk_language_shell.pl [options] Xyz [path]
-
-option:
-
- --with-doc
- --with-ops
- --with-pmc
-
-=head1 DESCRIPTION
-
-This script populates a directory with files for building a
-new language translator in Parrot. The first argument is the
-name of the language to be built. The C<path> argument
-says where to populate the directory, if no C<path> is specified
-then it is taken to be a subdirectory of the current directory
-with the same name as the language (converted to lowercase).
-
-For a language 'Xyz', this script will create the following
-files and directories (relative to C<path>, which defaults
-to F<xyz> if an explicit C<path> isn't given):
-
-    PARROT_REVISION
-    README
-    setup.pir
-    xyz.pir
-    doc/running.pod
-    doc/Xyz.pod
-    src/Xyz.pir
-    src/Xyz/Grammar.pm
-    src/Xyz/Actions.pm
-    src/Xyz/Compiler.pm
-    src/Xyz/Runtime.pm
-    src/pmc/xyz.pmc
-    src/ops/xyz.ops
-    src/xyz.pir
-    t/00-sanity.t
-    xyz/.ignore
-
-Any files that already exist are skipped, so this script can
-be used to repopulate a language directory with omitted files.
-
-If all goes well, after creating the language shell one can simply
-change to the language directory and type
-
-    $ parrot setup.pir
-    $ parrot setup.pir test
-
-to verify that the new language compiles and configures properly.
-
-=cut
-
-use strict;
-use warnings;
-
-use FindBin qw($Bin);
-use lib "$Bin/../lib";    # install location
-use lib "$Bin/../../lib"; # build location
-
-use File::Path;
-use File::Spec;
-use Getopt::Long;
-
-use Parrot::Config qw/ %PConfig /;
-
-my ($with_doc, $with_ops, $with_pmc);
-GetOptions(
-    'with-doc' => \$with_doc,
-    'with-ops' => \$with_ops,
-    'with-pmc' => \$with_pmc,
-);
-
-unless (@ARGV) {
-    die "usage: $0 language [path]\n";
-}
-
-##  determine the language we're trying to build
-my $lang = $ARGV[0];
-my $lclang = lc $lang;
-my $uclang = uc $lang;
-
-## the name and revision of the script, for use in the generated README
-my $script = $0;
-my $rev = '$Revision$';
-$rev =~ s/^\D*(\d+)\D*$/$1/;
-
-my $no_doc = $with_doc ? '' : '#';
-my $no_ops = $with_ops ? '' : '#';
-my $no_pmc = $with_pmc ? '' : '#';
-
-##  get the path from the command line, or if not supplied then
-##  use $lclang.
-my $path = $ARGV[1] || $lclang;
-
-##  now loop through the file information (see below), substituting
-##  any instances of @lang@, @lclang@, @UCLANG@, and @Id@ with
-##  the language name or the svn id tag.  If the line has the form
-##  __filepath__, then start a new file.
-my $fh;
-while (<DATA>) {
-    last if /^__DATA__$/;
-    s{\@lang\@}   {$lang}g;
-    s{\@lclang\@} {$lclang}ig;
-    s{\@UCLANG\@} {$uclang}ig;
-    s{\@Id\@}     {\$Id\$}ig;
-    s{\@script\@} {$script}ig;
-    s{\@rev\@}    {$rev}ig;
-    s{\@no_doc\@} {$no_doc}ig;
-    s{\@no_ops\@} {$no_ops}ig;
-    s{\@no_pmc\@} {$no_pmc}ig;
-    s{\@rev\@}    {$rev}ig;
-    if (/^__(.*)__$/) { start_new_file("$path$PConfig{slash}$1"); }
-    elsif ($fh) { print $fh $_; }
-}
-##  close the last file
-close($fh) if $fh;
-
-##  we're done
-1;
-
-
-##  this function closes any previous opened file, and determines
-##  if we're creating a new file.  It also calls C<mkpath> to
-##  create any needed parent subdirectories.
-sub start_new_file {
-    my ($filepath) = @_;
-    if ($fh) {
-        close $fh;
-        undef $fh;
-    }
-    if (-e $filepath) {
-        print "skipping $filepath\n";
-        return;
-    }
-    if (!$with_doc and $filepath =~ /doc/) {
-        print "no doc: skipping $filepath\n";
-        return;
-    }
-    if (!$with_ops and $filepath =~ /ops/) {
-        print "no ops: skipping $filepath\n";
-        return;
-    }
-    if (!$with_pmc and $filepath =~ /pmc/) {
-        print "no pmc: skipping $filepath\n";
-        return;
-    }
-    if (!$with_ops and!$with_pmc and $filepath =~ /dynext/) {
-        print "no dynext: skipping $filepath\n";
-        return;
-    }
-    my ($volume, $dir, $base) = File::Spec->splitpath($filepath);
-    my $filedir = File::Spec->catpath($volume, $dir);
-    unless (-d $filedir) {
-        print "creating $filedir\n";
-        mkpath( [ $filedir ], 0, 0777 );
-    }
-    print "creating $filepath\n";
-    open $fh, '>', $filepath;
-
-    return;
-}
-
-
-
-###  The section below contains the text of the files to be created.
-###  The name of the file to be created is given as C<__filepath__>,
-###  and all subsequent lines up to the next C<__filepath__> are
-###  placed in the file (performing substitutions on @lang@, @lclang@,
-###  @UCLANG@, and @Id@ as appropriate).
-
-__DATA__
-__README__
-Language '@lang@' was created with @script@, r at rev@.
-
-    $ parrot setup.pir
-    $ parrot setup.pir test
-
-__setup.pir__
-#!/usr/bin/env parrot
-# @Id@
-
-=head1 NAME
-
-setup.pir - Python distutils style
-
-=head1 DESCRIPTION
-
-No Configure step, no Makefile generated.
-
-=head1 USAGE
-
-    $ parrot setup.pir build
-    $ parrot setup.pir test
-    $ sudo parrot setup.pir install
-
-=cut
-
-.sub 'main' :main
-    .param pmc args
-    $S0 = shift args
-    load_bytecode 'distutils.pbc'
-
-    .local int reqsvn
-    $P0 = new 'FileHandle'
-    $P0.'open'('PARROT_REVISION', 'r')
-    $S0 = $P0.'readline'()
-    reqsvn = $S0
-    $P0.'close'()
-
-    .local pmc config
-    config = get_config()
-    $I0 = config['revision']
-    unless $I0 goto L1
-    unless reqsvn > $I0 goto L1
-    $S1 = "Parrot revision r"
-    $S0 = reqsvn
-    $S1 .= $S0
-    $S1 .= " required (currently r"
-    $S0 = $I0
-    $S1 .= $S0
-    $S1 .= ")\n"
-    print $S1
-    end
-  L1:
-
-    $P0 = new 'Hash'
-    $P0['name'] = '@lang@'
-    $P0['abstract'] = 'the @lang@ compiler'
-    $P0['description'] = 'the @lang@ for Parrot VM.'
-
-    # build
- at no_ops@    $P1 = new 'Hash'
- at no_ops@    $P1['@lclang at _ops'] = 'src/ops/@lclang at .ops'
- at no_ops@    $P0['dynops'] = $P1
-
- at no_pmc@    $P2 = new 'Hash'
- at no_pmc@    $P3 = split ' ', 'src/pmc/@lclang at .pmc'
- at no_pmc@    $P2['@lclang at _group'] = $P3
- at no_pmc@    $P0['dynpmc'] = $P2
-
-    $P4 = new 'Hash'
-    $P4['src/gen_actions.pir'] = 'src/@lang@/Actions.pm'
-    $P4['src/gen_compiler.pir'] = 'src/@lang@/Compiler.pm'
-    $P4['src/gen_grammar.pir'] = 'src/@lang@/Grammar.pm'
-    $P4['src/gen_runtime.pir'] = 'src/@lang@/Runtime.pm'
-    $P0['pir_nqp-rx'] = $P4
-
-    $P5 = new 'Hash'
-    $P6 = split "\n", <<'SOURCES'
-src/@lclang at .pir
-src/gen_actions.pir
-src/gen_compiler.pir
-src/gen_grammar.pir
-src/gen_runtime.pir
-SOURCES
-    $S0 = pop $P6
-    $P5['@lclang@/@lclang at .pbc'] = $P6
-    $P5['@lclang at .pbc'] = '@lclang at .pir'
-    $P0['pbc_pir'] = $P5
-
-    $P7 = new 'Hash'
-    $P7['parrot- at lclang@'] = '@lclang at .pbc'
-    $P0['installable_pbc'] = $P7
-
-    # test
-    $S0 = get_parrot()
-    $S0 .= ' @lclang at .pbc'
-    $P0['prove_exec'] = $S0
-
-    # install
-    $P0['inst_lang'] = '@lclang@/@lclang at .pbc'
-
-    # dist
-    $P0['doc_files'] = 'README'
-
-    .tailcall setup(args :flat, $P0 :flat :named)
-.end
-
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:
-
-__PARROT_REVISION__
- at rev@
-__doc/@lang at .pod__
-# @Id@
-
-=head1 @lang@
-
-=head1 Design
-
-=head1 SEE ALSO
-
-=cut
-
-# Local Variables:
-#   fill-column:78
-# End:
-# vim: expandtab shiftwidth=4:
-__doc/running.pod__
-# @Id@
-
-=head1 Running
-
-This document describes how to use the command line @lclang@ program, which
-...
-
-=head2 Usage
-
-  parrot @lclang at .pbc [OPTIONS] <input>
-
-or
-
-  parrot- at lclang@@exe [OPTIONS] <input>
-
-A number of additional options are available:
-
-  -q  Quiet mode; suppress output of summary at the end.
-
-=cut
-
-# Local Variables:
-#   fill-column:78
-# End:
-# vim: expandtab shiftwidth=4:
-
-__dynext/.ignore__
-
-__ at lclang@/.ignore__
-
-__ at lclang@.pir__
-# @Id@
-
-=head1 TITLE
-
- at lclang@.pir - A @lang@ compiler.
-
-=head2 Description
-
-This is the entry point for the @lang@ compiler.
-
-=head2 Functions
-
-=over 4
-
-=item main(args :slurpy)  :main
-
-Start compilation by passing any command line C<args>
-to the @lang@ compiler.
-
-=cut
-
-.sub 'main' :main
-    .param pmc args
-
-    load_language '@lclang@'
-
-    $P0 = compreg '@lang@'
-    $P1 = $P0.'command_line'(args)
-.end
-
-=back
-
-=cut
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:
-
-__src/@lclang at .pir__
-# @Id@
-
-=head1 TITLE
-
- at lclang@.pir - A @lang@ compiler.
-
-=head2 Description
-
-This is the base file for the @lang@ compiler.
-
-This file includes the parsing and grammar rules from
-the src/ directory, loads the relevant PGE libraries,
-and registers the compiler under the name '@lang@'.
-
-=head2 Functions
-
-=over 4
-
-=item onload()
-
-Creates the @lang@ compiler using a C<PCT::HLLCompiler>
-object.
-
-=cut
-
-.HLL '@lclang@'
- at no_pmc@.loadlib '@lclang at _group'
-
-.namespace []
-
-.sub '' :anon :load
-    load_bytecode 'HLL.pbc'
-
-    .local pmc hllns, parrotns, imports
-    hllns = get_hll_namespace
-    parrotns = get_root_namespace ['parrot']
-    imports = split ' ', 'PAST PCT HLL Regex Hash'
-    parrotns.'export_to'(hllns, imports)
-.end
-
-.include 'src/gen_grammar.pir'
-.include 'src/gen_actions.pir'
-.include 'src/gen_compiler.pir'
-.include 'src/gen_runtime.pir'
-
-=back
-
-=cut
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:
-
-__src/@lang@/Grammar.pm__
-=begin overview
-
-This is the grammar for @lang@ in Perl 6 rules.
-
-=end overview
-
-grammar @lang@::Grammar is HLL::Grammar;
-
-token TOP {
-    <statementlist>
-    [ $ || <.panic: "Syntax error"> ]
-}
-
-## Lexer items
-
-# This <ws> rule treats # as "comment to eol".
-token ws {
-    <!ww>
-    [ '#' \N* \n? | \s+ ]*
-}
-
-## Statements
-
-rule statementlist { [ <statement> | <?> ] ** ';' }
-
-rule statement {
-    | <statement_control>
-    | <EXPR>
-}
-
-proto token statement_control { <...> }
-rule statement_control:sym<say>   { <sym> [ <EXPR> ] ** ','  }
-rule statement_control:sym<print> { <sym> [ <EXPR> ] ** ','  }
-
-## Terms
-
-token term:sym<integer> { <integer> }
-token term:sym<quote> { <quote> }
-
-proto token quote { <...> }
-token quote:sym<'> { <?[']> <quote_EXPR: ':q'> }
-token quote:sym<"> { <?["]> <quote_EXPR: ':qq'> }
-
-## Operators
-
-INIT {
-    @lang@::Grammar.O(':prec<u>, :assoc<left>',  '%multiplicative');
-    @lang@::Grammar.O(':prec<t>, :assoc<left>',  '%additive');
-}
-
-token circumfix:sym<( )> { '(' <.ws> <EXPR> ')' }
-
-token infix:sym<*>  { <sym> <O('%multiplicative, :pirop<mul>')> }
-token infix:sym</>  { <sym> <O('%multiplicative, :pirop<div>')> }
-
-token infix:sym<+>  { <sym> <O('%additive, :pirop<add>')> }
-token infix:sym<->  { <sym> <O('%additive, :pirop<sub>')> }
-__src/@lang@/Actions.pm__
-class @lang@::Actions is HLL::Actions;
-
-method TOP($/) {
-    make PAST::Block.new( $<statementlist>.ast , :hll<@lclang@>, :node($/) );
-}
-
-method statementlist($/) {
-    my $past := PAST::Stmts.new( :node($/) );
-    for $<statement> { $past.push( $_.ast ); }
-    make $past;
-}
-
-method statement($/) {
-    make $<statement_control> ?? $<statement_control>.ast !! $<EXPR>.ast;
-}
-
-method statement_control:sym<say>($/) {
-    my $past := PAST::Op.new( :name<say>, :pasttype<call>, :node($/) );
-    for $<EXPR> { $past.push( $_.ast ); }
-    make $past;
-}
-
-method statement_control:sym<print>($/) {
-    my $past := PAST::Op.new( :name<print>, :pasttype<call>, :node($/) );
-    for $<EXPR> { $past.push( $_.ast ); }
-    make $past;
-}
-
-method term:sym<integer>($/) { make $<integer>.ast; }
-method term:sym<quote>($/) { make $<quote>.ast; }
-
-method quote:sym<'>($/) { make $<quote_EXPR>.ast; }
-method quote:sym<">($/) { make $<quote_EXPR>.ast; }
-
-method circumfix:sym<( )>($/) { make $<EXPR>.ast; }
-
-__src/@lang@/Compiler.pm__
-class @lang@::Compiler is HLL::Compiler;
-
-INIT {
-    @lang@::Compiler.language('@lang@');
-    @lang@::Compiler.parsegrammar(@lang@::Grammar);
-    @lang@::Compiler.parseactions(@lang@::Actions);
-}
-__src/@lang@/Runtime.pm__
-# language-specific runtime functions go here
-
-sub print(*@args) {
-    pir::print(pir::join('', @args));
-    1;
-}
-
-sub say(*@args) {
-    pir::say(pir::join('', @args));
-    1;
-}
-__src/pmc/@lclang at .pmc__
-/*
-Copyright (C) 20xx, Parrot Foundation.
- at Id@
-
-=head1 NAME
-
-src/pmc/@lang at .pmc - @lang@
-
-=head1 DESCRIPTION
-
-These are the vtable functions for the @lang@ class.
-
-=cut
-
-=head2 Helper functions
-
-=over 4
-
-=item INTVAL size(INTERP, PMC, PMC)
-
-*/
-
-#include "parrot/parrot.h"
-
-static INTVAL
-size(Interp *interp, PMC* self, PMC* obj)
-{
-    INTVAL retval;
-    INTVAL dimension;
-    INTVAL length;
-    INTVAL pos;
-
-    if (!obj || PMC_IS_NULL(obj)) {
-        /* not set, so a simple 1D */
-        return VTABLE_get_integer(interp, self);
-    }
-
-    retval = 1;
-    dimension = VTABLE_get_integer(interp, obj);
-    for (pos = 0; pos < dimension; pos++)
-    {
-        length = VTABLE_get_integer_keyed_int(interp, obj, pos);
-        retval *= length;
-    }
-    return retval;
-}
-
-/*
-
-=back
-
-=head2 Methods
-
-=over 4
-
-=cut
-
-*/
-
-pmclass @lang@
-    extends ResizablePMCArray
-    provides array
-    group   @lclang at _group
-    auto_attrs
-    dynpmc
-    {
-/*
-
-=item C<void class_init()>
-
-initialize the pmc class. Store some constants, etc.
-
-=cut
-
-*/
-
-    void class_init() {
-    }
-
-
-/*
-
-=item C<PMC* init()>
-
-initialize the instance.
-
-=cut
-
-*/
-
-void init() {
-    SUPER();
-};
-
-=item C<PMC* get()>
-
-Returns a vector-like PMC.
-
-=cut
-
-*/
-
-    METHOD PMC* get() {
-        PMC* property;
-        INTVAL array_t;
-        STRING* property_name;
-
-        property_name = string_from_literal(INTERP, "property");
-        shape = VTABLE_getprop(INTERP, SELF, property_name);
-        if (PMC_IS_NULL(property)) {
-           /*
-            * No property has been set yet. This means that we are
-            * a simple vector
-            *
-            * we use our own type here. Perhaps a better way to
-            * specify it?
-            */
-            /*
-            array_t = Parrot_pmc_get_type_str(INTERP,
-                string_from_literal(INTERP, "@lang@"));
-            */
-            property = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-            VTABLE_set_integer_native(INTERP, property, 1);
-            VTABLE_set_integer_keyed_int(INTERP, property, 0,
-                VTABLE_get_integer(INTERP, SELF));
-            VTABLE_setprop(INTERP, SELF, property_name, property);
-        }
-        RETURN(PMC* property);
-    }
-
-/*
-
-=item C<PMC* set()>
-
-Change the existing @lang@ by passing in an existing vector.
-
-If the new property is larger than our old property, pad the end of the vector
-with elements from the beginning.
-
-If the new property is shorter than our old property, truncate elements from
-the end of the vector.
-
-=cut
-
-*/
-
-    METHOD set(PMC *new_property) {
-        STRING* property_name;
-        PMC*    old_property;
-        INTVAL  old_size, new_size, pos;
-
-        /* save the old property momentarily, set the new property */
-        property_name = string_from_literal(INTERP, "property");
-        old_property = VTABLE_getprop(INTERP, SELF, property_name);
-        VTABLE_setprop(INTERP, SELF, property_name, new_property);
-
-        /* how big are these property? */
-        old_size = size(INTERP, SELF, old_property);
-        new_size = size(INTERP, SELF, new_property);
-
-        if (old_size > new_size) {
-            for (; new_size != old_size; new_size++) {
-                VTABLE_pop_pmc(INTERP, SELF);
-            }
-        } else if (new_size > old_size) {
-            pos = 0;
-            for (; new_size != old_size; old_size++, pos++) {
-                VTABLE_push_pmc(INTERP, SELF,
-                    VTABLE_get_pmc_keyed_int(INTERP, SELF, pos));
-            }
-        }
-    }
-
-/*
-
-=back
-
-=cut
-
-*/
-
-}
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
-__src/ops/@lclang at .ops__
-/*
- * @id@
- * Copyright (C) 20xx, Parrot Foundation.
- */
-
-BEGIN_OPS_PREAMBLE
-
-#include "parrot/dynext.h"
-
-END_OPS_PREAMBLE
-
-/* Op to get the address of a PMC. */
-inline op @lclang at _pmc_addr(out INT, invar PMC) :base_core {
-    $1 = (int) $2;
-    goto NEXT();
-}
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
-
-__t/00-sanity.t__
-# This just checks that the basic parsing and call to builtin say() works.
-say '1..4';
-say 'ok 1';
-say 'ok ', 2;
-say 'ok ', 2 + 1;
-say 'ok', ' ', 4;
-__DATA__
-
-
-# Local Variables:
-# mode: cperl
-# cperl-indent-level: 4
-# fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:
-

Modified: branches/unshared_buffers/tools/dev/mk_native_pbc
==============================================================================
--- branches/unshared_buffers/tools/dev/mk_native_pbc	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/tools/dev/mk_native_pbc	Sun Aug 29 17:09:11 2010	(r48719)
@@ -137,18 +137,6 @@
     perl t/harness t/native_pbc/number.t && \
     perl t/harness t/native_pbc/string.t
 
-./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
-
 if [ "$enable_long_double" = "1" ]; then
     if [ "$1" = "--noconf" ]; then
       echo "Hmm. You have no long double, and we want to try --floatval=long double"

Copied: branches/unshared_buffers/tools/dev/ncidef2pasm.pl (from r48712, trunk/tools/dev/ncidef2pasm.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/ncidef2pasm.pl	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/ncidef2pasm.pl)
@@ -0,0 +1,237 @@
+#! perl
+
+# Copyright (C) 2003-2007, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+tools/dev/ncidef2asm.pl - Turn an NCI library definition file into PASM
+
+=head1 SYNOPSIS
+
+    perl tools/dev/ncidef2asm.pl path/to/from_file [ path/to/to_file ]
+
+=head1 DESCRIPTION
+
+This program takes an NCI library definition file and turns it into PASM.
+
+An NCI library definition file provides the information needed to
+generate a parrot wrapper for the named library (or libraries). Its
+format is simple, and looks like:
+
+  [package]
+  ncurses
+
+  [lib]
+  libform.so
+
+  [defs]
+  p new_field i i i i i i
+
+  [lib]
+  libncurses.so
+
+  [defs]
+  i is_term_resized i i
+
+Note that the assembly file is generated in the order you specify, so
+if there are library dependencies, make sure you have them in the
+correct order.
+
+=head2 package
+
+Declares the package that all subsequent sub PMCs will be put
+into. The name is a simple concatenation of the package name, double
+colon, and the routine name, with no preceding punctuation.
+
+=head2 lib
+
+The name of the library to be loaded. Should be as qualified as
+necessary for your platform--generally the full filename is required,
+though the directory generally isn't.
+
+You may load multiple libraries here, but only the last one loaded
+will be exposed to subsequent defs.
+
+=head2 defs
+
+This section holds the definitions of functions. Each function is
+assumed to be in the immediate preceding library. The definition of
+the function is:
+
+  return_type name [param [param [param ...]]]
+
+The param and return_type parameters use the NCI standard, which for
+reference is:
+
+=over 4
+
+=item p
+
+Parameter is a void pointer, taken from the PMC's data pointer. PMC is
+assumed to be an unmanagedstruct or child class.
+
+Taken from a P register
+
+=item c
+
+Parameter is a character.
+
+Taken from an I register
+
+=item s
+
+Parameter is a short
+
+Taken from an I register
+
+=item i
+
+Parameter is an int
+
+Taken from an I register
+
+=item l
+
+Parameter is a long
+
+Taken from an I register
+
+=item f
+
+Paramter is a float
+
+Taken from an N register.
+
+=item d
+
+Parameter is a double.
+
+Taken from an N register.
+
+=item t
+
+Paramter is a char *, presumably a C string
+
+Taken from an S register
+
+=item v
+
+Void. Only valid as a return type, noting that the function returns no data.
+
+=item I
+
+Interpreter pointer. The current interpreter pointer is passed in
+
+=item P
+
+PMC.
+
+=item 2
+
+Pointer to short.
+
+Taken from an I register.
+
+=item 3
+
+Pointer to int.
+
+Taken from an I register
+
+=item 4
+
+Pointer to long
+
+Taken from an I register
+
+=back
+
+=cut
+
+use strict;
+use warnings;
+
+my ( $from_file, $to_file ) = @ARGV;
+
+# If there is no destination file, strip off the extension of the
+# source file and add a .pasm to it
+if ( !defined $to_file ) {
+    $to_file = $from_file;
+    $to_file =~ s/\..*$//;
+    $to_file .= ".pasm";
+}
+
+open my $INPUT,  '<', "$from_file" or die "Can't open up $from_file, error $!";
+open my $OUTPUT, '>', "$to_file"   or die "Can't open up $to_file, error $!";
+
+# To start, save all the registers, just in case
+print $OUTPUT "saveall\n";
+
+my @libs;
+my ( $cur_package, $line, $cur_section );
+
+# Our dispatch table
+my (%dispatch) = (
+    package => \&package_line,
+    lib     => \&lib_line,
+    defs    => \&def_line,
+);
+
+while ( $line = <$INPUT> ) {
+
+    # Throw away trailing newlines, comments, and whitespace. If the
+    # line's empty, then off to the next line
+    chomp $line;
+    $line =~ s/#.*//;
+    $line =~ s/\s*$//;
+    next unless $line;
+
+    # Is it a section line? If so, extract the section and set it.
+    if ( $line =~ /\[(\w+)\]/ ) {
+        $cur_section = $1;
+        next;
+    }
+
+    # Everything else goes to the handler
+    $dispatch{$cur_section}->($line);
+
+}
+
+# Put the registers back and end
+print $OUTPUT "restoreall\n";
+print $OUTPUT "end\n";
+close $OUTPUT;
+
+sub package_line {
+    my $line = shift;
+
+    # Trim leading and trailing spaces
+    $line =~ s/^\s*//;
+    $line =~ s/\s*$//;
+
+    # Set the global current package
+    $cur_package = $line;
+
+}
+
+sub lib_line {
+    my $line = shift;
+    print $OUTPUT "loadlib P1, '$line'\n";
+}
+
+sub def_line {
+    my $line = shift;
+    my ( $return_type, $name, @params ) = split ' ', $line;
+    unshift @params, $return_type;
+    my $signature = join( "", @params );
+    print $OUTPUT "dlfunc P2, P1, '$name', '$signature'\n";
+    print $OUTPUT "store_global '${cur_package}::${name}', P2\n";
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/unshared_buffers/tools/dev/parrot-config.pir (from r48712, trunk/tools/dev/parrot-config.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/parrot-config.pir	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/parrot-config.pir)
@@ -0,0 +1,103 @@
+#!/usr/bin/env parrot
+# $Id$
+
+=head1 NAME
+
+config.pir - Print a Parrot configuration item
+
+=head1 VERSION
+
+version 0.01
+
+=head1 SYNOPSIS
+
+  ./parrot parrot-config.pir VERSION
+  ./parrot parrot-config.pir ccflags
+  ./parrot parrot-config.pir --dump
+
+=head1 DESCRIPTION
+
+Print out configuration items.
+
+=head1 AUTHOR
+
+Leopold Toetsch E<lt>lt at toetsch.atE<gt>.
+
+=head1 COPYRIGHT
+
+Copyright (C) 2004-2009, Parrot Foundation.
+
+=cut
+
+.sub _main :main
+    .param pmc argv
+    .local int argc
+    argc = argv
+    if argc < 2 goto usage
+    .local pmc interp, conf_hash
+    .local string key
+    .include "iglobals.pasm"
+    interp = getinterp
+    conf_hash = interp[.IGLOBALS_CONFIG_HASH]
+    .local int i
+    i = 1
+loop:
+    key = argv[i]
+    if key == '--help' goto usage
+    if key == '--dump' goto dump
+    $I0 = defined conf_hash[key]
+    unless $I0 goto failkey
+    dec argc
+    if i < argc goto dumpsome
+    $S0 = conf_hash[key]
+    print $S0
+    inc i
+    if i < argc goto loop
+    print "\n"
+    end
+dumpsome:
+    key = argv[i]
+    $I0 = defined conf_hash[key]
+    unless $I0 goto failkey
+    print key
+    print " => '"
+    $S1 = conf_hash[key]
+    print $S1
+    say "'"
+    inc i
+    if i <= argc goto dumpsome
+    end
+failkey:
+    print " no such key: '"
+    print key
+    print "'\n"
+    end
+dump:
+   .local pmc iterator
+    iterator = iter conf_hash
+iter_loop:
+    unless iterator goto iter_end
+    shift $S0, iterator
+    print $S0
+    print " => '"
+    $S1 = conf_hash[$S0]
+    print $S1
+    say "'"
+    goto iter_loop
+iter_end:
+    end
+usage:
+    $S0 = argv[0]
+    $P0 = getinterp
+    .include 'stdio.pasm'
+    $P1 = $P0.'stdhandle'(.PIO_STDERR_FILENO)
+    $P1.'print'($S0)
+    $P1.'print'(" [ <config-key> [ <config-key> ... ] | --dump | --help ]\n")
+    exit 1
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/unshared_buffers/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/unshared_buffers/tools/dev/pbc_to_exe.pir	Sun Aug 29 02:05:11 2010	(r48718)
+++ branches/unshared_buffers/tools/dev/pbc_to_exe.pir	Sun Aug 29 17:09:11 2010	(r48719)
@@ -18,10 +18,10 @@
   pbc_to_exe my.pbc --install
   => installable_my.exe
 
-Warning! With --install there must be no directory prefix in the first arg yet.
-
 =cut
 
+.include 'interpcores.pasm'
+
 .sub 'main' :main
     .param pmc    argv
 
@@ -31,8 +31,10 @@
     .local string cfile
     .local string objfile
     .local string exefile
+    .local int    runcore
+    .local int    install
 
-    (infile :optional, cfile :optional, objfile :optional, exefile :optional) = 'handle_args'(argv)
+    (infile, cfile, objfile, exefile, runcore, install) = 'handle_args'(argv)
     unless infile > '' goto err_infile
 
     .local string code_type
@@ -66,6 +68,10 @@
 
     print outfh, codestring
 
+    print outfh, '#define RUNCORE '
+    print outfh, runcore
+    print outfh, "\n"
+
     print outfh, <<'MAIN'
         int main(int argc, const char *argv[])
         {
@@ -86,6 +92,7 @@
             Parrot_init_stacktop(interp, &interp);
             Parrot_set_executable_name(interp,
                 Parrot_str_new(interp, argv[0], 0));
+            Parrot_set_run_core(interp, (Parrot_Run_core_t)RUNCORE);
             Parrot_set_flag(interp, PARROT_DESTROY_FLAG);
 
             pf = PackFile_new(interp, 0);
@@ -122,8 +129,8 @@
   no_extra:
 
 
-    'compile_file'(cfile, objfile)
-    'link_file'(objfile, exefile, extra_obj)
+    'compile_file'(cfile, objfile, install)
+    'link_file'(objfile, exefile, extra_obj, install)
     .return ()
 
   err_infile:
@@ -143,49 +150,99 @@
     obj    = $P0['o']
     exe    = $P0['exe']
 
-    .local pmc args
-    args   = argv
-
-    .local int argc
-    argc = args
+    load_bytecode 'Getopt/Obj.pbc'
+    .local pmc getopt
+    getopt = new ['Getopt';'Obj']
+    push getopt, 'install|i'
+    push getopt, 'runcore|R:s'
+    push getopt, 'output|o:s'
+    push getopt, 'help|h'
+
+    $P0 = shift argv # ignore program name
+    .local pmc opts
+    opts = getopt.'get_options'(argv)
+
+    .local int    help
+    .local int    install
+    .local string runcore
+    .local string outfile
+    help    = opts['help']
+    install = opts['install']
+    runcore = opts['runcore']
+    outfile = opts['output']
+
+    unless help goto end_help
+        $P0 = getstderr
+        print $P0, <<'HELP'
+pbc_to_exe [options] <file>
+  Options:
+    -h --help
+    -i --install
+    -R --runcore=slow|fast
+    -o --output=FILE
+HELP
+        exit 0
+    end_help:
 
-    if argc == 2 goto proper_args
-    if argc == 3 goto check_install
-    .return ()
-
-  check_install:
-    .local string infile, install
+    .local string infile
+    infile = shift argv
 
-    $P0     = shift args
-    infile  = shift args
-    install = shift args
-    if install == '--install' goto proper_install
-    .return ()
+    $S0 = substr infile, -4, 4
+    $S0 = downcase $S0
+    unless $S0 != '.pbc' goto done_pbc_extn_check
+        die "input pbc file name does not end in '.pbc'"
+    done_pbc_extn_check:
 
-  proper_install:
     .local string cfile, objfile, exefile
+    if outfile == '' goto no_outfile
+        $I0 = length exe
+        $I1 = - $I0
+        $S0 = substr outfile, $I1, $I0
+        $S0 = downcase $S0
+        $S1 = downcase exe
+        unless $S0 != $S1 goto done_exe_extn_check
+            $S0 = "output executable name does not end in `" . exe
+            $S0 = $S0 . "'"
+            die $S0
+        done_exe_extn_check:
+        outfile = replace outfile, $I1, $I0, ''
+
+        cfile   = outfile . '.c'
+        objfile = outfile . obj
+        exefile = outfile . exe
+        goto end_outfile
+    no_outfile:
+        # substitute .c for .pbc
+        # remove .c for executable
+        outfile = replace infile, -4, 4, '' # remove .pbc extension
+        cfile   = outfile . '.c'
+        objfile = outfile . obj
+        exefile = outfile . exe
+        unless install goto end_installable
+            exefile = 'prepend_installable'(exefile)
+        end_installable:
+    end_outfile:
+
+    .local int runcore_code
+    unless runcore == 'slow' goto end_slow_core
+        runcore_code = .PARROT_SLOW_CORE
+        goto done_runcore
+    end_slow_core:
+    unless runcore == 'fast' goto end_fast_core
+        runcore_code = .PARROT_FAST_CORE
+        goto done_runcore
+    end_fast_core:
+    unless runcore == '' goto end_unspecified_core
+        runcore_code = .PARROT_FAST_CORE
+        goto done_runcore
+    end_unspecified_core:
+        # invalid runcore name
+        $S0 = "Unsupported runcore: `" . runcore
+        $S0 = $S0 . "'"
+        die $S0
+    done_runcore:
 
-    cfile   = 'replace_pbc_extension'(infile, '.c')
-    objfile = 'replace_pbc_extension'(infile, obj)
-    $S0     = 'replace_pbc_extension'(infile, exe)
-    exefile = 'prepend_installable'($S0)
-
-    .return(infile, cfile, objfile, exefile)
-
-  proper_args:
-
-    $P0    = shift args
-    infile = shift args
-
-    cfile   = 'replace_pbc_extension'(infile, '.c')
-    objfile = 'replace_pbc_extension'(infile, obj)
-    exefile = 'replace_pbc_extension'(infile, exe)
-
-    # substitute .c for .pbc
-    # remove .c for executable
-
-    # TODO this should complain about results/returns mismatch
-    .return(infile, cfile, objfile, exefile)
+    .return (infile, cfile, objfile, exefile, runcore_code, install)
 .end
 
 .sub 'determine_code_type'
@@ -518,7 +575,7 @@
 .sub 'compile_file'
     .param string cfile
     .param string objfile
-    .param int install :optional
+    .param int    install
 
     $P0 = '_config'()
     .local string cc, ccflags, cc_o_out, osname, build_dir, slash
@@ -578,7 +635,7 @@
     .param string objfile
     .param string exefile
     .param string extra_obj
-    .param int install :optional
+    .param int    install
 
     $P0 = '_config'()
     .local string cc, link, link_dynamic, linkflags, ld_out, libparrot, libs, o
@@ -607,7 +664,7 @@
     config     = concat build_dir, slash
     config    .= 'src'
     config    .= slash
-    if exeprefix == 'installable_' goto config_to_install
+    if install goto config_to_install
     config    .= 'parrot_config'
     goto config_cont
  config_to_install:

Copied: branches/unshared_buffers/tools/dev/perlcritic-cage.conf (from r48712, trunk/tools/dev/perlcritic-cage.conf)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/perlcritic-cage.conf	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/perlcritic-cage.conf)
@@ -0,0 +1,37 @@
+# A more stringent set of rules for cage cleaners
+
+[-CodeLayout::ProhibitParensWithBuiltins]
+[CodeLayout::ProhibitHardTabs]
+allow_leading_tabs = 0
+ 
+[-CodeLayout::RequireTidyCode]
+
+[-ControlStructures::ProhibitPostfixControls]
+[-ControlStructures::ProhibitUnlessBlocks]
+
+[-Documentation::PodSpelling]
+[-Documentation::RequirePodAtEnd]
+[-Documentation::RequirePodSections]
+
+[-ErrorHandling::RequireCarping]
+
+[-InputOutput::ProhibitBacktickOperators]
+[-InputOutput::ProhibitInteractiveTest]
+[-InputOutput::RequireCheckedSyscalls]
+functions = :builtins
+exclude_functions = print
+
+[-Miscellanea::RequireRcsKeywords]
+
+[-Modules::RequireVersionVar]
+
+[-RegularExpressions::ProhibitEscapedMetacharacters]
+[-RegularExpressions::RequireDotMatchAnything]
+[-RegularExpressions::RequireExtendedFormatting]
+[-RegularExpressions::RequireLineBoundaryMatching]
+
+[-ValuesAndExpressions::ProhibitConstantPragma]
+[-ValuesAndExpressions::ProhibitEmptyQuotes]
+[-ValuesAndExpressions::ProhibitMagicNumbers]
+
+[-Variables::ProhibitPunctuationVars]

Copied: branches/unshared_buffers/tools/dev/perlcritic.conf (from r48712, trunk/tools/dev/perlcritic.conf)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/perlcritic.conf	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/perlcritic.conf)
@@ -0,0 +1,75 @@
+verbose = 3
+
+# not all the profiles listed here are installed by default, even if you have
+# Perl::Critic. Shhhh.
+profile-strictness = quiet
+
+[BuiltinFunctions::ProhibitStringySplit]
+add_themes = parrot
+
+[CodeLayout::ProhibitDuplicateCoda]
+add_themes = parrot
+
+[CodeLayout::ProhibitHardTabs]
+allow_leading_tabs = 0
+add_themes = parrot
+
+[CodeLayout::ProhibitTrailingWhitespace]
+add_themes = parrot
+
+[CodeLayout::RequireTidyCode]
+perltidyrc = tools/dev/perltidy.conf
+add_themes = extra
+
+[CodeLayout::UseParrotCoda]
+add_themes = parrot
+
+[InputOutput::ProhibitBarewordFileHandles]
+add_themes = parrot
+
+[InputOutput::ProhibitTwoArgOpen]
+add_themes = parrot
+
+[NamingConventions::ProhibitAmbiguousNames]
+# remove abstract from the list of forbidden names
+forbid = bases close contract last left no record right second set
+add_themes = extra
+
+[Subroutines::ProhibitBuiltinHomonyms]
+add_themes = extra
+
+[Subroutines::ProhibitExplicitReturnUndef]
+add_themes = parrot
+
+[Subroutines::ProhibitSubroutinePrototypes]
+add_themes = parrot
+
+[Subroutines::RequireFinalReturn]
+add_themes = extra
+
+[TestingAndDebugging::MisplacedShebang]
+add_themes = parrot
+
+[TestingAndDebugging::ProhibitShebangWarningsArg]
+add_themes = parrot
+
+[TestingAndDebugging::RequirePortableShebang]
+add_themes = parrot
+
+[TestingAndDebugging::RequireUseStrict]
+add_themes = parrot
+
+[TestingAndDebugging::RequireUseWarnings]
+add_themes = parrot
+
+[ValuesAndExpressions::ProhibitInterpolationOfLiterals]
+add_themes = extra
+
+[Variables::ProhibitConditionalDeclarations]
+add_themes = parrot
+
+[Bangs::ProhibitFlagComments]
+add_themes = extra
+
+[Bangs::ProhibitRefProtoOrProto]
+add_themes = extra

Copied: branches/unshared_buffers/tools/dev/perltidy.conf (from r48712, trunk/tools/dev/perltidy.conf)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/perltidy.conf	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/perltidy.conf)
@@ -0,0 +1,15 @@
+# A declarative version of PDD07 for perl.
+
+# Must apply...
+
+-l=100 # Source line width is limited to 100 characters.
+-i=4   # must be indented four columns (no tabs)
+-ola   # Labels (including case labels) must be outdented two columns
+-ci=4  # Long lines, when split, must use at least one extra level of indentation on the continued line.
+-ce   # Cuddled elses are forbidden: i.e. avoid } else { .
+
+# Nice to haves...
+
+# Freeze new lines; some really short lines look good the way they
+# are, this should stop perltidy from merging them together
+-fnl

Copied: branches/unshared_buffers/tools/dev/update_copyright.pl (from r48712, trunk/tools/dev/update_copyright.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/dev/update_copyright.pl	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/dev/update_copyright.pl)
@@ -0,0 +1,63 @@
+#! perl
+# $Id$
+
+# Copyright (C) 2008, Parrot Foundation.
+
+use strict;
+use warnings;
+use Fatal qw( open close );
+
+=head1 NAME
+
+F<tools/dev/update_copyright.pl>
+
+=head1 DESCRIPTION
+
+Given a list of files as command line arguments, update the copyright
+notice to go from the earliest year noted to the current year.
+
+Edits the files in place. You should update the copyright on a modified
+file before you commit it back to the repository.
+
+=cut
+
+use lib 'lib';
+use Parrot::Test;
+
+# Accept a little fuzz in the original copyright notice..
+my $copyright_re = qr/
+  Copyright \s+ \(C\) \s+
+  (\d\d\d\d)\s*(?:-\s*\d\d\d\d)? \s* ,? \s*
+  The \s+ Perl \s+ Foundation\.?
+/xi;
+
+my $year = (localtime())[5]+1900;
+
+# loop over all the files specified on the command line
+foreach my $file (@ARGV) {
+    my $contents = Parrot::Test::slurp_file( $file );
+    if ( $contents =~ $copyright_re) {
+        my $old_year = $1;
+        if ($old_year eq $year) {
+            warn "$file already up to date.\n";
+            next;
+        }
+        else {
+            $contents =~ s/$copyright_re/Copyright (C) $old_year-$year, Parrot Foundation./;
+            open my $ofh, '>', $file;
+            print {$ofh} $contents;
+            close $ofh;
+        }
+    }
+    else {
+        warn "$file doesn't have a valid copyright line.\n";
+    }
+}
+
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/unshared_buffers/tools/release/README (from r48712, trunk/tools/release/README)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/release/README	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/release/README)
@@ -0,0 +1,5 @@
+# $Id$
+README for tools/release/
+
+This directory is intended to hold programs, templates and configuration files
+useful during the release process.

Copied: branches/unshared_buffers/tools/release/crow.pir (from r48712, trunk/tools/release/crow.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/release/crow.pir	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/release/crow.pir)
@@ -0,0 +1,107 @@
+#! ./parrot
+# Copyright (C) 2007-2008, Parrot Foundation.
+# $Id$
+
+=head1 TITLE
+
+crow.pir -- Make noise about the new Parrot release
+
+=head1 DESCRIPTION
+
+This utility is used to help Release Managers format announcement messages.
+It uses a *very* simple and fast templating system, described in the related
+module, L<runtime/parrot/library/Crow.pir>.
+
+=head1 SYNOPSIS
+
+  # see
+  % parrot tools/release/crow.pir --help
+
+=cut
+
+
+.sub 'main' :main
+    .param pmc args
+
+    load_bytecode 'Crow.pbc'
+
+    .local pmc exports, curr_namespace, test_namespace
+    curr_namespace = get_namespace
+    test_namespace = get_namespace ['Crow']
+    exports = split ' ', 'get_news get_args process'
+    test_namespace.'export_to'(curr_namespace, exports)
+
+    .local pmc opts
+    opts = get_args(args)
+
+    unless null opts goto got_opts
+    opts = new 'Hash'
+  got_opts:
+
+    .local pmc templates
+    templates = 'get_json'('tools/release/templates.json')
+
+    .local string template, type
+    type = opts['type']
+    if type != '' goto got_type
+    type = 'text'
+
+got_type:
+    template = 'get_template'(templates, type)
+
+    .local pmc data
+    data = 'get_json'('tools/release/release.json')
+
+    .local string version
+    version = data['release.version']
+
+    $S0 = concat type, '.news'
+    $I0 = templates[$S0]
+    if $I0 goto get_news
+    data['NEWS'] = ''
+    goto process
+  get_news:
+    $S0 = 'get_news'(version)
+    data['NEWS'] = $S0
+
+
+  process:
+    .local string result
+    result = process(template, data)
+    say result
+.end
+
+
+.sub 'get_json'
+    .param string filename
+
+    load_bytecode 'Config/JSON.pbc'
+
+     .local pmc exports, curr_namespace, test_namespace
+    curr_namespace = get_namespace
+    test_namespace = get_namespace [ 'Config';'JSON' ]
+    exports = split ' ', 'ReadConfig'
+    test_namespace.'export_to'(curr_namespace, exports)
+
+    .local pmc result
+    result = ReadConfig(filename)
+
+    .return (result)
+.end
+
+
+.sub 'get_template'
+    .param pmc templates
+    .param string type
+
+    $S0 = concat type, '.text'
+    $S1 = templates[$S0]
+    .return ($S1)
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/unshared_buffers/tools/release/gen_release_info.pl (from r48712, trunk/tools/release/gen_release_info.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/release/gen_release_info.pl	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/release/gen_release_info.pl)
@@ -0,0 +1,63 @@
+#! perl
+# Copyright (C) 2008, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+=head1 NAME
+
+tools/release/gen_release_info.pl - generate release info for graphs and charts
+
+=head1 DESCRIPTION
+
+This utility generates release information from subversion in csv format,
+suitable for graphs, charts, and reports.
+
+=cut
+
+
+my $repo_url = 'https://svn.parrot.org/parrot/tags';
+
+##  create a release information data structure
+my $r = {
+    map { $_->{number} => $_ }
+    map { m{^(RELEASE_)(.*)/}
+            ? {
+                tag => "$1$2",
+                number => sub{$a = shift; $a =~ y/_/./; $a }->($2),
+            }
+            : ()
+        }
+    qx  { svn ls $repo_url }
+};
+
+##  gather interesting release-related information from the tag
+map {
+    ##  ask subversion for info about the tag
+    my $readme = $repo_url . '/' . $r->{$_}{tag};
+    warn "retrieving info on $readme\n";
+    my $info = qx{ LANG=C svn info $readme };
+
+    ##  pull the interesting items
+    $info =~ m{Author: (\S+)} and $r->{$_}{author}   = $1;
+    $info =~ m{Rev: (\S+)}    and $r->{$_}{revision} = $1;
+    $info =~ m{Date: (\S+)}   and $r->{$_}{date}     = $1;
+} keys %{ $r };
+
+
+##  output info in csv format
+print
+    map { "$_\n" }
+    map { my $n = $_; join ',' =>
+        map { $r->{$n}{$_} || '' }
+        qw{ tag number author revision date  }
+    }
+    sort keys %$r;
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/unshared_buffers/tools/release/inc_ver.pir (from r48712, trunk/tools/release/inc_ver.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/release/inc_ver.pir	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/release/inc_ver.pir)
@@ -0,0 +1,48 @@
+#!/usr/bin/env parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+.sub 'main' :main
+    .local string version_file_name
+    version_file_name = 'VERSION'
+
+    # read the version
+    $P0 = new 'FileHandle'
+    $P0.'open'( version_file_name, 'r' )
+    $S0 = $P0.'readline'()
+    $P0.'close'()
+
+    print 'version: '
+    print $S0
+
+    # split the version
+    $P1 = split '.', $S0
+
+    # increment version
+    $I0 = $P1[1]
+    inc $I0
+    if $I0 != 12 goto NOT_NILL
+    $I0 = $P1[0]
+    inc $I0
+    $P1[0] = $I0
+    $I0 = 0
+NOT_NILL:
+    $P1[1] = $I0
+
+    # join the incremented version
+    $S0 = join '.', $P1
+
+    print 'new version: '
+    print $S0
+
+    # write the new version to the version_file
+    $P0.'open'( version_file_name, 'w' )
+    $P0.'print'( $S0 )
+    $P0.'close'()
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/unshared_buffers/tools/release/release.json (from r48712, trunk/tools/release/release.json)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/release/release.json	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/release/release.json)
@@ -0,0 +1,21 @@
+{
+    "release.version"  : "2.7.0",
+    "release.name"     : "Australian King",
+    "release.day"      : "Tuesday",
+    "release.date"     : "17 August 2010",
+    "release.nextdate" : "21 September 2010",
+
+    "web.root"         : "http://parrot.org/",
+    "web.source"       : "download",
+    "web.openpatches"  : "openpatches.html",
+    "web.repository"   : "https://svn.parrot.org/parrot/trunk/",
+
+    "bugday.day"       : "Saturday",
+    "bugday.date"      : "18 September 2010",
+
+    "wiki.root"        : "https://trac.parrot.org/parrot/wiki/",
+    "wiki.bugday"      : "bug_day_2010_09_18",
+
+    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/devel/2.7.0/",
+    "subversion.root"  : "http://subversion.apache.org/"
+}

Copied: branches/unshared_buffers/tools/release/templates.json (from r48712, trunk/tools/release/templates.json)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/unshared_buffers/tools/release/templates.json	Sun Aug 29 17:09:11 2010	(r48719, copy of r48712, trunk/tools/release/templates.json)
@@ -0,0 +1,83 @@
+{
+    "text.news" : true,
+    "text.text" : "
+
+On behalf of the Parrot team, I'm proud to announce Parrot @release.version@
+\"@release.name at .\" Parrot (@web.root@) is a virtual machine aimed
+at running all dynamic languages.
+
+Parrot @release.version@ is available on Parrot's FTP site, or follow the
+download instructions at @web.root@@web.source at .  For those who would like to
+develop on Parrot, or help develop Parrot itself, we recommend using Subversion
+on the source code repository to get the latest and best Parrot code.
+
+Parrot @release.version@ News:
+ at NEWS@
+
+Many thanks to all our contributors for making this possible, and our sponsors
+for supporting this project.  Our next scheduled release is @release.nextdate at .
+
+Enjoy!
+
+",
+
+    "html.news" : true,
+    "html.text" : "
+<p>On behalf of the Parrot team, I'm proud to announce Parrot @release.version@
+&quot;@release.name at .&quot; <a href=\"@web.root@\">Parrot</a>
+is a virtual machine aimed at running all dynamic languages.</p>
+
+<p>Parrot @release.version@ is available on <a href=\"@ftp.path@\">Parrot's FTP
+site</a>, or <a href=\"@web.root@@web.source@\">follow the download
+instructions</a>.  For those who would like to develop on Parrot, or help
+develop Parrot itself, we recommend using <a
+href=\"@subversion.root@\">Subversion</a>  on <a href=\"@web.repository@\">our
+source code repository</a> to get the latest and best Parrot code.</p>
+
+<p>Parrot @release.version@ News:<br/>
+<pre>@NEWS@</pre></p>
+
+<p>Thanks to all our contributors for making this possible, and our sponsors
+for supporting this project.  Our next release is @release.nextdate at .</p>
+
+<p>Enjoy!</p>
+",
+
+    "bugday.news" : false,
+    "bugday.text" : "
+Bug Day
+
+On @bugday.day@, @bugday.date@, please join us on IRC in #parrot
+(irc.parrot.org) to work on closing out as many Trac tickets
+(https://trac.parrot.org) tickets as possible in the parrot queue. This will
+help us get ready for the next release of parrot: @release.version@, scheduled
+for @release.day@, @release.date at . You'll find C, parrot assembly, perl,
+documentation, and plenty of tasks to go around. Core developers will be
+available most of the day (starting at around 10am GMT) to answer questions.
+
+No experience with parrot necessary.
+
+--From: @wiki.root@@wiki.bugday at --
+
+Check the list at:
+
+https://trac.parrot.org/parrot/report/3
+
+Which contains all the tickets I'd like to see resolved in @version at . To
+see all the open tickets, use:
+
+https://trac.parrot.org/parrot/report
+
+If you've got something you're working on that you think you'll be
+getting done before the release, please
+- add a ticket for it (if necessary);
+- set its milestone to this release.
+
+Thanks in advance for your patches and commits. ^_^
+
+... Speaking of patches, we should also get through as many of these
+(accept or reject) as possible.
+
+ at web.root@@web.openpatches@
+"
+}


More information about the parrot-commits mailing list